7873 lines
4.8 MiB
Plaintext
7873 lines
4.8 MiB
Plaintext
"use strict";var molstar=(()=>{var sKe=Object.create;var WP=Object.defineProperty;var cKe=Object.getOwnPropertyDescriptor;var lKe=Object.getOwnPropertyNames;var uKe=Object.getPrototypeOf,gKe=Object.prototype.hasOwnProperty;var $5=(e=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(e,{get:(t,r)=>(typeof require<"u"?require:t)[r]}):e)(function(e){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+e+'" is not supported')});var eu=(e,t)=>()=>{try{return t||e((t={exports:{}}).exports,t),t.exports}catch(r){throw t=0,r}},ki=(e,t)=>{for(var r in t)WP(e,r,{get:t[r],enumerable:!0})},dce=(e,t,r,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let o of lKe(t))!gKe.call(e,o)&&o!==r&&WP(e,o,{get:()=>t[o],enumerable:!(n=cKe(t,o))||n.enumerable});return e};var kt=(e,t,r)=>(r=e!=null?sKe(uKe(e)):{},dce(t||!e||!e.__esModule?WP(r,"default",{value:e,enumerable:!0}):r,e)),mKe=e=>dce(WP({},"__esModule",{value:!0}),e);var The=eu(Im=>{"use strict";var gA={Remove:"remove",Replace:"replace",Add:"add"},She=Symbol.for("__MUTATIVE_PROXY_DRAFT__"),Dhe=Symbol("__MUTATIVE_RAW_RETURN_SYMBOL__"),CM=Symbol.iterator,Cm={mutable:"mutable",immutable:"immutable"},$9={};function $2(e,t){return e instanceof Map?e.has(t):Object.prototype.hasOwnProperty.call(e,t)}function Qhe(e,t){if(t in e){let r=Reflect.getPrototypeOf(e);for(;r;){let n=Reflect.getOwnPropertyDescriptor(r,t);if(n)return n;r=Reflect.getPrototypeOf(r)}}}function e8(e){return Object.getPrototypeOf(e)===Set.prototype}function t8(e){return Object.getPrototypeOf(e)===Map.prototype}function ad(e){var t;return(t=e.copy)!==null&&t!==void 0?t:e.original}function II(e){return!!Ci(e)}function Ci(e){return typeof e!="object"?null:e?.[She]}function r8(e){var t;let r=Ci(e);return r?(t=r.copy)!==null&&t!==void 0?t:r.original:e}function Ip(e,t){if(!e||typeof e!="object")return!1;let r;return Object.getPrototypeOf(e)===Object.prototype||Array.isArray(e)||e instanceof Map||e instanceof Set||!!t?.mark&&((r=t.mark(e,Cm))===Cm.immutable||typeof r=="function")}function vhe(e,t=[]){if(Object.hasOwnProperty.call(e,"key")){let r=e.parent.copy,n=Ci(CI(r,e.key));if(n!==null&&n?.original!==e.original)return null;let o=e.parent.type===3,i=o?Array.from(e.parent.setMap.keys()).indexOf(e.key):e.key;if(!(o&&r.size>i||$2(r,i)))return null;t.push(i)}if(e.parent)return vhe(e.parent,t);t.reverse();try{(function(r,n){for(let o=0;o<n.length-1;o+=1){let i=n[o];if(typeof(r=CI(hh(r)===3?Array.from(r):r,i))!="object")throw new Error(`Cannot resolve patch at '${n.join("/")}'.`)}})(e.copy,t)}catch{return null}return t}function hh(e){return Array.isArray(e)?1:e instanceof Map?2:e instanceof Set?3:0}function CI(e,t){return hh(e)===2?e.get(t):e[t]}function tR(e,t,r){hh(e)===2?e.set(t,r):e[t]=r}function J9(e,t){let r=Ci(e);return(r?ad(r):e)[t]}function Ch(e,t){return e===t?e!==0||1/e==1/t:e!=e&&t!=t}function z9(e){if(e)for(;e.finalities.revoke.length>0;)e.finalities.revoke.pop()()}function x0(e,t){return t?e:[""].concat(e).map((r=>{let n=`${r}`;return n.indexOf("/")===-1&&n.indexOf("~")===-1?n:n.replace(/~/g,"~0").replace(/\//g,"~1")})).join("/")}var wtt=Object.prototype.propertyIsEnumerable;function Fhe(e,t){let r;if(Array.isArray(e))return Array.prototype.concat.call(e);if(e instanceof Set)return e8(e)?Set.prototype.difference?Set.prototype.difference.call(e,new Set):new Set(e.values()):new(Object.getPrototypeOf(e)).constructor(e.values());if(e instanceof Map)return t8(e)?new Map(e):new(Object.getPrototypeOf(e)).constructor(e);if(t?.mark&&(r=t.mark(e,Cm),r!==void 0)&&r!==Cm.mutable){if(r===Cm.immutable)return(function(n){let o=Object.create(Object.getPrototypeOf(n));return Reflect.ownKeys(n).forEach((i=>{let a=Reflect.getOwnPropertyDescriptor(n,i);a.enumerable&&a.configurable&&a.writable?o[i]=n[i]:(a.writable||(a.writable=!0,a.configurable=!0),(a.get||a.set)&&(a={configurable:!0,writable:!0,enumerable:a.enumerable,value:n[i]}),Reflect.defineProperty(o,i,a))})),o})(e);if(typeof r=="function")return r();throw new Error(`Unsupported mark result: ${r}`)}if(typeof e=="object"&&Object.getPrototypeOf(e)===Object.prototype){let n={};return Object.keys(e).forEach((o=>{n[o]=e[o]})),Object.getOwnPropertySymbols(e).forEach((o=>{wtt.call(e,o)&&(n[o]=e[o])})),n}throw new Error("Please check mark() to ensure that it is a stable marker draftable function.")}function xg(e){e.copy||(e.copy=Fhe(e.original,e.options))}function PD(e){if(!Ip(e))return r8(e);if(Array.isArray(e))return e.map(PD);if(e instanceof Map){let r=Array.from(e.entries()).map((([n,o])=>[n,PD(o)]));return t8(e)?new Map(r):new(Object.getPrototypeOf(e)).constructor(r)}if(e instanceof Set){let r=Array.from(e).map(PD);return e8(e)?new Set(r):new(Object.getPrototypeOf(e)).constructor(r)}let t=Object.create(Object.getPrototypeOf(e));for(let r in e)t[r]=PD(e[r]);return t}function IM(e){return II(e)?PD(e):e}function BI(e){var t;e.assignedMap=(t=e.assignedMap)!==null&&t!==void 0?t:new Map,e.operated||(e.operated=!0,e.parent&&BI(e.parent))}function Ehe(){throw new Error("Cannot modify frozen object")}function q2(e){return e&&typeof e=="object"&&!Object.isFrozen(e)}function TD(e,t,r,n,o){if(!(Object.isFrozen(e)||II(e)))switch(hh(e)){case 2:for(let[i,a]of e)q2(i)&&TD(i),q2(a)&&TD(a);e.set=e.clear=e.delete=Ehe;break;case 3:for(let i of e)q2(i)&&TD(i);e.add=e.clear=e.delete=Ehe;break;case 1:Object.freeze(e);for(let i of e)q2(i)&&TD(i);break;default:Object.freeze(e),Object.keys(e).forEach((i=>{let a=e[i];q2(a)&&TD(a)}))}}function n8(e,t){let r=hh(e);if(r===0)Reflect.ownKeys(e).forEach((n=>{t(n,e[n],e)}));else if(r===1){let n=0;for(let o of e)t(n,o,e),n+=1}else e.forEach(((n,o)=>t(o,n,e)))}function whe(e,t,r){if(II(e)||!Ip(e,r)||t.has(e)||Object.isFrozen(e))return;let n=e instanceof Set,o=n?new Map:void 0;if(t.add(e),n8(e,((i,a)=>{var A;if(II(a)){let s=Ci(a);xg(s);let c=!((A=s.assignedMap)===null||A===void 0)&&A.size||s.operated?s.copy:s.original;tR(n?o:e,i,c)}else whe(a,t,r)})),o){let i=e,a=Array.from(i);i.clear(),a.forEach((A=>{i.add(o.has(A)?o.get(A):A)}))}}function Rtt(e,t){let r=e.type===3?e.setMap:e.copy;e.finalities.revoke.length>1&&e.assignedMap.get(t)&&r&&whe(CI(r,t),e.finalities.handledSet,e.options)}function K9(e){e.type===3&&e.copy&&(e.copy.clear(),e.setMap.forEach((t=>{e.copy.add(r8(t))})))}function j9(e,t,r,n){if(e.operated&&e.assignedMap&&e.assignedMap.size>0&&!e.finalized){if(r&&n){let o=vhe(e);o&&t(e,o,r,n)}e.finalized=!0}}function o8(e,t,r,n){let o=Ci(r);o&&(o.callbacks||(o.callbacks=[]),o.callbacks.push(((i,a)=>{let A=e.type===3?e.setMap:e.copy;if(Ch(CI(A,t),r)){let s=o.original;o.copy&&(s=o.copy),K9(e),j9(e,n,i,a),tR(A,t,s)}})),e.options.enableAutoFreeze&&o.finalities!==e.finalities&&(e.options.enableAutoFreeze=!1)),Ip(r,e.options)&&e.finalities.draft.push((()=>{Ch(CI(e.type===3?e.setMap:e.copy,t),r)&&Rtt(e,t)}))}function eR(e,t,r,n){let{pathAsArray:o=!0}=e.options.enablePatches;switch(e.type){case 0:case 2:return(function({original:i,copy:a,assignedMap:A},s,c,l,u){A.forEach(((g,m)=>{let p=CI(i,m),d=IM(CI(a,m)),f=g?$2(i,m)?gA.Replace:gA.Add:gA.Remove;if(Ch(p,d)&&f===gA.Replace)return;let I=x0(s.concat(m),u);c.push(f===gA.Remove?{op:f,path:I}:{op:f,path:I,value:d}),l.push(f===gA.Add?{op:gA.Remove,path:I}:f===gA.Remove?{op:gA.Add,path:I,value:p}:{op:gA.Replace,path:I,value:p})}))})(e,t,r,n,o);case 1:return(function(i,a,A,s,c){let{original:l,assignedMap:u,options:g}=i,m=i.copy;m.length<l.length&&([l,m]=[m,l],[A,s]=[s,A]);for(let p=0;p<l.length;p+=1)if(u.get(p.toString())&&m[p]!==l[p]){let d=x0(a.concat([p]),c);A.push({op:gA.Replace,path:d,value:IM(m[p])}),s.push({op:gA.Replace,path:d,value:IM(l[p])})}for(let p=l.length;p<m.length;p+=1){let d=x0(a.concat([p]),c);A.push({op:gA.Add,path:d,value:IM(m[p])})}if(l.length<m.length){let{arrayLengthAssignment:p=!0}=g.enablePatches;if(p){let d=x0(a.concat(["length"]),c);s.push({op:gA.Replace,path:d,value:l.length})}else for(let d=m.length;l.length<d;d-=1){let f=x0(a.concat([d-1]),c);s.push({op:gA.Remove,path:f})}}})(e,t,r,n,o);case 3:return(function({original:i,copy:a},A,s,c,l){let u=0;i.forEach((g=>{if(!a.has(g)){let m=x0(A.concat([u]),l);s.push({op:gA.Remove,path:m,value:g}),c.unshift({op:gA.Add,path:m,value:g})}u+=1})),u=0,a.forEach((g=>{if(!i.has(g)){let m=x0(A.concat([u]),l);s.push({op:gA.Add,path:m,value:g}),c.unshift({op:gA.Remove,path:m,value:g})}u+=1}))})(e,t,r,n,o)}}var W9=!1,hM=(e,t,r=!1)=>{if(typeof e=="object"&&e!==null&&(!Ip(e,t)||r)&&!W9)throw new Error("Strict mode: Mutable data cannot be accessed directly, please use 'unsafe(callback)' wrap.")},X9={get size(){return ad(Ci(this)).size},has(e){return ad(Ci(this)).has(e)},set(e,t){let r=Ci(this),n=ad(r);return n.has(e)&&Ch(n.get(e),t)||(xg(r),BI(r),r.assignedMap.set(e,!0),r.copy.set(e,t),o8(r,e,t,eR)),this},delete(e){if(!this.has(e))return!1;let t=Ci(this);return xg(t),BI(t),t.original.has(e)?t.assignedMap.set(e,!1):t.assignedMap.delete(e),t.copy.delete(e),!0},clear(){let e=Ci(this);if(this.size){xg(e),BI(e),e.assignedMap=new Map;for(let[t]of e.original)e.assignedMap.set(t,!1);e.copy.clear()}},forEach(e,t){ad(Ci(this)).forEach(((r,n)=>{e.call(t,this.get(n),n,this)}))},get(e){var t,r;let n=Ci(this),o=ad(n).get(e),i=((r=(t=n.options).mark)===null||r===void 0?void 0:r.call(t,o,Cm))===Cm.mutable;if(n.options.strict&&hM(o,n.options,i),i||n.finalized||!Ip(o,n.options)||o!==n.original.get(e))return o;let a=$9.createDraft({original:o,parentDraft:n,key:e,finalities:n.finalities,options:n.options});return xg(n),n.copy.set(e,a),a},keys(){return ad(Ci(this)).keys()},values(){let e=this.keys();return{[CM]:()=>this.values(),next:()=>{let t=e.next();return t.done?t:{done:!1,value:this.get(t.value)}}}},entries(){let e=this.keys();return{[CM]:()=>this.entries(),next:()=>{let t=e.next();if(t.done)return t;let r=this.get(t.value);return{done:!1,value:[t.value,r]}}}},[CM](){return this.entries()}},Utt=Reflect.ownKeys(X9),bhe=(e,t,{isValuesIterator:r})=>()=>{var n,o;let i=t.next();if(i.done)return i;let a=i.value,A=e.setMap.get(a),s=Ci(A),c=((o=(n=e.options).mark)===null||o===void 0?void 0:o.call(n,A,Cm))===Cm.mutable;if(e.options.strict&&hM(a,e.options,c),c||s||!Ip(a,e.options)||e.finalized||!e.original.has(a))s&&(A=s.proxy);else{let l=$9.createDraft({original:a,parentDraft:e,key:a,finalities:e.finalities,options:e.options});e.setMap.set(a,l),A=l}return{done:!1,value:r?A:[A,A]}},yM={get size(){return Ci(this).setMap.size},has(e){let t=Ci(this);if(t.setMap.has(e))return!0;xg(t);let r=Ci(e);return!(!r||!t.setMap.has(r.original))},add(e){let t=Ci(this);return this.has(e)||(xg(t),BI(t),t.assignedMap.set(e,!0),t.setMap.set(e,e),o8(t,e,e,eR)),this},delete(e){if(!this.has(e))return!1;let t=Ci(this);xg(t),BI(t);let r=Ci(e);return r&&t.setMap.has(r.original)?(t.assignedMap.set(r.original,!1),t.setMap.delete(r.original)):(!r&&t.setMap.has(e)?t.assignedMap.set(e,!1):t.assignedMap.delete(e),t.setMap.delete(e))},clear(){if(!this.size)return;let e=Ci(this);xg(e),BI(e);for(let t of e.original)e.assignedMap.set(t,!1);e.setMap.clear()},values(){let e=Ci(this);xg(e);let t=e.setMap.keys();return{[Symbol.iterator]:()=>this.values(),next:bhe(e,t,{isValuesIterator:!0})}},entries(){let e=Ci(this);xg(e);let t=e.setMap.keys();return{[Symbol.iterator]:()=>this.entries(),next:bhe(e,t,{isValuesIterator:!1})}},keys(){return this.values()},[CM](){return this.values()},forEach(e,t){let r=this.values(),n=r.next();for(;!n.done;)e.call(t,n.value,n.value,this),n=r.next()}};Set.prototype.difference&&Object.assign(yM,{intersection(e){return Set.prototype.intersection.call(new Set(this.values()),e)},union(e){return Set.prototype.union.call(new Set(this.values()),e)},difference(e){return Set.prototype.difference.call(new Set(this.values()),e)},symmetricDifference(e){return Set.prototype.symmetricDifference.call(new Set(this.values()),e)},isSubsetOf(e){return Set.prototype.isSubsetOf.call(new Set(this.values()),e)},isSupersetOf(e){return Set.prototype.isSupersetOf.call(new Set(this.values()),e)},isDisjointFrom(e){return Set.prototype.isDisjointFrom.call(new Set(this.values()),e)}});var Ltt=Reflect.ownKeys(yM),Rhe={get(e,t,r){var n,o;let i=(n=e.copy)===null||n===void 0?void 0:n[t];if(i&&e.finalities.draftsCache.has(i))return i;if(t===She)return e;let a;if(e.options.mark){let c=t==="size"&&(e.original instanceof Map||e.original instanceof Set)?Reflect.get(e.original,t):Reflect.get(e.original,t,r);if(a=e.options.mark(c,Cm),a===Cm.mutable)return e.options.strict&&hM(c,e.options,!0),c}let A=ad(e);if(A instanceof Map&&Utt.includes(t))return t==="size"?Object.getOwnPropertyDescriptor(X9,"size").get.call(e.proxy):X9[t].bind(e.proxy);if(A instanceof Set&&Ltt.includes(t))return t==="size"?Object.getOwnPropertyDescriptor(yM,"size").get.call(e.proxy):yM[t].bind(e.proxy);if(!$2(A,t)){let c=Qhe(A,t);return c?"value"in c?c.value:(o=c.get)===null||o===void 0?void 0:o.call(e.proxy):void 0}let s=A[t];if(e.options.strict&&hM(s,e.options),e.finalized||!Ip(s,e.options))return s;if(s===J9(e.original,t)){if(xg(e),e.copy[t]=i8({original:e.original[t],parentDraft:e,key:e.type===1?Number(t):t,finalities:e.finalities,options:e.options}),typeof a=="function"){let c=Ci(e.copy[t]);return xg(c),BI(c),c.copy}return e.copy[t]}return II(s)&&e.finalities.draftsCache.add(s),s},set(e,t,r){var n;if(e.type===3||e.type===2)throw new Error("Map/Set draft does not support any property assignment.");let o;if(e.type===1&&t!=="length"&&(!(Number.isInteger(o=Number(t))&&o>=0)||t!==0&&o!==0&&String(o)!==String(t)))throw new Error("Only supports setting array indices and the 'length' property.");let i=Qhe(ad(e),t);if(i?.set)return i.set.call(e.proxy,r),!0;let a=J9(ad(e),t),A=Ci(a);return A&&Ch(A.original,r)?(e.copy[t]=r,e.assignedMap=(n=e.assignedMap)!==null&&n!==void 0?n:new Map,e.assignedMap.set(t,!1),!0):(Ch(r,a)&&(r!==void 0||$2(e.original,t))||(xg(e),BI(e),$2(e.original,t)&&Ch(r,e.original[t])?e.assignedMap.delete(t):e.assignedMap.set(t,!0),e.copy[t]=r,o8(e,t,r,eR)),!0)},has:(e,t)=>t in ad(e),ownKeys:e=>Reflect.ownKeys(ad(e)),getOwnPropertyDescriptor(e,t){let r=ad(e),n=Reflect.getOwnPropertyDescriptor(r,t);return n&&{writable:!0,configurable:e.type!==1||t!=="length",enumerable:n.enumerable,value:r[t]}},getPrototypeOf:e=>Reflect.getPrototypeOf(e.original),setPrototypeOf(){throw new Error("Cannot call 'setPrototypeOf()' on drafts")},defineProperty(){throw new Error("Cannot call 'defineProperty()' on drafts")},deleteProperty(e,t){var r;return e.type===1?Rhe.set.call(this,e,t,void 0,e.proxy):(J9(e.original,t)!==void 0||t in e.original?(xg(e),BI(e),e.assignedMap.set(t,!1)):(e.assignedMap=(r=e.assignedMap)!==null&&r!==void 0?r:new Map,e.assignedMap.delete(t)),e.copy&&delete e.copy[t],!0)}};function i8(e){let{original:t,parentDraft:r,key:n,finalities:o,options:i}=e,a=hh(t),A={type:a,finalized:!1,parent:r,original:t,copy:null,proxy:null,finalities:o,options:i,setMap:a===3?new Map(t.entries()):void 0};(n||"key"in e)&&(A.key=n);let{proxy:s,revoke:c}=Proxy.revocable(a===1?Object.assign([],A):A,Rhe);if(o.revoke.push(c),A.proxy=s,r){let l=r;l.finalities.draft.push(((u,g)=>{var m;let p=Ci(s),d=l.type===3?l.setMap:l.copy,f=CI(d,n),I=Ci(f);if(I){let C=I.original;I.operated&&(C=r8(f)),K9(I),j9(I,eR,u,g),tR(d,n,C)}(m=p.callbacks)===null||m===void 0||m.forEach((C=>{C(u,g)}))}))}else{let l=Ci(s);l.finalities.draft.push(((u,g)=>{K9(l),j9(l,eR,u,g)}))}return s}function Ttt(e,t,r,n,o){var i;let a=Ci(e),A=(i=a?.original)!==null&&i!==void 0?i:e,s=!!t.length;if(a?.operated)for(;a.finalities.draft.length>0;)a.finalities.draft.pop()(r,n);let c=s?t[0]:a?a.operated?a.copy:a.original:e;return a&&z9(a),o&&TD(c,0,a==null||a.options.updatedValues),[c,r&&s?[{op:gA.Replace,path:[],value:t[0]}]:r,n&&s?[{op:gA.Replace,path:[],value:A}]:n]}function Z9(e){let{rootDraft:t,value:r,useRawReturn:n=!1,isRoot:o=!0}=e;n8(r,((i,a,A)=>{let s=Ci(a);if(s&&t&&s.finalities===t.finalities){e.isContainDraft=!0;let c=s.original;if(A instanceof Set){let l=Array.from(A);A.clear(),l.forEach((u=>A.add(i===u?c:u)))}else tR(A,i,c)}else typeof a=="object"&&a!==null&&(e.value=a,e.isRoot=!1,Z9(e))}))}function Uhe(e){var t;let r=Ci(e);if(!Ip(e,r?.options))return e;let n=hh(e);if(r&&!r.operated)return r.original;let o;function i(){o=n===2?t8(e)?new Map(e):new(Object.getPrototypeOf(e)).constructor(e):n===3?Array.from(r.setMap.values()):Fhe(e,r?.options)}if(r){r.finalized=!0;try{i()}finally{r.finalized=!1}}else o=e;if(n8(o,((a,A)=>{if(r&&Ch(CI(r.original,a),A))return;let s=Uhe(A);s!==A&&(o===e&&i(),tR(o,a,s))})),n===3){let a=(t=r?.original)!==null&&t!==void 0?t:o;return e8(a)?new Set(o):new(Object.getPrototypeOf(a)).constructor(o)}return o}function q9(e){if(!II(e))throw new Error(`current() is only used for Draft, parameter: ${e}`);return Uhe(e)}$9.createDraft=i8;var Lhe=e=>function t(r,n,o){var i,a,A;if(typeof r=="function"&&typeof n!="function")return function(Q,...E){return t(Q,(b=>r.call(this,b,...E)),n)};let s=r,c=n,l=o;typeof n!="function"&&(l=n),l=Object.assign(Object.assign({},e),l);let u=II(s)?q9(s):s,g=Array.isArray(l.mark)?(Q,E)=>{for(let b of l.mark){let x=b(Q,E);if(x)return x}}:l.mark,m=(i=l.enablePatches)!==null&&i!==void 0&&i,p=(a=l.strict)!==null&&a!==void 0&&a,d={enableAutoFreeze:(A=l.enableAutoFreeze)!==null&&A!==void 0&&A,mark:g,strict:p,enablePatches:m};if(!Ip(u,d)&&typeof u=="object"&&u!==null)throw new Error("Invalid base state: create() only supports plain objects, arrays, Set, Map or using mark() to mark the state as immutable.");let[f,I]=(function(Q,E){var b;let x={draft:[],revoke:[],handledSet:new WeakSet,draftsCache:new WeakSet},S,w;E.enablePatches&&(S=[],w=[]);let R=((b=E.mark)===null||b===void 0?void 0:b.call(E,Q,Cm))!==Cm.mutable&&Ip(Q,E)?i8({original:Q,parentDraft:null,finalities:x,options:E}):Q;return[R,(T=[])=>{let[L,F,v]=Ttt(R,T,S,w,E.enableAutoFreeze);return E.enablePatches?[L,F,v]:L}]})(u,d);if(typeof n!="function"){if(!Ip(u,d))throw new Error("Invalid base state: create() only supports plain objects, arrays, Set, Map or using mark() to mark the state as immutable.");return[f,I]}let C;try{C=c(f)}catch(Q){throw z9(Ci(f)),Q}let y=Q=>{let E=Ci(f);if(!II(Q)){if(Q!==void 0&&!Ch(Q,f)&&E?.operated)throw new Error("Either the value is returned as a new non-draft value, or only the draft is modified without returning any value.");let x=Q?.[Dhe];if(x){let S=x[0];return d.strict&&typeof Q=="object"&&Q!==null&&Z9({rootDraft:E,value:Q,useRawReturn:!0}),I([S])}if(Q!==void 0)return typeof Q=="object"&&Q!==null&&Z9({rootDraft:E,value:Q}),I([Q])}if(Q===f||Q===void 0)return I([]);let b=Ci(Q);if(d===b.options){if(b.operated)throw new Error("Cannot return a modified child draft.");return I([q9(Q)])}return I([Q])};return C instanceof Promise?C.then(y,(Q=>{throw z9(Ci(f)),Q})):y(C)},xhe=Lhe(),Ptt=Object.prototype.constructor.toString();Im.apply=function(e,t,r){let n;for(n=t.length-1;n>=0;n-=1){let{value:i,op:a,path:A}=t[n];if(!A.length&&a===gA.Replace||A===""&&a===gA.Add){e=i;break}}n>-1&&(t=t.slice(n+1));let o=i=>{t.forEach((a=>{let{path:A,op:s}=a,c=(function(p){return Array.isArray(p)?p:p.split("/").map((d=>d.replace(/~1/g,"/").replace(/~0/g,"~"))).slice(1)})(A),l=i;for(let p=0;p<c.length-1;p+=1){let d=hh(l),f=c[p];if(typeof f!="string"&&typeof f!="number"&&(f=String(f)),(d===0||d===1)&&(f==="__proto__"||f==="constructor")||typeof l=="function"&&f==="prototype")throw new Error("Patching reserved attributes like __proto__ and constructor is not allowed.");if(l=CI(d===3?Array.from(l):l,f),typeof l!="object")throw new Error(`Cannot apply patch at '${c.join("/")}'.`)}let u=hh(l),g=PD(a.value),m=c[c.length-1];switch(s){case gA.Replace:switch(u){case 2:return l.set(m,g);case 3:throw new Error("Cannot apply replace patch to set.");default:return l[m]=g}case gA.Add:switch(u){case 1:return m==="-"?l.push(g):l.splice(m,0,g);case 2:return l.set(m,g);case 3:return l.add(g);default:return l[m]=g}case gA.Remove:switch(u){case 1:return l.splice(m,1);case 2:return l.delete(m);case 3:return l.delete(a.value);default:return delete l[m]}default:throw new Error(`Unsupported patch operation: ${s}.`)}}))};if(!r?.mutable){if(II(e)){if(r!==void 0)throw new Error("Cannot apply patches with options to a draft.");return o(e),e}return xhe(e,o,Object.assign(Object.assign({},r),{enablePatches:!1}))}o(e)},Im.castDraft=function(e){return e},Im.castImmutable=function(e){return e},Im.castMutable=function(e){return e},Im.create=xhe,Im.current=q9,Im.isDraft=II,Im.isDraftable=Ip,Im.makeCreator=Lhe,Im.markSimpleObject=e=>{if((t=>{if(!t||typeof t!="object")return!1;let r=Object.getPrototypeOf(t);if(r===null)return!0;let n=Object.hasOwnProperty.call(r,"constructor")&&r.constructor;return n===Object||typeof n=="function"&&Function.toString.call(n)===Ptt})(e))return Cm.immutable},Im.original=function(e){let t=Ci(e);if(!t)throw new Error(`original() is only used for a draft, parameter: ${e}`);return t.original},Im.rawReturn=function(e){if(arguments.length===0)throw new Error("rawReturn() must be called with a value.");if(arguments.length>1)throw new Error("rawReturn() must be called with one argument.");return{[Dhe]:[e]}},Im.unsafe=function(e){let t;W9=!0;try{t=e()}finally{W9=!1}return t}});var Ghe=eu((cvr,Phe)=>{"use strict";Phe.exports=The()});var $Pe=eu(Ei=>{"use strict";var uL=Symbol.for("react.element"),dDt=Symbol.for("react.portal"),pDt=Symbol.for("react.fragment"),fDt=Symbol.for("react.strict_mode"),BDt=Symbol.for("react.profiler"),IDt=Symbol.for("react.provider"),CDt=Symbol.for("react.context"),hDt=Symbol.for("react.forward_ref"),yDt=Symbol.for("react.suspense"),QDt=Symbol.for("react.memo"),EDt=Symbol.for("react.lazy"),_Pe=Symbol.iterator;function bDt(e){return e===null||typeof e!="object"?null:(e=_Pe&&e[_Pe]||e["@@iterator"],typeof e=="function"?e:null)}var JPe={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},zPe=Object.assign,KPe={};function s1(e,t,r){this.props=e,this.context=t,this.refs=KPe,this.updater=r||JPe}s1.prototype.isReactComponent={};s1.prototype.setState=function(e,t){if(typeof e!="object"&&typeof e!="function"&&e!=null)throw Error("setState(...): takes an object of state variables to update or a function which returns an object of state variables.");this.updater.enqueueSetState(this,e,t,"setState")};s1.prototype.forceUpdate=function(e){this.updater.enqueueForceUpdate(this,e,"forceUpdate")};function jPe(){}jPe.prototype=s1.prototype;function V$(e,t,r){this.props=e,this.context=t,this.refs=KPe,this.updater=r||JPe}var _$=V$.prototype=new jPe;_$.constructor=V$;zPe(_$,s1.prototype);_$.isPureReactComponent=!0;var YPe=Array.isArray,WPe=Object.prototype.hasOwnProperty,Y$={current:null},XPe={key:!0,ref:!0,__self:!0,__source:!0};function ZPe(e,t,r){var n,o={},i=null,a=null;if(t!=null)for(n in t.ref!==void 0&&(a=t.ref),t.key!==void 0&&(i=""+t.key),t)WPe.call(t,n)&&!XPe.hasOwnProperty(n)&&(o[n]=t[n]);var A=arguments.length-2;if(A===1)o.children=r;else if(1<A){for(var s=Array(A),c=0;c<A;c++)s[c]=arguments[c+2];o.children=s}if(e&&e.defaultProps)for(n in A=e.defaultProps,A)o[n]===void 0&&(o[n]=A[n]);return{$$typeof:uL,type:e,key:i,ref:a,props:o,_owner:Y$.current}}function xDt(e,t){return{$$typeof:uL,type:e.type,key:t,ref:e.ref,props:e.props,_owner:e._owner}}function O$(e){return typeof e=="object"&&e!==null&&e.$$typeof===uL}function SDt(e){var t={"=":"=0",":":"=2"};return"$"+e.replace(/[=:]/g,function(r){return t[r]})}var OPe=/\/+/g;function H$(e,t){return typeof e=="object"&&e!==null&&e.key!=null?SDt(""+e.key):t.toString(36)}function k_(e,t,r,n,o){var i=typeof e;(i==="undefined"||i==="boolean")&&(e=null);var a=!1;if(e===null)a=!0;else switch(i){case"string":case"number":a=!0;break;case"object":switch(e.$$typeof){case uL:case dDt:a=!0}}if(a)return a=e,o=o(a),e=n===""?"."+H$(a,0):n,YPe(o)?(r="",e!=null&&(r=e.replace(OPe,"$&/")+"/"),k_(o,t,r,"",function(c){return c})):o!=null&&(O$(o)&&(o=xDt(o,r+(!o.key||a&&a.key===o.key?"":(""+o.key).replace(OPe,"$&/")+"/")+e)),t.push(o)),1;if(a=0,n=n===""?".":n+":",YPe(e))for(var A=0;A<e.length;A++){i=e[A];var s=n+H$(i,A);a+=k_(i,t,r,s,o)}else if(s=bDt(e),typeof s=="function")for(e=s.call(e),A=0;!(i=e.next()).done;)i=i.value,s=n+H$(i,A++),a+=k_(i,t,r,s,o);else if(i==="object")throw t=String(e),Error("Objects are not valid as a React child (found: "+(t==="[object Object]"?"object with keys {"+Object.keys(e).join(", ")+"}":t)+"). If you meant to render a collection of children, use an array instead.");return a}function M_(e,t,r){if(e==null)return e;var n=[],o=0;return k_(e,n,"","",function(i){return t.call(r,i,o++)}),n}function DDt(e){if(e._status===-1){var t=e._result;t=t(),t.then(function(r){(e._status===0||e._status===-1)&&(e._status=1,e._result=r)},function(r){(e._status===0||e._status===-1)&&(e._status=2,e._result=r)}),e._status===-1&&(e._status=0,e._result=t)}if(e._status===1)return e._result.default;throw e._result}var kg={current:null},H_={transition:null},vDt={ReactCurrentDispatcher:kg,ReactCurrentBatchConfig:H_,ReactCurrentOwner:Y$};function qPe(){throw Error("act(...) is not supported in production builds of React.")}Ei.Children={map:M_,forEach:function(e,t,r){M_(e,function(){t.apply(this,arguments)},r)},count:function(e){var t=0;return M_(e,function(){t++}),t},toArray:function(e){return M_(e,function(t){return t})||[]},only:function(e){if(!O$(e))throw Error("React.Children.only expected to receive a single React element child.");return e}};Ei.Component=s1;Ei.Fragment=pDt;Ei.Profiler=BDt;Ei.PureComponent=V$;Ei.StrictMode=fDt;Ei.Suspense=yDt;Ei.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED=vDt;Ei.act=qPe;Ei.cloneElement=function(e,t,r){if(e==null)throw Error("React.cloneElement(...): The argument must be a React element, but you passed "+e+".");var n=zPe({},e.props),o=e.key,i=e.ref,a=e._owner;if(t!=null){if(t.ref!==void 0&&(i=t.ref,a=Y$.current),t.key!==void 0&&(o=""+t.key),e.type&&e.type.defaultProps)var A=e.type.defaultProps;for(s in t)WPe.call(t,s)&&!XPe.hasOwnProperty(s)&&(n[s]=t[s]===void 0&&A!==void 0?A[s]:t[s])}var s=arguments.length-2;if(s===1)n.children=r;else if(1<s){A=Array(s);for(var c=0;c<s;c++)A[c]=arguments[c+2];n.children=A}return{$$typeof:uL,type:e.type,key:o,ref:i,props:n,_owner:a}};Ei.createContext=function(e){return e={$$typeof:CDt,_currentValue:e,_currentValue2:e,_threadCount:0,Provider:null,Consumer:null,_defaultValue:null,_globalName:null},e.Provider={$$typeof:IDt,_context:e},e.Consumer=e};Ei.createElement=ZPe;Ei.createFactory=function(e){var t=ZPe.bind(null,e);return t.type=e,t};Ei.createRef=function(){return{current:null}};Ei.forwardRef=function(e){return{$$typeof:hDt,render:e}};Ei.isValidElement=O$;Ei.lazy=function(e){return{$$typeof:EDt,_payload:{_status:-1,_result:e},_init:DDt}};Ei.memo=function(e,t){return{$$typeof:QDt,type:e,compare:t===void 0?null:t}};Ei.startTransition=function(e){var t=H_.transition;H_.transition={};try{e()}finally{H_.transition=t}};Ei.unstable_act=qPe;Ei.useCallback=function(e,t){return kg.current.useCallback(e,t)};Ei.useContext=function(e){return kg.current.useContext(e)};Ei.useDebugValue=function(){};Ei.useDeferredValue=function(e){return kg.current.useDeferredValue(e)};Ei.useEffect=function(e,t){return kg.current.useEffect(e,t)};Ei.useId=function(){return kg.current.useId()};Ei.useImperativeHandle=function(e,t,r){return kg.current.useImperativeHandle(e,t,r)};Ei.useInsertionEffect=function(e,t){return kg.current.useInsertionEffect(e,t)};Ei.useLayoutEffect=function(e,t){return kg.current.useLayoutEffect(e,t)};Ei.useMemo=function(e,t){return kg.current.useMemo(e,t)};Ei.useReducer=function(e,t,r){return kg.current.useReducer(e,t,r)};Ei.useRef=function(e){return kg.current.useRef(e)};Ei.useState=function(e){return kg.current.useState(e)};Ei.useSyncExternalStore=function(e,t,r){return kg.current.useSyncExternalStore(e,t,r)};Ei.useTransition=function(){return kg.current.useTransition()};Ei.version="18.3.1"});var Qa=eu((T8n,eGe)=>{"use strict";eGe.exports=$Pe()});var rGe=eu(V_=>{"use strict";var FDt=Qa(),wDt=Symbol.for("react.element"),RDt=Symbol.for("react.fragment"),UDt=Object.prototype.hasOwnProperty,LDt=FDt.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner,TDt={key:!0,ref:!0,__self:!0,__source:!0};function tGe(e,t,r){var n,o={},i=null,a=null;r!==void 0&&(i=""+r),t.key!==void 0&&(i=""+t.key),t.ref!==void 0&&(a=t.ref);for(n in t)UDt.call(t,n)&&!TDt.hasOwnProperty(n)&&(o[n]=t[n]);if(e&&e.defaultProps)for(n in t=e.defaultProps,t)o[n]===void 0&&(o[n]=t[n]);return{$$typeof:wDt,type:e,key:i,ref:a,props:o,_owner:LDt.current}}V_.Fragment=RDt;V_.jsx=tGe;V_.jsxs=tGe});var Qr=eu((G8n,nGe)=>{"use strict";nGe.exports=rGe()});var XMe=eu((sao,WMe)=>{"use strict";WMe.exports=(function(e){var t={};function r(n){if(t[n])return t[n].exports;var o=t[n]={i:n,l:!1,exports:{}};return e[n].call(o.exports,o,o.exports,r),o.l=!0,o.exports}return r.m=e,r.c=t,r.d=function(n,o,i){r.o(n,o)||Object.defineProperty(n,o,{enumerable:!0,get:i})},r.r=function(n){typeof Symbol<"u"&&Symbol.toStringTag&&Object.defineProperty(n,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(n,"__esModule",{value:!0})},r.t=function(n,o){if(1&o&&(n=r(n)),8&o||4&o&&typeof n=="object"&&n&&n.__esModule)return n;var i=Object.create(null);if(r.r(i),Object.defineProperty(i,"default",{enumerable:!0,value:n}),2&o&&typeof n!="string")for(var a in n)r.d(i,a,function(A){return n[A]}.bind(null,a));return i},r.n=function(n){var o=n&&n.__esModule?function(){return n.default}:function(){return n};return r.d(o,"a",o),o},r.o=function(n,o){return Object.prototype.hasOwnProperty.call(n,o)},r.p="",r(r.s=2)})([function(e,t){e.exports=$5("path")},function(e,t,r){(function(n,o){var i,a=(i=(i=typeof document<"u"&&document.currentScript?document.currentScript.src:void 0)||n,function(A){var s;A=A||{},s||(s=A!==void 0?A:{});var c,l={};for(c in s)s.hasOwnProperty(c)&&(l[c]=s[c]);var u,g,m,p,d="./this.program";u=typeof window=="object",g=typeof importScripts=="function",m=typeof process=="object"&&typeof process.versions=="object"&&typeof process.versions.node=="string",p=!u&&!m&&!g;var f,I,C,y,Q="";m?(Q=g?r(0).dirname(Q)+"/":o+"/",f=function(P,V){var Z=TS(P);return Z?V?Z:Z.toString():(C||(C=r(3)),y||(y=r(0)),P=y.normalize(P),C.readFileSync(P,V?null:"utf8"))},I=function(P){return(P=f(P,!0)).buffer||(P=new Uint8Array(P)),L(P.buffer),P},1<process.argv.length&&(d=process.argv[1].replace(/\\/g,"/")),process.argv.slice(2),process.on("uncaughtException",(function(P){throw P})),process.on("unhandledRejection",Mt),s.inspect=function(){return"[Emscripten Module object]"}):p?(typeof read<"u"&&(f=function(P){var V=TS(P);return V?Fse(V):read(P)}),I=function(P){var V;return(V=TS(P))?V:typeof readbuffer=="function"?new Uint8Array(readbuffer(P)):(L(typeof(V=read(P,"binary"))=="object"),V)},typeof print<"u"&&(typeof console>"u"&&(console={}),console.log=print,console.warn=console.error=typeof printErr<"u"?printErr:print)):(u||g)&&(g?Q=self.location.href:document.currentScript&&(Q=document.currentScript.src),i&&(Q=i),Q=Q.indexOf("blob:")!==0?Q.substr(0,Q.lastIndexOf("/")+1):"",f=function(P){try{var V=new XMLHttpRequest;return V.open("GET",P,!1),V.send(null),V.responseText}catch(Z){if(P=TS(P))return Fse(P);throw Z}},g&&(I=function(P){try{var V=new XMLHttpRequest;return V.open("GET",P,!1),V.responseType="arraybuffer",V.send(null),new Uint8Array(V.response)}catch(Z){if(P=TS(P))return P;throw Z}}));var E=s.print||console.log.bind(console),b=s.printErr||console.warn.bind(console);for(c in l)l.hasOwnProperty(c)&&(s[c]=l[c]);l=null,s.thisProgram&&(d=s.thisProgram);var x,S=0;s.wasmBinary&&(x=s.wasmBinary),s.noExitRuntime&&s.noExitRuntime,typeof WebAssembly!="object"&&b("no native wasm support detected");var w,R=new WebAssembly.Table({initial:1182,maximum:1182,element:"anyfunc"}),T=!1;function L(P,V){P||Mt("Assertion failed: "+V)}var F=typeof TextDecoder<"u"?new TextDecoder("utf8"):void 0;function v(P,V,Z){var re=V+Z;for(Z=V;P[Z]&&!(Z>=re);)++Z;if(16<Z-V&&P.subarray&&F)return F.decode(P.subarray(V,Z));for(re="";V<Z;){var xe=P[V++];if(128&xe){var Pe=63&P[V++];if((224&xe)==192)re+=String.fromCharCode((31&xe)<<6|Pe);else{var nt=63&P[V++];65536>(xe=(240&xe)==224?(15&xe)<<12|Pe<<6|nt:(7&xe)<<18|Pe<<12|nt<<6|63&P[V++])?re+=String.fromCharCode(xe):(xe-=65536,re+=String.fromCharCode(55296|xe>>10,56320|1023&xe))}}else re+=String.fromCharCode(xe)}return re}function U(P){return P?v(H,P,void 0):""}function G(P,V,Z,re){if(!(0<re))return 0;var xe=Z;re=Z+re-1;for(var Pe=0;Pe<P.length;++Pe){var nt=P.charCodeAt(Pe);if(55296<=nt&&57343>=nt&&(nt=65536+((1023&nt)<<10)|1023&P.charCodeAt(++Pe)),127>=nt){if(Z>=re)break;V[Z++]=nt}else{if(2047>=nt){if(Z+1>=re)break;V[Z++]=192|nt>>6}else{if(65535>=nt){if(Z+2>=re)break;V[Z++]=224|nt>>12}else{if(Z+3>=re)break;V[Z++]=240|nt>>18,V[Z++]=128|nt>>12&63}V[Z++]=128|nt>>6&63}V[Z++]=128|63&nt}}return V[Z]=0,Z-xe}function N(P){for(var V=0,Z=0;Z<P.length;++Z){var re=P.charCodeAt(Z);55296<=re&&57343>=re&&(re=65536+((1023&re)<<10)|1023&P.charCodeAt(++Z)),127>=re?++V:V=2047>=re?V+2:65535>=re?V+3:V+4}return V}var k,J,H,z,_,M,q,ne,oe,ae=typeof TextDecoder<"u"?new TextDecoder("utf-16le"):void 0;function me(P){var V;for(V=P>>1;z[V];)++V;if(32<(V<<=1)-P&&ae)return ae.decode(H.subarray(P,V));V=0;for(var Z="";;){var re=z[P+2*V>>1];if(re==0)return Z;++V,Z+=String.fromCharCode(re)}}function Se(P,V,Z){if(Z===void 0&&(Z=2147483647),2>Z)return 0;var re=V;Z=(Z-=2)<2*P.length?Z/2:P.length;for(var xe=0;xe<Z;++xe)z[V>>1]=P.charCodeAt(xe),V+=2;return z[V>>1]=0,V-re}function ee(P){return 2*P.length}function O(P){for(var V=0,Z="";;){var re=M[P+4*V>>2];if(re==0)return Z;++V,65536<=re?(re-=65536,Z+=String.fromCharCode(55296|re>>10,56320|1023&re)):Z+=String.fromCharCode(re)}}function X(P,V,Z){if(Z===void 0&&(Z=2147483647),4>Z)return 0;var re=V;Z=re+Z-4;for(var xe=0;xe<P.length;++xe){var Pe=P.charCodeAt(xe);if(55296<=Pe&&57343>=Pe&&(Pe=65536+((1023&Pe)<<10)|1023&P.charCodeAt(++xe)),M[V>>2]=Pe,(V+=4)+4>Z)break}return M[V>>2]=0,V-re}function Ce(P){for(var V=0,Z=0;Z<P.length;++Z){var re=P.charCodeAt(Z);55296<=re&&57343>=re&&++Z,V+=4}return V}function Ne(P){k=P,s.HEAP8=J=new Int8Array(P),s.HEAP16=z=new Int16Array(P),s.HEAP32=M=new Int32Array(P),s.HEAPU8=H=new Uint8Array(P),s.HEAPU16=_=new Uint16Array(P),s.HEAPU32=q=new Uint32Array(P),s.HEAPF32=ne=new Float32Array(P),s.HEAPF64=oe=new Float64Array(P)}var $=s.INITIAL_MEMORY||16777216;function pe(P){for(;0<P.length;){var V=P.shift();if(typeof V=="function")V(s);else{var Z=V.ob;typeof Z=="number"?V.ua===void 0?s.dynCall_v(Z):s.dynCall_vi(Z,V.ua):Z(V.ua===void 0?null:V.ua)}}}(w=s.wasmMemory?s.wasmMemory:new WebAssembly.Memory({initial:$/65536,maximum:32768}))&&(k=w.buffer),$=k.byteLength,Ne(k),M[22752]=5334064;var ye=[],Be=[],De=[],Te=[],be=[];function Fe(){var P=s.preRun.shift();ye.unshift(P)}var Ae=Math.abs,fe=Math.ceil,Qe=Math.floor,Ie=Math.min,le=0,Oe=null,tt=null;function it(){le++,s.monitorRunDependencies&&s.monitorRunDependencies(le)}function Rt(){if(le--,s.monitorRunDependencies&&s.monitorRunDependencies(le),le==0&&(Oe!==null&&(clearInterval(Oe),Oe=null),tt)){var P=tt;tt=null,P()}}function Mt(P){throw s.onAbort&&s.onAbort(P),E(P),b(P),T=!0,new WebAssembly.RuntimeError("abort("+P+"). Build with -s ASSERTIONS=1 for more info.")}function Bt(P,V){return String.prototype.startsWith?P.startsWith(V):P.indexOf(V)===0}s.preloadedImages={},s.preloadedAudios={};var Zt,Nr,un="data:application/octet-stream;base64,",xn="data:application/octet-stream;base64,AGFzbQEAAAABqwVRYAF/AX9gAX8AYAJ/fwBgAn9/AX9gA39/fwF/YAN/f38AYAAAYAR/f39/AGAFf39/f38Bf2AGf39/f39/AX9gBH9/f38Bf2AFf39/f38AYAZ/f39/f38AYAABf2AIf39/f39/f38Bf2AHf39/f39/fwF/YAV/f35/fgF/YAd/f39/f39/AGAKf39/f39/f39/fwBgAn9+AX9gBX9/fn9/AGAFf39/f34Bf2ACf38BfmAIf39/f39/f38AYAN/fn8AYAV/fn5+fgBgC39/f39/f39/f39/AX9gA39+fwF+YAJ/fgBgDH9/f39/f39/f39/fwF/YAV/f39/fAF/YAR/f39/AX5gAn99AGAKf39/f39/f39/fwF/YAF/AX5gD39/f39/f39/f39/f39/fwBgBH9+fn8AYAd/f39/f35+AX9gBn9/f39+fgF/YAZ/fH9/f38Bf2ABfwF9YAt/f39/f39/f39/fwBgEH9/f39/f39/f39/f39/f38AYAd/f39/fn5/AGADf39+AGAJf39/f39/f39/AX9gBn9/f39/fAF/YAl/f35/f39/f38Bf2ADf399AX9gA39+fwF/YAd/fn9/f39/AX9gAn99AX9gAn5/AX9gAn5+AX9gAAF+YAR/f39+AX5gA39/fwF9YAR/f39/AX1gA39/fwF8YAR/f39/AXxgDX9/f39/f39/f39/f38AYAR/f39+AGAFf39/fn8AYAZ/f39+fn8AYAR/f399AGAEf39+fwBgA39+fgBgA399fwBgAn98AGANf39/f39/f39/f39/fwF/YAV/f35/fwF/YAd/f3x/f39/AX9gA35/fwF/YAR+fn5+AX9gBX9/f39/AX5gAn9/AX1gAn5+AX1gAX8BfGACf38BfGACfn4BfGACfH8BfALhDk4DZW52Fl9lbWJpbmRfcmVnaXN0ZXJfY2xhc3MAPANlbnYiX2VtYmluZF9yZWdpc3Rlcl9jbGFzc19jb25zdHJ1Y3RvcgAMA2Vudh9fZW1iaW5kX3JlZ2lzdGVyX2NsYXNzX3Byb3BlcnR5ABIDZW52H19lbWJpbmRfcmVnaXN0ZXJfY2xhc3NfZnVuY3Rpb24AFwNlbnYFYWJvcnQABgNlbnYKaW52b2tlX3ZpaQAFA2VudhtfX2N4YV9maW5kX21hdGNoaW5nX2NhdGNoXzIADQNlbnYLZ2V0VGVtcFJldDAADQNlbnYRX19yZXN1bWVFeGNlcHRpb24AAQNlbnYNX19hc3NlcnRfZmFpbAAHA2VudghpbnZva2VfdgABA2VudhtfX2N4YV9maW5kX21hdGNoaW5nX2NhdGNoXzMAAANlbnYRX19jeGFfYmVnaW5fY2F0Y2gAAANlbnYJaW52b2tlX2lpAAMDZW52GF9fY3hhX2FsbG9jYXRlX2V4Y2VwdGlvbgAAA2VudglpbnZva2VfdmkAAgNlbnYNaW52b2tlX2lpaWlpaQAJA2VudgtfX2N4YV90aHJvdwAFA2VudgtpbnZva2VfdmlpaQAHA2VudhRfX2N4YV9mcmVlX2V4Y2VwdGlvbgABA2VudgtpbnZva2VfaWlpaQAKA2VudgppbnZva2VfaWlpAAQDZW52Dmludm9rZV9paWlpaWlpAA8DZW52D19fY3hhX2VuZF9jYXRjaAAGA2VudhtfX2N4YV9maW5kX21hdGNoaW5nX2NhdGNoXzQAAwNlbnYSbGx2bV9laF90eXBlaWRfZm9yAAADZW52DGludm9rZV9paWlpaQAIA2VudghpbnZva2VfaQAAA2VudgxpbnZva2VfdmlpaWkACwNlbnYbX19jeGFfZmluZF9tYXRjaGluZ19jYXRjaF81AAQDZW52F19fY3hhX2dldF9leGNlcHRpb25fcHRyAAADZW52Emludm9rZV92aWlpaWlpaWlpaQApA2Vudg9pbnZva2VfaWlpaWlpaWkADgNlbnYPaW52b2tlX3ZpaWlpaWlpABcDZW52DWludm9rZV92aWlpaWkADANlbnYKaW52b2tlX2lpZgAwA2Vudg1fX2N4YV9yZXRocm93AAYDZW52DGdldHRpbWVvZmRheQADA2VudgxfX3N5c19zdGF0NjQAAwNlbnYKX19zeXNfb3BlbgAEA2Vudg1fX3N5c19mY250bDY0AAQDZW52C19fc3lzX2lvY3RsAAQWd2FzaV9zbmFwc2hvdF9wcmV2aWV3MQhmZF9jbG9zZQAAFndhc2lfc25hcHNob3RfcHJldmlldzEHZmRfcmVhZAAKFndhc2lfc25hcHNob3RfcHJldmlldzEIZmRfd3JpdGUACgNlbnYZX19jeGFfdW5jYXVnaHRfZXhjZXB0aW9ucwANA2Vudg1pbnZva2VfaWlpaWlkAC4DZW52C2ludm9rZV9maWlpADkDZW52C2ludm9rZV9kaWlpADsWd2FzaV9zbmFwc2hvdF9wcmV2aWV3MRFlbnZpcm9uX3NpemVzX2dldAADFndhc2lfc25hcHNob3RfcHJldmlldzELZW52aXJvbl9nZXQAAwNlbnYKX19tYXBfZmlsZQADA2VudgxfX3N5c19tdW5tYXAAAwNlbnYKc3RyZnRpbWVfbAAIA2VudhNpbnZva2VfaWlpaWlpaWlpaWlpAB0DZW52F2ludm9rZV92aWlpaWlpaWlpaWlpaWlpACoDZW52FV9lbWJpbmRfcmVnaXN0ZXJfdm9pZAACA2VudhVfZW1iaW5kX3JlZ2lzdGVyX2Jvb2wACwNlbnYbX2VtYmluZF9yZWdpc3Rlcl9zdGRfc3RyaW5nAAIDZW52HF9lbWJpbmRfcmVnaXN0ZXJfc3RkX3dzdHJpbmcABQNlbnYWX2VtYmluZF9yZWdpc3Rlcl9lbXZhbAACA2VudhhfZW1iaW5kX3JlZ2lzdGVyX2ludGVnZXIACwNlbnYWX2VtYmluZF9yZWdpc3Rlcl9mbG9hdAAFA2VudhxfZW1iaW5kX3JlZ2lzdGVyX21lbW9yeV92aWV3AAUDZW52FmVtc2NyaXB0ZW5fcmVzaXplX2hlYXAAAANlbnYVZW1zY3JpcHRlbl9tZW1jcHlfYmlnAAQDZW52C3NldFRlbXBSZXQwAAEDZW52EWludm9rZV9paWlqaWlpaWlpABoDZW52D2ludm9rZV92aWlpaWpqaQASA2VudgtpbnZva2VfdmlqaQALA2VudgppbnZva2VfamlpAAQDZW52Cmludm9rZV9paWoACgNlbnYNaW52b2tlX3ZpaWppaQARFndhc2lfc25hcHNob3RfcHJldmlldzEHZmRfc2VlawAIA2Vudg1pbnZva2VfaWlpaWlqAA8DZW52DGludm9rZV9qaWlpaQAIA2VudgZtZW1vcnkCAYACgIACA2VudgV0YWJsZQFwAJ4JA+4M7AwGBgABAA0AAgMFAAIDBQACAAIAAgACAAIAAgACAwUAAgACAgIFCgkEAgIDFwUBAgwCBAUBAgIBAAEHCwoCBQUOCQwBBwwDAggAAQIEAgAJAgABAQABFAcAAwMJAwMDAwEDBRgFAwMBAQEAAAIF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AIoNC2R5bkNhbGxfdmlpAIsNDGR5bkNhbGxfdmlpaQCMDQ1keW5DYWxsX3ZpaWlpAI0NDmR5bkNhbGxfdmlpaWlpAI4NEGR5bkNhbGxfdmlpaWlpaWkAjw0TZHluQ2FsbF92aWlpaWlpaWlpaQCQDRhkeW5DYWxsX3ZpaWlpaWlpaWlpaWlpaWkAkQ0QZHluQ2FsbF92aWlpaWpqaQCnDQ5keW5DYWxsX3ZpaWppaQCoDQxkeW5DYWxsX3ZpamkAqQ0JZHluQ2FsbF9pAFAKZHluQ2FsbF9paQCSDQtkeW5DYWxsX2lpaQCTDQxkeW5DYWxsX2lpaWkAlA0NZHluQ2FsbF9paWlpaQCVDQ5keW5DYWxsX2lpaWlpaQCWDQ9keW5DYWxsX2lpaWlpaWkAlw0QZHluQ2FsbF9paWlpaWlpaQCYDRNkeW5DYWxsX2lpaWlpaWlpaWlpAJkNFGR5bkNhbGxfaWlpaWlpaWlpaWlpAJoNFWR5bkNhbGxfaWlpaWlpaWlpaWlpaQCbDQ5keW5DYWxsX2lpaWlpagCqDQ5keW5DYWxsX2lpaWlpZACcDRJkeW5DYWxsX2lpaWppaWlpaWkAqw0LZHluQ2FsbF9paWoArA0LZHluQ2FsbF9paWYAnQ0LZHluQ2FsbF9qaWkArQ0NZHluQ2FsbF9qaWlpaQCuDQxkeW5DYWxsX2ZpaWkAng0MZHluQ2FsbF9kaWlpAJ8NCXN0YWNrU2F2ZQCgDQpzdGFja0FsbG9jAKENDHN0YWNrUmVzdG9yZQCiDRBfX2dyb3dXYXNtTWVtb3J5AKMNDmR5bkNhbGxfaWlpamlqAK8NDGR5bkNhbGxfamlqaQCwDQ9keW5DYWxsX2lpZGlpaWkApA0RZHluQ2FsbF9paWlpaWlpaWkApQ0PZHluQ2FsbF9paWlpaWpqALENEGR5bkNhbGxfaWlpaWlpamoAsg0PZHluQ2FsbF92aWlpaWlpAKYNCYwSAQBBAQudCU5PUFFSU1RVVldYWVpbXF1eX2BhYmNkZWZnaGlqa2xtf26AAVWBAYIBfgTGB+IGlwGsB/4LmAGGDJoBEZMBqweDB/gG/AemAZMHhgcXkwyNDJQBlQGWAZUBmwGZAZ0BnAGeAaEHoweiB6QHnwGgAd8E4wahAaIB6gTqBOcGowHsBqQB7walAaAEqAHoAYwDqQHF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bCABShsiBSAFQSByIgUgAiAFbCABShsiBSAFQRByIgUgAiAFbCABShsiBSAFQQhyIgUgAiAFbCABShsiBSAFQQRyIgUgAiAFbCABShsiBSAFQQJyIgUgAiAFbCABShsiBSAFQQFyIgUgAiAFbCABShsiATsBtgQgByABOwGyBCAHIBFB//8FIARrIgFNQQ90IgIgAkGAgAFyIgIgAiADbCABSxsiAiACQYDAAHIiAiACIANsIAFLGyICIAJBgCByIgIgAiADbCABShsiAiACQYAQciICIAIgA2wgAUobIgIgAkGACHIiAiACIANsIAFKGyICIAJBgARyIgIgAiADbCABShsiAiACQYACciICIAIgA2wgAUobIgIgAkGAAXIiAiACIANsIAFKGyICIAJBwAByIgIgAiADbCABShsiAiACQSByIgIgAiADbCABShsiAiACQRByIgIgAiADbCABShsiAiACQQhyIgIgAiADbCABShsiAiACQQRyIgIgAiADbCABShsiAiACQQJyIgIgAiADbCABShsiAiACQQFyIgIgAiADbCABShsiAzsBuAQgByADOwG8BCAHIBAvAQAiAzsBzAQgByADOwHIBCAHIA8vAQAiAzsB1AQgByADOwHQBCAHIAM7Ac4EIAcgAzsBygQgByAOLwEAIgI7AdYEIAcgA0EPdCABTUEPdCIEIARBgIABciIEIAMgBGwgAUsbIgQgBEGAwAByIgQgAyAEbCABSxsiBCAEQYAgciIEIAMgBGwgAUobIgQgBEGAEHIiBCADIARsIAFKGyIEIARBgAhyIgQgAyAEbCABShsiBCAEQYAEciIEIAMgBGwgAUobIgQgBEGAAnIiBCADIARsIAFKGyIEIARBgAFyIgQgAyAEbCABShsiBCAEQcAAciIEIAMgBGwgAUobIgQgBEEgciIEIAMgBGwgAUobIgQgBEEQciIEIAMgBGwgAUobIgQgBEEIciIEIAMgBGwgAUobIgQgBEEEciIEIAMgBGwgAUobIgQgBEECciIEIAMgBGwgAUobIgQgBEEBciIEIAMgBGwgAUobIgM7AcQEIAcgAzsBwAQgByADOwG+BCAHIAM7AboEIAcgAkEPdCABTUEPdCIDIANBgIABciIDIAIgA2wgAUsbIgMgA0GAwAByIgMgAiADbCABSxsiAyADQYAgciIDIAIg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ampqampqaiEFCyADIAVqIANBEEZ2QQR2QYGChAhsQYCBgoR4IAMbIgQhAyAEIQUgBAwCCyACIBEtAABBgYKECGwiAzYCDCACIAM2AgggAiADNgIEIAIgAzYCACACIBEtAAFBgYKECGwiAzYCHCACIAM2AhggAiADNgIUIAIgAzYCECACIBEtAAJBgYKECGwiAzYCLCACIAM2AiggAiADNgIkIAIgAzYCICACIBEtAANBgYKECGwiAzYCPCACIAM2AjggAiADNgI0IAIgAzYCMCACIBEtAARBgYKECGwiAzYCTCACIAM2AkggAiADNgJEIAIgAzYCQCACIBEtAAVBgYKECGwiAzYCXCACIAM2AlggAiADNgJUIAIgAzYCUCACIBEtAAZBgYKECGwiAzYCbCACIAM2AmggAiADNgJkIAIgAzYCYCACIBEtAAdBgYKECGwiAzYCfCACIAM2AnggAiADNgJ0IAIgAzYCcCACIBEtAAhBgYKECGwiAzYCjAEgAiADNgKIASACIAM2AoQBIAIgAzYCgAEgAiARLQAJQYGChAhsIgM2ApwBIAIgAzYCmAEgAiADNgKUASACIAM2ApABIAIgES0ACkGBgoQIbCIDNgKsASACIAM2AqgBIAIgAzYCpAEgAiADNgKgASACIBEtAAtBgYKECGwiAzYCvAEgAiADNgK4ASACIAM2ArQBIAIgAzYCsAEgAiARLQAMQYGChAhsIgM2AswBIAIgAzYCyAEgAiADNgLEASACIAM2AsABIAIgES0ADUGBgoQIbCIDNgLcASACIAM2AtgBIAIgAzYC1AEgAiADNgLQASACIBEtAA5BgYKECGwiAzYC7AEgAiADNgLoASACIAM2AuQBIAIgAzYC4AEgAiARLQAPQYGChAhsIgM2AvABIAMhBSADIQcMAgsgGygCCCEFIBsoAgQhAyAbKAIAIQQgGygCDAshByACIAQ2AvABIAIgBzYC7AEgAiAFNgLoASACIAM2AuQBIAIgBDYC4AEgAiAHNgLcASACIAU2AtgBIAIgAzYC1AEgAiAENgLQASACIAc2AswBIAIgBTYCyAEgAiADNgLEASACIAQ2AsABIAIgBzYCvAEgAiAFNgK4ASACIAM2ArQBIAIgBDYCsAEgAiAHNgKsASACIAU2AqgBIAIgAzYCpAEgAiAENgKgASACIAc2ApwB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DQAgAyACIAQgCS0AACIFIAcgKmoiCS0AACILIA1B/wFxIg0QkAEgA0EBaiACIAQgBSALIA0QkAEgA0ECaiACIAQgBSAJLQABIg0gCC0AASILEJABIANBA2ogAiAEIAUgDSALEJABIANBBGogAiAEIAUgCS0AAiINIAgtAAIiCxCQASADQQVqIAIgBCAFIA0gCxCQASADQQZqIAIgBCAFIAktAAMiCSAILQADIggQkAEgA0EHaiACIAQgBSAJIAgQkAELIAMgCmohA0EIIQQgISEFICMhCSAHRQ0ACyAPQX9qIg8NAAsMAgsgACgC4AIiB0ECdCEZIAAoAtQCIR5BACECICkhAyAbIQQDQCADLQAAIRIgBC0AACEFAkAgAiIWIAZBkAVqaiIQKAIAIgNB/wFxQQRGBEAgFiAeaiECIBJBAnZBAmohGkEQIQMDQAJAIAJBf2oiDS0AACIIIAItAAAiCWsiBCAEQR91IgRqIARzIgQgEk4NACACQX5qIg8tAAAiCyAIayIKIApBH3UiCmogCnMgBU4NACACLQABIgogCWsiEyATQR91IhNqIBNzIAVODQAgAi0AAiETAn8CQCACQX1qIhAtAAAiDiAIayIVIBVBH3UiFWogFXMgBU4NACAEIBpODQAgAkF8ai0AACEXIA0gCiAOaiAIIAlqIAtqIhVBAXRqQQRqQQN2OgAAIA8gDiAVakECakECdjoAACAOQQNsQQRqIQ8gECENQQMMAQsgCCAKaiEPQQIhFSALIRdBAgshHCANIA8gFWogF0EBdGogHHY6AAACQCAEIBpODQAgEyAJayIEIARBH3UiBGogBHMgBU4NACACIAggCWogCmoiBCATakECakECdjoAASACIAQgE0EDbGogAi0AA0EBdGpBBGpBA3Y6AAIgAiALIBNqIARBAXRqQQRqQQN2OgAADAELIAIgCSALaiAKQQF0akECakECdjoAAAsgAiAHaiECIANBf2oiAw0ACwwBCyASRQ0AIANFDQAgFiAeaiECIBBBIGohIEEAIRcDQAJAIANB/wFxBEBBACAXICBqLQAAIgtrIQ9BBCENA0AgAkF/aiITLQAAIgMgAi0AACIEayIIIAhBH3UiCGogCHMgEmsgAkF+aiIOLQAAIgggA2siCSAJQR91IglqIAlzIAVrcSACLQABIgkgBGsiCiAKQR91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AAJrIgcgB0EfdSIHaiAHcyAFLQABIAQtAAFrIgcgB0EfdSIHaiAHcyAFLQAAIAQtAABrIgcgB0EfdSIHaiAHcyAIampqampqamohCCAEQRBqIQQgASAFaiEFIAZBAWoiBkEIRw0ACyADIAg2AgQgAkGAAWohBEEAIQYgACABQQN0aiIKIQVBACEHA0AgBS0AByAELQAHayIAIABBH3UiAGogAHMgBS0ABiAELQAGayIAIABBH3UiAGogAHMgBS0ABSAELQAFayIAIABBH3UiAGogAHMgBS0ABCAELQAEayIAIABBH3UiAGogAHMgBS0AAyAELQADayIAIABBH3UiAGogAHMgBS0AAiAELQACayIAIABBH3UiAGogAHMgBS0AASAELQABayIAIABBH3UiAGogAHMgBS0AACAELQAAayIAIABBH3UiAGogAHMgBmpqampqampqIQYgBEEQaiEEIAEgBWohBSAHQQFqIgdBCEcNAAsgAyAGNgIIIAJBiAFqIQQgCkEIaiEFQQAhB0EAIQADQCAFLQAHIAQtAAdrIgIgAkEfdSICaiACcyAFLQAGIAQtAAZrIgIgAkEfdSICaiACcyAFLQAFIAQtAAVrIgIgAkEfdSICaiACcyAFLQAEIAQtAARrIgIgAkEfdSICaiACcyAFLQADIAQtAANrIgIgAkEfdSICaiACcyAFLQACIAQtAAJrIgIgAkEfdSICaiACcyAFLQABIAQtAAFrIgIgAkEfdSICaiACcyAFLQAAIAQtAABrIgIgAkEfdSICaiACcyAHampqampqamohByAEQRBqIQQgASAFaiEFIABBAWoiAEEIRw0ACyADIAc2AgwgCCAJaiAGaiAHagv3AwEUfyAAQYgBaiERQQEhBgNAQQhBBEEIIAAoApgBIgJBAnEbIAJBf0YiAxshC0EIQQRBCCACQQFxGyADGyEMIAZBA3RBeGohEiAAIAZBAnRqIgJByAJqIRMgAkG8AmohFEEAIQ1BACEHQQAhCANAIBQoAgAhAiATKAIAIQkgASARIA1BAnRqKAJwIgMgACgCjAFBFnRqIgRBgIAccSIOIAAoAogBQQZ0IANqIgNBB3EiD3IiCjYCACACIAkgCCAEQRN1amxqIANBEHRBE3VqIAdqIQMgACgCkAcgEmogCEEEdGogB2ohBQJAIApFBEBBACEEA0BB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KAIAIQJByLIFQQA2AgAgAkEBRg0AQciyBUEANgIAQS1BHBANIQJByLIFKAIAIQNByLIFQQA2AgAgA0EBRg0AQciyBUEANgIAIAIgAUGdwQAQoAQhA0HIsgUoAgAhBEHIsgVBADYCACAEQQFGDQMgAkEANgIYIAJCADcCECACQZDMAjYCAEHIsgVBADYCACAFIAJBARAFQciyBSgCACEEQciyBUEANgIAAkAgBEEBRwRAQciyBUEANgIAQdkAIAJBEGpBABAVIQRByLIFKAIAIQZByLIFQQA2AgAgBkEBRw0BCxAGIQUQBxogAigCGCEDQciyBUEANgIAIAMQ6AFByLIFKAIAIQNByLIFQQA2AgAgA0EBRw0FQQAQCyEBEAcaIAEQhAEACyAEQQA6AABByLIFQQA2AgBB2wAgASADEAVByLIFKAIAIQJByLIFQQA2AgAgAkEBRg0AQciyBUEANgIAQS1BHBANIQJByLIFKAIAIQNByLIFQQA2AgAgA0EBRg0AQciyBUEANgIAIAIgAUGywQAQoAQhA0HIsgUoAgAhBEHIsgVBADYCACAEQQFGDQUgAkEANgIYIAJCADcCECACQZDMAjYCAEHIsgVBADYCACAFIAJBARAFQciyBSgCACEEQciyBUEANgIAAkAgBEEBRwRAQciyBUEANgIAQdkAIAJBEGpBABAVIQRByLIFKAIAIQZByLIFQQA2AgAgBkEBRw0BCxAGIQUQBxogAigCGCEDQciyBUEANgIAIAMQ6AFByLIFKAIAIQNByLIFQQA2AgAgA0EBRw0HQQAQCyEBEAcaIAEQhAEACyAEQQA6AABByLIFQQA2AgBB2wAgASADEAVByLIFKAIAIQJByLIFQQA2AgAgAkEBRg0AQciyBUEANgIAQS1BHBANIQJByLIFKAIAIQNByLIFQQA2AgAgA0EBRg0AQciyBUEANgIAIAIgAUHIwQAQoAQhA0HIsgUoAgAhBEHIsgVBADYCACAEQQFGDQcgAkEANgIYIAJCADcCECACQZDMAjYCAEHIsgVBADYCACAFIAJBARAFQciyBSgCACEEQciyBUEANgIAAkAgBEEBRwRAQciyBUEANgIAQdkAIAJBEGpBABAVIQRByLIFKAIAIQZByLIFQQA2AgAgBkEBRw0BCxAGIQUQBxogAigCGCEDQciyBUEANgIAIAMQ6AFByLIFKAIAIQNByLIFQQA2AgAgA0EBRw0JQQAQCyEBEAcaIAEQhAEACyAEQQA6AABByLIFQQA2AgBB2wAgASADEAVByLIFKAIAIQJByLIFQQA2AgAgAkEBRg0AQciyBUEANgIAQS1BIBANIQJByLIFKAIAIQNByLIFQQA2AgAgA0EBRg0AQciyBUEANgIAIAIgAUHbwQAQoAQhBEHIsgUoAgAhA0HIsgVBADYCACADQQFGDQkgAkEANgIYIAJCADcCECACQcDPAjYCAEHIsgVBADYCAEHQzwIoAgAiAyACQQEQBUHIsgUoAgAhBkHIsgVBADYCAAJAIAZBAUcEQEHIsgVBADYCAEHcACACQRBqQQAQFSEGQciyBSgCACEHQciyBUEANgIAIAdBAUcNAQsQBiEFEAcaIAIoAhghA0HIsgVBADYCACADEOgBQciyBSgCACEDQciyBUEANgIAIANBAUcNC0EAEAshARAHGiABEIQBAAsgBkIANwMAIAJBBjoAHCACQaDQAjYCAEHIsgVBADYCAEHbACABIAQQBUHIsgUoAgAhAkHIsgVBADYCACACQQFGDQBByLIFQQA2AgBBLUEgEA0hAkHIsgUoAgAhBEHIsgVBADYCACAEQQFGDQBByLIFQQA2AgAgAiABQeTBABCgBCEEQciyBSgCACEGQciyBUEANgIAIAZBAUYNCyACQQA2AhggAkIANwIQIAJBwM8CNgIAQciyBUEANgIAIAMgAkEBEAVByLIFKAIAIQZByLIFQQA2AgACQCAGQQFHBEBByLIFQQA2AgBB3AAgAkEQakEAEBUhBkHIsgUoAgAhB0HIsgVBADYCACAHQQFHDQELEAYhBRAHGiACKAIYIQNByLIFQQA2AgAgAxDoAUHIsgUoAgAhA0HIsgVBADYCACADQQFHDQ1BABALIQEQBxogARCEAQALIAZCADcDACACQQI6ABwgAkGg0AI2AgBByLIFQQA2AgBB2wAgASAEEAVByLIFKAIAIQJByLIFQQA2AgAgAkEBRg0AQciyBUEANgIAQS1BIBANIQJByLIFKAIAIQRByLIFQQA2AgAgBEEBRg0AQciyBUEANgIAIAIgAUH3wQAQoAQhBEHIsgUoAgAhBkHIsgVBADYCACAGQQFGDQ0gAkEANgIYIAJCADcCECACQcDPAjYCAEHIsgVBADYCACADIAJBARAFQciyBSgCACEGQciyBUEANgIAAkAgBkEBRwRAQciyBUEANgIAQdwAIAJBEGpBABAVIQZByLIFKAIAIQdByLIFQQA2AgAgB0EBRw0BCxAGIQUQBxogAigCGCEDQciyBUEANgIAIAMQ6AFByLIFKAIAIQNByLIFQQA2AgAgA0EBRw0PQQAQCyEBEAcaIAEQhAEACyAGQgA3AwAgAkEDOgAcIAJBoNACNgIAQciyBUEANgIAQdsAIAEgBBAFQciyBSgCACECQciyBUEANgIAIAJBAUYNAEHIsgVBADYCAEEtQSAQDSECQciyBSgCACEEQciyBUEANgIAIARBAUYNAEHIsgVBADYCACACIAFBgcIAEKAEIQRByLIFKAIAIQZByLIFQQA2AgAgBkEBRg0PIAJBADYCGCACQgA3AhAgAkHAzwI2AgBByLIFQQA2AgAgAyACQQEQBUHIsgUoAgAhA0HIsgVBADYCAAJAIANBAUcEQEHIsgVBADYCAEHcACACQRBqQQAQFSEDQciyBSgCACEGQciyBUEANgIAIAZBAUcNAQsQBiEFEAcaIAIoAhghA0HIsgVBADYCACADEOgBQciyBSgCACEDQciyBUEANgIAIANBAUcNEUEAEAshARAHGiABEIQBAAsgA0IANwMAIAJBBToAHCACQaDQAjYCAEHIsgVBADYCAEHbACABIAQQBUHIsgUoAgAhA0HIsgVBADYCACADQQFGDQBByLIFQQA2AgBBLUEgEA0hA0HIsgUoAgAhBEHIsgVBADYCACAEQQFGDQBByLIFQQA2AgAgAyABQZzCACACEMUEIQRByLIFKAIAIQJByLIFQQA2AgAgAkEBRg0RIANB4MQANgIAQciyBUEANgIAQdsAIAEgAxAFQciyBSgCACECQciyBUEANgIAIAJBAUYNAEHIsgVBADYCAEEtQRwQDSECQciyBSgCACEGQciyBUEANgIAIAZBAUYNACADKAIEIQZByLIFQQA2AgAgAiAGQazCABCgBCEGQciyBSgCACEHQciyBUEANgIAIAdBAUYNEiACQQA2AhggAkIANwIQIAJBoM0CNgIAQciyBUEANgIAQbDNAigCACIHIAJBARAFQciyBSgCACEIQciyBUEANgIAAkAgCEEBRwRAQciyBUEANgIAQd4AIAJBEGpBABAVIQhByLIF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AkGwAWokACAAIAFBA3RqDwsQBiEBEAcaDAELAAsgBhDcBiABEAgAC68IAQh/IwBBsAFrIgIkAAJAAkACQCAAKAIAIAFNBEAgAkHoPjYCYCACQdQ+NgIoQciyBUEANgIAQSkgAkHgAGoiBiACQShqQQRyIgQQBUHIsgUoAgAhA0HIsgVBADYCACADQQFGDQEgAkKAgICAcDcDqAEgAkGwPjYCYCACQZw+NgIoQciyBUEANgIAQSogBBANIQdByLIFKAIAIQNByLIFQQA2AgAgA0EBRgRAEAYhARAHGgwECyACQgA3AkwgAkIANwJUIAJBEDYCXCACQcw/NgIsQciyBUEANgIAQSsgAkEoakHowwBBFRAUIQVByLIFKAIAIQNByLIFQQA2AgACQAJAAkACQAJAAkACQAJAAkAgA0EBRg0AQciyBUEANgIAQSwgBSABEBUhA0HIsgUoAgAhAUHIsgVBADYCACABQQFGDQBByLIFQQA2AgBBKyADQf7DAEEEEBQhA0HIsgUoAgAhAUHIsgVBADYCACABQQFGDQAgACgCACEBQciyBUEANgIAQSwgAyABEBUaQciyBSgCACEBQciyBUEANgIAIAFBAUYNAEEEEA4hAEHIsgVBADYCAEEtQTAQDSEDQciyBSgCACEBQciyBUEANgIAIAFBAUYNAUHIsgVBADYCAEEuIAJBCGogBBAFQciyBSgCACEBQciyBUEANgIAIAFBAUYNAiACKAIIIAJBCGogAiwAE0EASBsiBBCIDSIBQXBPBEBByLIFQQA2AgBBLyACQRhqEA9ByLIFKAIAIQFByLIFQQA2AgAgAUEBRg0EDAwLAkACQCABQQtPBEBByLIFQQA2AgBBLSABQRBqQXBxIggQDSEFQciyBSgCACEJQciyBUEANgIAIAlBAUYNBiACIAU2AhggAiABNgIcIAIgCEGAgICAeHI2AiAMAQsgAiABOgAjIAJBGGohBSABRQ0BCyAFIAQgARCADRoLIAEgBWpBADoAAEHIsgVBADYCAEEwIAMgAkEYakHEAEGDxABBgAFBpsQAEBYaQciyBSgCACEBQciyBUEANgIAQQEhBCABQQFHBEAgACADNgIAQciyBUEANgIAQTEgAEGs3QBBABASQciyBSgCACEBQciyBUEANgIAQQAhBCABQQFHDQwLEAYhARAHGiACLAAj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EBYaQciyBSgCACEDQciyBUEANgIAQQEhASADQQFGDQIgACACNgIAQciyBUEANgIAQTEgAEGs3QBBABASQciyBSgCACEDQciyBUEANgIAQQAhASADQQFGDQIACxAGIQMQBxoMAwsQBiEDEAcaDAELEAYhAxAHGiAELAALQX9MBEAgBCgCABD2DAsgAUUNAgsgAhD2DAsgABATCyADEAgACwJAIAAoAgQgA0cEQCAAKAIIIQUMAQsgACADQQEgA0EBSxsiA0EBdDYCBCAAIAAoAgggA0ECdBDqASIFNgIIIAAoAgAhAwsgBSACQQF0IgZqIgVBAmogBSADIAJrQQF0EIINIAAoAgggBmogATsBACAAIAAoAgBBAWo2AgAgBEEQaiQAC68IAQh/IwBBsAFrIgIkAAJAAkACQCAAKAIAIAFNBEAgAkHoPjYCYCACQdQ+NgIoQciyBUEANgIAQSkgAkHgAGoiBiACQShqQQRyIgQQBUHIsgUoAgAhA0HIsgVBADYCACADQQFGDQEgAkKAgICAcDcDqAEgAkGwPjYCYCACQZw+NgIoQciyBUEANgIAQSogBBANIQdByLIFKAIAIQNByLIFQQA2AgAgA0EBRgRAEAYhARAHGgwECyACQgA3AkwgAkIANwJUIAJBEDYCXCACQcw/NgIsQciyBUEANgIAQSsgAkEoakHowwBBFRAUIQVByLIFKAIAIQNByLIFQQA2AgACQAJAAkACQAJAAkACQAJAAkAgA0EBRg0AQciyBUEANgIAQSwgBSABEBUhA0HIsgUoAgAhAUHIsgVBADYCACABQQFGDQBByLIFQQA2AgBBKyADQf7DAEEEEBQhA0HIsgUoAgAhAUHIsgVBADYCACABQQFGDQAgACgCACEBQciyBUEANgIAQSwgAyABEBUaQciyBSgCACEBQciyBUEANgIAIAFBAUYNAEEEEA4hAEHIsgVBADYCAEEtQTAQDSEDQciyBSgCACEBQciyBUEANgIAIAFBAUYNAUHIsgVBADYCAEEuIAJBCGogBBAFQciyBSgCACEBQciyBUEANgIAIAFBAUYNAiACKAIIIAJBCGogAiwAE0EASBsiBBCIDSIBQXBPBEBByLIFQQA2AgBBLyACQRhqEA9ByLIFKAIAIQFByLIFQQA2AgAgAUEBRg0EDAwLAkACQCABQQtPBEBByLIFQQA2AgBBLSABQRBqQXBxIggQDSEFQciyBSgCACEJQciyBUEANgIAIAlBAUYNBiACIAU2AhggAiABNgIcIAIgCEGAgICAeHI2AiAMAQsgAiABOgAjIAJBGGohBSABRQ0BCyAFIAQgARCADRoLIAEgBWpBADoAAEHIsgVBADYCAEEwIAMgAkEYakHEAEGDxABBjAFBpsQAEBYaQciyBSgCACEBQciyBUEANgIAQQEhBCABQQFHBEAgACADNgIAQciyBUEANgIAQTEgAEGs3QBBABASQciyBSgCACEBQciyBUEANgIAQQAhBCABQQFHDQwLEAYhARAHGiACLAAjQX9MBEAgAigCGBD2DAsgAiwAE0EASA0EDAULEAYhARAHGgwHCxAGIQEQBxoMBQsQBiEBEAcaDAMLEAYhARAHGkEBIQQgAiwAE0EATg0CCyACKAIIEPYMCyAERQ0CCyADEPYMCyAAEBMLIAJBsD42AmAgAkGcPjYCKCACQcw/NgIsIAIsAFdBf0wEQCACKAJMEPYMCyAHEOAGGiAGENwGIAEQCAALIAAoAgghACACQbABaiQAIAAgAUECdGoPCxAGIQEQBxoMAQsACyAGENwGIAEQCAALrwgBCH8jAEGwAWsiAiQAAkACQAJAIAAoAgAgAU0EQCACQeg+NgJgIAJB1D42AihByLIFQQA2AgBBKSACQeAAaiIGIAJBKGpBBHIiBBAFQciyBSgCACEDQciyBUEANgIAIANBAUYNASACQoCAgIBwNwOoASACQbA+NgJgIAJBnD42AihByLIFQQA2AgBBKiAEEA0hB0HIsgUoAgAhA0HIsgVBADYCACADQQFGBEAQBiEBEAcaDAQLIAJCADcCTCACQgA3AlQgAkEQNgJcIAJBzD82AixByLIFQQA2AgBBKyACQShqQejDAEEVEBQhBUHIsgUoAgAhA0HIsgVBADYCAAJAAkACQAJAAkACQAJAAkACQCADQQFGDQBByLIFQQA2AgBBLCAFIAEQFSEDQciyBSgCACEBQciyBUEANgIAIAFBAUYNAEHIsgVBADYCAEErIANB/sMAQQQQFCEDQciyBSgCACEBQciyBUEANgIAIAFBAUYNACAAKAIAIQFByLIFQQA2AgBBLCADIAEQFRpByLIFKAIAIQFByLIFQQA2AgAgAUEBRg0AQQQQDiEAQciyBUEANgIAQS1BMBANIQNByLIFKAIAIQFByLIFQQA2AgAgAUEBRg0BQciyBUEANgIAQS4gAkEIaiAEEAVByLIFKAIAIQFByLIFQQA2AgAgAUEBRg0CIAIoAgggAkEIaiACLAATQQBIGyIEEIgNIgFBcE8EQEHIsgVBADYCAEEvIAJBGGoQD0HIsgUoAgAhAUHIsgVBADYCACABQQFGDQQMDAsCQAJAIAFBC08EQEHIsgVBADYCAEEtIAFBEGpBcHEiCBANIQVByLIFKAIAIQlByLIFQQA2AgAgCUEBRg0GIAIgBTYCGCACIAE2AhwgAiAIQYCAgIB4cjYCIAwBCyACIAE6ACMgAkEYaiEFIAFFDQELIAUgBCABEIANGgsgASAFakEAOgAAQciyBUEANgIAQTAgAyACQRhqQcQAQYPEAEGCAUGmxAAQFhpByLIFKAIAIQFByLIFQQA2AgBBASEEIAFBAUcEQCAAIAM2AgBByLIFQQA2AgBBMSAAQazdAEEAEBJByLIFKAIAIQFByLIFQQA2AgBBACEEIAFBAUcNDAsQBiEBEAcaIAIsACNBf0wEQCACKAIYEPYMCyACLAATQQBIDQQMBQsQBiEBEAcaDAcLEAYhARAHGgwFCxAGIQEQBxoMAwsQBiEBEAcaQQEhBCACLAATQQBODQILIAIoAggQ9gwLIARFDQILIAMQ9gwLIAAQEwsgAkGwPjYCYCACQZw+NgIoIAJBzD82AiwgAiwAV0F/TARAIAIoAkwQ9gwLIAcQ4AYaIAYQ3AYgARAIAAsgACgCCCEAIAJBsAFqJAAgACABQQJ0ag8LEAYhARAHGgwBCwALIAYQ3AYgARAIAAsNACAAEIQDGiAAEPYMCwMAAQsNACAAEMYEGiAAEPYMCwQAQQgLDQAgACgCEEEAEKIEpwsPACAAKAIQIAGtQQAQowQLYgEBfyAAQRRqIgBBABCsASgCACIDIAEgAiADKAIAKAIYEQUAIABBABCsASgCACEDIABBARCsASgCACADIAIQogSnIAIQwAQgAEEBEKwBKAIAIgAgASACIAAoAgAoAhgRBQALBwAgABD2DAsmAQF/IwBBEGsiAyQAIAMgAjYCDCAAQQEgASACELsBIANBEGokAAvDBgEBfyMAQRBrIgQkAAJAAkACQAJAAkACQAJAAkAgAUUEQEEEEA4hAkHIsgVBADYCAEEtQSwQDSEAQciyBSgCACEBQciyBUEANgIAAkACQCABQQFHBEBByLIFQQA2AgBBLUEwEA0hAUHIsgUoAgAhA0HIsgVBADYCACADQQFGDQEgBCABNgIAIARCrICAgICGgICAfzcCBCABQQA6ACwgAUG0xgAoAAA2ACggAUGsxgApAAA3ACAgAUGkxgApAAA3ABggAUGcxgApAAA3ABAgAUGUxgApAAA3AAggAUGMxgApAAA3AABByLIFQQA2AgBBMiAAIARBucYAQeECQaDHABAQGkHIsgUoAgAhAUHIsgVBADYCAEEBIQMgAUEBRwRAIAIgADYCAEHIsgVBADYCAEExIAJBoNoAQQAQEkHIsgUoAgAhAUHIsgVBADYCAEEAIQMgAUEBRw0FCxAGIQEQBxogBCwAC0F/TARAIAQoAgAQ9gwLIAMNAgwKCxAGIQEQBxogAhATIAEQCAALEAYhARAHGgsgABD2DCACEBMgARAIAAsgAg0HQQQQDiECQciyBUEANgIAQS1BLBANIQBByLIFKAIAIQFByLIFQQA2AgAgAUEBRg0BQciyBUEANgIAQS1BIBANIQFByLIFKAIAIQNByLIFQQA2AgAgA0EBRg0CIAQgATYCACAEQpiAgICAhICAgH83AgQgAUEAOgAYIAFB78YAKQAANwAQIAFB58YAKQAANwAIIAFB38YAKQAANwAAQciyBUEANgIAQTIgACAEQbnGAEHiAkGgxwAQEBpByLIFKAIAIQFByLIFQQA2AgBBASEDIAFBAUYNAyACIAA2AgBByLIFQQA2AgBBMSACQaDaAEEAEBJByLIFKAIAIQFByLIFQQA2AgBBACEDIAFBAUYNAwsACxAGIQEQBxoMAwsQBiEBEAcaDAELEAYhARAHGiAELAALQX9MBEAgBCgCABD2DAsgA0UNAgsgABD2DAsgAhATCyABEAgACwJAIAAoAgQgAUgNAEHEkwQoAgAiAARAIAEgAiADIAARBQAMAQtBqJoDKAIAIgEgAiADEKwGGkEKIAEQkQYLIARBEGokAAsoAQF/IwBBEGsiAiQAIAIgATYCDEHAjARBAiAAIAEQuwEgAkEQaiQACygBAX8jAEEQayICJAAgAiABNgIMQcCMBEEEIAAgARC7ASACQRBqJAALKAEBfyMAQRBrIgIkACACIAE2AgxBwIwEQQYgACABELsBIAJBEGokAAssACMAQRBrIgIkACACIAQ2AgwgACABIAAoAggoAgAgAyAEEMABIAJBEGokAAvwEAEGfyMAQbABayIFJAACQAJAAkACQAJAAkACQAJAAkACQAJAAkAgAkUEQEEEEA4hAkHIsgVBADYCAEEtQSwQDSEBQciyBSgCACEDQciyBUEANgIAAkACQCADQQFHBEBByLIFQQA2AgBBLUEwEA0hA0HIsgUoAgAhAEHIsgVBADYCACAAQQFGDQEgBSADNgIoIAVCrICAgICGgICAfzcCLCADQQA6ACwgA0G0xgAoAAA2ACggA0GsxgApAAA3ACAgA0GkxgApAAA3ABggA0GcxgApAAA3ABAgA0GUxgApAAA3AAggA0GMxgApAAA3AABByLIFQQA2AgBBMiABIAVBKGpBucYAQY8CQdnGABAQGkHIsgUoAgAhA0HIsgVBADYCAEEBIQAgA0EBRwRAIAIgATYCAEHIsgVBADYCAEExIAJBoNoAQQAQEkHIsgUoAgAhA0HIsgVBADYCAEEAIQAgA0EBRw0FCxAGIQMQBxogBSwAM0F/TARAIAUoAigQ9gwLIAANAgwKCxAGIQUQBxogAhATIAUQCAALEAYhAxAHGgsgARD2DCACEBMgAxAIAAsgA0UEQEEEEA4hAkHIsgVBADYCAEEtQSwQDSEBQciyBSgCACEDQciyBUEANgIAAkACQCADQQFHBEBByLIFQQA2AgBBLUEgEA0hA0HIsgUoAgAhAEHIsgVBADYCACAAQQFGDQEgBSADNgIoIAVCmICAgICEgICAfzcCLCADQQA6ABggA0HvxgApAAA3ABAgA0HnxgApAAA3AAggA0HfxgApAAA3AABByLIFQQA2AgBBMiABIAVBKGpBucYAQZACQdnGABAQGkHIsgUoAgAhA0HIsgVBADYCAEEBIQAgA0EBRwRAIAIgATYCAEHIsgVBADYCAEExIAJBoNoAQQAQEkHIsgUoAgAhA0HIsgVBADYCAEEAIQAgA0EBRw0FCxAGIQMQBxogBSwAM0F/TARAIAUoAigQ9gwLIAANAgwKCxAGIQUQBxogAhATIAUQCAALEAYhAxAHGgsgARD2DCACEBMgAxAIAAsgAy0AAA0FQQQQDiECQciyBUEANgIAQS1BLBANIQFByLIFKAIAIQNByLIFQQA2AgAgA0EBRg0BQciyBUEANgIAQS1BMBANIQNByLIFKAIAIQBByLIFQQA2AgAgAEEBRg0CIAUgAzYCKCAFQqOAgICAhoCAgH83AiwgA0EAOgAjIANBl8cAKAAANgAfIANBkMcAKQAANwAYIANBiMcAKQAANwAQIANBgMcAKQAANwAIIANB+MYAKQAANwAAQciyBUEANgIAQTIgASAFQShqQbnGAEGRAkHZxgAQEBpByLIFKAIAIQNByLIFQQA2AgBBASEAIANBAUYNAyACIAE2AgBByLIFQQA2AgBBMSACQaDaAEEAEBJByLIFKAIAIQNByLIFQQA2AgBBACEAIANBAUYNAwsACxAGIQUQBxogAhATIAUQCAALEAYhAxAHGgwBCxAGIQMQBxogBSwAM0F/TARAIAUoAigQ9gwLIABFDQILIAEQ9gwgAhATIAMQCAALIAAoAgQgAkgNBEHEkwQoAgBFDQEgBUHoPjYCYCAFQdQ+NgIoQciyBUEANgIAQSkgBUHgAGoiCSAFQShqQQRyIgAQBUHIsgUoAgAhCEHIsgVBADYCACAIQQFGDQIgBUKAgICAcDcDqAEgBUGwPjYCYCAFQZw+NgIoQciyBUEANgIAQSogABANIQhByLIFKAIAIQdByLIFQQA2AgAgB0EBRgRAEAYhAxAHGgwGCyAFQgA3AkwgBUIANwJUIAVBEDYCXCAFQcw/NgIsAkAgAQRAAkACQAJAAkACQAJAIAFBC08EQEHIsgVBADYCAEEtIAFBEGpB8ANxIgcQDSEGQciyBSgCACEKQciyBUEANgIAIApBAUYNAiAFIAY2AhggBSABNgIcIAUgB0GAgICAeHI2AiAgBUEYaiEHDAELIAUgAToAIyAFQRhqIgchBgsgBkEgIAEQgQ0gAWpBADoAACAHLQALIQFByLIFQQA2AgBBKyAFQShqIAUoAhggBUEYaiABQRh0QRh1QQBIIgYbIAUoAhwgASAGGxAUIQFByLIFKAIAIQZByLIFQQA2AgAgBkEBRg0BIAMQiA0hBkHIsgVBADYCAEErIAEgAyAGEBQaQciyBSgCACEDQciyBUEANgIAIANBAUYNAUHIsgVBADYCAEHEkwQoAgAhA0EuIAVBCGogABAFQciyBSgCACEBQciyBUEANgIAIAFBAUYNAkHIsgVBADYCACADIAIgBSgCCCAFQQhqIAUsABNBAEgbIAQQEkHIsgUoAgAhA0HIsgVBADYCACADQQFGDQMgBSwAE0F/TARAIAUoAggQ9gwLIAcsAAtBf0oNCiAFKAIYEPYMDAoLEAYhAxAHGgwFCxAGIQMQBxoMAgsQBiEDEAcaDAELEAYhAxAHGiAFLAATQX9KDQAgBSgCCBD2DAsgBywAC0F/Sg0BIAUoAhgQ9gwMAQtByLIFQQA2AgBBxJMEKAIAIAIgAyAEEBJByLIFKAIAIQNByLIFQQA2AgAgA0EBRw0EEAYhAxAHGgsgBUGwPjYCYCAFQZw+NgIoIAVBzD82AiwgBSwAV0F/TARAIAUoAkwQ9gwLIAgQ4AYaIAkQ3AYLIAMQCAALAkAgAUUEQEGomgMoAgAhAgwBCyAFQSA2AgQgBSABNgIAQaiaAygCACICIAUQxwYLIAIgAyAEEKwGGkEKIAIQkQYMAgsQBiEDEAcaDAILIAVBsD42AmAgBUGcPjYCKCAFQcw/NgIsIAUsAFdBf0wEQCAFKAJMEPYMCyAIEOAGGiAJENwGCyAFQbABaiQADwsgCRDcBiADEAgACyYBAX8jAEEQayIEJAAgBCADNgIMIAAgASACIAMQuwEgBEEQaiQAC7MSAQx/IwBBwAFrIgckAAJAAkACQCADDQAgBEUNAEEEEA4hAUHIsgVBADYCAEEtQSwQDSEGQciyBSgCACEFQciyBUEANgIAAkACQCAFQQFHBEBByLIFQQA2AgBBLUEwEA0hBUHIsgUoAgAhCEHIsgVBADYCACAIQQFGDQEgByAFNgIwIAdCq4CAgICGgICAfzcCNCAFQQA6ACsgBUHPxwAoAAA2ACcgBUHIxwApAAA3ACAgBUHAxwApAAA3ABggBUG4xwApAAA3ABAgBUGwxwApAAA3AAggBUGoxwApAAA3AABByLIFQQA2AgBBMiAGIAdBMGpBucYAQZMDQdTHABAQGkHIsgUoAgAhBUHIsgVBADYCAEEBIQggBUEBRwRAIAEgBjYCAEHIsgVBADYCAEExIAFBoNoAQQAQEkHIsgUoAgAhBUHIsgVBADYCAEEAIQggBUEBRw0GCxAGIQUQBxogBywAO0F/TARAIAcoAjAQ9gwLIAgNAgwECxAGIQUQBxogARATDAMLEAYhBRAHGgsgBhD2DCABEBMMAQsgBUUEQEEEEA4hAUHIsgVBADYCAEEtQSwQDSEGQciyBSgCACEFQciyBUEANgIAAkACQCAFQQFHBEBByLIFQQA2AgBBLUEgEA0hBUHIsgUoAgAhCEHIsgVBADYCACAIQQFGDQEgByAFNgIwIAdCmICAgICEgICAfzcCNCAFQQA6ABggBUHvxgApAAA3ABAgBUHnxgApAAA3AAggBUHfxgApAAA3AABByLIFQQA2AgBBMiAGIAdBMGpBucYAQZQDQdTHABAQGkHIsgUoAgAhBUHIsgVBADYCAEEBIQggBUEBRwRAIAEgBjYCAEHIsgVBADYCAEExIAFBoNoAQQAQEkHIsgUoAgAhBUHIsgVBADYCAEEAIQggBUEBRw0GCxAGIQUQBxogBywAO0F/TARAIAcoAjAQ9gwLIAgNAgwECxAGIQUQBxogARATDAMLEAYhBRAHGgsgBhD2DCABEBMMAQsCQAJAAkACQAJAIAAoAgQgAkgNACAFLQAAIAFyBEAgAUGAAnIiCBDjASIKQQAgCBCBDSEIIAdBIDYCFCAHIAE2AhAgCCAHQRBqEJkGIAcgBjYCvAEgASAIakH/ASAFIAYQjQYaCyAEBEAgCkHcxwAgChshDSAHQegAaiEOIAdB/ABqIQ8gB0E8aiEQIAdBMGpBBHIhBiAEIQkDQAJAAkAgDRCIDSIFQXBJBEACQAJAIAVBC08EQCAFQRBqQXBxIggQ/gshASAHIAhBgICAgHhyNgIoIAcgATYCICAHIAU2AiQMAQsgByAFOgArIAdBIGohASAFRQ0BCyABIA0gBRCADRoLIAEgBWpBADoAAEHIsgVBADYCAEH2ACAHQTBqIAdBIGpBAhAUGkHIsgUoAgAhBUHIsgVBADYCAAJAAkACQAJAAkACQCAFQQFHBEAgBywAK0F/TARAIAcoAiAQ9gwLQciyBUEANgIAIAdBOjoAIEErIAdBMGogB0EgakEBEBQhBUHIsgUoAgAhAUHIsgVBADYCACABQQFGDQEgBUEEaiIBIAUoAgBBdGoiCCgCAGoiCyALKAIAQbV/cUEIcjYCACABIAgoAgBqQQg2AgggASAIKAIAakEwNgJIIAEgCCgCAGoiASABKAIAQc9+cUGAAXI2AgBByLIFQQA2AgBBLCAFIAwQFSEFQciyBSgCACEBQciyBUEANgIAIAFBAUYNAiAFQQRqIgEgBSgCAEF0aiIIKAIAakEANgIIIAEgCCgCAGpBIDYCSEHIsgVBADYCAEErIAVB3ccAQQIQFBpByLIFKAIAIQVByLIFQQA2AgAgBUEBRg0DIAlBECAJQRBJGyEIIAMgDGohC0EAIQUgBCAMRiIRDQYDQCAGIAcoAjBBdGoiASgCAGoiEiASKAIAQbV/cUEIcjYCACAQIAEoAgBqQQI2AgAgDyABKAIAakEwNgIAIAYgASgCAGoiASABKAIAQc9+cUGAAXI2AgAgBSALai0AACEBQciyBUEANgIAQSwgB0EwaiABEBUaQciyBSgCACEBQciyBUEANgIAIAFBAUYNBSAQIAcoAjBBdGoiASgCAGpBADYCACAPIAEoAgBqQSA2AgBByLIFQQA2AgAgB0EgOgAgQSsgB0EwaiAHQSBqQQEQFBpByLIFKAIAIQFByLIFQQA2AgAgAUEBRg0GIAVBAWoiBSAIRw0ACyAIIQUgCUEPTQ0GDAkLEAYhBRAHGiAHLAArQX9KDRAgBygCIBD2DAwQCxAGIQUQBxoMDgsQBiEFEAcaDA0LEAYhBRAHGgwMCxAGIQUQBxoMCwsQBiEFEAcaDAoLA0BByLIFQQA2AgBBKyAHQTBqQeDHAEEDEBQaQciyBSgCACEBQciyBUEANgIAIAFBAUYNAiAFQQFqIgVBEEcNAAsMAgsgB0EgahCGDAALEAYhBRAHGgwHC0EAIQUgEUUEQANAAkAgBSALai0AACIBEP4FBEBByLIFQQA2AgAgByABOgAgQSsgB0EwaiAHQSBqQQEQFBpByLIFKAIAIQFByLIFQQA2AgAgAUEBRw0BDAkLQciyBUEANgIAIAdBLjoAIEErIAdBMGogB0EgakEBEBQaQciyBSgCACEBQciyBUEANgIAIAFBAUYNCAsgBUEBaiIFIAhHDQALC0HIsgVBADYCAEEuIAdBIGogBhAFQciyBSgCACEFQciyBUEANgIAIAVBAUYNA0HIsgVBADYCACAHIAcoAiAgB0EgaiAHLAArQQBIGzYCAEH3ACAAIAJB5McAIAcQHEHIsgUoAgAhBUHIsgVBADYCACAFQQFGDQQgBywAK0F/TARAIAcoAiAQ9gwLIAdBsD42AmggB0GcPjYCMCAHQcw/NgI0IAcsAF9Bf0wEQCAHKAJUEPYMCyAGEOAGGiAOENwGIAlBcGohCSAMQRBqIgwgBEkNAAsLIApFDQAgChDoAQsgB0HAAWokAA8LEAYhBRAHGgwCCxAGIQUQBxogBywAK0F/Sg0BIAcoAiAQ9gwMAQsQBiEFEAcaCyAHQbA+NgJoIAdBnD42AjAgB0HMPzYCNCAHLABfQX9MBEAgBygCVBD2DAsgBhDgBhogDhDcBgsgBRAICwALpQIBBH8gAEHoPjYCOCAAQdQ+NgIAQciyBUEANgIAQSkgAEE4aiIFIABBBGoiAxAFQciyBSgCACEEQciyBUEANgIAAkACQCAEQQFHBEAgAEGwPjYCOCAAQZw+NgIAIABCgICAgHA3AoABQciyBUEANgIAQSogAxANIQZByLIFKAIAIQRByLIFQQA2AgAgBEEBRg0BIABBzD82AgQgAEEkaiIEQgA3AgAgAEIANwIsIAAgAkEQcjYCNEHIsgVBADYCAEH4ACADIAEQBUHIsgUoAgAhA0HIsgVBADYCACADQQFGBEAQBiEDEAcaIAQsAAtBf0wEQCAEKAIAEPYMCyAGEOAGGgwDCyAADwsQBiEDEAcaDAELEAYhAxAHGgsgBRDcBiADEAgAC9sCAQN/IABBIGoiAiABEIoMIABBADYCLCAAKAIwIgFBCHEEQAJAIAIsAAsiA0F/TARAIAAoAiAiAyAAKAIkaiEEDAELIAIgA0H/AXFqIQQgAiEDCyAAIAQ2AhAgACADNgIMIAAgAzYCCCAAIAQ2AiwLAkAgAUEQcUUNACACAn8gAiwACyIBQQBOBEAgACACIAFB/wFxIgFqNgIsQQoMAQsgACAAKAIkIgEgACgCIGo2AiwgACgCKEH/////B3FBf2oLQQAQjQwCfyACLAALIgNBf0wEQCAAKAIgIQIgACgCJAwBCyADQf8BcQshAyAAIAI2AhQgACACNgIYIAAgAiADajYCHCAALQAwQQNxRQ0AAkAgAUF/TARAIAAgAkF+aiACQf////8HaiABQYGAgIB4aiIBQQBIIgMbIgI2AhhBASABIAMbIQEMAQsgAUUNAQsgACABIAJqNgIYCwujAQEBfyMAQSBrIgIkACACQRBqIAEgASgCACgCCBECAEHIsgVBADYCACACIAIoAhAgAkEQaiACLAAbQQBIGzYCAEH3ACAAQQFB5McAIAIQHEHIsgUoAgAhAUHIsgVBADYCACABQQFHBEAgAiwAG0F/TARAIAIoAhAQ9gwLIAJBIGokAA8LEAYhARAHGiACLAAbQX9MBEAgAigCEBD2DAsgARAIAAvCIwEGfyMAQRBrIggkACAAIAEgAhClAyEGIABBjMgANgIAAkACQAJAAkACQCACQXhqIgNBC0sNAAJAAkACQAJAAkACQCADQQFrDgsCBAYGBgABBgYGBQMLQciyBUEANgIAQS1BHBANIQJByLIFKAIAIQNByLIFQQA2AgAgA0EBRg0IQciyBUEANgIAIAIgAUGoyAAQoAQhAUHIsgUoAgAhA0HIsgVBADYCAAJAIANBAUcEQCACQQA2AhggAkIANwIQIAJB4M4CNgIAQciyBUEANgIAQfDOAigCACACQQEQBUHIsgUoAgAhA0HIsgVBADYCAAJAIANBAUcEQEHIsgVBADYCAEH7ACACQRBqQQAQFSEDQciyBSgCACEEQciyBUEANgIAIARBAUcNAQsQBiEAEAcaIAIoAhghAUHIsgVBADYCACABEOgBQciyBSgCACEBQciyBUEANgIAIAFBAUcNAkEAEAshABAHGiAAEIQBAAsgA0EANgIAQciyBUEANgIAQfwAIAYgARAFQciyBSgCACEBQciyBUEANgIAIAFBAUcNCAwKCxAGIQAQBxoLIAIQ9gwMCQtByLIFQQA2AgBBLUEcEA0hAkHIsgUoAgAhA0HIsgVBADYCACADQQFGDQdByLIFQQA2AgAgAiABQavIABCgBCEBQciyBSgCACEDQciyBUEANgIAAkAgA0EBRwRAIAJBADYCGCACQgA3AhAgAkGgzQI2AgBByLIFQQA2AgBBsM0CKAIAIAJBARAFQciyBSgCACEDQciyBUEANgIAAkAgA0EBRwRAQciyBUEANgIAQd4AIAJBEGpBABAVIQNByLIFKAIAIQRByLIFQQA2AgAgBEEBRw0BCxAGIQAQBxogAigCGCEBQciyBUEANgIAIAEQ6AFByLIFKAIAIQFByLIFQQA2AgAgAUEBRw0CQQAQCyEAEAcaIAAQhAEACyADQQA7AQBByLIFQQA2AgBB/AAgBiABEAVByLIFKAIAIQFByLIFQQA2AgAgAUEBRg0JDAcLEAYhABAHGgsgAhD2DAwIC0HIsgVBADYCAEEtQRwQDSECQciyBSgCACEDQciyBUEANgIAIANBAUYNBkHIsgVBADYCACACIAFBtMgAEKAEIQFByLIFKAIAIQNByLIFQQA2AgACQCADQQFHBEAgAkEANgIYIAJCADcCECACQaDNAjYCAEHIsgVBADYCAEGwzQIoAgAgAkEBEAVByLIFKAIAIQNByLIFQQA2AgACQCADQQFHBEBByLIFQQA2AgBB3gAgAkEQakEAEBUhA0HIsgUoAgAhBEHIsgVBADYCACAEQQFHDQELEAYhABAHGiACKAIYIQFByLIFQQA2AgAgARDoAUHIsgUoAgAhAUHIsgVBADYCACABQQFHDQJBABALIQAQBxogABCEAQALIANBADsBAEHIsgVBADYCAEH8ACAGIAEQBUHIsgUoAgAhAUHIsgVBADYCACABQQFGDQgMBgsQBiEAEAcaCyACEPYMDAcLQciyBUEANgIAQS1BMBANIQJByLIFKAIAIQNByLIFQQA2AgAgA0EBRg0FQciyBUEANgIAQeAAIAIgAUG8yABBA0EAEBAaQciyBSgCACEDQciyBUEANgIAIANBAUYNBEHIsgVBADYCAEH8ACAGIAIQBUHIsgUoAgAhAkHIsgVBADYCACACQQFGDQVByLIFQQA2AgBBLUEkEA0hAkHIsgUoAgAhA0HIsgVBADYCACADQQFGDQVByLIFQQA2AgBB/QAgAiABQcnIAEEBQQBBABAWGkHIsgUoAgAhA0HIsgVBADYCAAJAIANBAUcEQEHIsgVBADYCAEH8ACAGIAIQBUHIsgUoAgAhAkHIsgVBADYCACACQQFGDQdByLIFQQA2AgBBLUEkEA0hAkHIsgUoAgAhA0HIsgVBADYCACADQQFGDQdByLIFQQA2AgBB/QAgAiABQc/IAEEBQQBBABAWGkHIsgUoAgAhAUHIsgVBADYCACABQQFGDQFByLIFQQA2AgBB/AAgBiACEAVByLIFKAIAIQFByLIFQQA2AgAgAUEBRg0HDAULEAYhABAHGiACEPYMDAcLEAYhABAHGiACEPYMDAYLQciyBUEANgIAQS1BHBANIQJByLIFKAIAIQNByLIFQQA2AgAgA0EBRg0EQciyBUEANgIAIAIgAUHVyAAQoAQhAUHIsgUoAgAhA0HIsgVBADYCAAJAIANBAUcEQCACQQA2AhggAkIANwIQIAJBkMwCNgIAQciyBUEANgIAQaDMAigCACACQQEQBUHIsgUoAgAhA0HIsgVBADYCAAJAIANBAUcEQEHIsgVBADYCAEHZACACQRBqQQAQFSEDQciyBSgCACEEQciyBUEANgIAIARBAUcNAQsQBiEAEAcaIAIoAhghAUHIsgVBADYCACABEOgBQciyBSgCACEBQciyBUEANgIAIAFBAUcNAkEAEAshABAHGiAAEIQBAAsgA0EAOgAAQciyBUEANgIAQfwAIAYgARAFQciyBSgCACEBQciyBUEANgIAIAFBAUYNBgwECxAGIQAQBxoLIAIQ9gwMBQtByLIFQQA2AgBBLUEcEA0hAkHIsgUoAgAhA0HIsgVBADYCACADQQFGDQNByLIFQQA2AgAgAiABQebIABCgBCEEQciyBSgCACEDQciyBUEANgIAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkAgA0EBRwRAIAJBADYCGCACQgA3AhAgAkGQzAI2AgBByLIFQQA2AgBBoMwCKAIAIgMgAkEBEAVByLIFKAIAIQVByLIFQQA2AgACQCAFQQFHBEBByLIFQQA2AgBB2QAgAkEQakEAEBUhBUHIsgUoAgAhB0HIsgVBADYCACAHQQFHDQELEAYhABAHGiACKAIYIQFByLIFQQA2AgAgARDoAUHIsgUoAgAhAUHIsgVBADYCACABQQFHDQJBABALIQAQBxogABCEAQALIAVBADoAAEHIsgVBADYCAEH8ACAGIAQQBUHIsgUoAgAhAkHIsgVBADYCACACQQFGDRFByLIFQQA2AgBBLUEcEA0hAkHIsgUoAgAhBEHIsgVBADYCACAEQQFGDRFByLIFQQA2AgAgAiABQYLJABCgBCEEQciyBSgCACEFQciyBUEANgIAIAVBAUYNAiACQQA2AhggAkIANwIQIAJBkMwCNgIAQciyBUEANgIAIAMgAkEBEAVByLIFKAIAIQVByLIFQQA2AgACQCAFQQFHBEBByLIFQQA2AgBB2QAgAkEQakEAEBUhBUHIsgUoAgAhB0HIsgVBADYCACAHQQFHDQELEAYhABAHGiACKAIYIQFByLIFQQA2AgAgARDoAUHIsgUoAgAhAUHIsgVBADYCACABQQFHDQRBABALIQAQBxogABCEAQALIAVBADoAAEHIsgVBADYCAEH8ACAGIAQQBUHIsgUoAgAhAkHIsgVBADYCACACQQFGDRFByLIFQQA2AgBBLUEcEA0hAkHIsgUoAgAhBEHIsgVBADYCACAEQQFGDRFByLIFQQA2AgAgAiABQZvJABCgBCEEQciyBSgCACEFQciyBUEANgIAIAVBAUYNBCACQQA2AhggAkIANwIQIAJBkMwCNgIAQciyBUEANgIAIAMgAkEBEAVByLIFKAIAIQVByLIFQQA2AgACQCAFQQFHBEBByLIFQQA2AgBB2QAgAkEQakEAEBUhBUHIsgUoAgAhB0HIsgVBADYCACAHQQFHDQELEAYhABAHGiACKAIYIQFByLIFQQA2AgAgARDoAUHIsgUoAgAhAUHIsgVBADYCACABQQFHDQZBABALIQAQBxogABCEAQALIAVBADoAAEHIsgVBADYCAEH8ACAGIAQQBUHIsgUoAgAhAkHIsgVBADYCACACQQFGDRFByLIFQQA2AgBBLUEcEA0hAkHIsgUoAgAhBEHIsgVBADYCACAEQQFGDRFByLIFQQA2AgAgAiABQbfJABCgBCEEQciyBSgCACEFQciyBUEANgIAIAVBAUYNBiACQQA2AhggAkIANwIQIAJBkMwCNgIAQciyBUEANgIAIAMgAkEBEAVByLIFKAIAIQVByLIFQQA2AgACQCAFQQFHBEBByLIFQQA2AgBB2QAgAkEQakEAEBUhBUHIsgUoAgAhB0HIsgVBADYCACAHQQFHDQELEAYhABAHGiACKAIYIQFByLIFQQA2AgAgARDoAUHIsgUoAgAhAUHIsgVBADYCACABQQFHDQhBABALIQAQBxogABCEAQALIAVBADoAAEHIsgVBADYCAEH8ACAGIAQQBUHIsgUoAgAhAkHIsgVBADYCACACQQFGDRFByLIFQQA2AgBBLUEcEA0hAkHIsgUoAgAhBEHIsgVBADYCACAEQQFGDRFByLIFQQA2AgAgAiABQdPJABCgBCEEQciyBSgCACEFQciyBUEANgIAIAVBAUYNCCACQQA2AhggAkIANwIQIAJBkMwCNgIAQciyBUEANgIAIAMgAkEBEAVByLIFKAIAIQVByLIFQQA2AgACQCAFQQFHBEBByLIFQQA2AgBB2QAgAkEQakEAEBUhBUHIsgUoAgAhB0HIsgVBADYCACAHQQFHDQELEAYhABAHGiACKAIYIQFByLIFQQA2AgAgARDoAUHIsgUoAgAhAUHIsgVBADYCACABQQFHDQpBABALIQAQBxogABCEAQALIAVBADoAAEHIsgVBADYCAEH8ACAGIAQQBUHIsgUoAgAhAkHIsgVBADYCACACQQFGDRFByLIFQQA2AgBBLUEcEA0hAkHIsgUoAgAhBEHIsgVBADYCACAEQQFGDRFByLIFQQA2AgAgAiABQfDJABCgBCEEQciyBSgCACEFQciyBUEANgIAIAVBAUYNCiACQQA2AhggAkIANwIQIAJBkMwCNgIAQciyBUEANgIAIAMgAkEBEAVByLIFKAIAIQVByLIFQQA2AgACQCAFQQFHBEBByLIFQQA2AgBB2QAgAkEQakEAEBUhBUHIsgUoAgAhB0HIsgVBADYCACAHQQFHDQELEAYhABAHGiACKAIYIQFByLIFQQA2AgAgARDoAUHIsgUoAgAhAUHIsgVBADYCACABQQFHDQxBABALIQAQBxogABCEAQALIAVBADoAAEHIsgVBADYCAEH8ACAGIAQQBUHIsgUoAgAhAkHIsgVBADYCACACQQFGDRFByLIFQQA2AgBBLUEcEA0hAkHIsgUoAgAhBEHIsgVBADYCACAEQQFGDRFByLIFQQA2AgAgAiABQY/KABCgBCEBQciyBSgCACEEQciyBUEANgIAIARBAUYNDCACQQA2AhggAkIANwIQIAJBkMwCNgIAQciyBUEANgIAIAMgAkEBEAVByLIFKAIAIQNByLIFQQA2AgACQCADQQFHBEBByLIFQQA2AgBB2QAgAkEQakEAEBUhA0HIsgUoAgAhBEHIsgVBADYCACAEQQFHDQELEAYhABAHGiACKAIYIQFByLIFQQA2AgAgARDoAUHIsgUoAgAhAUHIsgVBADYCACABQQFHDQ5BABALIQAQBxogABCEAQALIANBADoAAEHIsgVBADYCAEH8ACAGIAEQBUHIsgUoAgAhAUHIsgVBADYCACABQQFGDREMDwsQBiEAEAcaCyACEPYMDBALEAYhABAHGgsgAhD2DAwOCxAGIQAQBxoLIAIQ9gwMDAsQBiEAEAcaCyACEPYMDAoLEAYhABAHGgsgAhD2DAwICxAGIQAQBxoLIAIQ9gwMBgsQBiEAEAcaCyACEPYMDAQLIAAoAgQoAgQhAUHIsgVBADYCAEH+ACABEA0hAUHIsgUoAgAhA0HIsgVBADYCACADQQFGDQIgASgCACEDIAEsAAshBCAIQdfKADYCAEHIsgVBADYCACAIIAI2AgggCCADIAEgBEEASBs2AgRB/wBBwIwEQavKACAIEBJByLIFKAIAIQFByLIFQQA2AgAgAUEBRg0CCyAIQRBqJAAgAA8LEAYhABAHGiACEPYMDAELEAYhABAHGgsgBhCmAxogABAIAAutDwEFfyMAQRBrIgYkACAAIAEgAhClAyEFIABCADcCLCAAQfTKADYCAAJAAkACQAJAIAJBGHRBGHVBfkwEQEHIsgVBADYCAEEtQTAQDSECQciyBSgCACEDQciyBUEANgIAIANBAUYNA0HIsgVBADYCAEHgACACIAFBkMsAQQBBABAQGkHIsgUoAgAhAUHIsgVBADYCACABQQFGDQJByLIFQQA2AgBB/AAgBSACEAVByLIFKAIAIQJByLIFQQA2AgAgAkEBRw0BDAMLAkAgAkF7aiIDQQhLDQACQAJAAkAgA0EBaw4IAwMDAwMBAwIAC0HIsgVBADYCAEEtQTAQDSECQciyBSgCACEDQciyBUEANgIAIANBAUYNBUHIsgVBADYCAEHgACACIAFBlcsAQQBBABAQGkHIsgUoAgAhAUHIsgVBADYCACABQQFHBEBByLIFQQA2AgBB/AAgBSACEAVByLIFKAIAIQJByLIFQQA2AgAgAkEBRg0GDAQLEAYhABAHGiACEPYMDAYLQciyBUEANgIAQS1BHBANIQJByLIFKAIAIQNByLIFQQA2AgAgA0EBRg0EQciyBUEANgIAIAIgAUHVyAAQoAQhA0HIsgUoAgAhBEHIsgVBADYCAAJAAkACQAJAIARBAUcEQCACQQA2AhggAkIANwIQIAJBkMwCNgIAQciyBUEANgIAQaDMAigCACACQQEQBUHIsgUoAgAhBEHIsgVBADYCAAJAIARBAUcEQEHIsgVBADYCAEHZACACQRBqQQAQFSEEQciyBSgCACEHQciyBUEANgIAIAdBAUcNAQsQBiEAEAcaIAIoAhghAUHIsgVBADYCACABEOgBQciyBSgCACEBQciyBUEANgIAIAFBAUcNAkEAEAshABAHGiAAEIQBAAsgBEEAOgAAQciyBUEANgIAQfwAIAUgAxAFQciyBSgCACECQciyBUEANgIAIAJBAUYNCUHIsgVBADYCAEEtQRwQDSECQciyBSgCACEDQciyBUEANgIAIANBAUYNCUHIsgVBADYCACACIAFBmssAEKAEIQNByLIFKAIAIQRByLIFQQA2AgAgBEEBRg0CIAJBADYCGCAC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ACEHQciyBUEANgIAIAdBAUcNAQsQBiEBEAcaIAIoAhghAEHIsgVBADYCACAAEOgBQciyBSgCACEAQciyBUEANgIAIABBAUcNBUEAEAshARAHGiABEIQBAAsgA0IANwMAIAJBAToAHCACQaDQAjYCAEHIsgVBADYCAEH8ACAGIAUQBUHIsgUoAgAhAkHIsgVBADYCACACQQFGDQBByLIFQQA2AgBBLUEgEA0hAkHIsgUoAgAhBUHIsgVBADYCACAFQQFGDQBByLIFQQA2AgAgAiABQdvMABCgBCEFQciyBSgCACEDQciyBUEANgIAIANBAUYNBSACQQA2AhggAkIANwIQIAJBwM8CNgIAQciyBUEANgIAIAQgAkEBEAVByLIFKAIAIQNByLIFQQA2AgACQCADQQFHBEBByLIFQQA2AgBB3AAgAkEQakEAEBUhA0HIsgUoAgAhB0HIsgVBADYCACAHQQFHDQELEAYhARAHGiACKAIYIQBByLIFQQA2AgAgABDoAUHIsgUoAgAhAEHIsgVBADYCACAAQQFHDQdBABALIQEQBxogARCEAQALIANCADcDACACQQE6ABwgAkGg0AI2AgBByLIFQQA2AgBB/AAgBiAFEAVByLIFKAIAIQJByLIFQQA2AgAgAkEBRg0AQciyBUEANgIAQS1BIBANIQJByLIFKAIAIQVByLIFQQA2AgAgBUEBRg0AQciyBUEANgIAIAIgAUH5zAAQoAQhBUHIsgUoAgAhA0HIsgVBADYCACADQQFGDQcgAkEANgIYIAJCADcCECACQcDPAjYCAEHIsgVBADYCACAEIAJBARAFQciyBSgCACEEQciyBUEANgIAAkAgBEEBRwRAQciyBUEANgIAQdwAIAJBEGpBABAVIQRByLIFKAIAIQNByLIFQQA2AgAgA0EBRw0BCxAGIQEQBxogAigCGCEAQciyBUEANgIAIAAQ6AFByLIFKAIAIQBByLIFQQA2AgAgAEEBRw0JQQAQCyEBEAcaIAEQhAEACyAEQgA3AwAgAkEEOgAcIAJBoNACNgIAQciyBUEANgIAQfwAIAYgBRAFQciyBSgCACECQciyBUEANgIAIAJBAUYNAEHIsgVBADYCAEEtQSQQDSECQciyBSgCACEEQciyBUEANgIAIARBAUYNAEHIsgVBADYCAEH9ACACIAFBgs0AQQFB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rAEoAgAgAkIAUiIBOgANIABBBhCsASgCACABOgANIABBBxCsASgCACABOgANIABBCBCsASgCACABOgANIABBCRCsASgCACABOgANIABBChCsASgCACABOgANIABBCxCsASgCACABOgANIABBDBCsASgCACABOgANC4sPAQZ/IAAgAUEREKUDIQUgAEGYzgA2AgBByLIFQQA2AgBBLUEgEA0hAkHIsgUoAgAhA0HIsgVBADYCAAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkAgA0EBRg0AQciyBUEANgIAIAIgAUHAzAAQoAQhBkHIsgUoAgAhA0HIsgVBADYCACADQQFGDQEgAkEANgIYIAJCADcCECACQcDPAjYCAEHIsgVBADYCAEHQzwIoAgAiAyACQQEQBUHIsgUoAgAhBEHIsgVBADYCAAJAIARBAUcEQEHIsgVBADYCAEHcACACQRBqQQAQFSEEQciyBSgCACEHQciyBUEANgIAIAdBAUcNAQsQBiEBEAcaIAIoAhghAEHIsgVBADYCACAAEOgBQciyBSgCACEAQciyBUEANgIAIABBAUcNA0EAEAshARAHGiABEIQBAAsgBEIANwMAIAJBCjoAHCACQaDQAjYCAEHIsgVBADYCAEH8ACAFIAYQBUHIsgUoAgAhAkHIsgVBADYCACACQQFGDQBByLIFQQA2AgBBLUEgEA0hAkHIsgUoAgAhBkHIsgVBADYCACAGQQFGDQBByLIFQQA2AgAgAiABQdPMABCgBCEGQciyBSgCACEEQciyBUEANgIAIARBAUYNAyACQQA2AhggAkIANwIQIAJBwM8CNgIAQciyBUEANgIAIAMgAkEBEAVByLIFKAIAIQRByLIFQQA2AgACQCAEQQFHBEBByLIFQQA2AgBB3AAgAkEQakEAEBUhBEHIsgUoAgAhB0HIsgVBADYCACAHQQFHDQELEAYhARAHGiACKAIYIQBByLIFQQA2AgAgABDoAUHIsgUoAgAhAEHIsgVBADYCACAAQQFHDQVBABALIQEQBxogARCEAQALIARCADcDACACQQE6ABwgAkGg0AI2AgBByLIFQQA2AgBB/AAgBSAGEAVByLIFKAIAIQJByLIFQQA2AgAgAkEBRg0AQciyBUEANgIAQS1BIBANIQJByLIFKAIAIQZByLIFQQA2AgAgBkEB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QciyBUEANgIAQdDPAigCACIDIAJBARAFQciyBSgCACEFQciyBUEANgIAAkAgBUEBRwRAQciyBUEANgIAQdwAIAJBEGpBABAVIQVByLIFKAIAIQhByLIFQQA2AgAgCEEBRw0BCxAGIQEQBxogAigCGCEAQciyBUEANgIAIAAQ6AFByLIFKAIAIQBByLIFQQA2AgAgAEEBRw0FQQAQCyEBEAcaIAEQhAEACyAFQgA3AwAgAkEBOgAcIAJBoNACNgIAQciyBUEANgIAQfwAIAYgBBAFQciyBSgCACECQciyBUEANgIAIAJBAUYNAEHIsgVBADYCAEEtQSAQDSECQciyBSgCACEEQciyBUEANgIAIARBAUYNAEHIsgVBADYCACACIAFB08wAEKAEIQRByLIFKAIAIQVByLIFQQA2AgAgBUEBRg0FIAJBADYCGCACQgA3AhAgAkHAzwI2AgBByLIFQQA2AgAgAyACQQEQBUHIsgUoAgAhBUHIsgVBADYCAAJAIAVBAUcEQEHIsgVBADYCAEHcACACQRBqQQAQFSEFQciyBSgCACEIQciyBUEANgIAIAhBAUcNAQsQBiEBEAcaIAIoAhghAEHIsgVBADYCACAAEOgBQciyBSgCACEAQciyBUEANgIAIABBAUcNB0EAEAshARAHGiABEIQBAAsgBUIANwMAIAJBAToAHCACQaDQAjYCAEHIsgVBADYCAEH8ACAGIAQQBUHIsgUoAgAhAkHIsgVBADYCACACQQFGDQBByLIFQQA2AgBBLUEgEA0hAkHIsgUoAgAhBEHIsgVBADYCACAEQQFGDQBByLIFQQA2AgAgAiABQfLOABCgBCEEQciyBSgCACEFQciyBUEANgIAIAVBAUYNByACQQA2AhggAkIANwIQIAJBwM8CNgIAQciyBUEANgIAIAMgAkEBEAVByLIFKAIAIQVByLIFQQA2AgACQCAFQQFHBEBByLIFQQA2AgBB3AAgAkEQakEAEBUhBUHIsgUoAgAhCEHIsgVBADYCACAIQQFHDQELEAYhARAHGiACKAIYIQBByLIFQQA2AgAgABDoAUHIsgUoAgAhAEHIsgVBADYCACAAQQFHDQlBABALIQEQBxogARCEAQALIAVCADcDACACQQE6ABwgAkGg0AI2AgBByLIFQQA2AgBB/AAgBiAEEAVByLIFKAIAIQJByLIFQQA2AgAgAkEBRg0AQciyBUEANgIAQS1BIBANIQJByLIFKAIAIQRByLIFQQA2AgAgBEEBRg0AQciyBUEANgIAIAIgAUGAzwAQoAQhBEHIsgUoAgAhBUHIsgVBADYCACAFQQFGDQkgAkEANgIYIAJCADcCECACQcDPAjYCAEHIsgVBADYCACADIAJBARAFQciyBSgCACEDQciyBUEANgIAAkAgA0EBRwRAQciyBUEANgIAQdwAIAJBEGpBABAVIQNByLIFKAIAIQVByLIFQQA2AgAgBUEBRw0BCxAGIQEQBxogAigCGCEAQciyBUEANgIAIAAQ6AFByLIFKAIAIQBByLIFQQA2AgAgAEEBRw0LQQAQCyEBEAcaIAEQhAEACyADQgA3AwAgAkEFOgAcIAJBoNACNgIAQciyBUEANgIAQfwAIAYgBBAFQciyBSgCACECQciyBUEANgIAIAJBAUYNAEHIsgVBADYCAEEtQRwQDSECQciyBSgCACEDQciyBUEANgIAIANBAUYNAEHIsgVBADYCACACIAFBj88AEKAEIQNByLIFKAIAIQRByLIFQQA2AgAgBEEBRg0LIAJBADYCGCACQgA3AhAgAkGgzQI2AgBByLIFQQA2AgAgByACQQEQBUHIsgUoAgAhBEHIsgVBADYCAAJAIARBAUcEQEHIsgVBADYCAEHeACACQRBqQQAQFSEEQciyBSgCACEFQciyBUEANgIAIAVBAUcNAQsQBiEBEAcaIAIoAhghAEHIsgVBADYCACAAEOgBQciyBSgCACEAQciyBUEANgIAIABBAUcNDUEAEAshARAHGiABEIQBAAsgBEEAOwEAQciyBUEANgIAQfwAIAYgAxAFQciyBSgCACECQciyBUEANgIAIAJBAUYNAEHIsgVBADYCAEEtQSQQDSECQciyBSgCACEDQciyBUEANgIAIANBAUYNAEHIsgVBADYCAEH9ACACIAFBgs0AQQFBAEEAEBYaQciyBSgCACEDQciyBUEANgIAIANBAUYNDUHIsgVBADYCAEH8ACAGIAIQBUHIsgUoAgAhAkHIsgVBADYCACACQQFGDQBByLIFQQA2AgBBLUEcEA0hAkHIsgUoAgAhA0HIsgVBADYCACADQQFGDQBByLIFQQA2AgAgAiABQZ3PABCgBCEDQciyBSgCACEEQciyBUEANgIA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QQEQrAEoAgBBEGpBABCpASkDACEBIABBBRCsASgCACABUDoADSAAQQIQrAEoAgBBEGpBABCpASkDACEBIABBBhCsASgCACABUDoADSAAQQMQrAEoAgBBEGpBABCpASkDACEBIABBBxCsASgCACABUDoADQuoFgEGfyAAIAFBBBClAyEGIABB9M8ANgIAQciyBUEANgIAQS1BHBANIQJByLIFKAIAIQNByLIFQQA2AgACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQCADQQFGDQBByLIFQQA2AgAgAiABQZDQABCgBCEDQciyBSgCACEFQciyBUEANgIAIAVBAUYNASACQQA2AhggAkIANwIQIAJBkMwCNgIAQciyBUEANgIAQaDMAigCACACQQEQBUHIsgUoAgAhBUHIsgVBADYCAAJAIAVBAUcEQEHIsgVBADYCAEHZACACQRBqQQAQFSEFQciyBSgCACEEQciyBUEANgIAIARBAUcNAQsQBiEBEAcaIAIoAhghAEHIsgVBADYCACAAEOgBQciyBSgCACEAQciyBUEANgIAIABBAUcNA0EAEAshARAHGiABEIQBAAsgBUEAOgAAQciyBUEANgIAQfwAIAYgAxAFQciyBSgCACECQciyBUEANgIAIAJBAUYNAEHIsgVBADYCAEEtQSAQDSECQciyBSgCACEDQciyBUEANgIAIANBAUYNAEHIsgVBADYCACACIAFBndAAEKAEIQVByLIFKAIAIQNByLIFQQA2AgAgA0EBRg0DIAJBADYCGCACQgA3AhAgAkHAzwI2AgBByLIFQQA2AgBB0M8CKAIAIgMgAkEBEAVByLIFKAIAIQRByLIFQQA2AgACQCAEQQFHBEBByLIFQQA2AgBB3AAgAkEQakEAEBUhBEHIsgUoAgAhB0HIsgVBADYCACAHQQFHDQELEAYhARAHGiACKAIYIQBByLIFQQA2AgAgABDoAUHIsgUoAgAhAEHIsgVBADYCACAAQQFHDQVBABALIQEQBxogARCEAQALIARCADcDACACQQY6ABwgAkGg0AI2AgBByLIFQQA2AgBB/AAgBiAFEAVByLIFKAIAIQJByLIFQQA2AgAgAkEBRg0AQciyBUEANgIAQS1BIBANIQJByLIFKAIAIQVByLIFQQA2AgAgBUEBRg0AQciyBUEANgIAIAIgAUGo0AAQoAQhBUHIsgUoAgAhBEHIsgVBADYCACAEQQFGDQUgAkEANgIYIAJCADcCECACQcDPAjYCAEHIsgVBADYCACADIAJBARAFQciyBSgCACEEQciyBUEANgIAAkAgBEEBRwRAQciyBUEANgIAQdwAIAJBEGpBABAVIQRByLIFKAIAIQdByLIFQQA2AgAgB0EBRw0BCxAGIQEQBxogAigCGCEAQciyBUEANgIAIAAQ6AFByLIFKAIAIQBByLIFQQA2AgAgAEEBRw0HQQAQCyEBEAcaIAEQhAEACyAEQgA3AwAgAkEBOgAcIAJBoNACNgIAQciyBUEANgIAQfwAIAYgBRAFQciyBSgCACECQciyBUEANgIAIAJBAUYNAEHIsgVBADYCAEEtQSAQDSECQciyBSgCACEFQciyBUEANgIAIAVBAUYNAEHIsgVBADYCACACIAFB+cwAEKAEIQVByLIFKAIAIQRByLIFQQA2AgAgBEEBRg0HIAJBADYCGCACQgA3AhAgAkHAzwI2AgBByLIFQQA2AgAgAyACQQEQBUHIsgUoAgAhBEHIsgVBADYCAAJAIARBAUcEQEHIsgVBADYCAEHcACACQRBqQQAQFSEEQciyBSgCACEHQciyBUEANgIAIAdBAUcNAQsQBiEBEAcaIAIoAhghAEHIsgVBADYCACAAEOgBQciyBSgCACEAQciyBUEANgIAIABBAUcNCUEAEAshARAHGiABEIQBAAsgBEIANwMAIAJBAToAHCACQaDQAjYCAEHIsgVBADYCAEH8ACAGIAUQBUHIsgUoAgAhAkHIsgVBADYCACACQQFGDQBByLIFQQA2AgBBLUEgEA0hAkHIsgUoAgAhBUHIsgVBADYCACAFQQFGDQBByLIFQQA2AgAgAiABQbHQABCgBCEFQciyBSgCACEEQciyBUEANgIAIARBAUYNCSACQQA2AhggAkIANwIQIAJBwM8CNgIAQciyBUEANgIAIAMgAkEBEAVByLIFKAIAIQNByLIFQQA2AgACQCADQQFHBEBByLIFQQA2AgBB3AAgAkEQakEAEBUhA0HIsgUoAgAhBEHIsgVBADYCACAEQQFHDQELEAYhARAHGiACKAIYIQBByLIFQQA2AgAgABDoAUHIsgUoAgAhAEHIsgVBADYCACAAQQFHDQtBABALIQEQBxogARCEAQALIANCADcDACACQRg6ABwgAkGg0AI2AgBByLIFQQA2AgBB/AAgBiAFEAVByLIFKAIAIQJByLIFQQA2AgAgAkEBRg0AQciyBUEANgIAQS1BHBANIQJByLIFKAIAIQNByLIFQQA2AgAgA0EBRg0AQciyBUEANgIAIAIgAUG+0AAQoAQhA0HIsgUoAgAhBUHIsgVBADYCACAFQQFGDQsgAkEANgIYIAJCADcCECACQeDOAjYCAEHIsgVBADYCAEHwzgIoAgAiBSACQQEQBUHIsgUoAgAhBEHIsgVBADYCAAJAIARBAUcEQEHIsgVBADYCAEH7ACACQRBqQQAQFSEEQciyBSgCACEHQciyBUEANgIAIAdBAUcNAQsQBiEBEAcaIAIoAhghAEHIsgVBADYCACAAEOgBQciyBSgCACEAQciyBUEANgIAIABBAUcNDUEAEAshARAHGiABEIQBAAsgBEEANgIAQciyBUEANgIAQfwAIAYgAxAFQciyBSgCACECQciyBUEANgIAIAJBAUYNAEHIsgVBADYCAEEtQRwQDSECQciyBSgCACEDQciyBUEANgIAIANBAUYNAEHIsgVBADYCACACIAFBydAAEKAEIQNByLIFKAIAIQRByLIFQQA2AgAgBEEBRg0NIAJBADYCGCACQgA3AhAgAkHgzgI2AgBByLIFQQA2AgAgBSACQQEQBUHIsgUoAgAhBUHIsgVBADYCAAJAIAVBAUcEQEHIsgVBADYCAEH7ACACQRBqQQAQFSEFQciyBSgCACEEQciyBUEANgIAIARBAUcNAQsQBiEBEAcaIAIoAhghAEHIsgVBADYCACAAEOgBQciyBSgCACEAQciyBUEANgIAIABBAUcND0EAEAshARAHGiABEIQBAAsgBUEANgIAQciyBUEANgIAQfwAIAYgAxAFQciyBSgCACECQciyBUEANgIAIAJBAUYNAEHIsgVBADYCAEEtQSgQDSECQciyBSgCACEDQciyBUEANgIAIANBAUYNAEHIsgVBADYCACACIAFB1NAAQQVBAEEAQQEQzwQaQciyBSgCACEDQciyBUEANgIAIANBAUYND0HIsgVBADYCAEH8ACAGIAIQBUHIsgUoAgAhAkHIsgVBADYCACACQQFGDQBByLIFQQA2AgBBLUEoEA0hAkHIsgUoAgAhA0HIsgVBADYCACADQQFGDQBByLIFQQA2AgAgAiABQeTQAEETQQBBAEEAEM8EGkHIsgUoAgAhAUHIsgVBADYCACABQQFGDRBByLIFQQA2AgBB/AAgBiACEAVByLIFKAIAIQFByLIFQQA2AgAgAUEBRw0SCxAGIQEQBxoMEAsQBiEBEAcaCyACEPYMDA4LEAYhARAHGgsgAhD2DAwMCxAGIQEQBxoLIAIQ9gwMCgsQBiEBEAcaCyACEPYMDAgLEAYhARAHGgsgAhD2DAwGCxAGIQEQBxoLIAIQ9gwMBAsQBiEBEAcaCyACEPYMDAILEAYhARAHGiACEPYMDAELEAYhARAHGiACEPYMCyAGEKYDGiABEAgACyAACxYAIABBHGpBAxCsASgCAEIBQQAQrgEL80IBCH8gACABQQYQpQMhCCAAQZDRADYCAEHIsgVBADYCAEEtQRwQDSEDQciyBSgCACECQciyBUEANgIAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAIAJBAUYNAEHIsgVBADYCACADIAFBrNEAEKAEIQJByLIFKAIAIQdByLIFQQA2AgAgB0EBRg0BIANBADYCGCADQgA3AhAgA0GQzAI2AgBByLIFQQA2AgBBoMwCKAIAIgcgA0EBEAVByLIFKAIAIQVByLIFQQA2AgACQCAFQQFHBEBByLIFQQA2AgBB2QAgA0EQakEAEBUhBUHIsgUoAgAhBEHIsgVBADYCACAEQQFHDQELEAYhARAHGiADKAIYIQJByLIFQQA2AgAgAhDoAUHIsgUoAgAhAkHIsgVBADYCACACQQFHDQNBABALIQEQBxogARCEAQALIAVBADoAAEHIsgVBADYCAEH8ACAIIAIQBUHIsgUoAgAhA0HIsgVBADYCACADQQFGDQBByLIFQQA2AgBBLUEgEA0hAkHIsgUoAgAhA0HIsgVBADYCACADQQFGDQBByLIFQQA2AgAgAiABQbfRABCgBCEFQciyBSgCACEDQciyBUEANgIAIANBAUYNAyACQQA2AhggAkIANwIQIAJBwM8CNgIAQciyBUEANgIAQdDPAigCACIDIAJBARAFQciyBSgCACEEQciyBUEANgIAAkAgBEEBRwRAQciyBUEANgIAQdwAIAJBEGpBABAVIQRByLIFKAIAIQZByLIFQQA2AgAgBkEBRw0BCxAGIQEQBxogAigCGCEDQciyBUEANgIAIAMQ6AFByLIFKAIAIQNByLIFQQA2AgAgA0EBRw0FQQAQCyEBEAcaIAEQhAEACyAEQgA3AwAgAkEBOgAcIAJBoNACNgIAQciyBUEANgIAQfwAIAggBRAFQciyBSgCACECQciyBUEANgIAIAJBAUYNAEHIsgVBADYCAEEtQSAQDSECQciyBSgCACEFQciyBUEANgIAIAVBAUYNAEHIsgVBADYCACACIAFBztEAEKAEIQVByLIFKAIAIQRByLIFQQA2AgAgBEEBRg0FIAJBADYCGCACQgA3AhAgAkHAzwI2AgBByLIFQQA2AgAgAyACQQEQBUHIsgUoAgAhBEHIsgVBADYCAAJAIARBAUcEQEHIsgVBADYCAEHcACACQRBqQQAQFSEEQciyBSgCACEGQciyBUEANgIAIAZBAUcNAQsQBiEBEAcaIAIoAhghA0HIsgVBADYCACADEOgBQciyBSgCACEDQciyBUEANgIAIANBAUcNB0EAEAshARAHGiABEIQBAAsgBEIANwMAIAJBAToAHCACQaDQAjYCAEHIsgVBADYCAEH8ACAIIAUQBUHIsgUoAgAhAkHIsgVBADYCACACQQFGDQBByLIFQQA2AgBBLUEgEA0hAkHIsgUoAgAhBUHIsgVBADYCACAFQQFGDQBByLIFQQA2AgAgAiABQePRABCgBCEFQciyBSgCACEEQciyBUEANgIAIARBAUYNByACQQA2AhggAkIANwIQIAJBwM8CNgIAQciyBUEANgIAIAMgAkEBEAVByLIFKAIAIQRByLIFQQA2AgACQCAEQQFHBEBByLIFQQA2AgBB3AAgAkEQakEAEBUhBEHIsgUoAgAhBkHIsgVBADYCACAGQQFHDQELEAYhARAHGiACKAIYIQNByLIFQQA2AgAgAxDoAUHIsgUoAgAhA0HIsgVBADYCACADQQFHDQlBABALIQEQBxogARCEAQALIARCADcDACACQQE6ABwgAkGg0AI2AgBByLIFQQA2AgBB/AAgCCAFEAVByLIFKAIAIQJByLIFQQA2AgAgAkEBRg0AQciyBUEANgIAQS1BIBANIQJByLIFKAIAIQVByLIFQQA2AgAgBUEBRg0AQciyBUEANgIAIAIgAUH80QAQoAQhBUHIsgUoAgAhBEHIsgVBADYCACAEQQFGDQkgAkEANgIYIAJCADcCECACQcDPAjYCAEHIsgVBADYCACADIAJBARAFQciyBSgCACEEQciyBUEANgIAAkAgBEEBRwRAQciyBUEANgIAQdwAIAJBEGpBABAVIQRByLIFKAIAIQZByLIFQQA2AgAgBkEBRw0BCxAGIQEQBxogAigCGCEDQciyBUEANgIAIAMQ6AFByLIFKAIAIQNByLIFQQA2AgAgA0EBRw0LQQAQCyEBEAcaIAEQhAEACyAEQgA3AwAgAkEBOgAcIAJBoNACNgIAQciyBUEANgIAQfwAIAggBRAFQciyBSgCACECQciyBUEANgIAIAJBAUYNAEHIsgVBADYCAEEtQSAQDSECQciyBSgCACEFQciyBUEANgIAIAVBAUYNAEHIsgVBADYCACACIAFBmdIAEKAEIQVByLIFKAIAIQRByLIFQQA2AgAgBEEBRg0LIAJBADYCGCACQgA3AhAgAkHAzwI2AgBByLIFQQA2AgAgAyACQQEQBUHIsgUoAgAhBEHIsgVBADYCAAJAIARBAUcEQEHIsgVBADYCAEHcACACQRBqQQAQFSEEQciyBSgCACEGQciyBUEANgIAIAZBAUcNAQsQBiEBEAcaIAIoAhghA0HIsgVBADYCACADEOgBQciyBSgCACEDQciyBUEANgIAIANBAUcNDUEAEAshARAHGiABEIQBAAsgBEIANwMAIAJBAToAHCACQaDQAjYCAEHIsgVBADYCAEH8ACAIIAUQBUHIsgUoAgAhAkHIsgVBADYCACACQQFGDQBByLIFQQA2AgBBLUEgEA0hAkHIsgUoAgAhBUHIsgVBADYCACAFQQFGDQBByLIFQQA2AgAgAiABQajSABCgBCEFQciyBSgCACEEQciyBUEANgIAIARBAUYNDSACQQA2AhggAkIANwIQIAJBwM8CNgIAQciyBUEANgIAIAMgAkEBEAVByLIFKAIAIQRByLIFQQA2AgACQCAEQQFHBEBByLIFQQA2AgBB3AAgAkEQakEAEBUhBEHIsgUoAgAhBkHIsgVBADYCACAGQQFHDQELEAYhARAHGiACKAIYIQNByLIFQQA2AgAgAxDoAUHIsgUoAgAhA0HIsgVBADYCACADQQFHDQ9BABALIQEQBxogARCEAQALIARCADcDACACQQE6ABwgAkGg0AI2AgBByLIFQQA2AgBB/AAgCCAFEAVByLIFKAIAIQJByLIFQQA2AgAgAkEBRg0AQciyBUEANgIAQS1BIBANIQJByLIFKAIAIQVByLIFQQA2AgAgBUEBRg0AQciyBUEANgIAIAIgAUG60gAQoAQhBUHIsgUoAgAhBEHIsgVBADYCACAEQQFGDQ8gAkEANgIYIAJCADcCECACQcDPAjYCAEHIsgVBADYCACADIAJBARAFQciyBSgCACEEQciyBUEANgIAAkAgBEEBRwRAQciyBUEANgIAQdwAIAJBEGpBABAVIQRByLIFKAIAIQZByLIFQQA2AgAgBkEBRw0BCxAGIQEQBxogAigCGCEDQciyBUEANgIAIAMQ6AFByLIFKAIAIQNByLIFQQA2AgAgA0EBRw0RQQAQCyEBEAcaIAEQhAEACyAEQgA3AwAgAkEBOgAcIAJBoNACNgIAQciyBUEANgIAQfwAIAggBRAFQciyBSgCACECQciyBUEANgIAIAJBAUYNAEHIsgVBADYCAEEtQSAQDSECQciyBSgCACEFQciyBUEANgIAIAVBAUYNAEHIsgVBADYCACACIAFBxtIAEKAEIQVByLIFKAIAIQRByLIFQQA2AgAgBEEBRg0RIAJBADYCGCACQgA3AhAgAkHAzwI2AgBByLIFQQA2AgAgAyACQQEQBUHIsgUoAgAhBEHIsgVBADYCAAJAIARBAUcEQEHIsgVBADYCAEHcACACQRBqQQAQFSEEQciyBSgCACEGQciyBUEANgIAIAZBAUcNAQsQBiEBEAcaIAIoAhghA0HIsgVBADYCACADEOgBQciyBSgCACEDQciyBUEANgIAIANBAUcNE0EAEAshARAHGiABEIQBAAsgBEIANwMAIAJBAToAHCACQaDQAjYCAEHIsgVBADYCAEH8ACAIIAUQBUHIsgUoAgAhAkHIsgVBADYCACACQQFGDQBByLIFQQA2AgBBLUEcEA0hAkHIsgUoAgAhBUHIsgVBADYCACAFQQFGDQBByLIFQQA2AgAgAiABQdPSABCgBCEEQciyBSgCACEFQciyBUEANgIAIAVBAUYNEyACQQA2AhggAkIANwIQIAJB4M4CNgIAQciyBUEA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BkHIsgVBADYCACAGQQFHDQELEAYhARAHGiACKAIYIQNByLIFQQA2AgAgAxDoAUHIsgUoAgAhA0HIsgVBADYCACADQQFHDSVBABALIQEQBxogARCEAQALIARCADcDACACQQU6ABwgAkGg0AI2AgBByLIFQQA2AgBB/AAgCCAHEAVByLIFKAIAIQJByLIFQQA2AgAgAkEBRg0AQciyBUEANgIAQS1BIBANIQJByLIFKAIAIQdByLIFQQA2AgAgB0EBRg0AQciyBUEANgIAIAIgAUH5zAAQoAQhB0HIsgUoAgAhBEHIsgVBADYCACAEQQFGDSUgAkEANgIYIAJCADcCECACQcDPAjYCAEHIsgVBADYCACADIAJBARAFQciyBSgCACEEQciyBUEANgIAAkAgBEEBRwRAQciyBUEANgIAQdwAIAJBEGpBABAVIQRByLIFKAIAIQZByLIFQQA2AgAgBkEBRw0BCxAGIQEQBxogAigCGCEDQciyBUEANgIAIAMQ6AFByLIFKAIAIQNByLIFQQA2AgAgA0EBRw0nQQAQCyEBEAcaIAEQhAEACyAEQgA3AwAgAkECOgAcIAJBoNACNgIAQciyBUEANgIAQfwAIAggBxAFQciyBSgCACECQciyBUEANgIAIAJBAUYNAEHIsgVBADYCAEEtQRwQDSECQciyBSgCACEHQciyBUEANgIAIAdBAUYNAEHIsgVBADYCACACIAFB6NMAEKAEIQdByLIFKAIAIQRByLIFQQA2AgAgBEEBRg0nIAJBADYCGCACQgA3AhAgAkHgzgI2AgBByLIFQQA2AgAgBSACQQEQBUHIsgUoAgAhBUHIsgVBADYCAAJAIAVBAUcEQEHIsgVBADYCAEH7ACACQRBqQQAQFSEFQciyBSgCACEEQciyBUEANgIAIARBAUcNAQsQBiEBEAcaIAIoAhghA0HIsgVBADYCACADEOgBQciyBSgCACEDQciyBUEANgIAIANBAUcNKUEAEAshARAHGiABEIQBAAsgBUEANgIAQciyBUEANgIAQfwAIAggBxAFQciyBSgCACECQciyBUEANgIAIAJBAUYNAEHIsgVBADYCAEEtQRwQDSECQciyBSgCACEHQciyBUEANgIAIAdBAUYNAEHIsgVBADYCACACIAFB8tMAEKAEIQdByLIFKAIAIQVByLIFQQA2AgAgBUEBRg0pIAJBADYCGCACQgA3AhAgAkGgzQI2AgBByLIFQQA2AgBBsM0CKAIAIgUgAkEBEAVByLIFKAIAIQRByLIFQQA2AgACQCAEQQFHBEBByLIFQQA2AgBB3gAgAkEQakEAEBUhBEHIsgUoAgAhBkHIsgVBADYCACAGQQFHDQELEAYhARAHGiACKAIYIQNByLIFQQA2AgAgAxDoAUHIsgUoAgAhA0HIsgVBADYCACADQQFHDStBABALIQEQBxogARCEAQALIARBADsBAEHIsgVBADYCAEH8ACAIIAcQBUHIsgUoAgAhAkHIsgVBADYCACACQQFGDQBByLIFQQA2AgBBLUEcEA0hAkHIsgUoAgAhB0HIsgVBADYCACAHQQFGDQBByLIFQQA2AgAgAiABQYXUABCgBCEHQciyBSgCACEEQciyBUEANgIAIARBAUYNKyACQQA2AhggAkIANwIQIAJBoM0CNgIAQciyBUEANgIAIAUgAkEBEAVByLIFKAIAIQVByLIFQQA2AgACQCAFQQFHBEBByLIFQQA2AgBB3gAgAkEQakEAEBUhBUHIsgUoAgAhBEHIsgVBADYCACAEQQFHDQELEAYhARAHGiACKAIYIQNByLIFQQA2AgAgAxDoAUHIsgUoAgAhA0HIsgVBADYCACADQQFHDS1BABALIQEQBxogARCEAQALIAVBADsBAEHIsgVBADYCAEH8ACAIIAcQBUHIsgUoAgAhAkHIsgVBADYCACACQQFGDQBByLIFQQA2AgBBLUEgEA0hAkHIsgUoAgAhB0HIsgVBADYCACAHQQFGDQBByLIFQQA2AgAgAiABQZ3UABCgBCEHQciyBSgCACEFQciyBUEANgIAIAVBAUYNLSACQQA2AhggAkIANwIQIAJBwM8CNgIAQciyBUEANgIAIAMgAkEBEAVByLIFKAIAIQVByLIFQQA2AgACQCAFQQFHBEBByLIFQQA2AgBB3AAgAkEQakEAEBUhBUHIsgUoAgAhBEHIsgVBADYCACAEQQFHDQELEAYhARAHGiACKAIYIQNByLIFQQA2AgAgAxDoAUHIsgUoAgAhA0HIsgVBADYCACADQQFHDS9BABALIQEQBxogARCEAQALIAVCADcDACACQcAAOgAcIAJBoNACNgIAQciyBUEANgIAQfwAIAggBxAFQciyBSgCACECQciyBUEANgIAIAJBAUYNAEHIsgVBADYCAEEtQSAQDSECQciyBSgCACEHQciyBUEANgIAIAdBAUYNAEHIsgVBADYCACACIAFBtNQAEKAEIQFByLIFKAIAIQdByLIFQQA2AgAgB0EBRg0vIAJBADYCGCACQgA3AhAgAkHAzwI2AgBByLIFQQA2AgAgAyACQQEQBUHIsgUoAgAhA0HIsgVBADYCAAJAIANBAUcEQEHIsgVBADYCAEHcACACQRBqQQAQFSEDQciyBSgCACEHQciyBUEANgIAIAdBAUcNAQsQBiEBEAcaIAIoAhghA0HIsgVBADYCACADEOgBQciyBSgCACEDQciyBUEANgIAIANBAUcNMUEAEAshARAHGiABEIQBAAsgA0IANwMAIAJBwAA6ABwgAkGg0AI2AgBByLIFQQA2AgBB/AAgCCABEAVByLIFKAIAIQFByLIFQQA2AgAgAUEBRw0yCxAGIQEQBxoMMAsQBiEBEAcaCyADEPYMDC4LEAYhARAHGgsgAhD2DAwsCxAGIQEQBxoLIAIQ9gwMKgsQBiEBEAcaCyACEPYMDCgLEAYhARAHGgsgAhD2DAwmCxAGIQEQBxoLIAIQ9gwMJAsQBiEBEAcaCyACEPYMDCILEAYhARAHGgsgAhD2DAwgCxAGIQEQBxoLIAIQ9gwMHgsQBiEBEAcaCyACEPYMDBwLEAYhARAHGgsgAhD2DAwaCxAGIQEQBxoLIAIQ9gwMGAsQBiEBEAcaCyACEPYMDBYLEAYhARAHGgsgAhD2DAwUCxAGIQEQBxoLIAIQ9gwMEgsQBiEBEAcaCyACEPYMDBALEAYhARAHGgsgAhD2DAwOCxAGIQEQBxoLIAIQ9gwMDAsQBiEBEAcaCyACEPYMDAoLEAYhARAHGgsgAhD2DAwICxAGIQEQBxoLIAIQ9gwMBgsQBiEBEAcaCyACEPYMDAQLEAYhARAHGgsgAhD2DAwCCxAGIQEQBxoLIAIQ9gwLIAgQpgMaIAEQCAALIAALOgAgAEEcaiIAQQAQrAEoAgBBAkEAEK0BIABBBhCsASgCAEIBQQAQrgEgAEESEKwBKAIAQgNBABCuAQtTACAAIAEQrAMgACABQQBBARCtAyAAQRxqQQAQrAEoAgBBEGpBABCoAS0AAEUEQCAAIAFBAUESEK0DCyAAIAAoAgAoAhgRAQAgACABQRNBfxCtAwvkBQICfwF+AkAgAEEcaiIAQQAQrAEoAgBBEGpBABCoAS0AACICRQRAIABBARCsASgCAEEAOgANIABBAhCsASgCAEEAOgANIABBAxCsASgCAEEAOgANIABBBBCsASgCAEEAOgANIABBBRCsASgCAEEAOgANIABBBhCsASgCAEEAOgANIABBBxCsASgCAEEAOgANIABBCBCsASgCAEEAOgANIABBCRCsASgCAEEAOgANIABBChCsASgCAEEAOgANIABBCxCsASgCAEEAOgANIABBDBCsASgCAEEAOgANIABBDRCsASgCAEEAOgANIABBDhCsASgCAEEAOgANIABBDxCsASgCAEEAOgANIABBEBCsASgCAEEAOgANIABBERCsASgCAEEAOgANIABBEhCsASgCAEEAOgANIABBEhCsASgCAEIDQQAQrgEMAQsgACgCAEECTwRAQQEhAQNAIAAgARCsASgCAEEBOgANIAFBAWoiASAAKAIASQ0ACwsgAkF/aiIBQQFLDQAgAUEBawRAIABBBhCsASgCAEIAQQAQrgEgAEEJEKwBKAIAQegHQQAQ1wEgAEELEKwBKAIAQSBBABCtAQwBCyAAQQYQrAEoAgBCAUEAEK4BCyAAQQgQrAEoAgBBEGpBABCpASkDACEDIABBExCsASgCACADUCIBOgANIABBFBCsASgCACABOgANIABBFRCsASgCACABOgANIABBBhCsASgCAEEQakEAEKkBKQMAIQMgAEEWEKwBKAIAIANCAFIiAjoADSAAQQsQrAEoAgBBEGpBABCoAS0AACEBIABBFhCsASgCACABQcAAIAFBwABJGyIBOgAcIAFFBEAgAEEWEKwBKAIAQQE6AA0LIABBFxCsASgCACACOgANIABBCxCsASgCAEEQakEAEKgBLQAAIQEgAEEXEKwBKAIAIAFBwAAgAUHAAEkbIgE6ABwgAUUEQCAAQRcQrAEoAgBBAToADQsL1gcBB38jAEGwAWsiAyQAAkACQAJAIAAtAAwEQCADQeg+NgJgIANB1D42AihByLIFQQA2AgBBKSADQeAAaiICIANBKGpBBHIiBBAFQciyBSgCACEBQciyBUEANgIAIAFBAUYNASADQoCAgIBwNwOoASADQbA+NgJgIANBnD42AihByLIFQQA2AgBBKiAEEA0hB0HIsgUoAgAh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sgVBADYCACADEOgBQciyBSgCACEDQciyBUEANgIAIANBAUcNB0EAEAshARAHGiABEIQBAAsgBEIANwMAIAJBAToAHCACQaDQAjYCAEHIsgVBADYCAEH8ACAGIAUQBUHIsgUoAgAhAkHIsgVBADYCACACQQFGDQBByLIFQQA2AgBBLUEgEA0hAkHIsgUoAgAhBUHIsgVBADYCACAFQQFGDQBByLIFQQA2AgAgAiABQaDVABCgBCEFQciyBSgCACEEQciyBUEANgIAIARBAUYNByACQQA2AhggAkIANwIQIAJBwM8CNgIAQciyBUEANgIAIAMgAkEBEAVByLIFKAIAIQRByLIFQQA2AgACQCAEQQFHBEBByLIFQQA2AgBB3AAgAkEQakEAEBUhBEHIsgUoAgAhB0HIsgVBADYCACAHQQFHDQELEAYhARAHGiACKAIYIQNByLIFQQA2AgAgAxDoAUHIsgUoAgAhA0HIsgVBADYCACADQQFHDQlBABALIQEQBxogARCEAQALIARCADcDACACQQE6ABwgAkGg0AI2AgBByLIFQQA2AgBB/AAgBiAFEAVByLIFKAIAIQJByLIFQQA2AgAgAkEBRg0AQciyBUEANgIAQS1BIBANIQJByLIFKAIAIQVByLIFQQA2AgAgBUEBRg0AQciyBUEANgIAIAIgAUH5zAAQoAQhBUHIsgUoAgAhBEHIsgVBADYCACAEQQFGDQkgAkEANgIYIAJCADcCECACQcDPAjYCAEHIsgVBADYCACADIAJBARAFQciyBSgCACEDQciyBUEANgIAAkAgA0EBRwRAQciyBUEANgIAQdwAIAJBEGpBABAVIQNByLIFKAIAIQRByLIFQQA2AgAgBEEBRw0BCxAGIQEQBxogAigCGCEDQciyBUEANgIAIAMQ6AFByLIFKAIAIQNByLIFQQA2AgAgA0EBRw0LQQAQCyEBEAcaIAEQhAEACyADQgA3AwAgAkEDOgAcIAJBoNACNgIAQciyBUEANgIAQfwAIAYgBRAFQciyBSgCACECQciyBUEANgIAIAJBAUYNAEHIsgVBADYCAEEtQRwQDSECQciyBSgCACEDQciyBUEANgIAIANBAUYNAEHIsgVBADYCACACIAFBsdUAEKAEIQNByLIFKAIAIQVByLIFQQA2AgAgBUEBRg0LIAJBADYCGCACQgA3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QciyBUEANgIAQd4AIAJBEGpBABAVIQNByLIFKAIAIQRByLIFQQA2AgAgBEEBRw0BCxAGIQAQBxogAigCGCEDQciyBUEANgIAIAMQ6AFByLIFKAIAIQNByLIFQQA2AgAgA0EBRw0DQQAQCyEAEAcaIAAQhAEACyADQQA7AQAgACACNgJsQciyBUEANgIAQS1BHBANIQJByLIFKAIAIQNByLIFQQA2AgAgA0EBRg0AQciyBUEANgIAIAIgAUGN4AAQoAQaQciyBSgCACEDQciyBUEANgIAIANBAUYNAyACQQA2AhggAkIANwIQIAJBkMwCNgIAQciyBUEANgIAQaDMAigCACACQQEQBUHIsgUoAgAhA0HIsgVBADYCAAJAIANBAUcEQEHIsgVBADYCAEHZACACQRBqQQAQFSEDQciyBSgCACEEQciyBUEANgIAIARBAUcNAQsQBiEAEAcaIAIoAhghA0HIsgVBADYCACADEOgBQciyBSgCACEDQciyBUEANgIAIANBAUcNBUEAEAshABAHGiAAEIQBAAsgA0EAOgAAIAAgAjYCcEHIsgVBADYCAEEtQRQQDSECQciyBSgCACEDQciyBUEANgIAIANBAUYNAEHIsgVBADYCACACIAFBn+AAQf8BEOEEGkHIsgUoAgAhA0HIsgVBADYCACADQQFGDQUgACACNgJ0QciyBUEANgIAQS1BHBANIQJByLIFKAIAIQNByLIFQQA2AgAgA0EBRg0AQciyBUEANgIAIAIgAUGo4AAQoAQaQciyBSgCACEDQciyBUEANgIAIANBAUYNBiACQQA2AhggAkIANwIQIAJB4M4CNgIAQciyBUEANgIAQfDOAigCACACQQEQBUHIsgUoAgAhA0HIsgVBADYCAAJAIANBAUcEQEHIsgVBADYCAEH7ACACQRBqQQAQFSEDQciyBSgCACEEQciyBUEANgIAIARBAUcNAQsQBiEAEAcaIAIoAhghA0HIsgVBADYCACADEOgBQciyBSgCACEDQciyBUEANgIAIANBAUcNCEEAEAshABAHGiAAEIQBAAsgA0EANgIAIAAgAjYCeEHIsgVBADYCAEEtQTAQDSECQciyBSgCACEDQciyBUEANgIAIANBAUYNAEHIsgVBADYCAEHgACACIAFBr+AAQQBBABAQGkHIsgUoAgAhA0HIsgVBADYCACADQQFGDQggACACNgJ8IAAoAmwhAkHIsgVBADYCAEHbACABIAIQBUHIsgUoAgAhAkHIsgVBADYCACACQQFGDQAgACgCcCECQciyBUEANgIAQdsAIAEgAhAFQciyBSgCACECQciyBUEANgIAIAJBAUYNACAAKAJ0IQJByLIFQQA2AgBB2wAgASACEAVByLIFKAIAIQJByLIFQQA2AgAgAkEBRg0AIAAoAnghAkHIsgVBADYCAEHbACABIAIQBUHIsgUoAgAhAkHIsgVBADYCACACQQFGDQAgACgCfCECQciyBUEANgIAQdsAIAEgAhAFQciyBSgCACECQciyBUEANgIAIAJBAUcNCgsQBiEAEAcaDAgLEAYhABAHGgsgAhD2DAwGCxAGIQAQBxoLIAIQ9gwMBAsQBiEAEAcaIAIQ9gwMAwsQBiEAEAcaCyACEPYMDAELEAYhABAHGiACEPYMCyABEIQDGiAAEAgACyAACxkAIAAoAnwgACgCIEF4akEAEMAEIAAQjQMLhwYBAn8gACABIAIQggMhAiAAQcDgADYCAEHIsgVBADYCAEEtQRwQDSEBQciyBSgCACEDQciyBUEANgIAAkACQAJAAkACQAJAAkAgA0EBRg0AQciyBUEANgIAIAEgAkHk4AAQoAQaQciyBSgCACEDQciyBUEANgIAIANBAUYNASABQQA2AhggAUIANwIQIAFBkMwCNgIAQciyBUEANgIAQaDMAigCACABQQEQBUHIsgUoAgAhA0HIsgVBADYCAAJAIANBAUcEQEHIsgVBADYCAEHZACABQRBqQQAQFSEDQciyBSgCACEEQciyBUEANgIAIARBAUcNAQsQBiEAEAcaIAEoAhghA0HIsgVBADYCACADEOgBQciyBSgCACEDQciyBUEANgIAIANBAUcNA0EAEAshABAHGiAAEIQBAAsgA0EAOgAAIAAgATYCbEHIsgVBADYCAEEtQRwQDSEBQciyBSgCACEDQciyBUEANgIAIANBAUYNAEHIsgVBADYCACABIAJB7OAAEKAEGkHIsgUoAgAhA0HIsgVBADYCACADQQFGDQMgAUEANgIYIAFCADcCECABQYDOAjYCAEHIsgVBADYCAEGQzgIoAgAgAUEBEAVByLIFKAIAIQNByLIFQQA2AgACQCADQQFHBEBByLIFQQA2AgBB+wAgAUEQakEAEBUhA0HIsgUoAgAhBEHIsgVBADYCACAEQQFHDQELEAYhABAHGiABKAIYIQNByLIFQQA2AgAgAxDoAUHIsgUoAgAhA0HIsgVBADYCACADQQFHDQVBABALIQAQBxogABCEAQALIANBADYCACAAIAE2AnAgACgCbCEBQciyBUEANgIAQdsAIAIgARAFQciyBSgCACEBQciyBUEANgIAIAFBAUYNACAAKAJwIQFByLIFQQA2AgBB2wAgAiABEAVByLIFKAIAIQFByLIFQQA2AgAgAUEBRw0GCxAGIQAQBxoMBAsQBiEAEAcaCyABEPYMDAILEAYhABAHGgsgARD2DAsgAhCEAxogABAIAAsLwQEAIAAgASACEIIDIQEgAEH84AA2AgBByLIFQQA2AgBBrwEgAUGg4QBBAEEBEBxByLIFKAIAIQJByLIFQQA2AgACQCACQQFGDQBByLIFQQA2AgBBrwEgAUGl4QBBAEEBEBxByLIFKAIAIQJByLIFQQA2AgAgAkEBRg0AQciyBUEANgIAQa8BIAFBzN8AQQFBABAcQciyBSgCACECQciyBUEANgIAIAJBAUYNACAADwsQBiEAEAcaIAEQhAMaIAAQCAALxAgBA38jAEEQayIDJAAgACABQarhABDxASAAQbjhADYCAEHIsgVBADYCAEEtQRwQDSEBQciyBSgCACECQciyBUEANgIAAkACQAJAAkACQAJAAkACQAJAIAJBAUYNAEHIsgVBADYCACABIABB3OEAEKAEGkHIsgUoAgAhAkHIsgVBADYCACACQQFGDQEgAUEANgIYIAFCADcCECABQeDOAjYCAEHIsgVBADYCAEHwzgIoAgAgAUEBEAVByLIFKAIAIQJByLIFQQA2AgACQCACQQFHBEBByLIFQQA2AgBB+wAgAUEQakEAEBUhAkHIsgUoAgAhBEHIsgVBADYCACAEQQFHDQELEAYhAxAHGiABKAIYIQJByLIFQQA2AgAgAhDoAUHIsgUoAgAhAkHIsgVBADYCACACQQFHDQNBABALIQAQBxogABCEAQALIAJBADYCACAAIAE2AnRByLIFQQA2AgBBLUEwEA0hAUHIsgUoAgAhAkHIsgVBADYCACACQQFGDQBByLIFQQA2AgBB4AAgASAAQebhAEEEQQAQEBpByLIFKAIAIQJByLIFQQA2AgAgAkEB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AkHIsgUoAgAhBEHIsgVBADYCACAEQQFGDQBByLIFQQA2AgAgAiABQa7oABCgBCEFQciyBSgCACEEQciyBUEANgIAIARBAUYNASACQQA2AhggAkIANwIQIAJBoM0CNgIAQciyBUEANgIAQbDNAigCACIEIAJBARAFQciyBSgCACEDQciyBUEANgIAAkAgA0EBRwRAQciyBUEANgIAQd4AIAJBEGpBABAVIQNByLIFKAIAIQZByLIFQQA2AgAgBkEBRw0BCxAGIQQQBxogAigCGCEAQciyBUEANgIAIAAQ6AFByLIFKAIAIQBByLIFQQA2AgAgAEEBRw0DQQAQCyEBEAcaIAEQhAEACyADQQA7AQBByLIFQQA2AgBB2wAgASAFEAVByLIFKAIAIQJByLIFQQA2AgAgAkEBRg0AQciyBUEANgIAQccBIAEgAUHB6ABBEBAcQciyBSgCACECQciyBUEANgIAIAJBAUYNAEHIsgVBADYCAEEtQRwQDSECQciyBSgCACEFQciyBUEANgIAIAVBAUYNAEHIsgVBADYCACACIAFBy+gAEKAEIQVByLIFKAIAIQNByLIFQQA2AgAgA0EBRg0DIAJBADYCGCACQgA3AhAgAkGgzQI2AgBByLIFQQA2AgAgBCACQQEQBUHIsgUoAgAhA0HIsgVBADYCAAJAIANBAUcEQEHIsgVBADYCAEHeACACQRBqQQAQFSEDQciyBSgCACEGQciyBUEANgIAIAZBAUcNAQsQBiEEEAcaIAIoAhghAEHIsgVBADYCACAAEOgBQciyBSgCACEAQciyBUEANgIAIABBAUcNBUEAEAshARAHGiABEIQBAAsgA0EAOwEAQciyBUEANgIAQdsAIAEgBRAFQciyBSgCACECQciyBUEANgIAIAJBAUYNAEHIsgVBADYCAEEtQRwQDSECQciyBSgCACEFQciyBUEANgIAIAVBAUYNAEHIsgVBADYCACACIAFB0egAEKAEIQVByLIFKAIAIQNByLIFQQA2AgAgA0EBRg0FIAJBADYCGCACQgA3AhAgAkGgzQI2AgBByLIFQQA2AgAgBCACQQEQBUHIsgUoAgAhA0HIsgVBADYCAAJAIANBAUcEQEHIsgVBADYCAEHeACACQRBqQQAQFSEDQciyBSgCACEGQciyBUEANgIAIAZBAUcNAQsQBiEEEAcaIAIoAhghAEHIsgVBADYCACAAEOgBQciyBSgCACEAQciyBUEANgIAIABBAUcNB0EAEAshARAHGiABEIQBAAsgA0EAOwEAQciyBUEANgIAQdsAIAEgBRAFQciyBSgCACECQciyBUEANgIAIAJBAUYNAEHIsgVBADYCAEHHASABIAFB2OgAQQ4QHEHIsgUoAgAhAkHIsgVBADYCACACQQFGDQBByLIFQQA2AgBBLUEkEA0hAkHIsgUoAgAhBUHIsgVBADYCACAFQQFGDQdByLIFQQA2AgBB/QAgAiABQeLoAEEAQQBBABAWIQVByLIFKAIAIQNByLIFQQA2AgAgA0EBRg0IIAJBAToADyACQSA2AhRByLIFQQA2AgBByAEgBUHx6ABBABASQciyBSgCACEFQciyBUEANgIAIAVBAUYNB0HIsgVBADYCAEHbACABIAIQBUHIsgUoAgAhAkHIsgVBADYCACACQQFGDQdByLIFQQA2AgBBLUEcEA0hAkHIsgUoAgAhBUHIsgVBADYCACAFQQFGDQdByLIFQQA2AgAgAiABQfLoABCgBCEFQciyBSgCACEDQciyBUEANgIAIANBAUYNCSACQQA2AhggAkIANwIQIAJBoM0CNgIAQciyBUEANgIAIAQgAkEBEAVByLIFKAIAIQNByLIFQQA2AgACQCADQQFHBEBByLIFQQA2AgBB3gAgAkEQakEAEBUhA0HIsgUoAgAhBkHIsgVBADYCACAGQQFHDQELEAYhBBAHGiACKAIYIQBByLIFQQA2AgAgABDoAUHIsgUoAgAhAEHIsgVBADYCACAAQQFHDQtBABALIQEQBxogARCEAQALIANBADsBAEHIsgVBADYCAEHbACABIAUQBUHIsgUoAgAhAkHIsgVBADYCACACQQFGDQdByLIFQQA2AgBBLUEcEA0hAkHIsgUoAgAhBUHIsgVBADYCACAFQQFGDQdByLIFQQA2AgAgAiABQfjoABCgBCEFQciyBSgCACEDQciyBUEANgIAIANBAUYNCyACQQA2AhggAkIANwIQIAJBoM0CNgIAQciyBUEANgIAIAQgAkEBEAVByLIFKAIAIQRByLIFQQA2AgACQCAEQQFHBEBByLIFQQA2AgBB3gAgAkEQakEAEBUhBEHIsgUoAgAhA0HIsgVBADYCACADQQFHDQELEAYhBBAHGiACKAIYIQBByLIFQQA2AgAgABDoAUHIsgUoAgAhAEHIsgVBADYCACAAQQFHDQ1BABALIQEQBxogARCEAQALIARBADsBAEHIsgVBADYCAEHbACABIAUQBUHIsgUoAgAhAkHIsgVBADYCACACQQFGDQdByLIFQQA2AgBBrwEgAUGF6QBBAEEBEBxByLIFKAIAIQJByLIFQQA2AgAgAkEBRg0HIAAPCxAGIQQQBxoMDAsQBiEEEAcaCyACEPYMDAoLEAYhBBAHGgsgAhD2DAwICxAGIQQQBxoLIAIQ9gwMBgsQBiEEEAcaDAULEAYhBBAHGiACEPYMDAQLEAYhBBAHGgsgAhD2DAwCCxAGIQQQBxoLIAIQ9gwLIAEQhAMaIAQQCAALdQAgABCJAyAAQcgAaiIAQQEQrAEoAgBBAUEAEN0BIABBBRCsASgCAEEAOgAMIABBBRCsASgCAEHMjARBDkEAEL8EIABBBRCsASgCAEEBOgAMIABBBxCsASgCAEIYQQAQowQgAEEIEKwBKAIAQv//A0EAEKMEC88BAQJ/IAAgAUG06QAQggMhASAAQcTpADYCAEHIsgVBADYCAEEtQTAQDSECQciyBSgCACEDQciyBUEANgIAAkACQAJAIANBAUcEQEHIsgVBADYCAEHgACACIAFB6OkAQQBBABAQGkHIsgUoAgAhA0HIsgVBADYCACADQQFGDQFByLIFQQA2AgBB2wAgASACEAVByLIFKAIAIQJByLIFQQA2AgAgAkEBRw0DCxAGIQAQBxoMAQsQBiEAEAcaIAIQ9gwLIAEQhAMaIAAQCAALIAALHwAgAEHIAGpBABCsASgCACAAKAIgQQAQwAQgABCNAwuyDQEFfyAAIAFBmOoAEIIDIQEgAEGo6gA2AgBByLIFQQA2AgBBxwEgASABQczqAEEGEBxByLIFKAIAIQJByLIFQQA2AgACQAJAAkACQAJAAkACQAJAAkACQCACQQFGDQBByLIFQQA2AgBBLUEcEA0hAkHIsgUoAgAhA0HIsgVBADYCACADQQFGDQBByLIFQQA2AgAgAiABQdbqABCgBCEFQciyBSgCACEDQciyBUEANgIAIANBAUYNASACQQA2AhggAkIANwIQIAJBoM0CNgIAQciyBUEANgIAQbDNAigCACIDIAJBARAFQciyBSgCACEEQciyBUEANgIAAkAgBEEBRwRAQciyBUEANgIAQd4AIAJBEGpBABAVIQRByLIFKAIAIQZByLIFQQA2AgAgBkEBRw0BCxAGIQAQBxogAigCGCEDQciyBUEANgIAIAMQ6AFByLIFKAIAIQNByLIFQQA2AgAgA0EBRw0DQQAQCyEBEAcaIAEQhAEACyAEQQA7AQBByLIFQQA2AgBB2wAgASAFEAVByLIFKAIAIQJByLIFQQA2AgAgAkEBRg0AQciyBUEANgIAQccBIAEgAUHp6gBBEBAcQciyBSgCACECQciyBUEANgIAIAJBAUYNAEHIsgVBADYCAEEtQRwQDSECQciyBSgCACEFQciyBUEANgIAIAVBAUYNAEHIsgVBADYCACACIAFB8+oAEKAEIQVByLIFKAIAIQRByLIFQQA2AgAgBEEBRg0DIAJBADYCGCACQgA3AhAgAkGgzQI2AgBByLIFQQA2AgAgAyACQQEQBUHIsgUoAgAhBEHIsgVBADYCAAJAIARBAUcEQEHIsgVBADYCAEHeACACQRBqQQAQFSEEQciyBSgCACEGQciyBUEANgIAIAZBAUcNAQsQBiEAEAcaIAIoAhghA0HIsgVBADYCACADEOgBQciyBSgCACEDQciyBUEANgIAIANBAUcNBUEAEAshARAHGiABEIQBAAsgBEEAOwEAQciyBUEANgIAQdsAIAEgBRAFQciyBSgCACECQciyBUEANgIAIAJBAUYNAEHIsgVBADYCAEEtQRwQDSECQciyBSgCACEFQciyBUEANgIAIAVBAUYNAEHIsgVBADYCACACIAFB+eoAEKAEIQVByLIFKAIAIQRByLIFQQA2AgAgBEEBRg0FIAJBADYCGCACQgA3AhAgAkGgzQI2AgBByLIFQQA2AgAgAyACQQEQBUHIsgUoAgAhA0HIsgVBADYCAAJAIANBAUcEQEHIsgVBADYCAEHeACACQRBqQQAQFSEDQciyBSgCACEEQciyBUEANgIAIARBAUcNAQsQBiEAEAcaIAIoAhghA0HIsgVBADYCACADEOgBQciyBSgCACEDQciyBUEANgIAIANBAUcNB0EAEAshARAHGiABEIQBAAsgA0EAOwEAQciyBUEANgIAQdsAIAEgBRAFQciyBSgCACECQciyBUEANgIAIAJBAUYNAEHIsgVBADYCAEHHASABIAFBgOsAQQ4QHEHIsgUoAgAhAkHIsgVBADYCACACQQFGDQBByLIFQQA2AgBBLUEkEA0hAkHIsgUoAgAhA0HIsgVBADYCACADQQFGDQdByLIFQQA2AgBB/QAgAiABQYrrAEEAQQBBABAWIQNByLIFKAIAIQVByLIFQQA2AgAgBUEBRg0IIAJBAToADyACQSA2AhRByLIFQQA2AgBByAEgA0GZ6wBBABASQciyBSgCACEDQciyBUEANgIAIANBAUYNB0HIsgVBADYCAEHbACABIAIQBUHIsgUoAgAhAkHIsgVBADYCACACQQFGDQdByLIFQQA2AgBBxwEgASABQajrAEEEEBxByLIFKAIAIQJByLIFQQA2AgAgAkEBRg0HQciyBUEANgIAQa8BIAFBsusAQQFBARAcQciyBSgCACECQciyBUEANgIAIAJBAUYNB0HIsgVBADYCAEGvASABQbfrAEEAQQEQHEHIsgUoAgAhAkHIsgVBADYCACACQQFGDQdByLIFQQA2AgBBrwEgAUG86wBBAEEBEBxByLIFKAIAIQJByLIFQQA2AgAgAkEBRg0HQciyBUEANgIAQa8BIAFBwesAQQBBARAcQciyBSgCACECQciyBUEANgIAIAJBAUYNByAADwsQBiEAEAcaDAgLEAYhABAHGgsgAhD2DAwGCxAGIQAQBxoLIAIQ9gwMBAsQBiEAEAcaCyACEPYMDAILEAYhABAHGgwBCxAGIQAQBxogAhD2DAsgARCEAxogABAIAAuEAQAgABCJAyAAQcgAaiIAQQEQrAEoAgBBAUEAEN0BIABBBRCsASgCAEEAOgAMIABBBRCsASgCAEHajARBDkEAEL8EIABBBRCsASgCAEEBOgAMIABBBxCsASgCAEEAOgAMIABBBxCsASgCAEHojARBBEEAEL8EIABBBxCsASgCAEEBOgAMC5MNAQV/IAAgAUHw6wAQggMhASAAQYDsADYCAEHIsgVBADYCAEHHASABIAFBpOwAQQYQHEHIsgUoAgAhAkHIsgVBADYCAAJAAkACQAJAAkACQAJAAkACQAJAAkAgAkEBRg0AQciyBUEANgIAQS1BHBANIQJByLIFKAIAIQNByLIFQQA2AgAgA0EBRg0AQciyBUEANgIAIAIgAUGu7AAQoAQhBUHIsgUoAgAhA0HIsgVBADYCACADQQFGDQEgAkEANgIYIAJCADcCECACQaDNAjYCAEHIsgVBADYCAEGwzQIoAgAiAyACQQEQBUHIsgUoAgAhBEHIsgVBADYCAAJAIARBAUcEQEHIsgVBADYCAEHeACACQRBqQQAQFSEEQciyBSgCACEGQciyBUEANgIAIAZBAUcNAQsQBiEAEAcaIAIoAhghA0HIsgVBADYCACADEOgBQciyBSgCACEDQciyBUEANgIAIANBAUcNA0EAEAshARAHGiABEIQBAAsgBEEAOwEAQciyBUEANgIAQdsAIAEgBRAFQciyBSgCACECQciyBUEANgIAIAJBAUYNAEHIsgVBADYCAEHHASABIAFBwewAQQgQHEHIsgUoAgAhAkHIsgVBADYCACACQQFGDQBByLIFQQA2AgBBLUEcEA0hAkHIsgUoAgAhBUHIsgVBADYCACAFQQFGDQBByLIFQQA2AgAgAiABQcvsABCgBCEFQciyBSgCACEEQciyBUEANgIAIARBAUYNAyACQQA2AhggAkIANwIQIAJBoM0CNgIAQciyBUEANgIAIAMgAkEBEAVByLIFKAIAIQRByLIFQQA2AgACQCAEQQFHBEBByLIFQQA2AgBB3gAgAkEQakEAEBUhBEHIsgUoAgAhBkHIsgVBADYCACAGQQFHDQELEAYhABAHGiACKAIYIQNByLIFQQA2AgAgAxDoAUHIsgUoAgAhA0HIsgVBADYCACADQQFHDQVBABALIQEQBxogARCEAQALIARBADsBAEHIsgVBADYCAEHbACABIAUQBUHIsgUoAgAhAkHIsgVBADYCACACQQFGDQBByLIFQQA2AgBBLUEcEA0hAkHIsgUoAgAhBUHIsgVBADYCACAFQQFGDQBByLIFQQA2AgAgAiABQdjsABCgBCEFQciyBSgCACEEQciyBUEANgIAIARBAUYNBSACQQA2AhggAkIANwIQIAJBoM0CNgIAQciyBUEANgIAIAMgAkEBEAVByLIFKAIAIQRByLIFQQA2AgACQCAEQQFHBEBByLIFQQA2AgBB3gAgAkEQakEAEBUhBEHIsgUoAgAhBkHIsgVBADYCACAGQQFHDQELEAYhABAHGiACKAIYIQNByLIFQQA2AgAgAxDoAUHIsgUoAgAhA0HIsgVBADYCACADQQFHDQdBABALIQEQBxogARCEAQALIARBADsBAEHIsgVBADYCAEHbACABIAUQBUHI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AEH7ACACQRBqQQAQFSEDQciyBSgCACEGQciyBUEANgIAIAZBAUcNAQsQBiEAEAcaIAIoAhghAUHIsgVBADYCACABEOgBQciyBSgCACEBQciyBUEANgIAIAFBAUcNB0EAEAshAhAHGiACEIQBAAsgA0EANgIAIAAgBRCMA0EcEP4LIQJByLIFQQA2AgAgAiAAQaPwABCgBCEFQciyBSgCACEDQciyBUEANgIAIANBAUYNASACQQA2AhggAkIANwIQIAJB4M4CNgIAQciyBUEANgIAIAQgAkEBEAVByLIFKAIAIQNByLIFQQA2AgACQCADQQFHBEBByLIFQQA2AgBB+wAgAkEQakEAEBUhA0HIsgUoAgAhBkHIsgVBADYCACAGQQFHDQELEAYhABAHGiACKAIYIQFByLIFQQA2AgAgARDoAUHIsgUoAgAhAUHIsgVBADYCACABQQFHDQdBABALIQIQBxogAhCEAQALIANBADYCACAAIAUQjANBHBD+CyECQciyBUEANgIAIAIgAEGx8AAQoAQhBUHIsgUoAgAhA0HIsgVBADYCACADQQFGDQIgAkEANgIYIAJCADcCECACQeDOAjYCAEHIsgVBADYCACAEIAJBARAFQciyBSgCACEEQciyBUEANgIAIARBAUcEQEHIsgVBADYCAEH7ACACQRBqQQAQFSEEQciyBSgCACEDQciyBUEANgIAIANBAUcNBAsQBiEAEAcaIAIoAhghAUHIsgVBADYCACABEOgBQciyBSgCACEBQciyBUEANgIAIAFBAUcNBkEAEAshAhAHGiACEIQBAAsQBiEAEAcaDAULEAYhABAHGgwECxAGIQAQBxoMAwsgBEEANgIAIAAgBRCMAyABQQJHDQAgACAAQcDwAEEUEJsDCw8LEAYhABAHGgsgAhD2DCAAEAgAC5UBACAAEIkDIABByABqIgBBARCsASgCAEEBQQAQ3QEgAEECEKwBKAIAQQBBABDdASAAQQMQrAEoAgBBADoADCAAQQMQrAEoAgBByvAAQQZBABC/BCAAQQMQrAEoAgBBAToADCAAQQQQrAEoAgBBAkEAEN0BIABBBRCsASgCAEEQQQAQ3QEgAEEGEKwBKAIAQQBBABDdAQulBAECfwJAAkACQCAAKAJAQShqEK0FQdDwABCtBUcEQCAAQcgAaiICQQAQrAEoAgAi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AigCGCEDQciyBUEANgIAIAMQ6AFByLIFKAIAIQNByLIFQQA2AgAgA0EBRw0DQQAQCyEBEAcaIAEQhAEACyAEQQA2AgBByLIFQQA2AgBB2wAgASADEAVByLIFKAIAIQJByLIFQQA2AgAgAkEBRg0AQciyBUEANgIAQS1BHBANIQJByLIFKAIAIQNByLIFQQA2AgAgA0EBRg0AQciyBUEANgIAIAIgAUGz9QAQoAQhBEHIsgUoAgAhA0HIsgVBADYCACADQQFGDQMgAkEANgIYIAJCADcCECACQZDMAjYCAEHIsgVBADYCAEGgzAIoAgAiAyACQQEQBUHIsgUoAgAhBUHIsgVBADYCAAJAIAVBAUcEQEHIsgVBADYCAEHZACACQRBqQQAQFSEFQciyBSgCACEGQciyBUEANgIAIAZBAUcNAQsQBiEAEAcaIAIoAhghA0HIsgVBADYCACADEOgBQciyBSgCACEDQciyBUEANgIAIANBAUcNBUEAEAshARAHGiABEIQBAAsgBUEAOgAAQciyBUEANgIAQdsAIAEgBBAFQciyBSgCACECQciyBUEANgIAIAJBAUYNAEHIsgVBADYCAEEtQRwQDSECQciyBSgCACEEQciyBUEANgIAIARBAUYNAEHIsgVBADYCACACIAFBwvUAEKAEIQRByLIFKAIAIQVByLIFQQA2AgAgBUEBRg0FIAJBADYCGCACQgA3AhAgAkGQzAI2AgBByLIFQQA2AgAgAyACQQEQBUHIsgUoAgAhBUHIsgVBADYCAAJAIAVBAUcEQEHIsgVBADYCAEHZACACQRBqQQAQFSEFQciyBSgCACEGQciyBUEANgIAIAZBAUcNAQsQBiEAEAcaIAIoAhghA0HIsgVBADYCACADEOgBQciyBSgCACEDQciyBUEANgIAIANBAUcNB0EAEAshARAHGiABEIQBAAsgBUEAOgAAQciyBUEANgIAQdsAIAEgBBAFQciyBSgCACECQciyBUEANgIAIAJBAUYNAEHIsgVBADYCAEEtQRwQDSECQciyBSgCACEEQciyBUEANgIAIARBAUYNAEHIsgVBADYCACACIAFBzPUAEKAEIQRByLIFKAIAIQVByLIFQQA2AgAgBUEBRg0HIAJBADYCGCACQgA3AhAgAkGQzAI2AgBByLIFQQA2AgAgAyACQQEQBUHIsgUo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CyEBEAcaIAEQhAEACyADQgA3AwAgAkEFOgAcIAJBoNACNgIAQciyBUEANgIAQdsAIAEgBRAFQciyBSgCACECQciyBUEANgIAIAJBAUYNAEHIsgVBADYCAEEtQSAQDSECQciyBSgCACEFQciyBUEANgIAIAVBAUYNAEHIsgVBADYCACACIAFB//kAEKAEIQVByLIFKAIAIQNByLIFQQA2AgAgA0EBRg0FIAJBADYCGCACQgA3AhAgAkHAzwI2AgBByLIFQQA2AgAgBCACQQEQBUHIsgUoAgAhA0HIsgVBADYCAAJAIANBAUcEQEHIsgVBADYCAEHcACACQRBqQQAQFSEDQciyBSgCACEGQciyBUEANgIAIAZBAUcNAQsQBiEEEAcaIAIoAhghAEHIsgVBADYCACAAEOgBQciyBSgCACEAQciyBUEANgIAIABBAUcNB0EAEAshARAHGiABEIQBAAsgA0IANwMAIAJBAzoAHCACQaDQAjYCAEHIsgVBADYCAEHbACABIAUQBUHIsgUoAgAhAkHIsgVBADYCACACQQFGDQBByLIFQQA2AgBBLUEgEA0hAkHIsgUoAgAhBUHIsgVBADYCACAFQQFGDQBByLIFQQA2AgAgAiABQYX6ABCgBCEFQciyBSgCACEDQciyBUEANgIAIANBAUYNByACQQA2AhggAkIANwIQIAJBwM8CNgIAQciyBUEANgIAIAQgAkEBEAVByLIFKAIAIQNByLIFQQA2AgACQCADQQFHBEBByLIFQQA2AgBB3AAgAkEQakEAEBUhA0HIsgUoAgAhBkHIsgVBADYCACAGQQFHDQELEAYhBBAHGiACKAIYIQBByLIFQQA2AgAgABDoAUHIsgUoAgAhAEHIsgVBADYCACAAQQFHDQlBABALIQEQBxogARCEAQALIANCADcDACACQQM6ABwgAkGg0AI2AgBByLIFQQA2AgBB2wAgASAFEAVByLIFKAIAIQJByLIFQQA2AgAgAkEBRg0AQciyBUEANgIAQS1BIBANIQJByLIFKAIAIQVByLIFQQA2AgAgBUEBRg0AQciyBUEANgIAIAIgAUGL+gAQoAQhBUHIsgUoAgAhA0HIsgVBADYCACADQQFGDQkgAkEANgIYIAJCADcCECACQcDPAjYCAEHIsgVBADYCACAEIAJBARAFQciyBSgCACEDQciy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IAQgAhAFQciyBSgCACEBQciyBUEANgIAIAFBAUYNBCAADwsQBiEAEAcaDAULEAYhABAHGgwECxAGIQAQBxoLIAEQ9gwMAgsQBiEAEAcaDAELEAYhABAHGiACEPYMCyAEEIQDGiAAEAgAC4cNAQR/IABByABqQQMQrAEoAgAhA0EcEP4LIQAgAygCBCECAkACQAJAIAFBAUYEQEHIsgVBADYCACAAIAJBx4IBEKAEIQFByLIFKAIAIQJByLIFQQA2AgACQCACQQFHBEAgAEEANgIYIABCADcCECAAQcDPAjYCAEHIsgVBADYCAEHQzwIoAgAiAiAAQQEQBUHIsgUoAgAhBEHIsgVBADYCAAJAIARBAUcEQEHIsgVBADYCAEHcACAAQRBqQQAQFSEEQciyBSgCACEFQciyBUEANgIAIAVBAUcNAQsQBiEDEAcaIAAoAhghAUHIsgVBADYCACABEOgBQciyBSgCACEBQciyBUEANgIAIAFBAUcNBkEAEAshABAHGiAAEIQBAAsgBEIANwMAIAMgARDIBEEcEP4LIQAgAygCBCEBQciyBUEANgIAIAAgAUHXggEQoAQhAUHIsgUoAgAhBEHIsgVBADYCACAEQQFGDQEgAEEANgIYIABCADcCECAAQcDPAjYCAEHIsgVBADYCACACIABBARAFQciyBSgCACECQciyBUEANgIAIAJBAUcEQEHIsgVBADYCAEHcACAAQRBqQQAQFSECQciyBSgCACEEQciyBUEANgIAIARBAUcNBAsQBiEDEAcaIAAoAhghAUHIsgVBADYCACABEOgBQciyBSgCACEBQciyBUEANgIAIAFBAUcNBUEAEAshABAHGiAAEIQBAAsQBiEDEAcaDAQLEAYhAxAHGgwDC0HIsgVBADYCACAAIAJBx4IBEKAEIQFByLIFKAIAIQJByLIFQQA2AgACQCACQQFHBEAgAEEANgIYIABCADcCECAAQeDOAjYCAEHIsgVBADYCAEHwzgIoAgAiAiAAQQEQBUHIsgUoAgAhBEHIsgVBADYCAAJAIARBAUcEQEHIsgVBADYCAEH7ACAAQRBqQQAQFSEEQciyBSgCACEFQciyBUEANgIAIAVBAUcNAQsQBiEDEAcaIAAoAhghAUHIsgVBADYCACABEOgBQciyBSgCACEBQciyBUEANgIAIAFBAUcNBUEAEAshABAHGiAAEIQBAAsgBEEANgIAIAMgARDIBEEcEP4LIQAgAygCBCEBQciyBUEANgIAIAAgAUHXggEQoAQhAUHIsgUoAgAhBEHIsgVBADYCACAEQQFGDQEgAEEANgIYIABCADcCECAAQeDOAjYCAEHIsgVBADYCACACIABBARAFQciyBSgCACECQciyBUEANgIAAkAgAkEBRwRAQciyBUEANgIAQfsAIABBEGpBABAVIQJByLIFKAIAIQRByLIFQQA2AgAgBEEBRw0BCxAGIQMQBxogACgCGCEBQciyBUEANgIAIAEQ6AFByLIFKAIAIQFByLIFQQA2AgAgAUEBRw0FQQAQCyEAEAcaIAAQhAEACyACQQA2AgAMAwsQBiEDEAcaDAMLEAYhAxAHGgwCCyACQgA3AwALIAMgARDIBEEcEP4LIQAgAygCBCEBQciyBUEANgIAIAAgAUHhggEQoAQhAUHIsgUoAgAhAkHIsgVBADYCAAJAIAJBAUcEQCAAQQA2AhggAEIANwIQIABBoM0CNgIAQciyBUEANgIAQbDNAigCACICIABBARAFQciyBSgCACEEQciyBUEANgIAAkAgBEEBRwRAQciyBUEANgIAQd4AIABBEGpBABAVIQRByLIFKAIAIQVByLIFQQA2AgAgBUEBRw0BCxAGIQMQBxogACgCGCEBQciyBUEANgIAIAEQ6AFByLIFKAIAIQFByLIFQQA2AgAgAUEBRw0DQQAQCyEAEAcaIAAQhAEACyAEQQA7AQAgAyABEMgEQRwQ/gshACADKAIEIQFByLIFQQA2AgAgACABQeuCARCgBCEBQciyBSgCACEEQciyBUEANgIAIARBAUYNASAAQQA2AhggAEIANwIQIABBoM0CNgIAQciyBUEANgIAIAIgAEEBEAVByLIFKAIAIQJByLIFQQA2AgACQCACQQFHBEBByLIFQQA2AgBB3gAgAEEQakEAEBUhAkHIsgUoAgAhBEHIsgVBADYCACAEQQFHDQELEAYhAxAHGiAAKAIYIQFByLIFQQA2AgAgARDoAUHIsgUoAgAhAUHIsgVBADYCACABQQFHDQNBABALIQAQBxogABCEAQALIAJBADsBACADIAEQyAQPCxAGIQMQBxoMAQsQBiEDEAcaCyAAEPYMIAMQCAALGAAgAEEAEJ8DIAAgABCeAxCfAiAA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EAYhABAHGiACKAIYIQNByLIFQQA2AgAgAxDoAUHIsgUoAgAhA0HIsgVBADYCACADQQFHDQVBABALIQEQBxogARCEAQALIARBADsBAEHIsgVBADYCAEHbACABIAUQBUHIsgUoAgAhAkHIsgVBADYCACACQQFGDQBByLIFQQA2AgBBLUEcEA0hAkHIsgUoAgAhBUHIsgVBADYCACAFQQFGDQBByLIFQQA2AgAgAiABQZ2FARCgBCEFQciyBSgCACEEQciyBUEANgIAIARBAUYNBSACQQA2AhggAkIANwIQIAJBoM0CNgIAQciyBUEANgIAIAMgAkEBEAVByLIFKAIAIQNByLIFQQA2AgACQCADQQFHBEBByLIFQQA2AgBB3gAgAkEQakEAEBUhA0HIsgUoAgAhBEHIsgVBADYCACAEQQFHDQELEAYhABAHGiACKAIYIQNByLIFQQA2AgAgAxDoAUHIsgUoAgAhA0HIsgVBADYCACADQQFHDQdBABALIQEQBxogARCEAQALIANBADsBAEHIsgVBADYCAEHbACABIAUQBUHIsgUoAgAhAkHIsgVBADYCACACQQFGDQBByLIFQQA2AgBBxwEgASABQaSFAUEOEBxByLIFKAIAIQJByLIFQQA2AgAgAkEBRg0AQciyBUEANgIAQS1BJBANIQJByLIFKAIAIQNByLIFQQA2AgAgA0EBRg0HQciyBUEANgIAQf0AIAIgAUGuhQFBAEEAQQAQFiEDQciyBSgCACEFQciyBUEANgIAIAVBAUYNCCACQQE6AA8gAkEgNgIUQciyBUEANgIAQcgBIANBvYUBQQAQEkHIsgUoAgAhA0HIsgVBADYCACADQQFGDQdByLIFQQA2AgBB2wAgASACEAVByLIFKAIAIQJByLIFQQA2AgAgAkEBRg0HQciyBUEANgIAQccBIAEgAUG+hQFBBBAcQciyBSgCACECQciyBUEANgIAIAJBAUYNB0HIsgVBADYCAEGvASABQciFAUEBQQEQHEHIsgUoAgAhAkHIsgVBADYCACACQQFGDQdByLIFQQA2AgBBrwEgAUHNhQFBAUEBEBxByLIFKAIAIQJByLIFQQA2AgAgAkEBRg0HQciyBUEANgIAQa8BIAFB0oUBQQBBARAcQciyBSgCACECQciyBUEANgIAIAJBAUYNByAADwsQBiEAEAcaDAgLEAYhABAHGgsgAhD2DAwGCxAGIQAQBxoLIAIQ9gwMBAsQBiEAEAcaCyACEPYMDAILEAYhABAHGgwBCxAGIQAQBxogAhD2DAsgARCEAxogABAIAAuEAQAgABCJAyAAQcgAaiIAQQEQrAEoAgBBAUEAEN0BIABBBRCsASgCAEEAOgAMIABBBRCsASgCAEGAjQRBDkEAEL8EIABBBRCsASgCAEEBOgAMIABBBxCsASgCAEEAOgAMIABBBxCsASgCAEGOjQRBBEEAEL8EIABBBxCsASgCAEEBOgAMCx4AIAAgASACQYCGASACGxCCAxogAEGQhgE2AgAgAAsHACAAEJADC1YCAX8BfiAAIAApAyBC9////w9WIgEgACgCACgCEBECACAAKQMgUEUEQANAIAAoAgRBABC7AyACQgF8IgIgACkDIFQNAAsLIAAgASAAKAIAKAIcEQIAC4EGAQN/IAAgAUHchgEQggMhAyAAQeyGATYCAEHIsgVBADYCAEEtQSQQDSEBQciyBSgCACECQciyBUEANgIAAkACQAJAAkACQAJAAkAgAkEBRg0AQciyBUEANgIAQf0AIAEgA0GQhwFBAEEAQQAQFhpByLIFKAIAIQJByLIFQQA2AgAgAkEBRg0BIAAgATYCbEHIsgVBADYCAEEtQRwQDSEBQciyBSgCACECQciyBUEANgIAIAJBAUYNAEHIsgVBADYCACABIANBm4cBEKAEGkHIsgUoAgAhAkHIsgVBADYCACACQQFGDQIgAUEANgIYIAFCADcCECABQeDOAjYCAEHIsgVBADYCAEHwzgIoAgAgAUEBEAVByLIFKAIAIQJByLIFQQA2AgACQCACQQFHBEBByLIFQQA2AgBB+wAgAUEQakEAEBUhAkHIsgUoAgAhBEHIsgVBADYCACAEQQFHDQELEAYhABAHGiABKAIYIQJByLIFQQA2AgAgAhDoAUHIsgUoAgAhAkHIsgVBADYCACACQQFHDQRBABALIQAQBxogABCEAQALIAJBADYCACAAIAE2AnBByLIFQQA2AgBBLUEkEA0hAUHIsgUoAgAhAkHIsgVBADYCACACQQFGDQBByLIFQQA2AgBB/QAgASADQaiHAUEAQQBBARAWGkHIsgUoAgAhAkHIsgVBADYCACACQQFGDQQgACABNgJ0IAAoAmwiAkEENgIUIAFBBDYCFEHIsgVBADYCAEHbACADIAIQBUHIsgUoAgAhAUHIsgVBADYCACABQQFGDQAgACgCcCEBQciyBUEANgIAQdsAIAMgARAFQciyBSgCACEBQciyBUEANgIAIAFBAUYNACAAKAJ0IQFByLIFQQA2AgBB2wAgAyABEAVByLIFKAIAIQFByLIFQQA2AgAgAUEBRw0GCxAGIQAQBxoMBAsQBiEAEAcaIAEQ9gwMAwsQBiEAEAcaCyABEPYMDAELEAYhABAHGiABEPYMCyADEIQDGiAAEAgACyAAC1MBAX8gABCJAyAAKAJsQbmHAUEAELUEIAAoAnBBAEEAENcBIAAoAnQiAUECIAEoAgAoAhARAgAgACgCdEG5hwFBABC1BCAAKAJ0Qb6HAUEBELUECysBAX8gACgCdCIBIAApAyBC+P///z98QgKIpyABKAIAKAIQEQIAIAAQjQMLuQgBBn8gACABQeyHARCCAyEGIABB/IcBNgIAQciyBUEANgIAQS1BHBANIQFByLIFKAIAIQJByLIFQQA2AgACQAJAAkACQAJAAkACQAJAAkAgAkEBRg0AQciyBUEANgIAIAEgBkGgiAEQoAQhAkHIsgUoAgAhA0HIsgVBADYCACADQQFGDQEgAUEANgIYIAFCADcCECABQaDNAjYCAEHIsgVBADYCAEGwzQIoAgAiBCABQQEQBUHIsgUoAgAhA0HIsgVBADYCAAJAIANBAUcEQEHIsgVBADYCAEHeACABQRBqQQAQFSEDQciyBSgCACEFQciyBUEANgIAIAVBAUcNAQsQBiEAEAcaIAEoAhghAkHIsgVBADYCACACEOgBQciyBSgCACECQciyBUEANgIAIAJBAUcNA0EAEAshARAHGiABEIQBAAsgA0EAOwEAQciyBUEANgIAQdsAIAYgAhAFQciyBSgCACECQciyBUEANgIAIAJBAUYNAEHIsgVBADYCAEEtQSAQDSECQciyBSgCACEDQciyBUEANgIAIANBAUYNA0HIsgVBADYCACACIAZBq4gBIAEQxQQhA0HIsgUoAgAhAUHIsgVBADYCACABQQFGDQRByLIFQQA2AgBB2wAgBiACEAVByLIFKAIAIQFByLIFQQA2AgAgAUEBRg0DQciyBUEANgIAQS1BHBANIQFByLIFKAIAIQVByLIFQQA2AgAgBUEBRg0DIAIoAgQhBUHIsgVBADYCACABIAVBt4gBEKAEIQVByLIFKAIAIQdByLIFQQA2AgAgB0EBRg0FIAFBADYCGCABQgA3AhAgAUGgzQI2AgBByLIFQQA2AgAgBCABQQEQBUHIsgUoAgAhBEHIsgVBADYCAAJAIARBAUcEQEHIsgVBADYCAEHeACABQRBqQQAQFSEEQciyBSgCACEHQciyBUEANgIAIAdBAUcNAQsQBiEAEAcaIAEoAhghAkHIsgVBADYCACACEOgBQciyBSgCACECQciyBUEANgIAIAJBAUcNB0EAEAshARAHGiABEIQBAAsgBEEAOwEAQciyBUEANgIAQd8AIAMgBRAFQciyBSgCACEBQciyBUEANgIAIAFBAUYNA0HIsgVBADYCAEEtQSQQDSEBQciyBSgCACEEQciyBUEANgIAIARBAUYNAyACKAIEIQJByLIFQQA2AgBB/QAgASACQb6IAUEBQQBBABAWGkHIsgUoAgAhAkHIsgVBADYCACACQQFGDQdByLIFQQA2AgBB3wAgAyABEAVByLIFKAIAIQFByLIFQQA2AgAgAUEBRg0DIAAPCxAGIQAQBxoMBwsQBiEAEAcaCyABEPYMDAULEAYhABAHGgwECxAGIQAQBxogAhD2DAwDCxAGIQAQBxoLIAEQ9gwMAQsQBiEAEAcaIAEQ9gwLIAYQhAMaIAAQCAAL0A4BBX8gACABQeyIARCCAyEBIABB/IgBNgIAQciyBUEANgIAQdEBIAEQD0HIsgUoAgAhAkHIsgVBADYCAAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAIAJBAUYNAEHIsgVBADYCAEEtQRwQDSECQciyBSgCACEEQciyBUEANgIAIARBAUYNAEHIsgVBADYCACACIAFBoIkBEKAEIQVByLIFKAIAIQRByLIFQQA2AgAgBEEBRg0BIAJBADYCGCACQgA3AhAgAkGgzQI2AgBByLIFQQA2AgBBsM0CKAIAIgQgAkEBEAVByLIFKAIAIQNByLIFQQA2AgACQCADQQFHBEBByLIFQQA2AgBB3gAgAkEQakEAEBUhA0HIsgUoAgAhBkHIsgVBADYCACAGQQFHDQELEAYhBBAHGiACKAIYIQBByLIFQQA2AgAgABDoAUHIsgUoAgAhAEHIsgVBADYCACAAQQFHDQNBABALIQEQBxogARCEAQALIANBADsBAEHIsgVBADYCAEHbACABIAUQBUHIsgUoAgAhAkHIsgVBADYCACACQQFGDQBByLIFQQA2AgBBLUEcEA0hAkHIsgUoAgAhBUHIsgVBADYCACAFQQFGDQBByLIFQQA2AgAgAiABQa2JARCgBCEFQciyBSgCACEDQciyBUEANgIAIANBAUYNAyACQQA2AhggAkIANwIQIAJBoM0CNgIAQciyBUEANgIAIAQgAkEBEAVByLIFKAIAIQNByLIFQQA2AgACQCADQQFHBEBByLIFQQA2AgBB3gAgAkEQakEAEBUhA0HIsgUoAgAhBkHIsgVBADYCACAGQQFHDQELEAYhBBAHGiACKAIYIQBByLIFQQA2AgAgABDoAUHIsgUoAgAhAEHIsgVBADYCACAAQQFHDQVBABALIQEQBxogARCEAQALIANBADsBAEHIsgVBADYCAEHbACABIAUQBUHIsgUoAgAhAkHIsgVBADYCACACQQFGDQBByLIFQQA2AgBBLUEcEA0hAkHIsgUoAgAhBUHIsgVBADYCACAFQQFGDQBByLIFQQA2AgAgAiABQbiJARCgBCEFQciyBSgCACEDQciyBUEANgIAIANBAUYNBSACQQA2AhggAkIANwIQIAJBoM0CNgIAQciyBUEANgIAIAQgAkEBEAVByLIFKAIAIQNByLIFQQA2AgACQCADQQFHBEBByLIFQQA2AgBB3gAgAkEQakEAEBUhA0HIsgUoAgAhBkHIsgVBADYCACAGQQFHDQELEAYhBBAHGiACKAIYIQBByLIFQQA2AgAgABDoAUHIsgUoAgAhAEHIsgVBADYCACAAQQFHDQdBABALIQEQBxogARCEAQALIANBADsBAEHIsgVBADYCAEHbACABIAUQBUHIsgUoAgAhAkHIsgVBADYCACACQQFGDQBByLIFQQA2AgBBLUEcEA0hAkHIsgUoAgAhBUHIsgVBADYCACAFQQFGDQBByLIFQQA2AgAgAiABQcWJARCgBCEFQciyBSgCACEDQciyBUEANgIAIANBAUYNByACQQA2AhggAkIANwIQIAJBoM0CNgIAQciyBUEANgIAIAQgAkEBEAVByLIFKAIAIQNByLIFQQA2AgACQCADQQFHBEBByLIFQQA2AgBB3gAgAkEQakEAEBUhA0HIsgUoAgAhBkHIsgVBADYCACAGQQFHDQELEAYhBBAHGiACKAIYIQBByLIFQQA2AgAgABDoAUHIsgUoAgAhAEHIsgVBADYCACAAQQFHDQlBABALIQEQBxogARCEAQALIANBADsBAEHIsgVBADYCAEHbACABIAUQBUHIsgUoAgAhAkHIsgVBADYCACACQQFGDQBByLIFQQA2AgBBLUEcEA0hAkHIsgUoAgAhBUHIsgVBADYCACAFQQFGDQBByLIFQQA2AgAgAiABQdGJARCgBCEFQciyBSgCACEDQciyBUEANgIAIANBAUYNCSACQQA2AhggAkIANwIQIAJBoM0CNgIAQciyBUEANgIAIAQgAkEBEAVByLIFKAIAIQRByLIFQQA2AgACQCAEQQFHBEBByLIFQQA2AgBB3gAgAkEQakEAEBUhBEHIsgUoAgAhA0HIsgVBADYCACADQQFHDQELEAYhBBAHGiACKAIYIQBByLIFQQA2AgAgABDoAUHIsgUoAgAhAEHIsgVBADYCACAAQQFHDQtBABALIQEQBxogARCEAQALIARBADsBAEHIsgVBADYCAEHbACABIAUQBUHIsgUoAgAhAkHIsgVBADYCACACQQFGDQBByLIFQQA2AgBBxwEgASABQdmJAUECEBxByLIFKAIAIQJByLIFQQA2AgAgAkEBRw0MCxAGIQQQBxoMCgsQBiEEEAcaCyACEPYMDAgLEAYhBBAHGgsgAhD2DAwGCxAGIQQQBxoLIAIQ9gwMBAsQBiEEEAcaCyACEPYMDAILEAYhBBAHGgsgAhD2DAsgARCEAxogBBAIAAsgAAtpACAAEIkDIABByABqIgBBAhCsASgCAEHAAEEAEN0BIABBAxCsASgCAEGAgAJBABDdASAAQQQQrAEoAgBBgIACQQAQ3QEgAEEFEKwBKAIAQYCAAkEAEN0BIABBBhCsASgCAEEAQQAQ3QELiwQBAn8gACABQYyKARCCAyEBIABBnIoBNgIAQciyBUEANgIAQdEBIAEQD0HIsgUoAgAhAkHIsgVBADYCAAJAAkACQAJAAkAgAkEBRg0AQciyBUEANgIAQccBIAEgAUHAigFBBBAcQciyBSgCACECQciyBUEANgIAIAJBAUYNAEHIsgVBADYCAEEtQSQQDSECQciyBSgCACEDQciyBUEANgIAIANBAUYNAUHIsgVBADYCAEH9ACACIAFByooBQQBBAEEAEBYaQciyBSgCACEDQciyBUEANgIAIANBAUYNAiACQQQ2AhRByLIFQQA2AgBB2wAgASACEAVByLIFKAIAIQJByLIFQQA2AgAgAkEBRg0BQciyBUEANgIAQccBIAEgAUHWigFBDBAcQciyBSgCACECQciyBUEANgIAIAJBAUYNAUHIsgVBADYCAEEtQSQQDSECQciyBSgCACEDQciyBUEANgIAIANBAUYNAUHIsgVBADYCAEH9ACACIAFB4IoBQQBBAEEAEBYaQciyBSgCACEDQciyBUEANgIAIANBAUYNA0HIsgVBADYCAEHbACABIAIQBUHIsgUoAgAhAkHIsgVBADYCACACQQFGDQEgAA8LEAYhABAHGgwDCxAGIQAQBxoMAgsQBiEAEAcaIAIQ9gwMAQsQBiEAEAcaIAIQ9gwLIAEQhAMaIAAQCAAL9QICA38CfiMAQRBrIgIkACAAQQBBBRCOAwJAAkACQAJAIAAoAgRBABCwAyIEIAApAxAiBVIEQCAAKAIEIAJBD2pBAUEAELQDAkAgBSAEIAIxAA98QgF8UQRAIABByABqQQUQrAEoAgAiAUEBOgAPIABBBUF/EI4DIAFBADoADwwBC0HIsgVBADYCAEH6ASAAQQVBfxASQciyBSgCACEBQciyBUEANgIAIAFBAUcNAEGg2gAQCyEBEAdBoNoAEBlHDQQgARAMIQEgACgCBCEDQciyBUEANgIAQfsBIAMQtQ0hBEHIsgUoAgAhA0HIsgVBADYCACADQQFGDQMgBCAAKQMQfUIBUg0CIAEEQCABIAEoAgAoAgQRAQALEBcLIAAQkAMLIAJBEGokAA8LQQQQDiIAIAE2AgBByLIFQQA2AgBBMSAAQaDaAEEAEBJByLIFKAIAIQBByLIFQQA2AgAgAEEBRw0CCxAGIQEQBxoQFwsgARAICwAL9gMBBH8gACABQYyLARCCAyEDIABBnIsBNgIAQciyBUEANgIAQccBIAMgA0HAiwFBBhAcQciyBSgCACEBQciyBUEANgIAAkACQAJAAkACQCABQQFGDQBByLIFQQA2AgBBLUEcEA0hAUHIsgUoAgAhAkHIsgVBADYCACACQQFGDQBByLIFQQA2AgAgASADQcqLARCgBCECQciyBSgCACEEQciyBUEANgIAIARBAUYNASABQQA2AhggAUIANwIQIAFBoM0CNgIAQciyBUEANgIAQbDNAigCACABQQEQBUHIsgUoAgAhBEHIsgVBADYCAAJAIARBAUcEQEHIsgVBADYCAEHeACABQRBqQQAQFSEEQciyBSgCACEFQciyBUEANgIAIAVBAUcNAQsQBiEAEAcaIAEoAhghAkHIsgVBADYCACACEOgBQciyBSgCACECQciyBUEANgIAIAJBAUcNA0EAEAshARAHGiABEIQBAAsgBEEAOwEAQciyBUEANgIAQdsAIAMgAhAFQciyBSgCACEBQciyBUEANgIAIAFBAUYNAEHIsgVBADYCAEGvASADQd2LAUEAQQEQHEHIsgUoAgAhAUHIsgVBADYCACABQQFHDQQLEAYhABAHGgwCCxAGIQAQBxoLIAEQ9gwLIAMQhAMaIAAQCAALIAALHAAgABCJAyAAQcgAakEBEKwBKAIAQQFBABDdAQtZAQF/IAAgAUGMjAEQggMhASAAQZyMATYCAEHIsgVBADYCAEHRASABEA9ByLIFKAIAIQJByLIFQQA2AgAgAkEBRwRAIAAPCxAGIQAQBxogARCEAxogABAIAAu2DwEFf0EcEP4LIQICQAJAAkACQCABQQFGBEBByLIFQQA2AgAgAiAAQcCMARCgBCEFQciyBSgCACEDQciyBUEANgIAAkAgA0EBRwRAIAJBADYCGCACQgA3AhAgAkHAzwI2AgBByLIFQQA2AgBB0M8CKAIAIgMgAkEBEAVByLIFKAIAIQRByLIFQQA2AgACQCAEQQFHBEBByLIFQQA2AgBB3AAgAkEQakEAEBUhBEHIsgUoAgAhBkHIsgVBADYCACAGQQFHDQELEAYhABAHGiACKAIYIQFByLIFQQA2AgAgARDoAUHIsgUoAgAhAUHIsgVBADYCACABQQFHDQZBABALIQIQBxogAhCEAQALIARCADcDACAAIAUQjANBHBD+CyECQciyBUEANgIAIAIgAEHNjAEQoAQhBUHIsgUoAgAhBEHIsgVBADYCACAEQQFGDQEgAkEANgIYIAJCADcCECACQcDPAjYCAEHIsgVBADYCACADIAJBARAFQciyBSgCACEDQciyBUEANgIAIANBAUcEQEHIsgVBADYCAEHcACACQRBqQQAQFSEDQciyBSgCACEEQciyBUEANgIAIARBAUcNBAsQBiEAEAcaIAIoAhghAUHIsgVBADYCACABEOgBQciyBSgCACEBQciyBUEANgIAIAFBAUcNBUEAEAshAhAHGiACEIQBAAsQBiEAEAcaDAQLEAYhABAHGgwDC0HIsgVBADYCACACIABBwIwBEKAEIQVByLIFKAIAIQNByLIFQQA2AgACQCADQQFHBEAgAkEANgIYIAJCADcCECACQeDOAjYCAEHIsgVBADYCAEHwzgIoAgAiAyACQQEQBUHIsgUoAgAhBEHIsgVBADYCAAJAIARBAUcEQEHIsgVBADYCAEH7ACACQRBqQQAQFSEEQciyBSgCACEGQciyBUEANgIAIAZBAUcNAQsQBiEAEAcaIAIoAhghAUHIsgVBADYCACABEOgBQciyBSgCACEBQciyBUEANgIAIAFBAUcNBUEAEAshAhAHGiACEIQBAAsgBEEANgIAIAAgBRCMA0EcEP4LIQJByLIFQQA2AgAgAiAAQc2MARCgBCEFQciyBSgCACEEQciyBUEANgIAIARBAUYNASACQQA2AhggAkIANwIQIAJB4M4CNgIAQciyBUEANgIAIAMgAkEBEAVByLIFKAIAIQNByLIFQQA2AgACQCADQQFHBEBByLIFQQA2AgBB+wAgAkEQakEAEBUhA0HIsgUoAgAhBEHIsgVBADYCACAEQQFHDQELEAYhABAHGiACKAIYIQFByLIFQQA2AgAgARDoAUHIsgUoAgAhAUHIsgVBADYCACABQQFHDQVBABALIQIQBxogAhCEAQALIANBADYCAAwDCxAGIQAQBxoMAwsQBiEAEAcaDAILIANCADcDAAsgACAFEIwDQRwQ/gshAkHIsgVBADYCACACIABB3owBEKAEIQVByLIFKAIAIQNByLIFQQA2AgACQAJAAkACQCADQQFHBEAgAkEANgIYIAJCADcCECACQeDOAjYCAEHIsgVBADYCAEHwzgIoAgAiBiACQQEQBUHIsgUoAgAhA0HIsgVBADYCAAJAIANBAUcEQEHIsgVBADYCAEH7ACACQRBqQQAQFSEDQciyBSgCACEEQciyBUEANgIAIARBAUcNAQsQBiEAEAcaIAIoAhghAUHIsgVBADYCACABEOgBQciyBSgCACEBQciyBUEANgIAIAFBAUcNBkEAEAshAhAHGiACEIQBAAsgA0EANgIAIAAgBRCMA0EcEP4LIQIgAUEBRw0CQciyBUEANgIAIAIgAEHojAEQoAQaQciyBSgCACEBQciyBUEANgIAIAFBAUYNASACQQA2AhggAkIANwIQIAJBwM8CNgIAQciyBUEANgIAQdDPAigCACACQQEQBUHIsgUoAgAhAUHIsgVBADYCACABQQFHBEBByLIFQQA2AgBB3AAgAkEQakEAEBUhAUHIsgUoAgAhBUHIsgVBADYCACAFQQFHDQQLEAYhABAHGiACKAIYIQFByLIFQQA2AgAgARDoAUHIsgUoAgAhAUHIsgVBADYCACABQQFHDQVBABALIQIQBxogAhCEAQALEAYhABAHGgwECxAGIQAQBxoMAwtByLIFQQA2AgAgAiAAQeiMARCgBBpByLIFKAIAIQFByLIFQQA2AgAgAUEBRwRAIAJBADYCGCACQgA3AhAgAkHgzgI2AgBByLIFQQA2AgAgBiACQQEQBUHIsgUoAgAhAUHIsgVBADYCAAJAIAFBAUcEQEHIsgVBADYCAEH7ACACQRBqQQAQFSEBQciyBSgCACEFQciyBUEANgIAIAVBAUcNAQsQBiEAEAcaIAIoAhghAUHIsgVBADYCACABEOgBQciyBSgCACEBQciyBUEANgIAIAFBAUcNBEEAEAshAhAHGiACEIQBAAsgAUEANgIADAILEAYhABAHGgwCCyABQgA3AwALIAAgAhCMA0EUEP4LIQJByLIFQQA2AgAgAiAAQfGMAUHFAxDaBBpByLIFKAIAIQFByLIFQQA2AgAgAUEBRw0BEAYhABAHGgsgAhD2DCAAEAgACyAAIAIQjAMgACAAQfqMAUECEJsDC3oCAn8BfiAAIAAoAgQgAEEoahDfAyIBEJ8DIAAgARC0AiAAEIkDEKwFIQMgAEHIAGoiAEECEKwBKAIAIQIgAQRAIAIgA0EAEK4BIABBAxCsASgCACADQQAQrgEPCyACIAOnIgFBABDXASAAQQMQrAEoAgAgAUEAENcBCyMAIABBAEEBEI4DIAAgABCeAxC0AiAAQQFBfxCOAyAAEJADC1kBAX8gACABQayNARCCAyEBIABBvI0BNgIAQciyBUEANgIAQdEBIAEQD0HIsgUoAgAhAkHIsgVBADYCACACQQFHBEAgAA8LEAYhABAHGiABEIQDGiAAEAgAC5sVAQV/QRwQ/gshAgJAAkACQCABQQFGBEBByLIFQQA2AgAgAiAAQeCNARCgBCEFQciyBSgCACEDQciyBUEANgIAAkAgA0EBRwRAIAJBADYCGCACQgA3AhAgAkHAzwI2AgBByLIFQQA2AgBB0M8CKAIAIgMgAkEBEAVByLIFKAIAIQRByLIFQQA2AgACQCAEQQFHBEBByLIFQQA2AgBB3AAgAkEQakEAEBUhBEHIsgUoAgAhBkHIsgVBADYCACAGQQFHDQELEAYhABAHGiACKAIYIQFByLIFQQA2AgAgARDoAUHIsgUoAgAhAUHIsgVBADYCACABQQFHDQZBABALIQIQBxogAhCEAQALIARCADcDACAAIAUQjANBHBD+CyECQciyBUEANgIAIAIgAEHtjQEQoAQhBUHIsgUoAgAhBEHIsgVBADYCACAEQQFGDQEgAkEANgIYIAJCADcCECACQcDPAjYCAEHIsgVBADYCACADIAJBARAFQciyBSgCACEDQciyBUEANgIAIANBAUcEQEHIsgVBADYCAEHcACACQRBqQQAQFSEDQciyBSgCACEEQciyBUEANgIAIARBAUcNBAsQBiEAEAcaIAIoAhghAUHIsgVBADYCACABEOgBQciyBSgCACEBQciyBUEANgIAIAFBAUcNBUEAEAshAhAHGiACEIQBAAsQBiEAEAcaDAQLEAYhABAHGgwDC0HIsgVBADYCACACIABB4I0BEKAEIQVByLIFKAIAIQNByLIFQQA2AgACQCADQQFHBEAgAkEANgIYIAJCADcCECACQeDOAjYCAEHIsgVBADYCAEHwzgIoAgAiAyACQQEQBUHIsgUoAgAhBEHIsgVBADYCAAJAIARBAUcEQEHIsgVBADYCAEH7ACACQRBqQQAQFSEEQciyBSgCACEGQciyBUEANgIAIAZBAUcNAQsQBiEAEAcaIAIoAhghAUHIsgVBADYCACABEOgBQciyBSgCACEBQciyBUEANgIAIAFBAUcNBUEAEAshAhAHGiACEIQBAAsgBEEANgIAIAAgBRCMA0EcEP4LIQJByLIFQQA2AgAgAiAAQe2NARCgBCEFQciyBSgCACEEQciyBUEANgIAIARBAUYNASACQQA2AhggAkIANwIQIAJB4M4CNgIAQciyBUEANgIAIAMgAkEBEAVByLIFKAIAIQNByLIFQQA2AgACQCADQQFHBEBByLIFQQA2AgBB+wAgAkEQakEAEBUhA0HIsgUoAgAhBEHIsgVBADYCACAEQQFHDQELEAYhABAHGiACKAIYIQFByLIFQQA2AgAgARDoAUHIsgUoAgAhAUHIsgVBADYCACABQQFHDQVBABALIQIQBxogAhCEAQALIANBADYCAAwDCxAGIQAQBxoMAwsQBiEAEAcaDAILIANCADcDAAsgACAFEIwDQRwQ/gshAkHIsgVBADYCACACIABB/o0BEKAEIQNByLIFKAIAIQVByLIFQQA2AgACQAJAAkACQCAFQQFHBEAgAkEANgIYIAJCADcCECACQeDOAjYCAEHIsgVBADYCAEHwzgIoAgAiBSACQQEQBUHIsgUoAgAhBEHIsgVBADYCAAJAIARBAUcEQEHIsgVBADYCAEH7ACACQRBqQQAQFSEEQciyBSgCACEGQciyBUEANgIAIAZBAUcNAQsQBiEAEAcaIAIoAhghAUHIsgVBADYCACABEOgBQciyBSgCACEBQciyBUEANgIAIAFBAUcNBkEAEAshAhAHGiACEIQBAAsgBEEANgIAIAAgAxCMA0EcEP4LIQIgAUEBRw0CQciyBUEANgIAIAIgAEGIjgEQoAQaQciyBSgCACEBQciyBUEANgIAIAFBAUYNASACQQA2AhggAkIANwIQIAJBwM8CNgIAQciyBUEANgIAQdDPAigCACACQQEQBUHIsgUoAgAhAUHIsgVBADYCACABQQFHBEBByLIFQQA2AgBB3AAgAkEQakEAEBUhAUHIsgUoAgAhA0HIsgVBADYCACADQQFHDQQLEAYhABAHGiACKAIYIQFByLIFQQA2AgAgARDoAUHIsgUoAgAhAUHIsgVBADYCACABQQFHDQVBABALIQIQBxogAhCEAQALEAYhABAHGgwECxAGIQAQBxoMAwtByLIFQQA2AgAgAiAAQYiOARCgBBpByLIFKAIAIQFByLIFQQA2AgAgAUEBRwRAIAJBADYCGCACQgA3AhAgAkHgzgI2AgBByLIFQQA2AgAgBSACQQEQBUHIsgUoAgAhAUHIsgVBADYCAAJAIAFBAUcEQEHIsgVBADYCAEH7ACACQRBqQQAQFSEBQciyBSgCACEDQciyBUEANgIAIANBAUcNAQsQBiEAEAcaIAIoAhghAUHIsgVBADYCACABEOgBQciyBSgCACEBQciyBUEANgIAIAFBAUcNBEEAEAshAhAHGiACEIQBAAsgAUEANgIADAILEAYhABAHGgwCCyABQgA3AwALIAAgAhCMA0EcEP4LIQJByLIFQQA2AgAgAiAAQZGOARCgBCEBQciyBSgCACEDQciyBUEANgIAAkACQCADQQFHBEAgAkIANwEOIAJBgNECNgIAIAJCADcBFEHIsgVBADYCAEGQ0QIoAgAiAyACQQEQBUHIsgUoAgAhBEHIsgVBADYCAAJAIARBAUcEQEHIsgVBADYCAEGEAiACQRBqQQAQFSEEQciyBSgCACEGQciyBUEANgIAIAZBAUcNAQsQBiEAEAcaIAIoAhghAUHIsgVBADYCACABEOgBQciyBSgCACEBQciyBUEANgIAIAFBAUcNBEEAEAshAhAHGiACEIQBAAsgBEEANgIAIAJBAToADyAAIAEQjANBHBD+CyECQciyBUEANgIAIAIgAEGWjgEQoAQhAUHIsgUoAgAhBEHIsgVBADYCACAEQQFGDQEgAkIANwEOIAJBgNECNgIAIAJCADcBFEHIsgVBADYCACADIAJBARAFQciyBSgCACEDQciyBUEANgIAAkAgA0EBRwRAQciyBUEANgIAQYQCIAJBEGpBABAVIQNByLIFKAIAIQRByLIFQQA2AgAgBEEBRw0BCxAGIQAQBxogAigCGCEBQciyBUEANgIAIAEQ6AFByLIFKAIAIQFByLIFQQA2AgAgAUEBRw0EQQAQCyECEAcaIAIQhAEACyADQQA2AgAgAkEBOgAOIAAgARCMAyAAIABBnY4BQcYAEJsDQRwQ/gshAkHIsgVBADYCACACIABBp44BEKAEIQFByLIFKAIAIQNByLIFQQA2AgAgA0EBRg0CIAJBADYCGCACQgA3AhAgAkHgzgI2AgBByLIFQQA2AgAgBSACQQEQBUHIsgUoAgAhBUHIsgVBADYCAAJAIAVBAUcEQEHIsgVBADYCAEH7ACACQRBqQQAQFSEFQciyBSgCACEDQciyBUEANgIAIANBAUcNAQsQBiEAEAcaIAIoAhghAUHIsgVBADYCACABEOgBQciyBSgCACEBQciyBUEANgIAIAFBAUcNBEEAEAshAhAHGiACEIQBAAsgBUEANgIAIAAgARCMAw8LEAYhABAHGgwCCxAGIQAQBxoMAQsQBiEAEAcaCyACEPYMIAAQCAALrwgBCH8jAEGwAWsiAiQAAkACQAJAIAAoAgAgAU0EQCACQeg+NgJgIAJB1D42AihByLIFQQA2AgBBKSACQeAAaiIGIAJBKGpBBHIiBBAFQciyBSgCACEDQciyBUEANgIAIANBAUYNASACQoCAgIBwNwOoASACQbA+NgJgIAJBnD42AihByLIFQQA2AgBBKiAEEA0hB0HIsgUoAgAhA0HIsgVBADYCACADQQFGBEAQBiEBEAcaDAQLIAJCADcCTCACQgA3AlQgAkEQNgJcIAJBzD82AixByLIFQQA2AgBBKyACQShqQdyOAUEVEBQhBUHIsgUoAgAhA0HIsgVBADYCAAJAAkACQAJAAkACQAJAAkACQCADQQFGDQBByLIFQQA2AgBBLCAFIAEQFSEDQciyBSgCACEBQciyBUEANgIAIAFBAUYNAEHIsgVBADYCAEErIANB8o4BQQQQFCEDQciyBSgCACEBQciyBUEANgIAIAFBAUYNACAAKAIAIQFByLIFQQA2AgBBLCADIAEQFRpByLIFKAIAIQFByLIFQQA2AgAgAUEBRg0AQQQQDiEAQciyBUEANgIAQS1BMBANIQNByLIFKAIAIQFByLIFQQA2AgAgAUEBRg0BQciyBUEANgIAQS4gAkEIaiAEEAVByLIFKAIAIQFByLIFQQA2AgAgAUEBRg0CIAIoAgggAkEIaiACLAATQQBIGyIEEIgNIgFBcE8EQEHIsgVBADYCAEEvIAJBGGoQD0HIsgUoAgAhAUHIsgVBADYCACABQQFGDQQMDAsCQAJAIAFBC08EQEHIsgVBADYCAEEtIAFBEGpBcHEiCBANIQVByLIFKAIAIQlByLIFQQA2AgAgCUEBRg0GIAIgBTYCGCACIAE2AhwgAiAIQYCAgIB4cjYCIAwBCyACIAE6ACMgAkEYaiEFIAFFDQELIAUgBCABEIANGgsgASAFakEAOgAAQciyBUEANgIAQTAgAyACQRhqQcQAQfeOAUGGAUGajwEQFhpByLIFKAIAIQFByLIFQQA2AgBBASEEIAFBAUcEQCAAIAM2AgBByLIFQQA2AgBBMSAAQazdAEEAEBJByLIFKAIAIQFByLIFQQA2AgBBACEEIAFBAUcNDAsQBiEBEAcaIAIsACNBf0wEQCACKAIYEPYMCyACLAATQQBIDQQMBQsQBiEBEAcaDAcLEAYhARAHGgwFCxAGIQEQBxoMAwsQBiEBEAcaQQEhBCACLAATQQBODQILIAIoAggQ9gwLIARFDQILIAMQ9gwLIAAQEwsgAkGwPjYCYCACQZw+NgIoIAJBzD82AiwgAiwAV0F/TARAIAIoAkwQ9gwLIAcQ4AYaIAYQ3AYgARAIAAsgACgCCCEAIAJBsAFqJAAgACABQQJ0ag8LEAYhARAHGgwBCwALIAYQ3AYgARAIAAv9AQICfwF+IAAgACgCBCAAQShqEN8DIgEQnwMgACABELgCIAAQiQMQrAUhAyAAQcgAaiIAQQIQrAEoAgAhAgJAIAEEQCACIANBABCuASAAQQMQrAEoAgAgA0EAEK4BDAELIAIgA6ciAUEAENcBIABBAxCsASgCACABQQAQ1wELIABBBBCsASgCAEHoB0EAENcBIABBBhCsASgCAEMAAIA/QQAQuwIgAEEHEKwBKAIAQwAAgD9BABC7AiAAQQgQrAEoAgBBADoADCAAQQgQrAEoAgBBoI0EQcYAQQAQvwQgAEEIEKwBKAIAQQE6AAwgAEEJEKwBKAIAQQFBABDXAQvWBwEIfyMAQbABayIDJAACQAJAAkAgAC0ADARAIANB6D42AmAgA0HUPjYCKEHIsgVBADYCAEEpIANB4ABqIgcgA0EoakEEciIEEAVByLIFKAIAIQJByLIFQQA2AgAgAkEBRg0BIANCgICAgHA3A6gBIANBsD42AmAgA0GcPjYCKEHIsgVBADYCAEEqIAQQDSEIQciyBSgCACECQciyBUEANgIAIAJBAUYEQBAGIQAQBxoMBAsgA0IANwJMIANCADcCVCADQRA2AlwgA0HMPzYCLEHIsgVBADYCAEErIANBKGpBy48BQRcQFCEFQciyBSgCACECQciyBUEANgIAAkACQAJAAkACQAJAAkACQAJAIAJBAUYNACAAKAIIIgAQiA0hAkHIsgVBADYCAEErIAUgACACEBQaQciyBSgCACEAQciyBUEANgIAIABBAUYNAEEEEA4hAkHIsgVBADYCAEEtQTAQDSEFQciyBSgCACEAQciyBUEANgIAIABBAUYNAUHIsgVBADYCAEEuIANBCGogBBAFQciyBSgCACEAQciyBUEANgIAIABBAUYNAiADKAIIIANBCGogAywAE0EASBsiBBCIDSIAQXBPBEBByLIFQQA2AgBBLyADQRhqEA9ByLIFKAIAIQBByLIFQQA2AgAgAEEBRg0EDAwLAkACQCAAQQtPBEBByLIFQQA2AgBBLSAAQRBqQXBxIgkQDSEGQciyBSgCACEKQciyBUEANgIAIApBAUYNBiADIAY2AhggAyAANgIcIAMgCUGAgICAeHI2AiAMAQsgAyAAOgAjIANBGGohBiAARQ0BCyAGIAQgABCADRoLIAAgBmpBADoAAEHIsgVBADYCAEEwIAUgA0EYakECQaWPAUGLAkHjjwEQFhpByLIFKAIAIQBByLIFQQA2AgBBASEEIABBAUcEQCACIAU2AgBByLIFQQA2AgBBMSACQazdAEEAEBJByLIFKAIAIQBByLIFQQA2AgBBACEEIABBAUcNDAsQBiEAEAcaIAMsACNBf0wEQCADKAIYEPYMCyADLAATQQBIDQQMBQsQBiEAEAcaDAcLEAYhABAHGgwFCxAGIQAQBxoMAwsQBiEAEAcaQQEhBCADLAATQQBODQILIAMoAggQ9gwLIARFDQILIAUQ9gwLIAIQEwsgA0GwPjYCYCADQZw+NgIoIANBzD82AiwgAywAV0F/TARAIAMoAkwQ9gwLIAgQ4AYaIAcQ3AYgABAIAAsgAEEQaiACELkCIAE4AgAgA0GwAWokAA8LEAYhABAHGgwBCwALIAcQ3AYgABAIAAsjACAAQQBBARCOAyAAIAAQngMQuAIgAEEBQX8QjgMgABCQAwsZACAAIAFB7I8BEIIDGiAAQfyPATYCACAAC+oCAQR/IwBBEGsiASQAQQQQDiEDQciyBUEANgIAQS1BLBANIQRByLIFKAIAIQBByLIFQQA2AgACQAJAAkACQAJAIABBAUcEQEHIsgVBADYCAEEtQSAQDSEAQciyBSgCACECQciyBUEANgIAIAJBAUYNASABIAA2AgAgAUKXgICAgISAgIB/NwIEIABBADoAFyAAQa+QASkAADcADyAAQaiQASkAADcACCAAQaCQASkAADcAAEHIsgVBADYCAEEyIAQgAUG4kAFBKkHekAEQEBpByLIFKAIAIQBByLIFQQA2AgBBASECIABBAUcEQCADIAQ2AgBByLIFQQA2AgBBMSADQaDaAEEAEBJByLIFKAIAIQBByLIFQQA2AgBBACECIABBAUcNBgsQBiEAEAcaIAEsAAtBf0wEQCABKAIAEPYMCyACDQIMBAsQBiEAEAcaDAILEAYhABAHGgsgBBD2DAsgAxATCyAAEAgLAAv2AwEEfyAAIAFBjJEBEIIDIQMgAEGckQE2AgBByLIFQQA2AgBBxwEgAyADQcCRAUEGEBxByLIFKAIAIQFByLIFQQA2AgACQAJAAkACQAJAIAFBAUYNAEHIsgVBADYCAEEtQRwQDSEBQciyBSgCACECQciyBUEANgIAIAJBAUYNAEHIsgVBADYCACABIANBypEBEKAEIQJByLIFKAIAIQRByLIFQQA2AgAgBEEBRg0BIAFBADYCGCABQgA3AhAgAUGgzQI2AgBByLIFQQA2AgBBsM0CKAIAIAFBARAFQciyBSgCACEEQciyBUEANgIAAkAgBEEBRwRAQciyBUEANgIAQd4AIAFBEGpBABAVIQRByLIFKAIAIQVByLIFQQA2AgAgBUEBRw0BCxAGIQAQBxogASgCGCECQciyBUEANgIAIAIQ6AFByLIFKAIAIQJByLIFQQA2AgAgAkEBRw0DQQAQCyEBEAcaIAEQhAEACyAEQQA7AQBByLIFQQA2AgBB2wAgAyACEAVByLIFKAIAIQFByLIFQQA2AgAgAUEBRg0AQciyBUEANgIAQa8BIANB3ZEBQQFBARAcQciyBSgCACEBQciyBUEANgIAIAFBAUcNBAsQBiEAEAcaDAILEAYhABAHGgsgARD2DAsgAxCEAxogABAIAAsgAAuBDQEFfyAAIAFBjJIBEIIDIQEgAEGckgE2AgBByLIFQQA2AgBBxwEgASABQcCSAUEGEBxByLIFKAIAIQJByLIFQQA2AgACQAJAAkACQAJAAkACQAJAAkACQCACQQFGDQBByLIFQQA2AgBBLUEcEA0hAkHIsgUoAgAhA0HIsgVBADYCACADQQFGDQBByLIFQQA2AgAgAiABQcqSARCgBCEFQciyBSgCACEDQciyBUEANgIAIANBAUYNASACQQA2AhggAkIANwIQIAJBoM0CNgIAQciyBUEANgIAQbDNAigCACIDIAJBARAFQciyBSgCACEEQciyBUEANgIAAkAgBEEBRwRAQciyBUEANgIAQd4AIAJBEGpBABAVIQRByLIFKAIAIQZByLIFQQA2AgAgBkEBRw0BCxAGIQAQBxogAigCGCEDQciyBUEANgIAIAMQ6AFByLIFKAIAIQNByLIFQQA2AgAgA0EBRw0DQQAQCyEBEAcaIAEQhAEACyAEQQA7AQBByLIFQQA2AgBB2wAgASAFEAVByLIFKAIAIQJByLIFQQA2AgAgAkEBRg0AQciyBUEANgIAQccBIAEgAUHdkgFBEBAcQciyBSgCACECQciyBUEANgIAIAJBAUYNAEHIsgVBADYCAEEtQRwQDSECQciyBSgCACEFQciyBUEANgIAIAVBAUYNAEHIsgVBADYCACACIAFB55IBEKAEIQVByLIFKAIAIQRByLIFQQA2AgAgBEEBRg0DIAJBADYCGCACQgA3AhAgAkGgzQI2AgBByLIFQQA2AgAgAyACQQEQBUHIsgUoAgAhBEHIsgVBADYCAAJAIARBAUcEQEHIsgVBADYCAEHeACACQRBqQQAQFSEEQciyBSgCACEGQciyBUEANgIAIAZBAUcNAQsQBiEAEAcaIAIoAhghA0HIsgVBADYCACADEOgBQciyBSgCACEDQciyBUEANgIAIANBAUcNBUEAEAshARAHGiABEIQBAAsgBEEAOwEAQciyBUEANgIAQdsAIAEgBRAFQciyBSgCACECQciyBUEANgIAIAJBAUYNAEHIsgVBADYCAEEtQRwQDSECQciyBSgCACEFQciyBUEANgIAIAVBAUYNAEHIsgVBADYCACACIAFB7ZIBEKAEIQVByLIFKAIAIQRByLIFQQA2AgAgBEEBRg0FIAJBADYCGCACQgA3AhAgAkGgzQI2AgBByLIFQQA2AgAgAyACQQEQBUHIsgUoAgAhA0HIsgVBADYCAAJAIANBAUcEQEHIsgVBADYCAEHeACACQRBqQQAQFSEDQciyBSgCACEEQciyBUEANgIAIARBAUcNAQsQBiEAEAcaIAIoAhghA0HIsgVBADYCACADEOgBQciyBSgCACEDQciyBUEANgIAIANBAUcNB0EAEAshARAHGiABEIQBAAsgA0EAOwEAQciyBUEANgIAQdsAIAEgBRAFQciyBSgCACECQciyBUEANgIAIAJBAUYNAEHIsgVBADYCAEHHASABIAFB9JIBQQ4QHEHIsgUoAgAhAkHIsgVBADYCACACQQFGDQBByLIFQQA2AgBBLUEkEA0hAkHIsgUoAgAhA0HIsgVBADYCACADQQFGDQdByLIFQQA2AgBB/QAgAiABQf6SAUEAQQBBABAWIQNByLIFKAIAIQVByLIFQQA2AgAgBUEBRg0IIAJBAToADyACQSA2AhRB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sgVBADYCAEGwzQIoAgAiAiABQQEQBUHIsgUoAgAhA0HIsgVBADYCAAJAIANBAUcEQEHIsgVBADYCAEHeACABQRBqQQAQFSEDQciyBSgCACEFQciyBUEANgIAIAVBAUcNAQsQBiEAEAcaIAEoAhghAkHIsgVBADYCACACEOgBQciyBSgCACECQciyBUEANgIAIAJBAUcNBUEAEAshARAHGiABEIQBAAsgA0EAOwEAIAAgBBCMA0EcEP4LIQFByLIFQQA2AgAgASAAQcWYARCgBCEEQciyBSgCACEDQciyBUEANgIAIANBAUYNASABQQA2AhggAUIANwIQIAFBoM0CNgIAQciyBUEANgIAIAIgAUEBEAVByLIFKAIAIQNByLIFQQA2AgACQCADQQFHBEBByLIFQQA2AgBB3gAgAUEQakEAEBUhA0HIsgUoAgAhBUHIsgVBADYCACAFQQFHDQELEAYhABAHGiABKAIYIQJByLIFQQA2AgAgAhDoAUHIsgUoAgAhAkHIsgVBADYCACACQQFHDQVBABALIQEQBxogARCEAQALIANBADsBACAAIAQQjANBHBD+CyEBQciyBUEANgIAIAEgAEHWmAEQoAQhBEHIsgUoAgAhA0HIsgVBADYCACADQQFGDQIgAUEANgIYIAFCADcCECABQaDNAjYCAEHIsgVBADYCACACIAFBARAFQciyBSgCACECQciyBUEANgIAAkAgAkEBRwRAQciyBUEANgIAQd4AIAFBEGpBABAVIQJByLIFKAIAIQNByLIFQQA2AgAgA0EBRw0BCxAGIQAQBxogASgCGCECQciyBUEANgIAIAIQ6AFByLIFKAIAIQJByLIFQQA2AgAgAkEBRw0FQQAQCyEBEAcaIAEQhAEACyACQQA7AQAgACAEEIwDQRwQ/gshAUHIsgVBADYCACABIABB75gBEKAEIQJByLIFKAIAIQRByLIFQQA2AgAgBEEBRg0DIAFBADYCGCABQgA3AhAgAUHgzgI2AgBByLIFQQA2AgBB8M4CKAIAIAFBARAFQciyBSgCACEEQciyBUEANgIAAkAgBEEBRwRAQciyBUEANgIAQfsAIAFBEGpBABAVIQRByLIFKAIAIQNByLIFQQA2AgAgA0EBRw0BCxAGIQAQBxogASgCGCECQciyBUEANgIAIAIQ6AFByLIFKAIAIQJB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IAEgA0EAELMDIAEgA2pBADoAACAAQcgAakEBEKwBKAIAIAFBABC1BCABEOgBIAJBEGokAAtMAQF/IAAoAkBBKGpB+ZkBEIMGRQRAIABByABqQQEQrAEoAgAiASABQRhqQQAQiQIoAgAQiA02AhQgABCVAyABQQA2AhQPCyAAEJUDC4oKAQV/IAAgAUHAmwEQggMhASAAQdCbATYCAEHIsgVBADYCAEHHASABIAFB9JsBQQYQHEHIsgUoAgAhAkHIsgVBADYCAAJAAkACQAJAAkACQAJAAkACQCACQQFGDQBByLIFQQA2AgBBLUEcEA0hAkHIsgUoAgAhA0HIsgVBADYCACADQQFGDQBByLIFQQA2AgAgAiABQf6bARCgBCEFQciyBSgCACEDQciyBUEANgIAIANBAUYNASACQQA2AhggAkIANwIQIAJBoM0CNgIAQciyBUEANgIAQbDNAigCACIDIAJBARAFQciyBSgCACEEQciyBUEANgIAAkAgBEEBRwRAQciyBUEANgIAQd4AIAJBEGpBABAVIQRByLIFKAIAIQZByLIFQQA2AgAgBkEBRw0BCxAGIQAQBxogAigCGCEDQciyBUEANgIAIAMQ6AFByLIFKAIAIQNByLIFQQA2AgAgA0EBRw0DQQAQCyEBEAcaIAEQhAEACyAEQQA7AQBByLIFQQA2AgBB2wAgASAFEAVByLIFKAIAIQJByLIFQQA2AgAgAkEBRg0AQciyBUEANgIAQccBIAEgAUGRnAFBEBAcQciyBSgCACECQciyBUEANgIAIAJBAUYNAEHIsgVBADYCAEEtQRwQDSECQciyBSgCACEFQciyBUEANgIAIAVBAUYNAEHIsgVBADYCACACIAFBm5wBEKAEIQVByLIFKAIAIQRByLIFQQA2AgAgBEEBRg0DIAJBADYCGCACQgA3AhAgAkGgzQI2AgBByLIFQQA2AgAgAyACQQEQBUHIsgUoAgAhBEHIsgVBADYCAAJAIARBAUcEQEHIsgVBADYCAEHeACACQRBqQQAQFSEEQciyBSgCACEGQciyBUEANgIAIAZBAUcNAQsQBiEAEAcaIAIoAhghA0HIsgVBADYCACADEOgBQciyBSgCACEDQciyBUEANgIAIANBAUcNBUEAEAshARAHGiABEIQBAAsgBEEAOwEAQciyBUEANgIAQdsAIAEgBRAFQciyBSgCACECQciyBUEANgIAIAJBAUYNAEHIsgVBADYCAEEtQRwQDSECQciyBSgCACEFQciyBUEANgIAIAVBAUYNAEHIsgVBADYCACACIAFBoZwBEKAEIQVByLIFKAIAIQRByLIFQQA2AgAgBEEBRg0FIAJBADYCGCACQgA3AhAgAkGgzQI2AgBByLIFQQA2AgAgAyACQQEQBUHIsgUoAgAhA0HIsgVBADYCAAJAIANBAUcEQEHIsgVBADYCAEHeACACQRBqQQAQFSEDQciyBSgCACEEQciyBUEANgIAIARBAUcNAQsQBiEAEAcaIAIoAhghA0HIsgVBADYCACADEOgBQciyBSgCACEDQciyBUEANgIAIANBAUcNB0EAEAshARAHGiABEIQBAAsgA0EAOwEAQciyBUEANgIAQdsAIAEgBRAFQciyBSgCACECQciyBUEANgIAIAJBAUYNAEHIsgVBADYCAEHHASABIAFBqJwBQTIQHEHIsgUoAgAhAkHIsgVBADYCACACQQFGDQBByLIFQQA2AgBBrwEgAUGynAFBAUEBEBxByLIFKAIAIQJByLIFQQA2AgAgAkEBRw0ICxAGIQAQBxoMBgsQBiEAEAcaCyACEPYMDAQLEAYhABAHGgsgAhD2DAwCCxAGIQAQBxoLIAIQ9gwLIAEQhAMaIAAQCAALIAALUQAgABCJAyAAQcgAaiIAQQEQrAEoAgBBAUEAEN0BIABBBRCsASgCAEEAOgAMIABBBRCsASgCAEGAjgRBMkEAEL8EIABBBRCsASgCAEEBOgAMC7AHAQR/IAAgASACEIIDIQEgAEHonAE2AgBByLIFQQA2AgBBxwEgASABQYydAUEGEBxByLIFKAIAIQJByLIFQQA2AgACQAJAAkACQAJAAkACQCACQQFGDQBByLIFQQA2AgBBLUEcEA0hAkHIsgUoAgAhA0HIsgVBADYCACADQQFGDQBByLIFQQA2AgAgAiABQZadARCgBCEDQciyBSgCACEEQciyBUEANgIAIARBAUYNASACQQA2AhggAkIANwIQIAJBoM0CNgIAQciyBUEANgIAQbDNAigCACIEIAJBARAFQciyBSgCACEFQciyBUEANgIAAkAgBUEBRwRAQciyBUEANgIAQd4AIAJBEGpBABAVIQVByLIFKAIAIQZByLIFQQA2AgAgBkEBRw0BCxAGIQAQBxogAigCGCEDQciyBUEANgIAIAMQ6AFByLIFKAIAIQNByLIFQQA2AgAgA0EBRw0DQQAQCyEBEAcaIAEQhAEACyAFQQA7AQBByLIFQQA2AgBB2wAgASADEAVByLIFKAIAIQJByLIFQQA2AgAgAkEBRg0AQciyBUEANgIAQccBIAEgAUGpnQFBEBAcQciyBSgCACECQciyBUEANgIAIAJBAUYNAEHIsgVBADYCAEEtQRwQDSECQciyBSgCACEDQciyBUEANgIAIANBAUYNAEHIsgVBADYCACACIAFBs50BEKAEIQNByLIFKAIAIQVByLIFQQA2AgAgBUEBRg0DIAJBADYCGCACQgA3AhAgAkGgzQI2AgBByLIFQQA2AgAgBCACQQEQBUHIsgUoAgAhBEHIsgVBADYCAAJAIARBAUcEQEHIsgVBADYCAEHeACACQRBqQQAQFSEEQciyBSgCACEFQciyBUEANgIAIAVBAUcNAQsQBiEAEAcaIAIoAhghA0HIsgVBADYCACADEOgBQciyBSgCACEDQciyBUEANgIAIANBAUcNBUEAEAshARAHGiABEIQBAAsgBEEAOwEAQciyBUEANgIAQdsAIAEgAxAFQciyBSgCACECQciyBUEANgIAIAJBAUYNAEHIsgVBADYCAEHHASABIAFBvZ0BQQIQHEHIsgUoAgAhAkHIsgVBADYCACACQQFGDQBByLIFQQA2AgBBrwEgAUHHnQFBAUEBEBxByLIFKAIAIQJByLIFQQA2AgAgAkEBRw0GCxAGIQAQBxoMBAsQBiEAEAcaCyACEPYMDAILEAYhABAHGgsgAhD2DAsgARCEAxogABAIAAsgAAtRACAAEIkDIABByABqIgBBARCsASgCAEEBQQAQ3QEgAEECEKwBKAIAQQA6AAwgAEECEKwBKAIAQcCOBEEQQQAQvwQgAEECEKwBKAIAQQE6AAwL1AEBAX8gACABQfSdARDxASAAQYSeATYCAEHIsgVBADYCAEEtQTAQDSEBQciyBSgCACECQciyBUEANgIAAkACQAJAIAJBAUcEQEHIsgVBADYCAEHgACABIABBqJ4BQQBBABAQGkHIsgUoAgAhAkHIsgVBADYCACACQQFGDQEgACABNgJ0QciyBUEANgIAQdsAIAAgARAFQciyBSgCACEBQciyBUEANgIAIAFBAUcNAwsQBiECEAcaDAELEAYhAhAHGiABEPYMCyAAEIQDGiACEAgACyAAC/4EAQF/IAAgAUHUngEQggMhASAAQeSeATYCAEHIsgVBADYCAEGvASABQYifAUEBQQEQHEHIsgUoAgAhAkHIsgVBADYCAAJAIAJBAUYNAEHIsgVBADYCAEGvASABQY2fAUEBQQEQHEHIsgUoAgAhAkHIsgVBADYCACACQQFGDQBByLIFQQA2AgBBrwEgAUGSnwFBAEEBEBxByLIFKAIAIQJByLIFQQA2AgAgAkEBRg0AQciyBUEANgIAQa8BIAFBl58BQQFBARAcQciyBSgCACECQciyBUEANgIAIAJBAUYNAEHIsgVBADYCAEGvASABQZyfAUEAQQEQHEHIsgUoAgAhAkHIsgVBADYCACACQQFGDQBByLIFQQA2AgBBrwEgAUGhnwFBAUEBEBxByLIFKAIAIQJByLIFQQA2AgAgAkEBRg0AQciyBUEANgIAQa8BIAFBpp8BQQBBARAcQciyBSgCACECQciyBUEANgIAIAJBAUYNAEHIsgVBADYCAEGvASABQaufAUEAQQEQHEHIsgUoAgAhAkHIsgVBADYCACACQQFGDQBByLIFQQA2AgBBrwEgAUGwnwFBAEEBEBxByLIFKAIAIQJByLIFQQA2AgAgAkEBRg0AQciyBUEANgIAQa8BIAFBtZ8BQQBBARAcQciyBSgCACECQciyBUEANgIAIAJBAUYNAEHIsgVBADYCAEGvASABQbqfAUEAQQEQHEHIsgUoAgAhAkHIsgVBADYCACACQQFGDQBByLIFQQA2AgBBrwEgAUG/nwFBAEEBEBxByLIFKAIAIQJByLIFQQA2AgAgAkEBRg0AIAAPCxAGIQAQBxogARCEAxogABAIAAtRAQF/IAAQiQMgACgCBCAAQShqEN8DIQEgACgCBCAAQaufAUGmnwEgARsQhwMiASAANgJAIABB4ABqIAEgACgCYBDpASABIAEoAgAoAggRAQALyQgBBH8gACABQeyfARCCAyEBIABB/J8BNgIAQciyBUEANgIAQdEBIAEQD0HIsgUoAgAhAkHIsgVBADYCAAJAAkACQAJAIAJBAUcEQEHIsgVBADYCAEEtQRwQDSECQciyBSgCACEDQciyBUEANgIAIANBAUYNAUHIsgVBADYCACACIAFB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AgAgA0EBRw0BCxAGIQAQBxogASgCGCECQciyBUEANgIAIAIQ6AFByLIFKAIAIQJByLIFQQA2AgAgAkEBRw0FQQAQCyEBEAcaIAEQhAEACyACQQA6AAAMAgsQBiEAEAcaDAMLIAJBADsBAAsgBCABEMgEIABBBEF/EI4DIAAQkAMPCxAGIQAQBxoLIAEQ9gwgABAIAAsTACAAKAIQQQAQogRCAXxCAYinCxIAIAAoAhAgAUEBdK1BABCjBAvTBwEFfyAAIAFB9KUBEIIDIQUgAEGEpgE2AgBByLIFQQA2AgBB0QEgBRAPQciyBSgCACEBQciyBUEANgIAAkACQAJAAkACQAJAAkACQCABQQFHBEBByLIFQQA2AgBBLUEcEA0hAUHIsgUoAgAhAkHIsgVBADYCACACQQFGDQFByLIFQQA2AgAgASAFQaimARCgBCECQciyBSgCACEDQciyBUEANgIAIANBAUYNAiABQQA2AhggAUIANwIQIAFB4M4CNgIAQciyBUEANgIAQfDOAigCACABQQEQBUHIsgUoAgAhA0HIsgVBADYCAAJAIANBAUcEQEHIsgVBADYCAEH7ACABQRBqQQAQFSEDQciyBSgCACEEQciyBUEANgIAIARBAUcNAQsQBiEAEAcaIAEoAhghAkHIsgVBADYCACACEOgBQciyBSgCACECQciyBUEANgIAIAJBAUcNBEEAEAshARAHGiABEIQBAAsgA0EANgIAIAFBAToADUHIsgVBADYCAEHbACAFIAIQBUHIsgUoAgAhAkHIsgVBADYCACACQQFGDQFByLIFQQA2AgBBLUEgEA0hAkHIsgUoAgAhA0HIsgVBADYCACADQQFGDQRByLIFQQA2AgAgAiAFQbOmASABEMUEIQNByLIFKAIAIQFByLIFQQA2AgAgAUEBRg0FQciyBUEANgIAQdsAIAUgAhAFQciyBSgCACEBQciyBUEANgIAIAFBAUYNBEHIsgVBADYCAEEtQRwQDSEBQciyBSgCACEEQciyBUEANgIAIARBAUYNBCACKAIEIQJByLIFQQA2AgAgASACQbumARCgBCECQciyBSgCACEEQciyBUEANgIAIARBAUYNBiABQQA2AhggAUIANwIQIAFBoM0CNgIAQciyBUEANgIAQbDNAigCACABQQEQBUHIsgUoAgAhBEHIsgVBADYCAAJAIARBAUcEQEHIsgVBADYCAEHeACABQRBqQQAQFSEEQciyBSgCACEGQciyBUEANgIAIAZBAUcNAQsQBiEAEAcaIAEoAhghAkHIsgVBADYCACACEOgBQciyBSgCACECQciyBUEANgIAIAJBAUcNCEEAEAshARAHGiABEIQBAAsgBEEAOwEAQciyBUEANgIAQd8AIAMgAhAFQciyBSgCACEBQciyBUEANgIAIAFBAUYNBCAADwsQBiEAEAcaDAcLEAYhABAHGgwGCxAGIQAQBxoLIAEQ9gwMBAsQBiEAEAcaDAMLEAYhABAHGiACEPYMDAILEAYhABAHGgsgARD2DAsgBRCEAxogABAIAAtMAQF/IABByABqIgFBAhCsASgCAEEAOgAMIAFBAhCsASgCACAAKQMgQvz///8ffEIBiKdBABDXASABQQIQrAEoAgBBAToADCAAEI0DC9EBAQJ/IAAgAUHspgEQggMhASAAQfymATYCAEHIsgVBADYCAEEtQSQQDSECQciyBSgCACEDQciyBUEANgIAAkACQAJAIANBAUcEQEHIsgVBADYCAEH9ACACIAFBoKcBQQBBAEEAEBYaQciyBSgCACEDQciyBUEANgIAIANBAUYNAUHIsgVBADYCAEHbACABIAIQBUHIsgUoAgAhAkHIsgVBADYCACACQQFHDQMLEAYhABAHGgwBCxAGIQAQBxogAhD2DAsgARCEAxogABAIAAsgAAvPAwEFfyMAQRBrIgIkACAAKQMQIAAoAgRBABCwA32nIgNBAWoQ4wEiAUUEQEEEEA4hAEHIsgVBADYCAEEtQSwQDSEDQciyBSgCACEBQciyBUEANgIAAkACQAJAAkACQCABQQFHBEBByLIFQQA2AgBBLUEgEA0hAUHIsgUoAgAhBUHIsgVBADYCAEEBIQQgBUEBRg0BIAIgATYCACACQpyAgICAhICAgH83AgQgAUEAOgAcIAFBwKcBKAAANgAYIAFBuKcBKQAANwAQIAFBsKcBKQAANwAIIAFBqKcBKQAANwAAQciyBUEANgIAQTIgAyACQcWnAUEoQeqnARAQGkHIsgUoAgAhAUHIsgVBADYCACABQQFGDQIgACADNgIAQQAhBEHIsgVBADYCAEExIABBoNoAQQAQEkHIsgUoAgAhAUHIsgVBADYCACABQQFGDQIACxAGIQEQBxoMAwsQBiEBEAcaDAELEAYhARAHGiACLAALQX9MBEAgAigCABD2DAsgBEUNAgsgAxD2DAsgABATCyABEAgACyAAKAIEIAEgA0EAELMDIAEgA2pBADoAACAAQcgAakEAEKwBKAIAIAFBABC1BCABEOgBIAJBEGokAAs6AQJ/IABByABqQQAQrAEoAgAiAUEYakEAEIkCKAIAIgIEQCABIAIQiA02AhQLIAAQlQMgAUEANgIUCxkAIAAgAUGYqAEQggMaIABBqKgBNgIAIAAL1x8BBn8gACAAQcyoAUEGEJsDQRwQ/gshAUHIsgVBADYCACABIABB1qgBEKAEIQVByLIFKAIAIQNByLIFQQA2AgACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkAgA0EBRwRAIAFBADYCGCABQgA3AhAgAUGgzQI2AgBByLIFQQA2AgBBsM0CKAIAIgMgAUEBEAVByLIFKAIAIQJByLIFQQA2AgACQCACQQFHBEBByLIFQQA2AgBB3gAgAUEQakEAEBUhAkHIsgUoAgAhBEHIsgVBADYCACAEQQFHDQELEAYhABAHGiABKAIYIQNByLIFQQA2AgAgAxDoAUHIsgUoAgAhA0HIsgVBADYCACADQQFHDRBBABALIQEQBxogARCEAQALIAJBADsBACAAIAUQjANBHBD+CyEBQciyBUEANgIAIAEgAEHpqAEQoAQhBUHIsgUoAgAhAkHIsgVBADYCACACQQFGDQEgAUEANgIYIAFCADcCECABQeDOAjYCAEHIsgVBADYCAEHwzgIoAgAiAiABQQEQBUHIsgUoAgAhBEHIsgVBADYCAAJAIARBAUcEQEHIsgVBADYCAEH7ACABQRBqQQAQFSEEQciyBSgCACEGQciyBUEANgIAIAZBAUcNAQsQBiEAEAcaIAEoAhghA0HIsgVBADYCACADEOgBQciyBSgCACEDQciyBUEANgIAIANBAUcNEEEAEAshARAHGiABEIQBAAsgBEEANgIAIAAgBRCMA0EcEP4LIQFByLIFQQA2AgAgASAAQfaoARCgBCEFQciyBSgCACEEQciyBUEANgIAIARBAUYNAiABQQA2AhggAUIANwIQIAFB4M4CNgIAQciyBUEANgIAIAIgAUEBEAVByLIFKAIAIQJByLIFQQA2AgACQCACQQFHBEBByLIFQQA2AgBB+wAgAUEQakEAEBUhAkHIsgUoAgAhBEHIsgVBADYCACAEQQFHDQELEAYhABAHGiABKAIYIQNByLIFQQA2AgAgAxDoAUHIsgUoAgAhA0HIsgVBADYCACADQQFHDRBBABALIQEQBxogARCEAQALIAJBADYCACAAIAUQjANBHBD+CyEBQciyBUEANgIAIAEgAEGIqQEQoAQhBUHIsgUoAgAhAkHIsgVBADYCACACQQFGDQMgAUEANgIYIAFCADcCECABQaDNAjYCAEHIsgVBADYCACADIAFBARAFQciyBSgCACECQciyBUEANgIAAkAgAkEBRwRAQciyBUEANgIAQd4AIAFBEGpBABAVIQJByLIFKAIAIQRByLIFQQA2AgAgBEEBRw0BCxAGIQAQBxogASgCGCEDQciyBUEANgIAIAMQ6AFByLIFKAIAIQNByLIFQQA2AgAgA0EBRw0QQQAQCyEBEAcaIAEQhAEACyACQQA7AQAgACAFEIwDQRwQ/gshAUHIsgVBADYCACABIABBk6kBEKAEIQVByLIFKAIAIQJByLIFQQA2AgAgAkEBRg0EIAFBADYCGCABQgA3AhAgAUGgzQI2AgBByLIFQQA2AgAgAyABQQEQBUHIsgUoAgAhAkHIsgVBADYCAAJAIAJBAUcEQEHIsgVBADYCAEHeACABQRBqQQAQFSECQciyBSgCACEEQciyBUEANgIAIARBAUcNAQsQBiEAEAcaIAEoAhghA0HIsgVBADYCACADEOgBQciyBSgCACEDQciyBUEANgIAIANBAUcNEEEAEAshARAHGiABEIQBAAsgAkEAOwEAIAAgBRCMA0EcEP4LIQFByLIFQQA2AgAgASAAQaCpARCgBCEFQciyBSgCACECQciyBUEANgIAIAJBAUYNBSABQQA2AhggAUIANwIQIAFBoM0CNgIAQciyBUEANgIAIAMgAUEBEAVByLIFKAIAIQJByLIFQQA2AgACQCACQQFHBEBByLIFQQA2AgBB3gAgAUEQakEAEBUhAkHIsgUoAgAhBEHIsgVBADYCACAEQQFHDQELEAYhABAHGiABKAIYIQNByLIFQQA2AgAgAxDoAUHIsgUoAgAhA0HIsgVBADYCACADQQFHDRBBABALIQEQBxogARCEAQALIAJBADsBACAAIAUQjANBHBD+CyEBQciyBUEANgIAIAEgAEGsqQEQoAQhBUHIsgUoAgAhAkHIsgVBADYCACACQQFGDQYgAUEANgIYIAFCADcCECABQaDNAjYCAEHIsgVBADYCACADIAFBARAFQciyBSgCACECQciyBUEANgIAAkAgAkEBRwRAQciyBUEANgIAQd4AIAFBEGpBABAVIQJByLIFKAIAIQRByLIFQQA2AgAgBEEBRw0BCxAGIQAQBxogASgCGCEDQciyBUEANgIAIAMQ6AFByLIFKAIAIQNByLIFQQA2AgAgA0EBRw0QQQAQCyEBEAcaIAEQhAEACyACQQA7AQAgACAFEIwDQRwQ/gshAUHIsgVBADYCACABIABBuqkBEKAEIQVByLIFKAIAIQJByLIFQQA2AgAgAkEBRg0HIAFBADYCGCABQgA3AhAgAUGgzQI2AgBByLIFQQA2AgAgAyABQQEQBUHIsgUoAgAhAkHIsgVBADYCAAJAIAJBAUcEQEHIsgVBADYCAEHeACABQRBqQQAQFSECQciyBSgCACEEQciyBUEANgIAIARBAUcNAQsQBiEAEAcaIAEoAhghA0HIsgVBADYCACADEOgBQciyBSgCACEDQciyBUEANgIAIANBAUcNEEEAEAshARAHGiABEIQBAAsgAkEAOwEAIAAgBRCMA0EcEP4LIQFByLIFQQA2AgAgASAAQcmpARCgBCEFQciyBSgCACECQciyBUEANgIAIAJBAUYNCCABQQA2AhggAUIANwIQIAFBoM0CNgIAQciyBUEANgIAIAMgAUEBEAVByLIFKAIAIQJByLIFQQA2AgACQCACQQFHBEBByLIFQQA2AgBB3gAgAUEQakEAEBUhAkHIsgUoAgAhBEHIsgVBADYCACAEQQFHDQELEAYhABAHGiABKAIYIQNByLIFQQA2AgAgAxDoAUHIsgUoAgAhA0HIsgVBADYCACADQQFHDRBBABALIQEQBxogARCEAQALIAJBADsBACAAIAUQjANBHBD+CyEBQciyBUEANgIAIAEgAEHaqQEQoAQhBUHIsgUoAgAhAkHIsgVBADYCACACQQFGDQkgAUEANgIYIAFCADcCECABQaDNAjYCAEHIsgVBADYCACADIAFBARAFQciyBSgCACECQciyBUEANgIAAkAgAkEBRwRAQciyBUEANgIAQd4AIAFBEGpBABAVIQJByLIFKAIAIQRB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IAVBAUYNASADQQA2AhggA0IANwIQIANBoM0CNgIAQciyBUEANgIAQbDNAigCACIFIANBARAFQciyBSgCACEEQciyBUEANgIAAkAgBEEBRwRAQciyBUEANgIAQd4AIANBEGpBABAVIQRByLIFKAIAIQZByLIFQQA2AgAgBkEBRw0BCxAGIQAQBxogAygCGCEFQciyBUEANgIAIAUQ6AFByLIFKAIAIQVByLIFQQA2AgAgBUEBRw0DQQAQCyEBEAcaIAEQhAEACyAEQQA7AQBByLIFQQA2AgBB2wAgASACEAVByLIFKAIAIQNByLIFQQA2AgAgA0EBRg0AQciyBUEANgIAQS1BHBANIQNByLIFKAIAIQJByLIFQQA2AgAgAkEBRg0AQciyBUEANgIAIAMgAUHnrAEQoAQhAkHIsgUoAgAhBEHIsgVBADYCACAEQQFGDQMgA0EANgIYIANCADcCECADQeDOAjYCAEHIsgVBADYCAEHwzgIoAgAgA0EBEAVByLIFKAIAIQRByLIFQQA2AgACQCAEQQFHBEBByLIFQQA2AgBB+wAgA0EQakEAEBUhBEHIsgUoAgAhBkHIsgVBADYCACAGQQFHDQELEAYhABAHGiADKAIYIQVByLIFQQA2AgAgBRDoAUHIsgUoAgAhBUHIsgVBADYCACAFQQFHDQVBABALIQEQBxogARCEAQALIARBADYCAEHIsgVBADYCAEHbACABIAIQBUHIsgUoAgAhA0HIsgVBADYCACADQQFGDQBByLIFQQA2AgBBLUEcEA0hAkHIsgUoAgAhA0HIsgVBADYCACADQQFGDQBByLIFQQA2AgAgAiABQfSsARCgBCEEQciyBSgCACEDQciyBUEANgIAIANBAUYNBSACQQA2AhggAkIANwIQIAJBkMwCNgIAQciyBUEANgIAQaDMAigCACIDIAJBARAFQciyBSgCACEGQciyBUEANgIAAkAgBkEBRwRAQciyBUEANgIAQdkAIAJBEGpBABAVIQZByLIFKAIAIQdByLIFQQA2AgAgB0EBRw0BCxAGIQAQBxogAigCGCEDQciyBUEANgIAIAMQ6AFByLIFKAIAIQNByLIFQQA2AgAgA0EBRw0HQQAQCyEBEAcaIAEQhAEACyAGQQA6AABByLIFQQA2AgBB2wAgASAEEAVByLIFKAIAIQJByLIFQQA2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IAFBAUcEQEHIsgVBADYCAEH7ACACQRBqQQAQFSEBQciyBSgCACEEQciyBUEANgIAIARBAUcNAQsQBiEAEAcaIAIoAhghAUHIsgVBADYCACABEOgBQciyBSgCACEBQciyBUEANgIAIAFBAUcNBEEAEAshAhAHGiACEIQBAAsgAUEANgIADAILEAYhABAHGgwCCyABQgA3AwALIAAgAhCMAyAAIABBkbABQQgQmwNBHBD+CyECQciyBUEANgIAIAIgAEGbsAEQoAQhAUHIsgUoAgAhBEHIsgVBADYCAAJAAkACQAJAAkAgBEEBRwRAIAJBADYCGCACQgA3AhAgAkGgzQI2AgBByLIFQQA2AgBBsM0CKAIAIgQgAkEBEAVByLIFKAIAIQNByLIFQQA2AgACQCADQQFHBEBByLIFQQA2AgBB3gAgAkEQakEAEBUhA0HIsgUoAgAhBUHIsgVBADYCACAFQQFHDQELEAYhABAHGiACKAIYIQFByLIFQQA2AgAgARDoAUHIsgUoAgAhAUHIsgVBADYCACABQQFHDQdBABALIQIQBxogAhCEAQALIANBADsBACAAIAEQjANBHBD+CyECQciyBUEANgIAIAIgAEGhsAEQoAQhAUHIsgUoAgAhA0HIsgVBADYCACADQQFGDQEgAkEANgIYIAJCADcCECACQaDNAjYCAEHIsgVBADYCACAEIAJBARAFQciyBSgCACEEQciyBUEANgIAAkAgBEEBRwRAQciyBUEANgIAQd4AIAJBEGpBABAVIQRByLIFKAIAIQNByLIFQQA2AgAgA0EBRw0BCxAGIQAQBxogAigCGCEBQciyBUEANgIAIAEQ6AFByLIFKAIAIQFByLIFQQA2AgAgAUEBRw0HQQAQCyECEAcaIAIQhAEACyAEQQA7AQAgACABEIwDQRwQ/gshAkHIsgVBADYCACACIABBsbABEKAEIQRByLIFKAIAIQFByLIFQQA2AgAgAUEBRg0CIAJCADcBDiACQYDRAjYCACACQgA3ARRByLIFQQA2AgBBkNECKAIAIgEgAkEBEAVByLIFKAIAIQNByLIFQQA2AgACQCADQQFHBEBByLIFQQA2AgBBhAIgAkEQakEAEBUhA0HIsgUoAgAhBUHIsgVBADYCACAFQQFHDQELEAYhABAHGiACKAIYIQFByLIFQQA2AgAgARDoAUHIsgUoAgAhAUHIsgVBADYCACABQQFHDQdBABALIQIQBxogAhCEAQALIANBADYCACACQQE6AA4gACAEEIwDIAAgAEG4sAFBAhCbA0EwEP4LIQJByLIFQQA2AgBB4AAgAiAAQcKwAUEkQQAQEBpByLIFKAIAIQRByLIFQQA2AgAgBEEBRg0DIAAgAhCMA0EcEP4LIQJByLIFQQA2AgAgAiAAQcmwARCgBCEEQciyBSgCACEDQciyBUEANgIAIANBAUYNBCACQgA3AQ4gAkGA0QI2AgAgAkIANwEUQciyBUEANgIAIAEgAkEBEAVByLIFKAIAIQNByLIFQQA2AgACQCADQQFHBEBByLIFQQA2AgBBhAIgAkEQakEAEBUhA0HIsgUoAgAhBUHIsgVBADYCACAFQQFHDQELEAYhABAHGiACKAIYIQFByLIFQQA2AgAgARDoAUHIsgUoAgAhAUHIsgVBADYCACABQQFHDQdBABALIQIQBxogAhCEAQALIANBADYCACACQQE6AA8gACAEEIwDQRwQ/gshAkHIsgVBADYCACACIABBz7ABEKAEIQRByLIFKAIAIQNByLIFQQA2AgAgA0EBRg0FIAJCADcBDiACQYDRAjYCACACQgA3ARRByLIFQQA2AgAgASACQQEQBUHIsgUoAgAhAUHIsgVBADYCAAJAIAFBAUcEQEHIsgVBADYCAEGEAiACQRBqQQAQFSEBQciyBSgCACEDQciyBUEANgIAIANBAUcNAQsQBiEAEAcaIAIoAhghAUHIsgVBADYCACABEOgBQciyBSgCACEBQciyBUEANgIAIAFBAUcNB0EAEAshAhAHGiACEIQBAAsgAUEANgIAIAJBAToADyAAIAQQjAMPCxAGIQAQBxoMBQsQBiEAEAcaDAQLEAYhABAHGgwDCxAGIQAQBxoMAgsQBiEAEAcaDAELEAYhABAHGgsgAhD2DCAAEAgAC5MBAgJ/AX4gACAAKAIEIABBKGoQ3wMiARCfAyAAIAEQ8gIgABCJAxCsBSEDIABByABqIgBBAhCsASgCACECAkAgAQRAIAIgA0EAEK4BIABBAxCsASgCACADQQAQrgEMAQsgAiADpyIBQQAQ1wEgAEEDEKwBKAIAIAFBABDXAQsgAEEMEKwBKAIAQYCPBEEkQQAQvwQLIwAgAEEAQQEQjgMgACAAEJ4DEPICIABBAUF/EI4DIAAQkAMLvQMBBH8gACABQYCxARCCAyEEIABBkLEBNgIAQciyBUEANgIAQdEBIAQQD0HIsgUoAgAhAUHIsgVBADYCAAJAAkACQAJAAkAgAUEBRg0AQciyBUEANgIAQS1BHBANIQFByLIFKAIAIQJByLIFQQA2AgAgAkEBRg0AQciyBUEANgIAIAEgBEG0sQEQoAQhAkHIsgUoAgAhA0HIsgVBADYCACADQQFGDQEgAUEANgIYIAFCADcCECABQeDOAjYCAEHIsgVBADYCAEHwzgIoAgAgAUEBEAVByLIFKAIAIQNByLIFQQA2AgACQCADQQFHBEBByLIFQQA2AgBB+wAgAUEQakEAEBUhA0HIsgUoAgAhBUHIsgVBADYCACAFQQFHDQELEAYhABAHGiABKAIYIQJByLIFQQA2AgAgAhDoAUHIsgUoAgAhAkHIsgVBADYCACACQQFHDQNBABALIQEQBxogARCEAQALIANBADYCAEHIsgVBADYCAEHbACAEIAIQBUHIsgUoAgAhAUHIsgVBADYCACABQQFHDQQLEAYhABAHGgwCCxAGIQAQBxoLIAEQ9gwLIAQQhAMaIAAQCAALIAAL9goBBH8CQAJAIAFBAXEEQEEcEP4LIQJByLIFQQA2AgAgAiAAQbyxARCgBCEEQciyBSgCACEDQciyBUEANgIAIANBAUYNASACQQA2AhggAkIANwIQIAJBwM8CNgIAQciyBUEANgIAQdDPAigCACACQQEQBUHIsgUoAgAhA0HIsgVBADYCAAJAIANBAUcEQEHIsgVBADYCAEHcACACQRBqQQAQFSEDQciyBSgCACEFQciyBUEANgIAIAVBAUcNAQsQBiEAEAcaIAIoAhghAUHIsgVBADYCACABEOgBQciyBSgCACEBQciyBUEANgIAIAFBAUcNA0EAEAshAhAHGiACEIQBAAsgA0IANwMAIAAgBBCMAwsgAUECcQRAQRwQ/gshAkHIsgVBADYCACACIABBy7EBEKAEIQRByLIFKAIAIQNByLIFQQA2AgACQCADQQFHBEAgAkEANgIYIAJCADcCECACQeDOAjYCAEHIsgVBADYCAEHwzgIoAgAgAkEBEAVByLIFKAIAIQNByLIFQQA2AgAgA0EBRwRAQciyBUEANgIAQfsAIAJBEGpBABAVIQNByLIF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IQEQBxogARCEAQALIANBADYCAEHIsgVBADYCAEHbACABIAQQBUHIsgUoAgAhAkHIsgVBADYCACACQQFGDQkMBwsQBiEAEAcaCyACEPYMDAgLEAYhABAHGgsgAhD2DAwGCxAGIQAQBxoLIAIQ9gwMBAtByLIFQQA2AgAgAhCtBSEDQciyBSgCACEEQciyBUEANgIAIARBAUYNAkHIsgVBADYCAEHRtwEQrQUhBEHIsgUoAgAhBUHIsgVBADYCACAFQQFGDQIgAyAERgRAQciyBUEANgIAQS1BJBANIQJByLIFKAIAIQNByLIFQQA2AgAgA0EBRg0DQciyBUEANgIAQf0AIAIgAUHWtwFBAEEAQQAQFhpByLIFKAIAIQNByLIFQQA2AgAgA0EBRg0CQciyBUEANgIAQdsAIAEgAhAFQciyBSgCACECQciyBUEANgIAIAJBAUYNAwwBC0HIsgVBADYCACACEK0FIQNByLIFKAIAIQRByLIFQQA2AgAgBEEBRg0CQciyBUEANgIAQd+3ARCtBSEEQciyBSgCACEFQciyBUEANgIAIAVBAUYNAiADIARGBEBByLIFQQA2AgBB0QEgARAPQciyBSgCACECQciyBUEANgIAIAJBAUYNA0HIsgVBADYCAEEtQRwQDSECQciyBSgCACEDQciyBUEANgIAAkACQAJAAkACQAJAAkACQCADQQFGDQBByLIFQQA2AgAgAiABQeS3ARCgBCEDQciyBSgCACEEQciyBUEANgIAIARBAUYNASACQQA2AhggAkIANwIQIAJB4M4CNgIAQciyBUEANgIAQfDOAigCACACQQEQBUHIsgUoAgAhBEHIsgVBADYCAAJAIARBAUcEQEHIsgVBADYCAEH7ACACQRBqQQAQFSEEQciyBSgCACEFQciyBUEANgIAIAVBAUcNAQsQBiEAEAcaIAIoAhghA0HIsgVBADYCACADEOgBQciyBSgCACEDQciyBUEANgIAIANBAUcNA0EAEAshARAHGiABEIQBAAsgBEEANgIAQciyBUEANgIAQdsAIAEgAxAFQciyBSgCACEDQciyBUEANgIAIANBAUYNAEHIsgVBADYCAEEtQSAQDSEDQciyBSgCACEEQciyBUEANgIAIARBAUYNBEHIsgVBADYCACADIAFB77cBIAIQxQQhBEHIsgUoAgAhAkHI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EAYhABAHGiACKAIYIQNByLIFQQA2AgAgAxDoAUHIsgUoAgAhA0HIsgVBADYCACADQQFHDQJBABALIQEQBxogARCEAQALIARBADYCAEHIsgVBADYCAEHbACABIAMQBUHIsgUoAgAhAkHIsgVBADYCACACQQFHDQMMBQsQBiEAEAcaCyACEPYMDAQLQciyBUEANgIAIAIQrQUhA0HIsgUoAgAhBEHIsgVBADYCACAEQQFGDQJByLIFQQA2AgBBxbgBEK0FIQRByLIFKAIAIQVByLIFQQA2AgAgBUEBRg0CIAMgBEYEQEHIsgVBADYCAEEtQRwQDSECQciyBSgCACEDQciyBUEANgIAIANBAUYNA0HIsgVBADYCACACIAFBsLgBEKAEIQNByLIFKAIAIQRByLIFQQA2AgACQCAEQQFHBEAgAkEANgIYIAJCADcCECACQcDPAjYCAEHIsgVBADYCAEHQzwIoAgAgAkEBEAVByLIFKAIAIQRByLIFQQA2AgACQCAEQQFHBEBByLIFQQA2AgBB3AAgAkEQakEAEBUhBEHIsgUoAgAhBUHIsgVBADYCACAFQQFHDQELEAYhABAHGiACKAIYIQNByLIFQQA2AgAgAxDoAUHIsgUoAgAhA0HIsgVBADYCACADQQFHDQJBABALIQEQBxogARCEAQALIARCADcDAEHIsgVBADYCAEHbACABIAMQBUHIsgUoAgAhAkHIsgVBADYCACACQQFHDQMMBQsQBiEAEAcaCyACEPYMDAQLQciyBUEANgIAIAIQrQUhA0HIsgUoAgAhBEHIsgVBADYCACAEQQFGDQJByLIFQQA2AgBByrgBEK0FIQRByLIFKAIAIQVByLIFQQA2AgAgBUEBRg0CIAMgBEYEQEHIsgVBADYCAEEtQRwQDSECQciyBSgCACEDQciyBUEANgIAIANBAUYNA0HIsgVBADYCACACIAFBsLgBEKAEIQNByLIFKAIAIQRByLIFQQA2AgACQCAEQQFHBEAgAkEANgIYIAJCADcCECACQcDPAjYCAEHIsgVBADYCAEHQzwIoAgAgAkEBEAVByLIFKAIAIQRByLIFQQA2AgACQCAEQQFHBEBByLIFQQA2AgBB3AAgAkEQakEAEBUhBEHIsgUoAgAhBUHIsgVBADYCACAFQQFHDQELEAYhABAHGiACKAIYIQNByLIF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DQIgAkEANgIYIAJCADcCECACQaDNAjYCAEHIsgVBADYCACAEIAJBARAFQciyBSgCACEEQciyBUEANgIAAkAgBEEBRwRAQciyBUEANgIAQd4AIAJBEGpBABAVIQRByLIFKAIAIQVByLIFQQA2AgAgBUEBRw0BCxAGIQAQBxogAigCGCEDQciyBUEANgIAIAMQ6AFByLIFKAIAIQNByLIFQQA2AgAgA0EBRw0EQQAQCyEBEAcaIAEQhAEACyAEQQA7AQBByLIFQQA2AgBB2wAgASADEAVByLIFKAIAIQJByLIFQQA2AgAgAkEBRg0NQciyBUEANgIAQS1BHBANIQJByLIFKAIAIQNByLIFQQA2AgAgA0EBRg0NQciyBUEANgIAIAIgAUGeuQEQoAQhBEHIsgUoAgAhA0HIsgVBADYCACADQQFGDQQgAkEANgIYIAJCADcCECACQeDOAjYCAEHIsgVBADYCAEHwzgIoAgAiAyACQQEQBUHIsgUoAgAhBUHIsgVBADYCAAJAIAVBAUcEQEHIsgVBADYCAEH7ACACQRBqQQAQFSEFQciyBSgCACEGQciyBUEANgIAIAZBAUcNAQsQBiEAEAcaIAIoAhghA0HIsgVBADYCACADEOgBQciyBSgCACEDQciyBUEANgIAIANBAUcNBkEAEAshARAHGiABEIQBAAsgBUEANgIAQciyBUEANgIAQdsAIAEgBBAFQciyBSgCACECQciyBUEANgIAIAJBAUYNDUHIsgVBADYCAEEtQRwQDSECQciyBSgCACEEQciyBUEANgIAIARBAUYNDUHIsgVBADYCACACIAFBqbkBEKAEIQRByLIFKAIAIQVByLIFQQA2AgAgBUEBRg0GIAJBADYCGCACQgA3AhAgAkHgzgI2AgBByLIFQQA2AgAgAyACQQEQBUHIsgUoAgAhBUHIsgVBADYCAAJAIAVBAUcEQEHIsgVBADYCAEH7ACACQRBqQQAQFSEFQciyBSgCACEGQciyBUEANgIAIAZBAUcNAQsQBiEAEAcaIAIoAhghA0HIsgVBADYCACADEOgBQciyBSgCACEDQciyBUEANgIAIANBAUcNCEEAEAshARAHGiABEIQBAAsgBUEANgIAQciyBUEANgIAQdsAIAEgBBAFQciyBSgCACECQciyBUEANgIAIAJBAUYNDUHIsgVBADYC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AUG9ugFBAEEBEBxByLIFKAIAIQJByLIFQQA2AgAgAkEBRg0DQciyBUEANgIAQa8BIAFBwroBQQBBARAcQciyBSgCACECQciyBUEANgIAIAJBAUYNA0HIsgVBADYCAEGvASABQce6AUEAQQEQHEHIsgUoAgAhAkHIsgVBADYCACACQQFGDQNByLIFQQA2AgBBrwEgAUHMugFBAEEBEBxByLIFKAIAIQJByLIFQQA2AgAgAkEBRg0DQciyBUEANgIAQa8BIAFB0boBQQBBARAcQciyBSgCACECQciyBUEANgIAIAJBAUYNA0HIsgVBADYCAEGvASABQda6AUEAQQEQHEHIsgUoAgAhAkHIsgVBADYCACACQQFGDQNByLIFQQA2AgBBrwEgAUHbugFBAEEBEBxByLIFKAIAIQJByLIFQQA2AgAgAkEBRg0DQciyBUEANgIAQa8BIAFB4LoBQQBBARAcQciyBSgCACECQciyBUEANgIAIAJBAUYNA0HIsgVBADYCAEGvASABQeW6AUEAQQAQHEHIsgUoAgAhAkHIsgVBADYCACACQQFGDQNByLIFQQA2AgBBrwEgAUHqugFBAEEBEBxByLIFKAIAIQJByLIFQQA2AgAgAkEBRg0DQciyBUEANgIAQa8BIAFB77oBQQBBARAcQciyBSgCACECQciyBUEANgIAIAJBAUYNA0HIsgVBADYCAEGvASABQfS6AUEAQQEQHEHIsgUoAgAhAkHIsgVBADYCACACQQFGDQNByLIFQQA2AgBBrwEgAUH5ugFBAEEBEBxByLIFKAIAIQJByLIFQQA2AgAgAkEBRg0DQciyBUEANgIAQa8BIAFB/roBQQBBARAcQciyBSgCACECQciyBUEANgIAIAJBAUYNA0HIsgVBADYCAEGvASABQYO7AUEAQQEQHEHIsgUoAgAhAkHIsgVBADYCACACQQFGDQNByLIFQQA2AgBBrwEgAUGIuwFBAEEBEBxByLIFKAIAIQJByLIFQQA2AgAgAkEBRg0DQciyBUEANgIAQa8BIAFBjbsBQQBBARAcQciyBSgCACECQciyBUEANgIAIAJBAUYNA0HIsgVBADYCAEGvASABQZK7AUEAQQEQHEHIsgUoAgAhAkHIsgVBADYCACACQQFGDQNByLIFQQA2AgBBrwEgAUGXuwFBAEEBEBxByLIFKAIAIQJByLIFQQA2AgAgAkEBRg0DQciyBUEANgIAQa8BIAFBnLsBQQBBARAcQciyBSgCACECQciyBUEANgIAIAJBAUYNA0HIsgVBADYCAEGvASABQaG7AUEAQQEQHEHIsgUoAgAhAkHIsgVBADYCACACQQFGDQNByLIFQQA2AgBBrwEgAUGmuwFBAEEBEBxByLIFKAIAIQJByLIFQQA2AgAgAkEBRg0DQciyBUEANgIAQa8BIAFBq7sBQQBBARAcQciyBSgCACECQciyBUEANgIAIAJBAUYNA0HIsgVBADYCAEGvASABQbC7AUEAQQEQHEHIsgUoAgAhAkHIsgVBADYCACACQQFGDQNByLIFQQA2AgBBrwEgAUG1uwFBAEEBEBxByLIFKAIAIQJByLIFQQA2AgAgAkEBRg0DQciyBUEANgIAQa8BIAFBursBQQBBARAcQciyBSgCACECQciyBUEANgIAIAJBAUYNA0HIsgVBADYCAEGvASABQb+7AUEAQQEQHEHIsgUoAgAhAkHIsgVBADYCACACQQFGDQNByLIFQQA2AgBBrwEgAUHEuwFBAEEBEBxByLIFKAIAIQJByLIFQQA2AgAgAkEBRg0DQciyBUEANgIAQa8BIAFBybsBQQBBARAcQciyBSgCACECQciyBUEANgIAIAJBAUYNA0HIsgVBADYCAEGvASABQc67AUEAQQEQHEHIsgUoAgAhAkHIsgVBADYCACACQQFGDQNByLIFQQA2AgBBrwEgAUHTuwFBAEEBEBxByLIFKAIAIQJByLIFQQA2AgAgAkEBRg0DQciyBUEANgIAQa8BIAFB2LsBQQBBARAcQciyBSgCACECQciyBUEANgIAIAJBAUYNA0HIsgVBADYCAEGvASABQd27AUEAQQEQHEHIsgUoAgAhAkHIsgVBADYCACACQQFGDQNByLIFQQA2AgBBrwEgAUHiuwFBAEEBEBxByLIFKAIAIQJByLIFQQA2AgAgAkEBRg0DQciyBUEANgIAQa8BIAFB57sBQQBBARAcQciyBSgCACECQciyBUEANgIAIAJBAUYNA0HIsgVBADYCAEGvASABQey7AUEAQQEQHEHIsgUoAgAhAkHIsgVBADYCACACQQFGDQNByLIFQQA2AgBBrwEgAUHxuwFBAEEBEBxByLIFKAIAIQJByLIFQQA2AgAgAkEBRg0DQciyBUEANgIAQa8BIAFB9rsBQQBBARAcQciyBSgCACECQciyBUEANgIAIAJBAUYNA0HIsgVBADYCAEGvASABQfu7AUEAQQEQHEHIsgUoAgAhAkHIsgVBADYCACACQQFGDQNByLIFQQA2AgBBrwEgAUGAvAFBAEEBEBxByLIFKAIAIQJByLIFQQA2AgAgAkEBRg0DQciyBUEANgIAQa8BIAFBhbwBQQBBARAcQciyBSgCACECQciyBUEANgIAIAJBAUYNA0HIsgVBADYCAEGvASABQYq8AUEAQQEQHEHIsgUoAgAhAkHIsgVBADYCACACQQFGDQNByLIFQQA2AgBBrwEgAUGPvAFBAEEBEBxByLIFKAIAIQJByLIFQQA2AgAgAkEBRg0DQciyBUEANgIAQa8BIAFBlLwBQQBBARAcQciyBSgCACECQciyBUEANgIAIAJBAUcNAQwDC0HIsgVBADYCACACEK0FIQNByLIFKAIAIQRByLIFQQA2AgAgBEEBRg0CQciyBUEANgIAQZm8ARCtBSEEQciyBSgCACEFQciyBUEANgIAIAVBAUYNAiADIARGBEBByLIFQQA2AgBB0QEgARAPQciyBSgCACECQciyBUEANgIAIAJBAUYNA0HIsgVBADYCAEEtQSgQDSECQciyBSgCACEDQciyBUEANgIAIANBAUYNA0HIsgVBADYCACACIAFBnrwBQQtBC0EBQQAQzwQaQciyBSgCACEDQciyBUEANgIAIANBAUcEQEHIsgVBADYCAEHbACABIAIQBUHIsgUoAgAhAkHIsgVBADYCACACQQFHDQIMBAsQBiEAEAcaIAIQ9gwMBAtByLIFQQA2AgAgAhCtBSEDQciyBSgCACEEQciyBUEANgIAIARBAUYNAkHIsgVBADYCAEGovAEQrQUhBEHIsgUoAgAhBUHIsgVBADYCACAFQQFGDQIgAyAERgRAQciyBUEANgIAQdEBIAEQD0HIsgUoAgAhAkHIsgVBADYCACACQQFGDQNByLIFQQA2AgBBLUEoEA0hAkHIsgUoAgAhA0HIsgVBADYCACADQQFGDQNByLIFQQA2AgAgAiABQQBBEEERQQFBARDPBBpByLIFKAIAIQNByLIFQQA2AgAgA0EBRwRAQciyBUEANgIAQdsAIAEgAhAFQciyBSgCACECQciyBUEANgIAIAJB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vQFBAUEBEBxByLIFKAIAIQJByLIFQQA2AgAgAkEBRw0BDAMLQciyBUEANgIAIAIQrQUhA0HIsgUoAgAhBEHIsgVBADYCACAEQQFGDQJByLIFQQA2AgBBvr0BEK0FIQRByLIFKAIAIQVByLIFQQA2AgAgBUEBRg0CIAMgBEYEQEHIsgVBADYCAEEtQRwQDSECQciyBSgCACEDQciyBUEANgIAIANBAUYNA0HIsgVBADYCACACIAFBw70BEKAEIQNByLIFKAIAIQRByLIFQQA2AgACQAJAIARBAUcEQCACQQA2AhggAkIANwIQIAJB4M4CNgIAQciyBUEANgIAQfDOAigCACACQQEQBUHIsgUoAgAhBEHIsgVBADYCAAJAIARBAUcEQEHIsgVBADYCAEH7ACACQRBqQQAQFSEEQciyBSgCACEFQciyBUEANgIAIAVBAUcNAQsQBiEAEAcaIAIoAhghA0HIsgVBADYCACADEOgBQciyBSgCACEDQciyBUEANgIAIANBAUcNAkEAEAshARAHGiABEIQBAAsgBEEANgIAQciyBUEANgIAQdsAIAEgAxAFQciyBSgCACECQciyBUEANgIAIAJBAUYNBkHIsgVBADYCAEEtQSQQDSECQciyBSgCACEDQciyBUEANgIAIANBAUYNBkHIsgVBADYCAEH9ACACIAFB0b0BQQFBAEEAEBYaQciyBSgCACEDQciyBUEANgIAIANBAUYNAkHIsgVBADYCAEHbACABIAIQBUHIsgUoAgAhAkHIsgVBADYCACACQQFHDQQMBgsQBiEAEAcaCyACEPYMDAULEAYhABAHGiACEPYMDAQLQciyBUEANgIAIAIQrQUhA0HIsgUoAgAhBEHIsgVBADYCACAEQQFGDQJByLIFQQA2AgBB2L0BEK0FIQRByLIFKAIAIQVByLIFQQA2AgAgBUEBRg0CIAMgBEYEQEHIsgVBADYCAEGvASABQd64AUEBQQEQHEHIsgUoAgAhAkHIsgVBADYCACACQQFHDQEMAwtByLIFQQA2AgAgAhCtBSEDQciyBSgCACEEQciyBUEANgIAIARBAUYNAkHIsgVBADYCAEHdvQEQrQUhBEHIsgUoAgAhBUHIsgVBADYCACAFQQFGDQIgAyAERgRAQciyBUEANgIAQS1BHBANIQJByLIFKAIAIQNByLIFQQA2AgAgA0EBRg0DQciyBUEANgIAIAIgAUGwuAEQoAQhA0HIsgUoAgAhBEHIsgVBADYCAAJAIARBAUcEQCACQQA2AhggAkIANwIQIAJB4M4CNgIAQciyBUEANgIAQfDOAigCACACQQEQBUHIsgUoAgAhBEHIsgVBADYCAAJAIARBAUcEQEHIsgVBADYCAEH7ACACQRBqQQAQFSEEQciyBSgCACEFQciyBUEANgIAIAVBAUcNAQsQBiEAEAcaIAIoAhghA0HIsgVBADYCACADEOgBQciyBSgCACEDQciyBUEANgIAIANBAUcNAkEAEAshARAHGiABEIQBAAsgBEEANgIAQciyBUEANgIAQdsAIAEgAxAFQciyBSgCACECQciyBUEANgIAIAJBAUcNAwwFCxAGIQAQBxoLIAIQ9gwMBAtByLIFQQA2AgAgAhCtBSEDQciyBSgCACEEQciyBUEANgIAIARBAUYNAkHIsgVBADYCAEHivQEQrQUhBEHIsgUoAgAhBUHIsgVBADYCACAFQQFGDQIgAyAERgRAQciyBUEANgIAQa8BIAFBtL0BQQBBARAcQciyBSgCACECQciyBUEANgIAIAJBAUYNA0HIsgVBADYCAEGvASABQca5AUEAQQEQHEHIsgUoAgAhAkHIsgVBADYCACACQQFGDQNByLIFQQA2AgBBrwEgAUHTuQFBAEEBEBxByLIFKAIAIQJByLIFQQA2AgAgAkEBRw0BDAMLQciyBUEANgIAIAIQrQUhA0HIsgUoAgAhBEHIsgVBADYCACAEQQFGDQJByLIFQQA2AgBB570BEK0FIQRByLIFKAIAIQVByLIFQQA2AgAgBUEBRg0CIAMgBEYEQEHIsgVBADYCAEHRASABEA9ByLIFKAIAIQJByLIFQQA2AgAgAkEBRg0DQciyBUEANgIAQS1BHBANIQJByLIFKAIAIQNByLIFQQA2AgAgA0EBRg0DQciyBUEANgIAIAIgAUHsvQEQoAQhA0HIsgUoAgAhBEHIsgVBADYCAAJAAkACQCAEQQFHBEAgAkEANgIYIAJCADcCECACQeDOAjYCAEHIsgVBADYCAEHwzgIoAgAiBCACQQEQBUHIsgUoAgAhBUHIsgVBADYCAAJAIAVBAUcEQEHIsgVBADYCAEH7ACACQRBqQQAQFSEFQciyBSgCACEGQciyBUEANgIAIAZBAUcNAQsQBiEAEAcaIAIoAhghA0HIsgVBADYCACADEOgBQciyBSgCACEDQciyBUEANgIAIANBAUcNAkEAEAshARAHGiABEIQBAAsgBUEANgIAQciyBUEANgIAQdsAIAEgAxAFQciyBSgCACECQciyBUEANgIAIAJBAUYNB0HIsgVBADYCAEEtQRwQDSECQciyBSgCACEDQciyBUEANgIAIANBAUYNB0HIsgVBADYCACACIAFB+L0BEKAEIQNByLIFKAIAIQVByLIFQQA2AgAgBUEBRg0CIAJBADYCGCACQgA3AhAgAkHgzgI2AgBByLIFQQA2AgAgBCACQQEQBUHIsgUoAgAhBEHIsgVBADYCAAJAIARBAUcEQEHIsgVBADYCAEH7ACACQRBqQQAQFSEEQciyBSgCACEFQciyBUEANgIAIAVBAUcNAQsQBiEAEAcaIAIoAhghA0HIsgVBADYCACADEOgBQciyBSgCACEDQciyBUEANgIAIANBAUcNBEEAEAshARAHGiABEIQBAAsgBEEANgIAQciyBUEANgIAQdsAIAEgAxAFQciyBSgCACECQciyBUEANgIAIAJBAUcNBQwHCxAGIQAQBxoLIAIQ9gwMBgsQBiEAEAcaCyACEPYMDAQLQciyBUEANgIAIAIQrQUhA0HIsgUoAgAhBEHIsgVBADYCACAEQQFGDQJByLIFQQA2AgBBh74BEK0FIQRByLIFKAIAIQVByLIFQQA2AgAgBUEBRg0CIAMgBEYEQEHIsgVBADYCAEGvASABQd64AUEBQQEQHEHIsgUoAgAhAkHIsgVBADYCACACQQFGDQNByLIFQQA2AgBBrwEgAUGZvAFBAEEBEBxByLIFKAIAIQJByLIFQQA2AgAgAkEBRg0DQciyBUEANgIAQa8BIAFB570BQQBBARAcQciyBSgCACECQciyBUEANgIAIAJBAUYNA0HIsgVBADYCAEGvASABQeK9AUEAQQEQHEHIsgUoAgAhAkHIsgVBADYCACACQQFHDQEMAwtByLIFQQA2AgAgAhCtBSEDQciyBSgCACEEQciyBUEANgIAIARBAUYNAkHIsgVBADYCAEHwvAEQrQUhBEHIsgUoAgAhBUHIsgVBADYCACAFQQFGDQIgAyAERgRAQciyBUEANgIAQdEBIAEQD0HIsgUoAgAhAkHIsgVBADYC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yLIFKAIAIQNByLIFQQA2AgACQCADQQFHBEBByLIFQQA2AgBB+wAgAkEQakEAEBUhBkHIsgUoAgAhA0HIsgVBADYCACADQQFHDQELEAYhABAHGiACKAIYIQNByLIFQQA2AgAgAxDoAUHIsgUoAgAhA0HIsgVBADYCACADQQFHDQNBABALIQEQBxogARCEAQALIAZBADYCAEHIsgVBADYCAEHbACABIAUQBUHIsgUoAgAhA0HIsgVBADYCACADQQFGDQBByLIFQQA2AgBBLUEgEA0hA0HIsgUoAgAhBUHIsgVBADYCACAFQQFGDQRByLIFQQA2AgAgAyABQe+3ASACEMUEIQVByLIFKAIAIQJByLIFQQA2AgAgAkEBRg0FQciyBUEANgIAQdsAIAEgAxAFQciyBSgCACECQciyBUEANgIAIAJBAUYNBEHIsgVBADYCAEEtQRwQDSECQciyBSgCACEGQciyBUEANgIAIAZBAUYNBCADKAIEIQZByLIFQQA2AgAgAiAGQaK+ARCgBCEHQciyBSgCACEGQciyBUEANgIAIAZBAUYNBiACQQA2AhggAkIANwIQIAJB4M4CNgIAQciyBUEANgIAIAQgAkEBEAVByLIFKAIAIQZByLIFQQA2AgACQCAGQQFHBEBByLIFQQA2AgBB+wAgAkEQakEAEBUhCEHIsgUoAgAhBkHIsgVBADYCACAGQQFHDQELEAYhABAHGiACKAIYIQNByLIFQQA2AgAgAxDoAUHIsgUoAgAhA0HIsgVBADYCACADQQFHDQhBABALIQEQBxogARCEAQALIAhBADYCAEHIsgVBADYCAEHfACAFIAcQBUHIsgUoAgAhAkHIsgVBADYCACACQQFGDQRByLIFQQA2AgBBLUEcEA0hAkHIsgUoAgAhBkHIsgVBADYCACAGQQFGDQQgAygCBCEDQciyBUEANgIAIAIgA0G3vgEQoAQhBkHIsgUoAgAhA0HIsgVBADYCACADQQFGDQggAkEANgIYIAJCADcCECACQeDOAjYCAEHIsgVBADYCACAEIAJBARAFQciyBSgCACEDQciyBUEANgIAIANBAUcEQEHIsgVBADYCAEH7ACACQRBqQQAQFSEEQciyBSgCACEDQciyBUEANgIAIANBAUcNBAsQBiEAEAcaIAIoAhghA0HIsgVBADYCACADEOgBQciy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sgUoAgAhA0HIsgVBADYCAAJAIANBAUcEQCACQQA2AhggAkIANwIQIAJB4M4CNgIAQciyBUEANgIAQfDOAigCACACQQEQBUHIsgUoAgAhA0HIsgVBADYCAAJAIANBAUcEQEHIsgVBADYCAEH7ACACQRBqQQAQFSEFQciyBSgCACEDQciyBUEANgIAIANBAUcNAQsQBiEAEAcaIAIoAhghA0HIsgVBADYCACADEOgBQciyBSgCACEDQciyBUEANgIAIANBAUcNAkEAEAshARAHGiABEIQBAAsgBUEANgIAQciyBUEANgIAQdsAIAEgBBAFQciyBSgCACECQciyBUEANgIAIAJBAUcNAwwFCxAGIQAQBxoLIAIQ9gwMBAtByLIFQQA2AgAgAhCtBSEEQciyBSgCACEDQciyBUEANgIAIANBAUYNAkHIsgVBADYCAEH6vgEQrQUhBUHIsgUoAgAhA0HIsgVBADYCACADQQFGDQIgBCAFRgRAQciyBUEANgIAQS1BHBANIQJByLIFKAIAIQNByLIFQQA2AgAgA0EBRg0DQciyBUEANgIAIAIgAUG7uAEQoAQhBEHIsgUoAgAhA0HIsgVBADYCAAJAIANBAUcEQCACQQA2AhggAkIANwIQIAJB4M4CNgIAQciyBUEANgIAQfDOAigCACACQQEQBUHIsgUoAgAhA0HIsgVBADYCAAJAIANBAUcEQEHIsgVBADYCAEH7ACACQRBqQQAQFSEFQciyBSgCACEDQciyBUEANgIAIANBAUcNAQsQBiEAEAcaIAIoAhghA0HIsgVBADYCACADEOgBQciyBSgCACEDQciyBUEANgIAIANBAUcNAkEAEAshARAHGiABEIQBAAsgBUEANgIAQciyBUEANgIAQdsAIAEgBBAFQciyBSgCACECQciyBUEANgIAIAJBAUcNAwwFCxAGIQAQBxoLIAIQ9gwMBAtByLIFQQA2AgAgAhCtBSEEQciyBSgCACEDQciyBUEANgIAIANBAUYNAkHIsgVBADYCAEH/vgEQrQUhBUHIsgUoAgAhA0HIsgVBADYCACADQQFGDQIgBCAFRgRAQciyBUEANgIAQS1BHBANIQJByLIFKAIAIQNByLIFQQA2AgAgA0EBRg0DQciyBUEANgIAIAIgAUG7uAEQoAQhBEHIsgUoAgAhA0HIsgVBADYCAAJAIANBAUcEQCACQQA2AhggAkIANwIQIAJB4M4CNgIAQciyBUEANgIAQfDOAigCACACQQEQBUHIsgUoAgAhA0HIsgVBADYCAAJAIANBAUcEQEHIsgVBADYCAEH7ACACQRBqQQAQFSEFQciyBSgCACEDQciyBUEANgIAIANBAUcNAQsQBiEAEAcaIAIoAhghA0HIsgVBADYCACADEOgBQciyBSgCACEDQciyBUEANgIAIANBAUcNAkEAEAshARAHGiABEIQBAAsgBUEANgIAQciyBUEANgIAQdsAIAEgBBAFQciyBSgCACECQciyBUEANgIAIAJBAUcNAwwFCxAGIQAQBxoLIAIQ9gwMBAtByLIFQQA2AgAgAhCtBSEEQciyBSgCACEDQciyBUEANgIAIANBAUYNAkHIsgVBADYCAEGEvQEQrQUhBUHIsgUoAgAhA0HIsgVBADYCACADQQFGDQIgBCAFRgRAQciyBUEANgIAQa8BIAFBhL8BQQFBARAcQciyBSgCACECQciyBUEANgIAIAJBAUYNA0HIsgVBADYCAEGvASABQYm/AUEAQQAQHEHIsgUoAgAhAkHIsgVBADYCACACQQFHDQEMAwtByLIFQQA2AgAgAhCtBSEEQciyBSgCACEDQciyBUEANgIAIANBAUYNAkHIsgVBADYCAEGTvQEQrQUhBUHIsgUoAgAhA0HIsgVBADYCACADQQFGDQIgBCAFRgRAQciyBUEANgIAQa8BIAFBjr8BQQFBARAcQciyBSgCACECQciyBUEANgIAIAJBAUYNA0HIsgVBADYCAEGvASABQZO/AUEAQQEQHEHIsgUoAgAhAkHIsgVBADYCACACQQFGDQNByLIFQQA2AgBBrwEgAUHPuAFBAEEBEBxByLIFKAIAIQJByLIFQQA2AgAgAkEBRg0DQciyBUEANgIAQa8BIAFBvrwBQQFBARAcQciyBSgCACECQciyBUEANgIAIAJBAUYNA0HIsgVBADYCAEGvASABQZi9AUEAQQAQHEHIsgUoAgAhAkHIsgVBADYCACACQQFHDQEMAwtByLIFQQA2AgAgAhCtBSEEQciyBSgCACEDQciyBUEANgIAIANBAUYNAkHIsgVBADYCAEGTvwEQrQUhBUHIsgUoAgAhA0HIsgVBADYCACADQQFGDQIgBCAFRgRAQciyBUEANgIAQa8BIAFBmL8BQQBBARAcQciyBSgCACECQciyBUEANgIAIAJBAUYNA0HIsgVBADYCAEGvASABQZ2/AUEAQQEQHEHIsgUoAgAhAkHIsgVBADYCACACQQFGDQNByLIFQQA2AgBBrwEgAUGivwFBAEEBEBxByLIFKAIAIQJByLIFQQA2AgAgAkEBRg0DQciyBUEANgIAQa8BIAFBp78BQQBBARAcQciyBSgCACECQciyBUEANgIAIAJBAUYNA0HIsgVBADYCAEGvASABQay/AUEAQQEQHEHIsgUoAgAhAkHIsgVBADYCACACQQFGDQNByLIFQQA2AgBBrwEgAUGxvwFBAEEBEBxByLIFKAIAIQJByLIFQQA2AgAgAkEBRw0BDAMLQciyBUEANgIAIAIQrQUhBEHIsgUoAgAhA0HIsgVBADYCACADQQFGDQJByLIFQQA2AgBBor0BEK0FIQVByLIFKAIAIQNByLIFQQA2AgAgA0EBRg0CIAQgBUYEQEHIsgVBADYCAEHRASABEA9ByLIFKAIAIQJByLIFQQA2AgAgAkEBRg0DQciyBUEANgIAQS1BHBANIQJByLIFKAIAIQNByLIFQQA2AgAgA0EBRg0DQciyBUEANgIAIAIgAUG2vwEQoAQhBUHIsgUoAgAhA0HIsgVBADYCAAJAAkACQAJAAkACQAJAAkACQCADQQFHBEAgAkEANgIYIAJCADcCECACQeDOAjYCAEHIsgVBADYCAEHwzgIoAgAiAyACQQEQBUHIsgUoAgAhBEHIsgVBADYCAAJAIARBAUcEQEHIsgVBADYCAEH7ACACQRBqQQAQFSEGQciyBSgCACEEQciyBUEANgIAIARBAUcNAQsQBiEAEAcaIAIoAhghA0HIsgVBADYCACADEOgBQciyBSgCACEDQciyBUEANgIAIANBAUcNAkEAEAshARAHGiABEIQBAAsgBkEANgIAQciyBUEANgIAQdsAIAEgBRAFQciyBSgCACECQciyBUEANgIAIAJBAUYNDUHIsgVBADYCAEEtQRwQDSECQciyBSgCACEEQciyBUEANgIAIARBAUYNDUHIsgVBADYCACACIAFBvr8BEKAEIQVByLIFKAIAIQRByLIFQQA2AgAgBEEBRg0CIAJBADYCGCACQgA3AhAgAkHgzgI2AgBByLIFQQA2AgAgAyACQQEQBUHIsgUoAgAhBEHIsgVBADYCAAJAIARBAUcEQEHIsgVBADYCAEH7ACACQRBqQQAQFSEGQciyBSgCACEEQciyBUEANgIAIARBAUcNAQsQBiEAEAcaIAIoAhghA0HIsgVBADYCACADEOgBQciyBSgCACEDQciyBUEANgIAIANBAUcNBEEAEAshARAHGiABEIQBAAsgBkEANgIAQciyBUEANgIAQdsAIAEgBRAFQciyBSgCACECQciyBUEANgIAIAJBAUYNDUHIsgVBADYCAEEtQRwQDSECQciyBSgCACEEQciyBUEANgIAIARBAUYNDUHIsgVBADYCACACIAFB278BEKAEIQVByLIFKAIAIQRByLIFQQA2AgAgBEEBRg0EIAJBADYCGCACQgA3AhAgAkHgzgI2AgBByLIFQQA2AgAgAyACQQEQBUHIsgUoAgAhBEHIsgVBADYCAAJAIARBAUcEQEHIsgVBADYCAEH7ACACQRBqQQAQFSEGQciyBSgCACEEQciyBUEANgIAIARBAUcNAQsQBiEAEAcaIAIoAhghA0HIsgVBADYCACADEOgBQciyBSgCACEDQciyBUEANgIAIANBAUcNBkEAEAshARAHGiABEIQBAAsgBkEANgIAQciyBUEANgIAQdsAIAEgBRAFQciyBSgCACECQciyBUEANgIAIAJBAUYNDUHIsgVBADYCAEEtQRwQDSECQciyBSgCACEEQciyBUEANgIAIARBAUYNDUHIsgVBADYCACACIAFB8b8BEKAEIQVByLIFKAIAIQRByLIFQQA2AgAgBEEBRg0GIAJBADYCGCACQgA3AhAgAkHgzgI2AgBByLIFQQA2AgAgAyACQQEQBUHIsgUoAgAhBEHIsgVBADYCAAJAIARBAUcEQEHIsgVBADYCAEH7ACACQRBqQQAQFSEGQciyBSgCACEEQciyBUEANgIAIARBAUcNAQsQBiEAEAcaIAIoAhghA0HIsgVBADYCACADEOgBQciyBSgCACEDQciyBUEANgIAIANBAUcNCEEAEAshARAHGiABEIQBAAsgBkEANgIAQciyBUEANgIAQdsAIAEgBRAFQciyBSgCACECQciyBUEANgIAIAJBAUYNDUHIsgVBADYCAEEtQRwQDSECQciyBSgCACEEQciyBUEANgIAIARBAUYNDUHIsgVBADYCACACIAFBg8ABEKAE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AgAhAUHIsgVBADYCAEEsIAMgARAVGkHIsgUoAgAhAUHIsgVBADYCACABQQFGDQBBBBAOIQBByLIFQQA2AgBBLUEwEA0hA0HIsgUoAgAhAUHIsgVBADYCACABQQFGDQFByLIFQQA2AgBBLiACQQhqIAQQBUHIsgUoAgAhAUHIsgVBADYCACABQQFGDQIgAigCCCACQQhqIAIsABNBAEgbIgQQiA0iAUFwTwRAQciyBUEANgIAQS8gAkEYahAPQciyBSgCACEBQciyBUEANgIAIAFBAUYNBAwMCwJAAkAgAUELTwRAQciyBUEANgIAQS0gAUEQakFwcSIIEA0hBUHIsgUoAgAhCUHIsgVBADYCACAJQQFGDQYgAiAFNgIYIAIgATYCHCACIAhBgICAgHhyNgIgDAELIAIgAToAIyACQRhqIQUgAUUNAQsgBSAEIAEQgA0aCyABIAVqQQA6AABByLIFQQA2AgBBMCADIAJBGGpBxABBiNEBQTtB/dABEBYaQciyBSgCACEBQciyBUEANgIAQQEhBCABQQFHBEAgACADNgIAQciyBUEANgIAQTEgAEGs3QBBABASQciyBSgCACEBQciyBUEANgIAQQAhBCABQQFHDQwLEAYhARAHGiACLAAjQX9MBEAgAigCGBD2DAsgAiwAE0EASA0EDAULEAYhARAHGgwHCxAGIQEQBxoMBQsQBiEBEAcaDAMLEAYhARAHGkEBIQQgAiwAE0EATg0CCyACKAIIEPYMCyAERQ0CCyADEPYMCyAAEBMLIAJBsD42AmAgAkGcPjYCKCACQcw/NgIsIAIsAFdBf0wEQCACKAJMEPYMCyAHEOAGGiAGENwGIAEQCAALIAAoAgghACACQbABaiQAIAAgAUECdGoPCxAGIQEQBxoMAQsACyAGENwGIAEQCAALCgAgABCEAxD2DAuEAwECfyMAQRBrIgMkACAAIAEgAhCIAyIARQRAQQQQDiEAQciyBUEANgIAQS1BLBANIQJByLIFKAIAIQFByLIFQQA2AgACQAJAAkACQAJAIAFBAUcEQEHIsgVBADYCAEEtQSAQDSEBQciyBSgCACEEQciyBUEANgIAIARBAUYNASADIAE2AgAgA0KWgICAgISAgIB/NwIEIAFBADoAFiABQZLBASkAADcADiABQYzBASkAADcACCABQYTBASkAADcA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AiADNgJIIAJBQGsgDDcDACACIA43AzggAiAINgI0IAIgByAEIAVBAEgbNgIwQdvDASACQTBqEL0BIAEpAxAgDX0hCwsgACABIAJB2wJqEIcDIgMgCzcDICADIAZBAUY6ABggAyALIA18NwMQIAMgDDcDCCACQdsCahCtBUHdwQEQrQVGBEAgAyACKQPgAjcBLiADIAIpA+gCNwE2CwJAAkACQCADLQAtRQ0AAkACQCADLQAoEPoFRQ0AIAMtACkQ+gVFDQAgAy0AKhD6BUUNAEEBIQYgAy0AKyIEEPoFIQcgBEEgRg0BIAcNAQtBACEGCyADQShqIQQgABDZAyIAKAIAIAAgACwAC0EASBshAAJAIAZFBEAgAiAENgIoIAIgADYCJCACQbrCATYCIEGVxAEgAkEgahC8AQwBCyACIAQ2AhQgAiAANgIQQbfEASACQRBqEL0BCyALUA0AQTAQ/gshAEHIsgVBADYCAEHgACAAIANB28QBIAunQQAQEBpByLIFKAIAIQZByLIFQQA2AgAgBkEBRg0BIANByABqIAAgAygCSBCLAwsgAyABNgJAIAMoAgAoAgwhAEHIsgVBADYCACAAIAMQD0HIsgUoAgAhAEHIsgVBADYCACAAQQFGBEBBoNoAEAshAhAHQaDaABAZRw0CIAIQDCECIAMgAygCACgCBBEBAEEEEA4iAyACNgIAQciyBUEANgIAQTEgA0Gg2gBBABASQciyBSgCACECQciyBUEANgIAIAJBAUcNBBAGIQIQBxoQFyACEAgACyACQfACaiQAIAMPCxAGIQIQBxogABD2DAsgAhAIAAsQBiEDEAcaDAELAAsgBhDcBiADEAgAC/8DAQR/IwBBEGsiBCQAIAAoAgAiAyACSQRAQQQQDiEAQciyBUEANgIAQS1BMBANIQJByLIFKAIAIQNByLIFQQA2AgACQAJAAkACQAJAIANBAUcEQEHIsgVBADYCAEEtQSAQDSEDQciyBSgCACEBQciyBUEANgIAIAFBAUYNASAEIAM2AgAgBEKTgICAgISAgIB/NwIEIANBADoAEyADQbnRASgAADYADyADQbLRASkAADcACCADQarRASkAADcAAEHIsgVBADYCAEEwIAIgBEHEAEHX0AFB6wBBvtEBEBYaQciyBSgCACEDQciyBUEANgIAQQEhASADQQFGDQIgACACNgIAQciyBUEANgIAQTEgAEGs3QBBABASQciyBSgCACEDQciyBUEANgIAQQAhASADQQFGDQIACxAGIQMQBxoMAwsQBiEDEAcaDAELEAYhAxAHGiAELAALQX9MBEAgBCgCABD2DAsgAUUNAgsgAhD2DAsgABATCyADEAgACwJAIAAoAgQgA0cEQCAAKAIIIQUMAQsgACADQQEgA0EBSxsiA0EBdDYCBCAAIAAoAgggA0EDdBDqASIFNgIIIAAoAgAhAwsgBSACQQJ0IgZqIgVBBGogBSADIAJrQQJ0EIINIAAoAgggBmogATYCACAAIAAoAgBBAWo2AgAgBEEQaiQAC5QDAQN/IwBBEGsiAiQAIAFFBEBBBBAOIQBByLIFQQA2AgBBLUEsEA0hBEHIsgUoAgAhAUHIsgVBADYCAAJAAkACQAJAAkAgAUEBRwRAQciyBUEANgIAQS1BIBANIQFByLIFKAIAIQNByLIFQQA2AgAgA0EBRg0BIAIgATYCACACQpuAgICAhICAgH83AgQgAUEAOgAbIAFB2soBKAAANgAXIAFB08oBKQAANwAQIAFBy8oBKQAANwAIIAFBw8oBKQAANwAAQciyBUEANgIAQTIgBCACQZvBAUHJBEHfygEQEBpByLIFKAIAIQFByLIFQQA2AgBBASEDIAFBAUcEQCAAIAQ2AgBByLIFQQA2AgBBMSAAQaDaAEEAEBJByLIFKAIAIQFByLIFQQA2AgBBACEDIAFBAUcNBgsQBiEBEAcaIAIsAAtBf0wEQCACKAIAEPYMCyADDQIMBAsQBiEBEAcaDAILEAYhARAHGgsgBBD2DAsgABATCyABEAgLAAsgAEHIAGogASAAKAJIEIsDIAJBEGokAAuTAQEFfyMAQSBrIgEkAAJAIABBKGoiAxCtBUUNACAAKQMgQsGEPVQNACAAKAIEENkDIgIoAgAhBCACLAALIQUgASAAKQMgNwMQIAEgAzYCCCABQYfFATYCACABIAQgAiAFQQBIGzYCBEHgxAEgARC9AQsgAEEAQX8QjgMgACgCVARAIAAQjwMLIAAQkAMgAUEgaiQAC8oKAgd/An4jAEHAAWsiAyQAAkACQAJAIAIgACgCSCABayIEIAQgAksbIAFqIgYgAUsEQCAAQcgAaiEEA0AgBCABEKwBKAIAIgIgACgCBEEAIAIoAgAoAhgRBQAgACgCBEEAELADIQogACkDECELIAQgARCsASgCACECIAogC1YEQCACKAIIIQIgACgCBEEAELADIQogAyAAKQMQNwMQIAMgCjcDCCADIAI2AgBBgcYBIAMQvQFByLIFQQA2AgAgA0HoPjYCcCADQdQ+NgI4QSkgA0HwAGoiBiADQThqQQRyIgUQBUHIsgUoAgAhAkHIsgVBADYCACACQQFGDQMgA0KAgICAcDcDuAEgA0GwPjYCcCADQZw+NgI4QciyBUEANgIAQSogBRANIQhByLIFKAIAIQJByLIFQQA2AgAgAkEBRgRAEAYhARAHGgwGCyADQgA3AlwgA0IANwJkIANBEDYCbCADQcw/NgI8QciyBUEANgIAQSsgA0E4akHPxgFBBhAUIQdByLIFKAIAIQJByLIFQQA2AgACQAJAAkACQAJAAkACQAJAAkAgAkEBRg0AIABBKGoiABCIDSECQciyBUEANgIAQSsgByAAIAIQFCECQciyBSgCACEAQciyBUEANgIAIABBAUYNAEHIsgVBADYCAEErIAJB1sYBQSUQFCECQciyBSgCACEAQciyBUEANgIAIABBAUYNAEHIsgVBADYCAEHmASAEIAEQFSEAQciyBSgCACEBQciyBUEANgIAIAFBAUYNACAAKAIAKAIIIgEQiA0hAEHIsgVBADYCAEErIAIgASAAEBQaQciyBSgCACEBQciyBUEANgIAIAFBAUYNAEEEEA4hAEHIsgVBADYCAEEtQSwQDSECQciyBSgCACEBQciyBUEANgIAIAFBAUYNAUHIsgVBADYCAEEuIANBGGogBRAFQciyBSgCACEBQciyBUEANgIAIAFBAUYNAiADKAIYIANBGGogAywAI0EASBsiBBCIDSIBQXBPBEBByLIFQQA2AgBBLyADQShqEA9ByLIFKAIAIQFByLIFQQA2AgAgAUEBRg0EDA4LAkACQCABQQtPBEBByLIFQQA2AgBBLSABQRBqQXBxIgkQDSEFQciyBSgCACEHQciyBUEANgIAIAdBAUYNBiADIAU2AiggAyABNgIsIAMgCUGAgICAeHI2AjAMAQsgAyABOgAzIANBKGohBSABRQ0BCyAFIAQgARCADRoLIAEgBWpBADoAAEHIsgVBADYCAEEyIAIgA0EoakGbwQFBiANB/MYBEBAaQciyBSgCACEB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sgVBADYCAEEtQSAQDSEBQciyBSgCACEDQciyBUEANgIAIANBAUYNASACIAE2AgAgAkKbgICAgISAgIB/NwIEIAFBADoAGyABQfvTASgAADYAFyABQfTTASkAADcAECABQezTASkAADcACCABQeTTASkAADcAAEHIsgVBADYCAEEyIAQgAkGA1AFBL0Gq1AEQEBpByLIFKAIAIQFByLIFQQA2AgBBASEDIAFBAUcEQCAAIAQ2AgBByLIFQQA2AgBBMSAAQaDaAEEAEBJByLIFKAIAIQFByLIFQQA2AgBBACEDIAFBAUcNBgsQBiEBEAcaIAIsAAtBf0wEQCACKAIAEPYMCyADDQIMBAsQBiEBEAcaDAILEAYhARAHGgsgBBD2DAsgABATCyABEAgLAAsgAEEcaiABIAAoAhwQiwMgAkEQaiQAC04BA38gACgCHCIFBH8gAEEcaiEGAkADQCAGIAQQrAEoAgAiACABIAIgAyAAKAIAKAIkEQoADQEgBEEBaiIEIAVHDQALQQAPC0EBBSAECwtAAQJ/IAAoAhwEQCAAQRxqIQFBACEAA0AgASAAEKwBKAIAIgIgAigCACgCFBEBACAAQQFqIgAgASgCAEkNAAsLCzkAIAAgARCsAyAAIAFBACAAKAIoEK0DIAAgACgCACgCGBEBACAAIAEgACgCKEF/EK0DIAFBADoAWAvABAEEfyMAQTBrIgIkACABENkDIgMoAgAhBCADLAALIQUgAiABQQAQsAM3AxggAiAEIAMgBUEASBs2AhBBttQBIAJBEGoQvQEgARC2AyEDAkAgAC0ACCIEBEAgAyAERg0BQQQQDiEBQciyBUEANgIAQS1BLBANIQNByLIFKAIAIQBByLIFQQA2AgACQAJAAkACQAJAIABBAUcEQEHIsgVBADYCAEEtQSAQDSEAQciyBSgCACEEQciyBUEANgIAIARBAUYNASACIAA2AiAgAkKegICAgISAgIB/NwIkIABBADoAHiAAQe/UASkAADcAFiAAQenUASkAADcAECAAQeHUASkAADcACCAAQdnUASkAADcAAEHIsgVBADYCAEEyIAMgAkEgakGA1AFB3gBB+NQBEBAaQciyBSgCACEAQciyBUEANgIAQQEhBCAAQQFGDQIgASADNgIAQciyBUEANgIAQTEgAUGg2gBBABASQciyBSgCACEA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IQJByLIFQQA2AgBBLUEsEA0hAUHIsgUoAgAhAEHIsgVBADYCAAJAAkAgAEEBRwRAQciyBUEANgIAQS1BwAAQDSEAQciyBSgCACEEQciyBUEANgIAIARBAUYNASADIAA2AhAgA0K8gICAgIiAgIB/NwIUIABBADoAPCAAQdLZASgAADYAOCAAQcrZASkAADcAMCAAQcLZASkAADcAKCAAQbrZASkAADcAICAAQbLZASkAADcAGCAAQarZASkAADcAECAAQaLZASkAADcACCAAQZrZASkAADcAAEHIsgVBADYCAEEyIAEgA0EQakGH1wFBjgFB19kBEBAaQciyBSgCACEAQciyBUEANgIAQQEhBCAAQQFHBEAgAiABNgIAQciyBUEANgIAQTEgAkGg2gBBABASQciyBSgCACEAQciyBUEANgIAQQAhBCAAQQFHDQYLEAYhABAHGiADLAAbQX9MBEAgAygCEBD2DAsgBA0CDAQLEAYhABAHGiACEBMMAwsQBiEAEAcaCyABEPYMIAIQEwwBCyABRQ0CIAJFDQIgACgCRCIFBEAgACkDSCIGIAKtIgd8IAApA1AiCFYEfiAAIAcgCHxCAYYiBjcDUCAAIAUgBqcQ6gEiBTYCRCAAKQNIBSAGC6cgBWogASACEIANGiAAIAApA0ggB3w3A0gMAwsgACgCACIERQRAQQQQDiECQciyBUEANgIAQS1BLBANIQFByLIFKAIAIQBByLIFQQA2AgACQAJAIABBAUcEQEHIsgVBADYCAEEtQSAQDSEAQciyBSgCACEEQciyBUEANgIAIARBAUYNASADIAA2AhAgA0KWgICAgISAgIB/NwIUIABBADoAFiAAQf7WASkAADcADiAAQfjWASkAADcACCAAQfDWASkAADcAAEHIsgVBADYCAEEyIAEgA0EQakGH1wFBoAFB19kBEBAaQciyBSgCACEAQciyBUEANgIAQQEhBCAAQQFHBEAgAiABNgIAQciyBUEANgIAQTEgAkGg2gBBABASQciyBSgCACEAQciyBUEANgIAQQAhBCAAQQFHDQYLEAYhABAHGiADLAAbQX9MBEAgAygCEBD2DAsgBA0CDAQLEAYhABAHGiACEBMMAwsQBiEAEAcaCyABEPYMIAIQEwwBCyAEIAEgAq0iBiADQQhqQgAgBCgCACgCFBEQAARAQQQQDiECQciyBUEANgIAQS1BMBANIQFByLIFKAIAIQBByLIFQQA2AgACQAJAIABBAUcEQEHIsgVBADYCAEEtQRAQDSEAQciyBSgCACEEQciyBUEANgIAIARBAUYNASADIAA2AhAgA0KMgICAgIKAgIB/NwIUIABBADoADCAAQerZASgAADYACCAAQeLZASkAADcAAEHIsgVBADYCAEGoqgUoAgAhBUHIsgUoAgAhAEHIsgVBADYCAEEBIQQCQCAAQQFGDQBByLIFQQA2AgBBMCABIANBEGogBUGH1wFBowFB19kBEBYaQciyBSgCACEAQciyBUEANgIAIABBAUYNACACIAE2AgBBACEEQciyBUEANgIAQTEgAkGs3QBBABASQciyBSgCACEAQciyBUEANgIAIABBAUcNBgsQBiEAEAcaIAMsABtBf0wEQCADKAIQEPYMCyAEDQIMBAsQBiEAEAcaIAIQEwwDCxAGIQAQBxoLIAEQ9gwgAhATDAELIAMpAwggBlENAkEEEA4hAkHIsgVBADYCAEEtQSwQDSEBQciyBSgCACEAQciyBUEANgIAAkACQAJAIABBAUcEQEHIsgVBADYCAEEtQSAQDSEAQciyBSgCACEEQciyBUEANgIAIARBAUYNASADIAA2AhAgA0KVgICAgISAgIB/NwIUIABBADoAFSAAQfzZASkAADcADSAAQffZASkAADcACCAAQe/ZASkAADcAAEHIsgVBADYCAEEyIAEgA0EQakGH1wFBpQFB19kBEBAaQciyBSgCACEAQciyBUEANgIAQQEhBCAAQQFHBEAgAiABNgIAQciyBUEANgIAQTEgAkGg2gBBABASQciyBSgCACEAQciyBUEANgIAQQAhBCAAQQFHDQYLEAYhABAHGiADLAAbQX9MBEAgAygCEBD2DAsgBA0CDAQLEAYhABAHGgwCCxAGIQAQBxoLIAEQ9gwLIAIQEwsgABAICwALIANBIGokAAsrAQF/IwBBEGsiASQAIAAgAUEPakEBQQAQswMgAS0ADyEAIAFBEGokACAACz0BAX8jAEEQayIBJAAgACABQQ5qQQJBABCzAyABLwAOIQAgAUEQaiQAIABBCHRBgID8B3EgAEEYdHJBEHYLRQEDfyMAQRBrIgEkACAAIAFBDWpBA0EAELMDIAEtAA0hACABLQAOIQIgAS0ADyED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ACAELQAMDQAgBEEMaiEEDAELAkAgASADKAIARwRAIAMhAQwBCyADIAEoAgQiBDYCACABIAQEfyAEIAM2AgggAygCCAUgAgs2AgggAygCCCICIAIoAgAgA0dBAnRqIAE2AgAgASADNgIEIAMgATYCCCABKAIIIQILIAFBAToADCACQQA6AAwgAiACKAIEIgMoAgAiBDYCBCAEBEAgBCACNgIICyADIAIoAgg2AgggAigCCCIEIAQoAgAgAkdBAnRqIAM2AgAgAyACNgIAIAIgAzYCCAwCCyADQQE6AAwgAiAAIAJGOgAMIARBAToAACACIQEgACACRw0ACwsLIAAgAQRAIAAgASgCABDTAyAAIAEoAgQQ0wMgARD2DAsLMwAgAQRAIAAgASgCABDUAyAAIAEoAgQQ1AMgASwAG0F/TARAIAEoAhAQ9gwLIAEQ9gwLCx4AQej9BEHs/QQoAgAQ0wNB3P0EQeD9BCgCABDUAwtjACAAQQA2AtwIIABBADYCACAAQgA3AzggAEIANwMIIABBQGtCADcDACAAQgA3A0ggAEIANwNQIABCADcAVSAAQgA3AxAgAEIANwMYIABCADcDICAAQgA3AyggAEIANwAtIAALlgMBBH8gACgCFCIBBEAgASABKAIAKAIEEQEACyAAQSRqIQMCQAJAAkACQAJAIAAoAiQEQEEAIQEDQEHIsgVBADYCAEGZAyADIAEQFSECQciyBSgCACEEQciyBUEANgIAIARBAUYNAiACKAIAIgIEQCACIAIoAgAoAgQRAQALIAFBAWoiASADKAIASQ0ACwsgACgCRCEBQciyBUEANgIAIAEQ6AFByLIFKAIAIQFByLIFQQA2AgAgAUEBRg0BIAAoAtwIIgEEQCABEPYMIABBADYC3AgLIAAoAgAiAQRAIAEgASgCACgCBBEBAAsgACgCLCEBQciyBUEANgIAIAEQ6AFByLIFKAIAIQFByLIFQQA2AgAgAUEBRg0CIAAoAiAhAUHIsgVBADYCACABEOgBQciyBSgCACEBQciyBUEANgIAIAFBAUYNAyAADwtBABALIQEQBxoMAwtBABALIQEQBxoMAgtBABALIQEQBxogARCEAQALQQAQCyEBEAcaIAEQhAEACyADEIMDIABBGGoQgwMgARCEAQALrwgBCH8jAEGwAWsiAiQAAkACQAJAIAAo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AxATIAIQCAALIAMgAjYCQCADQgAgByAIfSIHQnh8IgggCCAHVhs3AyAgAkHgAGogAyACKAJgEOkBIAMgAygCACgCFBEBAAsgBUEQaiQADwsgAhAIAAsAC6EMAQR/IwBBoAFrIgMkACACBEAgAkEANgIACwJAAkACQAJAAkACQAJAIAAoAhRBsZgCIAEgAhCTA0UEQCADQeg+NgJQIANB1D42AhhByLIFQQA2AgBBKSADQdAAaiIBIANBGGpBBHIiABAFQciyBSgCACECQciyBUEANgIAIAJBAUYNAyADQoCAgIBwNwOYASADQbA+NgJQIANBnD42AhhByLIFQQA2AgBBKiAAEA0hBUHIsgUoAgAhAkHIsgVBADYCACACQQFGBEAQBiECEAcaDAgLIANCADcCPCADQgA3AkQgA0EQNgJMIANBzD82AhxByLIFQQA2AgBBKyADQRhqQf+aAkEREBQhBkHIsgUoAgAhAkHIsgVBADYCAAJAAkACQAJAAkACQCACQQFGDQBBsZgCEIgNIQJByLIFQQA2AgBBKyAGQbGYAiACEBQaQciyBSgCACECQciyBUEANgIAIAJBAUYNAEEEEA4hBEHIsgVBADYCAEEtQSwQDSEGQciyBSgCACECQciyBUEANgIAIAJBAUYNAUHIsgVBADYCAEEuIANBCGogABAFQciyBSgCACECQciyBUEANgIAIAJBAUYNAkHIsgVBADYCAEEyIAYgA0EIakHylQJB4gZBkZsCEBAaQciyBSgCACECQciyBUEANgIAQQEhACACQQFHBEAgBCAGNgIAQciyBUEANgIAQTEgBEGg2gBBABASQciyBSgCACECQciyBUEANgIAQQAhACACQQFHDQkLEAYhAhAHGiADLAATQX9MBEAgAygCCBD2DAsgAA0DDAULEAYhAhAHGgwECxAGIQIQBxoMAgsQBiECEAcaCyAGEPYMCyAEEBMLIANBsD42AlAgA0GcPjYCGCADQcw/NgIcIAMsAEdBf0wEQCADKAI8EPYMCyAFEOAGGiABENwGDAELIAEoAgAiAiACKAIAKAIIEQAAQQdGDQQgA0HoPjYCUCADQdQ+NgIYQciyBUEANgIAQSkgA0HQAGoiACADQRhqQQRyIgUQBUHIsgUoAgAhAkHIsgVBADYCACACQQFGDQMgA0KAgICAcDcDmAEgA0Gw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BSgCACEFQciyBUEANgIAIAVBAUYNASADIAI2AgAgA0KXgICAgISAgIB/NwIEIAJBADoAFyACQfK9AikAADcADyACQeu9AikAADcACCACQeO9AikAADcAAEHIsgVBADYCAEEyIAQgA0H7vQJB3QBBrL4CEBAaQciyBSgCACECQciyBUEANgIAQQEhBSACQQFGDQIgACAENgIAQciyBUEANgIAQTEgAEGg2gBBABASQciyBSgCACECQciyBUEANgIAQQAhBSACQQFGDQIACxAGIQIQBxoMAwsQBiECEAcaDAELEAYhAhAHGiADLAALQX9MBEAgAygCABD2DAsgBUUNAgsgBBD2DAsgABATCyACEAgACyAAIAGnQf8BcSACEK0BCyADQRBqJAAL9AMBA38jAEEQayIEJAAgACgCACIDIAJJBEBBBBAOIQBByLIFQQA2AgBBLUEwEA0hA0HIsgUoAgAhAkHIsgVBADYCAAJAAkACQAJAAkAgAkEBRwRAQciyBUEANgIAQS1BIBANIQJByLIFKAIAIQFByLIFQQA2AgAgAUEBRg0BIAQgAjYCACAEQpOAgICAhICAgH83AgQgAkEAOgATIAJBrdQCKAAANgAPIAJBptQCKQAANwAIIAJBntQCKQAANwAAQciyBUEANgIAQTAgAyAEQcQAQbLUAkH+AEHV1AIQFhpByLIFKAIAIQJByLIFQQA2AgBBASEBIAJBAUYNAiAAIAM2AgBByLIFQQA2AgBBMSAAQazdAEEAEBJByLIFKAIAIQJByLIFQQA2AgBBACEBIAJBAUYNAgALEAYhAhAHGgwDCxAGIQIQBxoMAQsQBiECEAcaIAQsAAtBf0wEQCAEKAIAEPYMCyABRQ0CCyADEPYMCyAAEBMLIAIQCAALAkAgACgCBCADRwRAIAAoAgghBQwBCyAAIANBASADQQFLG0EBdCIDNgIEIAAgACgCCCADEOoBIgU2AgggACgCACEDCyACIAVqIgVBAWogBSADIAJrEIINIAAoAgggAmogAToAACAAIAAoAgBBAWo2AgAgBEEQaiQAC+EBAQN/IwBBMGsiBCQAAkBBACAALQANIAIbDQAgACgCBCgCBBDZAyICKAIAIAIgAiwAC0EASBshBSAAQRBqIQIgACgCCCEAIAMEQCACIAMQqAEtAAAhBiAEIAIgAxCoAS0AADYC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AjYCCCAAIAE2AgQgACAEOgARIABBADoAECAAIAM6AA8gACAFOgAOIABBsMECNgIAIABBATYCGCAGQQE2AgBByLIFQQA2AgBBvwNBAEEEEBUhBUHIsgUoAgAhA0HIsgVBADYCAAJAAkAgA0EBRg0AIAAgBTYCIEHIsgVBADYCAEHAAyAAQRhqIgVBABAVIQNByLIFKAIAIQRByLIFQQA2AgAgBEEBRwRAIANBADYCAEHIsgVBADYCAEHAAyAFQQAQFSEFQciyBSgCACEDQciyBUEANgIAIANBAUYNASAFQQA2AgAgAA8LEAYhBRAHGgwBCxAGIQUQBxoLIAAoAiAhAEHIsgVBADYCACAAEOgBQciyBSgCACEAQciyBUEANgIAIABBAUYEQEEAEAshABAHGiAAEIQBAAsgBRAIAAviAQEFfyAAQbDBAjYCAAJAAkAgACgCGCIEBEAgAEEYaiEDA0BByLIFQQA2AgBBwAMgAyABEBUhAkHIsgUoAgAhBUHIsgVBADYCACAFQQFGDQIgAigCACECQciyBUEANgIAIAIQ6AFByLIFKAIAIQJByLIFQQA2AgAgAkEBRg0CIAFBAWoiASAERw0ACwsgACgCICEBQciyBUEANgIAIAEQ6AFByLIFKAIAIQFByLIFQQA2AgAgAUEBRg0BIAAPC0EAEAshARAHGiADEIMDIAEQhAEAC0EAEAshARAHGiABEIQBAAsKACAAELEEEPYMCzoBAX8gACgCGCECIABBGGoiACABELQEIAIgAUkEQANAIAAgAhCJAkEANgIAIAJBAWoiAiABRw0ACwsLrQMBA38jAEEQayICJAAgACABNgIEIAAgATYCACABQYCAgIAETwRAQQQQDiEAQciyBUEANgIAQS1BMBANIQRByLIFKAIAIQFByLIFQQA2AgACQAJAAkACQAJAIAFBAUcEQEHIsgVBADYCAEEtQTAQDSEBQciyBSgCACEDQciyBUEANgIAIANBAUYNASACIAE2AgAgAkKggICAgIaAgIB/NwIEIAFBADoAICABQZrVAikAADcAGCABQZLVAikAADcAECABQYrVAikAADcACCABQYLVAikAADcAAEHIsgVBADYCAEEwIAQgAkHEAEGy1AJBigFBo9UCEBYaQciyBSgCACEBQciyBUEANgIAQQEhAyABQQFHBEAgACAENgIAQciyBUEANgIAQTEgAEGs3QBBABASQciyBSgCACEBQciyBUEANgIAQQAhAyABQQFHDQYLEAYhARAHGiACLAALQX9MBEAgAigCABD2DAsgAw0CDAQLEAYhARAHGgwCCxAGIQEQBxoLIAQQ9gwLIAAQEwsgARAICwALIAAgACgCCCABQQJ0EOoBNgIIIAJBEGokAAuKCQEHfyMAQbABayIDJAACQAJAAkAgAC0ADARAIANB6D42AmAgA0HUPjYCKEHIsgVBADYCAEEpIANB4ABqIgEgA0EoakEEciIEEAVByLIFKAIAIQJByLIFQQA2AgAgAkEBRg0BIANCgICAgHA3A6gBIANBsD42AmAgA0GcPjYCKEHIsgVBADYCAEEqIAQQDSEHQciyBSgCACECQciyBUEANgIAIAJBAUYEQBAGIQAQBxoMBAsgA0IANwJMIANCADcCVCADQRA2AlwgA0HMPzYCLEHIsgVBADYCAEErIANBKGpB2MECQQkQFCEFQciyBSgCACECQciyBUEANgIAAkACQAJAAkACQAJAAkACQAJAIAJBAUYNACAAKAIIIgAQiA0hAkHIsgVBADYCAEErIAUgACACEBQhAkHIsgUoAgAhAEHIsgVBADYCACAAQQFGDQBByLIFQQA2AgBBKyACQeLBAkEMEBQaQciyBSgCACEAQciyBUEANgIAIABBAUYNAEEEEA4hAkHIsgVBADYCAEEtQTAQDSEFQciyBSgCACEAQciyBUEANgIAIABBAUYNAUHIsgVBADYCAEEuIANBCGogBBAFQciyBSgCACEAQciyBUEANgIAIABBAUYNAiADKAIIIANBCGogAywAE0EASBsiBBCIDSIAQXBPBEBByLIFQQA2AgBBLyADQRhqEA9ByLIFKAIAIQBByLIFQQA2AgAgAEEBRg0EDAwLAkACQCAAQQtPBEBByLIFQQA2AgBBLSAAQRBqQXBxIggQDSEGQciyBSgCACEJQciyBUEANgIAIAlBAUYNBiADIAY2AhggAyAANgIcIAMgCEGAgICAeHI2AiAMAQsgAyAAOgAjIANBGGohBiAARQ0BCyAGIAQgABCADRoLIAAgBmpBADoAAEHIsgVBADYCAEEwIAUgA0EYakECQfu9AkHmAkGsvgIQFhpByLIFKAIAIQBByLIFQQA2AgBBASEEIABBAUcEQCACIAU2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AgAhAUHIsgVBADYCAEEAIQMgAUEBRw0GCxAGIQEQBxogAiwAC0F/TARAIAIoAgAQ9gwLIAMNAgwECxAGIQEQBxoMAgsQBiEBEAcaCyAEEPYMCyAAEBMLIAEQCAsACyAAIAAoAgggAUECdBDqATYCCCACQRBqJAALrQMBA38jAEEQayICJAAgACABNgIEIAAgATYCACABQYCAgIAETwRAQQQQDiEAQciyBUEANgIAQS1BMBANIQRByLIFKAIAIQFByLIFQQA2AgACQAJAAkACQAJAIAFBAUcEQEHIsgVBADYCAEEtQTAQDSEBQciyBSgCACEDQciyBUEANgIAIANBAUYNASACIAE2AgAgAkKggICAgIaAgIB/NwIEIAFBADoAICABQZrVAikAADcAGCABQZLVAikAADcAECABQYrVAikAADcACCABQYLVAikAADcAAEHIsgVBADYCAEEwIAQgAkHEAEGy1AJBggFBo9UCEBYaQciyBSgCACEBQciyBUEANgIAQQEhAyABQQFHBEAgACAENgIAQciyBUEANgIAQTEgAEGs3QBBABASQciyBSgCACEBQciyBUEANgIAQQAhAyABQQFHDQYLEAYhARAHGiACLAALQX9MBEAgAigCABD2DAsgAw0CDAQLEAYhARAHGgwCCxAGIQEQBxoLIAQQ9gwLIAAQEwsgARAICwALIAAgACgCCCABQQJ0EOoBNgIIIAJBEGokAAv5EgEGfyMAQbABayIEJAACQAJAAkACQAJAAkACQAJAAkACQAJAIAAtAAwEQCAEQeg+NgJgIARB1D42AihByLIFQQA2AgBBKSAEQeAAaiICIARBKGpBBHIiARAFQciyBSgCACEDQciyBUEANgIAIANBAUYNASAEQoCAgIBwNwOoASAEQbA+NgJgIARBnD42AihByLIFQQA2AgBBKiABEA0hBkHIsgUoAgAhA0HIsgVBADYCACADQQFGBEAQBiEAEAcaDAwLIARCADcCTCAEQgA3AlQgBEEQNgJcIARBzD82AixByLIFQQA2AgBBKyAEQShqQdjBAkEJEBQhB0HIsgUoAgAhA0HIsgVBADYCAAJAAkACQAJAAkACQAJAAkACQCADQQFGDQAgACgCCCIAEIgNIQNByLIFQQA2AgBBKyAHIAAgAxAUIQNByLIFKAIAIQBByLIFQQA2AgAgAEEB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NgIIIANB+70CNgIEIANBq8cCNgIAQcCMBEGNxwIgAxC6AQwBCwJAIAAgACgCACgCDBEAACIEIABBFGoiAkEAEKwBKAIAIgUgBSgCACgCDBEAAEYNACAAKAIEKAIEENkDIgUoAgAhByAFLAALIQggACgCBCEJIAAoAgghCiACQQAQrAEoAgAoAgghCyACQQAQrAEoAgAiBiAGKAIAKAIMEQAAIQYgAyAENgIoIAMgBjYCJCADIAs2AiAgAyAKNgIcIAMgCUEoajYCGCADIAcgBSAIQQBIGzYCFCADQb7HAjYCEEHAjARBxMcCIANBEGoQugEgAkEAEKwBKAIAIgIgAigCACgCDBEAACAERg0AQQQQDiEBQciyBUEANgIAQS1BLBANIQRByLIFKAIAIQJByLIFQQA2AgACQAJAAkAgAkEBRwRAQciyBUEANgIAQS1BwAAQDSECQciyBSgCACEAQciyBUEANgIAIABBAUYNASADIAI2AjAgA0K8gICAgIiAgIB/NwI0IAJBADoAPCACQbjIAigAADYAOCACQbDIAikAADcAMCACQajIAikAADcAKCACQaDIAikAADcAICACQZjIAikAADcAGCACQZDIAikAADcAECACQYjIAikAADcACCACQYDIAikAADcAAEHIsgVBADYCAEEyIAQgA0EwakH7vQJBpwZBvscCEBAaQciyBSgCACEAQciyBUEANgIAQQEhAiAAQQFHBEAgASAENgIAQciyBUEANgIAQTEgAUGg2gBBABASQciyBSgCACEAQciyBUEANgIAQQAhAiAAQQFHDQgLEAYhABAHGiADLAA7QX9MBEAgAygCMBD2DAsgAkUNBgwCCxAGIQAQBxoMAgsQBiEAEAcaCyAEEPYMCyABEBMgABAIAAsgBEUNAEEAIQIDQCAAIAEgAiAAKAIAKAIsEQUAIAJBAWoiAiAERw0ACwsgA0FAayQADwsgABAIAAsAC0QBAn8gACgCFARAIABBFGohA0EAIQADQCADIAAQrAEoAgAiBCABIAIgBCgCACgCHBEFACAAQQFqIgAgAygCAEkNAAsLC6gEAQV/IwBBIGsiBCQAIAMEQEEEEA4hAEHIsgVBADYCAEEtQSwQDSEFQciyBSgCACEDQciyBUEANgIAAkACQAJAAkACQCADQQFHBEBByLIFQQA2AgBBLUEgEA0h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QQJ0ag8LEAYhARAHGgwBCwALIAYQ3AYgARAIAAsKACAAENAEEPYMC8kGAQN/IwBBEGsiAiQAAkACQAJAAkAgAC0ADiABTQRAIAAtAA8gAU8NAQtBBBAOIQFByLIFQQA2AgBBLUEsEA0hBEHIsgUoAgAhAEHIsgVBADYCAAJAAkAgAEEBRwRAQciyBUEANgIAQS1BwAAQDSEAQciyBSgCACEDQciyBUEANgIAIANBAUYNASACIAA2AgAgAkK4gICAgIiAgIB/NwIEIABBADoAOCAAQajJAikAADcAMCAAQaDJAikAADcAKCAAQZjJAikAADcAICAAQZDJAikAADcAGCAAQYjJAikAADcAECAAQYDJAikAADcACCAAQfjIAikAADcAAEHIsgVBADYCAEEyIAQgAkH7vQJB5gZBsckCEBAaQciyBSgCACEAQciyBUEANgIAQQEhAyAAQQFHBEAgASAENgIAQciyBUEANgIAQTEgAUGg2gBBABASQciyBSgCACEAQciyBUEANgIAQQAhAyAAQQFHDQYLEAYhABAHGiACLAALQX9MBEAgAigCABD2DAsgAw0CDAQLEAYhABAHGiABEBMMAwsQBiEAEAcaCyAEEPYMIAEQEwwBCyAAIAAoAgQgASAAKAIAKAIoEQQAIgENAkEEEA4hAUHIsgVBADYCAEEtQSwQDSEEQciyBSgCACEAQciyBUEANgIAAkACQAJAIABBAUcEQEHIsgVBADYCAEEtQSAQDSEAQciyBSgCACEDQciyBUEANgIAIANBAUYNASACIAA2AgAgAkKdgICAgISAgIB/NwIEIABBADoAHSAAQdTJAikAADcAFSAAQc/JAikAADcAECAAQcfJAikAADcACCAAQb/JAikAADcAAEHIsgVBADYCAEEyIAQgAkH7vQJB6QZBsckCEBAaQciyBSgCACEAQciyBUEANgIAQQEhAyAAQQFHBEAgASAENgIAQciyBUEANgIAQTEgAUGg2gBBABASQciyBSgCACEAQciyBUEANgIAQQAhAyAAQQFHDQYLEAYhABAHGiACLAALQX9MBEAgAigCABD2DAsgAw0CDAQLEAYhABAHGgwCCxAGIQAQBxoLIAQQ9gwLIAEQEwsgABAICwALIABBHGogASAAKAIcENQEIAJBEGokACABC/4DAQR/IwBBEGsiBCQAIAAoAgAiAyACSQRAQQQQDiEAQciyBUEANgIAQS1BMBANIQJByLIFKAIAIQNByLIFQQA2AgACQAJAAkACQAJAIANBAUcEQEHIsgVBADYCAEEtQSAQDSEDQciyBSgCACEBQciyBUEANgIAIAFBAUYNASAEIAM2AgAgBEKTgICAgISAgIB/NwIEIANBADoAEyADQa3UAigAADYADyADQabUAikAADcACCADQZ7UAikAADcAAEHIsgVBADYCAEEwIAIgBEHEAEH40wJBIUHV1AIQFhpByLIFKAIAIQNByLIFQQA2AgBBASEBIANBAUYNAiAAIAI2AgBByLIFQQA2AgBBMSAAQazdAEEAEBJByLIFKAIAIQNByLIFQQA2AgBBACEBIANBAUYNAgALEAYhAxAHGgwDCxAGIQMQBxoMAQsQBiEDEAcaIAQsAAtBf0wEQCAEKAIAEPYMCyABRQ0CCyACEPYMCyAAEBMLIAMQCAALAkAgACgCBCADRwRAIAAoAgghBQwBCyAAIANBASADQQFLGyIDQQF0NgIEIAAgACgCCCADQQN0EOoBIgU2AgggACgCACEDCyAFIAJBAnQiBmoiBUEEaiAFIAMgAmtBAnQQgg0gACgCCCAGaiABNgIAIAAgACgCAEEBajYCACAEQRBqJAALLAACQCAALQAYRQ0AIAAtABlFDQAgACAALQAOENMEIgAgACgCACgCCBEBAAsL0AIBBn8jAEEQayIFJAACQAJAAkACQCAAKAIIIgYEQCAGLQAADQELIAAoAhxFDQMgAEEcaiEAA0AgACAEENEEKAIAIAEgAiADEKkDRQRAIARBAWoiBCAAKAIASQ0BDAMLC0EBIQQMAwsgBiABEKgFRQ0CIAEgBUEMahCpBSIHBEAgBSgCDCAAIAAoAgAoAgwRAABPDQMLIAAoAgQoAgQQ2QMiBigCACEIIAYsAAshCSAFIAE2AgQgBSAIIAYgCUEASBs2AgBB3ckCIAUQvQEgARCqBSIBRQRAIAcNAyACIAA2AgAMAgsgAEEcaiEAIAcEQCAAIAUoAgwQ0QQoAgAgASACIAMQqQMhBAwDCyAAKAIARQ0CA0AgACAEENEEKAIAIAEgAiADEKkDDQIgBEEBaiIEIAAoAgBJDQALC0EAIQQMAQtBASEECyAFQRBqJAAgBAu0BwICfwJ+IwBBMGsiAyQAAkACQCACBEBBBBAOIQBByLIFQQA2AgBBLUEsEA0hBEHIsgUoAgAhAUHIsgVBADYCAAJAAkACQAJAIAFBAUcEQEHIsgVBADYCAEEtQSAQDSEBQciyBSgCACECQciyBUEANgIAIAJBAUYNASADIAE2AiAgA0KcgICAgISAgIB/NwIkIAFBADoAHCABQYPHAigAADYAGCABQfvGAikAADcAECABQfPGAikAADcACCABQevGAikAADcAAEHIsgVBADYCAEEyIAQgA0EgakH7vQJBugdBiMcCEBAaQciyBSgCACECQciyBUEANgIAQQEhASACQQFGDQIgACAENgIAQciyBUEANgIAQTEgAEGg2gBBABASQciyBSgCACECQciyBUEANgIAQQAhASACQQFGDQIMBwsQBiECEAcaDAMLEAYhAhAHGgwBCxAGIQIQBxogAywAK0F/TARAIAMoAiAQ9gwLIAFFDQMLIAQQ9gwLIAAQEwwBCwJAIAAtAA0NACABQQAQsAMhBQNAAkAgACkDEFBFBEAgAUEAELADIAApAxAgBXxaDQELQciyBUEANgIAQcUDIAEgA0EgakEBQQAQHEHIsgUoAgAhAkHIsgVBADYCACACQQFGBEBBoNoAEAshAhAHQaDaABAZRw0EIAIQDCECQciyBUEANgIAQfsBIAEQtQ0hBUHIsgUoAgAhBEHIsgVBADYCAAJAIARBAUYNAEHIsgVBADYCAEHGAyABELUNIQZByLIFKAIAIQFByLIFQQA2AgAgAUEBRg0AIAUgBloEQCACBEAgAiACKAIAKAIEEQEACxAXDAMLQQQQDiIAIAI2AgBByLIFQQA2AgBBMSAAQaDaAEEAEBJByLIFKAIAIQBByLIFQQA2AgAgAEEBRw0GCxAGIQAQBxoQFyAAEAgACyADLQAgIgIgAC0ADkkNACACIAAtAA9LDQAgACACENMEIgIgASACKAIAKAIMEQIADAELCwJAIAAtABhFDQAgACgCHA0AIAAoAgQoAgQQ2QMiASgCACECIAEsAAshBCADIAAtAA42AhggA0GIxwI2AhAgAyACIAEgBEEASBs2AhRB7skCIANBEGoQvAEMAQsgAC0AGUUNACAAKAIcQQJJDQAgACgCBCgCBBDZAyIBKAIAIQIgASwACyEEIAMgAC0ADjYCCCADQYjHAjYCACADIAIgASAEQQBIGzYC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BxogABCEAQALIAAQ9gwLBABBAAsHACAAKAIQCyQAIAAgATYCECAAIAE2AhQgAEEYaiIAIAAoAgAgARDqATYCAAshACAALQANRQRAIAEQtgMhASAAQRBqIAIQqAEgAToAAAsLHQAgAC0ADUUEQCABIABBEGogAhCoAS0AABC7AwsLTQEBfyAAQaDNAjYCACAAKAIYIQFByLIFQQA2AgAgARDoAUHIsgUoAgAhAUHIsgVBADYCACABQQFGBEBBABALIQAQBxogABCEAQALIAALUAEBfyAAQaDNAjYCACAAKAIYIQFByLIFQQA2AgAgARDoAUHIsgUoAgAhAUHIsgVBADYCACABQQFGBEBBABALIQAQBxogABCEAQALIAAQ9gwLDAAgAEEQaiABEPIEC6kDAQN/IwBBEGsiAiQAIAAgATYCBCAAIAE2AgAgAUF/TARAQQQQDiEAQciyBUEANgIAQS1BMBANIQRByLIFKAIAIQFByLIFQQA2AgACQAJAAkACQAJAIAFBAUcEQEHIsgVBADYCAEEtQTAQDSEBQciyBSgCACEDQciyBUEANgIAIANBAUYNASACIAE2AgAgAkKggICAgIaAgIB/NwIEIAFBADoAICABQZrVAikAADcAGCABQZLVAikAADcAECABQYrVAikAADcACCABQYLVAikAADcAAEHIsgVBADYCAEEwIAQgAkHEAEGy1AJBgAFBo9UCEBYaQciyBSgCACEBQciyBUEANgIAQQEhAyABQQFHBEAgACAENgIAQciyBUEANgIAQTEgAEGs3QBBABASQciyBSgCACEBQciyBUEANgIAQQAhAyABQQFHDQYLEAYhARAHGiACLAALQX9MBEAgAigCABD2DAsgAw0CDAQLEAYhARAHGgwCCxAGIQEQBxoLIAQQ9gwLIAAQEwsgARAICwALIAAgACgCCCABQQF0EOoBNgIIIAJBEGokAAshACAALQANRQRAIAEQtwMhASAAQRBqIAIQqgEgATsBAAsLHQAgAC0ADUUEQCABIABBEGogAhCqAS8BABC8AwsLTQEBfyAAQYDOAjYCACAAKAIYIQFByLIFQQA2AgAgARDoAUHIsgUoAgAhAUHIsgVBADYCACABQQFGBEBBABALIQAQBxogABCEAQALIAALUAEBfyAAQYDOAjYCACAAKAIYIQFByLIFQQA2AgAgARDoAUHIsgUoAgAhAUHIsgVBADYCACABQQFGBEBBABALIQAQBxogABCEAQALIAAQ9gwLBABBAgsMACAAQRBqIAEQvgQLIQAgAC0ADUUEQCABELgDIQEgAEEQaiACELEBIAE2AgALCx0AIAAtAA1FBEAgASAAQRBqIAIQsQEoAgAQvQMLC00BAX8gAEHgzgI2AgAgACgCGCEBQciyBUEANgIAIAEQ6AFByLIFKAIAIQFByLIFQQA2AgAgAUEBRgRAQQAQCyEAEAcaIAAQhAEACyAAC1ABAX8gAEHgzgI2AgAgACgCGCEBQciyBUEANgIAIAEQ6AFByLIFKAIAIQFByLIFQQA2AgAgAUEBRgRAQQAQCyEAEAcaIAAQhAEACyAAEPYMCwQAQQMLIQAgAC0ADUUEQCABELkDIQEgAEEQaiACELEBIAE2AgALCx0AIAAtAA1FBEAgASAAQRBqIAIQsQEoAgAQvgMLC1ABAX8gAEHAzwI2AgAgACgCGCEBQciyBUEANgIAIAEQ6AFByLIFKAIAIQFByLIFQQA2AgAgAUEBRgRAQQAQCyEAEAcaIAAQhAEACyAAEPYMCwQAQQQLDAAgAEEQaiABEIMFC60DAQN/IwBBEGsiAiQAIAAgATYCBCAAIAE2AgAgAUGAgICAAk8EQEEEEA4hAEHIsgVBADYCAEEtQTAQDSEEQciyBSgCACEBQciyBUEANgIAAkACQAJAAkACQCABQQFHBEBByLIFQQA2AgBBLUEwEA0hAUHIsgUoAgAhA0HIsgVBADYCACADQQFGDQEgAiABNgIAIAJCoICAgICGgICAfzcCBCABQQA6ACAgAUGa1QIpAAA3ABggAUGS1QIpAAA3ABAgAUGK1QIpAAA3AAggAUGC1QIpAAA3AABByLIFQQA2AgBBMCAEIAJBxABBstQCQYQBQaPVAhAWGkHIsgUoAgAhAUHIsgVBADYCAEEBIQMgAUEBRwRAIAAgBDYCAEHIsgVBADYCAEExIABBrN0AQQAQEkHIsgUoAgAhAUHIsgVBADYCAEEAIQMgAUEBRw0GCxAGIQEQBxogAiwAC0F/TARAIAIoAgAQ9gwLIAMNAgwECxAGIQEQBxoMAgsQBiEBEAcaCyAEEPYMCyAAEBMLIAEQCAsACyAAIAAoAgggAUEDdBDqATYCCCACQRBqJAALIwEBfiAALQANRQRAIAEQugMhAyAAQRBqIAIQqQEgAzcDAAsLHQAgAC0ADUUEQCABIABBEGogAhCpASkDABC/AwsLTQEBfyAAQcDPAjYCACAAKAIYIQFByLIFQQA2AgAgARDoAUHIsgUoAgAhAUHIsgVBADYCACABQQFGBEBBABALIQAQBxogABCEAQALIAALTQEBfyAAQYDRAjYCACAAKAIYIQFByLIFQQA2AgAgARDoAUHIsgUoAgAhAUHIsgVBADYCACABQQFGBEBBABALIQAQBxogABCEAQALIAALUAEBfyAAQYDRAjYCACAAKAIYIQFByLIFQQA2AgAgARDoAUHIsgUoAgAhAUHIsgVBADYCACABQQFGBEBBABALIQAQBxogABCEAQALIAAQ9gwLBABBBQsMACAAQRBqIAEQiwULrQMBA38jAEEQayICJAAgACABNgIEIAAgATYCACABQYCAgIAETwRAQQQQDiEAQciyBUEANgIAQS1BMBANIQRByLIFKAIAIQFByLIFQQA2AgACQAJAAkACQAJAIAFBAUcEQEHIsgVBADYCAEEtQTAQDSEBQciyBSgCACEDQciyBUEANgIAIANBAUYNASACIAE2AgAgAkKggICAgIaAgIB/NwIEIAFBADoAICABQZrVAikAADcAGCABQZLVAikAADcAECABQYrVAikAADcACCABQYLVAikAADcAAEHIsgVBADYCAEEwIAQgAkHEAEGy1AJBhgFBo9UCEBYaQciyBSgCACEBQciyBUEANgIAQQEhAyABQQFHBEAgACAENgIAQciyBUEANgIAQTEgAEGs3QBBABASQciyBSgCACEBQciyBUEANgIAQQAhAyABQQFHDQYLEAYhARAHGiACLAALQX9MBEAgAigCABD2DAsgAw0CDAQLEAYhARAHGgwCCxAGIQEQBxoLIAQQ9gwLIAAQEwsgARAICwALIAAgACgCCCABQQJ0EOoBNgIIIAJBEGokAAsEAEEHCwcAIAAoAiQLBABBCQsHACAAKAIcCwwAIABBHGogARCRBQusAwEDfyMAQRBrIgIkACAAIAE2AgQgACABNgIAIAFBgICAgARPBEBBBBAOIQBByLIFQQA2AgBBLUEwEA0hBEHIsgUoAgAhAUHIsgVBADYCAAJAAkACQAJAAkAgAUEBRwRAQciyBUEANgIAQS1BMBANIQFByLIF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Qb3iAhCRAyICRQRAQQQQDiECQciyBUEANgIAQS1BLBANIQFByLIFKAIAIQBByLIFQQA2AgACQAJAAkACQAJAIABBAUcEQEHIsgVBADYCAEEtQSAQDSEAQciyBSgCACEEQciyBUEANgIAIARBAUYNASADIAA2AgAgA0KdgICAgISAgIB/NwIEIABBADoAHSAAQfvpAikAADcAFSAAQfbpAikAADcAECAAQe7pAikAADcACCAAQebpAikAADcAAEHIsgVBADYCAEEyIAEgA0HE3gJBrwtBhOoCEBAaQciyBSgCACEAQciyBUEANgIAQQEhBCAAQQFGDQIgAiABNgIAQciyBUEANgIAQTEgAkGg2gBBABASQciyBSgCACEAQciyBUEANgIAQQAhBCAAQQFGDQIACxAGIQAQBxoMAwsQBiEAEAcaDAELEAYhABAHGiADLAALQX9MBEAgAygCABD2DAsgBEUNAgsgARD2DAsgAhATCyAAEAgACyAAKAIEIAIgARCHAyIAIAI2AkAgAkHgAGogACACKAJgEOkBIAAgACgCACgCCBEBACADQRBqJAAgAAu1BQIGfwF8IwBBEGsiBCQAIAAQpAUgABCXBQJAIAAoAoABDQAgAC0AiAFBBEcNACAALQCJAUUNACAAKAKMASICQRBqIAAtAIoBIAIoAhAQpAQgACgCjAEiAiACQQAQogRCAXxBABCjBAsgACgCCEHu4AIgBEEMakEAEJMDBEAgBCgCDCEGAkAgACgCgAEiAgRAIAJBEGpBABCxASgCACICDQELQQAhAiAAKAKMASIDIAMoAgAoAgwRAAAiB0UNAEEBIQMDQCAAKAKMASADQX9qEKIEpyIFIAIgAiAFSRshAiADQQFqIgMgB00NAAsLIAYgACgCYCACbK1BABCuAQsCQCABQQFxDQAgACgCCEGq4QIgBEEIakEAEJMDBEAgBCgCCCAAEKUFQQAQ1wELIAAoAghB5OECIARBCGpBABCTA0UNACAEKAIIAn9BACAAKAJ0QQAQogRQDQAaIAAQpgW6RAAAAAAAACBAoiAAKAJsQRBqQQAQsQEoAgC4oiAAKAJ0QQAQogS6o5siCEQAAAAAAADwQWMgCEQAAAAAAAAAAGZxBEAgCKsMAQtBAAtBABDXAQsgBEEANgIEIAAoAghBnuICIARBBGpBABCTAxoCQCAE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ADYCACAHQQFHDQELEAYhARAHGiACKAIYIQBByLIFQQA2AgAgABDoAUHIsgUoAgAhAEHIsgVBADYCACAAQQFHDQRBABALIQIQBxogAhCEAQALIAVCADcDACACQQE6ABwgAkGg0AI2AgBByLIFQQA2AgBB/AAgBiADEAVByLIFKAIAIQJByLIFQQA2AgAgAkEBRg0AQciyBUEANgIAQS1BIBANIQJByLIFKAIAIQNByLIFQQA2AgAgA0EBRg0AQciyBUEANgIAIAIgAUG67gIQoAQhA0HIsgUoAgAhBUHIsgVBADYCACAFQQFGDQQgAkEANgIYIAJCADcCECACQcDPAjYCAEHIsgVBADYCACAEIAJBARAFQciyBSgCACEEQciyBUEANgIAAkAgBEEBRwRAQciyBUEANgIAQdwAIAJBEGpBABAVIQRByLIFKAIAIQVByLIFQQA2AgAgBUEBRw0BCxAGIQEQBxogAigCGCEAQciyBUEANgIAIAAQ6AFByLIFKAIAIQBByLIFQQA2AgAgAEEBRw0GQQAQCyECEAcaIAIQhAEACyAEQgA3AwAgAkEHOgAcIAJBoNACNgIAQciyBUEANgIAQfwAIAYgAxAFQciyBSgCACECQciyBUEANgIAIAJBAUYNAEHIsgVBADYCAEEtQRwQDSECQciyBSgCACEDQciyBUEANgIAIANBAUYNBkHIsgVBADYCACACIAFB/PACEKAEIQNByLIFKAIAIQRByLIFQQA2AgAgBEEBRg0HIAJBADYCGCACQgA3AhAgAkGQzAI2AgBByLIFQQA2AgBBoMwCKAIAIAJBARAFQciyBSgCACEEQciyBUEANgIAAkAgBEEBRwRAQciyBUEANgIAQdkAIAJBEGpBABAVIQRByLIFKAIAIQVByLIFQQA2AgAgBUEBRw0BCxAGIQEQBxogAigCGCEAQciyBUEANgIAIAAQ6AFByLIFKAIAIQBByLIFQQA2AgAgAEEBRw0JQQAQCyECEAcaIAIQhAEACyAEQQA6AABByLIFQQA2AgBB/AAgBiADEAVByLIFKAIAIQNByLIFQQA2AgAgA0EBRg0GQciyBUEANgIAQS1BIBANIQNByLIFKAIAIQRByLIFQQA2AgAgBEEBRg0JQciyBUEANgIAIAMgAUGG8QIgAhDFBCECQciyBSgCACEEQciyBUEANgIA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BEHIsgUoAgAhBUHIsgVBADYCACAFQQFHDQELEAYhARAHGiACKAIYIQNByLIFQQA2AgAgAxDoAUHIsgUoAgAhA0HIsgVBADYCACADQQFHDQNBABALIQIQBxogAhCEAQALIARBADoAAEHIsgVBADYCAEH8ACAHIAMQBUHIsgUoAgAhA0HIsgVBADYCACADQQFGDQBByLIFQQA2AgBBLUEgEA0hA0HIsgUoAgAhBEHIsgVBADYCACAEQQFGDQNByLIFQQA2AgAgAyABQeXxAiACEMUEIQFByLIFKAIAIQJByLIFQQA2AgAgAkEBRg0EIANBqPUCNgIAQciyBUEANgIAQfwAIAcgAxAFQciyBSgCACECQciyBUEANgIAIAJBAUYNA0HIsgVBADYCAEEtQTAQDSECQciyBSgCACEEQciyBUEANgIAIARBAUYNAyADKAIEIQRByLIFQQA2AgBB4AAgAiAEQaDuAkEDQQMQEBpByLIFKAIAIQRByLIFQQA2AgAgBEEBRg0FQciyBUEANgIAQd8AIAEgAhAFQciyBSgCACECQciyBUEANgIAIAJBAUYNA0HIsgVBADYCAEEtQSAQDSECQciyBSgCACEEQciyBUEANgIAIARBAUYNAyADKAIEIQRByLIFQQA2AgAgAiAEQa3uAhCgBCEEQciyBSgCACEFQciyBUEANgIAIAVBAUYNBiACQQA2AhggAkIANwIQIAJBwM8CNgIAQciyBUEANgIAQdDPAigCACIFIAJBARAFQciyBSgCACEGQciyBUEANgIAAkAgBkEBRwRAQciyBUEANgIAQdwAIAJBEGpBABAVIQZByLIFKAIAIQhByLIFQQA2AgAgCEEBRw0BCxAGIQEQBxogAigCGCEDQciyBUEANgIAIAMQ6AFByLIFKAIAIQNByLIFQQA2AgAgA0EBRw0IQQAQCyECEAcaIAIQhAEACyAGQgA3AwAgAkEBOgAcIAJBoNACNgIAQciyBUEANgIAQd8AIAEgBBAFQciyBSgCACECQciyBUEANgIAIAJBAUYNA0HIsgVBADYCAEEtQSAQDSECQciyBSgCACEEQciyBUEANgIAIARBAUYNAyADKAIEIQRByLIFQQA2AgAgAiAEQbruAhCgBCEEQciyBSgCACEGQciyBUEANgIAIAZBAUYNCCACQQA2AhggAkIANwIQIAJBwM8CNgIAQciyBUEANgIAIAUgAkEBEAVByLIFKAIAIQVByLIFQQA2AgACQCAFQQFHBEBByLIFQQA2AgBB3AAgAkEQakEAEBUhBUHIsgUoAgAhBkHIsgVBADYCACAGQQFHDQELEAYhARAHGiACKAIYIQNByLIFQQA2AgAgAxDoAUHIsgUoAgAhA0HIsgVBADYCACADQQFHDQpBABALIQIQBxogAhCEAQALIAVCADcDACACQQc6ABwgAkGg0AI2AgBByLIFQQA2AgBB3wAgASAEEAVByLIFKAIAIQJByLIFQQA2AgAgAkEBRg0DQciyBUEANgIAQS1BJBANIQJByLIFKAIAIQRByLIFQQA2AgAgBEEBRg0DIAMoAgQhA0HIsgVBADYCAEH9ACACIANB7vECQQFBAEEAEBYaQciyBSgCACEDQciyBUEANgIAIANBAUYNCkHIsgVBADYCAEHfACABIAIQBUHIsgUoAgAhAkHIsgVBADYCACACQQFGDQMgAA8LEAYhARAHGgwKCxAGIQEQBxoLIAIQ9gwMCAsQBiEBEAcaDAcLEAYhARAHGiADEPYMDAYLEAYhARAHGiACEPYMDAULEAYhARAHGgsgAhD2DAwDCxAGIQEQBxoLIAIQ9gwMAQsQBiEBEAcaIAIQ9gwLIAcQpgMaIAEQCAALngECAX8BfiAAQRRqIgBBABCsASgCACIDIAEgAiADKAIAKAIYEQUAIABBARCsASgCACIDIAEgAiADKAIAKAIYEQUAIABBARCsASgCAEEQaiACEKkBKQMAIQQgAEEDEKwBKAIAIARQOgARIABBAhCsASgCACIDIAEgAiADKAIAKAIYEQUAIABBAxCsASgCACIAIAEgAiAAKAIAKAIYEQUACzsCAX8BfiAAQRRqIgNBARCsASgCAEEQaiACEKkBKQMAIQQgA0EDEKwBKAIAIARQOgARIAAgASACEM0EC6ADAQN/IAAgASACEKUDIQQgAEH88QI2AgBByLIFQQA2AgBBLUEgEA0hAkHIsgUoAgAhA0HIsgVBADYCAAJAAkACQAJAIANBAUcEQEHIsgVBADYCACACIAFBmPICEKAEIQFByLIFKAIAIQNByLIFQQA2AgAgA0EBRg0BIAJBADYCGCACQgA3AhAgAkHAzwI2AgBByLIFQQA2AgBB0M8CKAIAIAJBARAFQciyBSgCACEDQciyBUEANgIAAkAgA0EBRwRAQciyBUEANgIAQdwAIAJBEGpBABAVIQNByLIFKAIAIQVByLIFQQA2AgAgBUEBRw0BCxAGIQAQBxogAigCGCEBQciyBUEANgIAIAEQ6AFByLIFKAIAIQFByLIFQQA2AgAgAUEBRw0DQQAQCyECEAcaIAIQhAEACyADQgA3AwAgAkEoOgAcIAJBoNACNgIAQciyBUEANgIAQfwAIAQgARAFQciyBSgCACECQciyBUEANgIAIAJBAUcNBAsQBiEAEAcaDAILEAYhABAHGgsgAhD2DAsgBBCmAxogABAIAAsgAAvqCQEGfyAAIAFBABClAyEHIABBtPICNgIAQciyBUEANgIAQS1BHBANIQJByLIFKAIAIQNByLIFQQA2AgACQAJAAkACQAJAAkACQAJAAkACQCADQQFGDQBByLIFQQA2AgAgAiABQdDyAhCgBCEDQciyBSgCACEEQciyBUEANgIAIARBAUYNASACQQA2AhggAkIANwIQIAJBkMwCNgIAQciyBUEANgIAQaDMAigCACIFIAJBARAFQciyBSgCACEEQciyBUEANgIAAkAgBEEBRwRAQciyBUEANgIAQdkAIAJBEGpBABAVIQRByLIFKAIAIQZByLIFQQA2AgAgBkEBRw0BCxAGIQEQBxogAigCGCEAQciyBUEANgIAIAAQ6AFByLIFKAIAIQBByLIFQQA2AgAgAEEBRw0DQQAQCyECEAcaIAIQhAEACyAEQQA6AABByLIFQQA2AgBB/AAgByADEAVByLIFKAIAIQNByLIFQQA2AgAgA0EBRg0AQciyBUEANgIAQS1BIBANIQNByLIFKAIAIQRByLIFQQA2AgAgBEEBRg0DQciyBUEANgIAIAMgAUHf8gIgAhDFBCEEQciyBSgCACECQciyBUEANgIAIAJBAUYNBEHIsgVBADYCAEH8ACAHIAMQBUHIsgUoAgAhAkHIsgVBADYCACACQQFGDQNByLIFQQA2AgBBLUEcEA0hAkHIsgUoAgAhA0HIsgVBADYCACADQQFGDQNByLIFQQA2AgAgAiABQeryAhCgBCEDQciyBSgCACEGQciyBUEANgIAIAZBAUYNBSACQQA2AhggAkIANwIQIAJBkMwCNgIAQciyBUEANgIAIAUgAkEBEAVByLIFKAIAIQVByLIFQQA2AgACQCAFQQFHBEBByLIFQQA2AgBB2QAgAkEQakEAEBUhBUHIsgUoAgAhBkHIsgVBADYCACAGQQFHDQELEAYhARAHGiACKAIYIQBByLIFQQA2AgAgABDoAUHIsgUoAgAhAEHIsgVBADYCACAAQQFHDQdBABALIQIQBxogAhCEAQALIAVBADoAAEHIsgVBADYCAEHfACAEIAMQBUHIsgUoAgAhAkHIsgVBADYCACACQQFGDQNByLIFQQA2AgBBLUEcEA0hAkHIsgUoAgAhA0HIsgVBADYCACADQQFGDQNByLIFQQA2AgAgAiABQe3yAhCgBCEBQciyBSgCACEDQciyBUEANgIAIANBAUYNByACQQA2AhggAkIANwIQIAJB4M4CNgIAQciyBUEANgIAQfDOAigCACACQQEQBUHIsgUoAgAhA0HIsgVBADYCAAJAIANBAUcEQEHIsgVBADYCAEH7ACACQRBqQQAQFSEDQciyBSgCACEFQciyBUEANgIAIAVBAUcNAQsQBiEBEAcaIAIoAhghAEHIsgVBADYCACAAEOgBQciyBSgCACEAQciyBUEANgIAIABBAUcNCUEAEAshAhAHGiACEIQBAAsgA0EANgIAQciyBUEANgIAQd8AIAQgARAFQciyBSgCACECQciyBUEANgIAIAJBAUYNAyAADwsQBiEBEAcaDAgLEAYhARAHGgsgAhD2DAwGCxAGIQEQBxoMBQsQBiEBEAcaIAMQ9gwMBAsQBiEBEAcaCyACEPYMDAILEAYhARAHGgsgAhD2DAsgBxCmAxogARAIAAvNAQEDfyAAIAFBABClAyEDIABB/PICNgIAQciyBUEANgIAQS1BMBANIQJByLIFKAIAIQRByLIFQQA2AgACQAJAAkAgBEEBRwRAQciyBUEANgIAQeAAIAIgAUGY8wJBAEEAEBAaQciyBSgCACEBQciyBUEANgIAIAFBAUYNAUHIsgVBADYCAEH8ACADIAIQBUHIsgUoAgAhAUHIsgVBADYCACABQQFHDQMLEAYhABAHGgwBCxAGIQAQBxogAhD2DAsgAxCmAxogABAIAAsgAAsrACAAIAEQrAMgAEEcakEAEKwBKAIAIAAoAhhBABDABCAAIAFBAEF/EK0DC8UFAQF/AkACQAJAIAFBQGoiAkEKTQRAAkACQAJAAkACQAJAAkACQAJAIAJBAWsOCgECAwQFBgcGBwgAC0EwEP4LIQJByLIFQQA2AgBBrwQgAiAAEBUaQciyBSgCACEBQciyBUEANgIAIAFBAUcNCRAGIQEQBxoMCwtBMBD+CyECQciyBUEANgIAQbAEIAIgABAVGkHIsgUoAgAhAUHIsgVBADYCACABQQFHDQgQBiEBEAcaDAoLQTAQ/gshAkHIsgVBADYCAEGxBCACIAAQFRpByLIFKAIAIQFByLIFQQA2AgAgAUEBRw0HEAYhARAHGgwJC0EwEP4LIQJByLIFQQA2AgBBsgQgAiAAEBUaQciyBSgCACEBQciyBUEANgIAIAFBAUcNBhAGIQEQBxoMCAtBMBD+CyECQciyBUEANgIAQbMEIAIgABAVGkHIsgUoAgAhAUHIsgVBADYCACABQQFHDQUQBiEBEAcaDAcLQTAQ/gshAkHIsgVBADYCAEG0BCACIAAQFRpByLIFKAIAIQFByLIFQQA2AgAgAUEBRw0EEAYhARAHGgwGC0EwEP4LIQJByLIFQQA2AgBBtQQgAiAAIAEQFBpByLIFKAIAIQFByLIFQQA2AgAgAUEBRw0DEAYhARAHGgwFC0EwEP4LIQJByLIFQQA2AgBBtgQgAiAAIAEQFBpByLIFKAIAIQFByLIFQQA2AgAgAUEBRw0CEAYhARAHGgwEC0EwEP4LIQJByLIFQQA2AgBBtwQgAiAAEBUaQciyBSgCACEBQciyBUEANgIAIAFBAUcNARAGIQEQBxoMAwtBACECIAFB4AFxQcAARw0AQTAQ/gshAkHIsgVBADYCAEG4BCACIAAQFRpByLIFKAIAIQBByLIFQQA2AgAgAEEBRg0BIAIgAToACAsgAg8LEAYhARAHGgsgAhD2DCABEAgAC7EYAQR/IAAgASACEKUDIQUgAEGU+AI2AgACQAJAAkACQCACQX9qIgJBwgBLDQACQAJAAkACQAJAAkACQAJAAkAgAkEBaw5CAgMECQkJCQkJCQAJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJBQYHAQtByLIFQQA2AgBBLUEcEA0hAkHIsgUoAgAhA0HIsgVBADYCACADQQFGDQpByLIFQQA2AgAgAiABQbD4AhCgBCEDQciyBSgCACEEQciyBUEANgIAAkAgBEEBRwRAIAJBADYCGCACQgA3AhAgAkGQzAI2AgBByLIFQQA2AgBBoMwCKAIAIAJBARAFQciyBSgCACEEQciyBUEANgIAAkAgBEEBRwRAQciyBUEANgIAQdkAIAJBEGpBABAVIQRByLIFKAIAIQZByLIFQQA2AgAgBkEBRw0BCxAGIQAQBxogAigCGCEBQciyBUEANgIAIAEQ6AFByLIFKAIAIQFByLIFQQA2AgAgAUEBRw0CQQAQCyEAEAcaIAAQhAEACyAEQQA6AABByLIFQQA2AgBB/AAgBSADEAVByLIFKAIAIQJByLIFQQA2AgAgAkEBRg0MQciyBUEANgIAQS1BKBANIQJByLIFKAIAIQNByLIFQQA2AgAgA0EBRg0MQciyBUEANgIAIAIgAUG7+AJBAUH/AUEAQQAQzwQaQciyBSgCACEBQciyBUEANgIAIAFBAUYNCyACQcT5AjYCAEHIsgVBADYCAEH8ACAFIAIQBUHIsgUoAgAhAUHIsgVBADYCACABQQFHDQoMDAsQBiEAEAcaCyACEPYMDAsLQciyBUEANgIAQS1BHBANIQJByLIFKAIAIQNByLIFQQA2AgAgA0EBRg0JQciyBUEANgIAIAIgAUHG+AIQoAQhAUHIsgUoAgAhA0HIsgVBADYCAAJAIANBAUcEQCACQQA2AhggAkIANwIQIAJB4M4CNgIAQciyBUEANgIAQfDOAigCACACQQEQBUHIsgUoAgAhA0HIsgVBADYCACADQQFHBEBByLIFQQA2AgBB+wAgAkEQakEAEBUhA0HIsgUoAgAhBEHIsgVBADYCACAEQQFHDQkLEAYhABAHGiACKAIYIQFByLIFQQA2AgAgARDoAUHIsgUoAgAhAUHIsgVBADYCACABQQFHDQFBABALIQAQBxogABCEAQALEAYhABAHGgsgAhD2DAwKC0HIsgVBADYCAEEtQRwQDSECQciyBSgCACEDQciyBUEANgIAIANBAUYNCEHIsgVBADYCACACIAFBz/gCEKAEIQFByLIFKAIAIQNByLIFQQA2AgACQCADQQFHBEAgAkEANgIYIAJCADcCECACQeDOAjYCAEHIsgVBADYCAEHwzgIoAgAgAkEBEAVByLIFKAIAIQNByLIFQQA2AgACQCADQQFHBEBByLIFQQA2AgBB+wAgAkEQakEAEBUhA0HIsgUoAgAhBEHIsgVBADYCACAEQQFHDQELEAYhABAHGiACKAIYIQFByLIFQQA2AgAgARDoAUHIsgUoAgAhAUHIsgVBADYCACABQQFHDQJBABALIQAQBxogABCEAQALIANBADYCAEHIsgVBADYCAEH8ACAFIAEQBUHIsgUoAgAhAUHIsgVBADYCACABQQFGDQoMCAsQBiEAEAcaCyACEPYMDAkLQciyBUEANgIAQS1BHBANIQJByLIFKAIAIQNByLIFQQA2AgAgA0EBRg0HQciyBUEANgIAIAIgAUHc+AIQoAQhAUHIsgUoAgAhA0HIsgVBADYCAAJAIANBAUcEQCACQgA3AQ4gAkGA0QI2AgAgAkIANwEUQciyBUEANgIAQZDRAigCACACQQEQBUHIsgUoAgAhA0HIsgVBADYCAAJAIANBAUcEQEHIsgVBADYCAEGEAiACQRBqQQAQFSEDQciyBSgCACEEQciyBUEANgIAIARBAUcNAQsQBiEAEAcaIAIoAhghAUHIsgVBADYCACABEOgBQciyBSgCACEBQciyBUEANgIAIAFBAUcNAkEAEAshABAHGiAAEIQBAAsgA0EANgIAQciyBUEANgIAQfwAIAUgARAFQciyBSgCACEBQciyBUEANgIAIAFBAUYNCQwHCxAGIQAQBxoLIAIQ9gwMCAtByLIFQQA2AgBBLUEcEA0hAkHIsgUoAgAhA0HIsgVBADYCACADQQFGDQZByLIFQQA2AgAgAiABQeX4AhCgBCEBQciyBSgCACEDQciyBUEANgIAAkAgA0EBRwRAIAJBADYCGCACQgA3AhAgAkHgzgI2AgBByLIFQQA2AgBB8M4CKAIAIAJBARAFQciyBSgCACEDQciyBUEANgIAAkAgA0EBRwRAQciyBUEANgIAQfsAIAJBEGpBABAVIQNByLIFKAIAIQRByLIFQQA2AgAgBEEBRw0BCxAGIQAQBxogAigCGCEBQciyBUEANgIAIAEQ6AFByLIFKAIAIQFByLIFQQA2AgAgAUEBRw0CQQAQCyEAEAcaIAAQhAEACyADQQA2AgBByLIFQQA2AgBB/AAgBSABEAVByLIFKAIAIQFByLIFQQA2AgAgAUEBRg0IDAYLEAYhABAHGgsgAhD2DAwHC0HIsgVBADYCAEEtQRwQDSECQciyBSgCACEDQciyBUEANgIAIANBAUYNBUHIsgVBADYCACACIAFB8PgCEKAEIQFByLIFKAIAIQNByLIFQQA2AgACQCADQQFHBEAgAkEANgIYIAJCADcCECACQeDOAjYCAEHIsgVBADYCAEHwzgIoAgAgAkEBEAVByLIFKAIAIQNByLIFQQA2AgACQCADQQFHBEBByLIFQQA2AgBB+wAgAkEQakEAEBUhA0HIsgUoAgAhBEHIsgVBADYCACAEQQFHDQELEAYhABAHGiACKAIYIQFByLIFQQA2AgAgARDoAUHIsgUoAgAhAUHIsgVBADYCACABQQFHDQJBABALIQAQBxogABCEAQALIANBADYCAEHIsgVBADYCAEH8ACAFIAEQBUHIsgUoAgAhAUHIsgVBADYCACABQQFGDQcMBQsQBiEAEAcaCyACEPYMDAYLQciyBUEANgIAQS1BHBANIQJByLIFKAIAIQNByLIFQQA2AgAgA0EBRg0EQciyBUEANgIAIAIgAUH6+AIQoAQhAUHIsgUoAgAhA0HIsgVBADYCAAJAIANBAUcEQCACQQA2AhggAkIANwIQIAJB4M4CNgIAQciyBUEANgIAQfDOAigCACACQQEQBUHIsgUoAgAhA0HIsgVBADYCAAJAIANBAUcEQEHIsgVBADYCAEH7ACACQRBqQQAQFSEDQciyBSgCACEEQciyBUEANgIAIARBAUcNAQsQBiEAEAcaIAIoAhghAUHIsgVBADYCACABEOgBQciyBSgCACEBQciyBUEANgIAIAFBAUcNAkEAEAshABAHGiAAEIQBAAsgA0EANgIAQciyBUEANgIAQfwAIAUgARAFQciyBSgCACEBQciyBUEANgIAIAFBAUYNBgwECxAGIQAQBxoLIAIQ9gwMBQtByLIFQQA2AgBBLUEcEA0hAkHIsgUoAgAhA0HIsgVBADYCACADQQFGDQNByLIFQQA2AgAgAiABQYT5AhCgBCEBQciyBSgCACEDQciyBUEANgIAAkAgA0EBRwRAIAJBADYCGCACQgA3AhAgAkHgzgI2AgBByLIFQQA2AgBB8M4CKAIAIAJBARAFQciyBSgCACEDQciyBUEANgIAAkAgA0EBRwRAQciyBUEANgIAQfsAIAJBEGpBABAVIQNByLIFKAIAIQRByLIFQQA2AgAgBEEBRw0BCxAGIQAQBxogAigCGCEBQciyBUEANgIAIAEQ6AFByLIFKAIAIQFByLIFQQA2AgAgAUEBRw0CQQAQCyEAEAcaIAAQhAEACyADQQA2AgBByLIFQQA2AgBB/AAgBSABEAVByLIFKAIAIQFByLIFQQA2AgAgAUEBRg0FDAMLEAYhABAHGgsgAhD2DAwECyADQQA2AgBByLIFQQA2AgBB/AAgBSABEAVByLIFKAIAIQFByLIFQQA2AgAgAUEBRg0CCyAADwsQBiEAEAcaIAIQ9gwMAQsQBiEAEAcaCyAFEKYDGiAAEAgAC80BAQN/IAAgAUEAEKUDIQMgAEGY+QI2AgBByLIFQQA2AgBBLUEwEA0hAkHIsgUoAgAhBEHIsgVBADYCAAJAAkACQCAEQQFHBEBByLIFQQA2AgBB4AAgAiABQbT5AkEAQQAQEBpByLIFKAIAIQFByLIFQQA2AgAgAUEBRg0BQciyBUEANgIAQfwAIAMgAhAFQciyBSgCACEBQciyBUEANgIAIAFBAUcNAwsQBiEAEAcaDAELEAYhABAHGiACEPYMCyADEKYDGiAAEAgACyAAC+4BAAJAAkACQAJAIAJBf2oiAEHCAEsNAAJAIABBBGsOPAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQALQTAQ/gshAEHIsgVBADYCAEGHASAAIAEgAhAUGkHIsgUoAgAhAkHIsgVBADYCACACQQFHDQEQBiECEAcaDAMLQTAQ/gshAEHIsgVBADYCAEHMBCAAIAEQFRpByLIFKAIAIQFByLIFQQA2AgAgAUEBRg0BIAAgAjoACAsgAA8LEAYhAhAHGgsgABD2DCACEAgACw0AIAAQ0AQaIAAQ9gwLlwEAIAAgASACEJIFGiAAQQA2AqwCIABCADcCpAIgAEGQ+wI2AgAgAEIANwKEAiAAQgA3AowCIABCADcClAIgAEIANwO4AiAAQgA3A8ACIABCADcDyAIgAEIANwPQAiAAQgA3A9gCIABCADcD4AIgAEIANwPoAiAAQQA2AvACIABCADcD+AIgAEIANwOAAyAAQQA2AogDIAALowEBAX8gAEGQ+wI2AgAgACgCpAIiAQRAIAEgASgCACgCBBEBAAsgAEEANgKkAiAAKAKoAiEBQciyBUEANgIAIAEQ6AFByLIFKAIAIQFByLIFQQA2AgAgAUEBRwRAIABBADYCqAIgACgCuAIiAQRAIAEgASgCACgCBBEBAAsgAEEANgK4AiAAEJUFGiAADwtBABALIQEQBxogABCVBRogARCEAQALpgEBAX8gAEGQ+wI2AgAgACgCpAIiAQRAIAEgASgCACgCBBEBAAsgAEEANgKkAiAAKAKoAiEBQciyBUEANgIAIAEQ6AFByLIFKAIAIQFByLIFQQA2AgAgAUEBRwRAIABBADYCqAIgACgCuAIiAQRAIAEgASgCACgCBBEBAAsgAEEANgK4AiAAEJUFGiAAEPYMDwtBABALIQEQBxogABCVBRogARCEAQAL2gEAAkAgACgCvAJFDQAgACgC5AIgACgC3AJBEGpBABCxAS8BAEEAEN0BIAAoAsgCQRBqQQAQqQEpAwBQRQRAIAAoAugCIAAoAsQCQRBqQQAQqQEpAwAgACgCyAJBEGpBABCpASkDAICnQf//A3FBABDdAQsgACgC7AIgACgC0AJBEGpBABCxASgCAEEDdEEAENcBIAAQpwVQDQAgACgC8AIgACgCxAJBEGpBABCpASkDACAAKAJsQRBqQQAQsQEoAgCtfkIDhiAAEKcFgKdBABDXAQsgAEEAEKMFC60CAQV/AkAgASgCBCABLQALIgAgAEEYdEEYdSIHQQBIGyIFIAIoAgQgAi0ACyIAIABBGHRBGHUiA0EASBsiBk8EQCAGRQ0BQQAhACACKAIAIAIgA0EASBshBSABKAIAIAEgB0EASBshAwNAIAAgA2osAAAQ/wVBGHRBGHUiASAAIAVqLAAAEP8FQRh0QRh1IgJIIAQgASACTHFyIQQgASACRw0CIABBAWoiACAGRw0AC0EADwsgBUUEQEEBDwtBACEAIAIoAgAgAiADQQBIGyEDIAEoAgAgASAHQQBIGyEGA0AgACAGaiwAABD/BUEYdEEYdSIBIAAgA2osAAAQ/wVBGHRBGHUiAkggBCABIAJMcXIhBCABIAJHDQEgAEEBaiIAIAVHDQALQQEPCyAEC+4BAQN/IABBADsBBCAAQdD7AjYCACAAQdT9AjYCCCAAQcj8AjYCECAAQfgAaiICQej9AjYCACAAQQA2AgxByLIFQQA2AgBBKSACIABBFGoiARAFQciyBSgCACEDQciyBUEANgIAAkAgA0EBRwRAIABB3PwCNgJ4IABBtPwCNgIIIABByPwCNgIQIABCgICAgHA3AsABQciyBUEANgIAQdUEIAEQDRpByLIFKAIAIQFByLIFQQA2AgAgAUEBRgRAEAYhARAHGgwCCyAAQgA3AsgBIABBADYC0AEgAA8LEAYhARAHGgsgAhDcBiABEAgAC/YCAQZ/IwBBEGsiAiQAIAAQ4gYhBSAAQgA3AjQgAEEANgIoIABCADcCICAAQdz+AjYCACAAQgA3AjwgAEIANwJEIABCADcCTCAAQgA3AlQgAEIANwBbIAJBCGogAEEEaiIGENsKIQFByLIFQQA2AgBB1gQgAUG8tAUQFSEDQciyBSgCACEEQciyBUEANgIAAkACQAJAIARBAUcEQCABEPcHIAMEQCACIAYQ2wohAUHIsgVBADYCAEE2IAFBvLQFEBUhA0HIsgUoAgAhBEHIsgVBADYCACAEQQFGDQIgACADNgJEIAEQ9wcgACAAKAJEIgEgASgCACgCHBEAADoAYgsgACgCACgCDCEBQciyBUEANgIAIAEgAEEAQYAgEBQaQciyBSgCACEBQciyBUEANgIAIAFBAUcNAhAGIQAQBxoMAwtBABALIQAQBxogABCEAQALEAYhABAHGiABEPcHDAELIAJBEGokACAADwsgBRDgBhogABAIAAuYAgEEfyAAAn8gAkF+aiICQQFLBEBBDCEDQQAMAQsgAkEBawR/QRwFQTwLIQNBAQs6AAUgAEEBOgAEAn8gASwAC0F/TARAIAEoAgAMAQsgAQshBCAAQQhqIQICQAJAIAAoAlQNAAJAIANBdGoiBkEQSwRAIANBPEcNAkHX/wIhBQwBC0HQ/wIhBQJAIAZBAWsOEAICAgICAgICAgICAgICAgABC0HT/wIhBQsgACAEIAUQmAYiBDYCVCAERQ0AIAAgAzYCbCACIAAoAghBdGooAgBqQQAQkwcMAQsgAiACKAIAQXRqKAIAaiIDIAMoAhBBBHIQkwcLIABByAFqIAEQigwgAiAAKAIIQXRqKAIAai0AEEEFcUEARwuoAgEFfyMAQSBrIgQkACAALQAEBEAgAEEIaiABEJYHCyAALQAFBEAgBEEYaiAAQRBqIgIQgwchBQJAIAIgAigCAEF0aigCAGoiAy0AEEEFcQ0AIAMoAhgiAygCACgCECEGQciyBUEANgIAIAYgBEEIaiADIAFBEBC2DUHIsgUoAgAhA0HIsgVBADYCAAJAIANBAUcEQCAEKQMQQn9SDQIgAiACKAIAQXRqKAIAaiICKAIQIQNByLIFQQA2AgBBOCACIANBBHIQBUHIsgUoAgAhAkHIsgVBADYCACACQQFHDQIQBiEAEAcaDAELEAYhABAHGgsgBRCFByAAEAgACyAFEIUHCyAAKAIIQXRqKAIAIABBCGpqLQAQIQAgBEEgaiQAIABBBXFBAEcLPQEBfyAAQQhqIgUgASACpxCRB0EBIQEgBSAAKAIIQXRqKAIAai0AEEEFcQR/IAEFIAMgADQCDDcDAEEACws5ACAAQRBqIAEgAqcQsgdBASEBIAAoAghBdGooAgAgAEEIamotABBBBXEEfyABBSADIAI3AwBBAAsLwQEBBX8gAEEIaiEBAkACQCAAKAJUIgIEQCAAQRRqIgQoAgAoAhghA0HIsgVBADYCACADIAQQDSEDQciyBSgCACEFQciyBUEANgIAIAVBAUYNAiACEJQGIQIgAEEANgJUIARBAEEAIAAoAhQoAgwRBAAaIAIgA3JFDQELIAEgASgCAEF0aigCAGoiACAAKAIQQQRyEJMHCyABIAEoAgBBdGooAgBqLQAQQQVxQQBHDwsQBiEAEAcaIAIQlAYaIAAQCAALhAEBAn8jAEEQayICJAAgAiAAQcgBahCHDCEAQciyBUEANgIAQdcEIAAgARAVIQFByLIFKAIAIQNByLIFQQA2AgAgA0EBRwRAIAAsAAtBf0wEQCAAKAIAEPYMCyACQRBqJAAgAQ8LEAYhAhAHGiAALAALQX9MBEAgACgCABD2DAsgAhAIAAtLAQJ/QdQBEP4LIQBByLIFQQA2AgBB2AQgABANGkHIsgUoAgAhAUHIsgVBADYCACABQQFHBEAgAA8LEAYhARAHGiAAEPYMIAEQCAALUwEBfyAAQdD7AjYCACAALADTAUF/TARAIAAoAsgBEPYMCyAAQbT8AjYCCCAAQfgAaiIBQdz8AjYCACAAQcj8AjYCECAAQRRqENMFGiABENwGIAALpgIBAn8gAEHc/gI2AgACQAJAIAAoAkAiAUUNAEHIsgVBADYCAEHZBCAAEA0aQciyBSgCACECQciyBUEANgIAAkAgAkEBRwRAIAEQlAYaIABBADYCQCAAKAIAKAIMIQFByLIFQQA2AgAgASAAQQBBABAUGkHIsgUoAgAhAUHIsgVBADYCACABQQFHDQJBABALIQIQBxoMAQtBABALIQIQBxogARCUBhoLIAIQDBpByLIFQQA2AgBBOhAKQciyBSgCACEBQciyBUEANgIAIAFBAUYNAQsCQCAALQBgRQ0AIAAoAiAiAUUNACABEPYMCwJAIAAtAGFFDQAgACgCOCIBRQ0AIAEQ9gwLIAAQ4AYaIAAPC0EAEAshARAHGiAAEOAGGiABEIQBAAtWAQF/IABB0PsCNgIAIAAsANMBQX9MBEAgACgCyAEQ9gwLIABBtPwCNgIIIABB+ABqIgFB3PwCNgIAIABByPwCNgIQIABBFGoQ0wUaIAEQ3AYgABD2DAsxACAAQdz8AjYCcCAAQbT8AjYCACAAQcj8AjYCCCAAQQxqENMFGiAAQfAAahDcBiAACzoBAn8gAEHI/AI2AgAgAEHoAGoiAUHc/AI2AgAgAEF4aiICQbT8AjYCACAAQQRqENMFGiABENwGIAILPwAgACAAKAIAQXRqKAIAaiIAQdz8AjYCcCAAQbT8AjYCACAAQcj8AjYCCCAAQQxqENMFGiAAQfAAahDcBiAACzQAIABB3PwCNgJwIABBtPwCNgIAIABByPwCNgIIIABBDGoQ0wUaIABB8ABqENwGIAAQ9gwLPQECfyAAQcj8AjYCACAAQegAaiIBQdz8AjYCACAAQXhqIgJBtPwCNgIAIABBBGoQ0wUaIAEQ3AYgAhD2DAtCACAAIAAoAgBBdGooAgBqIgBB3PwCNgJwIABBtPwCNgIAIABByPwCNgIIIABBDGoQ0wUaIABB8ABqENwGIAAQ9gwL6wMCBX8BfiMAQRBrIgQkAAJAIAAoAkBFDQACQCAAKAJEIgIEQAJAIAAoAlwiAUEQcQRAIAAoAhggACgCFEcEQEF/IQMgAEF/IAAoAgAoAjQRAwBBf0YNBQsgAEHIAGohBQNAIAAoAkQiASAFIAAoAiAiAiACIAAoAjRqIARBDGogASgCACgCFBEIACECQX8hAyAAKAIgIgEgBCgCDCABayIBIAAoAkAQhg0gAUcNBSACQQFGDQALIAJBAkYNBCAAKAJAEMMGRQ0BDAQLIAFBCHFFDQAgBCAAKQJQNwMAAn8gAC0AYgRAIAAoAhAgACgCDGusIQZBAAwBCyACIAIoAgAoAhgRAAAhASAAKAIoIAAoAiQiAmusIQYgAUEBTgRAIAAoAhAgACgCDGsgAWysIAZ8IQZBAAwBC0EAIAAoAgwiASAAKAIQRg0AGiAAKAJEIgMgBCAAKAIgIAIgASAAKAIIayADKAIAKAIgEQgAIQEgACgCJCABayAAKAIga6wgBnwhBkEBCyEBIAAoAkBCACAGfUEBEJMGDQIgAQRAIAAgBCkDADcCSAsgAEEANgJcIABBADYCECAAQgA3AgggACAAKAIgIgE2AiggACABNgIkC0EAIQMMAgsQ4AUAC0F/IQMLIARBEGokACADCwoAIAAQ0wUQ9gwLlQIBAX8gACAAKAIAKAIYEQAAGiAAIAFBvLQFEPwHIgE2AkQgAC0AYiECIAAgASABKAIAKAIcEQAAIgE6AGIgASACRwRAIABCADcCCCAAQgA3AhggAEIANwIQIAAtAGAhAiABBEACQCACRQ0AIAAoAiAiAUUNACABEPYMCyAAIAAtAGE6AGAgACAAKAI8NgI0IAAoAjghASAAQgA3AjggACABNgIgIABBADoAYQ8LAkAgAg0AIAAoAiAiASAAQSxqRg0AIABBADoAYSAAIAE2AjggACAAKAI0IgE2AjwgARD+CyEBIABBAToAYCAAIAE2AiAPCyAAIAAoAjQiATYCPCABEP4LIQEgAEEBOgBhIAAgATYCOAsLiQIBAn8gAEIANwIIIABCADcCGCAAQgA3AhACQCAALQBgRQ0AIAAoAiAiA0UNACADEPYMCwJAIAAtAGFFDQAgACgCOCIDRQ0AIAMQ9gwLIAAgAjYCNCAAAn8CQAJAIAJBCU8EQCAALQBiIQMCQCABRQ0AIANB/wFxRQ0AIABBADoAYCAAIAE2AiAMAwsgAhD+CyEEIABBAToAYCAAIAQ2AiAMAQsgAEEAOgBgIABBCDYCNCAAIABBLGo2AiAgAC0AYiEDCyADQf8BcQ0AIAAgAkEIIAJBCEobIgM2AjxBACABDQEaIAMQ/gshAUEBDAELQQAhASAAQQA2AjxBAAs6AGEgACABNgI4IAALpQEBAn4gASgCRCIEBEAgBCAEKAIAKAIYEQAAIQRCfyEFAkAgASgCQEUNACACUEVBACAEQQFIGw0AIAEgASgCACgCGBEAAA0AIANBAksNACABKAJAIASsIAJ+QgAgBEEAShsgAxCTBg0AAn4gASgCQCIDKAJMQX9MBEAgAxDCBgwBCyADEMIGCyEFIAEpAkghBgsgACAFNwMIIAAgBjcDAA8LEOAFAAslAQJ/QQQQDiIAIgEQ/wsaIAFB9PgDNgIAIABBsPkDQdoEEBEAC2sAAkAgASgCQARAIAEgASgCACgCGBEAAEUNAQsgAEJ/NwMIIABCADcDAA8LIAEoAkAgAikDCEEAEJMGBEAgAEJ/NwMIIABCADcDAA8LIAEgAikDADcCSCAAIAIpAwg3AwggACACKQMANwMAC7IFAQV/IwBBEGsiBCQAAkACQCAAKAJARQRAQX8hAQwBCwJ/IAAtAFxBCHEEQCAAKAIMIQFBAAwBCyAAQQA2AhwgAEIANwIUIABBNEE8IAAtAGIiARtqKAIAIQMgAEEgQTggARtqKAIAIQEgAEEINgJcIAAgATYCCCAAIAEgA2oiATYCECAAIAE2AgxBAQshAyABRQRAIAAgBEEQaiIBNgIQIAAgATYCDCAAIARBD2o2AggLAn8gAwRAIAAoAhAhAkEADAELIAAoAhAiAiAAKAIIa0ECbSIDQQQgA0EESRsLIQMCfyABIAJGBEAgACgCCCABIANrIAMQgg0gAC0AYgRAQX8gACgCCCIBIANqIAAoAhAgA2sgAWsgACgCQBCbBiICRQ0CGiAAIAAoAgggA2oiATYCDCAAIAEgAmo2AhAgAS0AAAwCCyAAKAIoIgIgACgCJCIBRwRAIAAoAiAgASACIAFrEIINIAAoAighAiAAKAIkIQELIAAgACgCICIFIAIgAWtqIgE2AiQgACAAQSxqIAVGBH9BCAUgACgCNAsgBWoiAjYCKCAAIAApAkg3AlBBfyABIAIgAWsiAiAAKAI8IANrIgUgAiAFSRsgACgCQBCbBiICRQ0BGiAAKAJEIgFFDQMgACAAKAIkIAJqIgI2AiggASAAQcgAaiAAKAIgIAIgAEEkaiAAKAIIIgUgA2ogBSAAKAI8aiAEQQhqIAEoAgAoAhARDgBBA0YEQCAAIAAoAig2AhAgACAAKAIgIgE2AgwgACABNgIIIAEtAAAMAgtBfyAEKAIIIgIgACgCCCADaiIBRg0BGiAAIAI2AhAgACABNgIMIAEtAAAMAQsgAS0AAAshASAAKAIIIARBD2pHDQAgAEEANgIQIABCADcCCAsgBEEQaiQAIAEPCxDgBQALbQECf0F/IQICQCAAKAJARQ0AIAAoAgggACgCDCIDTw0AIAFBf0YEQCAAIANBf2o2AgxBAA8LIAAtAFhBEHFFBEAgA0F/ai0AACABQf8BcUcNAQsgACADQX9qIgI2AgwgAiABOgAAIAEhAgsgAgvPBAEIfyMAQRBrIgQkAAJ/AkAgACgCQEUNAAJAIAAtAFxBEHEEQCAAKAIUIQUgACgCHCEHDAELIABBADYCECAAQgA3AggCQCAAKAI0IgJBCU8EQCAALQBiBEAgACAAKAIgIgU2AhggACAFNgIUIAAgAiAFakF/aiIHNgIcDAILIAAgACgCOCIFNgIYIAAgBTYCFCAAIAUgACgCPGpBf2oiBzYCHAwBCyAAQQA2AhwgAEIANwIUCyAAQRA2AlwLIAAoAhghAiABQX9GBH8gBQUgAgR/IAIFIAAgBEEQajYCHCAAIARBD2o2AhQgACAEQQ9qNgIYIARBD2oLIAE6AAAgACAAKAIYQQFqIgI2AhggACgCFAshAyACIANHBEACQCAALQBiBEBBfyADIAIgA2siAiAAKAJAEIYNIAJHDQQaDAELIAQgACgCICIGNgIIAkAgACgCRCIIRQ0AIABByABqIQkDQCAIIAkgAyACIARBBGogBiAGIAAoAjRqIARBCGogCCgCACgCDBEOACECIAAoAhQiAyAEKAIERg0EIAJBA0YEQCADIAAoAhggA2siAiAAKAJAEIYNIAJHDQUMAwsgAkEBSw0EIAAoAiAiAyAEKAIIIANrIgMgACgCQBCGDSADRw0EIAJBAUcNAiAAIAQoAgQiAzYCFCAAIAAoAhgiAjYCHCAAKAJEIghFDQEgACgCICEGDAAACwALEOAFAAsgACAHNgIcIAAgBTYCFCAAIAU2AhgLQQAgASABQX9GGwwBC0F/CyEGIARBEGokACAGC/ABAQF/IABB5P8CNgIAQciyBUEANgIAQZYDIABBBGogARAVIQFByLIFKAIAIQRByLIFQQA2AgACQCAEQQFHBEAgAEIANwMYIAAgAjYCFCAAQQA6ABAgAEIANwMgIANFBEBByLIFQQA2AgBB+AQQGyEDQciyBSgCACECQciyBUEANgIAIAJBAUYNAgsgACAAQSBqNgI8IAAgAEEYajYCOCAAIABBFGo2AjQgACAAQRBqNgIwIAAgATYCLCAAIAM2AiggAA8LEAYhABAHGiAAEAgACxAGIQAQBxogASwAC0F/TARAIAEoAgAQ9gwLIAAQCAALpAEBAn8gAEHk/wI2AgACQAJAIAAtABBFDQAgACgCKCIBKAIAKAIYIQJByLIFQQA2AgAgAiABEA0hAUHIsgUoAgAhAkHIsgVBADYCACACQQFGDQEgAQ0AIABBADoAEAsgACgCKCIBBEAgASABKAIAKAIEEQEACyAALAAPQX9MBEAgACgCBBD2DAsgAA8LQQAQCyEBEAcaIABBBGoQiQwaIAEQhAEAC6cBAQJ/IABB5P8CNgIAAkACQCAALQAQRQ0AIAAoAigiASgCACgCGCECQciyBUEANgIAIAIgARANIQFByLIFKAIAIQJByLIFQQA2AgAgAkEBRg0BIAENACAAQQA6ABALIAAoAigiAQRAIAEgASgCACgCBBEBAAsgACwAD0F/TARAIAAoAgQQ9gwLIAAQ9gwPC0EAEAshARAHGiAAQQRqEIkMGiABEIQBAAuOAgEDfyMAQRBrIgQkAEEBIQMCQAJAIAAtABANAAJ/IAEsAAsiA0F/TARAIAEoAgQMAQsgA0H/AXELBEAgAEEEaiABEIoMCyACBEAgACACNgIUCyAAKAIoIQEgBCAAQQRqEIcMIQMgACgCFCECIAEoAgAoAgghBUHIsgVBADYCACAFIAEgAyACEBQhAUHIsgUoAgAhAkHIsgVBADYCACACQQFGDQEgAywAC0F/TARAIAMoAgAQ9gwLQQEhAyABDQAgACgCKCIBIABBGGogASgCACgCHBEDAA0AIABBAToAEEEAIQMLIARBEGokACADDwsQBiEAEAcaIAMsAAtBf0wEQCADKAIAEPYMCyAAEAgACzYBAn9BASECAkAgAC0AEEUNACAAKAIoIgMgASADKAIAKAIMERMADQAgACABNwMgQQAhAgsgAgtfAQJ/IANCADcDAEEBIQUCQCAALQAQRQ0AIAAoAigiBiABIAIgAyAEIAYoAgAoAhAREAANACAAIAApAyAgAykDAHwiAjcDIEEAIQUgAiAAKQMYVw0AIAAgAjcDGAsgBQtfAQJ/IANCADcDAEEBIQUCQCAALQAQRQ0AIAAoAigiBiABIAIgAyAEIAYoAgAoAhQREAANACAAIAApAyAgAykDAHwiAjcDIEEAIQUgAiAAKQMYVw0AIAAgAjcDGAsgBQs1AQJ/IAAtABBFBEBBAA8LQQEhASAAKAIoIgIgAigCACgCGBEAAAR/IAEFIABBADoAEEEACwsiACAALQAQRQRAQQAPCyAAKAIoIgAgASAAKAIAKAIcEQMACzIAIABBADYCHCAAQYyAAzYCACAAIAEpAgA3AgQgACABKQIINwIMIAAgASkCEDcCFCAACz4BAX8gAkEAIAJBf2pBA0kbIQIgACgCBCEDIAAgASwAC0F/TAR/IAEoAgAFIAELIAIgAxEDACIBNgIcIAFFCxQAIAAoAhwgASAAKAIIERMAQQBHCxoAIAAoAhwgASACIAMgBCAAKAIMERAAQQBHCxoAIAAoAhwgASACIAMgBCAAKAIQERAAQQBHCxIAIAAoAhwgACgCFBEAAEEARwsUACAAKAIcIAEgACgCGBEDAEEARwtSAQJ/IwBB4ABrIgIkACABQgA3AwBBASEDIAAsAAtBf0wEfyAAKAIABSAACyACQQhqECYQigZFBEAgASACKQMwNwMAQQAhAwsgAkHgAGokACADCxkAQdupBSwAAEF/TARAQdCpBSgCABD2DAsLGQBB56kFLAAAQX9MBEBB3KkFKAIAEPYMCwsJAEGoqgUoAgALTQIBfwJ+IwBBEGsiACQAAn4gAEEIakEAECVFBEAgACgCDEHoB22sIQEgADQCCELoB34MAQsgAEIANwMIQgALIQIgAEEQaiQAIAEgAnwLHAAgAEEgckGff2pBGkkEf0EBBSAAEPsFQQBHCwsKACAAQVBqQQpJCwcAIAAQ+wULEwAgAEEgciAAIABBv39qQRpJGwsLACAAQWBqQd8ASQsUACAAQd8AcSAAIABBn39qQRpJGwsuAQJ/IwBBEGsiASQAIAFBDGogABD6DCECIAEoAgwhACABQRBqJABBACAAIAIbC2YBA38gAkUEQEEADwsCQCAALQAAIgNFDQADQAJAIAMgAS0AACIFRw0AIAJBf2oiAkUNACAFRQ0AIAFBAWohASAALQABIQMgAEEBaiEAIAMNAQwCCwsgAyEECyAEQf8BcSABLQAAawtDAQN/AkAgAkUNAANAIAAtAAAiBCABLQAAIgVGBEAgAUEBaiEBIABBAWohACACQX9qIgINAQwCCwsgBCAFayEDCyADC00BAn8gAS0AACECAkAgAC0AACIDRQ0AIAIgA0cNAANAIAEtAAEhAiAALQABIgNFDQEgAUEBaiEBIABBAWohACACIANGDQALCyADIAJrC+gBAQJ/IAJBAEchAwJAAkACQAJAIAJFDQAgAEEDcUUNACABQf8BcSEEA0AgAC0AACAERg0CIABBAWohACACQX9qIgJBAEchAyACRQ0BIABBA3ENAAsLIANFDQELIAAtAAAgAUH/AXFGDQECQCACQQRPBEAgAUH/AXFBgYKECGwhBANAIAAoAgAgBHMiA0F/cyADQf/9+3dqcUGAgYKEeHENAiAAQQRqIQAgAkF8aiICQQNLDQALCyACRQ0BCyABQf8BcSEDA0AgAC0AACADRg0CIABBAWohACACQX9qIgINAAsLQQAPCyAAC3MBA38CQCAALQAAIgJFDQADQCABLQAAIgRFBEAgAiEDDAILAkAgAiAERg0AIAIQ/QUgAS0AABD9BUYNACAALQAAIQMMAgsgAUEBaiEBIAAtAAEhAiAAQQFqIQAgAg0ACwsgA0H/AXEQ/QUgAS0AABD9BWsLGgAgACABEIkGIgBBACAALQAAIAFB/wFxRhsLyAEBAX8CQAJAIAAgAXNBA3ENACABQQNxBEADQCAAIAEtAAAiAjoAACACRQ0DIABBAWohACABQQFqIgFBA3ENAAsLIAEoAgAiAkF/cyACQf/9+3dqcUGAgYKEeHENAANAIAAgAjYCACABKAIEIQIgAEEEaiEAIAFBBGohASACQf/9+3dqIAJBf3NxQYCBgoR4cUUNAAsLIAAgAS0AACICOgAAIAJFDQADQCAAIAEtAAEiAjoAASAAQQFqIQAgAUEBaiEBIAINAAsLC/oBAQF/AkACQAJAIAAgAXNBA3ENACACQQBHIQMCQCACRQ0AIAFBA3FFDQADQCAAIAEtAAAiAzoAACADRQ0EIABBAWohACABQQFqIQEgAkF/aiICQQBHIQMgAkUNASABQQNxDQALCyADRQ0BIAEtAABFDQIgAkEESQ0AA0AgASgCACIDQX9zIANB//37d2pxQYCBgoR4cQ0BIAAgAzYCACAAQQRqIQAgAUEEaiEBIAJBfGoiAkEDSw0ACwsgAkUNAANAIAAgAS0AACIDOgAAIANFDQIgAEEBaiEAIAFBAWohASACQX9qIgINAAsLQQAhAgsgAEEAIAIQgQ0aC9sBAQJ/AkAgAUH/AXEiAwRAIABBA3EEQANAIAAtAAAiAkUNAyACIAFB/wFxRg0DIABBAWoiAEEDcQ0ACwsCQCAAKAIAIgJBf3MgAkH//ft3anFBgIGChHhxDQAgA0GBgoQIbCEDA0AgAiADcyICQX9zIAJB//37d2pxQYCBgoR4cQ0BIAAoAgQhAiAAQQRqIQAgAkH//ft3aiACQX9zcUGAgYKEeHFFDQALCwNAIAAiAi0AACIDBEAgAkEBaiEAIAMgAUH/AXFHDQELCyACDwsgABCIDSAAag8LIAALHAAgAEGBYE8Ef0GoqgVBACAAazYCAEF/BSAACwuOAQEDfwJAAkADQCAAIAJBwIEDai0AAEcEQEHXACEEIAJBAWoiAkHXAEcNAQwCCwsgAiEEIAINAEGgggMhAwwBC0GgggMhAgNAIAItAAAhACACQQFqIgMhAiAADQAgAyECIARBf2oiBA0ACwsgASgCFCIABH8gACgCACAAKAIEIAMQzwcFQQALIgAgAyAAGwsGAEGoqgULuwEBAn8jAEGgAWsiBCQAIARBCGpBsJADQZABEIANGgJAAkAgAUF/akH/////B08EQCABDQFBASEBIARBnwFqIQALIAQgADYCNCAEIAA2AhwgBEF+IABrIgUgASABIAVLGyIBNgI4IAQgACABaiIANgIkIAQgADYCGCAEQQhqIAIgAxCsBiEAIAFFDQEgBCgCHCIBIAEgBCgCGEZrQQA6AAAMAQtBqKoFQT02AgBBfyEACyAEQaABaiQAIAALNAEBfyAAKAIUIgMgASACIAAoAhAgA2siAyADIAJLGyIDEIANGiAAIAAoAhQgA2o2AhQgAguNAQECfyMAQaABayICJAAgAkEIakGwkANBkAEQgA0aIAIgADYCNCACIAA2AhwgAkF+IABrIgNB/////wdB/////wcgA0sbIgM2AjggAiAAIANqIgA2AiQgAiAANgIYIAJBCGpBnMcAIAEQrwYgAwRAIAIoAhwiAyADIAIoAhhGa0EAOgAACyACQaABaiQACw4AIABBqJoDKAIAEJEGC4YBAQF/IAEoAkxBAEgEQAJAIAEsAEsgAEH/AXFGDQAgASgCFCICIAEoAhBPDQAgASACQQFqNgIUIAIgADoAAA8LIAEgABCEDQ8LAkACQCABLABLIABB/wFxRg0AIAEoAhQiAiABKAIQTw0AIAEgAkEBajYCFCACIAA6AAAMAQsgASAAEIQNCwt9ACACQQFGBEAgASAAKAIIIAAoAgRrrH0hAQsCQCAAKAIUIAAoAhxLBEAgAEEAQQAgACgCJBEEABogACgCFEUNAQsgAEEANgIcIABCADcDECAAIAEgAiAAKAIoERsAQgBTDQAgAEIANwIEIAAgACgCAEFvcTYCAEEADwtBfwsgACAAKAJMQX9MBEAgACABIAIQkgYPCyAAIAEgAhCSBguXAQEEfyAAKAJMQQBOBH9BAQVBAAsaIAAoAgBBAXEiBEUEQCAAKAI0IgEEQCABIAAoAjg2AjgLIAAoAjgiAgRAIAIgATYCNAsgAEG4qgUoAgBGBEBBuKoFIAI2AgALCyAAEMMGIQMgACAAKAIMEQAAIQEgACgCYCICBEAgAhD2DAsgASADciEDIARFBEAgABD2DCADDwsgAwsqAQF/IwBBEGsiBCQAIAQgAzYCDCAAIAEgAiADEI0GIQMgBEEQaiQAIAMLCQAgACgCPBAqC8QCAQJ/IwBBIGsiAyQAAn8CQAJAQcCRAyABLAAAEIYGRQRAQaiqBUEcNgIADAELQZgJEPUMIgINAQtBAAwBCyACQQBBkAEQgQ0aIAFBKxCGBkUEQCACQQhBBCABLQAAQfIARhs2AgALAkAgAS0AAEHhAEcEQCACKAIAIQEMAQsgAEEDQQAQKCIBQYAIcUUEQCADIAFBgAhyNgIQIABBBCADQRBqECgaCyACIAIoAgBBgAFyIgE2AgALIAJB/wE6AEsgAkGACDYCMCACIAA2AjwgAiACQZgBajYCLAJAIAFBCHENACADIANBGGo2AgAgAEGTqAEgAxApDQAgAkEKOgBLCyACQYwFNgIoIAJBjQU2AiQgAkGOBTYCICACQY8FNgIMQeypBSgCAEUEQCACQX82AkwLIAIQyAYLIQIgA0EgaiQAIAILcQEDfyMAQRBrIgIkAAJAAkBBxJEDIAEsAAAQhgZFBEBBqKoFQRw2AgAMAQsgARDFBiEEIAJBtgM2AgAgACAEQYCAAnIgAhAnEIoGIgBBAEgNASAAIAEQlwYiAw0BIAAQKhoLQQAhAwsgAkEQaiQAIAMLIgEBfyMAQRBrIgIkACACIAE2AgwgACABEI8GIAJBEGokAAt8AQJ/IAAgAC0ASiIBQX9qIAFyOgBKIAAoAhQgACgCHEsEQCAAQQBBACAAKAIkEQQAGgsgAEEANgIcIABCADcDECAAKAIAIgFBBHEEQCAAIAFBIHI2AgBBfw8LIAAgACgCLCAAKAIwaiICNgIIIAAgAjYCBCABQRt0QR91C7QBAQN/IAIoAkxBAE4Ef0EBBSAFCxogAiACLQBKIgNBf2ogA3I6AEoCfyABIgUgAigCCCACKAIEIgRrIgNBAUgNABogACAEIAMgBSADIAVJGyIEEIANGiACIAIoAgQgBGo2AgQgACAEaiEAIAUgBGsLIgMEQANAAkAgAhCaBkUEQCACIAAgAyACKAIgEQQAIgRBAWpBAUsNAQsgBSADaw8LIAAgBGohACADIARrIgMNAAsLIAELVQECfyABIAAoAlQiAyADQQAgAkGAAmoiARCEBiIEIANrIAEgBBsiASACIAEgAkkbIgIQgA0aIAAgASADaiIBNgJUIAAgATYCCCAAIAIgA2o2AgQgAgtKAQF/IwBBkAFrIgMkACADQQBBkAEQgQ0iA0F/NgJMIAMgADYCLCADQZAFNgIgIAMgADYCVCADIAEgAhC8BiEAIANBkAFqJAAgAAsLACAAIAEgAhCcBgsoAQF/IwBBEGsiAyQAIAMgAjYCDCAAIAEgAhCdBiECIANBEGokACACC5QCAAJAIAAEfyABQf8ATQ0BAkBB1JAEKAIAKAIARQRAIAFBgH9xQYC/A0YNA0GoqgVBGTYCAAwBCyABQf8PTQRAIAAgAUE/cUGAAXI6AAEgACABQQZ2QcABcjoAAEECDwsgAUGAsANPQQAgAUGAQHFBgMADRxtFBEAgACABQT9xQYABcjoAAiAAIAFBDHZB4AFyOgAAIAAgAUEGdkE/cUGAAXI6AAFBAw8LIAFBgIB8akH//z9NBEAgACABQT9xQYABcjoAAyAAIAFBEnZB8AFyOgAAIAAgAUEGdkE/cUGAAXI6AAIgACABQQx2QT9xQYABcjoAAUEEDwtBqKoFQRk2AgALQX8FQQELDwsgACABOgAAQQELFAAgAEUEQEEADwsgACABQQAQoAYLfwIBfwF+IAC9IgNCNIinQf8PcSICQf8PRwR8IAJFBEAgASAARAAAAAAAAAAAYQR/QQAFIABEAAAAAAAA8EOiIAEQogYhACABKAIAQUBqCzYCACAADwsgASACQYJ4ajYCACADQv////////+HgH+DQoCAgICAgIDwP4S/BSAACwv8AgEDfyMAQdABayIFJAAgBSACNgLMAUEAIQIgBUGgAWpBAEEoEIENGiAFIAUoAswBNgLIAQJAQQAgASAFQcgBaiAFQdAAaiAFQaABaiADIAQQpAZBAEgEQEF/IQEMAQsgACgCTEEATgRAQQEhAgsgACgCACEGIAAsAEpBAEwEQCAAIAZBX3E2AgALIAZBIHEhBgJ/IAAoAjAEQCAAIAEgBUHIAWogBUHQAGogBUGgAWogAyAEEKQGDAELIABB0AA2AjAgACAFQdAAajYCECAAIAU2AhwgACAFNgIUIAAoAiwhByAAIAU2AiwgACABIAVByAFqIAVB0ABqIAVBoAFqIAMgBBCkBiIBIAdFDQAaIABBAEEAIAAoAiQRBAAaIABBADYCMCAAIAc2AiwgAEEANgIcIABBADYCECAAKAIUIQMgAEEANgIUIAFBfyADGwshASAAIAAoAgAiAyAGcjYCAEF/IAEgA0EgcRshASACRQ0ACyAFQdABaiQAIAEL2xECD38BfiMAQdAAayIHJAAgByABNgJMIAdBN2ohFSAHQThqIRJBACEBAkACQANAAkAgD0EASA0AIAFB/////wcgD2tKBEBBqKoFQT02AgBBfyEPDAELIAEgD2ohDwsgBygCTCIMIQECQAJAAkACfwJAAkACQAJAAkACQAJAAkACQCAMLQAAIggEQANAAkACQAJAIAhB/wFxIghFBEAgASEIDAELIAhBJUcNASABIQgDQCABLQABQSVHDQEgByABQQJqIgk2AkwgCEEBaiEIIAEtAAIhCiAJIQEgCkElRg0ACwsgCCAMayEBIAAEQCAAIAwgARClBgsgAQ0RQX8hEUEBIQggBygCTCwAARD7BSEJIAcoAkwhAQJAIAlFDQAgAS0AAkEkRw0AIAEsAAFBUGohEUEBIRNBAyEICyAHIAEgCGoiATYCTEEAIQgCQCABLAAAIhBBYGoiCkEfSwRAIAEhCQwBCyABIQlBASAKdCIKQYnRBHFFDQADQCAHIAFBAWoiCTYCTCAIIApyIQggASwAASIQQWBqIgpBH0sNASAJIQFBASAKdCIKQYnRBHENAAsLAkAgEEEqRgRAIAcCfwJAIAksAAEQ+wVFDQAgBygCTCIJLQACQSRHDQAgCSwAAUECdCAEakHAfmpBCjYCACAJLAABQQN0IANqQYB9aigCACENQQEhEyAJQQNqDAELIBMNFUEAIRNBACENIAAEQCACIAIoAgAiAUEEajYCACABKAIAIQ0LIAcoAkxBAWoLIgE2AkwgDUF/Sg0BQQAgDWshDSAIQYDAAHIhCAwBCyAHQcwAahCmBiINQQBIDRMgBygCTCEBC0F/IQsCQCABLQAAQS5HDQAgAS0AAUEqRgRAAkAgASwAAhD7BUUNACAHKAJMIgEtAANBJEcNACABLAACQQJ0IARqQcB+akEKNgIAIAEsAAJBA3QgA2pBgH1qKAIAIQsgByABQQRqIgE2AkwMAgsgEw0UIAAEfyACIAIoAgAiAUEEajYCACABKAIABUEACyELIAcgBygCTEECaiIBNgJMDAELIAcgAUEBajYCTCAHQcwAahCmBiELIAcoAkwhAQtBACEJA0AgCSEKQX8hDiABLAAAQb9/akE5Sw0UIAcgAUEBaiIQNgJMIAEsAAAhCSAQIQEgCSAKQTpsakGfkQNqLQAAIglBf2pBCEkNAAsgCUUNEwJAAkACQCAJQRNGBEAgEUF/TA0BDBcLIBFBAEgNASAEIBFBAnRqIAk2AgAgByADIBFBA3RqKQMANwNAC0EAIQEgAEUNEwwBCyAARQ0RIAdBQGsgCSACIAYQpwYgBygCTCEQCyAIQf//e3EiFCAIIAhBgMAAcRshCEEAIQ5ByJEDIREgEiEJIBBBf2osAAAiAUFfcSABIAFBD3FBA0YbIAEgChsiAUGof2oiEEEgTQ0BAkACfwJAAkAgAUG/f2oiCkEGSwRAIAFB0wBHDRQgC0UNASAHKAJADAMLIApBAWsOAxMBEwgLQQAhASAAQSAgDUEAIAgQqAYMAgsgB0EANgIMIAcgBykDQD4CCCAHIAdBCGo2AkBBfyELIAdBCGoLIQlBACEBAkADQCAJKAIAIgpFDQECQCAHQQRqIAoQoQYiCkEASCIMDQAgCiALIAFrSw0AIAlBBGohCSALIAEgCmoiAUsNAQwCCwtBfyEOIAwNFQsgAEEgIA0gASAIEKgGIAFFBEBBACEBDAELQQAhCiAHKAJAIQkDQCAJKAIAIgxFDQEgB0EEaiAMEKEGIgwgCmoiCiABSg0BIAAgB0EEaiAMEKUGIAlBBGohCSAKIAFJDQALCyAAQSAgDSABIAhBgMAAcxCoBiANIAEgDSABShshAQwRCyAHIAFBAWoiCTYCTCABLQABIQggCSEBDAELCyAQQQFrDh8MDAwMDAwMDAEMAwQBAQEMBAwMDAwIBQYMDAIMCQwMBwsgDyEOIAANDyATRQ0MQQEhAQNAIAQgAUECdGooAgAiCARAIAMgAUEDdGogCCACIAYQpwZBASEOIAFBAWoiAUEKRw0BDBELC0EBIQ4gAUEJSw0PA0AgASIIQQFqIgFBCkcEQCAEIAFBAnRqKAIARQ0BCwtBf0EBIAhBCUkbIQ4MDwsgACAHKwNAIA0gCyAIIAEgBREnACEBDAwLIAcoAkAiAUHSkQMgARsiDEEAIAsQhAYiASALIAxqIAEbIQkgFCEIIAEgDGsgCyABGyELDAkLIAcgBykDQDwAN0EBIQsgFSEMIBQhCAwICyAHKQNAIhZCf1cEQCAHQgAgFn0iFjcDQEEBIQ5ByJEDDAYLIAhBgBBxBEBBASEOQcmRAwwGC0HKkQNByJEDIAhBAXEiDhsMBQsgBykDQCASEKkGIQwgCEEIcUUNBSALIBIgDGsiAUEBaiALIAFKGyELDAULIAtBCCALQQhLGyELIAhBCHIhCEH4ACEBCyAHKQNAIBIgAUEgcRCqBiEMIAhBCHFFDQMgBykDQFANAyABQQR2QciRA2ohEUECIQ4MAwtBACEBIApB/wFxIghBB0sNBQJAAkACQAJAAkACQAJAIAhBAWsOBwECAwQMBQYACyAHKAJAIA82AgAMCwsgBygCQCAPNgIADAoLIAcoAkAgD6w3AwAMCQsgBygCQCAPOwEADAgLIAcoAkAgDzoAAAwHCyAHKAJAIA82AgAMBgsgBygCQCAPrDcDAAwFCyAHKQNAIRZByJEDCyERIBYgEhCrBiEMCyAIQf//e3EgCCALQX9KGyEIIAcpA0AhFgJ/AkAgCw0AIBZQRQ0AIBIhDEEADAELIAsgFlAgEiAMa2oiASALIAFKGwshCwsgAEEgIA4gCSAMayIKIAsgCyAKSBsiEGoiCSANIA0gCUgbIgEgCSAIEKgGIAAgESAOEKUGIABBMCABIAkgCEGAgARzEKgGIABBMCAQIApBABCoBiAAIAwgChClBiAAQSAgASAJIAhBgMAAcxCoBgwBCwtBACEODAELQX8hDgsgB0HQAGokACAOCxgAIAAtAABBIHFFBEAgASACIAAQhQ0aCwtEAQN/IAAoAgAsAAAQ+wUEQANAIAAoAgAiAiwAACEDIAAgAkEBajYCACADIAFBCmxqQVBqIQEgAiwAARD7BQ0ACwsgAQvGAgACQCABQRRLDQAgAUF3aiIBQQlLDQACQAJAAkACQAJAAkACQAJAAkACQCABQQFrDgkBAgMEBQYHCAkACyACIAIoAgAiAUEEajYCACAAIAEoAgA2AgAPCyACIAIoAgAiAUEEajYCACAAIAE0AgA3AwAPCyACIAIoAgAiAUEEajYCACAAIAE1AgA3AwAPCyACIAIoAgBBB2pBeHEiAUEIajYCACAAIAEpAwA3AwAPCyACIAIoAgAiAUEEajYCACAAIAEyAQA3AwAPCyACIAIoAgAiAUEEajYCACAAIAEzAQA3AwAPCyACIAIoAgAiAUEEajYCACAAIAEwAAA3AwAPCyACIAIoAgAiAUEEajYCACAAIAExAAA3AwAPCyACIAIoAgBBB2pBeHEiAUEIajYCACAAIAEpAwA3AwAPCyAAIAIgAxECAAsLbgEBfyMAQYACayIFJAACQCACIANMDQAgBEGAwARxDQAgBSABIAIgA2siAkGAAiACQYACSSIDGxCBDRogA0UEQANAIAAgBUGAAhClBiACQYB+aiICQf8BSw0ACwsgACAFIAIQpQYLIAVBgAJqJAALLQAgAFBFBEADQCABQX9qIgEgAKdBB3FBMHI6AAAgAEIDiCIAQgBSDQALCyABCzUAIABQRQRAA0AgAUF/aiIBIACnQQ9xQbCVA2otAAAgAnI6AAAgAEIEiCIAQgBSDQALCyABC4MBAgN/AX4CQCAAQoCAgIAQVARAIAAhBQwBCwNAIAFBf2oiASAAIABCCoAiBUIKfn2nQTByOgAAIABC/////58BViECIAUhACACDQALCyAFpyICBEADQCABQX9qIgEgAiACQQpuIgNBCmxrQTByOgAAIAJBCUshBCADIQIgBA0ACwsgAQsRACAAIAEgAkGRBUGSBRCjBgulFwMQfwJ+AXwjAEGwBGsiCiQAIApBADYCLAJ/IAG9IhZCf1cEQEEBIREgAZoiAb0hFkHAlQMMAQsgBEGAEHEEQEEBIRFBw5UDDAELQcaVA0HBlQMgBEEBcSIRGwshFQJAIBZCgICAgICAgPj/AINCgICAgICAgPj/AFEEQCAAQSAgAiARQQNqIgwgBEH//3txEKgGIAAgFSAREKUGIABB25UDQd+VAyAFQQV2QQFxIgYbQdOVA0HXlQMgBhsgASABYhtBAxClBiAAQSAgAiAMIARBgMAAcxCoBgwBCyAKQRBqIRACQAJ/AkAgASAKQSxqEKIGIgEgAaAiAUQAAAAAAAAAAGIEQCAKIAooAiwiBkF/ajYCLCAFQSByIhNB4QBHDQEMAwsgBUEgciITQeEARg0CIAooAiwhCEEGIAMgA0EASBsMAQsgCiAGQWNqIgg2AiwgAUQAAAAAAACwQaIhAUEGIAMgA0EASBsLIQsgCkEwaiAKQdACaiAIQQBIGyIOIQkDQCAJAn8gAUQAAAAAAADwQWMgAUQAAAAAAAAAAGZxBEAgAasMAQtBAAsiBjYCACAJQQRqIQkgASAGuKFEAAAAAGXNzUGiIgFEAAAAAAAAAABiDQALAkAgCEEBSARAIAkhBiAOIQcMAQsgDiEHA0AgCEEdIAhBHUgbIQgCQCAJQXxqIgYgB0kNACAIrSEXQgAhFgNAIAYgFkL/////D4MgBjUCACAXhnwiFiAWQoCU69wDgCIWQoCU69wDfn0+AgAgBkF8aiIGIAdPDQALIBanIgZFDQAgB0F8aiIHIAY2AgALA0AgCSIGIAdLBEAgBkF8aiIJKAIARQ0BCwsgCiAKKAIsIAhrIgg2AiwgBiEJIAhBAEoNAAsLIAhBf0wEQCALQRlqQQltQQFqIRIgE0HmAEYhFANAQQlBACAIayAIQXdIGyEMAkAgByAGTwRAIAcgB0EEaiAHKAIAGyEHDAELQYCU69wDIAx2IQ1BfyAMdEF/cyEPQQAhCCAHIQkDQCAJIAkoAgAiAyAMdiAIajYCACADIA9xIA1sIQggCUEEaiIJIAZJDQALIAcgB0EEaiAHKAIAGyEHIAhFDQAgBiAINgIAIAZBBGohBgsgCiAKKAIsIAxqIgg2AiwgDiAHIBQbIgkgEkECdGogBiAGIAlrQQJ1IBJKGyEGIAhBAEgNAAsLQQAhCQJAIAcgBk8NACAOIAdrQQJ1QQlsIQlBCiEIIAcoAgAiA0EKSQ0AA0AgCUEBaiEJIAMgCEEKbCIITw0ACwsgC0EAIAkgE0HmAEYbayATQecARiALQQBHcWsiCCAGIA5rQQJ1QQlsQXdqSARAIAhBgMgAaiIDQQltIg1BAnQgDmpBhGBqIQxBCiEIIAMgDUEJbGsiA0EHTARAA0AgCEEKbCEIIANBAWoiA0EIRw0ACwsCQEEAIAYgDEEEaiISRiAMKAIAIg0gDSAIbiIPIAhsayIDGw0ARAAAAAAAAOA/RAAAAAAAAPA/RAAAAAAAAPg/IAMgCEEBdiIURhtEAAAAAAAA+D8gBiASRhsgAyAUSRshGEQBAAAAAABAQ0QAAAAAAABAQyAPQQFxGyEBAkAgEUUNACAVLQAAQS1HDQAgGJohGCABmiEBCyAMIA0gA2siAzYCACABIBigIAFhDQAgDCADIAhqIgk2AgAgCUGAlOvcA08EQANAIAxBADYCACAMQXxqIgwgB0kEQCAHQXxqIgdBADYCAAsgDCAMKAIAQQFqIgk2AgAgCUH/k+vcA0sNAAsLIA4gB2tBAnVBCWwhCUEKIQggBygCACIDQQpJDQADQCAJQQFqIQkgAyAIQQpsIghPDQALCyAMQQRqIgggBiAGIAhLGyEGCwJ/A0BBACAGIgggB00NARogCEF8aiIGKAIARQ0AC0EBCyEUAkAgE0HnAEcEQCAEQQhxIQ8MAQsgCUF/c0F/IAtBASALGyIGIAlKIAlBe0pxIgMbIAZqIQtBf0F+IAMbIAVqIQUgBEEIcSIPDQBBCSEGAkAgFEUNACAIQXxqKAIAIgxFDQBBCiEDQQAhBiAMQQpwDQADQCAGQQFqIQYgDCADQQpsIgNwRQ0ACwsgCCAOa0ECdUEJbEF3aiEDIAVBX3FBxgBGBEBBACEPIAsgAyAGayIGQQAgBkEAShsiBiALIAZIGyELDAELQQAhDyALIAMgCWogBmsiBkEAIAZBAEobIgYgCyAGSBshCwsgCyAPciITQQBHIQMgAEEgIAICfyAJQQAgCUEAShsgBUFfcSINQcYARg0AGiAQIAkgCUEfdSIGaiAGc60gEBCrBiIGa0EBTARAA0AgBkF/aiIGQTA6AAAgECAGa0ECSA0ACwsgBkF+aiISIAU6AAAgBkF/akEtQSsgCUEASBs6AAAgECASawsgCyARaiADampBAWoiDCAEEKgGIAAgFSAREKUGIABBMCACIAwgBEGAgARzEKgGAkACQAJAIA1BxgBGBEAgCkEQakEIciENIApBEGpBCXIhCSAOIAcgByAOSxsiAyEHA0AgBzUCACAJEKsGIQYCQCADIAdHBEAgBiAKQRBqTQ0BA0AgBkF/aiIGQTA6AAAgBiAKQRBqSw0ACwwBCyAGIAlHDQAgCkEwOgAYIA0hBgsgACAGIAkgBmsQpQYgB0EEaiIHIA5NDQALIBMEQCAAQeOVA0EBEKUGCyAHIAhPDQEgC0EBSA0BA0AgBzUCACAJEKsGIgYgCkEQaksEQANAIAZBf2oiBkEwOgAAIAYgCkEQaksNAAsLIAAgBiALQQkgC0EJSBsQpQYgC0F3aiEGIAdBBGoiByAITw0DIAtBCUohAyAGIQsgAw0ACwwCCwJAIAtBAEgNACAIIAdBBGogFBshDSAKQRBqQQhyIQ4gCkEQakEJciEIIAchCQNAIAggCTUCACAIEKsGIgZGBEAgCkEwOgAYIA4hBgsCQCAHIAlHBEAgBiAKQRBqTQ0BA0AgBkF/aiIGQTA6AAAgBiAKQRBqSw0ACwwBCyAAIAZBARClBiAGQQFqIQYgD0VBACALQQFIGw0AIABB45UDQQEQpQYLIAAgBiAIIAZrIgMgCyALIANKGxClBiALIANrIQsgCUEEaiIJIA1PDQEgC0F/Sg0ACwsgAEEwIAtBEmpBEkEAEKgGIAAgEiAQIBJrEKUGDAILIAshBgsgAEEwIAZBCWpBCUEAEKgGCyAAQSAgAiAMIARBgMAAcxCoBgwBCyAVQQlqIBUgBUEgcSIJGyELAkAgA0ELSw0AQQwgA2siBkUNAEQAAAAAAAAgQCEYA0AgGEQAAAAAAAAwQKIhGCAGQX9qIgYNAAsgCy0AAEEtRgRAIBggAZogGKGgmiEBDAELIAEgGKAgGKEhAQsgECAKKAIsIgYgBkEfdSIGaiAGc60gEBCrBiIGRgRAIApBMDoADyAKQQ9qIQYLIBFBAnIhDyAKKAIsIQcgBkF+aiINIAVBD2o6AAAgBkF/akEtQSsgB0EASBs6AAAgBEEIcSEIIApBEGohBwNAIAciBgJ/IAGZRAAAAAAAAOBBYwRAIAGqDAELQYCAgIB4CyIHQbCVA2otAAAgCXI6AAAgASAHt6FEAAAAAAAAMECiIQECQCAGQQFqIgcgCkEQamtBAUcNAAJAIAgNACADQQBKDQAgAUQAAAAAAAAAAGENAQsgBkEuOgABIAZBAmohBwsgAUQAAAAAAAAAAGINAAsgAEEgIAIgDwJ/AkAgA0UNACAHIAprQW5qIANODQAgAyAQaiANa0ECagwBCyAQIApBEGprIA1rIAdqCyIGaiIMIAQQqAYgACALIA8QpQYgAEEwIAIgDCAEQYCABHMQqAYgACAKQRBqIAcgCkEQamsiBxClBiAAQTAgBiAHIBAgDWsiCWprQQBBABCoBiAAIA0gCRClBiAAQSAgAiAMIARBgMAAcxCoBgsgCkGwBGokACACIAwgDCACSBsLKQAgASABKAIAQQ9qQXBxIgFBEGo2AgAgACABKQMAIAEpAwgQ1wY5AwALEAAgACABIAJBAEEAEKMGGgvkAQEEfyMAQSBrIgMkACADIAE2AhAgAyACIAAoAjAiBEEAR2s2AhQgACgCLCEFIAMgBDYCHCADIAU2AhgCQAJAAn8gACgCPCADQRBqQQIgA0EMahArEMkGBEAgA0F/NgIMQX8MAQsgAygCDCIEQQBKDQEgBAshAiAAIAAoAgAgAkEwcUEQc3I2AgAMAQsgBCADKAIUIgZNBEAgBCECDAELIAAgACgCLCIFNgIEIAAgBSAEIAZrajYCCCAAKAIwRQ0AIAAgBUEBajYCBCABIAJqQX9qIAUtAAA6AAALIANBIGokACACCxAAIABBIEYgAEF3akEFSXILRgICfwF+IAAgATcDcCAAIAAoAggiAiAAKAIEIgNrrCIENwN4AkAgAVANACAEIAFXDQAgACADIAGnajYCaA8LIAAgAjYCaAvCAQIDfwF+AkACQCAAKQNwIgRQRQRAIAApA3ggBFkNAQsgABDBBiIDQX9KDQELIABBADYCaEF/DwsgACgCCCEBAkACQCAAKQNwIgRQDQAgBCAAKQN4Qn+FfCIEIAEgACgCBCICa6xZDQAgACACIASnajYCaAwBCyAAIAE2AmgLAkAgAUUEQCAAKAIEIQIMAQsgACAAKQN4IAEgACgCBCICa0EBaqx8NwN4CyACQX9qIgAtAAAgA0cEQCAAIAM6AAALIAML5QoCBX8EfiMAQRBrIgckAAJAAkACQAJAAkACQCABQSRNBEADQAJ/IAAoAgQiBCAAKAJoSQRAIAAgBEEBajYCBCAELQAADAELIAAQswYLIgQQsQYNAAsCQCAEQVVqIgVBAksNACAFQQFrRQ0AQX9BACAEQS1GGyEGIAAoAgQiBCAAKAJoSQRAIAAgBEEBajYCBCAELQAAIQQMAQsgABCzBiEECwJAAkAgAUFvcQ0AIARBMEcNAAJ/IAAoAgQiBCAAKAJoSQRAIAAgBEEBajYCBCAELQAADAELIAAQswYLIgRBX3FB2ABGBEBBECEBAn8gACgCBCIEIAAoAmhJBEAgACAEQQFqNgIEIAQtAAAMAQsgABCzBgsiBEHxlQNqLQAAQRBJDQUgACgCaEUEQEIAIQMgAg0KDAkLIAAgACgCBCIEQX9qNgIEIAJFDQggACAEQX5qNgIEQgAhAwwJCyABDQFBCCEBDAQLIAFBCiABGyIBIARB8ZUDai0AAEsNACAAKAJoBEAgACAAKAIEQX9qNgIEC0IAIQMgAEIAELIGQaiqBUEcNgIADAcLIAFBCkcNAiAEQVBqIgJBCU0EQEEAIQEDQCACIAFBCmxqIQECfyAAKAIEIgQgACgCaEkEQCAAIARBAWo2AgQgBC0AAAwBCyAAELMGCyIEQVBqIgJBCU1BACABQZmz5swBSRsNAAsgAa0hCQsgAkEJSw0BIAlCCn4hCiACrSELA0AgCiALfCEJAn8gACgCBCIEIAAoAmhJBEAgACAEQQFqNgIEIAQtAAAMAQsgABCzBgsiBEFQaiICQQlLDQIgCUKas+bMmbPmzBlaDQIgCUIKfiIKIAKtIgtCf4VYDQALQQohAQwDC0GoqgVBHDYCAEIAIQMMBQtBCiEBIAJBCU0NAQwCCyABIAFBf2pxBEAgASAEQfGVA2otAAAiAksEQEEAIQUDQCACIAEgBWxqIgVBxuPxOE1BACABAn8gACgCBCIEIAAoAmhJBEAgACAEQQFqNgIEIAQtAAAMAQsgABCzBgsiBEHxlQNqLQAAIgJLGw0ACyAFrSEJCyABIAJNDQEgAa0hCgNAIAkgCn4iCyACrUL/AYMiDEJ/hVYNAiALIAx8IQkgAQJ/IAAoAgQiBCAAKAJoSQRAIAAgBEEBajYCBCAELQAADAELIAAQswYLIgRB8ZUDai0AACICTQ0CIAcgCiAJENUGIAcpAwhQDQALDAELQn8gAUEXbEEFdkEHcUHxlwNqLAAAIgitIgqIIgsCfiABIARB8ZUDai0AACICSwRAQQAhBQNAIAIgBSAIdHIiBUH///8/TUEAIAECfyAAKAIEIgQgACgCaEkEQCAAIARBAWo2AgQgBC0AAAwBCyAAELMGCyIEQfGVA2otAAAiAksbDQALIAWtIQkLIAkLVA0AIAEgAk0NAANAIAKtQv8BgyAJIAqGhCEJAn8gACgCBCIEIAAoAmhJBEAgACAEQQFqNgIEIAQtAAAMAQsgABCzBgshBCAJIAtWDQEgASAEQfGVA2otAAAiAksNAAsLIAEgBEHxlQNqLQAATQ0AA0AgAQJ/IAAoAgQiBCAAKAJoSQRAIAAgBEEBajYCBCAELQAADAELIAAQswYLQfGVA2otAABLDQALQaiqBUHEADYCACAGQQAgA0IBg1AbIQYgAyEJCyAAKAJoBEAgACAAKAIEQX9qNgIECwJAIAkgA1QNAAJAIAOnQQFxDQAgBg0AQaiqBUHEADYCACADQn98IQMMAwsgCSADWA0AQaiqBUHEADYCAAwCCyAJIAasIgOFIAN9IQMMAQtCACEDIABCABCyBgsgB0EQaiQAIAML5QIBBn8jAEEQayIHJAAgA0GsqgUgAxsiBSgCACEDAkACQAJAIAFFBEAgAw0BDAMLQX4hBCACRQ0CIAAgB0EMaiAAGyEGAkAgAwRAIAIhAAwBCyABLQAAIgNBGHRBGHUiAEEATgRAIAYgAzYCACAAQQBHIQQMBAsgASwAACEAQdSQBCgCACgCAEUEQCAGIABB/78DcTYCAEEBIQQMBAsgAEH/AXFBvn5qIgNBMksNASADQQJ0QYCYA2ooAgAhAyACQX9qIgBFDQIgAUEBaiEBCyABLQAAIghBA3YiCUFwaiADQRp1IAlqckEHSw0AA0AgAEF/aiEAIAhBgH9qIANBBnRyIgNBAE4EQCAFQQA2AgAgBiADNgIAIAIgAGshBAwECyAARQ0CIAFBAWoiAS0AACIIQcABcUGAAUYNAAsLIAVBADYCAEGoqgVBGTYCAEF/IQQMAQsgBSADNgIACyAHQRBqJAAgBAs1ACAAIAE3AwAgACACQv///////z+DIARCMIinQYCAAnEgAkIwiKdB//8BcXKtQjCGhDcDCAvEAgEBfyMAQdAAayIEJAACQCADQYCAAU4EQCAEQSBqIAEgAkIAQoCAgICAgID//wAQ1AYgBCkDKCECIAQpAyAhASADQf//AUgEQCADQYGAf2ohAwwCCyAEQRBqIAEgAkIAQoCAgICAgID//wAQ1AYgA0H9/wIgA0H9/wJIG0GCgH5qIQMgBCkDGCECIAQpAxAhAQwBCyADQYGAf0oNACAEQUBrIAEgAkIAQoCAgICAgMAAENQGIAQpA0ghAiAEKQNAIQEgA0GDgH5KBEAgA0H+/wBqIQMMAQsgBEEwaiABIAJCAEKAgICAgIDAABDUBiADQYaAfSADQYaAfUobQfz/AWohAyAEKQM4IQIgBCkDMCEBCyAEIAEgAkIAIANB//8Aaq1CMIYQ1AYgACAEKQMINwMIIAAgBCkDADcDACAEQdAAaiQAC64IAgZ/An4jAEEwayIGJAACQCACQQJNBEAgAUEEaiEFIAJBAnQiAkGcmgNqKAIAIQggAkGQmgNqKAIAIQkDQAJ/IAEoAgQiAiABKAJoSQRAIAUgAkEBajYCACACLQAADAELIAEQswYLIgIQsQYNAAsCQCACQVVqIgRBAksEQEEBIQcMAQtBASEHIARBAWtFDQBBf0EBIAJBLUYbIQcgASgCBCICIAEoAmhJBEAgBSACQQFqNgIAIAItAAAhAgwBCyABELMGIQILQQAhBAJAAkADQCAEQcyZA2osAAAgAkEgckYEQAJAIARBBksNACABKAIEIgIgASgCaEkEQCAFIAJBAWo2AgAgAi0AACECDAELIAEQswYhAgsgBEEBaiIEQQhHDQEMAgsLIARBA0cEQCAEQQhGDQEgA0UNAiAEQQRJDQIgBEEIRg0BCyABKAJoIgEEQCAFIAUoAgBBf2o2AgALIANFDQAgBEEESQ0AA0AgAQRAIAUgBSgCAEF/ajYCAAsgBEF/aiIEQQNLDQALCyAGIAeyQwAAgH+UENAGIAYpAwghCiAGKQMAIQsMAgsCQAJAAkAgBA0AQQAhBANAIARB1ZkDaiwAACACQSByRw0BAkAgBEEBSw0AIAEoAgQiAiABKAJoSQRAIAUgAkEBajYCACACLQAAIQIMAQsgARCzBiECCyAEQQFqIgRBA0cNAAsMAQsCQAJAIARBA0sNACAEQQFrDgMAAAIBCyABKAJoBEAgBSAFKAIAQX9qNgIAC0GoqgVBHDYCAAwCCwJAIAJBMEcNAAJ/IAEoAgQiBCABKAJoSQRAIAUgBEEBajYCACAELQAADAELIAEQswYLQV9xQdgARgRAIAZBEGogASAJIAggByADELkGIAYpAxghCiAGKQMQIQsMBQsgASgCaEUNACAFIAUoAgBBf2o2AgALIAZBIGogASACIAkgCCAHIAMQugYgBikDKCEKIAYpAyAhCwwDCwJAAn8gASgCBCICIAEoAmhJBEAgBSACQQFqNgIAIAItAAAMAQsgARCzBgtBKEYEQEEBIQQMAQtCgICAgICA4P//ACEKIAEoAmhFDQMgBSAFKAIAQX9qNgIADAMLA0ACfyABKAIEIgIgASgCaEkEQCAFIAJBAWo2AgAgAi0AAAwBCyABELMGCyICQb9/aiEHAkACQCACQVBqQQpJDQAgB0EaSQ0AIAJBn39qIQcgAkHfAEYNACAHQRpPDQELIARBAWohBAwBCwtCgICAgICA4P//ACEKIAJBKUYNAiABKAJoIgIEQCAFIAUoAgBBf2o2AgALIAMEQCAERQ0DA0AgBEF/aiEEIAIEQCAFIAUoAgBBf2o2AgALIAQNAAsMAwtBqKoFQRw2AgALIAFCABCyBgtCACEKCyAAIAs3AwAgACAKNwMIIAZBMGokAAu1DQIIfwd+IwBBsANrIgYkAAJ/IAEoAgQiByABKAJoSQRAIAEgB0EBajYCBCAHLQAADAELIAEQswYLIQcCQAJ/A0ACQCAHQTBHBEAgB0EuRw0EIAEoAgQiByABKAJoTw0BIAEgB0EBajYCBCAHLQAADAMLIAEoAgQiByABKAJoSQRAQQEhCSABIAdBAWo2AgQgBy0AACEHDAIFQQEhCSABELMGIQcMAgsACwsgARCzBgshB0EBIQogB0EwRw0AA0AgEkJ/fCESAn8gASgCBCIHIAEoAmhJBEAgASAHQQFqNgIEIActAAAMAQsgARCzBgsiB0EwRg0AC0EBIQkLQoCAgICAgMD/PyEQA0ACQCAHQSByIQsCQAJAIAdBUGoiDEEKSQ0AIAdBLkdBACALQZ9/akEFSxsNAiAHQS5HDQAgCg0CQQEhCiAPIRIMAQsgC0Gpf2ogDCAHQTlKGyEHAkAgD0IHVwRAIAcgCEEEdGohCAwBCyAPQhxXBEAgBkEwaiAHENEGIAZBIGogEyAQQgBCgICAgICAwP0/ENQGIAZBEGogBikDICITIAYpAygiECAGKQMwIAYpAzgQ1AYgBiAOIBEgBikDECAGKQMYEMoGIAYpAwghESAGKQMAIQ4MAQsgDQ0AIAdFDQAgBkHQAGogEyAQQgBCgICAgICAgP8/ENQGIAZBQGsgDiARIAYpA1AgBikDWBDKBiAGKQNIIRFBASENIAYpA0AhDgsgD0IBfCEPQQEhCQsgASgCBCIHIAEoAmhJBEAgASAHQQFqNgIEIActAAAhBwwCBSABELMGIQcMAgsACwsCfgJAAkAgCUUEQCABKAJoRQRAIAUNAwwCCyABIAEoAgQiB0F/ajYCBCAFRQ0BIAEgB0F+ajYCBCAKRQ0CIAEgB0F9ajYCBAwCCyAPQgdXBEAgDyEQA0AgCEEEdCEIIBBCAXwiEEIIUg0ACwsCQCAHQV9xQdAARgRAIAEgBRC7BiIQQoCAgICAgICAgH9SDQEgBQRAQgAhECABKAJoRQ0CIAEgASgCBEF/ajYCBAwCC0IAIQ4gAUIAELIGQgAMBAtCACEQIAEoAmhFDQAgASABKAIEQX9qNgIECyAIRQRAIAZB8ABqIAS3RAAAAAAAAAAAohDPBiAGKQNwIQ4gBikDeAwDCyASIA8gChtCAoYgEHxCYHwiD0EAIANrrFUEQEGoqgVBxAA2AgAgBkGgAWogBBDRBiAGQZABaiAGKQOgASAGKQOoAUJ/Qv///////7///wAQ1AYgBkGAAWogBikDkAEgBikDmAFCf0L///////+///8AENQGIAYpA4ABIQ4gBikDiAEMAwsgDyADQZ5+aqxZBEAgCEF/SgRAA0AgBkGgA2ogDiARQgBCgICAgICAwP+/fxDKBiAOIBEQzQYhByAGQZADaiAOIBEgDiAGKQOgAyAHQQBIIgEbIBEgBikDqAMgARsQygYgD0J/fCEPIAYpA5gDIREgBikDkAMhDiAIQQF0IAdBf0pyIghBf0oNAAsLAn4gDyADrH1CIHwiEqciB0EAIAdBAEobIAIgEiACrFMbIgdB8QBOBEAgBkGAA2ogBBDRBiAGKQOIAyESIAYpA4ADIRNCAAwBCyAGQeACakGQASAHaxD+DBDPBiAGQdACaiAEENEGIAZB8AJqIAYpA+ACIAYpA+gCIAYpA9ACIhMgBikD2AIiEhC2BiAGKQP4AiEUIAYpA/ACCyEQIAZBwAJqIAggCEEBcUUgDiARQgBCABDMBkEARyAHQSBIcXEiB2oQ0gYgBkGwAmogEyASIAYpA8ACIAYpA8gCENQGIAZBkAJqIAYpA7ACIAYpA7gCIBAgFBDKBiAGQaACakIAIA4gBxtCACARIAcbIBMgEhDUBiAGQYACaiAGKQOgAiAGKQOoAiAGKQOQAiAGKQOYAhDKBiAGQfABaiAGKQOAAiAGKQOIAiAQIBQQ1gYgBikD8AEiDiAGKQP4ASIRQgBCABDMBkUEQEGoqgVBxAA2AgALIAZB4AFqIA4gESAPpxC3BiAGKQPgASEOIAYpA+gBDAMLQaiqBUHEADYCACAGQdABaiAEENEGIAZBwAFqIAYpA9ABIAYpA9gBQgBCgICAgICAwAAQ1AYgBkGwAWogBikDwAEgBikDyAFCAEKAgICAgIDAABDUBiAGKQOwASEOIAYpA7gBDAILIAFCABCyBgsgBkHgAGogBLdEAAAAAAAAAACiEM8GIAYpA2AhDiAGKQNoCyEPIAAgDjcDACAAIA83AwggBkGwA2okAAvmGwMMfwZ+AXwjAEGAxgBrIgckAEEAIAMgBGoiEWshEgJAAn8DQAJAIAJBMEcEQCACQS5HDQQgASgCBCIIIAEoAmhPDQEgASAIQQFqNgIEIAgtAAAMAwsgASgCBCIIIAEoAmhJBEBBASEJIAEgCEEBajYCBCAILQAAIQIMAgVBASEJIAEQswYhAgwCCwALCyABELMGCyECQQEhCiACQTBHDQADQCATQn98IRMCfyABKAIEIgggASgCaEkEQCABIAhBAWo2AgQgCC0AAAwBCyABELMGCyICQTBGDQALQQEhCQsgB0EANgKABiACQVBqIQwgAAJ+AkACQAJAAkACQAJAIAJBLkYiCw0AIAxBCU0NAEEAIQgMAQtBACEIA0ACQCALQQFxBEAgCkUEQCAUIRNBASEKDAILIAlBAEchCQwECyAUQgF8IRQgCEH8D0wEQCAUpyAOIAJBMEcbIQ4gB0GABmogCEECdGoiCSANBH8gAiAJKAIAQQpsakFQagUgDAs2AgBBASEJQQAgDUEBaiICIAJBCUYiAhshDSACIAhqIQgMAQsgAkEwRg0AIAcgBygC8EVBAXI2AvBFCwJ/IAEoAgQiAiABKAJoSQRAIAEgAkEBajYCBCACLQAADAELIAEQswYLIgJBUGohDCACQS5GIgsNACAMQQpJDQALCyATIBQgChshEwJAIAlFDQAgAkFfcUHFAEcNAAJAIAEgBhC7BiIVQoCAgICAgICAgH9SDQAgBkUNBEIAIRUgASgCaEUNACABIAEoAgRBf2o2AgQLIBMgFXwhEwwECyAJQQBHIQkgAkEASA0BCyABKAJoRQ0AIAEgASgCBEF/ajYCBAsgCQ0BQaiqBUEcNgIACyABQgAQsgZCACETQgAMAQsgBygCgAYiAUUEQCAHIAW3RAAAAAAAAAAAohDPBiAHKQMIIRMgBykDAAwBCwJAIBRCCVUNACATIBRSDQAgA0EeTEEAIAEgA3YbDQAgB0EwaiAFENEGIAdBIGogARDSBiAHQRBqIAcpAzAgBykDOCAHKQMgIAcpAygQ1AYgBykDGCETIAcpAxAMAQsgEyAEQX5trFUEQEGoqgVBxAA2AgAgB0HgAGogBRDRBiAHQdAAaiAHKQNgIAcpA2hCf0L///////+///8AENQGIAdBQGsgBykDUCAHKQNYQn9C////////v///ABDUBiAHKQNIIRMgBykDQAwBCyATIARBnn5qrFMEQEGoqgVBxAA2AgAgB0GQAWogBRDRBiAHQYABaiAHKQOQASAHKQOYAUIAQoCAgICAgMAAENQGIAdB8ABqIAcpA4ABIAcpA4gBQgBCgICAgICAwAAQ1AYgBykDeCETIAcpA3AMAQsgDQRAIA1BCEwEQCAHQYAGaiAIQQJ0aiICKAIAIQEDQCABQQpsIQEgDUEBaiINQQlHDQALIAIgATYCAAsgCEEBaiEICyATpyEKAkAgDkEISg0AIA4gCkoNACAKQRFKDQAgCkEJRgRAIAdBwAFqIAUQ0QYgB0GwAWogBygCgAYQ0gYgB0GgAWogBykDwAEgBykDyAEgBykDsAEgBykDuAEQ1AYgBykDqAEhEyAHKQOgAQwCCyAKQQhMBEAgB0GQAmogBRDRBiAHQYACaiAHKAKABhDSBiAHQfABaiAHKQOQAiAHKQOYAiAHKQOAAiAHKQOIAhDUBiAHQeABakEAIAprQQJ0QZCaA2ooAgAQ0QYgB0HQAWogBykD8AEgBykD+AEgBykD4AEgBykD6AEQzgYgBykD2AEhEyAHKQPQAQwCCyADIApBfWxqQRtqIgJBHkxBACAHKAKABiIBIAJ2Gw0AIAdB4AJqIAUQ0QYgB0HQAmogARDSBiAHQcACaiAHKQPgAiAHKQPoAiAHKQPQAiAHKQPYAhDUBiAHQbACaiAKQQJ0QciZA2ooAgAQ0QYgB0GgAmogBykDwAIgBykDyAIgBykDsAIgBykDuAIQ1AYgBykDqAIhEyAHKQOgAgwBC0EAIQ0CQCAKQQlvIgFFBEBBACECDAELIAEgAUEJaiAKQX9KGyEGAkAgCEUEQEEAIQJBACEIDAELQYCU69wDQQAgBmtBAnRBkJoDaigCACILbSEPQQAhCUEAIQFBACECA0AgB0GABmogAUECdGoiDCAMKAIAIgwgC24iDiAJaiIJNgIAIAJBAWpB/w9xIAIgCUUgASACRnEiCRshAiAKQXdqIAogCRshCiAPIAwgCyAObGtsIQkgAUEBaiIBIAhHDQALIAlFDQAgB0GABmogCEECdGogCTYCACAIQQFqIQgLIAogBmtBCWohCgsDQCAHQYAGaiACQQJ0aiEOAkADQCAKQSROBEAgCkEkRw0CIA4oAgBB0en5BE8NAgsgCEH/D2ohDEEAIQkgCCELA0AgCyEIAn9BACAJrSAHQYAGaiAMQf8PcSIBQQJ0aiILNQIAQh2GfCITQoGU69wDVA0AGiATIBNCgJTr3AOAIhRCgJTr3AN+fSETIBSnCyEJIAsgE6ciDDYCACAIIAggCCABIAwbIAEgAkYbIAEgCEF/akH/D3FHGyELIAFBf2ohDCABIAJHDQALIA1BY2ohDSAJRQ0ACyALIAJBf2pB/w9xIgJGBEAgB0GABmogC0H+D2pB/w9xQQJ0aiIBIAEoAgAgB0GABmogC0F/akH/D3EiCEECdGooAgByNgIACyAKQQlqIQogB0GABmogAkECdGogCTYCAAwBCwsCQANAIAhBAWpB/w9xIQYgB0GABmogCEF/akH/D3FBAnRqIRADQEEJQQEgCkEtShshDAJAA0AgAiELQQAhAQJAA0ACQCABIAtqQf8PcSICIAhGDQAgB0GABmogAkECdGooAgAiAiABQQJ0QeCZA2ooAgAiCUkNACACIAlLDQIgAUEBaiIBQQRHDQELCyAKQSRHDQBCACETQQAhAUIAIRQDQCAIIAEgC2pB/w9xIgJGBEAgCEEBakH/D3EiCEECdCAHakEANgL8BQsgB0HwBWogEyAUQgBCgICAgOWat47AABDUBiAHQeAFaiAHQYAGaiACQQJ0aigCABDSBiAHQdAFaiAHKQPwBSAHKQP4BSAHKQPgBSAHKQPoBRDKBiAHKQPYBSEUIAcpA9AFIRMgAUEBaiIBQQRHDQALIAdBwAVqIAUQ0QYgB0GwBWogEyAUIAcpA8AFIAcpA8gFENQGIAcpA7gFIRRCACETIAcpA7AFIRUgDUHxAGoiCSAEayIBQQAgAUEAShsgAyABIANIIgwbIgJB8ABMDQIMBQsgDCANaiENIAsgCCICRg0AC0GAlOvcAyAMdiEOQX8gDHRBf3MhD0EAIQEgCyECA0AgB0GABmogC0ECdGoiCSAJKAIAIgkgDHYgAWoiATYCACACQQFqQf8PcSACIAFFIAIgC0ZxIgEbIQIgCkF3aiAKIAEbIQogCSAPcSAObCEBIAtBAWpB/w9xIgsgCEcNAAsgAUUNASACIAZHBEAgB0GABmogCEECdGogATYCACAGIQgMAwsgECAQKAIAQQFyNgIAIAYhAgwBCwsLIAdBgAVqQeEBIAJrEP4MEM8GIAdBoAVqIAcpA4AFIAcpA4gFIBUgFBC2BiAHKQOoBSEXIAcpA6AFIRggB0HwBGpB8QAgAmsQ/gwQzwYgB0GQBWogFSAUIAcpA/AEIAcpA/gEEP0MIAdB4ARqIBUgFCAHKQOQBSITIAcpA5gFIhYQ1gYgB0HQBGogGCAXIAcpA+AEIAcpA+gEEMoGIAcpA9gEIRQgBykD0AQhFQsCQCALQQRqQf8PcSIKIAhGDQACQCAHQYAGaiAKQQJ0aigCACIKQf/Jte4BTQRAIApFQQAgC0EFakH/D3EgCEYbDQEgB0HgA2ogBbdEAAAAAAAA0D+iEM8GIAdB0ANqIBMgFiAHKQPgAyAHKQPoAxDKBiAHKQPYAyEWIAcpA9ADIRMMAQsgCkGAyrXuAUcEQCAHQcAEaiAFt0QAAAAAAADoP6IQzwYgB0GwBGogEyAWIAcpA8AEIAcpA8gEEMoGIAcpA7gEIRYgBykDsAQhEwwBCyAFtyEZIAggC0EFakH/D3FGBEAgB0GABGogGUQAAAAAAADgP6IQzwYgB0HwA2ogEyAWIAcpA4AEIAcpA4gEEMoGIAcpA/gDIRYgBykD8AMhEwwBCyAHQaAEaiAZRAAAAAAAAOg/ohDPBiAHQZAEaiATIBYgBykDoAQgBykDqAQQygYgBykDmAQhFiAHKQOQBCETCyACQe8ASg0AIAdBwANqIBMgFkIAQoCAgICAgMD/PxD9DCAHKQPAAyAHKQPIA0IAQgAQzAYNACAHQbADaiATIBZCAEKAgICAgIDA/z8QygYgBykDuAMhFiAHKQOwAyETCyAHQaADaiAVIBQgEyAWEMoGIAdBkANqIAcpA6ADIAcpA6gDIBggFxDWBiAHKQOYAyEUIAcpA5ADIRUCQCAJQf////8HcUF+IBFrTA0AIAdBgANqIBUgFEIAQoCAgICAgID/PxDUBiATIBZCAEIAEMwGIQkgFSAUENcGmSEZIAcpA4gDIBQgGUQAAAAAAAAAR2YiCBshFCAHKQOAAyAVIAgbIRUgDCAIQQFzIAEgAkdycSAJQQBHcUVBACAIIA1qIg1B7gBqIBJMGw0AQaiqBUHEADYCAAsgB0HwAmogFSAUIA0QtwYgBykD+AIhEyAHKQPwAgs3AwAgACATNwMIIAdBgMYAaiQAC4UEAgR/AX4CQAJ/IAAoAgQiAiAAKAJoSQRAIAAgAkEBajYCBCACLQAADAELIAAQswYLIgJBVWoiA0ECTUEAIANBAWsbRQRAIAJBUGohAwwBCyACQS1GIQUCfyAAKAIEIgMgACgCaEkEQCAAIANBAWo2AgQgAy0AAAwBCyAAELMGCyIEQVBqIQMCQCABRQ0AIANBCkkNACAAKAJoRQ0AIAAgACgCBEF/ajYCBAsgBCECCwJAIANBCkkEQEEAIQMDQCACIANBCmxqIQMCfyAAKAIEIgIgACgCaEkEQCAAIAJBAWo2AgQgAi0AAAwBCyAAELMGCyICQVBqIgRBCU1BACADQVBqIgNBzJmz5gBIGw0ACyADrCEGAkAgBEEKTw0AA0AgAq0gBkIKfnxCUHwhBgJ/IAAoAgQiAiAAKAJoSQRAIAAgAkEBajYCBCACLQAADAELIAAQswYLIgJBUGoiBEEJSw0BIAZCro+F18fC66MBUw0ACwsgBEEKSQRAA0ACfyAAKAIEIgIgACgCaEkEQCAAIAJBAWo2AgQgAi0AAAwBCyAAELMGC0FQakEKSQ0ACwsgACgCaARAIAAgACgCBEF/ajYCBAtCACAGfSAGIAUbIQYMAQtCgICAgICAgICAfyEGIAAoAmhFDQAgACAAKAIEQX9qNgIEQoCAgICAgICAgH8PCyAGC8ETAg5/A34jAEGwAmsiBiQAIAAoAkxBAE4Ef0EBBSADCxoCQCABLQAAIgRFDQAgAEEEaiEHAkADQAJAAkAgBEH/AXEQsQYEQANAIAEiBEEBaiEBIAQtAAEQsQYNAAsgAEIAELIGA0ACfyAAKAIEIgEgACgCaEkEQCAHIAFBAWo2AgAgAS0AAAwBCyAAELMGCxCxBg0ACwJAIAAoAmhFBEAgBygCACEBDAELIAcgBygCAEF/aiIBNgIACyABIAAoAghrrCAAKQN4IBF8fCERDAELAn8CQAJAIAEtAAAiBEElRgRAIAEtAAEiA0EqRg0BIANBJUcNAgsgAEIAELIGIAEgBEElRmohBAJ/IAAoAgQiASAAKAJoSQRAIAcgAUEBajYCACABLQAADAELIAAQswYLIgEgBC0AAEcEQCAAKAJoBEAgByAHKAIAQX9qNgIAC0EAIQ0gAUEATg0IDAULIBFCAXwhEQwDC0EAIQggAUECagwBCwJAIAMQ+wVFDQAgAS0AAkEkRw0AIAIgAS0AAUFQahC9BiEIIAFBA2oMAQsgAigCACEIIAJBBGohAiABQQFqCyEEQQAhDUEAIQEgBC0AABD7BQRAA0AgBC0AACABQQpsakFQaiEBIAQtAAEhAyAEQQFqIQQgAxD7BQ0ACwsCfyAEIAQtAAAiBUHtAEcNABpBACEJIAhBAEchDSAELQABIQVBACEKIARBAWoLIQMgBUH/AXFBv39qIgtBOUsNASADQQFqIQRBAyEFAkACQAJAAkACQAJAIAtBAWsOOQcEBwQEBAcHBwcDBwcHBwcHBAcHBwcEBwcEBwcHBwcEBwQEBAQEAAQFBwEHBAQEBwcEAgQHBwQHAgQLIANBAmogBCADLQABQegARiIDGyEEQX5BfyADGyEFDAQLIANBAmogBCADLQABQewARiIDGyEEQQNBASADGyEFDAMLQQEhBQwCC0ECIQUMAQtBACEFIAMhBAtBASAFIAQtAAAiA0EvcUEDRiILGyEOAkAgA0EgciADIAsbIgxB2wBGDQACQCAMQe4ARwRAIAxB4wBHDQEgAUEBIAFBAUobIQEMAgsgCCAOIBEQvgYMAgsgAEIAELIGA0ACfyAAKAIEIgMgACgCaEkEQCAHIANBAWo2AgAgAy0AAAwBCyAAELMGCxCxBg0ACwJAIAAoAmhFBEAgBygCACEDDAELIAcgBygCAEF/aiIDNgIACyADIAAoAghrrCAAKQN4IBF8fCERCyAAIAGsIhIQsgYCQCAAKAIEIgUgACgCaCIDSQRAIAcgBUEBajYCAAwBCyAAELMGQQBIDQIgACgCaCEDCyADBEAgByAHKAIAQX9qNgIACwJAAkAgDEGof2oiA0EgSwRAIAxBv39qIgFBBksNAkEBIAF0QfEAcUUNAgwBC0EQIQUCQAJAAkACQAJAIANBAWsOHwYGBAYGBgYGBQYEAQUFBQYABgYGBgYCAwYGBAYBBgYDC0EAIQUMAgtBCiEFDAELQQghBQsgACAFQQBCfxC0BiESIAApA3hCACAAKAIEIAAoAghrrH1RDQYCQCAIRQ0AIAxB8ABHDQAgCCASPgIADAMLIAggDiASEL4GDAILAkAgDEHvAXFB4wBGBEAgBkEgakF/QYECEIENGiAGQQA6ACAgDEHzAEcNASAGQQA6AEEgBkEAOgAuIAZBADYBKgwBCyAGQSBqIAQtAAEiBUHeAEYiA0GBAhCBDRogBkEAOgAgIARBAmogBEEBaiADGyELAn8CQAJAIARBAkEBIAMbai0AACIEQS1HBEAgBEHdAEYNASAFQd4ARyEFIAsMAwsgBiAFQd4ARyIFOgBODAELIAYgBUHeAEciBToAfgsgC0EBagshBANAAkAgBC0AACIDQS1HBEAgA0UNByADQd0ARw0BDAMLQS0hAyAELQABIhBFDQAgEEHdAEYNACAEQQFqIQsCQCAEQX9qLQAAIgQgEE8EQCAQIQMMAQsDQCAEQQFqIgQgBkEgamogBToAACAEIAstAAAiA0kNAAsLIAshBAsgAyAGaiAFOgAhIARBAWohBAwAAAsACyABQQFqQR8gDEHjAEYiCxshBQJAAkACQCAOQQFHIgxFBEAgCCEDIA0EQCAFQQJ0EPUMIgNFDQQLIAZCADcDqAJBACEBA0AgAyEKAkADQAJ/IAAoAgQiAyAAKAJoSQRAIAcgA0EBajYCACADLQAADAELIAAQswYLIgMgBmotACFFDQEgBiADOgAbIAZBHGogBkEbakEBIAZBqAJqELUGIgNBfkYNACADQX9GDQUgCgRAIAogAUECdGogBigCHDYCACABQQFqIQELIA1FDQAgASAFRw0ACyAKIAVBAXRBAXIiBUECdBD3DCIDDQEMBAsLAn9BASAGQagCaiIDRQ0AGiADKAIARQtFDQJBACEJDAELIA0EQEEAIQEgBRD1DCIDRQ0DA0AgAyEJA0ACfyAAKAIEIgMgACgCaEkEQCAHIANBAWo2AgAgAy0AAAwBCyAAELMGCyIDIAZqLQAhRQRAQQAhCgwECyABIAlqIAM6AAAgAUEBaiIBIAVHDQALQQAhCiAJIAVBAXRBAXIiBRD3DCIDDQALDAcLQQAhASAIBEADQAJ/IAAoAgQiAyAAKAJoSQRAIAcgA0EBajYCACADLQAADAELIAAQswYLIgMgBmotACEEQCABIAhqIAM6AAAgAUEBaiEBDAEFQQAhCiAIIQkMAwsAAAsACwNAAn8gACgCBCIBIAAoAmhJBEAgByABQQFqNgIAIAEtAAAMAQsgABCzBgsgBmotACENAAtBACEJQQAhCkEAIQELAkAgACgCaEUEQCAHKAIAIQMMAQsgByAHKAIAQX9qIgM2AgALIAApA3ggAyAAKAIIa6x8IhNQDQcgEiATUkEAIAsbDQcCQCANRQ0AIAxFBEAgCCAKNgIADAELIAggCTYCAAsgCw0DIAoEQCAKIAFBAnRqQQA2AgALIAlFBEBBACEJDAQLIAEgCWpBADoAAAwDC0EAIQkMBAtBACEJQQAhCgwDCyAGIAAgDkEAELgGIAApA3hCACAAKAIEIAAoAghrrH1RDQQgCEUNACAOQQJLDQAgBikDCCESIAYpAwAhEwJAAkACQCAOQQFrDgIBAgALIAggEyASENgGOAIADAILIAggEyASENcGOQMADAELIAggEzcDACAIIBI3AwgLIAAoAgQgACgCCGusIAApA3ggEXx8IREgDyAIQQBHaiEPCyAEQQFqIQEgBC0AASIEDQEMAwsLIA9BfyAPGyEPCyANRQ0AIAkQ9gwgChD2DAsgBkGwAmokACAPCzABAX8jAEEQayICIAA2AgwgAiAAIAFBAnQgAUEAR0ECdGtqIgBBBGo2AgggACgCAAtOAAJAIABFDQAgAUECaiIBQQVLDQACQAJAAkACQCABQQFrDgUBAgIEAwALIAAgAjwAAA8LIAAgAj0BAA8LIAAgAj4CAA8LIAAgAjcDAAsLPAEBfyMAQRBrIgMkACAAKAI8IAGnIAFCIIinIAJB/wFxIANBCGoQSRDJBhogAykDCCEBIANBEGokACABCwQAQgALQQECfyMAQRBrIgEkAEF/IQICQCAAEJoGDQAgACABQQ9qQQEgACgCIBEEAEEBRw0AIAEtAA8hAgsgAUEQaiQAIAILYAICfwF+IAAoAighAUEBIQIgAEIAIAAtAABBgAFxBH9BAkEBIAAoAhQgACgCHEsbBSACCyABERsAIgNCAFkEfiAAKAIUIAAoAhxrrCADIAAoAgggACgCBGusfXwFIAMLC3kBAX8gAARAIAAoAkxBf0wEQCAAEMQGDwsgABDEBg8LQaCSBCgCAARAQaCSBCgCABDDBiEBC0G4qgUoAgAiAARAA0AgACgCTEEATgR/QQEFQQALGiAAKAIUIAAoAhxLBEAgABDEBiABciEBCyAAKAI4IgANAAsLIAELaQECfwJAIAAoAhQgACgCHE0NACAAQQBBACAAKAIkEQQAGiAAKAIUDQBBfw8LIAAoAgQiASAAKAIIIgJJBEAgACABIAJrrEEBIAAoAigRGwAaCyAAQQA2AhwgAEIANwMQIABCADcCBEEAC3YBAX9BAiEBAn8gAEErEIYGRQRAIAAtAABB8gBHIQELIAFBgAFyCyABIABB+AAQhgYbIgFBgIAgciABIABB5QAQhgYbIgEgAUHAAHIgAC0AACIAQfIARhsiAUGABHIgASAAQfcARhsiAUGACHIgASAAQeEARhsLyQIBBn8jAEEgayIDJAAgAyAAKAIcIgQ2AhAgACgCFCEFIAMgAjYCHCADIAE2AhggAyAFIARrIgE2AhQgASACaiEFQQIhBiADQRBqIQECfwJAAkAgACgCPCADQRBqQQIgA0EMahAsEMkGRQRAA0AgBSADKAIMIgRGDQIgBEF/TA0DIAFBCGogASAEIAEoAgQiB0siCBsiASAEIAdBACAIG2siByABKAIAajYCACABIAEoAgQgB2s2AgQgBSAEayEFIAAoAjwgASAGIAhrIgYgA0EMahAsEMkGRQ0ACwsgA0F/NgIMIAVBf0cNAQsgACAAKAIsIgE2AhwgACABNgIUIAAgASAAKAIwajYCECACDAELIABBADYCHCAAQgA3AxAgACAAKAIAQSByNgIAQQAgBkECRg0AGiACIAEoAgRrCyEEIANBIGokACAECyYBAX8jAEEQayICJAAgAiABNgIMIABBnMcAIAEQrwYgAkEQaiQACy4BAX8gAEG4qgUoAgA2AjhBuKoFKAIAIgEEQCABIAA2AjQLQbiqBSAANgIAIAALFgAgAEUEQEEADwtBqKoFIAA2AgBBfwvICQIEfwR+IwBB8ABrIgUkACAEQv///////////wCDIQoCQAJAIAFCf3wiCUJ/USACQv///////////wCDIgsgCSABVK18Qn98IglC////////v///AFYgCUL///////+///8AURtFBEAgA0J/fCIJQn9SIAogCSADVK18Qn98IglC////////v///AFQgCUL///////+///8AURsNAQsgAVAgC0KAgICAgIDA//8AVCALQoCAgICAgMD//wBRG0UEQCACQoCAgICAgCCEIQQgASEDDAILIANQIApCgICAgICAwP//AFQgCkKAgICAgIDA//8AURtFBEAgBEKAgICAgIAghCEEDAILIAEgC0KAgICAgIDA//8AhYRQBEBCgICAgICA4P//ACACIAEgA4UgAiAEhUKAgICAgICAgIB/hYRQIgYbIQRCACABIAYbIQMMAgsgAyAKQoCAgICAgMD//wCFhFANASABIAuEUARAIAMgCoRCAFINAiABIAODIQMgAiAEgyEEDAILIAMgCoRQRQ0AIAEhAyACIQQMAQsgAyABIAMgAVYgCiALViAKIAtRGyIHGyEKIAQgAiAHGyILQv///////z+DIQkgAiAEIAcbIgJCMIinQf//AXEhCCALQjCIp0H//wFxIgZFBEAgBUHgAGogCiAJIAogCSAJUCIGG3kgBkEGdK18pyIGQXFqEMsGIAUpA2ghCSAFKQNgIQpBECAGayEGCyABIAMgBxshAyACQv///////z+DIQEgCAR+IAEFIAVB0ABqIAMgASADIAEgAVAiBxt5IAdBBnStfKciB0FxahDLBkEQIAdrIQggBSkDUCEDIAUpA1gLQgOGIANCPYiEQoCAgICAgIAEhCEEIAlCA4YgCkI9iIQhASACIAuFIQkCfiADQgOGIgMgBiAIayIHRQ0AGiAHQf8ASwRAQgAhBEIBDAELIAVBQGsgAyAEQYABIAdrEMsGIAVBMGogAyAEIAcQ0wYgBSkDOCEEIAUpAzAgBSkDQCAFKQNIhEIAUq2ECyEDIAFCgICAgICAgASEIQwgCkIDhiECAkAgCUJ/VwRAIAIgA30iASAMIAR9IAIgA1StfSIDhFAEQEIAIQNCACEEDAMLIANC/////////wNWDQEgBUEgaiABIAMgASADIANQIgcbeSAHQQZ0rXynQXRqIgcQywYgBiAHayEGIAUpAyghAyAFKQMgIQEMAQsgAiADfCIBIANUrSAEIAx8fCIDQoCAgICAgIAIg1ANACABQgGDIANCP4YgAUIBiISEIQEgBkEBaiEGIANCAYghAwsgC0KAgICAgICAgIB/gyEEIAZB//8BTgRAIARCgICAgICAwP//AIQhBEIAIQMMAQtBACEHAkAgBkEASgRAIAYhBwwBCyAFQRBqIAEgAyAGQf8AahDLBiAFIAEgA0EBIAZrENMGIAUpAwAgBSkDECAFKQMYhEIAUq2EIQEgBSkDCCEDCyADQgOIQv///////z+DIASEIAetQjCGhCADQj2GIAFCA4iEIgQgAadBB3EiBkEES618IgMgBFStfCADQgGDQgAgBkEERhsiASADfCIDIAFUrXwhBAsgACADNwMAIAAgBDcDCCAFQfAAaiQAC1ABAX4CQCADQcAAcQRAIAEgA0FAaq2GIQJCACEBDAELIANFDQAgAiADrSIEhiABQcAAIANrrYiEIQIgASAEhiEBCyAAIAE3AwAgACACNwMIC9sBAgF/An5BASEEAkAgAEIAUiABQv///////////wCDIgVCgICAgICAwP//AFYgBUKAgICAgIDA//8AURsNACACQgBSIANC////////////AIMiBkKAgICAgIDA//8AViAGQoCAgICAgMD//wBRGw0AIAAgAoQgBSAGhIRQBEBBAA8LIAEgA4NCAFkEQEF/IQQgACACVCABIANTIAEgA1EbDQEgACAChSABIAOFhEIAUg8LQX8hBCAAIAJWIAEgA1UgASADURsNACAAIAKFIAEgA4WEQgBSIQQLIAQL2AECAX8BfkF/IQICQCAAQgBSIAFC////////////AIMiA0KAgICAgIDA//8AViADQoCAgICAgMD//wBRGw0AIAAgA0KAgICAgICA/z+EhFAEQEEADwsgAUKAgICAgICA/z+DQgBZBEAgAEIAVCABQoCAgICAgID/P1MgAUKAgICAgICA/z9RGw0BIAAgAUKAgICAgICA/z+FhEIAUg8LIABCAFYgAUKAgICAgICA/z9VIAFCgICAgICAgP8/URsNACAAIAFCgICAgICAgP8/hYRCAFIhAgsgAguOEQIFfwx+IwBBwAFrIgUkACAEQv///////z+DIRIgAkL///////8/gyEOIAIgBIVCgICAgICAgICAf4MhESAEQjCIp0H//wFxIQcCQAJAAkAgAkIwiKdB//8BcSIIQX9qQf3/AU0EQCAHQX9qQf7/AUkNAQsgAVAgAkL///////////8AgyILQoCAgICAgMD//wBUIAtCgICAgICAwP//AFEbRQRAIAJCgICAgICAIIQhEQwCCyADUCAEQv///////////wCDIgJCgICAgICAwP//AFQgAkKAgICAgIDA//8AURtFBEAgBEKAgICAgIAghCERIAMhAQwCCyABIAtCgICAgICAwP//AIWEUARAIAMgAkKAgICAgIDA//8AhYRQBEBCACEBQoCAgICAgOD//wAhEQwDCyARQoCAgICAgMD//wCEIRFCACEBDAILIAMgAkKAgICAgIDA//8AhYRQBEBCACEBDAILIAEgC4RQDQIgAiADhFAEQCARQoCAgICAgMD//wCEIRFCACEBDAILIAtC////////P1gEQCAFQbABaiABIA4gASAOIA5QIgYbeSAGQQZ0rXynIgZBcWoQywZBECAGayEGIAUpA7gBIQ4gBSkDsAEhAQsgAkL///////8/Vg0AIAVBoAFqIAMgEiADIBIgElAiCRt5IAlBBnStfKciCUFxahDLBiAGIAlqQXBqIQYgBSkDqAEhEiAFKQOgASEDCyAFQZABaiASQoCAgICAgMAAhCIUQg+GIANCMYiEIgJChMn5zr/mvIL1ACACfSIEENUGIAVBgAFqQgAgBSkDmAF9IAQQ1QYgBUHwAGogBSkDiAFCAYYgBSkDgAFCP4iEIgQgAhDVBiAFQeAAaiAEQgAgBSkDeH0Q1QYgBUHQAGogBSkDaEIBhiAFKQNgQj+IhCIEIAIQ1QYgBUFAayAEQgAgBSkDWH0Q1QYgBUEwaiAFKQNIQgGGIAUpA0BCP4iEIgQgAhDVBiAFQSBqIARCACAFKQM4fRDVBiAFQRBqIAUpAyhCAYYgBSkDIEI/iIQiBCACENUGIAUgBEIAIAUpAxh9ENUGIAYgCCAHa2ohBwJ+QgAgBSkDCEIBhiAFKQMAQj+IhEJ/fCILQv////8PgyIEIAJCIIgiDH4iECALQiCIIgsgAkL/////D4MiCn58IgJCIIYiDSAEIAp+fCIKIA1UrSALIAx+IAIgEFStQiCGIAJCIIiEfHwgCiAEIANCEYhC/////w+DIgx+IhAgCyADQg+GQoCA/v8PgyINfnwiAkIghiIPIAQgDX58IA9UrSALIAx+IAIgEFStQiCGIAJCIIiEfHx8IgIgClStfCACQgBSrXx9IgpC/////w+DIgwgBH4iECALIAx+Ig0gBCAKQiCIIg9+fCIKQiCGfCIMIBBUrSALIA9+IAogDVStQiCGIApCIIiEfHwgDEIAIAJ9IgJCIIgiCiAEfiIQIAJC/////w+DIg0gC358IgJCIIYiDyAEIA1+fCAPVK0gCiALfiACIBBUrUIghiACQiCIhHx8fCICIAxUrXwgAkJ+fCIQIAJUrXxCf3wiCkL/////D4MiAiAOQgKGIAFCPoiEQv////8PgyIEfiIMIAFCHohC/////w+DIgsgCkIgiCIKfnwiDSAMVK0gDSAQQiCIIgwgDkIeiEL//+//D4NCgIAQhCIOfnwiDyANVK18IAogDn58IAIgDn4iEyAEIAp+fCINIBNUrUIghiANQiCIhHwgDyANQiCGfCINIA9UrXwgDSALIAx+IhMgEEL/////D4MiECAEfnwiDyATVK0gDyACIAFCAoZC/P///w+DIhN+fCIVIA9UrXx8Ig8gDVStfCAPIAogE34iDSAOIBB+fCIKIAQgDH58IgQgAiALfnwiAkIgiCACIARUrSAKIA1UrSAEIApUrXx8QiCGhHwiCiAPVK18IAogFSAMIBN+IgQgCyAQfnwiC0IgiCALIARUrUIghoR8IgQgFVStIAQgAkIghnwgBFStfHwiBCAKVK18IgJC/////////wBYBEAgAUIxhiAEQv////8PgyIBIANC/////w+DIgt+IgpCAFKtfUIAIAp9IhAgBEIgiCIKIAt+Ig0gASADQiCIIgx+fCIOQiCGIg9UrX0gAkL/////D4MgC34gASASQv////8Pg358IAogDH58IA4gDVStQiCGIA5CIIiEfCAEIBRCIIh+IAMgAkIgiH58IAIgDH58IAogEn58QiCGfH0hCyAHQX9qIQcgECAPfQwBCyAEQiGIIQwgAUIwhiACQj+GIARCAYiEIgRC/////w+DIgEgA0L/////D4MiC34iCkIAUq19QgAgCn0iECABIANCIIgiCn4iDSAMIAJCH4aEIg9C/////w+DIg4gC358IgxCIIYiE1StfSAKIA5+IAJCAYgiDkL/////D4MgC358IAEgEkL/////D4N+fCAMIA1UrUIghiAMQiCIhHwgBCAUQiCIfiADIAJCIYh+fCAKIA5+fCAPIBJ+fEIghnx9IQsgDiECIBAgE30LIQEgB0GAgAFOBEAgEUKAgICAgIDA//8AhCERQgAhAQwBCyAHQf//AGohCCAHQYGAf0wEQAJAIAgNACAEIAFCAYYgA1YgC0IBhiABQj+IhCIBIBRWIAEgFFEbrXwiASAEVK0gAkL///////8/g3wiA0KAgICAgIDAAINQDQAgAyARhCERDAILQgAhAQwBCyAEIAFCAYYgA1ogC0IBhiABQj+IhCIBIBRaIAEgFFEbrXwiASAEVK0gAkL///////8/gyAIrUIwhoR8IBGEIRELIAAgATcDACAAIBE3AwggBUHAAWokAA8LIABCADcDACAAIBFCgICAgICA4P//ACACIAOEQgBSGzcDCCAFQcABaiQAC/4BAgJ/BH4jAEEQayICJAAgAb0iBUKAgICAgICAgIB/gyEHAn4gBUL///////////8AgyIEQoCAgICAgIB4fEL/////////7/8AWARAIARCPIYhBiAEQgSIQoCAgICAgICAPHwMAQsgBEKAgICAgICA+P8AWgRAIAVCPIYhBiAFQgSIQoCAgICAgMD//wCEDAELIARQBEBCAAwBCyACIARCACAFp2dBIGogBEIgiKdnIARCgICAgBBUGyIDQTFqEMsGIAIpAwAhBiACKQMIQoCAgICAgMAAhUGM+AAgA2utQjCGhAshBCAAIAY3AwAgACAEIAeENwMIIAJBEGokAAvLAQIEfwJ+IwBBEGsiAyQAIAG8IgRBgICAgHhxIQUCfiAEQf////8HcSICQYCAgHxqQf////cHTQRAIAKtQhmGQoCAgICAgIDAP3wMAQsgAkGAgID8B08EQCAErUIZhkKAgICAgIDA//8AhAwBCyACRQRAQgAMAQsgAyACrUIAIAJnIgJB0QBqEMsGIAMpAwAhBiADKQMIQoCAgICAgMAAhUGJ/wAgAmutQjCGhAshByAAIAY3AwAgACAHIAWtQiCGhDcDCCADQRBqJAALfwICfwF+IwBBEGsiAyQAIAACfiABRQRAQgAMAQsgAyABIAFBH3UiAmogAnMiAq1CACACZyICQdEAahDLBiADKQMIQoCAgICAgMAAhUGegAEgAmutQjCGfCABQYCAgIB4ca1CIIaEIQQgAykDAAs3AwAgACAENwMIIANBEGokAAtnAgF/AX4jAEEQayICJAAgAAJ+IAFFBEBCAAwBCyACIAGtQgBB8AAgAWdBH3MiAWsQywYgAikDCEKAgICAgIDAAIUgAUH//wBqrUIwhnwhAyACKQMACzcDACAAIAM3AwggAkEQaiQAC1ABAX4CQCADQcAAcQRAIAIgA0FAaq2IIQFCACECDAELIANFDQAgAkHAACADa62GIAEgA60iBIiEIQEgAiAEiCECCyAAIAE3AwAgACACNwMIC54LAgV/D34jAEHgAGsiBSQAIAJCIIYgAUIgiIQhDiAEQi+GIANCEYiEIQsgBEL///////8/gyIMQg+GIANCMYiEIRAgAiAEhUKAgICAgICAgIB/gyEKIAJC////////P4MiDUIgiCERIAxCEYghEiAEQjCIp0H//wFxIQYCQAJ/IAJCMIinQf//AXEiCEF/akH9/wFNBEBBACAGQX9qQf7/AUkNARoLIAFQIAJC////////////AIMiD0KAgICAgIDA//8AVCAPQoCAgICAgMD//wBRG0UEQCACQoCAgICAgCCEIQoMAgsgA1AgBEL///////////8AgyICQoCAgICAgMD//wBUIAJCgICAgICAwP//AFEbRQRAIARCgICAgICAIIQhCiADIQEMAgsgASAPQoCAgICAgMD//wCFhFAEQCACIAOEUARAQoCAgICAgOD//wAhCkIAIQEMAwsgCkKAgICAgIDA//8AhCEKQgAhAQwCCyADIAJCgICAgICAwP//AIWEUARAIAEgD4QhAkIAIQEgAlAEQEKAgICAgIDg//8AIQoMAwsgCkKAgICAgIDA//8AhCEKDAILIAEgD4RQBEBCACEBDAILIAIgA4RQBEBCACEBDAILIA9C////////P1gEQCAFQdAAaiABIA0gASANIA1QIgcbeSAHQQZ0rXynIgdBcWoQywYgBSkDWCINQiCGIAUpA1AiAUIgiIQhDiANQiCIIRFBECAHayEHCyAHIAJC////////P1YNABogBUFAayADIAwgAyAMIAxQIgkbeSAJQQZ0rXynIglBcWoQywYgBSkDSCICQg+GIAUpA0AiA0IxiIQhECACQi+GIANCEYiEIQsgAkIRiCESIAcgCWtBEGoLIQcgC0L/////D4MiAiABQv////8PgyIEfiITIANCD4ZCgID+/w+DIgEgDkL/////D4MiA358Ig5CIIYiDCABIAR+fCILIAxUrSACIAN+IhUgASANQv////8PgyIMfnwiDyAQQv////8PgyINIAR+fCIQIA4gE1StQiCGIA5CIIiEfCITIAIgDH4iFiABIBFCgIAEhCIOfnwiESADIA1+fCIUIBJC/////weDQoCAgIAIhCIBIAR+fCISQiCGfCIXfCEEIAYgCGogB2pBgYB/aiEGAkAgDCANfiIYIAIgDn58IgIgGFStIAIgASADfnwiAyACVK18IAMgDyAVVK0gECAPVK18fCICIANUrXwgASAOfnwgASAMfiIDIA0gDn58IgEgA1StQiCGIAFCIIiEfCACIAFCIIZ8IgEgAlStfCABIBIgFFStIBEgFlStIBQgEVStfHxCIIYgEkIgiIR8IgMgAVStfCADIBMgEFStIBcgE1StfHwiAiADVK18IgFCgICAgICAwACDUEUEQCAGQQFqIQYMAQsgC0I/iCEDIAFCAYYgAkI/iIQhASACQgGGIARCP4iEIQIgC0IBhiELIAMgBEIBhoQhBAsgBkH//wFOBEAgCkKAgICAgIDA//8AhCEKQgAhAQwBCwJ+IAZBAEwEQEEBIAZrIghB/wBNBEAgBUEwaiALIAQgBkH/AGoiBhDLBiAFQSBqIAIgASAGEMsGIAVBEGogCyAEIAgQ0wYgBSACIAEgCBDTBiAFKQMwIAUpAziEQgBSrSAFKQMgIAUpAxCEhCELIAUpAyggBSkDGIQhBCAFKQMAIQIgBSkDCAwCC0IAIQEMAgsgAUL///////8/gyAGrUIwhoQLIAqEIQogC1AgBEJ/VSAEQoCAgICAgICAgH9RG0UEQCAKIAJCAXwiASACVK18IQoMAQsgCyAEQoCAgICAgICAgH+FhFBFBEAgAiEBDAELIAogAiACQgGDfCIBIAJUrXwhCgsgACABNwMAIAAgCjcDCCAFQeAAaiQAC2wBA34gACACQiCIIgMgAUIgiCIEfkIAfCACQv////8PgyICIAFC/////w+DIgF+IgVCIIggAiAEfnwiAkIgiHwgASADfiACQv////8Pg3wiAkIgiHw3AwggACAFQv////8PgyACQiCGhDcDAAtBAQF/IwBBEGsiBSQAIAUgASACIAMgBEKAgICAgICAgIB/hRDKBiAAIAUpAwA3AwAgACAFKQMINwMIIAVBEGokAAvZAwICfwJ+IwBBIGsiAiQAAkAgAUL///////////8AgyIEQoCAgICAgMD/Q3wgBEKAgICAgIDAgLx/fFQEQCABQgSGIABCPIiEIQQgAEL//////////w+DIgBCgYCAgICAgIAIWgRAIARCgYCAgICAgIDAAHwhBQwCCyAEQoCAgICAgICAQH0hBSAAQoCAgICAgICACIVCAFINASAFQgGDIAV8IQUMAQsgAFAgBEKAgICAgIDA//8AVCAEQoCAgICAgMD//wBRG0UEQCABQgSGIABCPIiEQv////////8Dg0KAgICAgICA/P8AhCEFDAELQoCAgICAgID4/wAhBSAEQv///////7//wwBWDQBCACEFIARCMIinIgNBkfcASQ0AIAJBEGogACABQv///////z+DQoCAgICAgMAAhCIEIANB/4h/ahDLBiACIAAgBEGB+AAgA2sQ0wYgAikDCEIEhiACKQMAIgRCPIiEIQUgAikDECACKQMYhEIAUq0gBEL//////////w+DhCIEQoGAgICAgICACFoEQCAFQgF8IQUMAQsgBEKAgICAgICAgAiFQgBSDQAgBUIBgyAFfCEFCyACQSBqJAAgBSABQoCAgICAgICAgH+DhL8LtgMCA38BfiMAQSBrIgMkAAJAIAFC////////////AIMiBUKAgICAgIDAv0B8IAVCgICAgICAwMC/f3xUBEAgAUIZiKchAiAAUCABQv///w+DIgVCgICACFQgBUKAgIAIURtFBEAgAkGBgICABGohAgwCCyACQYCAgIAEaiECIAAgBUKAgIAIhYRCAFINASACQQFxIAJqIQIMAQsgAFAgBUKAgICAgIDA//8AVCAFQoCAgICAgMD//wBRG0UEQCABQhmIp0H///8BcUGAgID+B3IhAgwBC0GAgID8ByECIAVC////////v7/AAFYNAEEAIQIgBUIwiKciBEGR/gBJDQAgA0EQaiAAIAFC////////P4NCgICAgICAwACEIgUgBEH/gX9qEMsGIAMgACAFQYH/ACAEaxDTBiADKQMIIgVCGYinIQIgAykDACADKQMQIAMpAxiEQgBSrYQiAFAgBUL///8PgyIFQoCAgAhUIAVCgICACFEbRQRAIAJBAWohAgwBCyAAIAVCgICACIWEQgBSDQAgAkEBcSACaiECCyADQSBqJAAgAiABQiCIp0GAgICAeHFyvgsfAEHIsgUoAgBFBEBBzLIFIAE2AgBByLIFIAA2AgALCzMBAX8gAgRAIAAhAwNAIAMgASgCADYCACADQQRqIQMgAUEEaiEBIAJBf2oiAg0ACwsgAAsHABAtQQBKCwgAIAAQ3QYaC3MBAX8gAEGUnQM2AgBByLIFQQA2AgBBlQUgAEEAEAVByLIFKAIAIQFByLIFQQA2AgAgAUEBRwRAIABBHGoQ9wcgACgCIBD2DCAAKAIkEPYM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GCACIAE6AAAgARDtBgsWACAAIAAoAhhFIAAoAhAgAXJyNgIQCwsAIABB+LIFEPwHCxkAIAAgASACIAMgBCAFIAAoAgAoAhARCQALCQAgACABEJAHC80EAQV/IwBBIGsiAiQAIAJBADYCHAJAAkAgAkEYaiAAQQAQ9QYtAAAEQCACQRBqIAAgACgCAEF0aigCAGoQ+AZByLIFQQA2AgBBnAUgAkEQahANIQVByLIFKAIAIQNByLIFQQA2AgACQAJAAn8CQAJAIANBAUYNACACQQhqIAAQ+gYhAyACEPsGIQQgACgCAEF0aigCACEGIAQoAgAhBCADKAIAIQNByLIFQQA2AgBBnQUgBSADIAQgACAGaiACQRxqIAJBFGoQFhpByLIFKAIAIQNByLIFQQA2AgAgA0EBRg0AIAJBEGoQ9wcgAigCFEGAgICAeE4NASACIAIoAhxBBHI2AhxBgICAgHgMAgtBABALIQEQBxogAkEQahD3ByABEAwaIAIgAigCHEEBciIBNgIcIAAgACgCAEF0aigCAGogARCMByAAKAIAQXRqKAIAIQFByLIFQQA2AgAgACABaigCFCEBQciyBSgCACEDQciyBUEANgIAIANBAUcEQCABQQFxRQ0DQciyBUEANgIAQZ8FEApByLIFKAIAIQJByLIFQQA2AgAgAkEBRw0HCxAGIQAQBxpByLIFQQA2AgBBOhAKQciyBSgCACECQciyBUEANgIAIAJBAUYNBSAAEAgACyACKAIUQf////8HSgRAIAIgAigCHEEEcjYCHEH/////BwwBCyACKAIUCyEDIAEgAzYCAAwBCxAXCyAAIAAoAgBBdGooAgBqIAIoAhwQgQcLIAJBIGokACAADwtBABALIQIQBxogAhCEAQsAC58DAQN/IwBBEGsiBCQAIABBADYCBAJAAkACf0EEIARBCGogAEEBEPUGLQAARQ0AGiAAKAIAQXRqKAIAIQNByLIFQQA2AgAgACADaigCGCEFQciyBSgCACEDQciyBUEANgIAAkAgA0EBRg0AQciyBUEANgIAQaAFIAUgASACEBQhAUHIsgUoAgAhA0HIsgVBADYCACADQQFGDQAgACABNgIEQQBBBiABIAJGGwwBC0EAEAshAhAHGiACEAwaIAAgACgCAEF0aigCAGpBARCMByAAKAIAQXRqKAIAIQJByLIFQQA2AgAgACACaigCFCECQciyBSgCACEBQciyBUEANgIAAkAgAUEBRwRAIAJBAXFFDQFByLIFQQA2AgBBnwUQCkHIsgUoAgAhAEHIsgVBADYCACAAQQFHDQQLEAYhBBAHGkHIsgVBADYCAEE6EApByLIFKAIAIQBByLIFQQA2AgAgAEEBRg0CIAQQCAALEBdBAQshAiAAIAAoAgBBdGooAgBqIAIQgQcgBEEQaiQADwtBABALIQAQBxogABCEAQsACxMAIAAgASACIAAoAgAoAiARBAALIQAgACAAKAIYRSABciIBNgIQIAAoAhQgAXEEQBDEBwALCxcAIAAgASACIAMgBCABKAIAKAIQERQACw0AIAApAwggASkDCFELhQQBBH8jAEEwayIDJAAgACAAKAIAQXRqKAIAaiAAIAAoAgBBdGooAgBqKAIQQX1xIgUQkwcCQAJAIANBKGogAEEBEPUGLQAABEAgACgCAEF0aigCACEEQciyBUEANgIAIAAgBGooAhghAkHIsgUoAgAhBEHIsgVBADYCAAJAAkACQAJAIARBAUYNAEHIsgVBADYCAEGhBSADQRhqIAIgAUEIELYNQciyBSgCACECQciyBUEANgIAIAJBAUYNACADQQhqEOUGIQJByLIFQQA2AgAgA0EYaiACEJUHIQRByLIFKAIAIQJByLIFQQA2AgAgAkEBRg0BIAVBBHIgBSAEGyEFDAMLQQAQCyECEAcaDAELQQAQCyECEAcaCyACEAwaIAAgACgCAEF0aigCAGogBUEBciIFEIwHIAAoAgBBdGooAgAhAkHIsgVBADYCACAAIAJqKAIUIQJByLIFKAIAIQRByLIFQQA2AgACQCAEQQFHBEAgAkEBcUUNAUHIsgVBADYCAEGfBRAKQciyBSgCACEAQciyBUEANgIAIABBAUcNBQsQBiEDEAcaQciyBUEANgIAQToQCkHIsgUoAgAhAEHIsgVBADYCACAAQQFGDQMgAxAIAAsQFwsgACAAKAIAQXRqKAIAaiAFEIEHCyADQTBqJAAPC0EAEAshABAHGiAAEIQBCwALCwAgAEGstAUQ/AcLDAAgACABEJ0HQQFzCwoAIAAoAgAQngcLEwAgACABIAIgACgCACgCDBEEAAsNACAAKAIAEJ8HGiAACwkAIAAgARCdBwsQACAAEMsHIAEQywdzQQFzCycBAX8gACgCDCIBIAAoAhBGBEAgACAAKAIAKAIkEQAADwsgASgCAAsxAQF/IAAoAgwiASAAKAIQRgRAIAAgACgCACgCKBEAAA8LIAAgAUEEajYCDCABKAIACzcBAX8gACgCGCICIAAoAhxGBEAgACABIAAoAgAoAjQRAwAPCyAAIAJBBGo2AhggAiABNgIAIAELDAAgAEEEahDcBiAACxMAIAAgACgCAEF0aigCAGoQoQcLCgAgABChBxD2DAsTACAAIAAoAgBBdGooAgBqEKMHCwsAIABBiLMFEPwHCzAAAkBBfyAAKAJMEIoHRQRAIAAoAkwhAAwBCyAAIAAQqAciADYCTAsgAEEYdEEYdQsIACAAKAIARQubAQECfyMAQRBrIgEkACABQQhqIAAQ+AZByLIFQQA2AgBBlwUgAUEIahANIQBByLIFKAIAIQJByLIFQQA2AgACQCACQQFGDQBByLIFQQA2AgBBowUgAEEgEBUhAkHIsgUoAgAhAEHIsgVBADYCACAAQQFGDQAgAUEIahD3ByABQRBqJAAgAg8LEAYhAhAHGiABQQhqEPcHIAIQCAALFwAgACABIAIgAyAEIAAoAgAoAhARCAALFwAgACABIAIgAyAEIAAoAgAoAhgRCAALzwQBB38jAEEgayIDJABByLIFQQA2AgBBNCADQRhqIAAQFSEEQciyBSgCACECQciyBUEANgIAAkACQAJAIAJBAUcEQAJAIAQtAABFDQAgACAAKAIAQXRqKAIAaigCBBogA0EQaiAAIAAoAgBBdGooAgBqEPgGQciyBUEANgIAQaQFIANBEGoQDSEFQciyBSgCACECQciyBUEANgIAAkACQCACQQFHBEAgA0EQahD3ByADQQhqIAAQ+gYhBiAAKAIAQXRqKAIAIQJByLIFQQA2AgBBpQUgACACaiIHEA0hCEHIsgUoAgAhAkHIsgVBADYCACACQQFGDQEgBigCACECQciyBUEANgIAQaYFIAUgAiAHIAggARAQIQFByLIFKAIAIQJByLIFQQA2AgAgAkEBRg0BIAMgATYCECADQRBqEKcHRQ0DIAAoAgBBdGooAgAhAkHIsgVBADYCAEGaBSAAIAJqQQUQBUHIsgUoAgAhAkHIsgVBADYCACACQQFHDQNBABALIQIQBxoMAgtBABALIQIQBxogA0EQahD3BwwBC0EAEAshAhAHGgsgBBCFBwwCCyAEEIUHDAILQQAQCyECEAcaCyACEAwaIAAoAgBBdGooAgAhBEHIsgVBADYCAEE5IAAgBGoQD0HIsgUoAgAhBEHIsgVBADYCACAEQQFGDQEQFwsgA0EgaiQAIAAPCxAGIQMQBxpByLIFQQA2AgBBOhAKQciyBSgCACEAQciyBUEANgIAIABBAUcEQCADEAgAC0EAEAshABAHGiAAEIQBAAu9BAEHfyMAQSBrIgMkAEHIsgVBADYCAEE0IANBGGogABAVIQRByLIFKAIAIQJByLIFQQA2AgACQAJAAkAgAkEBRwRAAkAgBC0AAEUNACADQRBqIAAgACgCAEF0aigCAGoQ+AZByLIFQQA2AgBBpAUgA0EQahANIQVByLIFKAIAIQJByLIFQQA2AgACQAJAIAJBAUcEQCADQRBqEPcHIANBCGogABD6BiEGIAAoAgBBdGooAgAhAkHIsgVBADYCAEGlBSAAIAJqIgcQDSEIQciyBSgCACECQciyBUEANgIAIAJBAUYNASAGKAIAIQJByLIFQQA2AgBBpwUgBSACIAcgCCABEBAhAUHIsgUoAgAhAkHIsgVBADYCACACQQFGDQEgAyABNgIQIANBEGoQpwdFDQMgACgCAEF0aigCACECQciyBUEANgIAQZoFIAAgAmpBBRAFQciyBSgCACECQciyBUEANgIAIAJBAUcNA0EAEAshAhAHGgwCC0EAEAshAhAHGiADQRBqEPcHDAELQQAQCyECEAcaCyAEEIUHDAILIAQQhQcMAgtBABALIQIQBxoLIAIQDBogACgCAEF0aigCACEEQciyBUEANgIAQTkgACAEahAPQciyBSgCACEEQciyBUEANgIAIARBAUYNARAXCyADQSBqJAAgAA8LEAYhAxAHGkHIsgVBADYCAEE6EApByLIFKAIAIQBByLIFQQA2AgAgAEEBRwRAIAMQCAALQQAQCyEAEAcaIAAQhAEAC8QEAQd/IwBBIGsiAyQAQciyBUEANgIAQTQgA0EYaiAAEBUhBEHIsgUoAgAhAkHIsgVBADYCAAJAAkACQCACQQFHBEACQCAELQAARQ0AIANBEGogACAAKAIAQXRqKAIAahD4BkHIsgVBADYCAEGkBSADQRBqEA0hBUHIsgUoAgAhAkHIsgVBADYCAAJAAkAgAkEBRwRAIANBEGoQ9wcgA0EIaiAAEPoGIQYgACgCAEF0aigCACECQciyBUEANgIAQaUFIAAgAmoiBxANIQhByLIFKAIAIQJByLIFQQA2AgAgAkEBRg0BIAYoAgAhAkHIsgVBADYCAEGoBSAFIAIgByAIIAGnIAFCIIinEEohBUHIsgUoAgAhAkHIsgVBADYCACACQQFGDQEgAyAFNgIQIANBEGoQpwdFDQMgACgCAEF0aigCACECQciyBUEANgIAQZoFIAAgAmpBBRAFQciyBSgCACECQciyBUEANgIAIAJBAUcNA0EAEAshAhAHGgwCC0EAEAshAhAHGiADQRBqEPcHDAELQQAQCyECEAcaCyAEEIUHDAILIAQQhQcMAgtBABALIQIQBxoLIAIQDBogACgCAEF0aigCACEEQciyBUEANgIAQTkgACAEahAPQciyBSgCACEEQciyBUEANgIAIARBAUYNARAXCyADQSBqJAAgAA8LEAYhAxAHGkHIsgVBADYCAEE6EApByLIFKAIAIQBByLIFQQA2AgAgAEEBRwRAIAMQCAALQQAQCyEAEAcaIAAQhAEACxcAIAAgASACIAMgBCAAKAIAKAIcERUAC74EAQd/IwBBIGsiAyQAQciyBUEANgIAQTQgA0EYaiAAEBUhBEHIsgUoAgAhAkHIsgVBADYCAAJAAkACQCACQQFHBEACQCAELQAARQ0AIANBEGogACAAKAIAQXRqKAIAahD4BkHIsgVBADYCAEGkBSADQRBqEA0hBUHIsgUoAgAhAkHIsgVBADYCAAJAAkAgAkEBRwRAIANBEGoQ9wcgA0EIaiAAEPoGIQYgACgCAEF0aigCACECQciyBUEANgIAQaUFIAAgAmoiBxANIQhByLIFKAIAIQJByLIFQQA2AgAgAkEBRg0BIAYoAgAhAkHIsgVBADYCAEGpBSAFIAIgByAIIAG7EC4hBUHIsgUoAgAhAkHIsgVBADYCACACQQFGDQEgAyAFNgIQIANBEGoQpwdFDQMgACgCAEF0aigCACECQciyBUEANgIAQZoFIAAgAmpBBRAFQciyBSgCACECQciyBUEANgIAIAJBAUcNA0EAEAshAhAHGgwCC0EAEAshAhAHGiADQRBqEPcHDAELQQAQCyECEAcaCyAEEIUHDAILIAQQhQcMAgtBABALIQIQBxoLIAIQDBogACgCAEF0aigCACEEQciyBUEANgIAQTkgACAEahAPQciyBSgCACEEQciyBUEANgIAIARBAUYNARAXCyADQSBqJAAgAA8LEAYhAxAHGkHIsgVBADYCAEE6EApByLIFKAIAIQBByLIFQQA2AgAgAEEBRwRAIAMQCAALQQAQCyEAEAcaIAAQhAEACxcAIAAgASACIAMgBCAAKAIAKAIgER4ACykBAX8CQCAAKAIAIgJFDQAgAiABEIsHQX8QigdFDQAgAEEANgIACyAAC7ADAQR/IwBBEGsiBSQAQciyBUEANgIAQTQgBUEIaiAAEBUhBEHIsgUoAgAhA0HIsgVBADYCAAJAAkACQCADQQFHBEAgBC0AACEDAkAgAkUNACADRQ0AIAAoAgBBdGooAgAhA0HIsgVBADYCACAAIANqKAIYIQZByLIFKAIAIQNByLIFQQA2AgACQCADQQFGDQBByLIFQQA2AgBBqgUgBiABIAIQFCEBQciyBSgCACEDQciyBUEANgIAIANBAUYNACABIAJGDQEgACgCAEF0aigCACEDQciyBUEANgIAQZoFIAAgA2pBARAFQciyBSgCACEDQciyBUEANgIAIANBAUcNAQtBABALIQMQBxogBBCFBwwCCyAEEIUHDAILQQAQCyEDEAcaCyADEAwaIAAoAgBBdGooAgAhBEHIsgVBADYCAEE5IAAgBGoQD0HIsgUoAgAhBEHIsgVBADYCACAEQQFGDQEQFwsgBUEQaiQADwsQBiEFEAcaQciyBUEANgIAQToQCkHIsgUoAgAhAEHIsgVBADYCACAAQQFHBEAgBRAIAAtBABALIQAQBxogABCEAQALEwAgACABIAIgACgCACgCMBEEAAspAQF/AkAgACgCACICRQ0AIAIgARCgB0F/EIoHRQ0AIABBADYCAAsgAAsMACAAQQxqENwGIAALCgAgAEF4ahC1BwsTACAAIAAoAgBBdGooAgBqELUHCwoAIAAQtQcQ9gwLCgAgAEF4ahC4BwsTACAAIAAoAgBBdGooAgBqELgHCwYAQaScAwsmAAJAIAJBAUYNACACQYACSg0AIAAgAhCiDA8LIABBrZwDEL0HGgsiAQF/IwBBEGsiAiQAIAAgASABEIgNEIgMIAJBEGokACAACz0CAX8BfiMAQRBrIgMkACADIAIpAgAiBDcDACADIAQ3AwggACADIAEQpgwgAEGAnQM2AgAgA0EQaiQAIAALCgAgABCnDBogAAsKACAAEL8HEPYMCwkAIAAgARDCBwskAQJ/IwBBEGsiAiQAIAAgARDIByEDIAJBEGokACABIAAgAxsLCgAgABDdBhD2DAucAQECfyMAQRBrIgAkAEEQEA4hASAAQQhqEMUHIQBByLIFQQA2AgBBrAUgAUGcnQMgABAUGkHIsgUoAgAhAEHIsgVBADYCAAJAAkAgAEEBRwRAQciyBUEANgIAQTEgAUHknQNBrQUQEkHIsgUoAgAhAUHIsgVBADYCACABQQFHDQIQBiEAEAcaDAELEAYhABAHGiABEBMLIAAQCAsAC04BAX8jAEEQayIBJAACQEHQsgUtAABBAXENAEHQsgUQqwxFDQBB0LIFEK8MCyABQQhqQQFBpJIEEMkHIAAgASkDCDcCACABQRBqJAAgAAtAACAAQQA2AhQgACABNgIYIABBADYCDCAAQoKggIDgADcCBCAAIAFFNgIQIABBIGpBAEEoEIENGiAAQRxqEN0KCzUBAX8jAEEQayICJAAgAiAAKAIANgIMIAAgASgCADYCACABIAJBDGooAgA2AgAgAkEQaiQACw0AIAAoAgAgASgCAEkLEAAgACACNgIEIAAgATYCAAssAQF/IAAoAgAiAQRAIAEQiAdBfxCKB0UEQCAAKAIARQ8LIABBADYCAAtBAQssAQF/IAAoAgAiAQRAIAEQngdBfxCKB0UEQCAAKAIARQ8LIABBADYCAAtBAQsRACAAIAEgACgCACgCHBEDAAsRACAAIAEgACgCACgCLBEDAAsMACAAIAEoAgA2AgALxAIBC38gACgCCCAAKAIAQaLa79cGaiIFENAHIQQgACgCDCAFENAHIQMgACgCECAFENAHIQYCQCAEIAFBAnZPDQAgAyABIARBAnRrIgdPDQAgBiAHTw0AIAMgBnJBA3ENACAGQQJ2IQogA0ECdiELQQAhBwNAIAAgByAEQQF2IglqIgxBAXQiDSALakECdGoiAygCACAFENAHIQYgASADKAIEIAUQ0AciA00NASAGIAEgA2tPDQEgACADIAZqai0AAA0BIAIgACADahCDBiIDRQRAIAAgCiANakECdGoiBCgCACAFENAHIQMgASAEKAIEIAUQ0AciBE0NAiADIAEgBGtPDQJBACAAIARq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EAcaDAELQciyBUEANgIAQcwFIAMgACgCvAEgAWsQBUHIsgUoAgAhAUHIsgVBADYCAAJAIAFBAUYNACADEK8IIQFByLIFQQA2AgBB3gUQGyECQciyBSgCACEGQciyBUEANgIAIAZBAUYNACAAIAU2AgBByLIFQQA2AgBB3wUgASACQeHBAyAAEBohAUHIsgUoAgAhAkHIsgVBADYCACACQQFGDQAgAUEBRwRAIARBBDYCAAtByLIFQQA2AgBB6AUgAEHYAmogAEHQAmoQFSEBQciyBSgCACECQciyBUEANgIAIAJBAUYNACABBEAgBCAEKAIAQQJyNgIACyAAKALYAiEBIAMQiQwaIAcQiQwaIABB4AJqJAAgAQ8LEAYhARAHGgsgAxCJDBoLIAcQiQwaIAEQCAALFQAgACABIAIgAyAAKAIAKAIwEQoACzIAIAIoAgAhAgNAAkAgACABRwR/IAAoAgAgAkcNASAABSABCw8LIABBBGohAAwAAAsACw8AIAAgACgCACgCDBEAAAsPACAAIAAoAgAoAhARAAALEQAgACABIAEoAgAoAhQRAgALogEBAn8jAEEQayICJAAgAkEIaiAAEPgGQciyBUEANgIAQeIFIAJBCGoQDSEAQciyBSgCACEDQciyBUEANgIAAkAgA0EBRg0AQciyBUEANgIAQfAFIABBwMEDQdrBAyABEBoaQciyBSgCACEAQciyBUEANgIAIABBAUYNACACQQhqEPcHIAJBEGokACABDwsQBiEBEAcaIAJBCGoQ9wcgARAIAAvUAgEBfyMAQTBrIgUkACAFIAE2AigCQCACKAIEQQFxRQRAIAAgASACIAMgBCAAKAIAKAIYEQgAIQIMAQsgBUEYaiACEPgGQciyBUEANgIAQcAFIAVBGGoQDSECQciyBSgCACEBQciyBUEANgIAAkAgAUEBRwRAIAVBGGoQ9wcCQCAEBEAgBUEYaiACEPkHDAELIAVBGGogAhD6BwsgBSAFQRhqENYINgIQA0AgBSAFQRhqENcINgIIIAVBEGogBUEIahDYCEUEQCAFKAIoIQIgBUEYahCJDBoMBAsgBUEQaigCACwAACECQciyBUEANgIAQfIFIAVBKGogAhAVGkHIsgUoAgAhAkHIsgVBADYCACACQQFHBEAgBUEQahDZCAwBCwsQBiECEAcaIAVBGGoQ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AgAPCyADIAJBBHI2AgALPgAgASACIAMgBEECEIkJIQEgAygCACECAkAgAUF/akELSw0AIAJBBHENACAAIAE2AgAPCyADIAJBBHI2AgALPAAgASACIAMgBEEDEIkJIQEgAygCACECAkAgAUHtAkoNACACQQRxDQAgACABNgIADwsgAyACQQRyNgIACz4AIAEgAiADIARBAhCJCSEBIAMoAgAhAgJAIAFBDEoNACACQQRxDQAgACABQX9qNgIADwsgAyACQQRyNgIACzsAIAEgAiADIARBAhCJCSEBIAMoAgAhAgJAIAFBO0oNACACQQRxDQAgACABNgIADwsgAyACQQRyNgIAC2EBAX8jAEEQayIEJAAgBCABNgIIA0ACQCAAIARBCGoQ/AZFDQAgA0GAwAAgABD9BhD+BkUNACAAEP8GGgwBCwsgACAEQQhqEIAHBEAgAiACKAIAQQJyNgIACyAEQRBqJAALgwEAIABBCGogACgCCCgCCBEAACIAEIEIQQAgAEEMahCBCGtGBEAgBCAEKAIAQQRyNgIADwsgAiADIAAgAEEYaiAFIARBABD7ByAAayEAAkAgASgCACIEQQxHDQAgAA0AIAFBADYCAA8LAkAgBEELSg0AIABBDEcNACABIARBDGo2AgALCzsAIAEgAiADIARBAhCJCSEBIAMoAgAhAgJAIAFBPEoNACACQQRxDQAgACABNgIADwsgAyACQQRyNgIACzsAIAEgAiADIARBARCJCSEBIAMoAgAhAgJAIAFBBkoNACACQQRxDQAgACABNgIADwsgAyACQQRyNgIACygAIAEgAiADIARBBBCJCSEBIAMtAABBBHFFBEAgACABQZRxajYCAAsLlwQBA38jAEEgayIIJAAgCCACNgIQIAggATYCGCAIQQhqIAMQ+AZByLIFQQA2AgBB4gUgCEEIahANIQFByLIFKAIAIQJByLIFQQA2AgAgAkEBRwRAIAhBCGoQ9wcgBEEANgIAQQAhAgJAA0AgBiAHRg0BIAINAQJAIAhBGGogCEEQahCcBw0AAkAgASAGKAIAEJgJQSVGBEAgBkEEaiICIAdGDQJBACEKAn8CQCABIAIoAgAQmAkiCUHFAEYNACAJQf8BcUEwRg0AIAYhAiAJDAELIAZBCGoiBiAHRg0DIAkhCiABIAYoAgAQmAkLIQYgCCAAIAgo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AyACQQRyNgIACz4AIAEgAiADIARBAhChCSEBIAMoAgAhAgJAIAFBDEoNACACQQRxDQAgACABQX9qNgIADwsgAyACQQRyNgIACzsAIAEgAiADIARBAhChCSEBIAMoAgAhAgJAIAFBO0oNACACQQRxDQAgACABNgIADwsgAyACQQRyNgIAC2EBAX8jAEEQayIEJAAgBCABNgIIA0ACQCAAIARBCGoQmAdFDQAgA0GAwAAgABCZBxCaB0UNACAAEJsHGgwBCwsgACAEQQhqEJwHBEAgAiACKAIAQQJyNgIACyAEQRBqJAALgwEAIABBCGogACgCCCgCCBEAACIAEIEIQQAgAEEMahCBCGtGBEAgBCAEKAIAQQRyNgIADwsgAiADIAAgAEEYaiAFIARBABC1CCAAayEAAkAgASgCACIEQQxHDQAgAA0AIAFBADYCAA8LAkAgBEELSg0AIABBDEcNACABIARBDGo2AgALCzsAIAEgAiADIARBAhChCSEBIAMoAgAhAgJAIAFBPEoNACACQQRxDQAgACABNgIADwsgAyACQQRyNgIACzsAIAEgAiADIARBARChCSEBIAMoAgAhAgJAIAFBBkoNACACQQRxDQAgACABNgIADwsgAyACQQRyNgIACygAIAEgAiADIARBBBChCSEBIAMtAABBBHFFBEAgACABQZRxajYCAAsLSgAjAEGAAWsiAiQAIAIgAkH0AGo2AgwgAEEIaiACQRBqIAJBDGogBCAFIAYQsAkgAkEQaiACKAIMIAEQ+QshASACQYABaiQAIAELZAEBfyMAQRBrIgYkACAGQQA6AA8gBiAFOgAOIAYgBDoADSAGQSU6AAwgBQRAIAZBDWogBkEOahCxCQsgAiABIAEgAigCABCyCSAGQQxqIAMgACgCABA1IAFqNgIAIAZBEGokAAs1AQF/IwBBEGsiAiQAIAIgAC0AADoADyAAIAEtAAA6AAAgASACQQ9qLQAAOgAAIAJBEGokAAsHACABIABrC0oAIwBBoANrIgIkACACIAJBoANqNgIMIABBCGogAkEQaiACQQxqIAQgBSAGELQJIAJBEGogAigCDCABEPoLIQEgAkGgA2okACABC4IBAQF/IwBBkAFrIgYkACAGIAZBhAFqNgIcIAAgBkEgaiAGQRxqIAMgBCAFELAJIAZCADcDECAGIAZBIGo2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ACAAIAEtAAA6AAALCQAgACABNgIECwkAIAAgAToACwuqAgEEfyMAQSBrIgUkACAAEIEIIQQgABCKCCEDAkAgASACEPULIgZFDQAgASAAEK8IIAAQrwggABCBCGoQ+wsEQAJ/IwBBEGsiAyQAIAVBEGoiBCABIAIQ8AcgA0EQaiQAIAQiAQsQrwghAyABEIEIIQJByLIFQQA2AgBBjwMgACADIAIQFBpByLIFKAIAIQNByLIFQQA2AgAgA0EBRwRAIAEQiQwaDAILEAYhAxAHGiABEIkMGiADEAgACyADIARrIAZJBEAgACADIAQgBmogA2sgBCAEEJAMCyAAEK8IIARqIQMDQCABIAJHBEAgAyABEMkJIAFBAWohASADQQFqIQMMAQsLIAVBADoADyADIAVBD2oQyQkgACAEIAZqEM0LCyAFQSBqJAAgAAsLACAAQcCzBRD8BwsRACAAIAEgASgCACgCLBECAAsRACAAIAEgASgCACgCIBECAAsJACAAIAEQ5QkLDwAgACAAKAIAKAIkEQAACwsAIABBuLMFEPwHC3kBAX8jAEEgayIDJAAgAyABNgIQIAMgADYCGCADIAI2AggDQAJAAn9BASADQRhqIANBEGoQ2AhFDQAaIANBGGooAgAtAAAgA0EIaigCAC0AAEYNAUEACyECIANBIGokACACDwsgA0EYahDZCCADQQhqENkIDAAACwALOQEBfyMAQRBrIgIkACACIAAoAgA2AgggAkEIaiIAIAAoAgAgAWo2AgAgAigCCCEBIAJBEGokACABCxQBAX8gACgCACEBIABBADYCACABCyAAIAAgARDVCRD/ByABEOsIKAIAIQEgABDrCCABNgIAC+AGAQJ/IwBB8ARrIgAkACAAIAI2AuAEIAAgATYC6AQgAEGHBjYCECAAQcgBaiAAQdABaiAAQRBqEP4HIQFByLIFQQA2AgAgAEHAAWogBBD4BkHIsgUoAgAhB0HIsgVBADYCAAJAAkACQAJAAkACQAJ/AkACQAJAIAdBAUcEQEHIsgVBADYCAEHiBSAAQcABahANIQdByLIFKAIAIQhByLIFQQA2AgAgCEEBRg0BIABBADoAvwEgBCgCBCEEQciyBUEANgIAQZEGIABB6ARqIAIgAyAAQcABaiAEIAUgAEG/AWogByABIABBxAFqIABB4ARqEDYhBEHI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AgBB1AZB4MAFQdDABRAFQciyBSgCACEAQciyBUEANgIAIABBAUYNAkHIsgVBADYCABDLCkHIsgUoAgAhAEHIsgVBADYCACAAQQFGDQJByLIFQQA2AgBB1gZB4MAFQdjABRAFQciyBSgCACEAQciyBUEANgIAIABBAUYNAg8LEAYhABAHGgwDCxAGIQAQBxoMAQsQBiEAEAcaIAIQiQwaCyABELEKCyAAEAgACx0AIABBADYCBCAAQbzyAzYCACAAQZTIAzYCACAAC30BAn8gABCyCiECAkAgAUUNAEHIsgVBADYCAEHXBiAAIAEQBUHIsgUoAgAhA0HIsgVBADYCACADQQFHBEBByLIFQQA2AgBB2AYgACABEAVByLIFKAIAIQFByLIFQQA2AgAgAUEBRw0BCxAGIQAQBxogAhC1CiAAEAgACyAACxAAIAAgAUHosgUQuQoQugoLEAAgACABQfCyBRC5ChC6CgsQACAAIAFBtLQFELkKELoKCwUAELwKCxAAIAAgAUGstAUQuQoQugoLBQAQvQoLEAAgACABQby0BRC5ChC6CgsFABC+CgsQACAAIAFBxLQFELkKELoKCwUAEL8KCxAAIAAgAUHMtAUQuQoQugoLCQBB6L4FEP8JCxAAIAAgAUHUtAUQuQoQugoLEAAgACABQdy0BRC5ChC6CgsQACAAIAFB5LQFELkKELoKCxAAIAAgAUH4sgUQuQoQugoLEAAgACABQYCzBRC5ChC6CgsQACAAIAFBiLMFELkKELoKCxAAIAAgAUGQswUQuQoQugoLBQAQwAoLEAAgACABQbizBRC5ChC6CgsFABDBCgsQACAAIAFBwLMFELkKELoKCwUAEMIKCxAAIAAgAUHIswUQuQoQugoLBQAQwwoLEAAgACABQdCzBRC5ChC6CgsFABDECgsQACAAIAFB2LMFELkKELoKCwUAEMUKCxAAIAAgAUHgswUQuQoQugoLBQAQxgoLEAAgACABQeizBRC5ChC6CgsFABDHCgsQACAAIAFB8LMFELkKELoKCxAAIAAgAUGYswUQuQoQugoLEAAgACABQaCzBRC5ChC6CgsFABDICgsQACAAIAFBqLMFELkKELoKCwUAEMkKCxAAIAAgAUGwswUQuQoQugoLBQAQygoLEAAgACABQfizBRC5ChC6CgsFABDLCgsQACAAIAFB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BGoiAhDxCyAAIAIQxwcgAEEEaiABQQhqEMcHIAAQWiABEFYQxwcgASABKAIENgIAIAAgABC2ChDXCwsxACAAIAAoAgQQ8wsgACgCAARAIAAQ7gsgACgCACAAEFYoAgAgACgCAGtBAnUQ3AsLCwoAIABBDGoQ8gsLKwEBfyAAIAEoAgA2AgAgASgCACEDIAAgATYCCCAAIAMgAkECdGo2AgQgAAsPACAAKAIIIAAoAgA2AgALKAAgAyADKAIAIAIgAWsiAmsiADYCACACQQFOBEAgACABIAIQgA0aCwsKACAAQQRqKAIAC1gBAX8CQANAIAAoAgggAUYNASAAEO4LGiAAIAAoAghBfGo2AghByLIFQQA2AgBByLIFKAIAIQJByLIFQQA2AgAgAkEBRw0AC0EAEAshABAHGiAAEIQBAAsLOAECfyAAKAIAIAAoAggiAkEBdWohASAAKAIEIQAgASACQQFxBH8gASgCACAAaigCAAUgAAsRAQALCQAgACABELIJCyQAIABBAk8EfyAAQQRqQXxxIgAgAEF/aiIAIABBAkYbBUEBCwseAEH/////AyAASQRAQajxAxDmCwALIABBAnQQ/gsLNAEBfyMAQRBrIgMkACADIAEgAhCqCBDtByAAIAMpAwA3AwAgACADKQMINwMIIANBEGokAAtGAQF/IwBBEGsiAyQAIAMgAjYCCANAIAAgAUcEQCADQQhqIAAsAAAQsQcaIABBAWohAAwBCwsgAygCCCEAIANBEGokACAAC0YBAX8jAEEQayIDJAAgAyACNgIIA0AgACABRwRAIANBCGogACgCABC0BxogAEEEaiEADAELCyADKAIIIQAgA0EQaiQAIAALDQAgACACSSABIABNcQvMAwEBfwNAIAAoAgBBAUYNAAsCQAJAIAAoAgBFBEACQCAAQQEQ5AtByLIFQQA2AgBByLIFKAIAIQJByLIFQQA2AgACQCACQQFGDQBByLIFQQA2AgBB4wYgARAPQciyBSgCACEBQciyBUEANgIAIAFBAUYNAEHIsgVBADYCAEHIsgUoAgAhAUHIsgVBADYCACABQQFGDQAgAEF/NgIAQciyBUEANgIAQciyBSgCACEBQciyBUEANgIAIAFBAUYNAEHIsgVBADYCAEHIsgUoAgAhAUHIsgVBADYCACABQQFHDQELQQAQCyEBEAca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IAgbIghKBEADQAJ+IAdBAXEEQCADIAuEUARAIAVBIGogASACQgBCABDUBiAFKQMoIQIgBSkDICEEDAULIAtCAYYhCyADQj+IDAELIARCP4ghCyAEIQMgCkIBhgsgC4QiCiAPfSADQgGGIgQgDFStfSILQn9VIQcgBCAMfSEDIAZBf2oiBiAISg0ACyAIIQYLAkAgB0UNACADIgQgCyIKhEIAUg0AIAVBMGogASACQgBCABDUBiAFKQM4IQIgBSkDMCEEDAELIApC////////P1gEQANAIARCP4ghAiAGQX9qIQYgBEIBhiEEIAIgCkIBhoQiCkKAgICAgIDAAFQNAAsLIAlBgIACcSEHIAZBAEwEQCAFQUBrIAQgCkL///////8/gyAGQfgAaiAHcq1CMIaEQgBCgICAgICAwMM/ENQGIAUpA0ghAiAFKQNAIQQMAQsgCkL///////8/gyAGIAdyrUIwhoQhAgsgACAENwMAIAAgAjcDCCAFQYABaiQAC6kBAQF8RAAAAAAAAPA/IQECQCAAQYAITgRARAAAAAAAAOB/IQEgAEH/D0gEQCAAQYF4aiEADAILRAAAAAAAAPB/IQEgAEH9FyAAQf0XSBtBgnBqIQAMAQsgAEGBeEoNAEQAAAAAAAAQACEBIABBg3BKBEAgAEH+B2ohAAwBC0QAAAAAAAAAACEBIABBhmggAEGGaEobQfwPaiEACyABIABB/wdqrUI0hr+iC0QCAX8BfiABQv///////z+DIQMCfyABQjCIp0H//wFxIgJB//8BRwRAQQQgAg0BGkECQQMgACADhFAbDwsgACADhFALC4IEAQN/IAJBgARPBEAgACABIAIQQRogAA8LIAAgAmohAwJAIAAgAXNBA3FFBEACQCACQQFIBEAgACECDAELIABBA3FFBEAgACECDAELIAAhAgNAIAIgAS0AADoAACABQQFqIQEgAkEBaiICIANPDQEgAkEDcQ0ACwsCQCADQXxxIgRBwABJDQAgAiAEQUBqIgVLDQADQCACIAEoAgA2AgAgAiABKAIENgIEIAIgASgCCDYCCCACIAEoAgw2AgwgAiABKAIQNgIQIAIgASgCFDYCFCACIAEoAhg2AhggAiABKAIcNgIcIAIgASgCIDYCICACIAEoAiQ2AiQgAiABKAIoNgIoIAIgASgCLDYCLCACIAEo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IwALCQAgASAAEQAACwsAIAEgAiAAEQMACw0AIAEgAiADIAARBAALDwAgASACIAMgBCAAEQoACxEAIAEgAiADIAQgBSAAEQgACxMAIAEgAiADIAQgBSAGIAARCQALFQAgASACIAMgBCAFIAYgByAAEQ8ACxsAIAEgAiADIAQgBSAGIAcgCCAJIAogABEhAAsdACABIAIgAyAEIAUgBiAHIAggCSAKIAsgABEaAAsfACABIAIgAyAEIAUgBiAHIAggCSAKIAsgDCAAER0ACxEAIAEgAiADIAQgBSAAER4ACwsAIAEgAiAAETMACw0AIAEgAiADIAAROAALDQAgASACIAMgABE6AAsEACMACxAAIwAgAGtBcHEiACQAIAALBgAgACQACwYAIABAAAsTACABIAIgAyAEIAUgBiAAEScACxcAIAEgAiADIAQgBSAGIAcgCCAAEQ4ACxMAIAEgAiADIAQgBSAGIAARDAALJQAgASACIAMgBCAFrSAGrUIghoQgB60gCK1CIIaEIAkgABErAAsZACABIAIgA60gBK1CIIaEIAUgBiAAERQACxUAIAEgAq0gA61CIIaEIAQgABEYAAsZACABIAIgAyAEIAWtIAatQiCGhCAAERUACyEAIAEgAiADrSAErUIghoQgBSAGIAcgCCAJIAogABEvAAsTACABIAKtIAOtQiCGhCAAERMACxgBAX4gASACIAARFgAiA0IgiKcQQiADpwscAQF+IAEgAiADIAQgABEfACIFQiCIpxBCIAWnCyEAIAEgAiADrSAErUIghoQgBSAGrSAHrUIghoQgABEQAAsiAQF+IAEgAq0gA61CIIaEIAQgABEbACIFQiCIpxBCIAWnCyMAIAEgAiADIAQgBa0gBq1CIIaEIAetIAitQiCGhCAAESYACyUAIAEgAiADIAQgBSAGrSAHrUIghoQgCK0gCa1CIIaEIAARJQALIgBBqwEgAEGQvwUgAacgAUIgiKcgAiADIAQgBSAGQQMQQwsTACAAIAEgAqcgAkIgiKcgAxBFCxIAIAAgAUEAEEatEAetQiCGhAsXACAAIAEgAiADpyADQiCIp0EAIAQQSAsWACAAIAEgAiADIAQQS60QB61CIIaECwuo7wNWAEGACAuDFUgyNjRNUDRFbmNvZGVyAG91dHB1dEZpbGVuYW1lAHdpZHRoAGhlaWdodABmcmFtZVJhdGUAa2JwcwBzcGVlZABxdWFudGl6YXRpb25QYXJhbWV0ZXIAZ3JvdXBPZlBpY3R1cmVzAHRlbXBvcmFsRGVub2lzZQBkZXNpcmVkTmFsdUJ5dGVzAGRlYnVnAGluaXRpYWxpemUAYWRkRnJhbWVZdXYAYWRkRnJhbWVSZ2JhAGZpbmFsaXplAEVSUk9SICVzKCVkKTogJXMKICAgIEVYUFI6ICVzCiAgICBGVU5DOiAlcwoAL2hvbWUvdXNlci9oMjY0LW1wNC1lbmNvZGVyLmgAQ2Fubm90IHNldCBwcm9wZXJ0aWVzIGFmdGVyIGluaXRpYWxpemUAIXByaXZhdGVfAHZvaWQgSDI2NE1QNEVuY29kZXI6OnNldF9vdXRwdXRGaWxlbmFtZShjb25zdCBzdGQ6OnN0cmluZyAmKQB2b2lkIEgyNjRNUDRFbmNvZGVyOjpzZXRfd2lkdGgoY29uc3QgdWludDMyX3QgJikAdm9pZCBIMjY0TVA0RW5jb2Rlcjo6c2V0X2hlaWdodChjb25zdCB1aW50MzJfdCAmKQB2b2lkIEgyNjRNUDRFbmNvZGVyOjpzZXRfZnJhbWVSYXRlKGNvbnN0IHVpbnQzMl90ICYpAHZvaWQgSDI2NE1QNEVuY29kZXI6OnNldF9rYnBzKGNvbnN0IHVpbnQzMl90ICYpAHZvaWQgSDI2NE1QNEVuY29kZXI6OnNldF9zcGVlZChjb25zdCB1aW50MzJfdCAmKQB2b2lkIEgyNjRNUDRFbmNvZGVyOjpzZXRfcXVhbnRpemF0aW9uUGFyYW1ldGVyKGNvbnN0IHVpbnQzMl90ICYpAHZvaWQgSDI2NE1QNEVuY29kZXI6OnNldF9ncm91cE9mUGljdHVyZXMoY29uc3QgdWludDMyX3QgJikAdm9pZCBIMjY0TVA0RW5jb2Rlcjo6c2V0X3RlbXBvcmFsRGVub2lzZShjb25zdCBib29sICYpAHZvaWQgSDI2NE1QNEVuY29kZXI6OnNldF9kZXNpcmVkTmFsdUJ5dGVzKGNvbnN0IHVpbnQzMl90ICYpAHZvaWQgSDI2NE1QNEVuY29kZXI6OnNldF9kZWJ1Zyhjb25zdCBib29sICYpADE0SDI2NE1QNEVuY29kZXIA7P4AAIcHAABQMTRIMjY0TVA0RW5jb2RlcgAAAMz/AACgBwAAAAAAAJgHAABQSzE0SDI2NE1QNEVuY29kZXIAAMz/AADEBwAAAQAAAJgHAABpaQB2AHZpALQHAABvdXRwdXQubXA0AE5TdDNfXzIxMmJhc2ljX3N0cmluZ0ljTlNfMTFjaGFyX3RyYWl0c0ljRUVOU185YWxsb2NhdG9ySWNFRUVFAE5TdDNfXzIyMV9fYmFzaWNfc3RyaW5nX2NvbW1vbklMYjFFRUUA7P4AAD4IAABw/wAA/wcAAAAAAAABAAAAZAgAAAAAAABpaWkAdmlpaQAAAABA/gAAtAcAAHZpaQBA/gAAtAcAAGwIAABFUlJPUiAlcyglZCk6ICVzCiAgICBFWFBSOiAlcwogICAgRlVOQzogJXMKAC9ob21lL3VzZXIvaDI2NC1tcDQtZW5jb2Rlci5jcHAASW50ZXJuYWwgZXJyb3IAc2l6ZSA+PSA1AHN0YXRpYyB2b2lkIEgyNjRNUDRFbmNvZGVyUHJpdmF0ZTo6bmFsdV9jYWxsYmFjayhjb25zdCB1aW50OF90ICosIGludCwgdm9pZCAqKQBkYXRhWzBdID09IDAgJiYgZGF0YVsxXSA9PSAwICYmIGRhdGFbMl0gPT0gMCAmJiBkYXRhWzNdID09IDEAbmFsdT0AU1BTAFBQUwBVbmtub3duIGZyYW1lIHR5cGUAZmFsc2UALCBoZXg9ACUwMlgALi4uACwgYnl0ZXM9JWQKAGVuY29kZXJfcHJpdmF0ZS0+dmlkZW9fdHJhY2sgIT0gKChNUDRUcmFja0lkKTApAE1QNFdyaXRlU2FtcGxlKGVuY29kZXJfcHJpdmF0ZS0+bXA0LCBlbmNvZGVyX3ByaXZhdGUtPnZpZGVvX3RyYWNrLCBkYXRhLCBzaXplLCAoKE1QNER1cmF0aW9uKS0xKSwgMCwgMSkAQ2Fubm90IGNhbGwgaW5pdGlhbGl6ZSBtb3JlIHRoYW4gb25jZSB3aXRob3V0IGNhbGxpbmcgZmluYWxpemUAIXByaXZhdGVfAHZvaWQgSDI2NE1QNEVuY29kZXI6OmluaXRpYWxpemUoKQBwcml2YXRlXwAhb3V0cHV0RmlsZW5hbWUuZW1wdHkoKQB3aWR0aCA+IDAAaGVpZ2h0ID4gMABmcmFtZVJhdGUgPiAwAHF1YW50aXphdGlvblBhcmFtZXRlciA+PSAxMCAmJiBxdWFudGl6YXRpb25QYXJhbWV0ZXIgPD0gNTEAc3BlZWQgPD0gMTAAcHJpdmF0ZV8tPm1wNCAhPSAoKE1QNEZpbGVIYW5kbGUpMEwpAFNpemUgbXVzdCBiZSBhIG11bHRpcGxlIG9mIDIAc2l6ZW9mX3Jlc3VsdCAhPSBIMjY0RV9TVEFUVVNfU0laRV9OT1RfTVVMVElQTEVfMgBzaXplb2ZfcmVzdWx0ID09IDAAc2l6ZW9mX3BlcnNpc3Q9JWQsIHNpemVvZl9zY3JhdGNoPSVkCgBGdW5jdGlvbiBpbml0aWFsaXplIGhhcyBub3QgYmVlbiBjYWxsZWQAdm9pZCBIMjY0TVA0RW5jb2Rlcjo6YWRkRnJhbWVZdXYoY29uc3Qgc3RkOjpzdHJpbmcgJikASW5jb3JyZWN0IGJ1ZmZlciBzaXplIGZvciBZVVYgKHdpZHRoICogaGVpZ2h0ICogMyAvIDIpAHl1dl9idWZmZXIuc2l6ZSgpID09IHdpZHRoICogaGVpZ2h0ICogMyAvIDIASDI2NEVfZW5jb2RlKCBwcml2YXRlXy0+ZW5jLCBwcml2YXRlXy0+c2NyYXRjaCwgJnJ1bl9wYXJhbSwgJnl1dl9wbGFuZXMsICZjb2RlZF9kYXRhLCAmc2l6ZW9mX2NvZGVkX2RhdGEpID09IDAAZnJhbWU9JWQsIGJ5dGVzPSVkCgB2b2lkIEgyNjRNUDRFbmNvZGVyOjphZGRGcmFtZVJnYmEoY29uc3Qgc3RkOjpzdHJpbmcgJikASW5jb3JyZWN0IGJ1ZmZlciBzaXplIGZvciBSR0JBICh3aWR0aCAqIGhlaWdodCAqIDQpAHJnYmFfYnVmZmVyLnNpemUoKSA9PSB3aWR0aCAqIGhlaWdodCAqIDQAdm9pZCBIMjY0TVA0RW5jb2Rlcjo6ZmluYWxpemUoKQBGdW5jdGlvbiBmaW5hbGl6ZSB3YXMgbm90IGNhbGxlZCBiZWZvcmUgdGhlIGVuY29kZXIgZGVzdHJ1Y3RlZABwcml2YXRlXyA9PSBudWxscHRyAEgyNjRNUDRFbmNvZGVyOjp+SDI2NE1QNEVuY29kZXIoKQBBkR0LvwIQGSAlKSwwMjU3OTs8PkBBQkNFRkdISUpLTExNTk9QUFFSUlNTVFVVVlZX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ZXJ2ZWQAbGVuZ3RoU2l6ZU1pbnVzT25lAHJlc2VydmVkMQBudW1PZlNlcXVlbmNlUGFyYW1ldGVyU2V0cwBzZXF1ZW5jZUVudHJpZXMAc2VxdWVuY2VQYXJhbWV0ZXJTZXRMZW5ndGgAc2VxdWVuY2VQYXJhbWV0ZXJTZXROQUxVbml0AG51bU9mUGljdHVyZVBhcmFtZXRlclNldHMAcGljdHVyZUVudHJpZXMAcGljdHVyZVBhcmFtZXRlclNldExlbmd0aABwaWN0dXJlUGFyYW1ldGVyU2V0TkFMVW5pdABONW1wNHYyNGltcGwxMU1QNEF2Y0NBdG9tRQAU/wAAwSEAADRoAABpbGxlZ2FsIGFycmF5IGluZGV4OiAAIG9mIAAvaG9tZS91c2VyL2xpYm1wNHYyL3NyYy9tcDRhcnJheS5oAG9wZXJhdG9yW10AL2hvbWUvdXNlci9saWJtcDR2Mi9zcmMvbXA0cHJvcGVydHkuaAAAAAAAALQiAABqAAAAawAAAGwAAABtAAAAbgAAAG8AAABwAAAAcQAAAHIAAABzAAAAdAAAAHUAAABONW1wNHYyNGltcGwxN1NpemVUYWJsZVByb3BlcnR5RQAAAAAU/wAAkCIAAFSpAABwcm9wZXJ0eSBpcyByZWFkLW9ubHk6IABTZXRWYWx1ZQBpbGxlZ2FsIGFycmF5IGluZGV4AEluc2VydAAAAAAA/CMAAHkAAAB6AAAAYXNzZXJ0IGZhaWx1cmU6ICh2ZXJib3NpdHlfICE9IE1QNF9MT0dfTk9ORSkAL2hvbWUvdXNlci9saWJtcDR2Mi9zcmMvbG9nLmNwcAB2ZHVtcABhc3NlcnQgZmFpbHVyZTogKGZvcm1hdCkAYXNzZXJ0IGZhaWx1cmU6IChmb3JtYXRbMF0gIT0gJ1wwJykAJSpjAHZwcmludGYAYXNzZXJ0IGZhaWx1cmU6IChwQnl0ZXMgfHwgKG51bUJ5dGVzID09IDApKQBoZXhEdW1wAAA6IAAgICAAJXMATjVtcDR2MjRpbXBsM0xvZ0UAAAAA7P4AAOcjAAAAAAAAbCwAAIoAAACLAAAAjAAAAI0AAACOAAAAjwAAAJAAAABpZAByZWZJbmRleABJUElFU0lkAGxhbmd1YWdlQ29kZQB0aXRsZQB2YWx1ZQBJUE1QRGVzY3JpcHRvcklkAHByb2ZpbGVMZXZlbEluZGljYXRpb25JbmRleABPRFByb2ZpbGVMZXZlbEluZGljYXRpb24Ac2NlbmVQcm9maWxlTGV2ZWxJbmRpY2F0aW9uAGF1ZGlvUHJvZmlsZUxldmVsSW5kaWNhdGlvbgB2aXN1YWxQcm9maWxlTGV2ZWxJbmRpY2F0aW9uAGdyYXBoaWNzUHJvZmlsZUxldmVsSW5kaWNhdGlvbgBNUEVHSlByb2ZpbGVMZXZlbEluZGljYXRpb24AJXM6ICIlcyI6IGVycm9yIGluIGJhc2UgZGVzY3JpcHRvciAtIHRhZyAldQBNUDRCYXNlRGVzY3JpcHRvcgAAAAAAAAAAHCsAAIoAAACRAAAAjAAAAJIAAACOAAAAjwAAAJAAAABkYXRhAGluZm8ASVBNUFNUeXBlAElQTVBEYXRhAGZvcm1hdElkZW50aWZpZXIAYWRkaXRpb25hbElkZW50aWZpY2F0aW9uSW5mbwAlczogIiVzIjogZXJyb3IgaW4gYnl0ZXMgZGVzY3JpcHRvciAtIHRhZyAldQBNUDRCeXRlc0Rlc2NyaXB0b3IAAAAAAABIKwAAigAAAJMAAACUAAAAjQAAAI4AAACPAAAAlQAAAG9iamVjdERlc2NyaXB0b3JJZABVUkxGbGFnAGluY2x1ZGVJbmxpbmVQcm9maWxlTGV2ZWxGbGFnAHJlc2VydmVkAFVSTABPRFByb2ZpbGVMZXZlbElkAHNjZW5lUHJvZmlsZUxldmVsSWQAYXVkaW9Qcm9maWxlTGV2ZWxJZAB2aXN1YWxQcm9maWxlTGV2ZWxJZABncmFwaGljc1Byb2ZpbGVMZXZlbElkAGVzSWRzAG9jaURlc2NyAGlwbXBEZXNjclB0cgBleHREZXNjcgAAAAAAdCsAAIoAAACWAAAAlwAAAI0AAACOAAAAjwAAAJgAAAAAAAAAoCsAAIoAAACZAAAAjAAAAI0AAACOAAAAjwAAAJoAAABFU0lEAHN0cmVhbURlcGVuZGVuY2VGbGFnAE9DUnN0cmVhbUZsYWcAc3RyZWFtUHJpb3JpdHkAZGVwZW5kc09uRVNJRABPQ1JFU0lEAGRlY0NvbmZpZ0Rlc2NyAHNsQ29uZmlnRGVzY3IAaXBpUHRyAGlwSWRzAGxhbmdEZXNjcgBxb3NEZXNjcgByZWdEZXNjcgAAAAAAANQrAACKAAAAmwAAAJwAAACNAAAAjgAAAI8AAACQAAAAb2JqZWN0VHlwZUlkAHN0cmVhbVR5cGUAdXBTdHJlYW0AYnVmZmVyU2l6ZURCAG1heEJpdHJhdGUAYXZnQml0cmF0ZQBkZWNTcGVjaWZpY0luZm8AcHJvZmlsZUxldmVsSW5kaWNhdGlvbkluZGV4RGVzY3IAAAAAAAAAAAgsAACKAAAAnQAAAJ4AAACfAAAAjgAAAI8AAACgAAAAcHJlZGVmaW5lZAB1c2VBY2Nlc3NVbml0U3RhcnRGbGFnAHVzZUFjY2Vzc1VuaXRFbmRGbGFnAHVzZVJhbmRvbUFjY2Vzc1BvaW50RmxhZwBoYXNSYW5kb21BY2Nlc3NVbml0c09ubHlGbGFnAHVzZVBhZGRpbmdGbGFnAHVzZVRpbWVTdGFtcHNGbGFnAHVzZUlkbGVGbGFnAGR1cmF0aW9uRmxhZwB0aW1lU3RhbXBSZXNvbHV0aW9uAE9DUlJlc29sdXRpb24AdGltZVN0YW1wTGVuZ3RoAE9DUkxlbmd0aABBVUxlbmd0aABpbnN0YW50Qml0cmF0ZUxlbmd0aABkZWdyYWRhdGlvblByaW9ydHlMZW5ndGgAQVVTZXFOdW1MZW5ndGgAcGFja2V0U2VxTnVtTGVuZ3RoAHRpbWVTY2FsZQBhY2Nlc3NVbml0RHVyYXRpb24AY29tcG9zaXRpb25Vbml0RHVyYXRpb24Ac3RhcnREZWNvZGluZ1RpbWVTdGFtcABzdGFydENvbXBvc2l0aW9uVGltZVN0YW1wAAAAAAAAADwsAACKAAAAoQAAAIwAAACiAAAAjgAAAI8AAACjAAAAY29tcGF0aWJpbGl0eQBjb250ZW50VHlwZUZsYWcAY29udGVudElkRmxhZwBwcm90ZWN0ZWRDb250ZW50AGNvbnRlbnRUeXBlAGNvbnRlbnRJZFR5cGUAY29udGVudElkAGluY29tcGF0aWJsZSBjb250ZW50IGlkIGRlc2NyaXB0b3IATjVtcDR2MjRpbXBsMThNUDRCeXRlc0Rlc2NyaXB0b3JFAAAAFP8AAPgqAABoawAATjVtcDR2MjRpbXBsMTVNUDRJT0Rlc2NyaXB0b3JFAAAU/wAAKCsAAGhrAABONW1wNHYyNGltcGwxNE1QNE9EZXNjcmlwdG9yRQAAABT/AABUKwAAaGsAAE41bXA0djI0aW1wbDE1TVA0RVNEZXNjcmlwdG9yRQAAFP8AAIArAABoawAATjVtcDR2MjRpbXBsMjJNUDREZWNDb25maWdEZXNjcmlwdG9yRQAAABT/AACsKwAAaGsAAE41bXA0djI0aW1wbDIxTVA0U0xDb25maWdEZXNjcmlwdG9yRQAAAAAU/wAA4CsAAGhrAABONW1wNHYyNGltcGwyMk1QNENvbnRlbnRJZERlc2NyaXB0b3JFAAAAFP8AABQsAABoawAATjVtcDR2MjRpbXBsMTdNUDRCYXNlRGVzY3JpcHRvckUAAAAAFP8AAEgsAABoawAAL2hvbWUvdXNlci9saWJtcDR2Mi9zcmMvbXA0cHJvcGVydHkuaABwcm9wZXJ0eSBpcyByZWFkLW9ubHk6IABTZXRWYWx1ZQAvaG9tZS91c2VyL2xpYm1wNHYyL3NyYy9tcDRwcm9wZXJ0eS5oAHByb3BlcnR5IGlzIHJlYWQtb25seTogAFNldFZhbHVlAFBONW1wNHYyNGltcGw5RXhjZXB0aW9uRQAAzP8AAAYtAAAAAAAAlB4AACVzOiAiJXMiOiBmYWlsZWQATVA0Q3JlYXRlUHJvdmlkZXJFeAAlczogZmFpbGVkAE1QNENsb3NlAE1QNFNldFRpbWVTY2FsZQBNUDRTZXRWaWRlb1Byb2ZpbGVMZXZlbABNUDRBZGRIMjY0VmlkZW9UcmFjawBNUDRBZGRIMjY0U2VxdWVuY2VQYXJhbWV0ZXJTZXQATVA0QWRkSDI2NFBpY3R1cmVQYXJhbWV0ZXJTZXQATVA0V3JpdGVTYW1wbGUAJXM6IHVua25vd24gZXhjZXB0aW9uIGNvbnN0cnVjdGluZyBNUDRGaWxlAENvbnN0cnVjdE1QNEZpbGUAJXM6IHVuYWJsZSB0byBhbGxvY2F0ZSBNUDRGaWxlAG1hbGxvYyBmYWlsZWQAL2hvbWUvdXNlci9saWJtcDR2Mi9zcmMvbXA0dXRpbC5oAE1QNE1hbGxvYwBQTjVtcDR2MjRpbXBsMTdQbGF0Zm9ybUV4Y2VwdGlvbkUAAAAAzP8AAIcuAAAAAAAABB8AAGlsbGVnYWwgYXJyYXkgaW5kZXgAL2hvbWUvdXNlci9saWJtcDR2Mi9zcmMvbXA0YXRvbS5oAEluc2VydABNUDRSZWFsbG9jAAAAAADALwAAYQAAALAAAACxAAAAZAAAALIAAACzAAAAZwAAALQAAABpAAAAbW9vdgBmdHlwAG1kYXQAZnJlZQBza2lwAHVkdGEAbW9vZgAvaG9tZS91c2VyL2xpYm1wNHYyL3NyYy9hdG9tX3Jvb3QuY3BwAGFzc2VydCBmYWlsdXJlOiAoZmFsc2UpAEdldExhc3RNZGF0SW5kZXgATjVtcDR2MjRpbXBsMTFNUDRSb290QXRvbUUAAAAAFP8AAKIvAAA0aAAAZGF0YQAAAAAAAAAApDEAAGEAAAC3AAAAsQAAALgAAABlAAAAZgAAAGcAAABoAAAAaQAAAHR5cGVSZXNlcnZlZAB0eXBlU2V0SWRlbnRpZmllcgB0eXBlQ29kZQBsb2NhbGUAbWV0YWRhdGEAAAAAAOwxAABhAAAAuQAAALEAAABkAAAAZQAAAGYAAABnAAAAaAAAAGkAAAB2ZXJzaW9uAGZsYWdzAAAAAAAAAKAyAABhAAAAugAAALEAAABkAAAAZQAAAGYAAABnAAAAaAAAAGkAAABtZWFuAG5hbWUAaGRscgAAAAAAAPgxAABhAAAAuwAAALEAAAC8AAAAZQAAAGYAAABnAAAAaAAAAGkAAAByZXNlcnZlZDEAaGFuZGxlclR5cGUAcmVzZXJ2ZWQyAAAAAAAgMgAAYQAAAL0AAACxAAAAvgAAAGUAAABmAAAAZwAAAGgAAABpAAAAdmFsdWUAAAAAAAAASDIAAGEAAAC/AAAAsQAAAMAAAABlAAAAZgAAAGcAAABoAAAAaQAAAAAAAAB4MgAAYQAAAMEAAACxAAAAwgAAAGUAAABmAAAAZwAAAGgAAABpAAAATjVtcDR2MjRpbXBsMTFNUDREYXRhQXRvbUUAABT/AACIMQAANGgAAE41bXA0djI0aW1wbDE1TVA0SXRtZkhkbHJBdG9tRQBONW1wNHYyNGltcGwxMU1QNEZ1bGxBdG9tRQAAABT/AADPMQAANGgAABT/AACwMQAA7DEAAE41bXA0djI0aW1wbDExTVA0TWVhbkF0b21FAAAU/wAABDIAAOwxAABONW1wNHYyNGltcGwxMU1QNE5hbWVBdG9tRQAAFP8AACwyAADsMQAATjVtcDR2MjRpbXBsMThNUDRVZHRhRWxlbWVudEF0b21FAAAAFP8AAFQyAAA0aAAATjVtcDR2MjRpbXBsMTFNUDRJdGVtQXRvbUUAABT/AACEMgAANGgAAGhudGkAAAAAAAAAAFQzAABhAAAAwwAAALEAAADEAAAAZQAAAGYAAABnAAAAaAAAAGkAAABhc3NlcnQgZmFpbHVyZTogKGdyYW5kUGFyZW50KQAvaG9tZS91c2VyL2xpYm1wNHYyL3NyYy9hdG9tX2hudGkuY3BwAFJlYWQAdHJhawBzZHAgAHJ0cCAATjVtcDR2MjRpbXBsMTFNUDRIbnRpQXRvbUUAABT/AAA4MwAANGgAAGhpbmYAAAAAAAAAAOwzAABhAAAAxQAAAMYAAABkAAAAZQAAAGYAAABnAAAAaAAAAGkAAAB0cnB5AG51bXAAdHB5bABtYXhyAGRtZWQAZGltbQBkcmVwAHRtaW4AdG1heABwbWF4AGRtYXgAcGF5dABONW1wNHYyNGltcGwxMU1QNEhpbmZBdG9tRQAAFP8AANAzAAA0aAAAAAAAAKg0AABhAAAAyQAAAMoAAABkAAAAZQAAAGYAAABnAAAAaAAAAGkAAAByZXNlcnZlZDEAZGF0YVJlZmVyZW5jZUluZGV4AHJlc2VydmVkMgB3aWR0aABoZWlnaHQAcmVzZXJ2ZWQzAGNvbXByZXNzb3JOYW1lAABkZXB0aABjb2xvclRhYmxlSWQAc21pIABONW1wNHYyNGltcGwxMk1QNFZpZGVvQXRvbUUAAAAU/wAAijQAADRoAABtZXRhAAAAAAAAAAAMNQAAYQAAAMsAAACxAAAAzAAAAGUAAABmAAAAZwAAAGgAAABpAAAAbWV0YWRhdGEATjVtcDR2MjRpbXBsMTBNUDRTbWlBdG9tRQAAFP8AAPE0AAA0aAAAYXZjMQAAAAAAAAAA5DUAAGEAAADNAAAAzgAAAGQAAABlAAAAZgAAAGcAAABoAAAAaQAAAHJlc2VydmVkMQBkYXRhUmVmZXJlbmNlSW5kZXgAcmVzZXJ2ZWQyAHdpZHRoAGhlaWdodAByZXNlcnZlZDMAY29tcHJlc3Nvck5hbWUASlZUL0FWQyBDb2RpbmcAcmVzZXJ2ZWQ0AGF2Y0MAYnRydABjb2xyAHBhc3AATjVtcDR2MjRpbXBsMTFNUDRBdmMxQXRvbUUAAAAAFP8AAMY1AAA0aAAAYWMtMwAAAAAAAAAApDYAAGEAAADPAAAA0AAAAGQAAABlAAAAZgAAAGcAAABoAAAAaQAAAHJlc2VydmVkMQBkYXRhUmVmZXJlbmNlSW5kZXgAcmVzZXJ2ZWQyAGNoYW5uZWxDb3VudABzYW1wbGVTaXplAHJlc2VydmVkMwBzYW1wbGluZ1JhdGUAcmVzZXJ2ZWQ0AGRhYzMATjVtcDR2MjRpbXBsMTBNUDRBYzNBdG9tRQAAFP8AAIk2AAA0aAAAAAAAAAA3AABhAAAA0gAAALEAAADTAAAAZQAAANQAAABnAAAAaAAAAGkAAABsb2NhdGlvbgBONW1wNHYyNGltcGwxME1QNFVybEF0b21FAAAU/wAA5TYAADRoAABpbGxlZ2FsIGFycmF5IGluZGV4OiAAIG9mIABvcGVyYXRvcltdAC9ob21lL3VzZXIvbGlibXA0djIvc3JjL21wNGFycmF5LmgAAAAAAAAAAIA4AABhAAAA1gAAANcAAADYAAAAZQAAAGYAAABnAAAAaAAAAGkAAAByZXNlcnZlZDEAZGF0YVJlZmVyZW5jZUluZGV4AHNvdW5kVmVyc2lvbgByZXNlcnZlZDIAY2hhbm5lbHMAc2FtcGxlU2l6ZQBjb21wcmVzc2lvbklkAHBhY2tldFNpemUAdGltZVNjYWxlAG1wNGEAZXNkcwB3YXZlAGFsYWMAc2FtcGxlc1BlclBhY2tldABieXRlc1BlclBhY2tldABieXRlc1BlckZyYW1lAGJ5dGVzUGVyU2FtcGxlAHJlc2VydmVkNAAAAAAAAABzdHNkAGRlY29kZXJDb25maWcATjVtcDR2MjRpbXBsMTJNUDRTb3VuZEF0b21FAAAU/wAAYzgAADRoAABpbGxlZ2FsIGFycmF5IGluZGV4OiAAIG9mIAAvaG9tZS91c2VyL2xpYm1wNHYyL3NyYy9tcDRwcm9wZXJ0eS5oAERlbGV0ZQAAAAAAPDkAAGEAAADZAAAAsQAAANoAAABlAAAAZgAAAGcAAABoAAAAaQAAAGVudHJ5Q291bnQAZW50cmllcwB0cmFja0lkAE41bXA0djI0aW1wbDE1TVA0VHJlZlR5cGVBdG9tRQAAABT/AAAbOQAANGgAAGNocGwAAAAAAAAAAMg5AABhAAAA2wAAANwAAABkAAAAZQAAAGYAAABnAAAAaAAAAGkAAAByZXNlcnZlZABjaGFwdGVyY291bnQAY2hhcHRlcnMAc3RhcnR0aW1lAHRpdGxlAE41bXA0djI0aW1wbDExTVA0Q2hwbEF0b21FAAAAFP8AAKs5AAA0aAAAY29scgAAAAAAAAAAbDoAAGEAAADdAAAA3gAAAGQAAABlAAAAZgAAAGcAAABoAAAAaQAAAGNvbG9yUGFyYW1ldGVyVHlwZQBwcmltYXJpZXNJbmRleAB0cmFuc2ZlckZ1bmN0aW9uSW5kZXgAbWF0cml4SW5kZXgAbmNsYwBONW1wNHYyNGltcGwxMU1QNENvbHJBdG9tRQAU/wAAUToAADRoAABkMjYzAAAAAAAAAABoOwAAYQAAAN8AAADgAAAAZAAAAGUAAADhAAAAZwAAAGgAAABpAAAAdmVuZG9yAGRlY29kZXJWZXJzaW9uAGgyNjNMZXZlbABoMjYzUHJvZmlsZQBiaXRyAGQyNjMuYml0cgBiaXRyLmF2Z0JpdHJhdGUAYXNzZXJ0IGZhaWx1cmU6IChwUHJvcCkAL2hvbWUvdXNlci9saWJtcDR2Mi9zcmMvYXRvbV9kMjYzLmNwcABXcml0ZQBiaXRyLm1heEJpdHJhdGUATjVtcDR2MjRpbXBsMTFNUDREMjYzQXRvbUUAAAAU/wAASzsAADRoAABkYW1yAAAAAAAAAAAEPAAAYQAAAOIAAADjAAAAZAAAAGUAAABmAAAAZwAAAGgAAABpAAAAdmVuZG9yAGRlY29kZXJWZXJzaW9uAG1vZGVTZXQAbW9kZUNoYW5nZVBlcmlvZABmcmFtZXNQZXJTYW1wbGUATjVtcDR2MjRpbXBsMTFNUDREYW1yQXRvbUUAAAAU/wAA5zsAADRoAABkcmVmAAAAAAAAAAC0PAAAYQAAAOQAAACxAAAA5QAAAGUAAABmAAAAZwAAAGgAAABpAAAAZW50cnlDb3VudAB1cmwgAHVybiAAYWxpcwAlczogIiVzIjogZHJlZiBpbmNvbnNpc3RlbmN5IHdpdGggbnVtYmVyIG9mIGVudHJpZXMAUmVhZABONW1wNHYyNGltcGwxMU1QNERyZWZBdG9tRQAAABT/AACXPAAANGgAAGRhYzMAAAAAAAAAAPRAAABhAAAA5wAAAOgAAABkAAAAZQAAAGYAAABnAAAAaAAAAOkAAABmc2NvZABic2lkAGJzbW9kAGFjbW9kAGxmZW9uAGJpdF9yYXRlX2NvZGUAcmVzZXJ2ZWQAIiVzIjogdHlwZSA9IGRhYzMANDgANDQuMQAzMgBSZXNlcnZlZAAAADo9AAA9PQAAQj0AAEU9AABJbnZhbGlkIHZhbHVlACIlcyI6IGZzY29kID0gJWxsdSAoMHglMCpsbHgpIDwldSBiaXRzPiBbJXMga0h6XQBNYWluIGF1ZGlvIHNlcnZpY2U6IGNvbXBsZXRlIG1haW4gKENNKQBNYWluIGF1ZGlvIHNycnZpY2U6IG11c2ljIGFuZCBlZmZlY3RzIChNRSkAQXNzb2NpYXRlZCBzZXJ2aWNlOiB2aXN1YWxseSBpbXBhaXJlZCAoVkkpAEFzc29jaWF0ZWQgc2VydmljZTogaGVhcmluZyBpbXBhaXJlZCAoSEkpAEFzc29jaWF0ZWQgc2VydmljZTogZGlhbG9ndWUgKEQpAEFzc29jaWF0ZWQgc2VydmljZTogY29tbWVudGFyeSAoQykAQXNzb2NpYXRlZCBzZXJ2aWNlOiBlbWVyZ2VuY3kgKEUpAEFzc29jaWF0ZWQgc2VydmljZTogdm9pY2Ugb3ZlciAoVk8pIG9yIE1haW4gYXVkaW8gc2VydmljZToga2FyYW9rZQAAnz0AAMY9AADxPQAAHD4AAEY+AABnPgAAij4AAKw+AAAiJXMiOiBic21vZCA9ICVsbHUgKDB4JTAqbGx4KSA8JXUgYml0cz4gWyVzXQAxICsgMSAoQ2gxLCBDaDIpADEvMCAoQykAMi8wIChMLCBSKQAzLzAgKEwsIEMsIFIpADIvMSAoTCwgUiwgUykAMy8xIChMLCBDLCBSLCBTKQAyLzIgKEwsIFIsIFNMLCBTUikAMy8yIChMLCBDLCBSLCBTTCwgU1IpAEHA/wALsAk9PwAATj8AAFY/AABhPwAAbz8AAH0/AACOPwAAoT8AACIlcyI6IGFjbW9kID0gJWxsdSAoMHglMCpsbHgpIDwldSBiaXRzPiBbJXNdACIlcyI6IGxmZW9uID0gJWxsdSAoMHglMCpsbHgpIDwldSBiaXRzPiBbJXNdAEVOQUJMRUQARElTQUJMRUQAAAAAAAAgAAAAKAAAADAAAAA4AAAAQAAAAFAAAABgAAAAcAAAAIAAAACgAAAAwAAAAOAAAAAAAQAAQAEAAIABAADAAQAAAAIAAEACAACAAgAAIiVzIjogYml0X3JhdGVfY29kZSA9ICVsbHUgKDB4JTAqbGx4KSA8JXUgYml0cz4gWyV1IGtiaXQvc10ATjVtcDR2MjRpbXBsMTFNUDREQWMzQXRvbUUAABT/AADYQAAANGgAAGVsc3QAAAAAAAAAAJBBAABhAAAA6gAAAOsAAADsAAAAZQAAAGYAAABnAAAAaAAAAGkAAABlbnRyeUNvdW50AGVudHJpZXMAc2VnbWVudER1cmF0aW9uAG1lZGlhVGltZQBtZWRpYVJhdGUAcmVzZXJ2ZWQATjVtcDR2MjRpbXBsMTFNUDRFbHN0QXRvbUUAABT/AAB0QQAANGgAAGVuY2EAAAAAAAAAADBCAABhAAAA7QAAAO4AAABkAAAAZQAAAGYAAABnAAAAaAAAAGkAAAByZXNlcnZlZDEAZGF0YVJlZmVyZW5jZUluZGV4AHJlc2VydmVkMgB0aW1lU2NhbGUAcmVzZXJ2ZWQzAGVzZHMAc2luZgBONW1wNHYyNGltcGwxMU1QNEVuY2FBdG9tRQAU/wAAFUIAADRoAABlbmN2AAAAAAAAAAD0QgAAYQAAAO8AAADwAAAAZAAAAGUAAABmAAAAZwAAAGgAAABpAAAAcmVzZXJ2ZWQxAGRhdGFSZWZlcmVuY2VJbmRleAByZXNlcnZlZDIAd2lkdGgAaGVpZ2h0AHJlc2VydmVkMwBjb21wcmVzc29yTmFtZQAAcmVzZXJ2ZWQ0AGVzZHMAc2luZgBhdmNDAE41bXA0djI0aW1wbDExTVA0RW5jdkF0b21FAAAAFP8AANdCAAA0aAAAZnJlZQAAAAAAAAAAUEMAAGEAAADxAAAAsQAAAPIAAABlAAAA8wAAAGcAAABoAAAAaQAAAE41bXA0djI0aW1wbDExTVA0RnJlZUF0b21FAAAU/wAANEMAADRoAABmdHlwAAAAAAAAAADgQwAAYQAAAPQAAAD1AAAA9gAAAGUAAABmAAAAZwAAAGgAAABpAAAAbWFqb3JCcmFuZABtaW5vclZlcnNpb24AY29tcGF0aWJsZUJyYW5kcwBtcDQyAGlzb20ATjVtcDR2MjRpbXBsMTFNUDRGdHlwQXRvbUUAAAAU/wAAw0MAADRoAABmdGFiAAAAAAAAAABgRAAAYQAAAPcAAACxAAAAZAAAAGUAAABmAAAAZwAAAGgAAABpAAAAZW50cnlDb3VudABmb250RW50cmllcwBmb250SUQAbmFtZQBONW1wNHYyNGltcGwxMU1QNEZ0YWJBdG9tRQAAABT/AABDRAAANGgAAGdtaW4AQfmIAQuXAkUAAGEAAAD4AAAA+QAAAGQAAABlAAAAZgAAAGcAAABoAAAAaQAAAGdyYXBoaWNzTW9kZQBvcENvbG9yUmVkAG9wQ29sb3JHcmVlbgBvcENvbG9yQmx1ZQBiYWxhbmNlAHJlc2VydmVkAE41bXA0djI0aW1wbDExTVA0R21pbkF0b21FAAAAABT/AADiRAAANGgAAGhkbHIAAAAAAAAAAIBFAABhAAAA/AAAALEAAAD9AAAAZQAAAGYAAABnAAAAaAAAAGkAAAByZXNlcnZlZDEAaGFuZGxlclR5cGUAcmVzZXJ2ZWQyAG5hbWUATjVtcDR2MjRpbXBsMTFNUDRIZGxyQXRvbUUAFP8AAGVFAAA0aAAAaHJlZgBBmYsBC/cFRgAAYQAAAP4AAAD/AAAAZAAAAGUAAABmAAAAZwAAAGgAAABpAAAAcmVzZXJ2ZWQxAGRhdGFSZWZlcmVuY2VJbmRleABidXJsAE41bXA0djI0aW1wbDExTVA0SHJlZkF0b21FAAAAABT/AADiRQAANGgAAG1kaGQAAAAAAAAAAKBGAABhAAAAAQEAAAIBAAADAQAAZQAAAGYAAABnAAAAaAAAAGkAAABjcmVhdGlvblRpbWUAbW9kaWZpY2F0aW9uVGltZQB0aW1lU2NhbGUAZHVyYXRpb24AbGFuZ3VhZ2UAcmVzZXJ2ZWQATjVtcDR2MjRpbXBsMTFNUDRNZGhkQXRvbUUAAAAU/wAAg0YAADRoAABtdmhkAAAAAAAAAABQRwAAYQAAAAUBAAAGAQAABwEAAGUAAABmAAAAZwAAAGgAAABpAAAAY3JlYXRpb25UaW1lAG1vZGlmaWNhdGlvblRpbWUAdGltZVNjYWxlAGR1cmF0aW9uAHJhdGUAdm9sdW1lAHJlc2VydmVkMQBuZXh0VHJhY2tJZABONW1wNHYyNGltcGwxMU1QNE12aGRBdG9tRQAAABT/AAAzRwAANGgAAGlsbGVnYWwgYXJyYXkgaW5kZXg6IAAgb2YgAC9ob21lL3VzZXIvbGlibXA0djIvc3JjL21wNGFycmF5LmgAb3BlcmF0b3JbXQAvaG9tZS91c2VyL2xpYm1wNHYyL3NyYy9tcDRwcm9wZXJ0eS5oAHByb3BlcnR5IGlzIHJlYWQtb25seTogAFNldFZhbHVlAG1kYXQAAAAAAAAAAIBIAABhAAAACAEAALEAAAAJAQAAZQAAAAoBAABnAAAAaAAAAGkAAABhc3NlcnQgZmFpbHVyZTogKGZhbHNlKQAvaG9tZS91c2VyL2xpYm1wNHYyL3NyYy9hdG9tX21kYXQuY3BwAFdyaXRlAE41bXA0djI0aW1wbDExTVA0TWRhdEF0b21FAAAU/wAAZEgAADRoAABtcDRzAEGZkQELgxdJAABhAAAACwEAAAwBAABkAAAAZQAAAGYAAABnAAAAaAAAAGkAAAByZXNlcnZlZDEAZGF0YVJlZmVyZW5jZUluZGV4AGVzZHMATjVtcDR2MjRpbXBsMTFNUDRNcDRzQXRvbUUAAAAAFP8AAOJIAAA0aAAAbXA0dgAAAAAAAAAAxEkAAGEAAAANAQAADgEAAGQAAABlAAAAZgAAAGcAAABoAAAAaQAAAHJlc2VydmVkMQBkYXRhUmVmZXJlbmNlSW5kZXgAcmVzZXJ2ZWQyAHdpZHRoAGhlaWdodAByZXNlcnZlZDMAY29tcHJlc3Nvck5hbWUAAHJlc2VydmVkNABjb2xyAGVzZHMAcGFzcABONW1wNHYyNGltcGwxMU1QNE1wNHZBdG9tRQAAABT/AACnSQAANGgAAG5taGQAAAAAAAAAACBKAABhAAAADwEAALEAAABkAAAAZQAAAGYAAABnAAAAaAAAAGkAAABONW1wNHYyNGltcGwxMU1QNE5taGRBdG9tRQAAFP8AAARKAAA0aAAAb2hkcgAAAAAAAAAAFEsAABABAAARAQAAsQAAABIBAABlAAAAZgAAAGcAAABoAAAAaQAAAEVuY3J5cHRpb25NZXRob2QARW5jcnlwdGlvblBhZGRpbmcAUGxhaW50ZXh0TGVuZ3RoAENvbnRlbnRJRExlbmd0aABSaWdodHNJc3N1ZXJVUkxMZW5ndGgAVGV4dHVhbEhlYWRlcnNMZW5ndGgAQ29udGVudElEAFJpZ2h0c0lzc3VlclVSTABUZXh0dWFsSGVhZGVycwBONW1wNHYyNGltcGwxMU1QNE9oZHJBdG9tRQAAABT/AAD3SgAANGgAAAAAAAB4SwAAEwEAABQBAAAVAQAAFgEAABcBAABvAAAAGAEAABkBAAAaAQAAGwEAAE41bXA0djI0aW1wbDIxT2hkck1QNFN0cmluZ1Byb3BlcnR5RQAAAAAU/wAAUEsAAPyoAABwYXNwAAAAAAAAAADoSwAAYQAAABwBAAAdAQAAZAAAAGUAAABmAAAAZwAAAGgAAABpAAAAaFNwYWNpbmcAdlNwYWNpbmcATjVtcDR2MjRpbXBsMTFNUDRQYXNwQXRvbUUAAAAAFP8AAMpLAAA0aAAAcnRwIAAAAAAAAAAAtE0AAGEAAAAeAQAAHwEAACABAABlAAAAIQEAAGcAAABoAAAAaQAAAHJlc2VydmVkMQBkYXRhUmVmZXJlbmNlSW5kZXgAaGludFRyYWNrVmVyc2lvbgBoaWdoZXN0Q29tcGF0aWJsZVZlcnNpb24AbWF4UGFja2V0U2l6ZQB0aW1zAHRzcm8Ac25ybwBkZXNjcmlwdGlvbkZvcm1hdABzZHBUZXh0AGFzc2VydCBmYWlsdXJlOiAobV9wUGFyZW50QXRvbSkAL2hvbWUvdXNlci9saWJtcDR2Mi9zcmMvYXRvbV9ydHAuY3BwAEdlbmVyYXRlAHN0c2QAaG50aQAlczogIiVzIjogcnRwIGF0b20gaW4gdW5leHBlY3RlZCBjb250ZXh0LCBjYW4gbm90IGdlbmVyYXRlAHNkcCAAUmVhZABydHAgYXRvbSBpbiB1bmV4cGVjdGVkIGNvbnRleHQsIGNhbiBub3QgcmVhZABhc3NlcnQgZmFpbHVyZTogKGRhdGEgIT0gMEwpAFJlYWRIbnRpVHlwZQBONW1wNHYyNGltcGwxME1QNFJ0cEF0b21FABT/AACaTQAANGgAAHMyNjMAAAAAAAAAAFROAABhAAAAIgEAACMBAABkAAAAZQAAAGYAAABnAAAAaAAAAGkAAAByZXNlcnZlZDEAZGF0YVJlZmVyZW5jZUluZGV4AHJlc2VydmVkMgB3aWR0aABoZWlnaHQAcmVzZXJ2ZWQzAGQyNjMATjVtcDR2MjRpbXBsMTFNUDRTMjYzQXRvbUUAAAAU/wAAN04AADRoAAAAAAAA6E4AAGEAAAAkAQAAJQEAAGQAAABlAAAAZgAAAGcAAABoAAAAaQAAAHJlc2VydmVkMQBkYXRhUmVmZXJlbmNlSW5kZXgAcmVzZXJ2ZWQyAHRpbWVTY2FsZQByZXNlcnZlZDMAZGFtcgBONW1wNHYyNGltcGwxME1QNEFtckF0b21FAAAAFP8AAMxOAAA0aAAAc2R0cAAAAAAAAAAASE8AAGEAAAAmAQAAsQAAACcBAABlAAAAZgAAAGcAAABoAAAAaQAAAGRhdGEATjVtcDR2MjRpbXBsMTFNUDRTZHRwQXRvbUUAFP8AAC1PAADsMQAAc3RibAAAAAAAAAAA4E8AAGEAAAAoAQAAKQEAAGQAAABlAAAAZgAAAGcAAABoAAAAaQAAAHN0c2QAc3R0cwBjdHRzAHN0c3oAc3R6MgBzdHNjAHN0Y28AY282NABzdHNzAHN0c2gAc3RkcABzZHRwAE41bXA0djI0aW1wbDExTVA0U3RibEF0b21FAAAU/wAAxE8AADRoAABzdHNkAAAAAAAAAADAUAAAYQAAACoBAACxAAAAKwEAAGUAAABmAAAAZwAAAGgAAABpAAAAZW50cnlDb3VudABtcDRhAGVuY2EAbXA0cwBtcDR2AGVuY3YAcnRwIABzYW1yAHNhd2IAczI2MwBhdmMxAGFsYWMAdGV4dABhYy0zACVzOiAiJXMiOiBzdHNkIGluY29uc2lzdGVuY3kgd2l0aCBudW1iZXIgb2YgZW50cmllcwBSZWFkAE41bXA0djI0aW1wbDExTVA0U3RzZEF0b21FABT/AAClUAAANGgAAHN0c3oAAAAAAAAAAERRAABhAAAALAEAALEAAAAtAQAAZQAAAC4BAABnAAAAaAAAAGkAAABzYW1wbGVTaXplAHNhbXBsZUNvdW50AGVudHJpZXMAZW50cnlTaXplAE41bXA0djI0aW1wbDExTVA0U3RzekF0b21FABT/AAApUQAANGgAAHN0c2MAAAAAAAAAAPBRAABhAAAALwEAALEAAAAwAQAAZQAAAGYAAABnAAAAaAAAAGkAAABlbnRyeUNvdW50AGVudHJpZXMAZmlyc3RDaHVuawBzYW1wbGVzUGVyQ2h1bmsAc2FtcGxlRGVzY3JpcHRpb25JbmRleABmaXJzdFNhbXBsZQBONW1wNHYyNGltcGwxMU1QNFN0c2NBdG9tRQAU/wAA1VEAADRoAABzdHoyAAAAAAAAAAB8UgAAYQAAADEBAACxAAAAMgEAAGUAAABmAAAAZwAAAGgAAABpAAAAcmVzZXJ2ZWQAZmllbGRTaXplAHNhbXBsZUNvdW50AGVudHJpZXMAZW50cnlTaXplAE41bXA0djI0aW1wbDExTVA0U3R6MkF0b21FABT/AABhUgAANGgAAAAAAADoUgAAagAAADMBAABsAAAANAEAADUBAABvAAAAcAAAAHEAAAByAAAAcwAAADYBAAB1AAAATjVtcDR2MjRpbXBsMjRNUDRIYWxmU2l6ZVRhYmxlUHJvcGVydHlFABT/AADAUgAAVKkAAHN0ZHAAAAAAAAAAAGBTAABhAAAANwEAALEAAAA4AQAAZQAAAGYAAABnAAAAaAAAAGkAAABlbnRyeUNvdW50AGVudHJpZXMAcHJpb3JpdHkATjVtcDR2MjRpbXBsMTFNUDRTdGRwQXRvbUUAABT/AABEUwAANGgAAHNkcCAAAAAAAAAAAAxUAABhAAAAOQEAALEAAAA6AQAAZQAAADsBAABnAAAAaAAAAGkAAABzZHBUZXh0AGFzc2VydCBmYWlsdXJlOiAoZGF0YSAhPSAwTCkAL2hvbWUvdXNlci9saWJtcDR2Mi9zcmMvYXRvbV9zZHAuY3BwAFJlYWQATjVtcDR2MjRpbXBsMTBNUDRTZHBBdG9tRQAAAAAU/wAA71MAADRoAAB0ZXh0AEGlqAEL7CNWAABhAAAAPAEAAD0BAAA+AQAAZQAAAGYAAABnAAAAaAAAAGkAAAByZXNlcnZlZDEAZGF0YVJlZmVyZW5jZUluZGV4AGRpc3BsYXlGbGFncwB0ZXh0SnVzdGlmaWNhdGlvbgBiZ0NvbG9yUmVkAGJnQ29sb3JHcmVlbgBiZ0NvbG9yQmx1ZQBkZWZUZXh0Qm94VG9wAGRlZlRleHRCb3hMZWZ0AGRlZlRleHRCb3hCb3R0b20AZGVmVGV4dEJveFJpZ2h0AHJlc2VydmVkMgBmb250TnVtYmVyAGZvbnRGYWNlAHJlc2VydmVkMwByZXNlcnZlZDQAZm9yZUNvbG9yUmVkAGZvcmVDb2xvckdyZWVuAGZvcmVDb2xvckJsdWUAdGV4dERhdGEAYXNzZXJ0IGZhaWx1cmU6IChtX3BQYXJlbnRBdG9tKQAvaG9tZS91c2VyL2xpYm1wNHYyL3NyYy9hdG9tX3RleHQuY3BwAEdlbmVyYXRlAHN0c2QAZ21oZAAlczogIiVzIjogdGV4dCBhdG9tIGluIHVuZXhwZWN0ZWQgY29udGV4dCwgY2FuIG5vdCBnZW5lcmF0ZQBONW1wNHYyNGltcGwxMU1QNFRleHRBdG9tRQAAFP8AAORVAAA0aAAAdHgzZwAAAAAAAAAAmFcAAGEAAAA/AQAAQAEAAGQAAABlAAAAZgAAAGcAAABoAAAAaQAAAHJlc2VydmVkMQByZXNlcnZlZDIAZGF0YVJlZmVyZW5jZUluZGV4AGRpc3BsYXlGbGFncwBob3Jpem9udGFsSnVzdGlmaWNhdGlvbgB2ZXJ0aWNhbEp1c3RpZmljYXRpb24AYmdDb2xvclJlZABiZ0NvbG9yR3JlZW4AYmdDb2xvckJsdWUAYmdDb2xvckFscGhhAGRlZlRleHRCb3hUb3AAZGVmVGV4dEJveExlZnQAZGVmVGV4dEJveEJvdHRvbQBkZWZUZXh0Qm94UmlnaHQAc3RhcnRDaGFyAGVuZENoYXIAZm9udElEAGZvbnRGYWNlAGZvbnRTaXplAGZvbnRDb2xvclJlZABmb250Q29sb3JHcmVlbgBmb250Q29sb3JCbHVlAGZvbnRDb2xvckFscGhhAGZ0YWIATjVtcDR2MjRpbXBsMTFNUDRUeDNnQXRvbUUAAAAAFP8AAHpXAAA0aAAAdGtoZAAAAAAAAAAAdFgAAGEAAABBAQAAQgEAAEMBAABlAAAAZgAAAGcAAABoAAAAaQAAAGNyZWF0aW9uVGltZQBtb2RpZmljYXRpb25UaW1lAHRyYWNrSWQAcmVzZXJ2ZWQxAGR1cmF0aW9uAHJlc2VydmVkMgBsYXllcgBhbHRlcm5hdGVfZ3JvdXAAdm9sdW1lAHJlc2VydmVkMwBtYXRyaXgAd2lkdGgAaGVpZ2h0AE41bXA0djI0aW1wbDExTVA0VGtoZEF0b21FAAAAABT/AABWWAAANGgAAHRmaGQAAAAAAAAAADhZAABhAAAARAEAALEAAABFAQAAZQAAAGYAAABnAAAAaAAAAGkAAAB0cmFja0lkAGJhc2VEYXRhT2Zmc2V0AHNhbXBsZURlc2NyaXB0aW9uSW5kZXgAZGVmYXVsdFNhbXBsZUR1cmF0aW9uAGRlZmF1bHRTYW1wbGVTaXplAGRlZmF1bHRTYW1wbGVGbGFncwBONW1wNHYyNGltcGwxMU1QNFRmaGRBdG9tRQAU/wAAHVkAADRoAAB0cnVuAAAAAAAAAAAIWgAAYQAAAEYBAACxAAAARwEAAGUAAABmAAAAZwAAAGgAAABpAAAAc2FtcGxlQ291bnQAZGF0YU9mZnNldABmaXJzdFNhbXBsZUZsYWdzAHNhbXBsZXMAc2FtcGxlRHVyYXRpb24Ac2FtcGxlU2l6ZQBzYW1wbGVGbGFncwBzYW1wbGVDb21wb3NpdGlvblRpbWVPZmZzZXQATjVtcDR2MjRpbXBsMTFNUDRUcnVuQXRvbUUAAAAAFP8AAOpZAAA0aAAAdWR0YQAAAAAAAAAAoFoAAGEAAABIAQAAsQAAAEkBAABlAAAAZgAAAGcAAABoAAAAaQAAAGNocGwAY3BydABobnRpAG1ldGEAqWNweQCpZGVzAKluYW0AqWNtdACpcHJkAHRyYWsAaGluZgBuYW1lAE41bXA0djI0aW1wbDExTVA0VWR0YUF0b21FAAAU/wAAhFoAADRoAAB1cm4gAAAAAAAAAAAIWwAAYQAAAEoBAACxAAAASwEAAGUAAABmAAAAZwAAAGgAAABpAAAAbmFtZQBsb2NhdGlvbgBONW1wNHYyNGltcGwxME1QNFVybkF0b21FABT/AADuWgAANGgAAHZtaGQAAAAAAAAAAGxbAABhAAAATAEAAE0BAABkAAAAZQAAAGYAAABnAAAAaAAAAGkAAAByZXNlcnZlZABONW1wNHYyNGltcGwxMU1QNFZtaGRBdG9tRQAU/wAAUVsAADRoAAAAAAAATGAAAGEAAABOAQAAsQAAAGQAAABlAAAAZgAAAGcAAABoAAAAaQAAAGJpdHIAYXZnQml0cmF0ZQBtYXhCaXRyYXRlAGJ0cnQAYnVmZmVyU2l6ZURCAGJ1cmwAYmFzZV91cmwAY282NABlbnRyeUNvdW50AGVudHJpZXMAY2h1bmtPZmZzZXQAY3R0cwBzYW1wbGVDb3VudABzYW1wbGVPZmZzZXQAZGluZgBkcmVmAGRpbW0AYnl0ZXMAZG1heABtaWxsaVNlY3MAZG1lZABkcmVwAGVkdHMAZWxzdABlc2RzAGZybWEAZGF0YS1mb3JtYXQAZ21oZABnbWluAHRtY2QAdGV4dABobWhkAG1heFBkdVNpemUAYXZnUGR1U2l6ZQBtYXhCaXRSYXRlAGF2Z0JpdFJhdGUAc2xpZGluZ0F2Z0JpdFJhdGUAaUtNUwBrbXNfVVJJAGlTRk0Ac2VsZWN0aXZlLWVuY3J5cHRpb24AcmVzZXJ2ZWQAa2V5LWluZGljYXRvci1sZW5ndGgASVYtbGVuZ3RoAGlsc3QAqW5hbQCpQVJUAKl3cnQAqWFsYgCpZGF5AKl0b28AqWNtdACpZ2VuAHRya24AZGlzawBnbnJlAGNwaWwAdG1wbwBjb3ZyAGFBUlQALS0tLQBwZ2FwAHR2c2gAdHZzbgB0dmVuAHR2bm4AdHZlcwBkZXNjAGxkZXMAc29hbABzb2FyAHNvYWEAc29ubQBzb2NvAHNvc24AaGR2ZACpZW5jAHBjc3QAa2V5dwBjYXRnAHB1cmwAZWdpZABydG5nAHN0aWsAqWdycACpbHlyAGNwcnQAYXBJRABha0lEAHNmSUQAY25JRABhdElEAHBsSUQAZ2VJRABjbUlEAHhpZCAAaW1pZgBpcG1wX2Rlc2MAaW9kcwBtYXhyAGdyYW51bGFyaXR5AG1kaWEAbWRoZABoZGxyAG1pbmYAbWV0YQBtZmhkAHNlcXVlbmNlTnVtYmVyAHZtaGQAc21oZABubWhkAHN0YmwAbW9vZgB0cmFmAG1vb3YAbXZoZAB0cmFrAHVkdGEAbXZleAB0cmV4AG51bXAAcGFja2V0cwBvZGttAG9oZHIAcGF5dABwYXlsb2FkTnVtYmVyAHJ0cE1hcABwaW5mAHBtYXgAc2NoaQBzY2htAHNjaGVtZV90eXBlAHNjaGVtZV92ZXJzaW9uAHNpbmYAc25ybwBvZmZzZXQAc3RjbwBzdHNoAHNoYWRvd2VkU2FtcGxlTnVtYmVyAHN5bmNTYW1wbGVOdW1iZXIAc3RzcwBzYW1wbGVOdW1iZXIAc3R0cwBzYW1wbGVEZWx0YQB0aW1zAHRpbWVTY2FsZQB0bWluAHRtYXgAdGZoZAB0cnVuAHRraGQAdHJlZgBjaGFwAGRwbmQAaGludABpcGlyAG1wb2QAc3luYwB0cmFja0lkAGRlZmF1bHRTYW1wbGVEZXNyaXB0aW9uSW5kZXgAZGVmYXVsdFNhbXBsZUR1cmF0aW9uAGRlZmF1bHRTYW1wbGVTaXplAGRlZmF1bHRTYW1wbGVGbGFncwB0cnB5AHRweWwAdHNybwB3YXZlAE41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eXAAZnRhYgBnbWluAGhpbnQAaDI2MwBocmVmAGlwaXIAaW1hNABqcGVnAG1kaGQAbXZoZABtZGF0AG1wb2QAbXA0YQBtcDRzAG1wNHYAbm1oZABvaGRyAHBhc3AAcnRwIAByYXcgAHMyNjMAc2FtcgBzYXdiAHNkdHAAc3RibABzdHNkAHN0c3oAc3RzYwBzdHoyAHN0ZHAAc2RwIABzeW5jAHNraXAAc293dAB0ZXh0AHR4M2cAdGtoZAB0ZmhkAHRydW4AdHdvcwB1cmwgAHVybiAAdWxhdwB2bWhkAHl1djIATjVtcDR2MjRpbXBsN01QNEF0b21FAOz+AAAeaAAAaWxsZWdhbCBhcnJheSBpbmRleDogACBvZiAAL2hvbWUvdXNlci9saWJtcDR2Mi9zcmMvbXA0cHJvcGVydHkuaABvcGVyYXRvcltdAC9ob21lL3VzZXIvbGlibXA0djIvc3JjL21wNGF0b20uaABpbGxlZ2FsIGFycmF5IGluZGV4AEluc2VydABwcm9wZXJ0eSBpcyByZWFkLW9ubHk6IABTZXRWYWx1ZQCpYXJnAKlhcmsAqWNvawCpY29tAKljcHkAqWRheQCpZGlyAKllZDEAqWVkMgCpZWQzAKllZDQAqWVkNQCpZWQ2AKllZDcAqWVkOACpZWQ5AKlmbXQAqWluZgCpaXNyAKlsYWIAqWxhbACpbWFrAKluYWsAqW5hbQCpcGRrAKlwaGcAqXByZACpcHJmAKlwcmsAqXBybACpcmVxAKlzbmsAqXNubQCpc3JjAKlzd2YAqXN3awCpc3dyAKl3cnQAQWxsZgBMT09QAHB0diAAU2VsTwBXTE9DAAAAAAAAAABoawAAigAAAJIBAACMAAAAjQAAAI4AAACPAAAAkAAAAGFzc2VydCBmYWlsdXJlOiAocFByb3BlcnR5KQAvaG9tZS91c2VyL2xpYm1wNHYyL3NyYy9tcDRkZXNjcmlwdG9yLmNwcABBZGRQcm9wZXJ0eQAiJXMiOiBSZWFkRGVzY3JpcHRvcjogcG9zID0gMHglbGx4AGFzc2VydCBmYWlsdXJlOiAodGFnID09IG1fdGFnKQBSZWFkSGVhZGVyACIlcyI6IFJlYWREZXNjcmlwdG9yOiB0YWcgMHglMDJ4IGRhdGEgc2l6ZSAldSAoMHgleCkAJXM6ICIlcyI6IE92ZXJyYW4gZGVzY3JpcHRvciwgdGFnICV1IGRhdGEgc2l6ZSAldSBwcm9wZXJ0eSAldQBSZWFkUHJvcGVydGllcwBvdmVycmFuIGRlc2NyaXB0b3IAV2FybmluZyAoJXMpIGluICVzIGF0IGxpbmUgJXUAbnVtUHJvcGVydGllcyA9PSAwAE41bXA0djI0aW1wbDEzTVA0RGVzY3JpcHRvckUAAADs/gAASWsAAGFzc2VydCBmYWlsdXJlOiAoZmlsZSkAL2hvbWUvdXNlci9saWJtcDR2Mi9zcmMvbXA0ZmlsZV9pby5jcHAAR2V0UG9zaXRpb24AcG9zaXRpb24gb3V0IG9mIHJhbmdlAFNldFBvc2l0aW9uAHNlZWsgZmFpbGVkAEdldFNpemUAYXNzZXJ0IGZhaWx1cmU6IChidWYpAFJlYWRCeXRlcwBXYXJuaW5nICglcykgaW4gJXMgYXQgbGluZSAldQBtX251bVJlYWRCaXRzID4gMABub3QgZW5vdWdoIGJ5dGVzLCByZWFjaGVkIGVuZC1vZi1tZW1vcnkAcmVhZCBmYWlsZWQAbm90IGVub3VnaCBieXRlcywgcmVhY2hlZCBlbmQtb2YtZmlsZQBhc3NlcnQgZmFpbHVyZTogKG1fbnVtV3JpdGVCaXRzID09IDAgfHwgbV9udW1Xcml0ZUJpdHMgPj0gOCkAV3JpdGVCeXRlcwB3cml0ZSBmYWlsZWQAbm90IGFsbCBieXRlcyB3cml0dGVuACBvdXQgb2YgcmFuZ2UAV3JpdGVGaXhlZDE2AFdyaXRlRml4ZWQzMgBDb3VudGVkIHN0cmluZyB0b28gbG9uZyAyNSAqIDI1NQBSZWFkQ291bnRlZFN0cmluZwBjaGFyTGVuZ3RoID4gZml4ZWRMZW5ndGggLSAxAExlbmd0aCBpcyAAV3JpdGVDb3VudGVkU3RyaW5nAGFzc2VydCBmYWlsdXJlOiAobnVtQml0cyA+IDApAFJlYWRCaXRzAGFzc2VydCBmYWlsdXJlOiAobnVtQml0cyA8PSA2NCkAV3JpdGVCaXRzAG91dCBvZiByYW5nZTogAFdyaXRlTXBlZ0xlbmd0aABhYXIAYWJrAEFia2hhemlhbgBhY2UAYWNoAEFjb2xpAGFkYQBBZGFuZ21lAGFkeQBBZHlnaGU7IEFkeWdlaQBhZmEAQWZyby1Bc2lhdGljIChPdGhlcikAYWZoAGFmcgBBZnJpa2FhbnMAYWluAGFrYQBha2sAc3FpAGFsZQBBbGV1dABhbGcAQWxnb25xdWlhbiBsYW5ndWFnZXMAYWx0AFNvdXRoZXJuIEFsdGFpAGFtaABBbWhhcmljAGFuZwBFbmdsaXNoLCBPbGQgKGNhLjQ1MC0xMTAwKQBhbnAAQW5naWthAGFwYQBBcGFjaGUgbGFuZ3VhZ2VzAGFyYQBBcmFiaWMAYXJjAE9mZmljaWFsIEFyYW1haWMgKDcwMC0zMDAgQkNFKTsgSW1wZXJpYWwgQXJhbWFpYyAoNzAwLTMwMCBCQ0UpAGFyZwBBcmFnb25lc2UAaHllAGFybgBNYXB1ZHVuZ3VuOyBNYXB1Y2hlAGFycABBcmFwYWhvAGFydABBcnRpZmljaWFsIChPdGhlcikAYXJ3AEFyYXdhawBhc20AYXN0AEFzdHVyaWFuOyBCYWJsZTsgTGVvbmVzZTsgQXN0dXJsZW9uZXNlAGF0aABBdGhhcGFzY2FuIGxhbmd1YWdlcwBhdXMAQXVzdHJhbGlhbiBsYW5ndWFnZXMAYXZhAEF2YXJpYwBhdmUAQXZlc3RhbgBhd2EAQXdhZGhpAGF5bQBBeW1hcmEAYXplAEF6ZXJiYWlqYW5pAGJhZABCYW5kYSBsYW5ndWFnZXMAYmFpAEJhbWlsZWtlIGxhbmd1YWdlcwBiYWsAQmFzaGtpcgBiYWwAQmFsdWNoaQBiYW0AQmFtYmFyYQBiYW4AZXVzAEJhc3F1ZQBiYXMAYmF0AEJhbHRpYyAoT3RoZXIpAGJlagBCZWphOyBCZWRhd2l5ZXQAYmVsAEJlbGFydXNpYW4AYmVtAEJlbWJhAGJlbgBCZW5nYWxpAGJlcgBCZXJiZXIgKE90aGVyKQBiaG8AYmloAEJpaGFyaQBiaWsAQmlrb2wAYmluAEJpbmk7IEVkbwBiaXMAQmlzbGFtYQBibGEAU2lrc2lrYQBibnQAQmFudHUgKE90aGVyKQBib3MAQm9zbmlhbgBicmEAYnJlAEJyZXRvbgBidGsAQmF0YWsgbGFuZ3VhZ2VzAGJ1YQBCdXJpYXQAYnVnAGJ1bABCdWxnYXJpYW4AbXlhAEJ1cm1lc2UAYnluAEJsaW47IEJpbGluAGNhZABDYWRkbwBjYWkAQ2VudHJhbCBBbWVyaWNhbiBJbmRpYW4gKE90aGVyKQBjYXIAR2FsaWJpIENhcmliAGNhdABDYXRhbGFuOyBWYWxlbmNpYW4AY2F1AENhdWNhc2lhbiAoT3RoZXIpAGNlYgBDZWJ1YW5vAGNlbABDZWx0aWMgKE90aGVyKQBjaGEAY2hiAENoaWJjaGEAY2hlAENoZWNoZW4AY2hnAHpobwBDaGluZXNlAGNoawBjaG0AY2huAENoaW5vb2sgamFyZ29uAGNobwBDaG9jdGF3AGNocABDaGlwZXd5YW47IERlbmUgU3VsaW5lAGNocgBjaHUAQ2h1cmNoIFNsYXZpYzsgT2xkIFNsYXZvbmljOyBDaHVyY2ggU2xhdm9uaWM7IE9sZCBCdWxnYXJpYW47IE9sZCBDaHVyY2ggU2xhdm9uaWMAY2h2AENodXZhc2gAY2h5AGNtYwBDaGFtaWMgbGFuZ3VhZ2VzAGNvcABDb3B0aWMAY29yAENvcm5pc2gAY29zAGNwZQBDcmVvbGVzIGFuZCBwaWRnaW5zLCBFbmdsaXNoIGJhc2VkIChPdGhlcikAY3BmAENyZW9sZXMgYW5kIHBpZGdpbnMsIEZyZW5jaC1iYXNlZCAoT3RoZXIpAGNwcABDcmVvbGVzIGFuZCBwaWRnaW5zLCBQb3J0dWd1ZXNlLWJhc2VkIChPdGhlcikAY3JlAGNyaABDcmltZWFuIFRhdGFyOyBDcmltZWFuIFR1cmtpc2gAY3JwAENyZW9sZXMgYW5kIHBpZGdpbnMgKE90aGVyKQBjc2IAS2FzaHViaWFuAGN1cwBDdXNoaXRpYyAoT3RoZXIpAGNlcwBDemVjaABkYWsARGFrb3RhAGRhbgBEYW5pc2gAZGFyAERhcmd3YQBkYXkATGFuZCBEYXlhayBsYW5ndWFnZXMAZGVsAGRlbgBTbGF2ZSAoQXRoYXBhc2NhbikAZGdyAERvZ3JpYgBkaW4ARGlua2EAZGl2AERpdmVoaTsgRGhpdmVoaTsgTWFsZGl2aWFuAGRvaQBEb2dyaQBkcmEARHJhdmlkaWFuIChPdGhlcikAZHNiAExvd2VyIFNvcmJpYW4AZHVhAER1YWxhAGR1bQBEdXRjaCwgTWlkZGxlIChjYS4xMDUwLTEzNTApAG5sZABEdXRjaDsgRmxlbWlzaABkeXUARHl1bGEAZHpvAGVmaQBlZ3kARWd5cHRpYW4gKEFuY2llbnQpAGVrYQBFa2FqdWsAZWx4AEVsYW1pdGUAZW5nAEVuZ2xpc2gAZW5tAEVuZ2xpc2gsIE1pZGRsZSAoMTEwMC0xNTAwKQBlcG8ARXNwZXJhbnRvAGVzdABld2UARXdlAGV3bwBFd29uZG8AZmFuAGZhbwBGYXJvZXNlAGZhdABGYW50aQBmaWoARmlqaWFuAGZpbABGaWxpcGlubzsgUGlsaXBpbm8AZmluAEZpbm5pc2gAZml1AEZpbm5vLVVncmlhbiAoT3RoZXIpAGZvbgBGb24AZnJhAEZyZW5jaABmcm0ARnJlbmNoLCBNaWRkbGUgKGNhLjE0MDAtMTYwMCkAZnJvAEZyZW5jaCwgT2xkICg4NDItY2EuMTQwMCkAZnJyAE5vcnRoZXJuIEZyaXNpYW4AZnJzAEVhc3Rlcm4gRnJpc2lhbgBmcnkAV2VzdGVybiBGcmlzaWFuAGZ1bABGdWxhaABmdXIAZ2FhAGdheQBnYmEAR2JheWEAZ2VtAEdlcm1hbmljIChPdGhlcikAa2F0AGRldQBHZXJtYW4AZ2V6AGdpbABHaWxiZXJ0ZXNlAGdsYQBHYWVsaWM7IFNjb3R0aXNoIEdhZWxpYwBnbGUASXJpc2gAZ2xnAGdsdgBnbWgAR2VybWFuLCBNaWRkbGUgSGlnaCAoY2EuMTA1MC0xNTAwKQBnb2gAR2VybWFuLCBPbGQgSGlnaCAoY2EuNzUwLTEwNTApAGdvbgBHb25kaQBnb3IAR29yb250YWxvAGdvdABHb3RoaWMAZ3JiAEdyZWJvAGdyYwBHcmVlaywgQW5jaWVudCAodG8gMTQ1MykAZWxsAEdyZWVrLCBNb2Rlcm4gKDE0NTMtKQBncm4AR3VhcmFuaQBnc3cAU3dpc3MgR2VybWFuOyBBbGVtYW5uaWM7IEFsc2F0aWFuAGd1agBnd2kAaGFpAEhhaWRhAGhhdABIYWl0aWFuOyBIYWl0aWFuIENyZW9sZQBoYXUASGF1c2EAaGF3AGhlYgBIZWJyZXcAaGVyAEhlcmVybwBoaWwASGlsaWdheW5vbgBoaW0ASGltYWNoYWxpAGhpbgBIaW5kaQBoaXQASGl0dGl0ZQBobW4ASG1vbmcAaG1vAEhpcmkgTW90dQBocnYAaHNiAFVwcGVyIFNvcmJpYW4AaHVuAEh1bmdhcmlhbgBodXAAaWJhAGlibwBpc2wASWNlbGFuZGljAGlkbwBJZG8AaWlpAFNpY2h1YW4gWWk7IE51b3N1AGlqbwBJam8gbGFuZ3VhZ2VzAGlrdQBJbnVrdGl0dXQAaWxlAEludGVybGluZ3VlOyBPY2NpZGVudGFsAGlsbwBJbG9rbwBpbmEASW50ZXJsaW5ndWEgKEludGVybmF0aW9uYWwgQXV4aWxpYXJ5IExhbmd1YWdlIEFzc29jaWF0aW9uKQBpbmMASW5kaWMgKE90aGVyKQBpbmQASW5kb25lc2lhbgBpbmUASW5kby1FdXJvcGVhbiAoT3RoZXIpAGluaABJbmd1c2gAaXBrAEludXBpYXEAaXJhAElyYW5pYW4gKE90aGVyKQBpcm8ASXJvcXVvaWFuIGxhbmd1YWdlcwBpdGEASXRhbGlhbgBqYXYAamJvAExvamJhbgBqcG4AanByAEp1ZGVvLVBlcnNpYW4AanJiAEp1ZGVvLUFyYWJpYwBrYWEAS2FyYS1LYWxwYWsAa2FiAEthYnlsZQBrYWMAS2FjaGluOyBKaW5ncGhvAGthbABLYWxhYWxsaXN1dDsgR3JlZW5sYW5kaWMAa2FtAEthbWJhAGthbgBLYW5uYWRhAGthcgBLYXJlbiBsYW5ndWFnZXMAa2FzAGthdQBLYW51cmkAa2F3AGthegBLYXpha2gAa2JkAEthYmFyZGlhbgBraGEAS2hhc2kAa2hpAEtob2lzYW4gKE90aGVyKQBraG0AQ2VudHJhbCBLaG1lcgBraG8AS2hvdGFuZXNlOyBTYWthbgBraWsAS2lrdXl1OyBHaWt1eXUAa2luAEtpbnlhcndhbmRhAGtpcgBLaXJnaGl6OyBLeXJneXoAa21iAGtvawBLb25rYW5pAGtvbQBrb24AS29uZ28Aa29yAEtvcmVhbgBrb3MAa3BlAEtwZWxsZQBrcmMAS2FyYWNoYXktQmFsa2FyAGtybABrcm8AS3J1IGxhbmd1YWdlcwBrcnUAS3VydWtoAGt1YQBLdWFueWFtYTsgS3dhbnlhbWEAa3VtAEt1bXlrAGt1cgBLdXJkaXNoAGt1dABLdXRlbmFpAGxhZABMYWRpbm8AbGFoAExhaG5kYQBsYW0ATGFtYmEAbGFvAExhbwBsYXQATGF0aW4AbGF2AExhdHZpYW4AbGV6AGxpbQBMaW1idXJnYW47IExpbWJ1cmdlcjsgTGltYnVyZ2lzaABsaW4ATGluZ2FsYQBsaXQATGl0aHVhbmlhbgBsb2wATW9uZ28AbG96AGx0egBMdXhlbWJvdXJnaXNoOyBMZXR6ZWJ1cmdlc2NoAGx1YQBMdWJhLUx1bHVhAGx1YgBMdWJhLUthdGFuZ2EAbHVnAEdhbmRhAGx1aQBMdWlzZW5vAGx1bgBMdW5kYQBsdW8ATHVvIChLZW55YSBhbmQgVGFuemFuaWEpAGx1cwBMdXNoYWkAbWtkAE1hY2Vkb25pYW4AbWFkAG1hZwBNYWdhaGkAbWFoAE1hcnNoYWxsZXNlAG1haQBtYWsATWFrYXNhcgBtYWwATWFsYXlhbGFtAG1hbgBtcmkATWFvcmkAbWFwAEF1c3Ryb25lc2lhbiAoT3RoZXIpAG1hcgBNYXJhdGhpAG1hcwBNYXNhaQBtc2EATWFsYXkAbWRmAE1va3NoYQBtZHIATWFuZGFyAG1lbgBNZW5kZQBtZ2EASXJpc2gsIE1pZGRsZSAoOTAwLTEyMDApAG1pYwBNaSdrbWFxOyBNaWNtYWMAbWluAE1pbmFuZ2thYmF1AG1pcwBVbmNvZGVkIGxhbmd1YWdlcwBta2gATW9uLUtobWVyIChPdGhlcikAbWxnAG1sdABNYWx0ZXNlAG1uYwBNYW5jaHUAbW5pAG1ubwBNYW5vYm8gbGFuZ3VhZ2VzAG1vaABNb2hhd2sAbW9uAE1vbmdvbGlhbgBtb3MATW9zc2kAbXVsAE11bHRpcGxlIGxhbmd1YWdlcwBtdW4ATXVuZGEgbGFuZ3VhZ2VzAG11cwBDcmVlawBtd2wATWlyYW5kZXNlAG13cgBNYXJ3YXJpAG15bgBNYXlhbiBsYW5ndWFnZXMAbXl2AEVyenlhAG5haABOYWh1YXRsIGxhbmd1YWdlcwBuYWkATm9ydGggQW1lcmljYW4gSW5kaWFuAG5hcABOZWFwb2xpdGFuAG5hdQBOYXVydQBuYXYATmF2YWpvOyBOYXZhaG8AbmJsAE5kZWJlbGUsIFNvdXRoOyBTb3V0aCBOZGViZWxlAG5kZQBOZGViZWxlLCBOb3J0aDsgTm9ydGggTmRlYmVsZQBuZG8ATmRvbmdhAG5kcwBMb3cgR2VybWFuOyBMb3cgU2F4b247IEdlcm1hbiwgTG93OyBTYXhvbiwgTG93AG5lcABOZXBhbGkAbmV3AE5lcGFsIEJoYXNhOyBOZXdhcmkAbmlhAG5pYwBOaWdlci1Lb3Jkb2ZhbmlhbiAoT3RoZXIpAG5pdQBOaXVlYW4Abm5vAE5vcndlZ2lhbiBOeW5vcnNrOyBOeW5vcnNrLCBOb3J3ZWdpYW4Abm9iAEJva23DpWwsIE5vcndlZ2lhbjsgTm9yd2VnaWFuIEJva23DpWwAbm9nAE5vZ2FpAG5vbgBOb3JzZSwgT2xkAG5vcgBOb3J3ZWdpYW4AbnFvAG5zbwBQZWRpOyBTZXBlZGk7IE5vcnRoZXJuIFNvdGhvAG51YgBOdWJpYW4gbGFuZ3VhZ2VzAG53YwBDbGFzc2ljYWwgTmV3YXJpOyBPbGQgTmV3YXJpOyBDbGFzc2ljYWwgTmVwYWwgQmhhc2EAbnlhAENoaWNoZXdhOyBDaGV3YTsgTnlhbmphAG55bQBueW4AbnlvAE55b3JvAG56aQBOemltYQBvY2kAT2NjaXRhbiAocG9zdCAxNTAwKTsgUHJvdmVuw6dhbABvamkAT2ppYndhAG9yaQBPcml5YQBvcm0AT3JvbW8Ab3NhAE9zYWdlAG9zcwBPc3NldGlhbjsgT3NzZXRpYwBvdGEAVHVya2lzaCwgT3R0b21hbiAoMTUwMC0xOTI4KQBvdG8AT3RvbWlhbiBsYW5ndWFnZXMAcGFhAFBhcHVhbiAoT3RoZXIpAHBhZwBQYW5nYXNpbmFuAHBhbABQYWhsYXZpAHBhbQBQYW1wYW5nYTsgS2FwYW1wYW5nYW4AcGFuAFBhbmphYmk7IFB1bmphYmkAcGFwAFBhcGlhbWVudG8AcGF1AFBhbGF1YW4AcGVvAFBlcnNpYW4sIE9sZCAoY2EuNjAwLTQwMCBCLkMuKQBmYXMAUGVyc2lhbgBwaGkAUGhpbGlwcGluZSAoT3RoZXIpAHBobgBQaG9lbmljaWFuAHBsaQBwb2wAUG9saXNoAHBvbgBQb2hucGVpYW4AcG9yAFBvcnR1Z3Vlc2UAcHJhAFByYWtyaXQgbGFuZ3VhZ2VzAHBybwBQcm92ZW7Dp2FsLCBPbGQgKHRvIDE1MDApAHB1cwBQdXNodG87IFBhc2h0bwBxdWUAUXVlY2h1YQByYWoAUmFqYXN0aGFuaQByYXAAUmFwYW51aQByYXIAUmFyb3RvbmdhbjsgQ29vayBJc2xhbmRzIE1hb3JpAHJvYQBSb21hbmNlIChPdGhlcikAcm9oAFJvbWFuc2gAcm9tAFJvbWFueQByb24AUm9tYW5pYW47IE1vbGRhdmlhbjsgTW9sZG92YW4AcnVuAFJ1bmRpAHJ1cABBcm9tYW5pYW47IEFydW1hbmlhbjsgTWFjZWRvLVJvbWFuaWFuAHJ1cwBSdXNzaWFuAHNhZABTYW5kYXdlAHNhZwBTYW5nbwBzYWgAWWFrdXQAc2FpAFNvdXRoIEFtZXJpY2FuIEluZGlhbiAoT3RoZXIpAHNhbABTYWxpc2hhbiBsYW5ndWFnZXMAc2FtAFNhbWFyaXRhbiBBcmFtYWljAHNhbgBzYXMAU2FzYWsAc2F0AFNhbnRhbGkAc2NuAHNjbwBTY290cwBzZWwAU2Vsa3VwAHNlbQBTZW1pdGljIChPdGhlcikAc2dhAElyaXNoLCBPbGQgKHRvIDkwMCkAc2duAFNpZ24gTGFuZ3VhZ2VzAHNobgBzaWQAU2lkYW1vAHNpbgBTaW5oYWxhOyBTaW5oYWxlc2UAc2lvAFNpb3VhbiBsYW5ndWFnZXMAc2l0AFNpbm8tVGliZXRhbiAoT3RoZXIpAHNsYQBTbGF2aWMgKE90aGVyKQBzbGsAU2xvdmFrAHNsdgBTbG92ZW5pYW4Ac21hAFNvdXRoZXJuIFNhbWkAc21lAE5vcnRoZXJuIFNhbWkAc21pAFNhbWkgbGFuZ3VhZ2VzIChPdGhlcikAc21qAEx1bGUgU2FtaQBzbW4ASW5hcmkgU2FtaQBzbW8AU2Ftb2FuAHNtcwBTa29sdCBTYW1pAHNuYQBTaG9uYQBzbmQAU2luZGhpAHNuawBTb25pbmtlAHNvZwBTb2dkaWFuAHNvbQBTb21hbGkAc29uAFNvbmdoYWkgbGFuZ3VhZ2VzAHNvdABTb3RobywgU291dGhlcm4Ac3BhAFNwYW5pc2g7IENhc3RpbGlhbgBzcmQAU2FyZGluaWFuAHNybgBTcmFuYW4gVG9uZ28Ac3JwAFNlcmJpYW4Ac3JyAFNlcmVyAHNzYQBOaWxvLVNhaGFyYW4gKE90aGVyKQBzc3cAU3dhdGkAc3VrAFN1a3VtYQBzdW4AU3VuZGFuZXNlAHN1cwBzdXgAc3dhAFN3YWhpbGkAc3dlAFN3ZWRpc2gAc3ljAENsYXNzaWNhbCBTeXJpYWMAc3lyAFN5cmlhYwB0YWgAdGFpAFRhaSAoT3RoZXIpAHRhbQBUYW1pbAB0YXQAVGF0YXIAdGVsAFRlbHVndQB0ZW0AVGltbmUAdGVyAFRlcmVubwB0ZXQAVGV0dW0AdGdrAFRhamlrAHRnbABUYWdhbG9nAHRoYQBib2QAVGliZXRhbgB0aWcAVGlncmUAdGlyAHRpdgBUaXYAdGtsAFRva2VsYXUAdGxoAEtsaW5nb247IHRsaEluZ2FuLUhvbAB0bGkAVGxpbmdpdAB0bWgAdG9nAFRvbmdhIChOeWFzYSkAdG9uAFRvbmdhIChUb25nYSBJc2xhbmRzKQB0cGkAVG9rIFBpc2luAHRzaQBUc2ltc2hpYW4AdHNuAFRzd2FuYQB0c28AVHNvbmdhAHR1awBUdXJrbWVuAHR1bQBUdW1idWthAHR1cABUdXBpIGxhbmd1YWdlcwB0dXIAVHVya2lzaAB0dXQAQWx0YWljIChPdGhlcikAdHZsAFR1dmFsdQB0d2kAVHdpAHR5dgB1ZG0AVWRtdXJ0AHVnYQB1aWcAVWlnaHVyOyBVeWdodXIAdWtyAFVrcmFpbmlhbgB1bWIAVW1idW5kdQB1bmQAVW5kZXRlcm1pbmVkAHVyZAB1emIAVXpiZWsAdmFpAFZhaQB2ZW4AVmVuZGEAdmllAFZpZXRuYW1lc2UAdm9sAHZvdABWb3RpYwB3YWsAV2FrYXNoYW4gbGFuZ3VhZ2VzAHdhbABXYWxhbW8Ad2FyAFdhcmF5AHdhcwBXYXNobwBjeW0AV2Vsc2gAd2VuAFNvcmJpYW4gbGFuZ3VhZ2VzAHdsbgBXYWxsb29uAHdvbABXb2xvZgB4YWwAS2FsbXlrOyBPaXJhdAB4aG8AWGhvc2EAeWFvAFlhbwB5YXAAWWFwZXNlAHlpZABZaWRkaXNoAHlvcgBZb3J1YmEAeXBrAFl1cGlrIGxhbmd1YWdlcwB6YXAAWmFwb3RlYwB6YmwAQmxpc3N5bWJvbHM7IEJsaXNzeW1ib2xpY3M7IEJsaXNzAHplbgBaZW5hZ2EAemhhAFpodWFuZzsgQ2h1YW5nAHpuZABaYW5kZSBsYW5ndWFnZXMAenVsAHp1bgB6eHgATm8gbGluZ3Vpc3RpYyBjb250ZW50OyBOb3QgYXBwbGljYWJsZQB6emEAWmF6YTsgRGltaWxpOyBEaW1saTsgS2lyZGtpOyBLaXJtYW5qa2k7IFphemFraQBhc3NlcnQgZmFpbHVyZTogKG1fZmlsZSkAL2hvbWUvdXNlci9saWJtcDR2Mi9zcmMvbXA0ZmlsZS5jcHAAR2V0RmlsZW5hbWUAbWRhdABtb292AGlvZHMAc3RibABtdmhkAHRraGQAbWRoZABmcmVlAG1vb3YubXZoZC5tb2RpZmljYXRpb25UaW1lAGhpbnQAYXNzZXJ0IGZhaWx1cmU6ICghbV9maWxlKQBPcGVuAG9wZW4oACkgZmFpbGVkAG1vb3YudHJha1sldV0AdHJhay50a2hkLnRyYWNrSWQAdHJhay5tZGlhLmhkbHIuaGFuZGxlclR5cGUAbW9vdi5tdmhkLnRpbWVTY2FsZQBtb292Lm12aGQuZHVyYXRpb24AbW9vdi51ZHRhLm1ldGEuaWxzdABtb292LnVkdGEubWV0YQBoZGxyAG1vb3YudWR0YS5uYW1lAG1vb3YudWR0YS5uYW1lLnZhbHVlAG1vb3YudWR0YQBhc3NlcnQgZmFpbHVyZTogKG1fcFRyYWNrc1tpXSkARmluaXNoV3JpdGUAYXNzZXJ0IGZhaWx1cmU6IChyb290KQBhc3NlcnQgZmFpbHVyZTogKGZyZWVBdG9tKQBvcGVyYXRpb24gbm90IHBlcm1pdHRlZCBpbiByZWFkIG1vZGUAYXNzZXJ0IGZhaWx1cmU6IChwUGFyZW50QXRvbSkASW5zZXJ0Q2hpbGRBdG9tAG5vIHN1Y2ggcHJvcGVydHkgLSAARmluZEludGVnZXJQcm9wZXJ0eQB0eXBlIG1pc21hdGNoIC0gcHJvcGVydHkgACB0eXBlIABTZXRJbnRlZ2VyUHJvcGVydHkARmluZEZsb2F0UHJvcGVydHkAU2V0RmxvYXRQcm9wZXJ0eQBubyBzdWNoIHByb3BlcnR5IABGaW5kQnl0ZXNQcm9wZXJ0eQAgLSB0eXBlIABBZGRUcmFjawB0cmFrAGFzc2VydCBmYWlsdXJlOiAocFRyYWtBdG9tKQBhc3NlcnQgZmFpbHVyZTogKHBJbnRlZ2VyMzJQcm9wZXJ0eSkAJXM6ICIlcyI6IHR5cGUgdHJ1bmNhdGVkIHRvIGZvdXIgY2hhcmFjdGVycwBhc3NlcnQgZmFpbHVyZTogKHBTdHJpbmdQcm9wZXJ0eSkAdHJhay5tZGlhLm1kaGQudGltZVNjYWxlAHRraGQuZmxhZ3MAdHJlZi5tcG9kACVzLiVzAGVudHJ5Q291bnQAZW50cmllcy50cmFja0lkAG1kaWEubWluZi5kaW5mLmRyZWYAYXNzZXJ0IGZhaWx1cmU6IChwRHJlZkF0b20pAEFkZERhdGFSZWZlcmVuY2UAZHJlZi5lbnRyeUNvdW50AGFzc2VydCBmYWlsdXJlOiAocENvdW50UHJvcGVydHkpAHVybCAAdXJsIC5sb2NhdGlvbgBhc3NlcnQgZmFpbHVyZTogKHBVcmxQcm9wZXJ0eSkAbWRpYS5taW5mAG1kaWEubWluZi5zdGJsLnN0c2QAbWRpYS5taW5mLnN0Ymwuc3RzZC5lbnRyeUNvdW50AGZ0eXAAbWRpYS5taW5mLnN0Ymwuc3Rzei5zYW1wbGVTaXplAHZpZGUAdGtoZC53aWR0aAB0a2hkLmhlaWdodAB2bWhkAGVuY3YAYXZjMQBtZGlhLm1pbmYuc3RibC5zdHNkLmF2YzEud2lkdGgAbWRpYS5taW5mLnN0Ymwuc3RzZC5hdmMxLmhlaWdodABtZGlhLm1pbmYuc3RibC5zdHNkLmF2YzEuYXZjQy5BVkNQcm9maWxlSW5kaWNhdGlvbgBtZGlhLm1pbmYuc3RibC5zdHNkLmF2YzEuYXZjQy5wcm9maWxlX2NvbXBhdGliaWxpdHkAbWRpYS5taW5mLnN0Ymwuc3RzZC5hdmMxLmF2Y0MuQVZDTGV2ZWxJbmRpY2F0aW9uAG1kaWEubWluZi5zdGJsLnN0c2QuYXZjMS5hdmNDLmxlbmd0aFNpemVNaW51c09uZQBtZGlhLm1pbmYuc3RibC5zdHNkLmVuY3YuYXZjQwBtZGlhLm1pbmYuc3RibC5zdHNkLmF2YzEuYXZjQwBhdmNDLm51bU9mU2VxdWVuY2VQYXJhbWV0ZXJTZXRzAGF2Y0Muc2VxdWVuY2VFbnRyaWVzLnNlcXVlbmNlUGFyYW1ldGVyU2V0TGVuZ3RoAGF2Y0Muc2VxdWVuY2VFbnRyaWVzLnNlcXVlbmNlUGFyYW1ldGVyU2V0TkFMVW5pdAAlczogIiVzIjogQ291bGQgbm90IGZpbmQgYXZjQyBwcm9wZXJ0aWVzAEFkZEgyNjRTZXF1ZW5jZVBhcmFtZXRlclNldABhdmNDLm51bU9mUGljdHVyZVBhcmFtZXRlclNldHMAYXZjQy5waWN0dXJlRW50cmllcy5waWN0dXJlUGFyYW1ldGVyU2V0TGVuZ3RoAGF2Y0MucGljdHVyZUVudHJpZXMucGljdHVyZVBhcmFtZXRlclNldE5BTFVuaXQAJXM6ICIlcyI6IENvdWxkIG5vdCBmaW5kIGF2Y0MgcGljdHVyZSB0YWJsZSBwcm9wZXJ0aWVzAEFkZEgyNjRQaWN0dXJlUGFyYW1ldGVyU2V0AGFzc2VydCBmYWlsdXJlOiAocENvdW50KQAiJXMiOiBwaWN0dXJlIG1hdGNoZXMgJWQAIiVzIjogbmV3IHBpY3R1cmUgYWRkZWQgJWQAbW9vdi5tdmhkLm5leHRUcmFja0lkAHRvbyBtYW55IGV4aXN0aW5nIHRyYWNrcwBBbGxvY1RyYWNrSWQAVHJhY2sgaWQgACBkb2Vzbid0IGV4aXN0AEZpbmRUcmFja0luZGV4AEZpbmRUcmFrQXRvbUluZGV4AFdyaXRlU2FtcGxlAG1vb3YudHJha1sldV0uJXMAaW52YWxpZCB2YWx1ZQBTZXRUaW1lU2NhbGUAbW9vdi5pb2RzLnZpc3VhbFByb2ZpbGVMZXZlbElkACVzOiAiJXMiOiB0cmFjayAlZCBoYXMgbW9yZSB0aGFuIDEgY2hpbGQgYXRvbXMgaW4gc3RzZABHZXRUcmFja01lZGlhRGF0YU5hbWUAaWxsZWdhbCBhcnJheSBpbmRleDogACBvZiAAL2hvbWUvdXNlci9saWJtcDR2Mi9zcmMvbXA0dHJhY2suaABvcGVyYXRvcltdAGlsbGVnYWwgYXJyYXkgaW5kZXgASW5zZXJ0AC9ob21lL3VzZXIvbGlibXA0djIvc3JjL21wNGFycmF5LmgAVU5ERUZJTkVEKAApAAA8AAAAAAAAAESVAACkAQAApQEAAMT////E////RJUAAKYBAACnAQAAqJQAAOCUAAD0lAAAvJQAADwAAAAAAAAAlM8AAKgBAACpAQAAxP///8T///+UzwAAqgEAAKsBAABOU3QzX18yMTliYXNpY19pc3RyaW5nc3RyZWFtSWNOU18xMWNoYXJfdHJhaXRzSWNFRU5TXzlhbGxvY2F0b3JJY0VFRUUAAAAU/wAA/JQAAJTPAABVVEYtOAB1dGYxNgBVVEYtMTYAUy9KSVMAeG1sAFhNTABnaWYAR0lGAHBuZwBQTkcAdXJsAFVSTABkYXRlL3RpbWUAZ2VucmVzAGludGVnZXIAcmlhYXBhAFJJQUEtUEEAdXBjAFVQQwBibXAAQk1QAGJsdWVzAEJsdWVzAGNsYXNzaWNyb2NrAENsYXNzaWMgUm9jawBjb3VudHJ5AENvdW50cnkAZGFuY2UARGFuY2UAZGlzY28ARGlzY28AZ3J1bmdlAEdydW5nZQBoaXBob3AASG9wLUhvcABtZXRhbABNZXRhbABuZXdhZ2UATmV3IEFnZQBvbGRpZXMAT2xkaWVzAG90aGVyAE90aGVyAHBvcABQb3AAcmFuZF9iAFImQgByYXAAUmFwAHJlZ2dhZQBSZWdnYWUAdGVjaG5vAFRlY2hubwBpbmR1c3RyaWFsAEluZHVzdHJpYWwAYWx0ZXJuYXRpdmUAQWx0ZXJuYXRpdmUAc2thAFNrYQBkZWF0aG1ldGFsAERlYXRoIE1ldGFsAHByYW5rcwBQcmFua3MAc291bmR0cmFjawBTb3VuZHRyYWNrAGV1cm90ZWNobm8ARXVyby1UZWNobm8AYW1iaWVudABBbWJpZW50AHRyaXBob3AAdm9jYWwAVm9jYWwASmF6eitGdW5rAGZ1c2lvbgBGdXNpb24AdHJhbmNlAFRyYW5jZQBjbGFzc2ljYWwAQ2xhc3NpY2FsAGluc3RydW1lbnRhbABJbnN0cnVtZW50YWwAaG91c2UASG91c2UAc291bmRjbGlwAFNvdW5kIENsaXAAZ29zcGVsAEdvc3BlbABub2lzZQBOb2lzZQBhbHRlcm5yb2NrAEFsdGVyblJvY2sAc3BhY2UAU3BhY2UAbWVkaXRhdGl2ZQBNZWRpdGF0aXZlAGluc3RydW1lbnRhbHBvcABJbnN0cnVtZW50YWwgUG9wAGluc3RydW1lbnRhbHJvY2sASW5zdHJ1bWVudGFsIFJvY2sAZXRobmljAEV0aG5pYwBnb3RoaWMAR290aGljAHRlY2hub2luZHVzdHJpYWwAVGVjaG5vLUluZHVzdHJpYWwAZWxlY3Ryb25pYwBFbGVjdHJvbmljAHBvcGZvbGsAZXVyb2RhbmNlAEV1cm9kYW5jZQBkcmVhbQBEcmVhbQBzb3V0aGVybnJvY2sAU291dGhlcm4gUm9jawBjb21lZHkAQ29tZWR5AGdhbmdzdGEAR2FuZ3N0YQB0b3A0MABUb3AgNDAAY2hyaXN0aWFucmFwAENocmlzdGlhbiBSYXAAcG9wZnVuawBqdW5nbGUASnVuZ2xlAG5hdGl2ZWFtZXJpY2FuAE5hdGl2ZSBBbWVyaWNhbgBjYWJhcmV0AENhYmFyZXQAbmV3d2F2ZQBwc3ljaGVkZWxpYwBQc3ljaGVkZWxpYwBzaG93dHVuZXMAU2hvd3R1bmVzAHRyYWlsZXIAVHJhaWxlcgBMby1GaQB0cmliYWwAVHJpYmFsAEFjaWQgUHVuawBBY2lkIEphenoAcG9sa2EAUG9sa2EAcmV0cm8AUmV0cm8AbXVzaWNhbABNdXNpY2FsAHJvY2thbmRfcm9sbABSb2NrICYgUm9sbABIYXJkIFJvY2sARm9say1Sb2NrAG5hdGlvbmFsZm9sawBOYXRpb25hbCBGb2xrAHN3aW5nAFN3aW5nAGZhc3RmdXNpb24ARmFzdCBGdXNpb24AYmVib2IAQmVib2IAbGF0aW4ATGF0aW4AcmV2aXZhbABSZXZpdmFsAGNlbHRpYwBDZWx0aWMAYmx1ZWdyYXNzAEJsdWVncmFzcwBhdmFudGdhcmRlAEF2YW50Z2FyZGUAZ290aGljcm9jawBHb3RoaWMgUm9jawBwcm9ncmVzc2l2ZXJvY2sAUHJvZ3Jlc2l2ZSBSb2NrAHBzeWNoZWRlbGljcm9jawBQc3ljaGVkZWxpYyBSb2NrAHN5bXBob25pY3JvY2sAU1lNUEhPTklDX1JPQ0sAU2xvdyBSb2NrAGJpZ2JhbmQAY2hvcnVzAENob3J1cwBlYXN5bGlzdGVuaW5nAEVhc3kgTGlzdGVuaW5nAGh1bW91cgBIdW1vcgBzcGVlY2gAU3BlZWNoAGNoYW5zb24AQ2hhc29uAG9wZXJhAE9wZXJhAGNoYW1iZXJtdXNpYwBDaGFtYmVyIE11c2ljAHNvbmF0YQBTb25hdGEAYm9vdHliYXNzAEJvb3R5IEJhc3MAcHJpbXVzAFByaW11cwBwb3JuZ3Jvb3ZlAFBvcm4gR3Jvb3ZlAHNhdGlyZQBTYXRpcmUAc2xvd2phbQB0YW5nbwBUYW5nbwBzYW1iYQBTYW1iYQBiYWxsYWQAQmFsbGFkAHBvd2VyYmFsbGFkAFBvd2VyIEJhbGxhZAByaHl0aG1pY3NvdWwAUmh5dGhtaWMgU291bABmcmVlc3R5bGUARnJlZXN0eWxlAFB1bmsgUm9jawBEcnVtIFNvbG8AQSBjYXBlbGxhAGV1cm9ob3VzZQBFdXJvLUhvdXNlAGRhbmNlaGFsbABEYW5jZSBIYWxsAE1vdmllAG5vcm1hbABOb3JtYWwAYXVkaW9ib29rAEF1ZGlvIEJvb2sAbXVzaWN2aWRlbwBNdXNpYyBWaWRlbwBtb3ZpZQB0dnNob3cAVFYgU2hvdwBib29rbGV0AEJvb2tsZXQAaXR1bmVzAGlUdW5lcwBhb2wAQU9MAHVzYQBVbml0ZWQgU3RhdGVzAGZyYQBGcmFuY2UAZ2VyAEdlcm1hbnkAZ2JyAFVuaXRlZCBLaW5nZG9tAGF1dABBdXN0cmlhAGJlbABCZWxnaXVtAGZpbgBGaW5sYW5kAGdyYwBHcmVlY2UAaXJsAElyZWxhbmQAaXRhAEl0YWx5AGx1eABMdXhlbWJvdXJnAG5sZABOZXRoZXJsYW5kcwBwcnQAZXNwAFNwYWluAGNhbgBDYW5hZGEAc3dlAFN3ZWRlbgBub3IATm9yd2F5AGRuawBEZW5tYXJrAGNoZQBTd2l0emVybGFuZABhdXMAQXVzdHJhbGlhAG56bABOZXcgWmVhbGFuZABqcG4ASmFwYW4AY2xlYW4AQ2xlYW4AR0lGODdhAEdJRjg5YQD/2P8AAAAAAAAApgAAywEAAMwBAADNAQAAzQEAAM0BAABvAAAAzQEAAM0BAADNAQAAGwEAACIlcyI6IEZpbmRQcm9wZXJ0eTogbWF0Y2hlZCAlcwBhc3NlcnQgZmFpbHVyZTogKGZhbHNlKQAvaG9tZS91c2VyL2xpYm1wNHYyL3NyYy9tcDRwcm9wZXJ0eS5jcHAAR2V0VmFsdWUAU2V0VmFsdWUAIiVzIjogJXNbJXVdID0gJXUgKDB4JTAyeCkAIiVzIjogJXMgPSAldSAoMHglMDJ4KQAiJXMiOiAlc1sldV0gPSAldSAo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bXA0djIvc3JjL21wNHByb3BlcnR5LmgAaWxsZWdhbCBhcnJheSBpbmRleAAvaG9tZS91c2VyL2xpYm1wNHYyL3NyYy9tcDRhcnJheS5oAEluc2VydABpbGxlZ2FsIGFycmF5IGluZGV4OiAAIG9mIABvcGVyYXRvcltdAHJlcXVlc3RlZCBhcnJheSBzaXplIGV4Y2VlZHMgNEdCAFJlc2l6ZQBVTkRFRklORUQoACkAAAAAAACwtQAALAIAAC0CAAAuAgAAdHJhay50a2hkLnRyYWNrSWQAdHJhay5tZGlhLm1kaGQudGltZVNjYWxlAHRyYWsudGtoZC5kdXJhdGlvbgB0cmFrLm1kaWEubWRoZC5kdXJhdGlvbgB0cmFrLnRraGQubW9kaWZpY2F0aW9uVGltZQB0cmFrLm1kaWEubWRoZC5tb2RpZmljYXRpb25UaW1lAHRyYWsubWRpYS5oZGxyLmhhbmRsZXJUeXBlAHRyYWsubWRpYS5taW5mLnN0Ymwuc3Rzei5zYW1wbGVTaXplAHRyYWsubWRpYS5taW5mLnN0Ymwuc3Rzei5zYW1wbGVDb3VudAB0cmFrLm1kaWEubWluZi5zdGJsLnN0c3ouZW50cmllcy5lbnRyeVNpemUAdHJhay5tZGlhLm1pbmYuc3RibC5zdHoyLnNhbXBsZUNvdW50AHRyYWsubWRpYS5taW5mLnN0Ymwuc3R6Mi5lbnRyaWVzLmVudHJ5U2l6ZQB0cmFrLm1kaWEubWluZi5zdGJsLnN0ejIuZmllbGRTaXplAHRyYWsubWRpYS5taW5mLnN0Ymwuc3RzYy5lbnRyeUNvdW50AHRyYWsubWRpYS5taW5mLnN0Ymwuc3RzYy5lbnRyaWVzLmZpcnN0Q2h1bmsAdHJhay5tZGlhLm1pbmYuc3RibC5zdHNjLmVudHJpZXMuc2FtcGxlc1BlckNodW5rAHRyYWsubWRpYS5taW5mLnN0Ymwuc3RzYy5lbnRyaWVzLnNhbXBsZURlc2NyaXB0aW9uSW5kZXgAdHJhay5tZGlhLm1pbmYuc3RibC5zdHNjLmVudHJpZXMuZmlyc3RTYW1wbGUAdHJhay5tZGlhLm1pbmYuc3RibC5zdGNvLmVudHJ5Q291bnQAdHJhay5tZGlhLm1pbmYuc3RibC5zdGNvLmVudHJpZXMuY2h1bmtPZmZzZXQAdHJhay5tZGlhLm1pbmYuc3RibC5jbzY0LmVudHJ5Q291bnQAdHJhay5tZGlhLm1pbmYuc3RibC5jbzY0LmVudHJpZXMuY2h1bmtPZmZzZXQAdHJhay5tZGlhLm1pbmYuc3RibC5zdHRzLmVudHJ5Q291bnQAdHJhay5tZGlhLm1pbmYuc3RibC5zdHRzLmVudHJpZXMuc2FtcGxlQ291bnQAdHJhay5tZGlhLm1pbmYuc3RibC5zdHRzLmVudHJpZXMuc2FtcGxlRGVsdGEAdHJhay5tZGlhLm1pbmYuc3RibC5jdHRzLmVudHJ5Q291bnQAdHJhay5tZGlhLm1pbmYuc3RibC5jdHRzLmVudHJpZXMuc2FtcGxlQ291bnQAdHJhay5tZGlhLm1pbmYuc3RibC5jdHRzLmVudHJpZXMuc2FtcGxlT2Zmc2V0AHRyYWsubWRpYS5taW5mLnN0Ymwuc3Rzcy5lbnRyeUNvdW50AHRyYWsubWRpYS5taW5mLnN0Ymwuc3Rzcy5lbnRyaWVzLnNhbXBsZU51bWJlcgBpbnZhbGlkIHRyYWNrAC9ob21lL3VzZXIvbGlibXA0djIvc3JjL21wNHRyYWNrLmNwcABNUDRUcmFjawB0cmFrLm1kaWEubWluZi5zdGJsLnNkdHAAIiVzIjogV3JpdGVTYW1wbGU6IHRyYWNrICV1IGlkICV1IHNpemUgJXUgKDB4JXgpIABubyBzYW1wbGUgZGF0YQBXcml0ZVNhbXBsZQB0cmFrLm1kaWEubWluZi5zdGJsLnN0c2Quc2FtcgB0cmFrLm1kaWEubWluZi5zdGJsLnN0c2Quc2F3YgAiJXMiOiBkdXJhdGlvbiAlbGx1ACIlcyI6IFdyaXRlQ2h1bms6IHRyYWNrICV1IG9mZnNldCAweCVsbHggc2l6ZSAldSAoMHgleCkgbnVtU2FtcGxlcyAldQB0cmFrLm1kaWEubWluZi5zdGJsLnN0c2QuKi5lc2RzLmRlY0NvbmZpZ0Rlc2NyLmJ1ZmZlclNpemVEQgB0cmFrLm1kaWEubWluZi5zdGJsLnN0c2QuKi5lc2RzLmRlY0NvbmZpZ0Rlc2NyLm1heEJpdHJhdGUAdHJhay5tZGlhLm1pbmYuc3RibC5zdHNkLiouZXNkcy5kZWNDb25maWdEZXNjci5hdmdCaXRyYXRlAHRyYWsudWR0YS5uYW1lLnZhbHVlAHVkdGEubmFtZQB0cmFrLm1kaWEubWluZi5zdGJsAHNkdHAAZnR5cABhdmMxAGFzc2VydCBmYWlsdXJlOiAobV9kdXJhdGlvblBlckNodW5rKQBJc0NodW5rRnVsbAAlczogIiVzIjogbnVtQnl0ZXMgJXUgbm90IGRpdmlzaWJsZSBieSBieXRlc1BlclNhbXBsZSAldSBzYW1wbGVJZCAldQBVcGRhdGVTYW1wbGVTaXplcwB0cmFrLm1kaWEubWluZi5zdGJsLnN0c2QAc2FtcGxlIGlkIG91dCBvZiByYW5nZQBHZXRTYW1wbGVUaW1lcwBjdHRzAGN0dHMuZW50cnlDb3VudABhc3NlcnQgZmFpbHVyZTogKHBDdHRzQXRvbS0+RmluZFByb3BlcnR5KCAiY3R0cy5lbnRyeUNvdW50IiwgKE1QNFByb3BlcnR5KiopJm1fcEN0dHNDb3VudFByb3BlcnR5KSkAVXBkYXRlUmVuZGVyaW5nT2Zmc2V0cwBjdHRzLmVudHJpZXMuc2FtcGxlQ291bnQAYXNzZXJ0IGZhaWx1cmU6IChwQ3R0c0F0b20tPkZpbmRQcm9wZXJ0eSggImN0dHMuZW50cmllcy5zYW1wbGVDb3VudCIsIChNUDRQcm9wZXJ0eSoqKSZtX3BDdHRzU2FtcGxlQ291bnRQcm9wZXJ0eSkpAGN0dHMuZW50cmllcy5zYW1wbGVPZmZzZXQAYXNzZXJ0IGZhaWx1cmU6IChwQ3R0c0F0b20tPkZpbmRQcm9wZXJ0eSggImN0dHMuZW50cmllcy5zYW1wbGVPZmZzZXQiLCAoTVA0UHJvcGVydHkqKikmbV9wQ3R0c1NhbXBsZU9mZnNldFByb3BlcnR5KSkAc3RzcwBzdHNzLmVudHJ5Q291bnQAYXNzZXJ0IGZhaWx1cmU6IChwU3Rzc0F0b20tPkZpbmRQcm9wZXJ0eSggInN0c3MuZW50cnlDb3VudCIsIChNUDRQcm9wZXJ0eSoqKSZtX3BTdHNzQ291bnRQcm9wZXJ0eSkpAFVwZGF0ZVN5bmNTYW1wbGVzAHN0c3MuZW50cmllcy5zYW1wbGVOdW1iZXIAYXNzZXJ0IGZhaWx1cmU6IChwU3Rzc0F0b20tPkZpbmRQcm9wZXJ0eSggInN0c3MuZW50cmllcy5zYW1wbGVOdW1iZXIiLCAoTVA0UHJvcGVydHkqKikmbV9wU3Rzc1NhbXBsZVByb3BlcnR5KSkAYXNzZXJ0IGZhaWx1cmU6IChwUGFyZW50QXRvbSkAQWRkQXRvbQB0cmFrLmVkdHMuZWxzdABlbHN0LmVudHJ5Q291bnQAZWxzdC5lbnRyaWVzLm1lZGlhVGltZQBlbHN0LmVudHJpZXMuc2VnbWVudER1cmF0aW9uAGVsc3QuZW50cmllcy5tZWRpYVJhdGUAZWxzdC5lbnRyaWVzLnJlc2VydmVkAHR3b3MAc293dABONW1wNHYyNGltcGw4TVA0VHJhY2tFAAAAAOz+AACWtQAAWy4AYXNzZXJ0IGZhaWx1cmU6IChwSW5kZXgpAC9ob21lL3VzZXIvbGlibXA0djIvc3JjL21wNHV0aWwuY3BwAE1QNE5hbWVGaXJzdEluZGV4ACV1AHZpZGUAdmlkZW8AbXA0dgBhdmMxAHMyNjMAZW5jdgBzb3VuAHNvdW5kAGF1ZGlvAGVuY2EAc2FtcgBzYXdiAG1wNGEAc2RzbQBzY2VuZQBiaWZzAG9kc20Ab2QAY250bABBdHRlbXB0IHRvIG5vcm1hbGl6ZSAlcyBkaWQgbm90IG1hdGNoAAAAAADIuQAAigAAADkCAACMAAAAOgIAAI4AAACPAAAAkAAAAGNsYXNzaWZpY2F0aW9uRW50aXR5AGNsYXNzaWZpY2F0aW9uVGFibGUAY29udGVudENsYXNzaWZpY2F0aW9uRGF0YQAAAAAAAPi5AACKAAAAOwIAAIwAAACNAAAAjgAAAI8AAAA8AgAAbGFuZ3VhZ2VDb2RlAGlzVVRGOFN0cmluZwByZXNlcnZlZABrZXl3b3JkQ291bnQAa2V5d29yZHMAc3RyaW5nAGFzc2VydCBmYWlsdXJlOiAocFByb3BlcnR5KQAvaG9tZS91c2VyL2xpYm1wNHYyL3NyYy9vY2lkZXNjcmlwdG9ycy5jcHAATXV0YXRlAAAAAAAAACi6AACKAAAAPQIAAIwAAAA+AgAAjgAAAI8AAACQAAAAcmF0aW5nRW50aXR5AHJhdGluZ0NyaXRlcmlhAHJhdGluZ0luZm8AAAAAAABouwAAigAAAD8CAACMAAAAjQAAAI4AAACPAAAAkAAAAAAAAABcugAAigAAAEACAACMAAAAjQAAAI4AAACPAAAAQQIAAGV2ZW50TmFtZQBldmVudFRleHQAAAAAAJS6AACKAAAAQgIAAIwAAACNAAAAjgAAAI8AAABDAgAAaXRlbUNvdW50AGl0ZW1zAGl0ZW1EZXNjcmlwdGlvbgBpdGVtVGV4dABub25JdGVtVGV4dAAAAAAAAAAAmLsAAIoAAABEAgAAjAAAAI0AAACOAAAAjwAAAJAAAABjcmVhdG9yQ291bnQAY3JlYXRvcnMAbmFtZQAAAAAAAMy7AACKAAAARQIAAIwAAACNAAAAjgAAAI8AAACQAAAAY29udGVudENyZWF0aW9uRGF0ZQAAAAAAALwAAIoAAABGAgAAjAAAAI0AAACOAAAAjwAAAJAAAABwYXJhbWV0ZXJDb3VudABwYXJhbWV0ZXJzAGlkAHZhbHVlAAAAAAAANLsAAIoAAABHAgAAjAAAAEgCAACOAAAAjwAAAJAAAABkYXRhAE41bXA0djI0aW1wbDI1TVA0Q29udGVudENsYXNzRGVzY3JpcHRvckUAAAAU/wAAnbkAAGhrAABONW1wNHYyNGltcGwyME1QNEtleXdvcmREZXNjcmlwdG9yRQAU/wAA1LkAAGhrAABONW1wNHYyNGltcGwxOU1QNFJhdGluZ0Rlc2NyaXB0b3JFAAAU/wAABLoAAGhrAABONW1wNHYyNGltcGwyMk1QNFNob3J0VGV4dERlc2NyaXB0b3JFAAAAFP8AADS6AABoawAATjVtcDR2MjRpbXBsMjVNUDRFeHBhbmRlZFRleHREZXNjcmlwdG9yRQAAAAAU/wAAaLoAAGhrAAAAAAAAALsAAGoAAABJAgAAbAAAAG0AAABuAAAAbwAAAHAAAABxAAAAcgAAAHMAAABKAgAASwIAAE41bXA0djI0aW1wbDIzTVA0Q3JlYXRvclRhYmxlUHJvcGVydHlFAAAU/wAA2LoAAFSpAABONW1wNHYyNGltcGwyM01QNFVua25vd25PQ0lEZXNjcmlwdG9yRQAAFP8AAAy7AABoawAATjVtcDR2MjRpbXBsMjFNUDRMYW5ndWFnZURlc2NyaXB0b3JFAAAAABT/AABAuwAAaGsAAE41bXA0djI0aW1wbDIwTVA0Q3JlYXRvckRlc2NyaXB0b3JFABT/AAB0uwAAaGsAAE41bXA0djI0aW1wbDIxTVA0Q3JlYXRpb25EZXNjcmlwdG9yRQAAAAAU/wAApLsAAGhrAABONW1wNHYyNGltcGwyNE1QNFNtcHRlQ2FtZXJhRGVzY3JpcHRvckUAFP8AANi7AABoawAAAAAAAHy9AACKAAAATQIAAIwAAACNAAAAjgAAAI8AAACQAAAAcHJlZGVmaW5lZABxdWFsaWZpZXJzAG1heERlbGF5AHByZWZNYXhEZWxheQBsb3NzUHJvYgBtYXhHYXBMb3NzAG1heEFVU2l6ZQBhdmdBVVNpemUAbWF4QVVSYXRlAAAAAAAAAEy9AACKAAAATgIAAIwAAABPAgAAjgAAAI8AAACQAAAAZGF0YQAAAAAAAAAAGL0AANoBAABQAgAA3AEAAN0BAADeAQAA3wEAAOABAADhAQAA4gEAAOMBAABRAgAATjVtcDR2MjRpbXBsMjNNUDRRb3NRdWFsaWZpZXJQcm9wZXJ0eUUAABT/AADwvAAAiKkAAE41bXA0djI0aW1wbDIyTVA0VW5rbm93blFvc1F1YWxpZmllckUAAAAU/wAAJL0AAGhrAABONW1wNHYyNGltcGwyME1QNFFvc0Rlc2NyaXB0b3JCYXNlRQAU/wAAWL0AAGhrAAAAAAAAvL0AAFICAABTAgAAVAIAAE41bXA0djI0aW1wbDE1TVA0UnRwSGludFRyYWNrRQAAFP8AAJy9AACwtQAAAAAAABy+AABbAgAAXAIAAF0CAABeAgAAXwIAAGACAABhAgAAYgIAAE41bXA0djI4cGxhdGZvcm0yaW8yMFN0YW5kYXJkRmlsZVByb3ZpZGVyRQAAFP8AAPC9AABswAAAcAAAAAAAAABIvwAAYwIAAGQCAABoAAAA+P///0i/AABlAgAAZgIAAJD///+Q////SL8AAGcCAABoAgAANL4AAJi+AADUvgAA6L4AAPy+AAAQvwAAwL4AAKy+AABcvgAASL4AAHAAAAAAAAAAdNAAAGkCAABqAgAAaAAAAPj///900AAAawIAAGwCAACQ////kP///3TQAABtAgAAbgIAAHAAAAAAAAAAlM8AAKgBAACpAQAAkP///5D///+UzwAAqgEAAKsBAABoAAAAAAAAANzPAABGAAAARwAAAJj///+Y////3M8AAEgAAABJAAAATlN0M19fMjEzYmFzaWNfZnN0cmVhbUljTlNfMTFjaGFyX3RyYWl0c0ljRUVFRQAAFP8AABi/AAB00AAAAAAAAMS/AABvAgAAcAIAAHECAAByAgAAcwIAAHQCAABZAgAAUQAAAFIAAAB1AgAAVAAAAHYCAABWAAAAdwIAAE5TdDNfXzIxM2Jhc2ljX2ZpbGVidWZJY05TXzExY2hhcl90cmFpdHNJY0VFRUUAABT/AACUvwAAXM8AAHJiAHIrYgB3K2IAAAAAAAB0wAAAeQIAAHoCAAB7AgAAfAIAAH0CAAB+AgAAfwIAAIACAAAAAAAArMAAAIECAACCAgAAgwIAAIQCAACFAgAAhgIAAIcCAACIAgAATjVtcDR2MjhwbGF0Zm9ybTJpbzRGaWxlRQBONW1wNHYyOHBsYXRmb3JtMmlvMTJGaWxlUHJvdmlkZXJFAAAAAOz+AABGwAAAFP8AACzAAABswAAATjVtcDR2MjhwbGF0Zm9ybTJpbzE4Q3VzdG9tRmlsZVByb3ZpZGVyRQAAAAAU/wAAgMAAAGzAAEHAgQMLVxkSRDsCPyxHFD0zMAobBkZLRTcPSQ6OFwNAHTxpKzYfSi0cASAlKSEIDBUWIi4QOD4LNDEYZHR1di9BCX85ESNDMkKJiosFBCYoJw0qHjWMBxpIkxOUlQBBoIIDC4oOSWxsZWdhbCBieXRlIHNlcXVlbmNlAERvbWFpbiBlcnJvcgBSZXN1bHQgbm90IHJlcHJlc2VudGFibGUATm90IGEgdHR5AFBlcm1pc3Npb24gZGVuaWVkAE9wZXJhdGlvbiBub3QgcGVybWl0dGVkAE5vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnkATm8gc3VjaCBwcm9jZXNzAEZpbGUgZXhpc3RzAFZhbHVlIHRvbyBsYXJnZSBmb3IgZGF0YSB0eXBlAE5vIHNwYWNlIGxlZnQgb24gZGV2aWNlAE91dCBvZiBtZW1vcnkAUmVzb3VyY2UgYnVzeQBJbnRlcnJ1cHRlZCBzeXN0ZW0gY2FsbABSZXNvdXJjZSB0ZW1wb3JhcmlseSB1bmF2YWlsYWJsZQBJbnZhbGlkIHNlZWsAQ3Jvc3MtZGV2aWNlIGxpbmsAUmVhZC1vbmx5IGZpbGUgc3lzdGVtAERpcmVjdG9yeSBub3QgZW1wdHkAQ29ubmVjdGlvbiByZXNldCBieSBwZWVyAE9wZXJhdGlvbiB0aW1lZCBvdXQAQ29ubmVjdGlvbiByZWZ1c2VkAEhvc3QgaXMgZG93bgBIb3N0IGlzIHVucmVhY2hhYmxlAEFkZHJlc3MgaW4gdXNlAEJyb2tlbiBwaXBlAEkvTyBlcnJvcgBObyBzdWNoIGRldmljZSBvciBhZGRyZXNzAEJsb2NrIGRldmljZSByZXF1aXJlZABObyBzdWNoIGRldmljZQBOb3QgYSBkaXJlY3RvcnkASXMgYSBkaXJlY3RvcnkAVGV4dCBmaWxlIGJ1c3kARXhlYyBmb3JtYXQgZXJyb3IASW52YWxpZCBhcmd1bWVudABBcmd1bWVudCBsaXN0IHRvbyBsb25nAFN5bWJvbGljIGxpbmsgbG9vcABGaWxlbmFtZSB0b28gbG9uZwBUb28gbWFueSBvcGVuIGZpbGVzIGluIHN5c3RlbQBObyBmaWxlIGRlc2NyaXB0b3JzIGF2YWlsYWJsZQBCYWQgZmlsZSBkZXNjcmlwdG9yAE5vIGNoaWxkIHByb2Nlc3MAQmFkIGFkZHJlc3MARmlsZSB0b28gbGFyZ2UAVG9vIG1hbnkgbGlua3MATm8gbG9ja3MgYXZhaWxhYmxlAFJlc291cmNlIGRlYWRsb2NrIHdvdWxkIG9jY3VyAFN0YXRlIG5vdCByZWNvdmVyYWJsZQBQcmV2aW91cyBvd25lciBkaWVkAE9wZXJhdGlvbiBjYW5jZWxlZABGdW5jdGlvbiBub3QgaW1wbGVtZW50ZWQATm8gbWVzc2FnZSBvZiBkZXNpcmVkIHR5cGUASWRlbnRpZmllciByZW1vdmVkAERldmljZSBub3QgYSBzdHJlYW0ATm8gZGF0YSBhdmFpbGFibGUARGV2aWNlIHRpbWVvdXQAT3V0IG9mIHN0cmVhbXMgcmVzb3VyY2VzAExpbmsgaGFzIGJlZW4gc2V2ZXJlZABQcm90b2NvbCBlcnJvcgBCYWQgbWVzc2FnZQBGaWxlIGRlc2NyaXB0b3IgaW4gYmFkIHN0YXRlAE5vdCBhIHNvY2tldABEZXN0aW5hdGlvbiBhZGRyZXNzIHJlcXVpcmVkAE1lc3NhZ2UgdG9vIGxhcmdlAFByb3RvY29sIHdyb25nIHR5cGUgZm9yIHNvY2tldABQcm90b2NvbCBub3QgYXZhaWxhYmxlAFByb3RvY29sIG5vdCBzdXBwb3J0ZWQAU29ja2V0IHR5cGUgbm90IHN1cHBvcnRlZABOb3Qgc3VwcG9ydGVkAFByb3RvY29sIGZhbWlseSBub3Qgc3VwcG9ydGVkAEFkZHJlc3MgZmFtaWx5IG5vdCBzdXBwb3J0ZWQgYnkgcHJvdG9jb2wAQWRkcmVzcyBub3QgYXZhaWxhYmxlAE5ldHdvcmsgaXMgZG93bgBOZXR3b3JrIHVucmVhY2hhYmxlAENvbm5lY3Rpb24gcmVzZXQgYnkgbmV0d29yawBDb25uZWN0aW9uIGFib3J0ZWQATm8gYnVmZmVyIHNwYWNlIGF2YWlsYWJsZQBTb2NrZXQgaXMgY29ubmVjdGVkAFNvY2tldCBub3QgY29ubmVjdGVkAENhbm5vdCBzZW5kIGFmdGVyIHNvY2tldCBzaHV0ZG93bgBPcGVyYXRpb24gYWxyZWFkeSBpbiBwcm9ncmVzcwBPcGVyYXRpb24gaW4gcHJvZ3Jlc3MAU3RhbGUgZmlsZSBoYW5kbGUAUmVtb3RlIEkvTyBlcnJvcgBRdW90YSBleGNlZWRlZABObyBtZWRpdW0gZm91bmQAV3JvbmcgbWVkaXVtIHR5cGUATm8gZXJyb3IgaW5mb3JtYXRpb24AQdSQAwsCiwIAQfuQAwsF//////8AQcCRAwthcndhAHJ3YQAtKyAgIDBYMHgAKG51bGwpAAAAAAAAAAARAAoAERERAAAAAAUAAAAAAAAJAAAAAAsAAAAAAAAAABEADwoREREDCgcAARMJCwsAAAkGCwAACwAGEQAAABEREQBBsZIDCyELAAAAAAAAAAARAAoKERERAAoAAAIACQsAAAAJAAsAAAsAQeuSAwsBDABB95IDCxUMAAAAAAwAAAAACQwAAAAAAAwAAAwAQaWTAwsBDgBBsZMDCxUNAAAABA0AAAAACQ4AAAAAAA4AAA4AQd+TAwsBEABB65MDCx4PAAAAAA8AAAAACRAAAAAAABAAABAAABIAAAASEhIAQaKUAwsOEgAAABISEgAAAAAAAAkAQdOUAwsBCwBB35QDCxUKAAAAAAoAAAAACQsAAAAAAAsAAAsAQY2VAwsBDABBmZUDC0sMAAAAAAwAAAAACQwAAAAAAAwAAAwAADAxMjM0NTY3ODlBQkNERUYtMFgrMFggMFgtMHgrMHggMHgAaW5mAElORgBuYW4ATkFOAC4AQfCVAwvzC/////////////////////////////////////////////////////////////////8AAQIDBAUGBwgJ/////////woLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIj////////CgsMDQ4PEBESExQVFhcYGRobHB0eHyAhIiP/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////AAECBAcDBgUAAAAAAAAAAgAAwAMAAMAEAADABQAAwAYAAMAHAADACAAAwAkAAMAKAADACwAAwAwAAMANAADADgAAwA8AAMAQAADAEQAAwBIAAMATAADAFAAAwBUAAMAWAADAFwAAwBgAAMAZAADAGgAAwBsAAMAcAADAHQAAwB4AAMAfAADAAAAAswEAAMMCAADDAwAAwwQAAMMFAADDBgAAwwcAAMMIAADDCQAAwwoAAMMLAADDDAAAww0AANMOAADDDwAAwwAADLsBAAzDAgAMwwMADMMEAAzTaW5maW5pdHkAbmFuAAAAAAAAAADRdJ4AV529KoBwUg///z4nCgAAAGQAAADoAwAAECcAAKCGAQBAQg8AgJaYAADh9QUYAAAANQAAAHEAAABr////zvv//5K///+QCAEAAAAAAFzPAACuAgAArwIAAEwAAABNAAAAsAIAALECAABQAAAAUQAAAFIAAACyAgAAVAAAALMCAABWAAAAtAIAAAgAAAAAAAAAlM8AAKgBAACpAQAA+P////j///+UzwAAqgEAAKsBAAB4zQAAjM0AAAQAAAAAAAAA3M8AAEYAAABHAAAA/P////z////czwAASAAAAEkAAACozQAAvM0AAAwAAAAAAAAAdNAAAGkCAABqAgAABAAAAPj///900AAAawIAAGwCAAD0////9P///3TQAABtAgAAbgIAANjNAAAA0AAAFNAAACjQAAA80AAAAM4AAOzNAABpb3N0cmVhbQB1bnNwZWNpZmllZCBpb3N0cmVhbV9j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SWNOU18xOWlzdHJlYW1idWZfaXRlcmF0b3JJY05TXzExY2hhcl90cmFpdHNJY0VFRUVFRQBOU3QzX18yMTFfX21vbmV5X2dldEljRUUAAOz+AABS8QAAcP8AAAzxAAAAAAAAAgAAADjkAAACAAAAbPEAQZjjAwuaARjyAACvAwAAXQQAAI0DAABeBAAAXwQAAE5TdDNfXzI5bW9uZXlfZ2V0SXdOU18xOWlzdHJlYW1idWZfaXRlcmF0b3JJd05TXzExY2hhcl90cmFpdHNJd0VFRUVFRQBOU3QzX18yMTFfX21vbmV5X2dldEl3RUUAAOz+AAD28QAAcP8AALDxAAAAAAAAAgAAADjkAAACAAAAEPIAQbzkAwuaAbzyAACvAwAAYAQAAI0DAABhBAAAYgQAAE5TdDNfXzI5bW9uZXlfcHV0SWNOU18xOW9zdHJlYW1idWZfaXRlcmF0b3JJY05TXzExY2hhcl90cmFpdHNJY0VFRUVFRQBOU3QzX18yMTFfX21vbmV5X3B1dEljRUUAAOz+AACa8gAAcP8AAFTyAAAAAAAAAgAAADjkAAACAAAAtPIAQeDlAwuaAWDzAACvAwAAYwQAAI0DAABkBAAAZQQAAE5TdDNfXzI5bW9uZXlfcHV0SXdOU18xOW9zdHJlYW1idWZfaXRlcmF0b3JJd05TXzExY2hhcl90cmFpdHNJd0VFRUVFRQBOU3QzX18yMTFfX21vbmV5X3B1dEl3RUUAAOz+AAA+8wAAcP8AAPjyAAAAAAAAAgAAADjkAAACAAAAWPMAQYTnAwuvJdjzAACvAwAAZgQAAI0DAABnBAAAaAQAAGkEAABOU3QzX18yOG1lc3NhZ2VzSWNFRQBOU3QzX18yMTNtZXNzYWdlc19iYXNlRQAAAADs/gAAtfMAAHD/AACg8wAAAAAAAAIAAAA45AAAAgAAANDzAAACAAAAAAAAADD0AACvAwAAagQAAI0DAABrBAAAbAQAAG0EAABOU3QzX18yOG1lc3NhZ2VzSXdFRQAAAABw/wAAGPQAAAAAAAACAAAAOOQAAAIAAADQ8wAAAgAAAFN1bmRheQBNb25kYXkAVHVlc2RheQBXZWRuZXNkYXkAVGh1cnNkYXkARnJpZGF5AFNhdHVyZGF5AFN1bgBNb24AVHVlAFdlZABUaHUARnJpAFNhdAAAAABTAAAAdQAAAG4AAABkAAAAYQAAAHkAAAAAAAAATQAAAG8AAABuAAAAZAAAAGEAAAB5AAAAAAAAAFQAAAB1AAAAZQAAAHMAAABkAAAAYQAAAHkAAAAAAAAAVwAAAGUAAABkAAAAbgAAAGUAAABzAAAAZAAAAGEAAAB5AAAAAAAAAFQAAABoAAAAdQAAAHIAAABzAAAAZAAAAGEAAAB5AAAAAAAAAEYAAAByAAAAaQAAAGQAAABhAAAAeQAAAAAAAABTAAAAYQAAAHQAAAB1AAAAcgAAAGQAAABhAAAAeQAAAAAAAABTAAAAdQAAAG4AAAAAAAAATQAAAG8AAABuAAAAAAAAAFQAAAB1AAAAZQAAAAAAAABXAAAAZQAAAGQAAAAAAAAAVAAAAGgAAAB1AAAAAAAAAEYAAAByAAAAaQAAAAAAAABTAAAAYQAAAHQAAAAAAAAASmFudWFyeQBGZWJydWFyeQBNYXJjaABBcHJpbABNYXkASnVuZQBKdWx5AEF1Z3VzdABTZXB0ZW1iZXIAT2N0b2JlcgBOb3ZlbWJlcgBEZWNlbWJlcgBKYW4ARmViAE1hcgBBcHIASnVuAEp1bABBdWcAU2VwAE9jdABOb3YARGVjAAAASgAAAGEAAABuAAAAdQAAAGEAAAByAAAAeQAAAAAAAABGAAAAZQAAAGIAAAByAAAAdQAAAGEAAAByAAAAeQAAAAAAAABNAAAAYQAAAHIAAABjAAAAaAAAAAAAAABBAAAAcAAAAHIAAABpAAAAbAAAAAAAAABNAAAAYQAAAHkAAAAAAAAASgAAAHUAAABuAAAAZQAAAAAAAABKAAAAdQAAAGwAAAB5AAAAAAAAAEEAAAB1AAAAZwAAAHUAAABzAAAAdAAAAAAAAABTAAAAZQAAAHAAAAB0AAAAZQAAAG0AAABiAAAAZQAAAHIAAAAAAAAATwAAAGMAAAB0AAAAbwAAAGIAAABlAAAAcgAAAAAAAABOAAAAbwAAAHYAAABlAAAAbQAAAGIAAABlAAAAcgAAAAAAAABEAAAAZQAAAGMAAABlAAAAbQAAAGIAAABlAAAAcgAAAAAAAABKAAAAYQAAAG4AAAAAAAAARgAAAGUAAABiAAAAAAAAAE0AAABhAAAAcgAAAAAAAABBAAAAcAAAAHIAAAAAAAAASgAAAHUAAABuAAAAAAAAAEoAAAB1AAAAbAAAAAAAAABBAAAAdQAAAGcAAAAAAAAAUwAAAGUAAABwAAAAAAAAAE8AAABjAAAAdAAAAAAAAABOAAAAbwAAAHYAAAAAAAAARAAAAGUAAABjAAAAAAAAAEFNAFBNAAAAQQAAAE0AAAAAAAAAUAAAAE0AAAAAAAAAYWxsb2NhdG9yPFQ+OjphbGxvY2F0ZShzaXplX3QgbikgJ24nIGV4Y2VlZHMgbWF4aW11bSBzdXBwb3J0ZWQgc2l6ZQAAAAAAyOwAABUEAAAWBAAAFwQAABgEAAAZBAAAGgQAABsEAAAAAAAAtO0AACUEAAAmBAAAJwQAACgEAAApBAAAKgQAACsEAAAAAAAAZPkAAG4EAABvBAAAzQEAAE5TdDNfXzIxNF9fc2hhcmVkX2NvdW50RQAAAADs/gAASPkAAGJhc2ljX3N0cmluZwA6IAAAAAAAqPkAAHoEAAB7BAAAvQIAAABOU3QzX18yMTJzeXN0ZW1fZXJyb3JFABT/AACR+QAAYPwAAE5TdDNfXzIxNGVycm9yX2NhdGVnb3J5RQAAAADs/gAAtPkAAE5TdDNfXzIxMl9fZG9fbWVzc2FnZUUAABT/AADY+QAA0PkAAFVua25vd24gZXJyb3IgJWQAdmVjdG9yACgJAQBfX2N4YV9ndWFyZF9hY3F1aXJlIGRldGVjdGVkIHJlY3Vyc2l2ZSBpbml0aWFsaXphdGlvbgB0ZXJtaW5hdGluZyB3aXRoICVzIGV4Y2VwdGlvbiBvZiB0eXBlICVzOiAlcwB0ZXJtaW5hdGluZyB3aXRoICVzIGV4Y2VwdGlvbiBvZiB0eXBlICVzAHRlcm1pbmF0aW5nIHdpdGggJXMgZm9yZWlnbiBleGNlcHRpb24AdGVybWluYXRpbmcAdW5jYXVnaHQAdGVybWluYXRlX2hhbmRsZXIgdW5leHBlY3RlZGx5IHJldHVybmVkAHRlcm1pbmF0ZV9oYW5kbGVyIHVuZXhwZWN0ZWRseSB0aHJldyBhbiBleGNlcHRpb24AUHVyZSB2aXJ0dWFsIGZ1bmN0aW9uIGNhbGxlZCEAc3RkOjpleGNlcHRpb24AAAAAAAAAyPsAAHMEAAB/BAAAgAQAAHN0ZDo6YmFkX2FsbG9jAAAAAAAAsPsAAHMEAACBBAAAggQAAFN0OWV4Y2VwdGlvbgAAAADs/gAAoPsAAFN0OWJhZF9hbGxvYwAAAAAU/wAAuPsAALD7AAAAAAAADPwAAIoDAACDBAAAhAQAAAAAAABg/AAABQMAAIUEAAC9AgAAU3QxMWxvZ2ljX2Vycm9yABT/AAD8+wAAsPsAAAAAAABA/AAAigMAAIYEAACEBAAAU3QxMmxlbmd0aF9lcnJvcgAAAAAU/wAALPwAAAz8AABTdDEzcnVudGltZV9lcnJvcgAAABT/AABM/AAAsPsAAAAAAACw/AAAWgIAAIcEAACIBAAAc3RkOjpiYWRfY2FzdABTdDl0eXBlX2luZm8AAOz+AACO/AAAU3Q4YmFkX2Nhc3QAFP8AAKT8AACw+wAATjEwX19jeHhhYml2MTE2X19zaGltX3R5cGVfaW5mb0UAAAAAFP8AALz8AACc/AAATjEwX19jeHhhYml2MTE3X19jbGFzc190eXBlX2luZm9FAAAAFP8AAOz8AADg/AAATjEwX19jeHhhYml2MTE3X19wYmFzZV90eXBlX2luZm9FAAAAFP8AABz9AADg/AAATjEwX19jeHhhYml2MTE5X19wb2ludGVyX3R5cGVfaW5mb0UAFP8AAEz9AABA/QAATjEwX19jeHhhYml2MTIwX19mdW5jdGlvbl90eXBlX2luZm9FAAAAABT/AAB8/QAA4PwAAE4xMF9fY3h4YWJpdjEyOV9fcG9pbnRlcl90b19tZW1iZXJfdHlwZV9pbmZvRQAAABT/AACw/QAAQP0AAAAAAAAw/gAAiQQAAIoEAACLBAAAjAQAAI0EAABOMTBfX2N4eGFiaXYxMjNfX2Z1bmRhbWVudGFsX3R5cGVfaW5mb0UAFP8AAAj+AADg/AAAdgAAAPT9AAA8/gAARG4AAPT9AABI/gAAYgAAAPT9AABU/gAAYwAAAPT9AABg/gAAaAAAAPT9AABs/gAAYQAAAPT9AAB4/gAAcwAAAPT9AACE/gAAdAAAAPT9AACQ/gAAaQAAAPT9AACc/gAAagAAAPT9AACo/gAAbAAAAPT9AAC0/gAAbQAAAPT9AADA/gAAZgAAAPT9AADM/gAAZAAAAPT9AADY/gAAAAAAABD9AACJBAAAjgQAAIsEAACMBAAAjwQAAJAEAACRBAAAkgQAAAAAAABc/wAAiQQAAJMEAACLBAAAjAQAAI8EAACUBAAAlQQAAJYEAABOMTBfX2N4eGFiaXYxMjBfX3NpX2NsYXNzX3R5cGVfaW5mb0UAAAAAFP8AADT/AAAQ/QAAAAAAALj/AACJBAAAlwQAAIsEAACMBAAAjwQAAJgEAACZBAAAmgQAAE4xMF9fY3h4YWJpdjEyMV9fdm1pX2NsYXNzX3R5cGVfaW5mb0UAAAAU/wAAkP8AABD9AAAAAAAAcP0AAIkEAACbBAAAiwQAAIwEAACcBAAAdm9pZABib29sAGNoYXIAc2lnbmVkIGNoYXIAdW5zaWduZWQgY2hhcgBzaG9ydAB1bnNpZ25lZCBzaG9ydABpbnQAdW5zaWduZWQgaW50AGxvbmcAdW5zaWduZWQgbG9uZwBmbG9hdABkb3VibGUAc3RkOjpzdHJpbmcAc3RkOjpiYXNpY19zdHJpbmc8dW5zaWduZWQgY2hhcj4Ac3RkOjp3c3RyaW5nAHN0ZDo6dTE2c3RyaW5nAHN0ZDo6dTMyc3RyaW5nAGVtc2NyaXB0ZW46OnZhbABlbXNjcmlwdGVuOjptZW1vcnlfdmlldzxjaGFyPgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzxzaWduZWQgY2hhcj4AZW1zY3JpcHRlbjo6bWVtb3J5X3ZpZXc8dW5zaWduZWQgY2hhcj4AZW1zY3JpcHRlbjo6bWVtb3J5X3ZpZXc8c2hvcnQ+AGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PHVuc2lnbmVkIHNob3J0PgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzxpbnQ+AGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PHVuc2lnbmVkIGludD4AZW1zY3JpcHRlbjo6bWVtb3J5X3ZpZXc8bG9uZz4AZW1zY3JpcHRlbjo6bWVtb3J5X3ZpZXc8dW5zaWduZWQgbG9uZz4AZW1zY3JpcHRlbjo6bWVtb3J5X3ZpZXc8aW50OF90PgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzx1aW50OF90PgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzxpbnQxNl90PgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzx1aW50MTZfdD4AZW1zY3JpcHRlbjo6bWVtb3J5X3ZpZXc8aW50MzJfdD4AZW1zY3JpcHRlbjo6bWVtb3J5X3ZpZXc8dWludDMyX3Q+AGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PGZsb2F0PgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzxkb3VibGU+AE5TdDNfXzIxMmJhc2ljX3N0cmluZ0loTlNfMTFjaGFyX3RyYWl0c0loRUVOU185YWxsb2NhdG9ySWhFRUVFAAAAAHD/AAD2AgEAAAAAAAEAAABkCAAAAAAAAE5TdDNfXzIxMmJhc2ljX3N0cmluZ0l3TlNfMTFjaGFyX3RyYWl0c0l3RUVOU185YWxsb2NhdG9ySXdFRUVFAABw/wAAUAMBAAAAAAABAAAAZAgAAAAAAABOU3QzX18yMTJiYXNpY19zdHJpbmdJRHNOU18xMWNoYXJfdHJhaXRzSURzRUVOU185YWxsb2NhdG9ySURzRUVFRQAAAHD/AACoAwEAAAAAAAEAAABkCAAAAAAAAE5TdDNfXzIxMmJhc2ljX3N0cmluZ0lEaU5TXzExY2hhcl90cmFpdHNJRGlFRU5TXzlhbGxvY2F0b3JJRGlFRUVFAAAAcP8AAAQEAQAAAAAAAQAAAGQIAAAAAAAATjEwZW1zY3JpcHRlbjN2YWxFAADs/gAAYAQBAE4xMGVtc2NyaXB0ZW4xMW1lbW9yeV92aWV3SWNFRQAA7P4AAHwEAQBOMTBlbXNjcmlwdGVuMTFtZW1vcnlfdmlld0lhRUUAAOz+AACkBAEATjEwZW1zY3JpcHRlbjExbWVtb3J5X3ZpZXdJaEVFAADs/gAAzAQBAE4xMGVtc2NyaXB0ZW4xMW1lbW9yeV92aWV3SXNFRQAA7P4AAPQEAQBOMTBlbXNjcmlwdGVuMTFtZW1vcnlfdmlld0l0RUUAAOz+AAAcBQEATjEwZW1zY3JpcHRlbjExbWVtb3J5X3ZpZXdJaUVFAADs/gAARAUBAE4xMGVtc2NyaXB0ZW4xMW1lbW9yeV92aWV3SWpFRQAA7P4AAGwFAQBOMTBlbXNjcmlwdGVuMTFtZW1vcnlfdmlld0lsRUUAAOz+AACUBQEATjEwZW1zY3JpcHRlbjExbWVtb3J5X3ZpZXdJbUVFAADs/gAAvAUBAE4xMGVtc2NyaXB0ZW4xMW1lbW9yeV92aWV3SWZFRQAA7P4AAOQFAQBOMTBlbXNjcmlwdGVuMTFtZW1vcnlfdmlld0lkRUUAAOz+AAAMBgEAQcCMBAssBCMAAAIAAABEBgEAAEgAAABIAAAAAAAAAAEASAAAAEgAAAAAAAAAAQAY//8AQfmMBAsZAgAQAAAAAABIAAAASAAAAAAAAAABABj//wBBq40ECwEBAEG7jQQLAQEAQcqNBAsBQABB540ECxFIAAAASAAAAAAAAAABABj//wBBgY4ECw1IAAAASAAAAAAAAAABAEGvjgQLAyT//wBByY4ECwkCABAAAAAAAAEAQeGOBAsBAQBB8I4ECwFAAEGBjwQLAQEAQZGPBAsBAQBBoI8ECwFAAEHUkAQLAxBVAQBBkJEECwEFAEGckQQLApMCAEG0kQQLDo0CAACUAgAASFUBAAAEAEHMkQQLAQEAQduRBAsFCv////8AQaCSBAsJkAgBAFzOAAAFAEG0kgQLAo8CAEHMkgQLC40CAACMAgAAdGEBAEHkkgQLAQIAQfOSBAsF//////8AQbiTBAsGfAQAANb6";if(!Bt(xn,un)){var On=xn;xn=s.locateFile?s.locateFile(On,Q):Q+On}function Zo(){try{if(x)return new Uint8Array(x);var P=TS(xn);if(P)return P;if(I)return I(xn);throw"both async and sync fetching of the wasm failed"}catch(V){Mt(V)}}Be.push({ob:function(){Use()}});var oi={},pa=[];function io(P){if(!P||oi[P])return P;for(var V in oi)for(var Z=+V,re=oi[Z].ha,xe=re.length,Pe=0;Pe<xe;Pe++)if(re[Pe]===P)return Z;return P}var j=0;function ue(P){try{return Rf(P)}catch{}}function et(P){return M[Lse()>>2]=P}function gt(P,V){for(var Z=0,re=P.length-1;0<=re;re--){var xe=P[re];xe==="."?P.splice(re,1):xe===".."?(P.splice(re,1),Z++):Z&&(P.splice(re,1),Z--)}if(V)for(;Z;Z--)P.unshift("..");return P}function ht(P){var V=P.charAt(0)==="/",Z=P.substr(-1)==="/";return(P=gt(P.split("/").filter((function(re){return!!re})),!V).join("/"))||V||(P="."),P&&Z&&(P+="/"),(V?"/":"")+P}function wt(P){var V=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/.exec(P).slice(1);return P=V[0],V=V[1],P||V?(V&&(V=V.substr(0,V.length-1)),P+V):"."}function Ut(P){if(P==="/")return"/";var V=P.lastIndexOf("/");return V===-1?P:P.substr(V+1)}function Wt(){var P=Array.prototype.slice.call(arguments,0);return ht(P.join("/"))}function qt(P,V){return ht(P+"/"+V)}function Kt(){for(var P="",V=!1,Z=arguments.length-1;-1<=Z&&!V;Z--){if(typeof(V=0<=Z?arguments[Z]:se.cwd())!="string")throw new TypeError("Arguments to path.resolve must be strings");if(!V)return"";P=V+"/"+P,V=V.charAt(0)==="/"}return(V?"/":"")+(P=gt(P.split("/").filter((function(re){return!!re})),!V).join("/"))||"."}function Ot(P,V){function Z(nt){for(var pt=0;pt<nt.length&&nt[pt]==="";pt++);for(var Nt=nt.length-1;0<=Nt&&nt[Nt]==="";Nt--);return pt>Nt?[]:nt.slice(pt,Nt-pt+1)}P=Kt(P).substr(1),V=Kt(V).substr(1),P=Z(P.split("/")),V=Z(V.split("/"));for(var re=Math.min(P.length,V.length),xe=re,Pe=0;Pe<re;Pe++)if(P[Pe]!==V[Pe]){xe=Pe;break}for(re=[],Pe=xe;Pe<P.length;Pe++)re.push("..");return(re=re.concat(V.slice(xe))).join("/")}var Ar=[];function cr(P,V){Ar[P]={input:[],output:[],ea:V},se.$a(P,rr)}var rr={open:function(P){var V=Ar[P.node.rdev];if(!V)throw new se.b(43);P.tty=V,P.seekable=!1},close:function(P){P.tty.ea.flush(P.tty)},flush:function(P){P.tty.ea.flush(P.tty)},read:function(P,V,Z,re){if(!P.tty||!P.tty.ea.qb)throw new se.b(60);for(var xe=0,Pe=0;Pe<re;Pe++){try{var nt=P.tty.ea.qb(P.tty)}catch{throw new se.b(29)}if(nt===void 0&&xe===0)throw new se.b(6);if(nt==null)break;xe++,V[Z+Pe]=nt}return xe&&(P.node.timestamp=Date.now()),xe},write:function(P,V,Z,re){if(!P.tty||!P.tty.ea.Xa)throw new se.b(60);try{for(var xe=0;xe<re;xe++)P.tty.ea.Xa(P.tty,V[Z+xe])}catch{throw new se.b(29)}return re&&(P.node.timestamp=Date.now()),xe}},yr={qb:function(P){if(!P.input.length){var V=null;if(m){var Z=Buffer.S?Buffer.S(256):new Buffer(256),re=0;try{re=C.readSync(process.stdin.fd,Z,0,256,null)}catch(xe){if(xe.toString().indexOf("EOF")==-1)throw xe;re=0}V=0<re?Z.slice(0,re).toString("utf-8"):null}else typeof window<"u"&&typeof window.prompt=="function"?(V=window.prompt("Input: "))!==null&&(V+=`
|
|
`):typeof readline=="function"&&(V=readline())!==null&&(V+=`
|
|
`);if(!V)return null;P.input=jP(V,!0)}return P.input.shift()},Xa:function(P,V){V===null||V===10?(E(v(P.output,0)),P.output=[]):V!=0&&P.output.push(V)},flush:function(P){P.output&&0<P.output.length&&(E(v(P.output,0)),P.output=[])}},br={Xa:function(P,V){V===null||V===10?(b(v(P.output,0)),P.output=[]):V!=0&&P.output.push(V)},flush:function(P){P.output&&0<P.output.length&&(b(v(P.output,0)),P.output=[])}},nr={M:null,s:function(){return nr.createNode(null,"/",16895,0)},createNode:function(P,V,Z,re){if(se.$b(Z)||se.isFIFO(Z))throw new se.b(63);return nr.M||(nr.M={dir:{node:{J:nr.g.J,A:nr.g.A,lookup:nr.g.lookup,R:nr.g.R,rename:nr.g.rename,unlink:nr.g.unlink,rmdir:nr.g.rmdir,readdir:nr.g.readdir,symlink:nr.g.symlink},stream:{K:nr.h.K}},file:{node:{J:nr.g.J,A:nr.g.A},stream:{K:nr.h.K,read:nr.h.read,write:nr.h.write,ia:nr.h.ia,na:nr.h.na,da:nr.h.da}},link:{node:{J:nr.g.J,A:nr.g.A,readlink:nr.g.readlink},stream:{}},gb:{node:{J:nr.g.J,A:nr.g.A},stream:se.Kb}}),Z=se.createNode(P,V,Z,re),se.v(Z.mode)?(Z.g=nr.M.dir.node,Z.h=nr.M.dir.stream,Z.f={}):se.isFile(Z.mode)?(Z.g=nr.M.file.node,Z.h=nr.M.file.stream,Z.l=0,Z.f=null):se.ma(Z.mode)?(Z.g=nr.M.link.node,Z.h=nr.M.link.stream):se.ya(Z.mode)&&(Z.g=nr.M.gb.node,Z.h=nr.M.gb.stream),Z.timestamp=Date.now(),P&&(P.f[V]=Z),Z},Gc:function(P){if(P.f&&P.f.subarray){for(var V=[],Z=0;Z<P.l;++Z)V.push(P.f[Z]);return V}return P.f},Hc:function(P){return P.f?P.f.subarray?P.f.subarray(0,P.l):new Uint8Array(P.f):new Uint8Array(0)},lb:function(P,V){var Z=P.f?P.f.length:0;Z>=V||(V=Math.max(V,Z*(1048576>Z?2:1.125)>>>0),Z!=0&&(V=Math.max(V,256)),Z=P.f,P.f=new Uint8Array(V),0<P.l&&P.f.set(Z.subarray(0,P.l),0))},oc:function(P,V){if(P.l!=V)if(V==0)P.f=null,P.l=0;else{if(!P.f||P.f.subarray){var Z=P.f;P.f=new Uint8Array(V),Z&&P.f.set(Z.subarray(0,Math.min(V,P.l)))}else if(P.f||(P.f=[]),P.f.length>V)P.f.length=V;else for(;P.f.length<V;)P.f.push(0);P.l=V}},g:{J:function(P){var V={};return V.dev=se.ya(P.mode)?P.id:1,V.ino=P.id,V.mode=P.mode,V.nlink=1,V.uid=0,V.gid=0,V.rdev=P.rdev,se.v(P.mode)?V.size=4096:se.isFile(P.mode)?V.size=P.l:se.ma(P.mode)?V.size=P.link.length:V.size=0,V.atime=new Date(P.timestamp),V.mtime=new Date(P.timestamp),V.ctime=new Date(P.timestamp),V.Hb=4096,V.blocks=Math.ceil(V.size/V.Hb),V},A:function(P,V){V.mode!==void 0&&(P.mode=V.mode),V.timestamp!==void 0&&(P.timestamp=V.timestamp),V.size!==void 0&&nr.oc(P,V.size)},lookup:function(){throw se.Na[44]},R:function(P,V,Z,re){return nr.createNode(P,V,Z,re)},rename:function(P,V,Z){if(se.v(P.mode)){try{var re=se.P(V,Z)}catch{}if(re)for(var xe in re.f)throw new se.b(55)}delete P.parent.f[P.name],P.name=Z,V.f[Z]=P,P.parent=V},unlink:function(P,V){delete P.f[V]},rmdir:function(P,V){var Z,re=se.P(P,V);for(Z in re.f)throw new se.b(55);delete P.f[V]},readdir:function(P){var V,Z=[".",".."];for(V in P.f)P.f.hasOwnProperty(V)&&Z.push(V);return Z},symlink:function(P,V,Z){return(P=nr.createNode(P,V,41471,0)).link=Z,P},readlink:function(P){if(!se.ma(P.mode))throw new se.b(28);return P.link}},h:{read:function(P,V,Z,re,xe){var Pe=P.node.f;if(xe>=P.node.l)return 0;if(8<(P=Math.min(P.node.l-xe,re))&&Pe.subarray)V.set(Pe.subarray(xe,xe+P),Z);else for(re=0;re<P;re++)V[Z+re]=Pe[xe+re];return P},write:function(P,V,Z,re,xe,Pe){if(V.buffer===J.buffer&&(Pe=!1),!re)return 0;if((P=P.node).timestamp=Date.now(),V.subarray&&(!P.f||P.f.subarray)){if(Pe)return P.f=V.subarray(Z,Z+re),P.l=re;if(P.l===0&&xe===0)return P.f=V.slice(Z,Z+re),P.l=re;if(xe+re<=P.l)return P.f.set(V.subarray(Z,Z+re),xe),re}if(nr.lb(P,xe+re),P.f.subarray&&V.subarray)P.f.set(V.subarray(Z,Z+re),xe);else for(Pe=0;Pe<re;Pe++)P.f[xe+Pe]=V[Z+Pe];return P.l=Math.max(P.l,xe+re),re},K:function(P,V,Z){if(Z===1?V+=P.position:Z===2&&se.isFile(P.node.mode)&&(V+=P.node.l),0>V)throw new se.b(28);return V},ia:function(P,V,Z){nr.lb(P.node,V+Z),P.node.l=Math.max(P.node.l,V+Z)},na:function(P,V,Z,re,xe,Pe,nt){if(!se.isFile(P.node.mode))throw new se.b(43);if(P=P.node.f,2&nt||P.buffer!==V.buffer){if((0<xe||xe+re<P.length)&&(P=P.subarray?P.subarray(xe,xe+re):Array.prototype.slice.call(P,xe,xe+re)),xe=!0,nt=V.buffer==J.buffer,!(re=Kw(re)))throw new se.b(48);(nt?J:V).set(P,re)}else xe=!1,re=P.byteOffset;return{j:re,Gb:xe}},da:function(P,V,Z,re,xe){if(!se.isFile(P.node.mode))throw new se.b(43);return 2&xe||nr.h.write(P,V,0,re,Z,!1),0}}},se={root:null,pa:[],jb:{},streams:[],ec:1,L:null,ib:"/",Qa:!1,ub:!0,u:{},zb:{wb:{Cb:1,Db:2}},b:null,Na:{},Ub:null,Fa:0,Ic:function(P){if(!(P instanceof se.b)){e:{var V=Error();if(!V.stack){try{throw Error()}catch(Z){V=Z}if(!V.stack){V="(no stack trace available)";break e}}V=V.stack.toString()}throw s.extraStackTrace&&(V+=`
|
|
`+s.extraStackTrace()),V=(function(Z){return Z.replace(/\b_Z[\w\d_]+/g,(function(re){return re==re?re:re+" ["+re+"]"}))})(V),P+" : "+V}return et(P.B)},m:function(P,V){if(V=V||{},!(P=Kt(se.cwd(),P)))return{path:"",node:null};var Z,re={Ma:!0,Za:0};for(Z in re)V[Z]===void 0&&(V[Z]=re[Z]);if(8<V.Za)throw new se.b(32);P=gt(P.split("/").filter((function(nt){return!!nt})),!1);var xe=se.root;for(re="/",Z=0;Z<P.length;Z++){var Pe=Z===P.length-1;if(Pe&&V.parent)break;if(xe=se.P(xe,P[Z]),re=qt(re,P[Z]),se.W(xe)&&(!Pe||Pe&&V.Ma)&&(xe=xe.oa.root),!Pe||V.H){for(Pe=0;se.ma(xe.mode);)if(xe=se.readlink(re),re=Kt(wt(re),xe),xe=se.m(re,{Za:V.Za}).node,40<Pe++)throw new se.b(32)}}return{path:re,node:xe}},I:function(P){for(var V;;){if(se.Aa(P))return P=P.s.vb,V?P[P.length-1]!=="/"?P+"/"+V:P+V:P;V=V?P.name+"/"+V:P.name,P=P.parent}},Pa:function(P,V){for(var Z=0,re=0;re<V.length;re++)Z=(Z<<5)-Z+V.charCodeAt(re)|0;return(P+Z>>>0)%se.L.length},sb:function(P){var V=se.Pa(P.parent.id,P.name);P.Y=se.L[V],se.L[V]=P},tb:function(P){var V=se.Pa(P.parent.id,P.name);if(se.L[V]===P)se.L[V]=P.Y;else for(V=se.L[V];V;){if(V.Y===P){V.Y=P.Y;break}V=V.Y}},P:function(P,V){var Z=se.bc(P);if(Z)throw new se.b(Z,P);for(Z=se.L[se.Pa(P.id,V)];Z;Z=Z.Y){var re=Z.name;if(Z.parent.id===P.id&&re===V)return Z}return se.lookup(P,V)},createNode:function(P,V,Z,re){return P=new se.Ab(P,V,Z,re),se.sb(P),P},La:function(P){se.tb(P)},Aa:function(P){return P===P.parent},W:function(P){return!!P.oa},isFile:function(P){return(61440&P)==32768},v:function(P){return(61440&P)==16384},ma:function(P){return(61440&P)==40960},ya:function(P){return(61440&P)==8192},$b:function(P){return(61440&P)==24576},isFIFO:function(P){return(61440&P)==4096},isSocket:function(P){return(49152&P)==49152},Vb:{r:0,rs:1052672,"r+":2,w:577,wx:705,xw:705,"w+":578,"wx+":706,"xw+":706,a:1089,ax:1217,xa:1217,"a+":1090,"ax+":1218,"xa+":1218},dc:function(P){var V=se.Vb[P];if(V===void 0)throw Error("Unknown file open mode: "+P);return V},mb:function(P){var V=["r","w","rw"][3&P];return 512&P&&(V+="w"),V},Z:function(P,V){return se.ub||(V.indexOf("r")===-1||292&P.mode)&&(V.indexOf("w")===-1||146&P.mode)&&(V.indexOf("x")===-1||73&P.mode)?0:2},bc:function(P){var V=se.Z(P,"x");return V||(P.g.lookup?0:2)},Wa:function(P,V){try{return se.P(P,V),20}catch{}return se.Z(P,"wx")},Ca:function(P,V,Z){try{var re=se.P(P,V)}catch(xe){return xe.B}if(P=se.Z(P,"wx"))return P;if(Z){if(!se.v(re.mode))return 54;if(se.Aa(re)||se.I(re)===se.cwd())return 10}else if(se.v(re.mode))return 31;return 0},cc:function(P,V){return P?se.ma(P.mode)?32:se.v(P.mode)&&(se.mb(V)!=="r"||512&V)?31:se.Z(P,se.mb(V)):44},Bb:4096,fc:function(P,V){for(V=V||se.Bb,P=P||0;P<=V;P++)if(!se.streams[P])return P;throw new se.b(33)},ba:function(P){return se.streams[P]},Sb:function(P,V,Z){se.Ja||(se.Ja=function(){},se.Ja.prototype={object:{get:function(){return this.node},set:function(Pe){this.node=Pe}}});var re,xe=new se.Ja;for(re in P)xe[re]=P[re];return P=xe,V=se.fc(V,Z),P.fd=V,se.streams[V]=P},Lb:function(P){se.streams[P]=null},Kb:{open:function(P){P.h=se.Xb(P.node.rdev).h,P.h.open&&P.h.open(P)},K:function(){throw new se.b(70)}},Va:function(P){return P>>8},Oc:function(P){return 255&P},X:function(P,V){return P<<8|V},$a:function(P,V){se.jb[P]={h:V}},Xb:function(P){return se.jb[P]},pb:function(P){var V=[];for(P=[P];P.length;){var Z=P.pop();V.push(Z),P.push.apply(P,Z.pa)}return V},yb:function(P,V){function Z(nt){return se.Fa--,V(nt)}function re(nt){if(nt){if(!re.S)return re.S=!0,Z(nt)}else++Pe>=xe.length&&Z(null)}typeof P=="function"&&(V=P,P=!1),se.Fa++,1<se.Fa&&b("warning: "+se.Fa+" FS.syncfs operations in flight at once, probably just doing extra work");var xe=se.pb(se.root.s),Pe=0;xe.forEach((function(nt){if(!nt.type.yb)return re(null);nt.type.yb(nt,P,re)}))},s:function(P,V,Z){var re=Z==="/",xe=!Z;if(re&&se.root)throw new se.b(10);if(!re&&!xe){var Pe=se.m(Z,{Ma:!1});if(Z=Pe.path,Pe=Pe.node,se.W(Pe))throw new se.b(10);if(!se.v(Pe.mode))throw new se.b(54)}return V={type:P,Rc:V,vb:Z,pa:[]},(P=P.s(V)).s=V,V.root=P,re?se.root=P:Pe&&(Pe.oa=V,Pe.s&&Pe.s.pa.push(V)),P},Wc:function(P){if(P=se.m(P,{Ma:!1}),!se.W(P.node))throw new se.b(28);var V=(P=P.node).oa,Z=se.pb(V);Object.keys(se.L).forEach((function(re){for(re=se.L[re];re;){var xe=re.Y;Z.indexOf(re.s)!==-1&&se.La(re),re=xe}})),P.oa=null,P.s.pa.splice(P.s.pa.indexOf(V),1)},lookup:function(P,V){return P.g.lookup(P,V)},R:function(P,V,Z){var re=se.m(P,{parent:!0}).node;if(!(P=Ut(P))||P==="."||P==="..")throw new se.b(28);var xe=se.Wa(re,P);if(xe)throw new se.b(xe);if(!re.g.R)throw new se.b(63);return re.g.R(re,P,V,Z)},create:function(P,V){return se.R(P,4095&(V!==void 0?V:438)|32768,0)},mkdir:function(P,V){return se.R(P,1023&(V!==void 0?V:511)|16384,0)},Pc:function(P,V){P=P.split("/");for(var Z="",re=0;re<P.length;++re)if(P[re]){Z+="/"+P[re];try{se.mkdir(Z,V)}catch(xe){if(xe.B!=20)throw xe}}},Da:function(P,V,Z){return Z===void 0&&(Z=V,V=438),se.R(P,8192|V,Z)},symlink:function(P,V){if(!Kt(P))throw new se.b(44);var Z=se.m(V,{parent:!0}).node;if(!Z)throw new se.b(44);V=Ut(V);var re=se.Wa(Z,V);if(re)throw new se.b(re);if(!Z.g.symlink)throw new se.b(63);return Z.g.symlink(Z,V,P)},rename:function(P,V){var Z=wt(P),re=wt(V),xe=Ut(P),Pe=Ut(V);try{var nt=se.m(P,{parent:!0}),pt=nt.node,Nt=(nt=se.m(V,{parent:!0})).node}catch{throw new se.b(10)}if(!pt||!Nt)throw new se.b(44);if(pt.s!==Nt.s)throw new se.b(75);if(nt=se.P(pt,xe),(re=Ot(P,re)).charAt(0)!==".")throw new se.b(28);if((re=Ot(V,Z)).charAt(0)!==".")throw new se.b(55);try{var Dt=se.P(Nt,Pe)}catch{}if(nt!==Dt){if(Z=se.v(nt.mode),xe=se.Ca(pt,xe,Z))throw new se.b(xe);if(xe=Dt?se.Ca(Nt,Pe,Z):se.Wa(Nt,Pe))throw new se.b(xe);if(!pt.g.rename)throw new se.b(63);if(se.W(nt)||Dt&&se.W(Dt))throw new se.b(10);if(Nt!==pt&&(xe=se.Z(pt,"w")))throw new se.b(xe);try{se.u.willMovePath&&se.u.willMovePath(P,V)}catch(ur){b("FS.trackingDelegate['willMovePath']('"+P+"', '"+V+"') threw an exception: "+ur.message)}se.tb(nt);try{pt.g.rename(nt,Nt,Pe)}catch(ur){throw ur}finally{se.sb(nt)}try{se.u.onMovePath&&se.u.onMovePath(P,V)}catch(ur){b("FS.trackingDelegate['onMovePath']('"+P+"', '"+V+"') threw an exception: "+ur.message)}}},rmdir:function(P){var V=se.m(P,{parent:!0}).node,Z=Ut(P),re=se.P(V,Z),xe=se.Ca(V,Z,!0);if(xe)throw new se.b(xe);if(!V.g.rmdir)throw new se.b(63);if(se.W(re))throw new se.b(10);try{se.u.willDeletePath&&se.u.willDeletePath(P)}catch(Pe){b("FS.trackingDelegate['willDeletePath']('"+P+"') threw an exception: "+Pe.message)}V.g.rmdir(V,Z),se.La(re);try{se.u.onDeletePath&&se.u.onDeletePath(P)}catch(Pe){b("FS.trackingDelegate['onDeletePath']('"+P+"') threw an exception: "+Pe.message)}},readdir:function(P){if(!(P=se.m(P,{H:!0}).node).g.readdir)throw new se.b(54);return P.g.readdir(P)},unlink:function(P){var V=se.m(P,{parent:!0}).node,Z=Ut(P),re=se.P(V,Z),xe=se.Ca(V,Z,!1);if(xe)throw new se.b(xe);if(!V.g.unlink)throw new se.b(63);if(se.W(re))throw new se.b(10);try{se.u.willDeletePath&&se.u.willDeletePath(P)}catch(Pe){b("FS.trackingDelegate['willDeletePath']('"+P+"') threw an exception: "+Pe.message)}V.g.unlink(V,Z),se.La(re);try{se.u.onDeletePath&&se.u.onDeletePath(P)}catch(Pe){b("FS.trackingDelegate['onDeletePath']('"+P+"') threw an exception: "+Pe.message)}},readlink:function(P){if(!(P=se.m(P).node))throw new se.b(44);if(!P.g.readlink)throw new se.b(28);return Kt(se.I(P.parent),P.g.readlink(P))},stat:function(P,V){if(!(P=se.m(P,{H:!V}).node))throw new se.b(44);if(!P.g.J)throw new se.b(63);return P.g.J(P)},lstat:function(P){return se.stat(P,!0)},chmod:function(P,V,Z){var re;if(!(re=typeof P=="string"?se.m(P,{H:!Z}).node:P).g.A)throw new se.b(63);re.g.A(re,{mode:4095&V|-4096&re.mode,timestamp:Date.now()})},lchmod:function(P,V){se.chmod(P,V,!0)},fchmod:function(P,V){if(!(P=se.ba(P)))throw new se.b(8);se.chmod(P.node,V)},chown:function(P,V,Z,re){var xe;if(!(xe=typeof P=="string"?se.m(P,{H:!re}).node:P).g.A)throw new se.b(63);xe.g.A(xe,{timestamp:Date.now()})},lchown:function(P,V,Z){se.chown(P,V,Z,!0)},fchown:function(P,V,Z){if(!(P=se.ba(P)))throw new se.b(8);se.chown(P.node,V,Z)},truncate:function(P,V){if(0>V)throw new se.b(28);var Z;if(!(Z=typeof P=="string"?se.m(P,{H:!0}).node:P).g.A)throw new se.b(63);if(se.v(Z.mode))throw new se.b(31);if(!se.isFile(Z.mode))throw new se.b(28);if(P=se.Z(Z,"w"))throw new se.b(P);Z.g.A(Z,{size:V,timestamp:Date.now()})},Fc:function(P,V){if(!(P=se.ba(P)))throw new se.b(8);if((2097155&P.flags)==0)throw new se.b(28);se.truncate(P.node,V)},Xc:function(P,V,Z){(P=se.m(P,{H:!0}).node).g.A(P,{timestamp:Math.max(V,Z)})},open:function(P,V,Z,re,xe){if(P==="")throw new se.b(44);if(Z=64&(V=typeof V=="string"?se.dc(V):V)?4095&(Z===void 0?438:Z)|32768:0,typeof P=="object")var Pe=P;else{P=ht(P);try{Pe=se.m(P,{H:!(131072&V)}).node}catch{}}var nt=!1;if(64&V)if(Pe){if(128&V)throw new se.b(20)}else Pe=se.R(P,Z,0),nt=!0;if(!Pe)throw new se.b(44);if(se.ya(Pe.mode)&&(V&=-513),65536&V&&!se.v(Pe.mode))throw new se.b(54);if(!nt&&(Z=se.cc(Pe,V)))throw new se.b(Z);512&V&&se.truncate(Pe,0),V&=-131713,(re=se.Sb({node:Pe,path:se.I(Pe),flags:V,seekable:!0,position:0,h:Pe.h,wc:[],error:!1},re,xe)).h.open&&re.h.open(re),!s.logReadFiles||1&V||(se.Ya||(se.Ya={}),P in se.Ya||(se.Ya[P]=1,b("FS.trackingDelegate error on read file: "+P)));try{se.u.onOpenFile&&(xe=0,(2097155&V)!=1&&(xe|=se.zb.wb.Cb),(2097155&V)!=0&&(xe|=se.zb.wb.Db),se.u.onOpenFile(P,xe))}catch(pt){b("FS.trackingDelegate['onOpenFile']('"+P+"', flags) threw an exception: "+pt.message)}return re},close:function(P){if(se.la(P))throw new se.b(8);P.Oa&&(P.Oa=null);try{P.h.close&&P.h.close(P)}catch(V){throw V}finally{se.Lb(P.fd)}P.fd=null},la:function(P){return P.fd===null},K:function(P,V,Z){if(se.la(P))throw new se.b(8);if(!P.seekable||!P.h.K)throw new se.b(70);if(Z!=0&&Z!=1&&Z!=2)throw new se.b(28);return P.position=P.h.K(P,V,Z),P.wc=[],P.position},read:function(P,V,Z,re,xe){if(0>re||0>xe)throw new se.b(28);if(se.la(P))throw new se.b(8);if((2097155&P.flags)==1)throw new se.b(8);if(se.v(P.node.mode))throw new se.b(31);if(!P.h.read)throw new se.b(28);var Pe=xe!==void 0;if(Pe){if(!P.seekable)throw new se.b(70)}else xe=P.position;return V=P.h.read(P,V,Z,re,xe),Pe||(P.position+=V),V},write:function(P,V,Z,re,xe,Pe){if(0>re||0>xe)throw new se.b(28);if(se.la(P))throw new se.b(8);if((2097155&P.flags)==0)throw new se.b(8);if(se.v(P.node.mode))throw new se.b(31);if(!P.h.write)throw new se.b(28);P.seekable&&1024&P.flags&&se.K(P,0,2);var nt=xe!==void 0;if(nt){if(!P.seekable)throw new se.b(70)}else xe=P.position;V=P.h.write(P,V,Z,re,xe,Pe),nt||(P.position+=V);try{P.path&&se.u.onWriteToFile&&se.u.onWriteToFile(P.path)}catch(pt){b("FS.trackingDelegate['onWriteToFile']('"+P.path+"') threw an exception: "+pt.message)}return V},ia:function(P,V,Z){if(se.la(P))throw new se.b(8);if(0>V||0>=Z)throw new se.b(28);if((2097155&P.flags)==0)throw new se.b(8);if(!se.isFile(P.node.mode)&&!se.v(P.node.mode))throw new se.b(43);if(!P.h.ia)throw new se.b(138);P.h.ia(P,V,Z)},na:function(P,V,Z,re,xe,Pe,nt){if((2&Pe)!=0&&(2&nt)==0&&(2097155&P.flags)!=2)throw new se.b(2);if((2097155&P.flags)==1)throw new se.b(2);if(!P.h.na)throw new se.b(43);return P.h.na(P,V,Z,re,xe,Pe,nt)},da:function(P,V,Z,re,xe){return P&&P.h.da?P.h.da(P,V,Z,re,xe):0},Qc:function(){return 0},Ra:function(P,V,Z){if(!P.h.Ra)throw new se.b(59);return P.h.Ra(P,V,Z)},readFile:function(P,V){if((V=V||{}).flags=V.flags||"r",V.encoding=V.encoding||"binary",V.encoding!=="utf8"&&V.encoding!=="binary")throw Error('Invalid encoding type "'+V.encoding+'"');var Z,re=se.open(P,V.flags);P=se.stat(P).size;var xe=new Uint8Array(P);return se.read(re,xe,0,P,0),V.encoding==="utf8"?Z=v(xe,0):V.encoding==="binary"&&(Z=xe),se.close(re),Z},writeFile:function(P,V,Z){if((Z=Z||{}).flags=Z.flags||"w",P=se.open(P,Z.flags,Z.mode),typeof V=="string"){var re=new Uint8Array(N(V)+1);V=G(V,re,0,re.length),se.write(P,re,0,V,void 0,Z.Jb)}else{if(!ArrayBuffer.isView(V))throw Error("Unsupported data type");se.write(P,V,0,V.byteLength,void 0,Z.Jb)}se.close(P)},cwd:function(){return se.ib},chdir:function(P){if((P=se.m(P,{H:!0})).node===null)throw new se.b(44);if(!se.v(P.node.mode))throw new se.b(54);var V=se.Z(P.node,"x");if(V)throw new se.b(V);se.ib=P.path},Ob:function(){se.mkdir("/tmp"),se.mkdir("/home"),se.mkdir("/home/web_user")},Nb:function(){if(se.mkdir("/dev"),se.$a(se.X(1,3),{read:function(){return 0},write:function(re,xe,Pe,nt){return nt}}),se.Da("/dev/null",se.X(1,3)),cr(se.X(5,0),yr),cr(se.X(6,0),br),se.Da("/dev/tty",se.X(5,0)),se.Da("/dev/tty1",se.X(6,0)),typeof crypto=="object"&&typeof crypto.getRandomValues=="function")var P=new Uint8Array(1),V=function(){return crypto.getRandomValues(P),P[0]};else if(m)try{var Z=r(4);V=function(){return Z.randomBytes(1)[0]}}catch{}V||(V=function(){Mt("random_device")}),se.T("/dev","random",V),se.T("/dev","urandom",V),se.mkdir("/dev/shm"),se.mkdir("/dev/shm/tmp")},Qb:function(){se.mkdir("/proc"),se.mkdir("/proc/self"),se.mkdir("/proc/self/fd"),se.s({s:function(){var P=se.createNode("/proc/self","fd",16895,73);return P.g={lookup:function(V,Z){var re=se.ba(+Z);if(!re)throw new se.b(8);return(V={parent:null,s:{vb:"fake"},g:{readlink:function(){return re.path}}}).parent=V}},P}},{},"/proc/self/fd")},Rb:function(){s.stdin?se.T("/dev","stdin",s.stdin):se.symlink("/dev/tty","/dev/stdin"),s.stdout?se.T("/dev","stdout",null,s.stdout):se.symlink("/dev/tty","/dev/stdout"),s.stderr?se.T("/dev","stderr",null,s.stderr):se.symlink("/dev/tty1","/dev/stderr"),se.open("/dev/stdin","r"),se.open("/dev/stdout","w"),se.open("/dev/stderr","w")},kb:function(){se.b||(se.b=function(P,V){this.node=V,this.pc=function(Z){this.B=Z},this.pc(P),this.message="FS error"},se.b.prototype=Error(),se.b.prototype.constructor=se.b,[44].forEach((function(P){se.Na[P]=new se.b(P),se.Na[P].stack="<generic error, no stack>"})))},rc:function(){se.kb(),se.L=Array(4096),se.s(nr,{},"/"),se.Ob(),se.Nb(),se.Qb(),se.Ub={MEMFS:nr}},ka:function(P,V,Z){se.ka.Qa=!0,se.kb(),s.stdin=P||s.stdin,s.stdout=V||s.stdout,s.stderr=Z||s.stderr,se.Rb()},quit:function(){se.ka.Qa=!1;var P=s._fflush;for(P&&P(0),P=0;P<se.streams.length;P++){var V=se.streams[P];V&&se.close(V)}},wa:function(P,V){var Z=0;return P&&(Z|=365),V&&(Z|=146),Z},Kc:function(P,V){return P=Wt.apply(null,P),V&&P[0]=="/"&&(P=P.substr(1)),P},xc:function(P,V){return Kt(V,P)},Uc:function(P){return ht(P)},Ec:function(P,V){return(P=se.Ka(P,V)).exists?P.object:(et(P.error),null)},Ka:function(P,V){try{var Z=se.m(P,{H:!V});P=Z.path}catch{}var re={Aa:!1,exists:!1,error:0,name:null,path:null,object:null,hc:!1,jc:null,ic:null};try{Z=se.m(P,{parent:!0}),re.hc=!0,re.jc=Z.path,re.ic=Z.node,re.name=Ut(P),Z=se.m(P,{H:!V}),re.exists=!0,re.path=Z.path,re.object=Z.node,re.name=Z.node.name,re.Aa=Z.path==="/"}catch(xe){re.error=xe.B}return re},zc:function(P,V,Z,re){return P=qt(typeof P=="string"?P:se.I(P),V),se.mkdir(P,se.wa(Z,re))},Cc:function(P,V){for(P=typeof P=="string"?P:se.I(P),V=V.split("/").reverse();V.length;){var Z=V.pop();if(Z){var re=qt(P,Z);try{se.mkdir(re)}catch{}P=re}}return re},Pb:function(P,V,Z,re,xe){return P=qt(typeof P=="string"?P:se.I(P),V),se.create(P,se.wa(re,xe))},hb:function(P,V,Z,re,xe,Pe){if(P=V?qt(typeof P=="string"?P:se.I(P),V):P,re=se.wa(re,xe),xe=se.create(P,re),Z){if(typeof Z=="string"){P=Array(Z.length),V=0;for(var nt=Z.length;V<nt;++V)P[V]=Z.charCodeAt(V);Z=P}se.chmod(xe,146|re),P=se.open(xe,"w"),se.write(P,Z,0,Z.length,0,Pe),se.close(P),se.chmod(xe,re)}return xe},T:function(P,V,Z,re){P=qt(typeof P=="string"?P:se.I(P),V),V=se.wa(!!Z,!!re),se.T.Va||(se.T.Va=64);var xe=se.X(se.T.Va++,0);return se.$a(xe,{open:function(Pe){Pe.seekable=!1},close:function(){re&&re.buffer&&re.buffer.length&&re(10)},read:function(Pe,nt,pt,Nt){for(var Dt=0,ur=0;ur<Nt;ur++){try{var Wr=Z()}catch{throw new se.b(29)}if(Wr===void 0&&Dt===0)throw new se.b(6);if(Wr==null)break;Dt++,nt[pt+ur]=Wr}return Dt&&(Pe.node.timestamp=Date.now()),Dt},write:function(Pe,nt,pt,Nt){for(var Dt=0;Dt<Nt;Dt++)try{re(nt[pt+Dt])}catch{throw new se.b(29)}return Nt&&(Pe.node.timestamp=Date.now()),Dt}}),se.Da(P,V,xe)},Bc:function(P,V,Z){return P=qt(typeof P=="string"?P:se.I(P),V),se.symlink(Z,P)},nb:function(P){if(P.Sa||P.ac||P.link||P.f)return!0;var V=!0;if(typeof XMLHttpRequest<"u")throw Error("Lazy loading should have been performed (contents set) in createLazyFile, but it was not. Lazy loading only works in web workers. Use --embed-file or --preload-file in emcc on the main thread.");if(!f)throw Error("Cannot load without read() or XMLHttpRequest.");try{P.f=jP(f(P.url),!0),P.l=P.f.length}catch{V=!1}return V||et(29),V},Ac:function(P,V,Z,re,xe){function Pe(){this.Ua=!1,this.S=[]}if(Pe.prototype.get=function(Dt){if(!(Dt>this.length-1||0>Dt)){var ur=Dt%this.chunkSize;return this.rb(Dt/this.chunkSize|0)[ur]}},Pe.prototype.Ib=function(Dt){this.rb=Dt},Pe.prototype.eb=function(){var Dt=new XMLHttpRequest;if(Dt.open("HEAD",Z,!1),Dt.send(null),!(200<=Dt.status&&300>Dt.status||Dt.status===304))throw Error("Couldn't load "+Z+". Status: "+Dt.status);var ur,Wr=Number(Dt.getResponseHeader("Content-length")),dn=(ur=Dt.getResponseHeader("Accept-Ranges"))&&ur==="bytes";Dt=(ur=Dt.getResponseHeader("Content-Encoding"))&&ur==="gzip";var Ao=1048576;dn||(Ao=Wr);var Xr=this;Xr.Ib((function(Ro){var so=Ro*Ao,vt=(Ro+1)*Ao-1;if(vt=Math.min(vt,Wr-1),Xr.S[Ro]===void 0){var $n=Xr.S;if(so>vt)throw Error("invalid range ("+so+", "+vt+") or no bytes requested!");if(vt>Wr-1)throw Error("only "+Wr+" bytes available! programmer error!");var Uo=new XMLHttpRequest;if(Uo.open("GET",Z,!1),Wr!==Ao&&Uo.setRequestHeader("Range","bytes="+so+"-"+vt),typeof Uint8Array<"u"&&(Uo.responseType="arraybuffer"),Uo.overrideMimeType&&Uo.overrideMimeType("text/plain; charset=x-user-defined"),Uo.send(null),!(200<=Uo.status&&300>Uo.status||Uo.status===304))throw Error("Couldn't load "+Z+". Status: "+Uo.status);so=Uo.response!==void 0?new Uint8Array(Uo.response||[]):jP(Uo.responseText||"",!0),$n[Ro]=so}if(Xr.S[Ro]===void 0)throw Error("doXHR failed!");return Xr.S[Ro]})),!Dt&&Wr||(Ao=Wr=1,Ao=Wr=this.rb(0).length,E("LazyFiles on gzip forces download of the whole file when length is accessed")),this.Fb=Wr,this.Eb=Ao,this.Ua=!0},typeof XMLHttpRequest<"u"){if(!g)throw"Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc";var nt=new Pe;Object.defineProperties(nt,{length:{get:function(){return this.Ua||this.eb(),this.Fb}},chunkSize:{get:function(){return this.Ua||this.eb(),this.Eb}}}),nt={Sa:!1,f:nt}}else nt={Sa:!1,url:Z};var pt=se.Pb(P,V,nt,re,xe);nt.f?pt.f=nt.f:nt.url&&(pt.f=null,pt.url=nt.url),Object.defineProperties(pt,{l:{get:function(){return this.f.length}}});var Nt={};return Object.keys(pt.h).forEach((function(Dt){var ur=pt.h[Dt];Nt[Dt]=function(){if(!se.nb(pt))throw new se.b(29);return ur.apply(null,arguments)}})),Nt.read=function(Dt,ur,Wr,dn,Ao){if(!se.nb(pt))throw new se.b(29);if(Ao>=(Dt=Dt.node.f).length)return 0;if(dn=Math.min(Dt.length-Ao,dn),Dt.slice)for(var Xr=0;Xr<dn;Xr++)ur[Wr+Xr]=Dt[Ao+Xr];else for(Xr=0;Xr<dn;Xr++)ur[Wr+Xr]=Dt.get(Ao+Xr);return dn},pt.h=Nt,pt},Dc:function(P,V,Z,re,xe,Pe,nt,pt,Nt,Dt){function ur(dn){function Ao(Ro){Dt&&Dt(),pt||se.hb(P,V,Ro,re,xe,Nt),Pe&&Pe(),Rt()}var Xr=!1;s.preloadPlugins.forEach((function(Ro){!Xr&&Ro.canHandle(Wr)&&(Ro.handle(dn,Wr,Ao,(function(){nt&&nt(),Rt()})),Xr=!0)})),Xr||Ao(dn)}(void 0).ka();var Wr=V?Kt(qt(P,V)):P;it(),typeof Z=="string"?(void 0).yc(Z,(function(dn){ur(dn)}),nt):ur(Z)},indexedDB:function(){return window.indexedDB||window.mozIndexedDB||window.webkitIndexedDB||window.msIndexedDB},bb:function(){return"EM_FS_"+window.location.pathname},cb:20,ga:"FILE_DATA",Tc:function(P,V,Z){V=V||function(){},Z=Z||function(){};var re=se.indexedDB();try{var xe=re.open(se.bb(),se.cb)}catch(Pe){return Z(Pe)}xe.onupgradeneeded=function(){E("creating db"),xe.result.createObjectStore(se.ga)},xe.onsuccess=function(){var Pe=xe.result.transaction([se.ga],"readwrite"),nt=Pe.objectStore(se.ga),pt=0,Nt=0,Dt=P.length;P.forEach((function(ur){(ur=nt.put(se.Ka(ur).object.f,ur)).onsuccess=function(){++pt+Nt==Dt&&(Nt==0?V():Z())},ur.onerror=function(){Nt++,pt+Nt==Dt&&(Nt==0?V():Z())}})),Pe.onerror=Z},xe.onerror=Z},Mc:function(P,V,Z){V=V||function(){},Z=Z||function(){};var re=se.indexedDB();try{var xe=re.open(se.bb(),se.cb)}catch(Pe){return Z(Pe)}xe.onupgradeneeded=Z,xe.onsuccess=function(){var Pe=xe.result;try{var nt=Pe.transaction([se.ga],"readonly")}catch(Wr){return void Z(Wr)}var pt=nt.objectStore(se.ga),Nt=0,Dt=0,ur=P.length;P.forEach((function(Wr){var dn=pt.get(Wr);dn.onsuccess=function(){se.Ka(Wr).exists&&se.unlink(Wr),se.hb(wt(Wr),Ut(Wr),dn.result,!0,!0,!0),++Nt+Dt==ur&&(Dt==0?V():Z())},dn.onerror=function(){Dt++,Nt+Dt==ur&&(Dt==0?V():Z())}})),nt.onerror=Z},xe.onerror=Z}},ao={},Yr=void 0;function he(){return M[(Yr+=4)-4>>2]}function Ge(P){if(!(P=se.ba(P)))throw new se.b(8);return P}function ie(P){switch(P){case 1:return 0;case 2:return 1;case 4:return 2;case 8:return 3;default:throw new TypeError("Unknown type size: "+P)}}var He=void 0;function Me(P){for(var V="";H[P];)V+=He[H[P++]];return V}var $e={},Jt={},Tr={};function xr(P){if(P===void 0)return"_unknown";var V=(P=P.replace(/[^a-zA-Z0-9_]/g,"$")).charCodeAt(0);return 48<=V&&57>=V?"_"+P:P}function _e(P,V){return P=xr(P),new Function("body","return function "+P+`() {
|
|
"use strict"; return body.apply(this, arguments);
|
|
};
|
|
`)(V)}function zt(P){var V=Error,Z=_e(P,(function(re){this.name=P,this.message=re,(re=Error(re).stack)!==void 0&&(this.stack=this.toString()+`
|
|
`+re.replace(/^Error(:[^\n]*)?\n/,""))}));return Z.prototype=Object.create(V.prototype),Z.prototype.constructor=Z,Z.prototype.toString=function(){return this.message===void 0?this.name:this.name+": "+this.message},Z}var Ur=void 0;function Pr(P){throw new Ur(P)}var Si=void 0;function va(P){throw new Si(P)}function Qs(P,V,Z){function re(pt){(pt=Z(pt)).length!==P.length&&va("Mismatched type converter count");for(var Nt=0;Nt<P.length;++Nt)MA(P[Nt],pt[Nt])}P.forEach((function(pt){Tr[pt]=V}));var xe=Array(V.length),Pe=[],nt=0;V.forEach((function(pt,Nt){Jt.hasOwnProperty(pt)?xe[Nt]=Jt[pt]:(Pe.push(pt),$e.hasOwnProperty(pt)||($e[pt]=[]),$e[pt].push((function(){xe[Nt]=Jt[pt],++nt===Pe.length&&re(xe)})))})),Pe.length===0&&re(xe)}function MA(P,V,Z){if(Z=Z||{},!("argPackAdvance"in V))throw new TypeError("registerType registeredInstance requires argPackAdvance");var re=V.name;if(P||Pr('type "'+re+'" must have a positive integer typeid pointer'),Jt.hasOwnProperty(P)){if(Z.Zb)return;Pr("Cannot register type '"+re+"' twice")}Jt[P]=V,delete Tr[P],$e.hasOwnProperty(P)&&(V=$e[P],delete $e[P],V.forEach((function(xe){xe()})))}function Mc(P){return{count:P.count,aa:P.aa,qa:P.qa,j:P.j,o:P.o,D:P.D,F:P.F}}function Bg(P){Pr(P.c.o.i.name+" instance already deleted")}var Ig=!1;function Jd(){}function OC(P){--P.count.value,P.count.value===0&&(P.D?P.F.$(P.D):P.o.i.$(P.j))}function Ks(P){return typeof FinalizationGroup>"u"?(Ks=function(V){return V},P):(Ig=new FinalizationGroup((function(V){for(var Z=V.next();!Z.done;Z=V.next())(Z=Z.value).j?OC(Z):console.warn("object already deleted: "+Z.j)})),Jd=function(V){Ig.unregister(V.c)},(Ks=function(V){return Ig.register(V,V.c,V.c),V})(P))}var Cg=void 0,$g=[];function zd(){for(;$g.length;){var P=$g.pop();P.c.aa=!1,P.delete()}}function Wa(){}var $m={};function kP(P,V,Z){if(P[V].N===void 0){var re=P[V];P[V]=function(){return P[V].N.hasOwnProperty(arguments.length)||Pr("Function '"+Z+"' called with an invalid number of arguments ("+arguments.length+") - expects one of ("+P[V].N+")!"),P[V].N[arguments.length].apply(this,arguments)},P[V].N=[],P[V].N[re.va]=re}}function HP(P,V,Z,re,xe,Pe,nt,pt){this.name=P,this.constructor=V,this.U=Z,this.$=re,this.G=xe,this.Wb=Pe,this.ta=nt,this.Tb=pt,this.lc=[]}function US(P,V,Z){for(;V!==Z;)V.ta||Pr("Expected null or instance of "+Z.name+", got an instance of "+V.name),P=V.ta(P),V=V.G;return P}function tKe(P,V){return V===null?(this.Ta&&Pr("null is not a valid "+this.name),0):(V.c||Pr('Cannot pass "'+LS(V)+'" as a '+this.name),V.c.j||Pr("Cannot pass deleted object as a pointer of type "+this.name),US(V.c.j,V.c.o.i,this.i))}function rKe(P,V){if(V===null){if(this.Ta&&Pr("null is not a valid "+this.name),this.Ba){var Z=this.mc();return P!==null&&P.push(this.$,Z),Z}return 0}if(V.c||Pr('Cannot pass "'+LS(V)+'" as a '+this.name),V.c.j||Pr("Cannot pass deleted object as a pointer of type "+this.name),!this.za&&V.c.o.za&&Pr("Cannot convert argument of type "+(V.c.F?V.c.F.name:V.c.o.name)+" to parameter type "+this.name),Z=US(V.c.j,V.c.o.i,this.i),this.Ba)switch(V.c.D===void 0&&Pr("Passing raw pointer to smart pointer is illegal"),this.qc){case 0:V.c.F===this?Z=V.c.D:Pr("Cannot convert argument of type "+(V.c.F?V.c.F.name:V.c.o.name)+" to parameter type "+this.name);break;case 1:Z=V.c.D;break;case 2:if(V.c.F===this)Z=V.c.D;else{var re=V.clone();Z=this.nc(Z,bse((function(){re.delete()}))),P!==null&&P.push(this.$,Z)}break;default:Pr("Unsupporting sharing policy")}return Z}function nKe(P,V){return V===null?(this.Ta&&Pr("null is not a valid "+this.name),0):(V.c||Pr('Cannot pass "'+LS(V)+'" as a '+this.name),V.c.j||Pr("Cannot pass deleted object as a pointer of type "+this.name),V.c.o.za&&Pr("Cannot convert argument of type "+V.c.o.name+" to parameter type "+this.name),US(V.c.j,V.c.o.i,this.i))}function VP(P){return this.fromWireType(q[P>>2])}var Jw={};function _P(P,V){return V.o&&V.j||va("makeClassHandle requires ptr and ptrType"),!!V.F!=!!V.D&&va("Both smartPtrType and smartPtr must be specified"),V.count={value:1},Ks(Object.create(P,{c:{value:V}}))}function JC(P,V,Z,re){this.name=P,this.i=V,this.Ta=Z,this.za=re,this.Ba=!1,this.$=this.nc=this.mc=this.xb=this.qc=this.kc=void 0,V.G!==void 0?this.toWireType=rKe:(this.toWireType=re?tKe:nKe,this.O=null)}function wy(P,V){P=Me(P);for(var Z=s["dynCall_"+P],re=[],xe=1;xe<P.length;++xe)re.push("a"+xe);return xe="return function dynCall_"+P+"_"+V+"("+re.join(", ")+`) {
|
|
`,xe+=" return dynCall(rawFunction"+(re.length?", ":"")+re.join(", ")+`);
|
|
`,typeof(Z=new Function("dynCall","rawFunction",xe+`};
|
|
`)(Z,V))!="function"&&Pr("unknown function pointer with signature "+P+": "+V),Z}var yse=void 0;function oKe(P){var V=Me(P=Tse(P));return Rf(P),V}function zw(P,V){var Z=[],re={};throw V.forEach((function xe(Pe){re[Pe]||Jt[Pe]||(Tr[Pe]?Tr[Pe].forEach(xe):(Z.push(Pe),re[Pe]=!0))})),new yse(P+": "+Z.map(oKe).join([", "]))}function Qse(P,V){for(var Z=[],re=0;re<P;re++)Z.push(M[(V>>2)+re]);return Z}function K5(P){for(;P.length;){var V=P.pop();P.pop()(V)}}function Ese(P,V,Z){return P instanceof Object||Pr(Z+' with invalid "this": '+P),P instanceof V.i.constructor||Pr(Z+' incompatible with "this" of type '+P.constructor.name),P.c.j||Pr("cannot call emscripten binding method "+Z+" on deleted object"),US(P.c.j,P.c.o.i,V.i)}var j5=[],zB=[{},{value:void 0},{value:null},{value:!0},{value:!1}];function bse(P){switch(P){case void 0:return 1;case null:return 2;case!0:return 3;case!1:return 4;default:var V=j5.length?j5.pop():zB.length;return zB[V]={ra:1,value:P},V}}function LS(P){if(P===null)return"null";var V=typeof P;return V==="object"||V==="array"||V==="function"?P.toString():""+P}function iKe(P,V){switch(V){case 2:return function(Z){return this.fromWireType(ne[Z>>2])};case 3:return function(Z){return this.fromWireType(oe[Z>>3])};default:throw new TypeError("Unknown float type: "+P)}}function aKe(P,V,Z){switch(V){case 0:return Z?function(re){return J[re]}:function(re){return H[re]};case 1:return Z?function(re){return z[re>>1]}:function(re){return _[re>>1]};case 2:return Z?function(re){return M[re>>2]}:function(re){return q[re>>2]};default:throw new TypeError("Unknown integer type: "+P)}}var W5,xse={};function Sse(){if(!W5){var P,V={USER:"web_user",LOGNAME:"web_user",PATH:"/",PWD:"/",HOME:"/home/web_user",LANG:(typeof navigator=="object"&&navigator.languages&&navigator.languages[0]||"C").replace("-","_")+".UTF-8",_:d||"./this.program"};for(P in xse)V[P]=xse[P];var Z=[];for(P in V)Z.push(P+"="+V[P]);W5=Z}return W5}function YP(P){return P%4==0&&(P%100!=0||P%400==0)}function X5(P,V){for(var Z=0,re=0;re<=V;Z+=P[re++]);return Z}var OP=[31,29,31,30,31,30,31,31,30,31,30,31],JP=[31,28,31,30,31,30,31,31,30,31,30,31];function zP(P,V){for(P=new Date(P.getTime());0<V;){var Z=P.getMonth(),re=(YP(P.getFullYear())?OP:JP)[Z];if(!(V>re-P.getDate())){P.setDate(P.getDate()+V);break}V-=re-P.getDate()+1,P.setDate(1),11>Z?P.setMonth(Z+1):(P.setMonth(0),P.setFullYear(P.getFullYear()+1))}return P}function Dse(P,V,Z,re){P||(P=this),this.parent=P,this.s=P.s,this.oa=null,this.id=se.ec++,this.name=V,this.mode=Z,this.g={},this.h={},this.rdev=re}Object.defineProperties(Dse.prototype,{read:{get:function(){return(365&this.mode)==365},set:function(P){P?this.mode|=365:this.mode&=-366}},write:{get:function(){return(146&this.mode)==146},set:function(P){P?this.mode|=146:this.mode&=-147}},ac:{get:function(){return se.v(this.mode)}},Sa:{get:function(){return se.ya(this.mode)}}}),se.Ab=Dse,se.rc();for(var vse=Array(256),KP=0;256>KP;++KP)vse[KP]=String.fromCharCode(KP);function jP(P,V){var Z=Array(N(P)+1);return P=G(P,Z,0,Z.length),V&&(Z.length=P),Z}function Fse(P){for(var V=[],Z=0;Z<P.length;Z++){var re=P[Z];255<re&&(re&=255),V.push(String.fromCharCode(re))}return V.join("")}He=vse,Ur=s.BindingError=zt("BindingError"),Si=s.InternalError=zt("InternalError"),Wa.prototype.isAliasOf=function(P){if(!(this instanceof Wa&&P instanceof Wa))return!1;var V=this.c.o.i,Z=this.c.j,re=P.c.o.i;for(P=P.c.j;V.G;)Z=V.ta(Z),V=V.G;for(;re.G;)P=re.ta(P),re=re.G;return V===re&&Z===P},Wa.prototype.clone=function(){if(this.c.j||Bg(this),this.c.qa)return this.c.count.value+=1,this;var P=Ks(Object.create(Object.getPrototypeOf(this),{c:{value:Mc(this.c)}}));return P.c.count.value+=1,P.c.aa=!1,P},Wa.prototype.delete=function(){this.c.j||Bg(this),this.c.aa&&!this.c.qa&&Pr("Object already scheduled for deletion"),Jd(this),OC(this.c),this.c.qa||(this.c.D=void 0,this.c.j=void 0)},Wa.prototype.isDeleted=function(){return!this.c.j},Wa.prototype.deleteLater=function(){return this.c.j||Bg(this),this.c.aa&&!this.c.qa&&Pr("Object already scheduled for deletion"),$g.push(this),$g.length===1&&Cg&&Cg(zd),this.c.aa=!0,this},JC.prototype.Yb=function(P){return this.xb&&(P=this.xb(P)),P},JC.prototype.ja=function(P){this.$&&this.$(P)},JC.prototype.argPackAdvance=8,JC.prototype.readValueFromPointer=VP,JC.prototype.deleteObject=function(P){P!==null&&P.delete()},JC.prototype.fromWireType=function(P){function V(){return this.Ba?_P(this.i.U,{o:this.kc,j:Z,F:this,D:P}):_P(this.i.U,{o:this,j:P})}var Z=this.Yb(P);if(!Z)return this.ja(P),null;var re=(function(Pe,nt){for(nt===void 0&&Pr("ptr should not be undefined");Pe.G;)nt=Pe.ta(nt),Pe=Pe.G;return Jw[nt]})(this.i,Z);if(re!==void 0)return re.c.count.value===0?(re.c.j=Z,re.c.D=P,re.clone()):(re=re.clone(),this.ja(P),re);if(re=this.i.Wb(Z),!(re=$m[re]))return V.call(this);re=this.za?re.Mb:re.pointerType;var xe=(function Pe(nt,pt,Nt){return pt===Nt?nt:Nt.G===void 0||(nt=Pe(nt,pt,Nt.G))===null?null:Nt.Tb(nt)})(Z,this.i,re.i);return xe===null?V.call(this):this.Ba?_P(re.i.U,{o:re,j:xe,F:this,D:P}):_P(re.i.U,{o:re,j:xe})},s.getInheritedInstanceCount=function(){return Object.keys(Jw).length},s.getLiveInheritedInstances=function(){var P,V=[];for(P in Jw)Jw.hasOwnProperty(P)&&V.push(Jw[P]);return V},s.flushPendingDeletes=zd,s.setDelayFunction=function(P){Cg=P,$g.length&&Cg&&Cg(zd)},yse=s.UnboundTypeError=zt("UnboundTypeError"),s.count_emval_handles=function(){for(var P=0,V=5;V<zB.length;++V)zB[V]!==void 0&&++P;return P},s.get_first_emval=function(){for(var P=5;P<zB.length;++P)if(zB[P]!==void 0)return zB[P];return null};var AKe=typeof atob=="function"?atob:function(P){var V="",Z=0;P=P.replace(/[^A-Za-z0-9\+\/=]/g,"");do{var re="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=".indexOf(P.charAt(Z++)),xe="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=".indexOf(P.charAt(Z++)),Pe="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=".indexOf(P.charAt(Z++)),nt="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=".indexOf(P.charAt(Z++));re=re<<2|xe>>4,xe=(15&xe)<<4|Pe>>2;var pt=(3&Pe)<<6|nt;V+=String.fromCharCode(re),Pe!==64&&(V+=String.fromCharCode(xe)),nt!==64&&(V+=String.fromCharCode(pt))}while(Z<P.length);return V};function TS(P){if(Bt(P,un)){if(P=P.slice(un.length),typeof m=="boolean"&&m){try{var V=Buffer.from(P,"base64")}catch{V=new Buffer(P,"base64")}var Z=new Uint8Array(V.buffer,V.byteOffset,V.byteLength)}else try{var re=AKe(P),xe=new Uint8Array(re.length);for(V=0;V<re.length;++V)xe[V]=re.charCodeAt(V);Z=xe}catch{throw Error("Converting base64 string to bytes failed.")}return Z}}var wse={__assert_fail:function(P,V,Z,re){Mt("Assertion failed: "+U(P)+", at: "+[V?U(V):"unknown filename",Z,re?U(re):"unknown function"])},__cxa_allocate_exception:function(P){return Kw(P)},__cxa_atexit:function(P,V){Te.unshift({ob:P,ua:V})},__cxa_begin_catch:function(P){var V=oi[P];return V&&!V.fb&&(V.fb=!0,PS.ab--),V&&(V.Ea=!1),pa.push(P),(V=io(P))&&oi[V].ra++,P},__cxa_end_catch:function(){Mi(0);var P=pa.pop();if(P){if(P=io(P)){var V=oi[P];V.ra--,V.ra!==0||V.Ea||(V.ja&&s.dynCall_ii(V.ja,P),delete oi[P],ue(P))}j=0}},__cxa_find_matching_catch_2:function(){var P=j;if(!P)return S=0;var V=oi[P],Z=V.type;if(!Z)return S=0,0|P;var re=Array.prototype.slice.call(arguments);Ww(Z),M[22792]=P,P=91168;for(var xe=0;xe<re.length;xe++)if(re[xe]&&jw(re[xe],Z,P))return P=M[P>>2],V.ha.push(P),S=re[xe],0|P;return P=M[P>>2],S=Z,0|P},__cxa_find_matching_catch_3:function(){var P=j;if(!P)return S=0;var V=oi[P],Z=V.type;if(!Z)return S=0,0|P;var re=Array.prototype.slice.call(arguments);Ww(Z),M[22792]=P,P=91168;for(var xe=0;xe<re.length;xe++)if(re[xe]&&jw(re[xe],Z,P))return P=M[P>>2],V.ha.push(P),S=re[xe],0|P;return P=M[P>>2],S=Z,0|P},__cxa_find_matching_catch_4:function(){var P=j;if(!P)return S=0;var V=oi[P],Z=V.type;if(!Z)return S=0,0|P;var re=Array.prototype.slice.call(arguments);Ww(Z),M[22792]=P,P=91168;for(var xe=0;xe<re.length;xe++)if(re[xe]&&jw(re[xe],Z,P))return P=M[P>>2],V.ha.push(P),S=re[xe],0|P;return P=M[P>>2],S=Z,0|P},__cxa_find_matching_catch_5:function(){var P=j;if(!P)return S=0;var V=oi[P],Z=V.type;if(!Z)return S=0,0|P;var re=Array.prototype.slice.call(arguments);Ww(Z),M[22792]=P,P=91168;for(var xe=0;xe<re.length;xe++)if(re[xe]&&jw(re[xe],Z,P))return P=M[P>>2],V.ha.push(P),S=re[xe],0|P;return P=M[P>>2],S=Z,0|P},__cxa_free_exception:ue,__cxa_get_exception_ptr:function(P){return P},__cxa_rethrow:function(){var P=pa.pop();throw P=io(P),oi[P].Ea||(pa.push(P),oi[P].Ea=!0),j=P,P},__cxa_throw:function(P,V,Z){throw oi[P]={j:P,ha:[P],type:V,ja:Z,ra:0,fb:!1,Ea:!1},j=P,"uncaught_exception"in PS?PS.ab++:PS.ab=1,P},__cxa_uncaught_exceptions:function(){return PS.ab},__map_file:function(){return et(63),-1},__resumeException:function(P){throw j||(j=P),P},__sys_fcntl64:function(P,V,Z){Yr=Z;try{var re=Ge(P);switch(V){case 0:var xe=he();return 0>xe?-28:se.open(re.path,re.flags,0,xe).fd;case 1:case 2:return 0;case 3:return re.flags;case 4:return xe=he(),re.flags|=xe,0;case 12:return xe=he(),z[xe+0>>1]=2,0;case 13:case 14:return 0;case 16:case 8:return-28;case 9:return et(28),-1;default:return-28}}catch(Pe){return se!==void 0&&Pe instanceof se.b||Mt(Pe),-Pe.B}},__sys_ioctl:function(P,V,Z){Yr=Z;try{var re=Ge(P);switch(V){case 21509:case 21505:return re.tty?0:-59;case 21510:case 21511:case 21512:case 21506:case 21507:case 21508:return re.tty?0:-59;case 21519:if(!re.tty)return-59;var xe=he();return M[xe>>2]=0;case 21520:return re.tty?-28:-59;case 21531:return xe=he(),se.Ra(re,V,xe);case 21523:case 21524:return re.tty?0:-59;default:Mt("bad ioctl syscall "+V)}}catch(Pe){return se!==void 0&&Pe instanceof se.b||Mt(Pe),-Pe.B}},__sys_munmap:function(P,V){try{if((0|P)==-1||V===0)var Z=-28;else{var re=ao[P];if(re&&V===re.Lc){var xe=se.ba(re.fd);if(2&re.Sc){var Pe=re.flags,nt=re.offset,pt=H.slice(P,P+V);se.da(xe,pt,nt,V,Pe)}ao[P]=null,re.Gb&&Rf(re.Nc)}Z=0}return Z}catch(Nt){return se!==void 0&&Nt instanceof se.b||Mt(Nt),-Nt.B}},__sys_open:function(P,V,Z){Yr=Z;try{var re=U(P),xe=he();return se.open(re,V,xe).fd}catch(Pe){return se!==void 0&&Pe instanceof se.b||Mt(Pe),-Pe.B}},__sys_stat64:function(P,V){try{P=U(P);e:{var Z=se.stat;try{var re=Z(P)}catch(Pe){if(Pe&&Pe.node&&ht(P)!==ht(se.I(Pe.node))){var xe=-54;break e}throw Pe}M[V>>2]=re.dev,M[V+4>>2]=0,M[V+8>>2]=re.ino,M[V+12>>2]=re.mode,M[V+16>>2]=re.nlink,M[V+20>>2]=re.uid,M[V+24>>2]=re.gid,M[V+28>>2]=re.rdev,M[V+32>>2]=0,Nr=[re.size>>>0,(Zt=re.size,1<=+Ae(Zt)?0<Zt?(0|Ie(+Qe(Zt/4294967296),4294967295))>>>0:~~+fe((Zt-+(~~Zt>>>0))/4294967296)>>>0:0)],M[V+40>>2]=Nr[0],M[V+44>>2]=Nr[1],M[V+48>>2]=4096,M[V+52>>2]=re.blocks,M[V+56>>2]=re.atime.getTime()/1e3|0,M[V+60>>2]=0,M[V+64>>2]=re.mtime.getTime()/1e3|0,M[V+68>>2]=0,M[V+72>>2]=re.ctime.getTime()/1e3|0,M[V+76>>2]=0,Nr=[re.ino>>>0,(Zt=re.ino,1<=+Ae(Zt)?0<Zt?(0|Ie(+Qe(Zt/4294967296),4294967295))>>>0:~~+fe((Zt-+(~~Zt>>>0))/4294967296)>>>0:0)],M[V+80>>2]=Nr[0],M[V+84>>2]=Nr[1],xe=0}return xe}catch(Pe){return se!==void 0&&Pe instanceof se.b||Mt(Pe),-Pe.B}},_embind_register_bool:function(P,V,Z,re,xe){var Pe=ie(Z);MA(P,{name:V=Me(V),fromWireType:function(nt){return!!nt},toWireType:function(nt,pt){return pt?re:xe},argPackAdvance:8,readValueFromPointer:function(nt){if(Z===1)var pt=J;else if(Z===2)pt=z;else{if(Z!==4)throw new TypeError("Unknown boolean type size: "+V);pt=M}return this.fromWireType(pt[nt>>Pe])},O:null})},_embind_register_class:function(P,V,Z,re,xe,Pe,nt,pt,Nt,Dt,ur,Wr,dn){ur=Me(ur),Pe=wy(xe,Pe),pt&&(pt=wy(nt,pt)),Dt&&(Dt=wy(Nt,Dt)),dn=wy(Wr,dn);var Ao=xr(ur);(function(Xr,Ro){s.hasOwnProperty(Xr)?(Pr("Cannot register public name '"+Xr+"' twice"),kP(s,Xr,Xr),s.hasOwnProperty(void 0)&&Pr("Cannot register multiple overloads of a function with the same number of arguments (undefined)!"),s[Xr].N[void 0]=Ro):s[Xr]=Ro})(Ao,(function(){zw("Cannot construct "+ur+" due to unbound types",[re])})),Qs([P,V,Z],re?[re]:[],(function(Xr){if(Xr=Xr[0],re)var Ro=Xr.i,so=Ro.U;else so=Wa.prototype;Xr=_e(Ao,(function(){if(Object.getPrototypeOf(this)!==vt)throw new Ur("Use 'new' to construct "+ur);if($n.V===void 0)throw new Ur(ur+" has no accessible constructor");var kc=$n.V[arguments.length];if(kc===void 0)throw new Ur("Tried to invoke ctor of "+ur+" with invalid number of parameters ("+arguments.length+") - expected ("+Object.keys($n.V).toString()+") parameters instead!");return kc.apply(this,arguments)}));var vt=Object.create(so,{constructor:{value:Xr}});Xr.prototype=vt;var $n=new HP(ur,Xr,vt,dn,Ro,Pe,pt,Dt);Ro=new JC(ur,$n,!0,!1),so=new JC(ur+"*",$n,!1,!1);var Uo=new JC(ur+" const*",$n,!1,!0);return $m[P]={pointerType:so,Mb:Uo},(function(kc,Tb){s.hasOwnProperty(kc)||va("Replacing nonexistant public symbol"),s[kc]=Tb,s[kc].va=void 0})(Ao,Xr),[Ro,so,Uo]}))},_embind_register_class_constructor:function(P,V,Z,re,xe,Pe){L(0<V);var nt=Qse(V,Z);xe=wy(re,xe);var pt=[Pe],Nt=[];Qs([],[P],(function(Dt){var ur="constructor "+(Dt=Dt[0]).name;if(Dt.i.V===void 0&&(Dt.i.V=[]),Dt.i.V[V-1]!==void 0)throw new Ur("Cannot register multiple constructors with identical number of parameters ("+(V-1)+") for class '"+Dt.name+"'! Overload resolution is currently only performed using the parameter count, not actual type info!");return Dt.i.V[V-1]=function(){zw("Cannot construct "+Dt.name+" due to unbound types",nt)},Qs([],nt,(function(Wr){return Dt.i.V[V-1]=function(){arguments.length!==V-1&&Pr(ur+" called with "+arguments.length+" arguments, expected "+(V-1)),Nt.length=0,pt.length=V;for(var dn=1;dn<V;++dn)pt[dn]=Wr[dn].toWireType(Nt,arguments[dn-1]);return dn=xe.apply(null,pt),K5(Nt),Wr[0].fromWireType(dn)},[]})),[]}))},_embind_register_class_function:function(P,V,Z,re,xe,Pe,nt,pt){var Nt=Qse(Z,re);V=Me(V),Pe=wy(xe,Pe),Qs([],[P],(function(Dt){function ur(){zw("Cannot call "+Wr+" due to unbound types",Nt)}var Wr=(Dt=Dt[0]).name+"."+V;pt&&Dt.i.lc.push(V);var dn=Dt.i.U,Ao=dn[V];return Ao===void 0||Ao.N===void 0&&Ao.className!==Dt.name&&Ao.va===Z-2?(ur.va=Z-2,ur.className=Dt.name,dn[V]=ur):(kP(dn,V,Wr),dn[V].N[Z-2]=ur),Qs([],Nt,(function(Xr){var Ro=Wr,so=Dt,vt=Pe,$n=Xr.length;2>$n&&Pr("argTypes array size mismatch! Must at least get return value and 'this' types!");var Uo=Xr[1]!==null&&so!==null,kc=!1;for(so=1;so<Xr.length;++so)if(Xr[so]!==null&&Xr[so].O===void 0){kc=!0;break}var Tb=Xr[0].name!=="void",Pb="",GS="";for(so=0;so<$n-2;++so)Pb+=(so!==0?", ":"")+"arg"+so,GS+=(so!==0?", ":"")+"arg"+so+"Wired";Ro="return function "+xr(Ro)+"("+Pb+`) {
|
|
if (arguments.length !== `+($n-2)+`) {
|
|
throwBindingError('function `+Ro+" called with ' + arguments.length + ' arguments, expected "+($n-2)+` args!');
|
|
}
|
|
`,kc&&(Ro+=`var destructors = [];
|
|
`);var mce=kc?"destructors":"null";for(Pb="throwBindingError invoker fn runDestructors retType classParam".split(" "),vt=[Pr,vt,nt,K5,Xr[0],Xr[1]],Uo&&(Ro+="var thisWired = classParam.toWireType("+mce+`, this);
|
|
`),so=0;so<$n-2;++so)Ro+="var arg"+so+"Wired = argType"+so+".toWireType("+mce+", arg"+so+"); // "+Xr[so+2].name+`
|
|
`,Pb.push("argType"+so),vt.push(Xr[so+2]);if(Uo&&(GS="thisWired"+(0<GS.length?", ":"")+GS),Ro+=(Tb?"var rv = ":"")+"invoker(fn"+(0<GS.length?", ":"")+GS+`);
|
|
`,kc)Ro+=`runDestructors(destructors);
|
|
`;else for(so=Uo?1:2;so<Xr.length;++so)$n=so===1?"thisWired":"arg"+(so-2)+"Wired",Xr[so].O!==null&&(Ro+=$n+"_dtor("+$n+"); // "+Xr[so].name+`
|
|
`,Pb.push($n+"_dtor"),vt.push(Xr[so].O));return Tb&&(Ro+=`var ret = retType.fromWireType(rv);
|
|
return ret;
|
|
`),Pb.push(Ro+`}
|
|
`),Xr=(function(q5){var Zw=Function;if(!(Zw instanceof Function))throw new TypeError("new_ called with constructor type "+typeof Zw+" which is not a function");var qw=_e(Zw.name||"unknownFunctionName",(function(){}));return qw.prototype=Zw.prototype,qw=new qw,(q5=Zw.apply(qw,q5))instanceof Object?q5:qw})(Pb).apply(null,vt),dn[V].N===void 0?(Xr.va=Z-2,dn[V]=Xr):dn[V].N[Z-2]=Xr,[]})),[]}))},_embind_register_class_property:function(P,V,Z,re,xe,Pe,nt,pt,Nt,Dt){V=Me(V),xe=wy(re,xe),Qs([],[P],(function(ur){var Wr=(ur=ur[0]).name+"."+V,dn={get:function(){zw("Cannot access "+Wr+" due to unbound types",[Z,nt])},enumerable:!0,configurable:!0};return dn.set=Nt?function(){zw("Cannot access "+Wr+" due to unbound types",[Z,nt])}:function(){Pr(Wr+" is a read-only property")},Object.defineProperty(ur.i.U,V,dn),Qs([],Nt?[Z,nt]:[Z],(function(Ao){var Xr=Ao[0],Ro={get:function(){var vt=Ese(this,ur,Wr+" getter");return Xr.fromWireType(xe(Pe,vt))},enumerable:!0};if(Nt){Nt=wy(pt,Nt);var so=Ao[1];Ro.set=function(vt){var $n=Ese(this,ur,Wr+" setter"),Uo=[];Nt(Dt,$n,so.toWireType(Uo,vt)),K5(Uo)}}return Object.defineProperty(ur.i.U,V,Ro),[]})),[]}))},_embind_register_emval:function(P,V){MA(P,{name:V=Me(V),fromWireType:function(Z){var re=zB[Z].value;return 4<Z&&--zB[Z].ra==0&&(zB[Z]=void 0,j5.push(Z)),re},toWireType:function(Z,re){return bse(re)},argPackAdvance:8,readValueFromPointer:VP,O:null})},_embind_register_float:function(P,V,Z){Z=ie(Z),MA(P,{name:V=Me(V),fromWireType:function(re){return re},toWireType:function(re,xe){if(typeof xe!="number"&&typeof xe!="boolean")throw new TypeError('Cannot convert "'+LS(xe)+'" to '+this.name);return xe},argPackAdvance:8,readValueFromPointer:iKe(V,Z),O:null})},_embind_register_integer:function(P,V,Z,re,xe){function Pe(Dt){return Dt}V=Me(V),xe===-1&&(xe=4294967295);var nt=ie(Z);if(re===0){var pt=32-8*Z;Pe=function(Dt){return Dt<<pt>>>pt}}var Nt=V.indexOf("unsigned")!=-1;MA(P,{name:V,fromWireType:Pe,toWireType:function(Dt,ur){if(typeof ur!="number"&&typeof ur!="boolean")throw new TypeError('Cannot convert "'+LS(ur)+'" to '+this.name);if(ur<re||ur>xe)throw new TypeError('Passing a number "'+LS(ur)+'" from JS side to C/C++ side to an argument of type "'+V+'", which is outside the valid range ['+re+", "+xe+"]!");return Nt?ur>>>0:0|ur},argPackAdvance:8,readValueFromPointer:aKe(V,nt,re!==0),O:null})},_embind_register_memory_view:function(P,V,Z){function re(Pe){var nt=q;return new xe(k,nt[1+(Pe>>=2)],nt[Pe])}var xe=[Int8Array,Uint8Array,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array][V];MA(P,{name:Z=Me(Z),fromWireType:re,argPackAdvance:8,readValueFromPointer:re},{Zb:!0})},_embind_register_std_string:function(P,V){var Z=(V=Me(V))==="std::string";MA(P,{name:V,fromWireType:function(re){var xe=q[re>>2];if(Z){var Pe=H[re+4+xe],nt=0;Pe!=0&&(nt=Pe,H[re+4+xe]=0);var pt=re+4;for(Pe=0;Pe<=xe;++Pe){var Nt=re+4+Pe;if(H[Nt]==0){if(pt=U(pt),Dt===void 0)var Dt=pt;else Dt+="\0",Dt+=pt;pt=Nt+1}}nt!=0&&(H[re+4+xe]=nt)}else{for(Dt=Array(xe),Pe=0;Pe<xe;++Pe)Dt[Pe]=String.fromCharCode(H[re+4+Pe]);Dt=Dt.join("")}return Rf(re),Dt},toWireType:function(re,xe){xe instanceof ArrayBuffer&&(xe=new Uint8Array(xe));var Pe=typeof xe=="string";Pe||xe instanceof Uint8Array||xe instanceof Uint8ClampedArray||xe instanceof Int8Array||Pr("Cannot pass non-string to std::string");var nt=(Z&&Pe?function(){return N(xe)}:function(){return xe.length})(),pt=Kw(4+nt+1);if(q[pt>>2]=nt,Z&&Pe)G(xe,H,pt+4,nt+1);else if(Pe)for(Pe=0;Pe<nt;++Pe){var Nt=xe.charCodeAt(Pe);255<Nt&&(Rf(pt),Pr("String has UTF-16 code units that do not fit in 8 bits")),H[pt+4+Pe]=Nt}else for(Pe=0;Pe<nt;++Pe)H[pt+4+Pe]=xe[Pe];return re!==null&&re.push(Rf,pt),pt},argPackAdvance:8,readValueFromPointer:VP,O:function(re){Rf(re)}})},_embind_register_std_wstring:function(P,V,Z){if(Z=Me(Z),V===2)var re=me,xe=Se,Pe=ee,nt=function(){return _},pt=1;else V===4&&(re=O,xe=X,Pe=Ce,nt=function(){return q},pt=2);MA(P,{name:Z,fromWireType:function(Nt){var Dt=q[Nt>>2],ur=nt(),Wr=ur[Nt+4+Dt*V>>pt],dn=0;Wr!=0&&(dn=Wr,ur[Nt+4+Dt*V>>pt]=0);var Ao=Nt+4;for(Wr=0;Wr<=Dt;++Wr){var Xr=Nt+4+Wr*V;if(ur[Xr>>pt]==0){if(Ao=re(Ao),Ro===void 0)var Ro=Ao;else Ro+="\0",Ro+=Ao;Ao=Xr+V}}return dn!=0&&(ur[Nt+4+Dt*V>>pt]=dn),Rf(Nt),Ro},toWireType:function(Nt,Dt){typeof Dt!="string"&&Pr("Cannot pass non-string to C++ string type "+Z);var ur=Pe(Dt),Wr=Kw(4+ur+V);return q[Wr>>2]=ur>>pt,xe(Dt,Wr+4,ur+V),Nt!==null&&Nt.push(Rf,Wr),Wr},argPackAdvance:8,readValueFromPointer:VP,O:function(Nt){Rf(Nt)}})},_embind_register_void:function(P,V){MA(P,{Jc:!0,name:V=Me(V),argPackAdvance:0,fromWireType:function(){},toWireType:function(){}})},abort:function(){Mt()},emscripten_get_sbrk_ptr:function(){return 91008},emscripten_memcpy_big:function(P,V,Z){H.copyWithin(P,V,V+Z)},emscripten_resize_heap:function(P){P>>>=0;var V=H.length;if(2147483648<P)return!1;for(var Z=1;4>=Z;Z*=2){var re=V*(1+.2/Z);re=Math.min(re,P+100663296),0<(re=Math.max(16777216,P,re))%65536&&(re+=65536-re%65536);e:{try{w.grow(Math.min(2147483648,re)-k.byteLength+65535>>>16),Ne(w.buffer);var xe=1;break e}catch{}xe=void 0}if(xe)return!0}return!1},environ_get:function(P,V){var Z=0;return Sse().forEach((function(re,xe){var Pe=V+Z;for(xe=M[P+4*xe>>2]=Pe,Pe=0;Pe<re.length;++Pe)J[xe++>>0]=re.charCodeAt(Pe);J[xe>>0]=0,Z+=re.length+1})),0},environ_sizes_get:function(P,V){var Z=Sse();M[P>>2]=Z.length;var re=0;return Z.forEach((function(xe){re+=xe.length+1})),M[V>>2]=re,0},fd_close:function(P){try{var V=Ge(P);return se.close(V),0}catch(Z){return se!==void 0&&Z instanceof se.b||Mt(Z),Z.B}},fd_read:function(P,V,Z,re){try{e:{for(var xe=Ge(P),Pe=P=0;Pe<Z;Pe++){var nt=M[V+(8*Pe+4)>>2],pt=se.read(xe,J,M[V+8*Pe>>2],nt,void 0);if(0>pt){var Nt=-1;break e}if(P+=pt,pt<nt)break}Nt=P}return M[re>>2]=Nt,0}catch(Dt){return se!==void 0&&Dt instanceof se.b||Mt(Dt),Dt.B}},fd_seek:function(P,V,Z,re,xe){try{var Pe=Ge(P);return-9007199254740992>=(P=4294967296*Z+(V>>>0))||9007199254740992<=P?-61:(se.K(Pe,P,re),Nr=[Pe.position>>>0,(Zt=Pe.position,1<=+Ae(Zt)?0<Zt?(0|Ie(+Qe(Zt/4294967296),4294967295))>>>0:~~+fe((Zt-+(~~Zt>>>0))/4294967296)>>>0:0)],M[xe>>2]=Nr[0],M[xe+4>>2]=Nr[1],Pe.Oa&&P===0&&re===0&&(Pe.Oa=null),0)}catch(nt){return se!==void 0&&nt instanceof se.b||Mt(nt),nt.B}},fd_write:function(P,V,Z,re){try{e:{for(var xe=Ge(P),Pe=P=0;Pe<Z;Pe++){var nt=se.write(xe,J,M[V+8*Pe>>2],M[V+(8*Pe+4)>>2],void 0);if(0>nt){var pt=-1;break e}P+=nt}pt=P}return M[re>>2]=pt,0}catch(Nt){return se!==void 0&&Nt instanceof se.b||Mt(Nt),Nt.B}},getTempRet0:function(){return 0|S},gettimeofday:function(P){var V=Date.now();return M[P>>2]=V/1e3|0,M[P+4>>2]=V%1e3*1e3|0,0},invoke_diii:function(P,V,Z,re){var xe=Xi();try{return gce(P,V,Z,re)}catch(Pe){if(Zi(xe),Pe!==Pe+0&&Pe!=="longjmp")throw Pe;Mi(1,0)}},invoke_fiii:function(P,V,Z,re){var xe=Xi();try{return uce(P,V,Z,re)}catch(Pe){if(Zi(xe),Pe!==Pe+0&&Pe!=="longjmp")throw Pe;Mi(1,0)}},invoke_i:function(P){var V=Xi();try{return Kse(P)}catch(Z){if(Zi(V),Z!==Z+0&&Z!=="longjmp")throw Z;Mi(1,0)}},invoke_ii:function(P,V){var Z=Xi();try{return jse(P,V)}catch(re){if(Zi(Z),re!==re+0&&re!=="longjmp")throw re;Mi(1,0)}},invoke_iif:function(P,V,Z){var re=Xi();try{return sce(P,V,Z)}catch(xe){if(Zi(re),xe!==xe+0&&xe!=="longjmp")throw xe;Mi(1,0)}},invoke_iii:function(P,V,Z){var re=Xi();try{return Wse(P,V,Z)}catch(xe){if(Zi(re),xe!==xe+0&&xe!=="longjmp")throw xe;Mi(1,0)}},invoke_iiii:function(P,V,Z,re){var xe=Xi();try{return Xse(P,V,Z,re)}catch(Pe){if(Zi(xe),Pe!==Pe+0&&Pe!=="longjmp")throw Pe;Mi(1,0)}},invoke_iiiii:function(P,V,Z,re,xe){var Pe=Xi();try{return Zse(P,V,Z,re,xe)}catch(nt){if(Zi(Pe),nt!==nt+0&&nt!=="longjmp")throw nt;Mi(1,0)}},invoke_iiiiid:function(P,V,Z,re,xe,Pe){var nt=Xi();try{return ice(P,V,Z,re,xe,Pe)}catch(pt){if(Zi(nt),pt!==pt+0&&pt!=="longjmp")throw pt;Mi(1,0)}},invoke_iiiiii:function(P,V,Z,re,xe,Pe){var nt=Xi();try{return qse(P,V,Z,re,xe,Pe)}catch(pt){if(Zi(nt),pt!==pt+0&&pt!=="longjmp")throw pt;Mi(1,0)}},invoke_iiiiiii:function(P,V,Z,re,xe,Pe,nt){var pt=Xi();try{return $se(P,V,Z,re,xe,Pe,nt)}catch(Nt){if(Zi(pt),Nt!==Nt+0&&Nt!=="longjmp")throw Nt;Mi(1,0)}},invoke_iiiiiiii:function(P,V,Z,re,xe,Pe,nt,pt){var Nt=Xi();try{return ece(P,V,Z,re,xe,Pe,nt,pt)}catch(Dt){if(Zi(Nt),Dt!==Dt+0&&Dt!=="longjmp")throw Dt;Mi(1,0)}},invoke_iiiiiiiiiii:function(P,V,Z,re,xe,Pe,nt,pt,Nt,Dt,ur){var Wr=Xi();try{return tce(P,V,Z,re,xe,Pe,nt,pt,Nt,Dt,ur)}catch(dn){if(Zi(Wr),dn!==dn+0&&dn!=="longjmp")throw dn;Mi(1,0)}},invoke_iiiiiiiiiiii:function(P,V,Z,re,xe,Pe,nt,pt,Nt,Dt,ur,Wr){var dn=Xi();try{return rce(P,V,Z,re,xe,Pe,nt,pt,Nt,Dt,ur,Wr)}catch(Ao){if(Zi(dn),Ao!==Ao+0&&Ao!=="longjmp")throw Ao;Mi(1,0)}},invoke_iiiiiiiiiiiii:function(P,V,Z,re,xe,Pe,nt,pt,Nt,Dt,ur,Wr,dn){var Ao=Xi();try{return nce(P,V,Z,re,xe,Pe,nt,pt,Nt,Dt,ur,Wr,dn)}catch(Xr){if(Zi(Ao),Xr!==Xr+0&&Xr!=="longjmp")throw Xr;Mi(1,0)}},invoke_iiiiij:function(P,V,Z,re,xe,Pe,nt){var pt=Xi();try{return oce(P,V,Z,re,xe,Pe,nt)}catch(Nt){if(Zi(pt),Nt!==Nt+0&&Nt!=="longjmp")throw Nt;Mi(1,0)}},invoke_iiijiiiiii:function(P,V,Z,re,xe,Pe,nt,pt,Nt,Dt,ur){var Wr=Xi();try{return ace(P,V,Z,re,xe,Pe,nt,pt,Nt,Dt,ur)}catch(dn){if(Zi(Wr),dn!==dn+0&&dn!=="longjmp")throw dn;Mi(1,0)}},invoke_iij:function(P,V,Z,re){var xe=Xi();try{return Ace(P,V,Z,re)}catch(Pe){if(Zi(xe),Pe!==Pe+0&&Pe!=="longjmp")throw Pe;Mi(1,0)}},invoke_jii:function(P,V,Z){var re=Xi();try{return cce(P,V,Z)}catch(xe){if(Zi(re),xe!==xe+0&&xe!=="longjmp")throw xe;Mi(1,0)}},invoke_jiiii:function(P,V,Z,re,xe){var Pe=Xi();try{return lce(P,V,Z,re,xe)}catch(nt){if(Zi(Pe),nt!==nt+0&&nt!=="longjmp")throw nt;Mi(1,0)}},invoke_v:function(P){var V=Xi();try{Pse(P)}catch(Z){if(Zi(V),Z!==Z+0&&Z!=="longjmp")throw Z;Mi(1,0)}},invoke_vi:function(P,V){var Z=Xi();try{Gse(P,V)}catch(re){if(Zi(Z),re!==re+0&&re!=="longjmp")throw re;Mi(1,0)}},invoke_vii:function(P,V,Z){var re=Xi();try{Nse(P,V,Z)}catch(xe){if(Zi(re),xe!==xe+0&&xe!=="longjmp")throw xe;Mi(1,0)}},invoke_viii:function(P,V,Z,re){var xe=Xi();try{Mse(P,V,Z,re)}catch(Pe){if(Zi(xe),Pe!==Pe+0&&Pe!=="longjmp")throw Pe;Mi(1,0)}},invoke_viiii:function(P,V,Z,re,xe){var Pe=Xi();try{kse(P,V,Z,re,xe)}catch(nt){if(Zi(Pe),nt!==nt+0&&nt!=="longjmp")throw nt;Mi(1,0)}},invoke_viiiii:function(P,V,Z,re,xe,Pe){var nt=Xi();try{Hse(P,V,Z,re,xe,Pe)}catch(pt){if(Zi(nt),pt!==pt+0&&pt!=="longjmp")throw pt;Mi(1,0)}},invoke_viiiiiii:function(P,V,Z,re,xe,Pe,nt,pt){var Nt=Xi();try{Vse(P,V,Z,re,xe,Pe,nt,pt)}catch(Dt){if(Zi(Nt),Dt!==Dt+0&&Dt!=="longjmp")throw Dt;Mi(1,0)}},invoke_viiiiiiiiii:function(P,V,Z,re,xe,Pe,nt,pt,Nt,Dt,ur){var Wr=Xi();try{_se(P,V,Z,re,xe,Pe,nt,pt,Nt,Dt,ur)}catch(dn){if(Zi(Wr),dn!==dn+0&&dn!=="longjmp")throw dn;Mi(1,0)}},invoke_viiiiiiiiiiiiiii:function(P,V,Z,re,xe,Pe,nt,pt,Nt,Dt,ur,Wr,dn,Ao,Xr,Ro){var so=Xi();try{Yse(P,V,Z,re,xe,Pe,nt,pt,Nt,Dt,ur,Wr,dn,Ao,Xr,Ro)}catch(vt){if(Zi(so),vt!==vt+0&&vt!=="longjmp")throw vt;Mi(1,0)}},invoke_viiiijji:function(P,V,Z,re,xe,Pe,nt,pt,Nt,Dt){var ur=Xi();try{Ose(P,V,Z,re,xe,Pe,nt,pt,Nt,Dt)}catch(Wr){if(Zi(ur),Wr!==Wr+0&&Wr!=="longjmp")throw Wr;Mi(1,0)}},invoke_viijii:function(P,V,Z,re,xe,Pe,nt){var pt=Xi();try{Jse(P,V,Z,re,xe,Pe,nt)}catch(Nt){if(Zi(pt),Nt!==Nt+0&&Nt!=="longjmp")throw Nt;Mi(1,0)}},invoke_viji:function(P,V,Z,re,xe){var Pe=Xi();try{zse(P,V,Z,re,xe)}catch(nt){if(Zi(Pe),nt!==nt+0&&nt!=="longjmp")throw nt;Mi(1,0)}},llvm_eh_typeid_for:function(P){return P},memory:w,setTempRet0:function(P){S=0|P},strftime_l:function(P,V,Z,re){return(function(xe,Pe,nt,pt){function Nt(vt,$n,Uo){for(vt=typeof vt=="number"?vt.toString():vt||"";vt.length<$n;)vt=Uo[0]+vt;return vt}function Dt(vt,$n){return Nt(vt,$n,"0")}function ur(vt,$n){function Uo(Tb){return 0>Tb?-1:0<Tb?1:0}var kc;return(kc=Uo(vt.getFullYear()-$n.getFullYear()))===0&&(kc=Uo(vt.getMonth()-$n.getMonth()))===0&&(kc=Uo(vt.getDate()-$n.getDate())),kc}function Wr(vt){switch(vt.getDay()){case 0:return new Date(vt.getFullYear()-1,11,29);case 1:return vt;case 2:return new Date(vt.getFullYear(),0,3);case 3:return new Date(vt.getFullYear(),0,2);case 4:return new Date(vt.getFullYear(),0,1);case 5:return new Date(vt.getFullYear()-1,11,31);case 6:return new Date(vt.getFullYear()-1,11,30)}}function dn(vt){vt=zP(new Date(vt.C+1900,0,1),vt.Ia);var $n=new Date(vt.getFullYear()+1,0,4),Uo=Wr(new Date(vt.getFullYear(),0,4));return $n=Wr($n),0>=ur(Uo,vt)?0>=ur($n,vt)?vt.getFullYear()+1:vt.getFullYear():vt.getFullYear()-1}var Ao=M[pt+40>>2];for(var Xr in pt={uc:M[pt>>2],tc:M[pt+4>>2],Ga:M[pt+8>>2],sa:M[pt+12>>2],fa:M[pt+16>>2],C:M[pt+20>>2],Ha:M[pt+24>>2],Ia:M[pt+28>>2],Vc:M[pt+32>>2],sc:M[pt+36>>2],vc:Ao?U(Ao):""},nt=U(nt),Ao={"%c":"%a %b %d %H:%M:%S %Y","%D":"%m/%d/%y","%F":"%Y-%m-%d","%h":"%b","%r":"%I:%M:%S %p","%R":"%H:%M","%T":"%H:%M:%S","%x":"%m/%d/%y","%X":"%H:%M:%S","%Ec":"%c","%EC":"%C","%Ex":"%m/%d/%y","%EX":"%H:%M:%S","%Ey":"%y","%EY":"%Y","%Od":"%d","%Oe":"%e","%OH":"%H","%OI":"%I","%Om":"%m","%OM":"%M","%OS":"%S","%Ou":"%u","%OU":"%U","%OV":"%V","%Ow":"%w","%OW":"%W","%Oy":"%y"})nt=nt.replace(new RegExp(Xr,"g"),Ao[Xr]);var Ro="Sunday Monday Tuesday Wednesday Thursday Friday Saturday".split(" "),so="January February March April May June July August September October November December".split(" ");for(Xr in Ao={"%a":function(vt){return Ro[vt.Ha].substring(0,3)},"%A":function(vt){return Ro[vt.Ha]},"%b":function(vt){return so[vt.fa].substring(0,3)},"%B":function(vt){return so[vt.fa]},"%C":function(vt){return Dt((vt.C+1900)/100|0,2)},"%d":function(vt){return Dt(vt.sa,2)},"%e":function(vt){return Nt(vt.sa,2," ")},"%g":function(vt){return dn(vt).toString().substring(2)},"%G":function(vt){return dn(vt)},"%H":function(vt){return Dt(vt.Ga,2)},"%I":function(vt){return(vt=vt.Ga)==0?vt=12:12<vt&&(vt-=12),Dt(vt,2)},"%j":function(vt){return Dt(vt.sa+X5(YP(vt.C+1900)?OP:JP,vt.fa-1),3)},"%m":function(vt){return Dt(vt.fa+1,2)},"%M":function(vt){return Dt(vt.tc,2)},"%n":function(){return`
|
|
`},"%p":function(vt){return 0<=vt.Ga&&12>vt.Ga?"AM":"PM"},"%S":function(vt){return Dt(vt.uc,2)},"%t":function(){return" "},"%u":function(vt){return vt.Ha||7},"%U":function(vt){var $n=new Date(vt.C+1900,0,1),Uo=$n.getDay()===0?$n:zP($n,7-$n.getDay());return 0>ur(Uo,vt=new Date(vt.C+1900,vt.fa,vt.sa))?Dt(Math.ceil((31-Uo.getDate()+(X5(YP(vt.getFullYear())?OP:JP,vt.getMonth()-1)-31)+vt.getDate())/7),2):ur(Uo,$n)===0?"01":"00"},"%V":function(vt){var $n=new Date(vt.C+1901,0,4),Uo=Wr(new Date(vt.C+1900,0,4));$n=Wr($n);var kc=zP(new Date(vt.C+1900,0,1),vt.Ia);return 0>ur(kc,Uo)?"53":0>=ur($n,kc)?"01":Dt(Math.ceil((Uo.getFullYear()<vt.C+1900?vt.Ia+32-Uo.getDate():vt.Ia+1-Uo.getDate())/7),2)},"%w":function(vt){return vt.Ha},"%W":function(vt){var $n=new Date(vt.C,0,1),Uo=$n.getDay()===1?$n:zP($n,$n.getDay()===0?1:7-$n.getDay()+1);return 0>ur(Uo,vt=new Date(vt.C+1900,vt.fa,vt.sa))?Dt(Math.ceil((31-Uo.getDate()+(X5(YP(vt.getFullYear())?OP:JP,vt.getMonth()-1)-31)+vt.getDate())/7),2):ur(Uo,$n)===0?"01":"00"},"%y":function(vt){return(vt.C+1900).toString().substring(2)},"%Y":function(vt){return vt.C+1900},"%z":function(vt){var $n=0<=(vt=vt.sc);return vt=Math.abs(vt)/60,($n?"+":"-")+("0000"+(vt/60*100+vt%60)).slice(-4)},"%Z":function(vt){return vt.vc},"%%":function(){return"%"}})0<=nt.indexOf(Xr)&&(nt=nt.replace(new RegExp(Xr,"g"),Ao[Xr](pt)));return(Xr=jP(nt,!1)).length>Pe?0:(J.set(Xr,xe),Xr.length-1)})(P,V,Z,re)},table:R},Rse=(function(){function P(xe){s.asm=xe.exports,Rt()}function V(xe){P(xe.instance)}function Z(xe){return(x||!u&&!g||typeof fetch!="function"||Bt(xn,"file://")?new Promise((function(Pe){Pe(Zo())})):fetch(xn,{credentials:"same-origin"}).then((function(Pe){if(!Pe.ok)throw"failed to load wasm binary file at '"+xn+"'";return Pe.arrayBuffer()})).catch((function(){return Zo()}))).then((function(Pe){return WebAssembly.instantiate(Pe,re)})).then(xe,(function(Pe){b("failed to asynchronously prepare wasm: "+Pe),Mt(Pe)}))}var re={env:wse,wasi_snapshot_preview1:wse};if(it(),s.instantiateWasm)try{return s.instantiateWasm(re,P)}catch(xe){return b("Module.instantiateWasm callback failed with error: "+xe),!1}return(function(){if(x||typeof WebAssembly.instantiateStreaming!="function"||Bt(xn,un)||Bt(xn,"file://")||typeof fetch!="function")return Z(V);fetch(xn,{credentials:"same-origin"}).then((function(xe){return WebAssembly.instantiateStreaming(xe,re).then(V,(function(Pe){b("wasm streaming compile failed: "+Pe),b("falling back to ArrayBuffer instantiation"),Z(V)}))}))})(),{}})();s.asm=Rse;var Use=s.___wasm_call_ctors=function(){return(Use=s.___wasm_call_ctors=s.asm.__wasm_call_ctors).apply(null,arguments)},Kw=s._malloc=function(){return(Kw=s._malloc=s.asm.malloc).apply(null,arguments)},Rf=s._free=function(){return(Rf=s._free=s.asm.free).apply(null,arguments)},Lse=s.___errno_location=function(){return(Lse=s.___errno_location=s.asm.__errno_location).apply(null,arguments)},Mi=s._setThrew=function(){return(Mi=s._setThrew=s.asm.setThrew).apply(null,arguments)},PS=s.__ZSt18uncaught_exceptionv=function(){return(PS=s.__ZSt18uncaught_exceptionv=s.asm._ZSt18uncaught_exceptionv).apply(null,arguments)},jw=s.___cxa_can_catch=function(){return(jw=s.___cxa_can_catch=s.asm.__cxa_can_catch).apply(null,arguments)},Ww=s.___cxa_is_pointer_type=function(){return(Ww=s.___cxa_is_pointer_type=s.asm.__cxa_is_pointer_type).apply(null,arguments)},Tse=s.___getTypeName=function(){return(Tse=s.___getTypeName=s.asm.__getTypeName).apply(null,arguments)};s.___embind_register_native_and_builtin_types=function(){return(s.___embind_register_native_and_builtin_types=s.asm.__embind_register_native_and_builtin_types).apply(null,arguments)};var Pse=s.dynCall_v=function(){return(Pse=s.dynCall_v=s.asm.dynCall_v).apply(null,arguments)},Gse=s.dynCall_vi=function(){return(Gse=s.dynCall_vi=s.asm.dynCall_vi).apply(null,arguments)},Nse=s.dynCall_vii=function(){return(Nse=s.dynCall_vii=s.asm.dynCall_vii).apply(null,arguments)},Mse=s.dynCall_viii=function(){return(Mse=s.dynCall_viii=s.asm.dynCall_viii).apply(null,arguments)},kse=s.dynCall_viiii=function(){return(kse=s.dynCall_viiii=s.asm.dynCall_viiii).apply(null,arguments)},Hse=s.dynCall_viiiii=function(){return(Hse=s.dynCall_viiiii=s.asm.dynCall_viiiii).apply(null,arguments)},Vse=s.dynCall_viiiiiii=function(){return(Vse=s.dynCall_viiiiiii=s.asm.dynCall_viiiiiii).apply(null,arguments)},_se=s.dynCall_viiiiiiiiii=function(){return(_se=s.dynCall_viiiiiiiiii=s.asm.dynCall_viiiiiiiiii).apply(null,arguments)},Yse=s.dynCall_viiiiiiiiiiiiiii=function(){return(Yse=s.dynCall_viiiiiiiiiiiiiii=s.asm.dynCall_viiiiiiiiiiiiiii).apply(null,arguments)},Ose=s.dynCall_viiiijji=function(){return(Ose=s.dynCall_viiiijji=s.asm.dynCall_viiiijji).apply(null,arguments)},Jse=s.dynCall_viijii=function(){return(Jse=s.dynCall_viijii=s.asm.dynCall_viijii).apply(null,arguments)},zse=s.dynCall_viji=function(){return(zse=s.dynCall_viji=s.asm.dynCall_viji).apply(null,arguments)},Kse=s.dynCall_i=function(){return(Kse=s.dynCall_i=s.asm.dynCall_i).apply(null,arguments)},jse=s.dynCall_ii=function(){return(jse=s.dynCall_ii=s.asm.dynCall_ii).apply(null,arguments)},Wse=s.dynCall_iii=function(){return(Wse=s.dynCall_iii=s.asm.dynCall_iii).apply(null,arguments)},Xse=s.dynCall_iiii=function(){return(Xse=s.dynCall_iiii=s.asm.dynCall_iiii).apply(null,arguments)},Zse=s.dynCall_iiiii=function(){return(Zse=s.dynCall_iiiii=s.asm.dynCall_iiiii).apply(null,arguments)},qse=s.dynCall_iiiiii=function(){return(qse=s.dynCall_iiiiii=s.asm.dynCall_iiiiii).apply(null,arguments)},$se=s.dynCall_iiiiiii=function(){return($se=s.dynCall_iiiiiii=s.asm.dynCall_iiiiiii).apply(null,arguments)},ece=s.dynCall_iiiiiiii=function(){return(ece=s.dynCall_iiiiiiii=s.asm.dynCall_iiiiiiii).apply(null,arguments)},tce=s.dynCall_iiiiiiiiiii=function(){return(tce=s.dynCall_iiiiiiiiiii=s.asm.dynCall_iiiiiiiiiii).apply(null,arguments)},rce=s.dynCall_iiiiiiiiiiii=function(){return(rce=s.dynCall_iiiiiiiiiiii=s.asm.dynCall_iiiiiiiiiiii).apply(null,arguments)},nce=s.dynCall_iiiiiiiiiiiii=function(){return(nce=s.dynCall_iiiiiiiiiiiii=s.asm.dynCall_iiiiiiiiiiiii).apply(null,arguments)},oce=s.dynCall_iiiiij=function(){return(oce=s.dynCall_iiiiij=s.asm.dynCall_iiiiij).apply(null,arguments)},ice=s.dynCall_iiiiid=function(){return(ice=s.dynCall_iiiiid=s.asm.dynCall_iiiiid).apply(null,arguments)},ace=s.dynCall_iiijiiiiii=function(){return(ace=s.dynCall_iiijiiiiii=s.asm.dynCall_iiijiiiiii).apply(null,arguments)},Ace=s.dynCall_iij=function(){return(Ace=s.dynCall_iij=s.asm.dynCall_iij).apply(null,arguments)},sce=s.dynCall_iif=function(){return(sce=s.dynCall_iif=s.asm.dynCall_iif).apply(null,arguments)},cce=s.dynCall_jii=function(){return(cce=s.dynCall_jii=s.asm.dynCall_jii).apply(null,arguments)},lce=s.dynCall_jiiii=function(){return(lce=s.dynCall_jiiii=s.asm.dynCall_jiiii).apply(null,arguments)},uce=s.dynCall_fiii=function(){return(uce=s.dynCall_fiii=s.asm.dynCall_fiii).apply(null,arguments)},gce=s.dynCall_diii=function(){return(gce=s.dynCall_diii=s.asm.dynCall_diii).apply(null,arguments)},Xi=s.stackSave=function(){return(Xi=s.stackSave=s.asm.stackSave).apply(null,arguments)};s.stackAlloc=function(){return(s.stackAlloc=s.asm.stackAlloc).apply(null,arguments)};var Xw,Zi=s.stackRestore=function(){return(Zi=s.stackRestore=s.asm.stackRestore).apply(null,arguments)};function Z5(){function P(){if(!Xw&&(Xw=!0,s.calledRun=!0,!T)){if(s.noFSInit||se.ka.Qa||se.ka(),pe(Be),se.ub=!1,pe(De),s.onRuntimeInitialized&&s.onRuntimeInitialized(),s.postRun)for(typeof s.postRun=="function"&&(s.postRun=[s.postRun]);s.postRun.length;){var V=s.postRun.shift();be.unshift(V)}pe(be)}}if(!(0<le)){if(s.preRun)for(typeof s.preRun=="function"&&(s.preRun=[s.preRun]);s.preRun.length;)Fe();pe(ye),0<le||(s.setStatus?(s.setStatus("Running..."),setTimeout((function(){setTimeout((function(){s.setStatus("")}),1),P()}),1)):P())}}if(s.__growWasmMemory=function(){return(s.__growWasmMemory=s.asm.__growWasmMemory).apply(null,arguments)},s.dynCall_iiijij=function(){return(s.dynCall_iiijij=s.asm.dynCall_iiijij).apply(null,arguments)},s.dynCall_jiji=function(){return(s.dynCall_jiji=s.asm.dynCall_jiji).apply(null,arguments)},s.dynCall_iidiiii=function(){return(s.dynCall_iidiiii=s.asm.dynCall_iidiiii).apply(null,arguments)},s.dynCall_iiiiiiiii=function(){return(s.dynCall_iiiiiiiii=s.asm.dynCall_iiiiiiiii).apply(null,arguments)},s.dynCall_iiiiijj=function(){return(s.dynCall_iiiiijj=s.asm.dynCall_iiiiijj).apply(null,arguments)},s.dynCall_iiiiiijj=function(){return(s.dynCall_iiiiiijj=s.asm.dynCall_iiiiiijj).apply(null,arguments)},s.dynCall_viiiiii=function(){return(s.dynCall_viiiiii=s.asm.dynCall_viiiiii).apply(null,arguments)},s.asm=Rse,s.FS=se,s.then=function(P){if(Xw)P(s);else{var V=s.onRuntimeInitialized;s.onRuntimeInitialized=function(){V&&V(),P(s)}}return s},tt=function P(){Xw||Z5(),Xw||(tt=P)},s.run=Z5,s.preInit)for(typeof s.preInit=="function"&&(s.preInit=[s.preInit]);0<s.preInit.length;)s.preInit.pop()();return Z5(),A});e.exports=a}).call(this,"/index.js","/")},function(e,t,r){"use strict";r.r(t),r.d(t,"createH264MP4Encoder",(function(){return A}));var n=r(1),o=function(s,c,l,u){return new(l||(l=Promise))((function(g,m){function p(I){try{f(u.next(I))}catch(C){m(C)}}function d(I){try{f(u.throw(I))}catch(C){m(C)}}function f(I){var C;I.done?g(I.value):(C=I.value,C instanceof l?C:new l((function(y){y(C)}))).then(p,d)}f((u=u.apply(s,c||[])).next())}))};let i=r.n(n)()(),a=new Promise(s=>{i.then(()=>{s()})}),A=()=>o(void 0,void 0,void 0,(function*(){yield a;let s=new i.H264MP4Encoder;return s.FS=i.FS,s}))},function(e,t){e.exports=$5("fs")},function(e,t){e.exports=$5("crypto")}])});var B_e=eu((hxo,f_e)=>{"use strict";var g_e=/\/\*[^*]*\*+([^/*][^*]*\*+)*\//g,sNt=/\n/g,cNt=/^\s*/,lNt=/^(\*?[-#/*\\\w]+(\[[0-9a-z_-]+\])?)\s*/,uNt=/^:\s*/,gNt=/^((?:'(?:\\'|.)*?'|"(?:\\"|.)*?"|\([^)]*?\)|[^};])+)/,mNt=/^[;\s]*/,dNt=/^\s+|\s+$/g,pNt=`
|
|
`,m_e="/",d_e="*",eS="",fNt="comment",BNt="declaration";function INt(e,t){if(typeof e!="string")throw new TypeError("First argument must be a string");if(!e)return[];t=t||{};var r=1,n=1;function o(p){var d=p.match(sNt);d&&(r+=d.length);var f=p.lastIndexOf(pNt);n=~f?p.length-f:n+p.length}function i(){var p={line:r,column:n};return function(d){return d.position=new a(p),c(),d}}function a(p){this.start=p,this.end={line:r,column:n},this.source=t.source}a.prototype.content=e;function A(p){var d=new Error(t.source+":"+r+":"+n+": "+p);if(d.reason=p,d.filename=t.source,d.line=r,d.column=n,d.source=e,!t.silent)throw d}function s(p){var d=p.exec(e);if(d){var f=d[0];return o(f),e=e.slice(f.length),d}}function c(){s(cNt)}function l(p){var d;for(p=p||[];d=u();)d!==!1&&p.push(d);return p}function u(){var p=i();if(!(m_e!=e.charAt(0)||d_e!=e.charAt(1))){for(var d=2;eS!=e.charAt(d)&&(d_e!=e.charAt(d)||m_e!=e.charAt(d+1));)++d;if(d+=2,eS===e.charAt(d-1))return A("End of comment missing");var f=e.slice(2,d-2);return n+=2,o(f),e=e.slice(d),n+=2,p({type:fNt,comment:f})}}function g(){var p=i(),d=s(lNt);if(d){if(u(),!s(uNt))return A("property missing ':'");var f=s(gNt),I=p({type:BNt,property:p_e(d[0].replace(g_e,eS)),value:f?p_e(f[0].replace(g_e,eS)):eS});return s(mNt),I}}function m(){var p=[];l(p);for(var d;d=g();)d!==!1&&(p.push(d),l(p));return p}return c(),m()}function p_e(e){return e?e.replace(dNt,eS):eS}f_e.exports=INt});var I_e=eu(xT=>{"use strict";var CNt=xT&&xT.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(xT,"__esModule",{value:!0});xT.default=yNt;var hNt=CNt(B_e());function yNt(e,t){let r=null;if(!e||typeof e!="string")return r;let n=(0,hNt.default)(e),o=typeof t=="function";return n.forEach(i=>{if(i.type!=="declaration")return;let{property:a,value:A}=i;o?t(a,A,i):A&&(r=r||{},r[a]=A)}),r}});var h_e=eu(s4=>{"use strict";Object.defineProperty(s4,"__esModule",{value:!0});s4.camelCase=void 0;var QNt=/^--[a-zA-Z0-9_-]+$/,ENt=/-([a-z])/g,bNt=/^[^-]+$/,xNt=/^-(webkit|moz|ms|o|khtml)-/,SNt=/^-(ms)-/,DNt=function(e){return!e||bNt.test(e)||QNt.test(e)},vNt=function(e,t){return t.toUpperCase()},C_e=function(e,t){return"".concat(t,"-")},FNt=function(e,t){return t===void 0&&(t={}),DNt(e)?e:(e=e.toLowerCase(),t.reactCompat?e=e.replace(SNt,C_e):e=e.replace(xNt,C_e),e.replace(ENt,vNt))};s4.camelCase=FNt});var Q_e=eu((Wne,y_e)=>{"use strict";var wNt=Wne&&Wne.__importDefault||function(e){return e&&e.__esModule?e:{default:e}},RNt=wNt(I_e()),UNt=h_e();function jne(e,t){var r={};return!e||typeof e!="string"||(0,RNt.default)(e,function(n,o){n&&o&&(r[(0,UNt.camelCase)(n,t)]=o)}),r}jne.default=jne;y_e.exports=jne});var KYe=eu((X1o,zYe)=>{"use strict";var U4=Object.prototype.hasOwnProperty,JYe=Object.prototype.toString,kYe=Object.defineProperty,HYe=Object.getOwnPropertyDescriptor,VYe=function(t){return typeof Array.isArray=="function"?Array.isArray(t):JYe.call(t)==="[object Array]"},_Ye=function(t){if(!t||JYe.call(t)!=="[object Object]")return!1;var r=U4.call(t,"constructor"),n=t.constructor&&t.constructor.prototype&&U4.call(t.constructor.prototype,"isPrototypeOf");if(t.constructor&&!r&&!n)return!1;var o;for(o in t);return typeof o>"u"||U4.call(t,o)},YYe=function(t,r){kYe&&r.name==="__proto__"?kYe(t,r.name,{enumerable:!0,configurable:!0,value:r.newValue,writable:!0}):t[r.name]=r.newValue},OYe=function(t,r){if(r==="__proto__")if(U4.call(t,r)){if(HYe)return HYe(t,r).value}else return;return t[r]};zYe.exports=function e(){var t,r,n,o,i,a,A=arguments[0],s=1,c=arguments.length,l=!1;for(typeof A=="boolean"&&(l=A,A=arguments[1]||{},s=2),(A==null||typeof A!="object"&&typeof A!="function")&&(A={});s<c;++s)if(t=arguments[s],t!=null)for(r in t)n=OYe(A,r),o=OYe(t,r),A!==o&&(l&&o&&(_Ye(o)||(i=VYe(o)))?(i?(i=!1,a=n&&VYe(n)?n:[]):a=n&&_Ye(n)?n:{},YYe(A,{name:r,newValue:e(l,a,o)})):typeof o<"u"&&YYe(A,{name:r,newValue:o}));return A}});var H4e=eu(IA=>{"use strict";function cae(e,t){var r=e.length;e.push(t);e:for(;0<r;){var n=r-1>>>1,o=e[n];if(0<vJ(o,t))e[n]=t,e[r]=o,r=n;else break e}}function MB(e){return e.length===0?null:e[0]}function wJ(e){if(e.length===0)return null;var t=e[0],r=e.pop();if(r!==t){e[0]=r;e:for(var n=0,o=e.length,i=o>>>1;n<i;){var a=2*(n+1)-1,A=e[a],s=a+1,c=e[s];if(0>vJ(A,r))s<o&&0>vJ(c,A)?(e[n]=c,e[s]=r,n=s):(e[n]=A,e[a]=r,n=a);else if(s<o&&0>vJ(c,r))e[n]=c,e[s]=r,n=s;else break e}}return t}function vJ(e,t){var r=e.sortIndex-t.sortIndex;return r!==0?r:e.id-t.id}typeof performance=="object"&&typeof performance.now=="function"?(R4e=performance,IA.unstable_now=function(){return R4e.now()}):(aae=Date,U4e=aae.now(),IA.unstable_now=function(){return aae.now()-U4e});var R4e,aae,U4e,MC=[],mb=[],U3t=1,bf=null,gg=3,RJ=!1,BS=!1,jT=!1,P4e=typeof setTimeout=="function"?setTimeout:null,G4e=typeof clearTimeout=="function"?clearTimeout:null,L4e=typeof setImmediate<"u"?setImmediate:null;typeof navigator<"u"&&navigator.scheduling!==void 0&&navigator.scheduling.isInputPending!==void 0&&navigator.scheduling.isInputPending.bind(navigator.scheduling);function lae(e){for(var t=MB(mb);t!==null;){if(t.callback===null)wJ(mb);else if(t.startTime<=e)wJ(mb),t.sortIndex=t.expirationTime,cae(MC,t);else break;t=MB(mb)}}function uae(e){if(jT=!1,lae(e),!BS)if(MB(MC)!==null)BS=!0,mae(gae);else{var t=MB(mb);t!==null&&dae(uae,t.startTime-e)}}function gae(e,t){BS=!1,jT&&(jT=!1,G4e(WT),WT=-1),RJ=!0;var r=gg;try{for(lae(t),bf=MB(MC);bf!==null&&(!(bf.expirationTime>t)||e&&!k4e());){var n=bf.callback;if(typeof n=="function"){bf.callback=null,gg=bf.priorityLevel;var o=n(bf.expirationTime<=t);t=IA.unstable_now(),typeof o=="function"?bf.callback=o:bf===MB(MC)&&wJ(MC),lae(t)}else wJ(MC);bf=MB(MC)}if(bf!==null)var i=!0;else{var a=MB(mb);a!==null&&dae(uae,a.startTime-t),i=!1}return i}finally{bf=null,gg=r,RJ=!1}}var UJ=!1,FJ=null,WT=-1,N4e=5,M4e=-1;function k4e(){return!(IA.unstable_now()-M4e<N4e)}function Aae(){if(FJ!==null){var e=IA.unstable_now();M4e=e;var t=!0;try{t=FJ(!0,e)}finally{t?KT():(UJ=!1,FJ=null)}}else UJ=!1}var KT;typeof L4e=="function"?KT=function(){L4e(Aae)}:typeof MessageChannel<"u"?(sae=new MessageChannel,T4e=sae.port2,sae.port1.onmessage=Aae,KT=function(){T4e.postMessage(null)}):KT=function(){P4e(Aae,0)};var sae,T4e;function mae(e){FJ=e,UJ||(UJ=!0,KT())}function dae(e,t){WT=P4e(function(){e(IA.unstable_now())},t)}IA.unstable_IdlePriority=5;IA.unstable_ImmediatePriority=1;IA.unstable_LowPriority=4;IA.unstable_NormalPriority=3;IA.unstable_Profiling=null;IA.unstable_UserBlockingPriority=2;IA.unstable_cancelCallback=function(e){e.callback=null};IA.unstable_continueExecution=function(){BS||RJ||(BS=!0,mae(gae))};IA.unstable_forceFrameRate=function(e){0>e||125<e?console.error("forceFrameRate takes a positive int between 0 and 125, forcing frame rates higher than 125 fps is not supported"):N4e=0<e?Math.floor(1e3/e):5};IA.unstable_getCurrentPriorityLevel=function(){return gg};IA.unstable_getFirstCallbackNode=function(){return MB(MC)};IA.unstable_next=function(e){switch(gg){case 1:case 2:case 3:var t=3;break;default:t=gg}var r=gg;gg=t;try{return e()}finally{gg=r}};IA.unstable_pauseExecution=function(){};IA.unstable_requestPaint=function(){};IA.unstable_runWithPriority=function(e,t){switch(e){case 1:case 2:case 3:case 4:case 5:break;default:e=3}var r=gg;gg=e;try{return t()}finally{gg=r}};IA.unstable_scheduleCallback=function(e,t,r){var n=IA.unstable_now();switch(typeof r=="object"&&r!==null?(r=r.delay,r=typeof r=="number"&&0<r?n+r:n):r=n,e){case 1:var o=-1;break;case 2:o=250;break;case 5:o=1073741823;break;case 4:o=1e4;break;default:o=5e3}return o=r+o,e={id:U3t++,callback:t,priorityLevel:e,startTime:r,expirationTime:o,sortIndex:-1},r>n?(e.sortIndex=r,cae(mb,e),MB(MC)===null&&e===MB(mb)&&(jT?(G4e(WT),WT=-1):jT=!0,dae(uae,r-n))):(e.sortIndex=o,cae(MC,e),BS||RJ||(BS=!0,mae(gae))),e};IA.unstable_shouldYield=k4e;IA.unstable_wrapCallback=function(e){var t=gg;return function(){var r=gg;gg=t;try{return e.apply(this,arguments)}finally{gg=r}}}});var _4e=eu((XHo,V4e)=>{"use strict";V4e.exports=H4e()});var zze=eu(Od=>{"use strict";var L3t=Qa(),_d=_4e();function wr(e){for(var t="https://reactjs.org/docs/error-decoder.html?invariant="+e,r=1;r<arguments.length;r++)t+="&args[]="+encodeURIComponent(arguments[r]);return"Minified React error #"+e+"; visit "+t+" for the full message or use the non-minified dev environment for full errors and additional helpful warnings."}var WJe=new Set,BP={};function wS(e,t){Pw(e,t),Pw(e+"Capture",t)}function Pw(e,t){for(BP[e]=t,e=0;e<t.length;e++)WJe.add(t[e])}var xy=!(typeof window>"u"||typeof window.document>"u"||typeof window.document.createElement>"u"),Nae=Object.prototype.hasOwnProperty,T3t=/^[:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD][:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD\-.0-9\u00B7\u0300-\u036F\u203F-\u2040]*$/,Y4e={},O4e={};function P3t(e){return Nae.call(O4e,e)?!0:Nae.call(Y4e,e)?!1:T3t.test(e)?O4e[e]=!0:(Y4e[e]=!0,!1)}function G3t(e,t,r,n){if(r!==null&&r.type===0)return!1;switch(typeof t){case"function":case"symbol":return!0;case"boolean":return n?!1:r!==null?!r.acceptsBooleans:(e=e.toLowerCase().slice(0,5),e!=="data-"&&e!=="aria-");default:return!1}}function N3t(e,t,r,n){if(t===null||typeof t>"u"||G3t(e,t,r,n))return!0;if(n)return!1;if(r!==null)switch(r.type){case 3:return!t;case 4:return t===!1;case 5:return isNaN(t);case 6:return isNaN(t)||1>t}return!1}function qg(e,t,r,n,o,i,a){this.acceptsBooleans=t===2||t===3||t===4,this.attributeName=n,this.attributeNamespace=o,this.mustUseProperty=r,this.propertyName=e,this.type=t,this.sanitizeURL=i,this.removeEmptyString=a}var Su={};"children dangerouslySetInnerHTML defaultValue defaultChecked innerHTML suppressContentEditableWarning suppressHydrationWarning style".split(" ").forEach(function(e){Su[e]=new qg(e,0,!1,e,null,!1,!1)});[["acceptCharset","accept-charset"],["className","class"],["htmlFor","for"],["httpEquiv","http-equiv"]].forEach(function(e){var t=e[0];Su[t]=new qg(t,1,!1,e[1],null,!1,!1)});["contentEditable","draggable","spellCheck","value"].forEach(function(e){Su[e]=new qg(e,2,!1,e.toLowerCase(),null,!1,!1)});["autoReverse","externalResourcesRequired","focusable","preserveAlpha"].forEach(function(e){Su[e]=new qg(e,2,!1,e,null,!1,!1)});"allowFullScreen async autoFocus autoPlay controls default defer disabled disablePictureInPicture disableRemotePlayback formNoValidate hidden loop noModule noValidate open playsInline readOnly required reversed scoped seamless itemScope".split(" ").forEach(function(e){Su[e]=new qg(e,3,!1,e.toLowerCase(),null,!1,!1)});["checked","multiple","muted","selected"].forEach(function(e){Su[e]=new qg(e,3,!0,e,null,!1,!1)});["capture","download"].forEach(function(e){Su[e]=new qg(e,4,!1,e,null,!1,!1)});["cols","rows","size","span"].forEach(function(e){Su[e]=new qg(e,6,!1,e,null,!1,!1)});["rowSpan","start"].forEach(function(e){Su[e]=new qg(e,5,!1,e.toLowerCase(),null,!1,!1)});var FAe=/[\-:]([a-z])/g;function wAe(e){return e[1].toUpperCase()}"accent-height alignment-baseline arabic-form baseline-shift cap-height clip-path clip-rule color-interpolation color-interpolation-filters color-profile color-rendering dominant-baseline enable-background fill-opacity fill-rule flood-color flood-opacity font-family font-size font-size-adjust font-stretch font-style font-variant font-weight glyph-name glyph-orientation-horizontal glyph-orientation-vertical horiz-adv-x horiz-origin-x image-rendering letter-spacing lighting-color marker-end marker-mid marker-start overline-position overline-thickness paint-order panose-1 pointer-events rendering-intent shape-rendering stop-color stop-opacity strikethrough-position strikethrough-thickness stroke-dasharray stroke-dashoffset stroke-linecap stroke-linejoin stroke-miterlimit stroke-opacity stroke-width text-anchor text-decoration text-rendering underline-position underline-thickness unicode-bidi unicode-range units-per-em v-alphabetic v-hanging v-ideographic v-mathematical vector-effect vert-adv-y vert-origin-x vert-origin-y word-spacing writing-mode xmlns:xlink x-height".split(" ").forEach(function(e){var t=e.replace(FAe,wAe);Su[t]=new qg(t,1,!1,e,null,!1,!1)});"xlink:actuate xlink:arcrole xlink:role xlink:show xlink:title xlink:type".split(" ").forEach(function(e){var t=e.replace(FAe,wAe);Su[t]=new qg(t,1,!1,e,"http://www.w3.org/1999/xlink",!1,!1)});["xml:base","xml:lang","xml:space"].forEach(function(e){var t=e.replace(FAe,wAe);Su[t]=new qg(t,1,!1,e,"http://www.w3.org/XML/1998/namespace",!1,!1)});["tabIndex","crossOrigin"].forEach(function(e){Su[e]=new qg(e,1,!1,e.toLowerCase(),null,!1,!1)});Su.xlinkHref=new qg("xlinkHref",1,!1,"xlink:href","http://www.w3.org/1999/xlink",!0,!1);["src","href","action","formAction"].forEach(function(e){Su[e]=new qg(e,1,!1,e.toLowerCase(),null,!0,!0)});function RAe(e,t,r,n){var o=Su.hasOwnProperty(t)?Su[t]:null;(o!==null?o.type!==0:n||!(2<t.length)||t[0]!=="o"&&t[0]!=="O"||t[1]!=="n"&&t[1]!=="N")&&(N3t(t,r,o,n)&&(r=null),n||o===null?P3t(t)&&(r===null?e.removeAttribute(t):e.setAttribute(t,""+r)):o.mustUseProperty?e[o.propertyName]=r===null?o.type===3?!1:"":r:(t=o.attributeName,n=o.attributeNamespace,r===null?e.removeAttribute(t):(o=o.type,r=o===3||o===4&&r===!0?"":""+r,n?e.setAttributeNS(n,t,r):e.setAttribute(t,r))))}var Fy=L3t.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED,LJ=Symbol.for("react.element"),Bw=Symbol.for("react.portal"),Iw=Symbol.for("react.fragment"),UAe=Symbol.for("react.strict_mode"),Mae=Symbol.for("react.profiler"),XJe=Symbol.for("react.provider"),ZJe=Symbol.for("react.context"),LAe=Symbol.for("react.forward_ref"),kae=Symbol.for("react.suspense"),Hae=Symbol.for("react.suspense_list"),TAe=Symbol.for("react.memo"),pb=Symbol.for("react.lazy"),qJe=Symbol.for("react.offscreen"),J4e=Symbol.iterator;function XT(e){return e===null||typeof e!="object"?null:(e=J4e&&e[J4e]||e["@@iterator"],typeof e=="function"?e:null)}var ys=Object.assign,pae;function oP(e){if(pae===void 0)try{throw Error()}catch(r){var t=r.stack.trim().match(/\n( *(at )?)/);pae=t&&t[1]||""}return`
|
|
`+pae+e}var fae=!1;function Bae(e,t){if(!e||fae)return"";fae=!0;var r=Error.prepareStackTrace;Error.prepareStackTrace=void 0;try{if(t)if(t=function(){throw Error()},Object.defineProperty(t.prototype,"props",{set:function(){throw Error()}}),typeof Reflect=="object"&&Reflect.construct){try{Reflect.construct(t,[])}catch(c){var n=c}Reflect.construct(e,[],t)}else{try{t.call()}catch(c){n=c}e.call(t.prototype)}else{try{throw Error()}catch(c){n=c}e()}}catch(c){if(c&&n&&typeof c.stack=="string"){for(var o=c.stack.split(`
|
|
`),i=n.stack.split(`
|
|
`),a=o.length-1,A=i.length-1;1<=a&&0<=A&&o[a]!==i[A];)A--;for(;1<=a&&0<=A;a--,A--)if(o[a]!==i[A]){if(a!==1||A!==1)do if(a--,A--,0>A||o[a]!==i[A]){var s=`
|
|
`+o[a].replace(" at new "," at ");return e.displayName&&s.includes("<anonymous>")&&(s=s.replace("<anonymous>",e.displayName)),s}while(1<=a&&0<=A);break}}}finally{fae=!1,Error.prepareStackTrace=r}return(e=e?e.displayName||e.name:"")?oP(e):""}function M3t(e){switch(e.tag){case 5:return oP(e.type);case 16:return oP("Lazy");case 13:return oP("Suspense");case 19:return oP("SuspenseList");case 0:case 2:case 15:return e=Bae(e.type,!1),e;case 11:return e=Bae(e.type.render,!1),e;case 1:return e=Bae(e.type,!0),e;default:return""}}function Vae(e){if(e==null)return null;if(typeof e=="function")return e.displayName||e.name||null;if(typeof e=="string")return e;switch(e){case Iw:return"Fragment";case Bw:return"Portal";case Mae:return"Profiler";case UAe:return"StrictMode";case kae:return"Suspense";case Hae:return"SuspenseList"}if(typeof e=="object")switch(e.$$typeof){case ZJe:return(e.displayName||"Context")+".Consumer";case XJe:return(e._context.displayName||"Context")+".Provider";case LAe:var t=e.render;return e=e.displayName,e||(e=t.displayName||t.name||"",e=e!==""?"ForwardRef("+e+")":"ForwardRef"),e;case TAe:return t=e.displayName||null,t!==null?t:Vae(e.type)||"Memo";case pb:t=e._payload,e=e._init;try{return Vae(e(t))}catch{}}return null}function k3t(e){var t=e.type;switch(e.tag){case 24:return"Cache";case 9:return(t.displayName||"Context")+".Consumer";case 10:return(t._context.displayName||"Context")+".Provider";case 18:return"DehydratedFragment";case 11:return e=t.render,e=e.displayName||e.name||"",t.displayName||(e!==""?"ForwardRef("+e+")":"ForwardRef");case 7:return"Fragment";case 5:return t;case 4:return"Portal";case 3:return"Root";case 6:return"Text";case 16:return Vae(t);case 8:return t===UAe?"StrictMode":"Mode";case 22:return"Offscreen";case 12:return"Profiler";case 21:return"Scope";case 13:return"Suspense";case 19:return"SuspenseList";case 25:return"TracingMarker";case 1:case 0:case 17:case 2:case 14:case 15:if(typeof t=="function")return t.displayName||t.name||null;if(typeof t=="string")return t}return null}function Fb(e){switch(typeof e){case"boolean":case"number":case"string":case"undefined":return e;case"object":return e;default:return""}}function $Je(e){var t=e.type;return(e=e.nodeName)&&e.toLowerCase()==="input"&&(t==="checkbox"||t==="radio")}function H3t(e){var t=$Je(e)?"checked":"value",r=Object.getOwnPropertyDescriptor(e.constructor.prototype,t),n=""+e[t];if(!e.hasOwnProperty(t)&&typeof r<"u"&&typeof r.get=="function"&&typeof r.set=="function"){var o=r.get,i=r.set;return Object.defineProperty(e,t,{configurable:!0,get:function(){return o.call(this)},set:function(a){n=""+a,i.call(this,a)}}),Object.defineProperty(e,t,{enumerable:r.enumerable}),{getValue:function(){return n},setValue:function(a){n=""+a},stopTracking:function(){e._valueTracker=null,delete e[t]}}}}function TJ(e){e._valueTracker||(e._valueTracker=H3t(e))}function e5e(e){if(!e)return!1;var t=e._valueTracker;if(!t)return!0;var r=t.getValue(),n="";return e&&(n=$Je(e)?e.checked?"true":"false":e.value),e=n,e!==r?(t.setValue(e),!0):!1}function s5(e){if(e=e||(typeof document<"u"?document:void 0),typeof e>"u")return null;try{return e.activeElement||e.body}catch{return e.body}}function _ae(e,t){var r=t.checked;return ys({},t,{defaultChecked:void 0,defaultValue:void 0,value:void 0,checked:r??e._wrapperState.initialChecked})}function z4e(e,t){var r=t.defaultValue==null?"":t.defaultValue,n=t.checked!=null?t.checked:t.defaultChecked;r=Fb(t.value!=null?t.value:r),e._wrapperState={initialChecked:n,initialValue:r,controlled:t.type==="checkbox"||t.type==="radio"?t.checked!=null:t.value!=null}}function t5e(e,t){t=t.checked,t!=null&&RAe(e,"checked",t,!1)}function Yae(e,t){t5e(e,t);var r=Fb(t.value),n=t.type;if(r!=null)n==="number"?(r===0&&e.value===""||e.value!=r)&&(e.value=""+r):e.value!==""+r&&(e.value=""+r);else if(n==="submit"||n==="reset"){e.removeAttribute("value");return}t.hasOwnProperty("value")?Oae(e,t.type,r):t.hasOwnProperty("defaultValue")&&Oae(e,t.type,Fb(t.defaultValue)),t.checked==null&&t.defaultChecked!=null&&(e.defaultChecked=!!t.defaultChecked)}function K4e(e,t,r){if(t.hasOwnProperty("value")||t.hasOwnProperty("defaultValue")){var n=t.type;if(!(n!=="submit"&&n!=="reset"||t.value!==void 0&&t.value!==null))return;t=""+e._wrapperState.initialValue,r||t===e.value||(e.value=t),e.defaultValue=t}r=e.name,r!==""&&(e.name=""),e.defaultChecked=!!e._wrapperState.initialChecked,r!==""&&(e.name=r)}function Oae(e,t,r){(t!=="number"||s5(e.ownerDocument)!==e)&&(r==null?e.defaultValue=""+e._wrapperState.initialValue:e.defaultValue!==""+r&&(e.defaultValue=""+r))}var iP=Array.isArray;function Fw(e,t,r,n){if(e=e.options,t){t={};for(var o=0;o<r.length;o++)t["$"+r[o]]=!0;for(r=0;r<e.length;r++)o=t.hasOwnProperty("$"+e[r].value),e[r].selected!==o&&(e[r].selected=o),o&&n&&(e[r].defaultSelected=!0)}else{for(r=""+Fb(r),t=null,o=0;o<e.length;o++){if(e[o].value===r){e[o].selected=!0,n&&(e[o].defaultSelected=!0);return}t!==null||e[o].disabled||(t=e[o])}t!==null&&(t.selected=!0)}}function Jae(e,t){if(t.dangerouslySetInnerHTML!=null)throw Error(wr(91));return ys({},t,{value:void 0,defaultValue:void 0,children:""+e._wrapperState.initialValue})}function j4e(e,t){var r=t.value;if(r==null){if(r=t.children,t=t.defaultValue,r!=null){if(t!=null)throw Error(wr(92));if(iP(r)){if(1<r.length)throw Error(wr(93));r=r[0]}t=r}t==null&&(t=""),r=t}e._wrapperState={initialValue:Fb(r)}}function r5e(e,t){var r=Fb(t.value),n=Fb(t.defaultValue);r!=null&&(r=""+r,r!==e.value&&(e.value=r),t.defaultValue==null&&e.defaultValue!==r&&(e.defaultValue=r)),n!=null&&(e.defaultValue=""+n)}function W4e(e){var t=e.textContent;t===e._wrapperState.initialValue&&t!==""&&t!==null&&(e.value=t)}function n5e(e){switch(e){case"svg":return"http://www.w3.org/2000/svg";case"math":return"http://www.w3.org/1998/Math/MathML";default:return"http://www.w3.org/1999/xhtml"}}function zae(e,t){return e==null||e==="http://www.w3.org/1999/xhtml"?n5e(t):e==="http://www.w3.org/2000/svg"&&t==="foreignObject"?"http://www.w3.org/1999/xhtml":e}var PJ,o5e=(function(e){return typeof MSApp<"u"&&MSApp.execUnsafeLocalFunction?function(t,r,n,o){MSApp.execUnsafeLocalFunction(function(){return e(t,r,n,o)})}:e})(function(e,t){if(e.namespaceURI!=="http://www.w3.org/2000/svg"||"innerHTML"in e)e.innerHTML=t;else{for(PJ=PJ||document.createElement("div"),PJ.innerHTML="<svg>"+t.valueOf().toString()+"</svg>",t=PJ.firstChild;e.firstChild;)e.removeChild(e.firstChild);for(;t.firstChild;)e.appendChild(t.firstChild)}});function IP(e,t){if(t){var r=e.firstChild;if(r&&r===e.lastChild&&r.nodeType===3){r.nodeValue=t;return}}e.textContent=t}var sP={animationIterationCount:!0,aspectRatio:!0,borderImageOutset:!0,borderImageSlice:!0,borderImageWidth:!0,boxFlex:!0,boxFlexGroup:!0,boxOrdinalGroup:!0,columnCount:!0,columns:!0,flex:!0,flexGrow:!0,flexPositive:!0,flexShrink:!0,flexNegative:!0,flexOrder:!0,gridArea:!0,gridRow:!0,gridRowEnd:!0,gridRowSpan:!0,gridRowStart:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnSpan:!0,gridColumnStart:!0,fontWeight:!0,lineClamp:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,tabSize:!0,widows:!0,zIndex:!0,zoom:!0,fillOpacity:!0,floodOpacity:!0,stopOpacity:!0,strokeDasharray:!0,strokeDashoffset:!0,strokeMiterlimit:!0,strokeOpacity:!0,strokeWidth:!0},V3t=["Webkit","ms","Moz","O"];Object.keys(sP).forEach(function(e){V3t.forEach(function(t){t=t+e.charAt(0).toUpperCase()+e.substring(1),sP[t]=sP[e]})});function i5e(e,t,r){return t==null||typeof t=="boolean"||t===""?"":r||typeof t!="number"||t===0||sP.hasOwnProperty(e)&&sP[e]?(""+t).trim():t+"px"}function a5e(e,t){e=e.style;for(var r in t)if(t.hasOwnProperty(r)){var n=r.indexOf("--")===0,o=i5e(r,t[r],n);r==="float"&&(r="cssFloat"),n?e.setProperty(r,o):e[r]=o}}var _3t=ys({menuitem:!0},{area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0});function Kae(e,t){if(t){if(_3t[e]&&(t.children!=null||t.dangerouslySetInnerHTML!=null))throw Error(wr(137,e));if(t.dangerouslySetInnerHTML!=null){if(t.children!=null)throw Error(wr(60));if(typeof t.dangerouslySetInnerHTML!="object"||!("__html"in t.dangerouslySetInnerHTML))throw Error(wr(61))}if(t.style!=null&&typeof t.style!="object")throw Error(wr(62))}}function jae(e,t){if(e.indexOf("-")===-1)return typeof t.is=="string";switch(e){case"annotation-xml":case"color-profile":case"font-face":case"font-face-src":case"font-face-uri":case"font-face-format":case"font-face-name":case"missing-glyph":return!1;default:return!0}}var Wae=null;function PAe(e){return e=e.target||e.srcElement||window,e.correspondingUseElement&&(e=e.correspondingUseElement),e.nodeType===3?e.parentNode:e}var Xae=null,ww=null,Rw=null;function X4e(e){if(e=GP(e)){if(typeof Xae!="function")throw Error(wr(280));var t=e.stateNode;t&&(t=G5(t),Xae(e.stateNode,e.type,t))}}function A5e(e){ww?Rw?Rw.push(e):Rw=[e]:ww=e}function s5e(){if(ww){var e=ww,t=Rw;if(Rw=ww=null,X4e(e),t)for(e=0;e<t.length;e++)X4e(t[e])}}function c5e(e,t){return e(t)}function l5e(){}var Iae=!1;function u5e(e,t,r){if(Iae)return e(t,r);Iae=!0;try{return c5e(e,t,r)}finally{Iae=!1,(ww!==null||Rw!==null)&&(l5e(),s5e())}}function CP(e,t){var r=e.stateNode;if(r===null)return null;var n=G5(r);if(n===null)return null;r=n[t];e:switch(t){case"onClick":case"onClickCapture":case"onDoubleClick":case"onDoubleClickCapture":case"onMouseDown":case"onMouseDownCapture":case"onMouseMove":case"onMouseMoveCapture":case"onMouseUp":case"onMouseUpCapture":case"onMouseEnter":(n=!n.disabled)||(e=e.type,n=!(e==="button"||e==="input"||e==="select"||e==="textarea")),e=!n;break e;default:e=!1}if(e)return null;if(r&&typeof r!="function")throw Error(wr(231,t,typeof r));return r}var Zae=!1;if(xy)try{pw={},Object.defineProperty(pw,"passive",{get:function(){Zae=!0}}),window.addEventListener("test",pw,pw),window.removeEventListener("test",pw,pw)}catch{Zae=!1}var pw;function Y3t(e,t,r,n,o,i,a,A,s){var c=Array.prototype.slice.call(arguments,3);try{t.apply(r,c)}catch(l){this.onError(l)}}var cP=!1,c5=null,l5=!1,qae=null,O3t={onError:function(e){cP=!0,c5=e}};function J3t(e,t,r,n,o,i,a,A,s){cP=!1,c5=null,Y3t.apply(O3t,arguments)}function z3t(e,t,r,n,o,i,a,A,s){if(J3t.apply(this,arguments),cP){if(cP){var c=c5;cP=!1,c5=null}else throw Error(wr(198));l5||(l5=!0,qae=c)}}function RS(e){var t=e,r=e;if(e.alternate)for(;t.return;)t=t.return;else{e=t;do t=e,(t.flags&4098)!==0&&(r=t.return),e=t.return;while(e)}return t.tag===3?r:null}function g5e(e){if(e.tag===13){var t=e.memoizedState;if(t===null&&(e=e.alternate,e!==null&&(t=e.memoizedState)),t!==null)return t.dehydrated}return null}function Z4e(e){if(RS(e)!==e)throw Error(wr(188))}function K3t(e){var t=e.alternate;if(!t){if(t=RS(e),t===null)throw Error(wr(188));return t!==e?null:e}for(var r=e,n=t;;){var o=r.return;if(o===null)break;var i=o.alternate;if(i===null){if(n=o.return,n!==null){r=n;continue}break}if(o.child===i.child){for(i=o.child;i;){if(i===r)return Z4e(o),e;if(i===n)return Z4e(o),t;i=i.sibling}throw Error(wr(188))}if(r.return!==n.return)r=o,n=i;else{for(var a=!1,A=o.child;A;){if(A===r){a=!0,r=o,n=i;break}if(A===n){a=!0,n=o,r=i;break}A=A.sibling}if(!a){for(A=i.child;A;){if(A===r){a=!0,r=i,n=o;break}if(A===n){a=!0,n=i,r=o;break}A=A.sibling}if(!a)throw Error(wr(189))}}if(r.alternate!==n)throw Error(wr(190))}if(r.tag!==3)throw Error(wr(188));return r.stateNode.current===r?e:t}function m5e(e){return e=K3t(e),e!==null?d5e(e):null}function d5e(e){if(e.tag===5||e.tag===6)return e;for(e=e.child;e!==null;){var t=d5e(e);if(t!==null)return t;e=e.sibling}return null}var p5e=_d.unstable_scheduleCallback,q4e=_d.unstable_cancelCallback,j3t=_d.unstable_shouldYield,W3t=_d.unstable_requestPaint,cc=_d.unstable_now,X3t=_d.unstable_getCurrentPriorityLevel,GAe=_d.unstable_ImmediatePriority,f5e=_d.unstable_UserBlockingPriority,u5=_d.unstable_NormalPriority,Z3t=_d.unstable_LowPriority,B5e=_d.unstable_IdlePriority,U5=null,_C=null;function q3t(e){if(_C&&typeof _C.onCommitFiberRoot=="function")try{_C.onCommitFiberRoot(U5,e,void 0,(e.current.flags&128)===128)}catch{}}var YB=Math.clz32?Math.clz32:t_t,$3t=Math.log,e_t=Math.LN2;function t_t(e){return e>>>=0,e===0?32:31-($3t(e)/e_t|0)|0}var GJ=64,NJ=4194304;function aP(e){switch(e&-e){case 1:return 1;case 2:return 2;case 4:return 4;case 8:return 8;case 16:return 16;case 32:return 32;case 64:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return e&4194240;case 4194304:case 8388608:case 16777216:case 33554432:case 67108864:return e&130023424;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 1073741824;default:return e}}function g5(e,t){var r=e.pendingLanes;if(r===0)return 0;var n=0,o=e.suspendedLanes,i=e.pingedLanes,a=r&268435455;if(a!==0){var A=a&~o;A!==0?n=aP(A):(i&=a,i!==0&&(n=aP(i)))}else a=r&~o,a!==0?n=aP(a):i!==0&&(n=aP(i));if(n===0)return 0;if(t!==0&&t!==n&&(t&o)===0&&(o=n&-n,i=t&-t,o>=i||o===16&&(i&4194240)!==0))return t;if((n&4)!==0&&(n|=r&16),t=e.entangledLanes,t!==0)for(e=e.entanglements,t&=n;0<t;)r=31-YB(t),o=1<<r,n|=e[r],t&=~o;return n}function r_t(e,t){switch(e){case 1:case 2:case 4:return t+250;case 8:case 16:case 32:case 64:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return t+5e3;case 4194304:case 8388608:case 16777216:case 33554432:case 67108864:return-1;case 134217728:case 268435456:case 536870912:case 1073741824:return-1;default:return-1}}function n_t(e,t){for(var r=e.suspendedLanes,n=e.pingedLanes,o=e.expirationTimes,i=e.pendingLanes;0<i;){var a=31-YB(i),A=1<<a,s=o[a];s===-1?((A&r)===0||(A&n)!==0)&&(o[a]=r_t(A,t)):s<=t&&(e.expiredLanes|=A),i&=~A}}function $ae(e){return e=e.pendingLanes&-1073741825,e!==0?e:e&1073741824?1073741824:0}function I5e(){var e=GJ;return GJ<<=1,(GJ&4194240)===0&&(GJ=64),e}function Cae(e){for(var t=[],r=0;31>r;r++)t.push(e);return t}function TP(e,t,r){e.pendingLanes|=t,t!==536870912&&(e.suspendedLanes=0,e.pingedLanes=0),e=e.eventTimes,t=31-YB(t),e[t]=r}function o_t(e,t){var r=e.pendingLanes&~t;e.pendingLanes=t,e.suspendedLanes=0,e.pingedLanes=0,e.expiredLanes&=t,e.mutableReadLanes&=t,e.entangledLanes&=t,t=e.entanglements;var n=e.eventTimes;for(e=e.expirationTimes;0<r;){var o=31-YB(r),i=1<<o;t[o]=0,n[o]=-1,e[o]=-1,r&=~i}}function NAe(e,t){var r=e.entangledLanes|=t;for(e=e.entanglements;r;){var n=31-YB(r),o=1<<n;o&t|e[n]&t&&(e[n]|=t),r&=~o}}var Ma=0;function C5e(e){return e&=-e,1<e?4<e?(e&268435455)!==0?16:536870912:4:1}var h5e,MAe,y5e,Q5e,E5e,eAe=!1,MJ=[],yb=null,Qb=null,Eb=null,hP=new Map,yP=new Map,Bb=[],i_t="mousedown mouseup touchcancel touchend touchstart auxclick dblclick pointercancel pointerdown pointerup dragend dragstart drop compositionend compositionstart keydown keypress keyup input textInput copy cut paste click change contextmenu reset submit".split(" ");function $4e(e,t){switch(e){case"focusin":case"focusout":yb=null;break;case"dragenter":case"dragleave":Qb=null;break;case"mouseover":case"mouseout":Eb=null;break;case"pointerover":case"pointerout":hP.delete(t.pointerId);break;case"gotpointercapture":case"lostpointercapture":yP.delete(t.pointerId)}}function ZT(e,t,r,n,o,i){return e===null||e.nativeEvent!==i?(e={blockedOn:t,domEventName:r,eventSystemFlags:n,nativeEvent:i,targetContainers:[o]},t!==null&&(t=GP(t),t!==null&&MAe(t)),e):(e.eventSystemFlags|=n,t=e.targetContainers,o!==null&&t.indexOf(o)===-1&&t.push(o),e)}function a_t(e,t,r,n,o){switch(t){case"focusin":return yb=ZT(yb,e,t,r,n,o),!0;case"dragenter":return Qb=ZT(Qb,e,t,r,n,o),!0;case"mouseover":return Eb=ZT(Eb,e,t,r,n,o),!0;case"pointerover":var i=o.pointerId;return hP.set(i,ZT(hP.get(i)||null,e,t,r,n,o)),!0;case"gotpointercapture":return i=o.pointerId,yP.set(i,ZT(yP.get(i)||null,e,t,r,n,o)),!0}return!1}function b5e(e){var t=hS(e.target);if(t!==null){var r=RS(t);if(r!==null){if(t=r.tag,t===13){if(t=g5e(r),t!==null){e.blockedOn=t,E5e(e.priority,function(){y5e(r)});return}}else if(t===3&&r.stateNode.current.memoizedState.isDehydrated){e.blockedOn=r.tag===3?r.stateNode.containerInfo:null;return}}}e.blockedOn=null}function qJ(e){if(e.blockedOn!==null)return!1;for(var t=e.targetContainers;0<t.length;){var r=tAe(e.domEventName,e.eventSystemFlags,t[0],e.nativeEvent);if(r===null){r=e.nativeEvent;var n=new r.constructor(r.type,r);Wae=n,r.target.dispatchEvent(n),Wae=null}else return t=GP(r),t!==null&&MAe(t),e.blockedOn=r,!1;t.shift()}return!0}function eJe(e,t,r){qJ(e)&&r.delete(t)}function A_t(){eAe=!1,yb!==null&&qJ(yb)&&(yb=null),Qb!==null&&qJ(Qb)&&(Qb=null),Eb!==null&&qJ(Eb)&&(Eb=null),hP.forEach(eJe),yP.forEach(eJe)}function qT(e,t){e.blockedOn===t&&(e.blockedOn=null,eAe||(eAe=!0,_d.unstable_scheduleCallback(_d.unstable_NormalPriority,A_t)))}function QP(e){function t(o){return qT(o,e)}if(0<MJ.length){qT(MJ[0],e);for(var r=1;r<MJ.length;r++){var n=MJ[r];n.blockedOn===e&&(n.blockedOn=null)}}for(yb!==null&&qT(yb,e),Qb!==null&&qT(Qb,e),Eb!==null&&qT(Eb,e),hP.forEach(t),yP.forEach(t),r=0;r<Bb.length;r++)n=Bb[r],n.blockedOn===e&&(n.blockedOn=null);for(;0<Bb.length&&(r=Bb[0],r.blockedOn===null);)b5e(r),r.blockedOn===null&&Bb.shift()}var Uw=Fy.ReactCurrentBatchConfig,m5=!0;function s_t(e,t,r,n){var o=Ma,i=Uw.transition;Uw.transition=null;try{Ma=1,kAe(e,t,r,n)}finally{Ma=o,Uw.transition=i}}function c_t(e,t,r,n){var o=Ma,i=Uw.transition;Uw.transition=null;try{Ma=4,kAe(e,t,r,n)}finally{Ma=o,Uw.transition=i}}function kAe(e,t,r,n){if(m5){var o=tAe(e,t,r,n);if(o===null)Sae(e,t,n,d5,r),$4e(e,n);else if(a_t(o,e,t,r,n))n.stopPropagation();else if($4e(e,n),t&4&&-1<i_t.indexOf(e)){for(;o!==null;){var i=GP(o);if(i!==null&&h5e(i),i=tAe(e,t,r,n),i===null&&Sae(e,t,n,d5,r),i===o)break;o=i}o!==null&&n.stopPropagation()}else Sae(e,t,n,null,r)}}var d5=null;function tAe(e,t,r,n){if(d5=null,e=PAe(n),e=hS(e),e!==null)if(t=RS(e),t===null)e=null;else if(r=t.tag,r===13){if(e=g5e(t),e!==null)return e;e=null}else if(r===3){if(t.stateNode.current.memoizedState.isDehydrated)return t.tag===3?t.stateNode.containerInfo:null;e=null}else t!==e&&(e=null);return d5=e,null}function x5e(e){switch(e){case"cancel":case"click":case"close":case"contextmenu":case"copy":case"cut":case"auxclick":case"dblclick":case"dragend":case"dragstart":case"drop":case"focusin":case"focusout":case"input":case"invalid":case"keydown":case"keypress":case"keyup":case"mousedown":case"mouseup":case"paste":case"pause":case"play":case"pointercancel":case"pointerdown":case"pointerup":case"ratechange":case"reset":case"resize":case"seeked":case"submit":case"touchcancel":case"touchend":case"touchstart":case"volumechange":case"change":case"selectionchange":case"textInput":case"compositionstart":case"compositionend":case"compositionupdate":case"beforeblur":case"afterblur":case"beforeinput":case"blur":case"fullscreenchange":case"focus":case"hashchange":case"popstate":case"select":case"selectstart":return 1;case"drag":case"dragenter":case"dragexit":case"dragleave":case"dragover":case"mousemove":case"mouseout":case"mouseover":case"pointermove":case"pointerout":case"pointerover":case"scroll":case"toggle":case"touchmove":case"wheel":case"mouseenter":case"mouseleave":case"pointerenter":case"pointerleave":return 4;case"message":switch(X3t()){case GAe:return 1;case f5e:return 4;case u5:case Z3t:return 16;case B5e:return 536870912;default:return 16}default:return 16}}var Cb=null,HAe=null,$J=null;function S5e(){if($J)return $J;var e,t=HAe,r=t.length,n,o="value"in Cb?Cb.value:Cb.textContent,i=o.length;for(e=0;e<r&&t[e]===o[e];e++);var a=r-e;for(n=1;n<=a&&t[r-n]===o[i-n];n++);return $J=o.slice(e,1<n?1-n:void 0)}function e5(e){var t=e.keyCode;return"charCode"in e?(e=e.charCode,e===0&&t===13&&(e=13)):e=t,e===10&&(e=13),32<=e||e===13?e:0}function kJ(){return!0}function tJe(){return!1}function Yd(e){function t(r,n,o,i,a){this._reactName=r,this._targetInst=o,this.type=n,this.nativeEvent=i,this.target=a,this.currentTarget=null;for(var A in e)e.hasOwnProperty(A)&&(r=e[A],this[A]=r?r(i):i[A]);return this.isDefaultPrevented=(i.defaultPrevented!=null?i.defaultPrevented:i.returnValue===!1)?kJ:tJe,this.isPropagationStopped=tJe,this}return ys(t.prototype,{preventDefault:function(){this.defaultPrevented=!0;var r=this.nativeEvent;r&&(r.preventDefault?r.preventDefault():typeof r.returnValue!="unknown"&&(r.returnValue=!1),this.isDefaultPrevented=kJ)},stopPropagation:function(){var r=this.nativeEvent;r&&(r.stopPropagation?r.stopPropagation():typeof r.cancelBubble!="unknown"&&(r.cancelBubble=!0),this.isPropagationStopped=kJ)},persist:function(){},isPersistent:kJ}),t}var _w={eventPhase:0,bubbles:0,cancelable:0,timeStamp:function(e){return e.timeStamp||Date.now()},defaultPrevented:0,isTrusted:0},VAe=Yd(_w),PP=ys({},_w,{view:0,detail:0}),l_t=Yd(PP),hae,yae,$T,L5=ys({},PP,{screenX:0,screenY:0,clientX:0,clientY:0,pageX:0,pageY:0,ctrlKey:0,shiftKey:0,altKey:0,metaKey:0,getModifierState:_Ae,button:0,buttons:0,relatedTarget:function(e){return e.relatedTarget===void 0?e.fromElement===e.srcElement?e.toElement:e.fromElement:e.relatedTarget},movementX:function(e){return"movementX"in e?e.movementX:(e!==$T&&($T&&e.type==="mousemove"?(hae=e.screenX-$T.screenX,yae=e.screenY-$T.screenY):yae=hae=0,$T=e),hae)},movementY:function(e){return"movementY"in e?e.movementY:yae}}),rJe=Yd(L5),u_t=ys({},L5,{dataTransfer:0}),g_t=Yd(u_t),m_t=ys({},PP,{relatedTarget:0}),Qae=Yd(m_t),d_t=ys({},_w,{animationName:0,elapsedTime:0,pseudoElement:0}),p_t=Yd(d_t),f_t=ys({},_w,{clipboardData:function(e){return"clipboardData"in e?e.clipboardData:window.clipboardData}}),B_t=Yd(f_t),I_t=ys({},_w,{data:0}),nJe=Yd(I_t),C_t={Esc:"Escape",Spacebar:" ",Left:"ArrowLeft",Up:"ArrowUp",Right:"ArrowRight",Down:"ArrowDown",Del:"Delete",Win:"OS",Menu:"ContextMenu",Apps:"ContextMenu",Scroll:"ScrollLock",MozPrintableKey:"Unidentified"},h_t={8:"Backspace",9:"Tab",12:"Clear",13:"Enter",16:"Shift",17:"Control",18:"Alt",19:"Pause",20:"CapsLock",27:"Escape",32:" ",33:"PageUp",34:"PageDown",35:"End",36:"Home",37:"ArrowLeft",38:"ArrowUp",39:"ArrowRight",40:"ArrowDown",45:"Insert",46:"Delete",112:"F1",113:"F2",114:"F3",115:"F4",116:"F5",117:"F6",118:"F7",119:"F8",120:"F9",121:"F10",122:"F11",123:"F12",144:"NumLock",145:"ScrollLock",224:"Meta"},y_t={Alt:"altKey",Control:"ctrlKey",Meta:"metaKey",Shift:"shiftKey"};function Q_t(e){var t=this.nativeEvent;return t.getModifierState?t.getModifierState(e):(e=y_t[e])?!!t[e]:!1}function _Ae(){return Q_t}var E_t=ys({},PP,{key:function(e){if(e.key){var t=C_t[e.key]||e.key;if(t!=="Unidentified")return t}return e.type==="keypress"?(e=e5(e),e===13?"Enter":String.fromCharCode(e)):e.type==="keydown"||e.type==="keyup"?h_t[e.keyCode]||"Unidentified":""},code:0,location:0,ctrlKey:0,shiftKey:0,altKey:0,metaKey:0,repeat:0,locale:0,getModifierState:_Ae,charCode:function(e){return e.type==="keypress"?e5(e):0},keyCode:function(e){return e.type==="keydown"||e.type==="keyup"?e.keyCode:0},which:function(e){return e.type==="keypress"?e5(e):e.type==="keydown"||e.type==="keyup"?e.keyCode:0}}),b_t=Yd(E_t),x_t=ys({},L5,{pointerId:0,width:0,height:0,pressure:0,tangentialPressure:0,tiltX:0,tiltY:0,twist:0,pointerType:0,isPrimary:0}),oJe=Yd(x_t),S_t=ys({},PP,{touches:0,targetTouches:0,changedTouches:0,altKey:0,metaKey:0,ctrlKey:0,shiftKey:0,getModifierState:_Ae}),D_t=Yd(S_t),v_t=ys({},_w,{propertyName:0,elapsedTime:0,pseudoElement:0}),F_t=Yd(v_t),w_t=ys({},L5,{deltaX:function(e){return"deltaX"in e?e.deltaX:"wheelDeltaX"in e?-e.wheelDeltaX:0},deltaY:function(e){return"deltaY"in e?e.deltaY:"wheelDeltaY"in e?-e.wheelDeltaY:"wheelDelta"in e?-e.wheelDelta:0},deltaZ:0,deltaMode:0}),R_t=Yd(w_t),U_t=[9,13,27,32],YAe=xy&&"CompositionEvent"in window,lP=null;xy&&"documentMode"in document&&(lP=document.documentMode);var L_t=xy&&"TextEvent"in window&&!lP,D5e=xy&&(!YAe||lP&&8<lP&&11>=lP),iJe=" ",aJe=!1;function v5e(e,t){switch(e){case"keyup":return U_t.indexOf(t.keyCode)!==-1;case"keydown":return t.keyCode!==229;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function F5e(e){return e=e.detail,typeof e=="object"&&"data"in e?e.data:null}var Cw=!1;function T_t(e,t){switch(e){case"compositionend":return F5e(t);case"keypress":return t.which!==32?null:(aJe=!0,iJe);case"textInput":return e=t.data,e===iJe&&aJe?null:e;default:return null}}function P_t(e,t){if(Cw)return e==="compositionend"||!YAe&&v5e(e,t)?(e=S5e(),$J=HAe=Cb=null,Cw=!1,e):null;switch(e){case"paste":return null;case"keypress":if(!(t.ctrlKey||t.altKey||t.metaKey)||t.ctrlKey&&t.altKey){if(t.char&&1<t.char.length)return t.char;if(t.which)return String.fromCharCode(t.which)}return null;case"compositionend":return D5e&&t.locale!=="ko"?null:t.data;default:return null}}var G_t={color:!0,date:!0,datetime:!0,"datetime-local":!0,email:!0,month:!0,number:!0,password:!0,range:!0,search:!0,tel:!0,text:!0,time:!0,url:!0,week:!0};function AJe(e){var t=e&&e.nodeName&&e.nodeName.toLowerCase();return t==="input"?!!G_t[e.type]:t==="textarea"}function w5e(e,t,r,n){A5e(n),t=p5(t,"onChange"),0<t.length&&(r=new VAe("onChange","change",null,r,n),e.push({event:r,listeners:t}))}var uP=null,EP=null;function N_t(e){V5e(e,0)}function T5(e){var t=Qw(e);if(e5e(t))return e}function M_t(e,t){if(e==="change")return t}var R5e=!1;xy&&(xy?(VJ="oninput"in document,VJ||(Eae=document.createElement("div"),Eae.setAttribute("oninput","return;"),VJ=typeof Eae.oninput=="function"),HJ=VJ):HJ=!1,R5e=HJ&&(!document.documentMode||9<document.documentMode));var HJ,VJ,Eae;function sJe(){uP&&(uP.detachEvent("onpropertychange",U5e),EP=uP=null)}function U5e(e){if(e.propertyName==="value"&&T5(EP)){var t=[];w5e(t,EP,e,PAe(e)),u5e(N_t,t)}}function k_t(e,t,r){e==="focusin"?(sJe(),uP=t,EP=r,uP.attachEvent("onpropertychange",U5e)):e==="focusout"&&sJe()}function H_t(e){if(e==="selectionchange"||e==="keyup"||e==="keydown")return T5(EP)}function V_t(e,t){if(e==="click")return T5(t)}function __t(e,t){if(e==="input"||e==="change")return T5(t)}function Y_t(e,t){return e===t&&(e!==0||1/e===1/t)||e!==e&&t!==t}var JB=typeof Object.is=="function"?Object.is:Y_t;function bP(e,t){if(JB(e,t))return!0;if(typeof e!="object"||e===null||typeof t!="object"||t===null)return!1;var r=Object.keys(e),n=Object.keys(t);if(r.length!==n.length)return!1;for(n=0;n<r.length;n++){var o=r[n];if(!Nae.call(t,o)||!JB(e[o],t[o]))return!1}return!0}function cJe(e){for(;e&&e.firstChild;)e=e.firstChild;return e}function lJe(e,t){var r=cJe(e);e=0;for(var n;r;){if(r.nodeType===3){if(n=e+r.textContent.length,e<=t&&n>=t)return{node:r,offset:t-e};e=n}e:{for(;r;){if(r.nextSibling){r=r.nextSibling;break e}r=r.parentNode}r=void 0}r=cJe(r)}}function L5e(e,t){return e&&t?e===t?!0:e&&e.nodeType===3?!1:t&&t.nodeType===3?L5e(e,t.parentNode):"contains"in e?e.contains(t):e.compareDocumentPosition?!!(e.compareDocumentPosition(t)&16):!1:!1}function T5e(){for(var e=window,t=s5();t instanceof e.HTMLIFrameElement;){try{var r=typeof t.contentWindow.location.href=="string"}catch{r=!1}if(r)e=t.contentWindow;else break;t=s5(e.document)}return t}function OAe(e){var t=e&&e.nodeName&&e.nodeName.toLowerCase();return t&&(t==="input"&&(e.type==="text"||e.type==="search"||e.type==="tel"||e.type==="url"||e.type==="password")||t==="textarea"||e.contentEditable==="true")}function O_t(e){var t=T5e(),r=e.focusedElem,n=e.selectionRange;if(t!==r&&r&&r.ownerDocument&&L5e(r.ownerDocument.documentElement,r)){if(n!==null&&OAe(r)){if(t=n.start,e=n.end,e===void 0&&(e=t),"selectionStart"in r)r.selectionStart=t,r.selectionEnd=Math.min(e,r.value.length);else if(e=(t=r.ownerDocument||document)&&t.defaultView||window,e.getSelection){e=e.getSelection();var o=r.textContent.length,i=Math.min(n.start,o);n=n.end===void 0?i:Math.min(n.end,o),!e.extend&&i>n&&(o=n,n=i,i=o),o=lJe(r,i);var a=lJe(r,n);o&&a&&(e.rangeCount!==1||e.anchorNode!==o.node||e.anchorOffset!==o.offset||e.focusNode!==a.node||e.focusOffset!==a.offset)&&(t=t.createRange(),t.setStart(o.node,o.offset),e.removeAllRanges(),i>n?(e.addRange(t),e.extend(a.node,a.offset)):(t.setEnd(a.node,a.offset),e.addRange(t)))}}for(t=[],e=r;e=e.parentNode;)e.nodeType===1&&t.push({element:e,left:e.scrollLeft,top:e.scrollTop});for(typeof r.focus=="function"&&r.focus(),r=0;r<t.length;r++)e=t[r],e.element.scrollLeft=e.left,e.element.scrollTop=e.top}}var J_t=xy&&"documentMode"in document&&11>=document.documentMode,hw=null,rAe=null,gP=null,nAe=!1;function uJe(e,t,r){var n=r.window===r?r.document:r.nodeType===9?r:r.ownerDocument;nAe||hw==null||hw!==s5(n)||(n=hw,"selectionStart"in n&&OAe(n)?n={start:n.selectionStart,end:n.selectionEnd}:(n=(n.ownerDocument&&n.ownerDocument.defaultView||window).getSelection(),n={anchorNode:n.anchorNode,anchorOffset:n.anchorOffset,focusNode:n.focusNode,focusOffset:n.focusOffset}),gP&&bP(gP,n)||(gP=n,n=p5(rAe,"onSelect"),0<n.length&&(t=new VAe("onSelect","select",null,t,r),e.push({event:t,listeners:n}),t.target=hw)))}function _J(e,t){var r={};return r[e.toLowerCase()]=t.toLowerCase(),r["Webkit"+e]="webkit"+t,r["Moz"+e]="moz"+t,r}var yw={animationend:_J("Animation","AnimationEnd"),animationiteration:_J("Animation","AnimationIteration"),animationstart:_J("Animation","AnimationStart"),transitionend:_J("Transition","TransitionEnd")},bae={},P5e={};xy&&(P5e=document.createElement("div").style,"AnimationEvent"in window||(delete yw.animationend.animation,delete yw.animationiteration.animation,delete yw.animationstart.animation),"TransitionEvent"in window||delete yw.transitionend.transition);function P5(e){if(bae[e])return bae[e];if(!yw[e])return e;var t=yw[e],r;for(r in t)if(t.hasOwnProperty(r)&&r in P5e)return bae[e]=t[r];return e}var G5e=P5("animationend"),N5e=P5("animationiteration"),M5e=P5("animationstart"),k5e=P5("transitionend"),H5e=new Map,gJe="abort auxClick cancel canPlay canPlayThrough click close contextMenu copy cut drag dragEnd dragEnter dragExit dragLeave dragOver dragStart drop durationChange emptied encrypted ended error gotPointerCapture input invalid keyDown keyPress keyUp load loadedData loadedMetadata loadStart lostPointerCapture mouseDown mouseMove mouseOut mouseOver mouseUp paste pause play playing pointerCancel pointerDown pointerMove pointerOut pointerOver pointerUp progress rateChange reset resize seeked seeking stalled submit suspend timeUpdate touchCancel touchEnd touchStart volumeChange scroll toggle touchMove waiting wheel".split(" ");function Rb(e,t){H5e.set(e,t),wS(t,[e])}for(YJ=0;YJ<gJe.length;YJ++)OJ=gJe[YJ],mJe=OJ.toLowerCase(),dJe=OJ[0].toUpperCase()+OJ.slice(1),Rb(mJe,"on"+dJe);var OJ,mJe,dJe,YJ;Rb(G5e,"onAnimationEnd");Rb(N5e,"onAnimationIteration");Rb(M5e,"onAnimationStart");Rb("dblclick","onDoubleClick");Rb("focusin","onFocus");Rb("focusout","onBlur");Rb(k5e,"onTransitionEnd");Pw("onMouseEnter",["mouseout","mouseover"]);Pw("onMouseLeave",["mouseout","mouseover"]);Pw("onPointerEnter",["pointerout","pointerover"]);Pw("onPointerLeave",["pointerout","pointerover"]);wS("onChange","change click focusin focusout input keydown keyup selectionchange".split(" "));wS("onSelect","focusout contextmenu dragend focusin keydown keyup mousedown mouseup selectionchange".split(" "));wS("onBeforeInput",["compositionend","keypress","textInput","paste"]);wS("onCompositionEnd","compositionend focusout keydown keypress keyup mousedown".split(" "));wS("onCompositionStart","compositionstart focusout keydown keypress keyup mousedown".split(" "));wS("onCompositionUpdate","compositionupdate focusout keydown keypress keyup mousedown".split(" "));var AP="abort canplay canplaythrough durationchange emptied encrypted ended error loadeddata loadedmetadata loadstart pause play playing progress ratechange resize seeked seeking stalled suspend timeupdate volumechange waiting".split(" "),z_t=new Set("cancel close invalid load scroll toggle".split(" ").concat(AP));function pJe(e,t,r){var n=e.type||"unknown-event";e.currentTarget=r,z3t(n,t,void 0,e),e.currentTarget=null}function V5e(e,t){t=(t&4)!==0;for(var r=0;r<e.length;r++){var n=e[r],o=n.event;n=n.listeners;e:{var i=void 0;if(t)for(var a=n.length-1;0<=a;a--){var A=n[a],s=A.instance,c=A.currentTarget;if(A=A.listener,s!==i&&o.isPropagationStopped())break e;pJe(o,A,c),i=s}else for(a=0;a<n.length;a++){if(A=n[a],s=A.instance,c=A.currentTarget,A=A.listener,s!==i&&o.isPropagationStopped())break e;pJe(o,A,c),i=s}}}if(l5)throw e=qae,l5=!1,qae=null,e}function GA(e,t){var r=t[sAe];r===void 0&&(r=t[sAe]=new Set);var n=e+"__bubble";r.has(n)||(_5e(t,e,2,!1),r.add(n))}function xae(e,t,r){var n=0;t&&(n|=4),_5e(r,e,n,t)}var JJ="_reactListening"+Math.random().toString(36).slice(2);function xP(e){if(!e[JJ]){e[JJ]=!0,WJe.forEach(function(r){r!=="selectionchange"&&(z_t.has(r)||xae(r,!1,e),xae(r,!0,e))});var t=e.nodeType===9?e:e.ownerDocument;t===null||t[JJ]||(t[JJ]=!0,xae("selectionchange",!1,t))}}function _5e(e,t,r,n){switch(x5e(t)){case 1:var o=s_t;break;case 4:o=c_t;break;default:o=kAe}r=o.bind(null,t,r,e),o=void 0,!Zae||t!=="touchstart"&&t!=="touchmove"&&t!=="wheel"||(o=!0),n?o!==void 0?e.addEventListener(t,r,{capture:!0,passive:o}):e.addEventListener(t,r,!0):o!==void 0?e.addEventListener(t,r,{passive:o}):e.addEventListener(t,r,!1)}function Sae(e,t,r,n,o){var i=n;if((t&1)===0&&(t&2)===0&&n!==null)e:for(;;){if(n===null)return;var a=n.tag;if(a===3||a===4){var A=n.stateNode.containerInfo;if(A===o||A.nodeType===8&&A.parentNode===o)break;if(a===4)for(a=n.return;a!==null;){var s=a.tag;if((s===3||s===4)&&(s=a.stateNode.containerInfo,s===o||s.nodeType===8&&s.parentNode===o))return;a=a.return}for(;A!==null;){if(a=hS(A),a===null)return;if(s=a.tag,s===5||s===6){n=i=a;continue e}A=A.parentNode}}n=n.return}u5e(function(){var c=i,l=PAe(r),u=[];e:{var g=H5e.get(e);if(g!==void 0){var m=VAe,p=e;switch(e){case"keypress":if(e5(r)===0)break e;case"keydown":case"keyup":m=b_t;break;case"focusin":p="focus",m=Qae;break;case"focusout":p="blur",m=Qae;break;case"beforeblur":case"afterblur":m=Qae;break;case"click":if(r.button===2)break e;case"auxclick":case"dblclick":case"mousedown":case"mousemove":case"mouseup":case"mouseout":case"mouseover":case"contextmenu":m=rJe;break;case"drag":case"dragend":case"dragenter":case"dragexit":case"dragleave":case"dragover":case"dragstart":case"drop":m=g_t;break;case"touchcancel":case"touchend":case"touchmove":case"touchstart":m=D_t;break;case G5e:case N5e:case M5e:m=p_t;break;case k5e:m=F_t;break;case"scroll":m=l_t;break;case"wheel":m=R_t;break;case"copy":case"cut":case"paste":m=B_t;break;case"gotpointercapture":case"lostpointercapture":case"pointercancel":case"pointerdown":case"pointermove":case"pointerout":case"pointerover":case"pointerup":m=oJe}var d=(t&4)!==0,f=!d&&e==="scroll",I=d?g!==null?g+"Capture":null:g;d=[];for(var C=c,y;C!==null;){y=C;var Q=y.stateNode;if(y.tag===5&&Q!==null&&(y=Q,I!==null&&(Q=CP(C,I),Q!=null&&d.push(SP(C,Q,y)))),f)break;C=C.return}0<d.length&&(g=new m(g,p,null,r,l),u.push({event:g,listeners:d}))}}if((t&7)===0){e:{if(g=e==="mouseover"||e==="pointerover",m=e==="mouseout"||e==="pointerout",g&&r!==Wae&&(p=r.relatedTarget||r.fromElement)&&(hS(p)||p[Sy]))break e;if((m||g)&&(g=l.window===l?l:(g=l.ownerDocument)?g.defaultView||g.parentWindow:window,m?(p=r.relatedTarget||r.toElement,m=c,p=p?hS(p):null,p!==null&&(f=RS(p),p!==f||p.tag!==5&&p.tag!==6)&&(p=null)):(m=null,p=c),m!==p)){if(d=rJe,Q="onMouseLeave",I="onMouseEnter",C="mouse",(e==="pointerout"||e==="pointerover")&&(d=oJe,Q="onPointerLeave",I="onPointerEnter",C="pointer"),f=m==null?g:Qw(m),y=p==null?g:Qw(p),g=new d(Q,C+"leave",m,r,l),g.target=f,g.relatedTarget=y,Q=null,hS(l)===c&&(d=new d(I,C+"enter",p,r,l),d.target=y,d.relatedTarget=f,Q=d),f=Q,m&&p)t:{for(d=m,I=p,C=0,y=d;y;y=fw(y))C++;for(y=0,Q=I;Q;Q=fw(Q))y++;for(;0<C-y;)d=fw(d),C--;for(;0<y-C;)I=fw(I),y--;for(;C--;){if(d===I||I!==null&&d===I.alternate)break t;d=fw(d),I=fw(I)}d=null}else d=null;m!==null&&fJe(u,g,m,d,!1),p!==null&&f!==null&&fJe(u,f,p,d,!0)}}e:{if(g=c?Qw(c):window,m=g.nodeName&&g.nodeName.toLowerCase(),m==="select"||m==="input"&&g.type==="file")var E=M_t;else if(AJe(g))if(R5e)E=__t;else{E=H_t;var b=k_t}else(m=g.nodeName)&&m.toLowerCase()==="input"&&(g.type==="checkbox"||g.type==="radio")&&(E=V_t);if(E&&(E=E(e,c))){w5e(u,E,r,l);break e}b&&b(e,g,c),e==="focusout"&&(b=g._wrapperState)&&b.controlled&&g.type==="number"&&Oae(g,"number",g.value)}switch(b=c?Qw(c):window,e){case"focusin":(AJe(b)||b.contentEditable==="true")&&(hw=b,rAe=c,gP=null);break;case"focusout":gP=rAe=hw=null;break;case"mousedown":nAe=!0;break;case"contextmenu":case"mouseup":case"dragend":nAe=!1,uJe(u,r,l);break;case"selectionchange":if(J_t)break;case"keydown":case"keyup":uJe(u,r,l)}var x;if(YAe)e:{switch(e){case"compositionstart":var S="onCompositionStart";break e;case"compositionend":S="onCompositionEnd";break e;case"compositionupdate":S="onCompositionUpdate";break e}S=void 0}else Cw?v5e(e,r)&&(S="onCompositionEnd"):e==="keydown"&&r.keyCode===229&&(S="onCompositionStart");S&&(D5e&&r.locale!=="ko"&&(Cw||S!=="onCompositionStart"?S==="onCompositionEnd"&&Cw&&(x=S5e()):(Cb=l,HAe="value"in Cb?Cb.value:Cb.textContent,Cw=!0)),b=p5(c,S),0<b.length&&(S=new nJe(S,e,null,r,l),u.push({event:S,listeners:b}),x?S.data=x:(x=F5e(r),x!==null&&(S.data=x)))),(x=L_t?T_t(e,r):P_t(e,r))&&(c=p5(c,"onBeforeInput"),0<c.length&&(l=new nJe("onBeforeInput","beforeinput",null,r,l),u.push({event:l,listeners:c}),l.data=x))}V5e(u,t)})}function SP(e,t,r){return{instance:e,listener:t,currentTarget:r}}function p5(e,t){for(var r=t+"Capture",n=[];e!==null;){var o=e,i=o.stateNode;o.tag===5&&i!==null&&(o=i,i=CP(e,r),i!=null&&n.unshift(SP(e,i,o)),i=CP(e,t),i!=null&&n.push(SP(e,i,o))),e=e.return}return n}function fw(e){if(e===null)return null;do e=e.return;while(e&&e.tag!==5);return e||null}function fJe(e,t,r,n,o){for(var i=t._reactName,a=[];r!==null&&r!==n;){var A=r,s=A.alternate,c=A.stateNode;if(s!==null&&s===n)break;A.tag===5&&c!==null&&(A=c,o?(s=CP(r,i),s!=null&&a.unshift(SP(r,s,A))):o||(s=CP(r,i),s!=null&&a.push(SP(r,s,A)))),r=r.return}a.length!==0&&e.push({event:t,listeners:a})}var K_t=/\r\n?/g,j_t=/\u0000|\uFFFD/g;function BJe(e){return(typeof e=="string"?e:""+e).replace(K_t,`
|
|
`).replace(j_t,"")}function zJ(e,t,r){if(t=BJe(t),BJe(e)!==t&&r)throw Error(wr(425))}function f5(){}var oAe=null,iAe=null;function aAe(e,t){return e==="textarea"||e==="noscript"||typeof t.children=="string"||typeof t.children=="number"||typeof t.dangerouslySetInnerHTML=="object"&&t.dangerouslySetInnerHTML!==null&&t.dangerouslySetInnerHTML.__html!=null}var AAe=typeof setTimeout=="function"?setTimeout:void 0,W_t=typeof clearTimeout=="function"?clearTimeout:void 0,IJe=typeof Promise=="function"?Promise:void 0,X_t=typeof queueMicrotask=="function"?queueMicrotask:typeof IJe<"u"?function(e){return IJe.resolve(null).then(e).catch(Z_t)}:AAe;function Z_t(e){setTimeout(function(){throw e})}function Dae(e,t){var r=t,n=0;do{var o=r.nextSibling;if(e.removeChild(r),o&&o.nodeType===8)if(r=o.data,r==="/$"){if(n===0){e.removeChild(o),QP(t);return}n--}else r!=="$"&&r!=="$?"&&r!=="$!"||n++;r=o}while(r);QP(t)}function bb(e){for(;e!=null;e=e.nextSibling){var t=e.nodeType;if(t===1||t===3)break;if(t===8){if(t=e.data,t==="$"||t==="$!"||t==="$?")break;if(t==="/$")return null}}return e}function CJe(e){e=e.previousSibling;for(var t=0;e;){if(e.nodeType===8){var r=e.data;if(r==="$"||r==="$!"||r==="$?"){if(t===0)return e;t--}else r==="/$"&&t++}e=e.previousSibling}return null}var Yw=Math.random().toString(36).slice(2),VC="__reactFiber$"+Yw,DP="__reactProps$"+Yw,Sy="__reactContainer$"+Yw,sAe="__reactEvents$"+Yw,q_t="__reactListeners$"+Yw,$_t="__reactHandles$"+Yw;function hS(e){var t=e[VC];if(t)return t;for(var r=e.parentNode;r;){if(t=r[Sy]||r[VC]){if(r=t.alternate,t.child!==null||r!==null&&r.child!==null)for(e=CJe(e);e!==null;){if(r=e[VC])return r;e=CJe(e)}return t}e=r,r=e.parentNode}return null}function GP(e){return e=e[VC]||e[Sy],!e||e.tag!==5&&e.tag!==6&&e.tag!==13&&e.tag!==3?null:e}function Qw(e){if(e.tag===5||e.tag===6)return e.stateNode;throw Error(wr(33))}function G5(e){return e[DP]||null}var cAe=[],Ew=-1;function Ub(e){return{current:e}}function NA(e){0>Ew||(e.current=cAe[Ew],cAe[Ew]=null,Ew--)}function CA(e,t){Ew++,cAe[Ew]=e.current,e.current=t}var wb={},fg=Ub(wb),Xm=Ub(!1),xS=wb;function Gw(e,t){var r=e.type.contextTypes;if(!r)return wb;var n=e.stateNode;if(n&&n.__reactInternalMemoizedUnmaskedChildContext===t)return n.__reactInternalMemoizedMaskedChildContext;var o={},i;for(i in r)o[i]=t[i];return n&&(e=e.stateNode,e.__reactInternalMemoizedUnmaskedChildContext=t,e.__reactInternalMemoizedMaskedChildContext=o),o}function Zm(e){return e=e.childContextTypes,e!=null}function B5(){NA(Xm),NA(fg)}function hJe(e,t,r){if(fg.current!==wb)throw Error(wr(168));CA(fg,t),CA(Xm,r)}function Y5e(e,t,r){var n=e.stateNode;if(t=t.childContextTypes,typeof n.getChildContext!="function")return r;n=n.getChildContext();for(var o in n)if(!(o in t))throw Error(wr(108,k3t(e)||"Unknown",o));return ys({},r,n)}function I5(e){return e=(e=e.stateNode)&&e.__reactInternalMemoizedMergedChildContext||wb,xS=fg.current,CA(fg,e),CA(Xm,Xm.current),!0}function yJe(e,t,r){var n=e.stateNode;if(!n)throw Error(wr(169));r?(e=Y5e(e,t,xS),n.__reactInternalMemoizedMergedChildContext=e,NA(Xm),NA(fg),CA(fg,e)):NA(Xm),CA(Xm,r)}var yy=null,N5=!1,vae=!1;function O5e(e){yy===null?yy=[e]:yy.push(e)}function eYt(e){N5=!0,O5e(e)}function Lb(){if(!vae&&yy!==null){vae=!0;var e=0,t=Ma;try{var r=yy;for(Ma=1;e<r.length;e++){var n=r[e];do n=n(!0);while(n!==null)}yy=null,N5=!1}catch(o){throw yy!==null&&(yy=yy.slice(e+1)),p5e(GAe,Lb),o}finally{Ma=t,vae=!1}}return null}var bw=[],xw=0,C5=null,h5=0,xf=[],Sf=0,SS=null,Qy=1,Ey="";function IS(e,t){bw[xw++]=h5,bw[xw++]=C5,C5=e,h5=t}function J5e(e,t,r){xf[Sf++]=Qy,xf[Sf++]=Ey,xf[Sf++]=SS,SS=e;var n=Qy;e=Ey;var o=32-YB(n)-1;n&=~(1<<o),r+=1;var i=32-YB(t)+o;if(30<i){var a=o-o%5;i=(n&(1<<a)-1).toString(32),n>>=a,o-=a,Qy=1<<32-YB(t)+o|r<<o|n,Ey=i+e}else Qy=1<<i|r<<o|n,Ey=e}function JAe(e){e.return!==null&&(IS(e,1),J5e(e,1,0))}function zAe(e){for(;e===C5;)C5=bw[--xw],bw[xw]=null,h5=bw[--xw],bw[xw]=null;for(;e===SS;)SS=xf[--Sf],xf[Sf]=null,Ey=xf[--Sf],xf[Sf]=null,Qy=xf[--Sf],xf[Sf]=null}var Vd=null,Hd=null,ts=!1,_B=null;function z5e(e,t){var r=Df(5,null,null,0);r.elementType="DELETED",r.stateNode=t,r.return=e,t=e.deletions,t===null?(e.deletions=[r],e.flags|=16):t.push(r)}function QJe(e,t){switch(e.tag){case 5:var r=e.type;return t=t.nodeType!==1||r.toLowerCase()!==t.nodeName.toLowerCase()?null:t,t!==null?(e.stateNode=t,Vd=e,Hd=bb(t.firstChild),!0):!1;case 6:return t=e.pendingProps===""||t.nodeType!==3?null:t,t!==null?(e.stateNode=t,Vd=e,Hd=null,!0):!1;case 13:return t=t.nodeType!==8?null:t,t!==null?(r=SS!==null?{id:Qy,overflow:Ey}:null,e.memoizedState={dehydrated:t,treeContext:r,retryLane:1073741824},r=Df(18,null,null,0),r.stateNode=t,r.return=e,e.child=r,Vd=e,Hd=null,!0):!1;default:return!1}}function lAe(e){return(e.mode&1)!==0&&(e.flags&128)===0}function uAe(e){if(ts){var t=Hd;if(t){var r=t;if(!QJe(e,t)){if(lAe(e))throw Error(wr(418));t=bb(r.nextSibling);var n=Vd;t&&QJe(e,t)?z5e(n,r):(e.flags=e.flags&-4097|2,ts=!1,Vd=e)}}else{if(lAe(e))throw Error(wr(418));e.flags=e.flags&-4097|2,ts=!1,Vd=e}}}function EJe(e){for(e=e.return;e!==null&&e.tag!==5&&e.tag!==3&&e.tag!==13;)e=e.return;Vd=e}function KJ(e){if(e!==Vd)return!1;if(!ts)return EJe(e),ts=!0,!1;var t;if((t=e.tag!==3)&&!(t=e.tag!==5)&&(t=e.type,t=t!=="head"&&t!=="body"&&!aAe(e.type,e.memoizedProps)),t&&(t=Hd)){if(lAe(e))throw K5e(),Error(wr(418));for(;t;)z5e(e,t),t=bb(t.nextSibling)}if(EJe(e),e.tag===13){if(e=e.memoizedState,e=e!==null?e.dehydrated:null,!e)throw Error(wr(317));e:{for(e=e.nextSibling,t=0;e;){if(e.nodeType===8){var r=e.data;if(r==="/$"){if(t===0){Hd=bb(e.nextSibling);break e}t--}else r!=="$"&&r!=="$!"&&r!=="$?"||t++}e=e.nextSibling}Hd=null}}else Hd=Vd?bb(e.stateNode.nextSibling):null;return!0}function K5e(){for(var e=Hd;e;)e=bb(e.nextSibling)}function Nw(){Hd=Vd=null,ts=!1}function KAe(e){_B===null?_B=[e]:_B.push(e)}var tYt=Fy.ReactCurrentBatchConfig;function eP(e,t,r){if(e=r.ref,e!==null&&typeof e!="function"&&typeof e!="object"){if(r._owner){if(r=r._owner,r){if(r.tag!==1)throw Error(wr(309));var n=r.stateNode}if(!n)throw Error(wr(147,e));var o=n,i=""+e;return t!==null&&t.ref!==null&&typeof t.ref=="function"&&t.ref._stringRef===i?t.ref:(t=function(a){var A=o.refs;a===null?delete A[i]:A[i]=a},t._stringRef=i,t)}if(typeof e!="string")throw Error(wr(284));if(!r._owner)throw Error(wr(290,e))}return e}function jJ(e,t){throw e=Object.prototype.toString.call(t),Error(wr(31,e==="[object Object]"?"object with keys {"+Object.keys(t).join(", ")+"}":e))}function bJe(e){var t=e._init;return t(e._payload)}function j5e(e){function t(I,C){if(e){var y=I.deletions;y===null?(I.deletions=[C],I.flags|=16):y.push(C)}}function r(I,C){if(!e)return null;for(;C!==null;)t(I,C),C=C.sibling;return null}function n(I,C){for(I=new Map;C!==null;)C.key!==null?I.set(C.key,C):I.set(C.index,C),C=C.sibling;return I}function o(I,C){return I=vb(I,C),I.index=0,I.sibling=null,I}function i(I,C,y){return I.index=y,e?(y=I.alternate,y!==null?(y=y.index,y<C?(I.flags|=2,C):y):(I.flags|=2,C)):(I.flags|=1048576,C)}function a(I){return e&&I.alternate===null&&(I.flags|=2),I}function A(I,C,y,Q){return C===null||C.tag!==6?(C=Pae(y,I.mode,Q),C.return=I,C):(C=o(C,y),C.return=I,C)}function s(I,C,y,Q){var E=y.type;return E===Iw?l(I,C,y.props.children,Q,y.key):C!==null&&(C.elementType===E||typeof E=="object"&&E!==null&&E.$$typeof===pb&&bJe(E)===C.type)?(Q=o(C,y.props),Q.ref=eP(I,C,y),Q.return=I,Q):(Q=A5(y.type,y.key,y.props,null,I.mode,Q),Q.ref=eP(I,C,y),Q.return=I,Q)}function c(I,C,y,Q){return C===null||C.tag!==4||C.stateNode.containerInfo!==y.containerInfo||C.stateNode.implementation!==y.implementation?(C=Gae(y,I.mode,Q),C.return=I,C):(C=o(C,y.children||[]),C.return=I,C)}function l(I,C,y,Q,E){return C===null||C.tag!==7?(C=bS(y,I.mode,Q,E),C.return=I,C):(C=o(C,y),C.return=I,C)}function u(I,C,y){if(typeof C=="string"&&C!==""||typeof C=="number")return C=Pae(""+C,I.mode,y),C.return=I,C;if(typeof C=="object"&&C!==null){switch(C.$$typeof){case LJ:return y=A5(C.type,C.key,C.props,null,I.mode,y),y.ref=eP(I,null,C),y.return=I,y;case Bw:return C=Gae(C,I.mode,y),C.return=I,C;case pb:var Q=C._init;return u(I,Q(C._payload),y)}if(iP(C)||XT(C))return C=bS(C,I.mode,y,null),C.return=I,C;jJ(I,C)}return null}function g(I,C,y,Q){var E=C!==null?C.key:null;if(typeof y=="string"&&y!==""||typeof y=="number")return E!==null?null:A(I,C,""+y,Q);if(typeof y=="object"&&y!==null){switch(y.$$typeof){case LJ:return y.key===E?s(I,C,y,Q):null;case Bw:return y.key===E?c(I,C,y,Q):null;case pb:return E=y._init,g(I,C,E(y._payload),Q)}if(iP(y)||XT(y))return E!==null?null:l(I,C,y,Q,null);jJ(I,y)}return null}function m(I,C,y,Q,E){if(typeof Q=="string"&&Q!==""||typeof Q=="number")return I=I.get(y)||null,A(C,I,""+Q,E);if(typeof Q=="object"&&Q!==null){switch(Q.$$typeof){case LJ:return I=I.get(Q.key===null?y:Q.key)||null,s(C,I,Q,E);case Bw:return I=I.get(Q.key===null?y:Q.key)||null,c(C,I,Q,E);case pb:var b=Q._init;return m(I,C,y,b(Q._payload),E)}if(iP(Q)||XT(Q))return I=I.get(y)||null,l(C,I,Q,E,null);jJ(C,Q)}return null}function p(I,C,y,Q){for(var E=null,b=null,x=C,S=C=0,w=null;x!==null&&S<y.length;S++){x.index>S?(w=x,x=null):w=x.sibling;var R=g(I,x,y[S],Q);if(R===null){x===null&&(x=w);break}e&&x&&R.alternate===null&&t(I,x),C=i(R,C,S),b===null?E=R:b.sibling=R,b=R,x=w}if(S===y.length)return r(I,x),ts&&IS(I,S),E;if(x===null){for(;S<y.length;S++)x=u(I,y[S],Q),x!==null&&(C=i(x,C,S),b===null?E=x:b.sibling=x,b=x);return ts&&IS(I,S),E}for(x=n(I,x);S<y.length;S++)w=m(x,I,S,y[S],Q),w!==null&&(e&&w.alternate!==null&&x.delete(w.key===null?S:w.key),C=i(w,C,S),b===null?E=w:b.sibling=w,b=w);return e&&x.forEach(function(T){return t(I,T)}),ts&&IS(I,S),E}function d(I,C,y,Q){var E=XT(y);if(typeof E!="function")throw Error(wr(150));if(y=E.call(y),y==null)throw Error(wr(151));for(var b=E=null,x=C,S=C=0,w=null,R=y.next();x!==null&&!R.done;S++,R=y.next()){x.index>S?(w=x,x=null):w=x.sibling;var T=g(I,x,R.value,Q);if(T===null){x===null&&(x=w);break}e&&x&&T.alternate===null&&t(I,x),C=i(T,C,S),b===null?E=T:b.sibling=T,b=T,x=w}if(R.done)return r(I,x),ts&&IS(I,S),E;if(x===null){for(;!R.done;S++,R=y.next())R=u(I,R.value,Q),R!==null&&(C=i(R,C,S),b===null?E=R:b.sibling=R,b=R);return ts&&IS(I,S),E}for(x=n(I,x);!R.done;S++,R=y.next())R=m(x,I,S,R.value,Q),R!==null&&(e&&R.alternate!==null&&x.delete(R.key===null?S:R.key),C=i(R,C,S),b===null?E=R:b.sibling=R,b=R);return e&&x.forEach(function(L){return t(I,L)}),ts&&IS(I,S),E}function f(I,C,y,Q){if(typeof y=="object"&&y!==null&&y.type===Iw&&y.key===null&&(y=y.props.children),typeof y=="object"&&y!==null){switch(y.$$typeof){case LJ:e:{for(var E=y.key,b=C;b!==null;){if(b.key===E){if(E=y.type,E===Iw){if(b.tag===7){r(I,b.sibling),C=o(b,y.props.children),C.return=I,I=C;break e}}else if(b.elementType===E||typeof E=="object"&&E!==null&&E.$$typeof===pb&&bJe(E)===b.type){r(I,b.sibling),C=o(b,y.props),C.ref=eP(I,b,y),C.return=I,I=C;break e}r(I,b);break}else t(I,b);b=b.sibling}y.type===Iw?(C=bS(y.props.children,I.mode,Q,y.key),C.return=I,I=C):(Q=A5(y.type,y.key,y.props,null,I.mode,Q),Q.ref=eP(I,C,y),Q.return=I,I=Q)}return a(I);case Bw:e:{for(b=y.key;C!==null;){if(C.key===b)if(C.tag===4&&C.stateNode.containerInfo===y.containerInfo&&C.stateNode.implementation===y.implementation){r(I,C.sibling),C=o(C,y.children||[]),C.return=I,I=C;break e}else{r(I,C);break}else t(I,C);C=C.sibling}C=Gae(y,I.mode,Q),C.return=I,I=C}return a(I);case pb:return b=y._init,f(I,C,b(y._payload),Q)}if(iP(y))return p(I,C,y,Q);if(XT(y))return d(I,C,y,Q);jJ(I,y)}return typeof y=="string"&&y!==""||typeof y=="number"?(y=""+y,C!==null&&C.tag===6?(r(I,C.sibling),C=o(C,y),C.return=I,I=C):(r(I,C),C=Pae(y,I.mode,Q),C.return=I,I=C),a(I)):r(I,C)}return f}var Mw=j5e(!0),W5e=j5e(!1),y5=Ub(null),Q5=null,Sw=null,jAe=null;function WAe(){jAe=Sw=Q5=null}function XAe(e){var t=y5.current;NA(y5),e._currentValue=t}function gAe(e,t,r){for(;e!==null;){var n=e.alternate;if((e.childLanes&t)!==t?(e.childLanes|=t,n!==null&&(n.childLanes|=t)):n!==null&&(n.childLanes&t)!==t&&(n.childLanes|=t),e===r)break;e=e.return}}function Lw(e,t){Q5=e,jAe=Sw=null,e=e.dependencies,e!==null&&e.firstContext!==null&&((e.lanes&t)!==0&&(Wm=!0),e.firstContext=null)}function Ff(e){var t=e._currentValue;if(jAe!==e)if(e={context:e,memoizedValue:t,next:null},Sw===null){if(Q5===null)throw Error(wr(308));Sw=e,Q5.dependencies={lanes:0,firstContext:e}}else Sw=Sw.next=e;return t}var yS=null;function ZAe(e){yS===null?yS=[e]:yS.push(e)}function X5e(e,t,r,n){var o=t.interleaved;return o===null?(r.next=r,ZAe(t)):(r.next=o.next,o.next=r),t.interleaved=r,Dy(e,n)}function Dy(e,t){e.lanes|=t;var r=e.alternate;for(r!==null&&(r.lanes|=t),r=e,e=e.return;e!==null;)e.childLanes|=t,r=e.alternate,r!==null&&(r.childLanes|=t),r=e,e=e.return;return r.tag===3?r.stateNode:null}var fb=!1;function qAe(e){e.updateQueue={baseState:e.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null,interleaved:null,lanes:0},effects:null}}function Z5e(e,t){e=e.updateQueue,t.updateQueue===e&&(t.updateQueue={baseState:e.baseState,firstBaseUpdate:e.firstBaseUpdate,lastBaseUpdate:e.lastBaseUpdate,shared:e.shared,effects:e.effects})}function by(e,t){return{eventTime:e,lane:t,tag:0,payload:null,callback:null,next:null}}function xb(e,t,r){var n=e.updateQueue;if(n===null)return null;if(n=n.shared,(ra&2)!==0){var o=n.pending;return o===null?t.next=t:(t.next=o.next,o.next=t),n.pending=t,Dy(e,r)}return o=n.interleaved,o===null?(t.next=t,ZAe(n)):(t.next=o.next,o.next=t),n.interleaved=t,Dy(e,r)}function t5(e,t,r){if(t=t.updateQueue,t!==null&&(t=t.shared,(r&4194240)!==0)){var n=t.lanes;n&=e.pendingLanes,r|=n,t.lanes=r,NAe(e,r)}}function xJe(e,t){var r=e.updateQueue,n=e.alternate;if(n!==null&&(n=n.updateQueue,r===n)){var o=null,i=null;if(r=r.firstBaseUpdate,r!==null){do{var a={eventTime:r.eventTime,lane:r.lane,tag:r.tag,payload:r.payload,callback:r.callback,next:null};i===null?o=i=a:i=i.next=a,r=r.next}while(r!==null);i===null?o=i=t:i=i.next=t}else o=i=t;r={baseState:n.baseState,firstBaseUpdate:o,lastBaseUpdate:i,shared:n.shared,effects:n.effects},e.updateQueue=r;return}e=r.lastBaseUpdate,e===null?r.firstBaseUpdate=t:e.next=t,r.lastBaseUpdate=t}function E5(e,t,r,n){var o=e.updateQueue;fb=!1;var i=o.firstBaseUpdate,a=o.lastBaseUpdate,A=o.shared.pending;if(A!==null){o.shared.pending=null;var s=A,c=s.next;s.next=null,a===null?i=c:a.next=c,a=s;var l=e.alternate;l!==null&&(l=l.updateQueue,A=l.lastBaseUpdate,A!==a&&(A===null?l.firstBaseUpdate=c:A.next=c,l.lastBaseUpdate=s))}if(i!==null){var u=o.baseState;a=0,l=c=s=null,A=i;do{var g=A.lane,m=A.eventTime;if((n&g)===g){l!==null&&(l=l.next={eventTime:m,lane:0,tag:A.tag,payload:A.payload,callback:A.callback,next:null});e:{var p=e,d=A;switch(g=t,m=r,d.tag){case 1:if(p=d.payload,typeof p=="function"){u=p.call(m,u,g);break e}u=p;break e;case 3:p.flags=p.flags&-65537|128;case 0:if(p=d.payload,g=typeof p=="function"?p.call(m,u,g):p,g==null)break e;u=ys({},u,g);break e;case 2:fb=!0}}A.callback!==null&&A.lane!==0&&(e.flags|=64,g=o.effects,g===null?o.effects=[A]:g.push(A))}else m={eventTime:m,lane:g,tag:A.tag,payload:A.payload,callback:A.callback,next:null},l===null?(c=l=m,s=u):l=l.next=m,a|=g;if(A=A.next,A===null){if(A=o.shared.pending,A===null)break;g=A,A=g.next,g.next=null,o.lastBaseUpdate=g,o.shared.pending=null}}while(!0);if(l===null&&(s=u),o.baseState=s,o.firstBaseUpdate=c,o.lastBaseUpdate=l,t=o.shared.interleaved,t!==null){o=t;do a|=o.lane,o=o.next;while(o!==t)}else i===null&&(o.shared.lanes=0);vS|=a,e.lanes=a,e.memoizedState=u}}function SJe(e,t,r){if(e=t.effects,t.effects=null,e!==null)for(t=0;t<e.length;t++){var n=e[t],o=n.callback;if(o!==null){if(n.callback=null,n=r,typeof o!="function")throw Error(wr(191,o));o.call(n)}}}var NP={},YC=Ub(NP),vP=Ub(NP),FP=Ub(NP);function QS(e){if(e===NP)throw Error(wr(174));return e}function $Ae(e,t){switch(CA(FP,t),CA(vP,e),CA(YC,NP),e=t.nodeType,e){case 9:case 11:t=(t=t.documentElement)?t.namespaceURI:zae(null,"");break;default:e=e===8?t.parentNode:t,t=e.namespaceURI||null,e=e.tagName,t=zae(t,e)}NA(YC),CA(YC,t)}function kw(){NA(YC),NA(vP),NA(FP)}function q5e(e){QS(FP.current);var t=QS(YC.current),r=zae(t,e.type);t!==r&&(CA(vP,e),CA(YC,r))}function ese(e){vP.current===e&&(NA(YC),NA(vP))}var Cs=Ub(0);function b5(e){for(var t=e;t!==null;){if(t.tag===13){var r=t.memoizedState;if(r!==null&&(r=r.dehydrated,r===null||r.data==="$?"||r.data==="$!"))return t}else if(t.tag===19&&t.memoizedProps.revealOrder!==void 0){if((t.flags&128)!==0)return t}else if(t.child!==null){t.child.return=t,t=t.child;continue}if(t===e)break;for(;t.sibling===null;){if(t.return===null||t.return===e)return null;t=t.return}t.sibling.return=t.return,t=t.sibling}return null}var Fae=[];function tse(){for(var e=0;e<Fae.length;e++)Fae[e]._workInProgressVersionPrimary=null;Fae.length=0}var r5=Fy.ReactCurrentDispatcher,wae=Fy.ReactCurrentBatchConfig,DS=0,hs=null,Al=null,ql=null,x5=!1,mP=!1,wP=0,rYt=0;function mg(){throw Error(wr(321))}function rse(e,t){if(t===null)return!1;for(var r=0;r<t.length&&r<e.length;r++)if(!JB(e[r],t[r]))return!1;return!0}function nse(e,t,r,n,o,i){if(DS=i,hs=t,t.memoizedState=null,t.updateQueue=null,t.lanes=0,r5.current=e===null||e.memoizedState===null?aYt:AYt,e=r(n,o),mP){i=0;do{if(mP=!1,wP=0,25<=i)throw Error(wr(301));i+=1,ql=Al=null,t.updateQueue=null,r5.current=sYt,e=r(n,o)}while(mP)}if(r5.current=S5,t=Al!==null&&Al.next!==null,DS=0,ql=Al=hs=null,x5=!1,t)throw Error(wr(300));return e}function ose(){var e=wP!==0;return wP=0,e}function HC(){var e={memoizedState:null,baseState:null,baseQueue:null,queue:null,next:null};return ql===null?hs.memoizedState=ql=e:ql=ql.next=e,ql}function wf(){if(Al===null){var e=hs.alternate;e=e!==null?e.memoizedState:null}else e=Al.next;var t=ql===null?hs.memoizedState:ql.next;if(t!==null)ql=t,Al=e;else{if(e===null)throw Error(wr(310));Al=e,e={memoizedState:Al.memoizedState,baseState:Al.baseState,baseQueue:Al.baseQueue,queue:Al.queue,next:null},ql===null?hs.memoizedState=ql=e:ql=ql.next=e}return ql}function RP(e,t){return typeof t=="function"?t(e):t}function Rae(e){var t=wf(),r=t.queue;if(r===null)throw Error(wr(311));r.lastRenderedReducer=e;var n=Al,o=n.baseQueue,i=r.pending;if(i!==null){if(o!==null){var a=o.next;o.next=i.next,i.next=a}n.baseQueue=o=i,r.pending=null}if(o!==null){i=o.next,n=n.baseState;var A=a=null,s=null,c=i;do{var l=c.lane;if((DS&l)===l)s!==null&&(s=s.next={lane:0,action:c.action,hasEagerState:c.hasEagerState,eagerState:c.eagerState,next:null}),n=c.hasEagerState?c.eagerState:e(n,c.action);else{var u={lane:l,action:c.action,hasEagerState:c.hasEagerState,eagerState:c.eagerState,next:null};s===null?(A=s=u,a=n):s=s.next=u,hs.lanes|=l,vS|=l}c=c.next}while(c!==null&&c!==i);s===null?a=n:s.next=A,JB(n,t.memoizedState)||(Wm=!0),t.memoizedState=n,t.baseState=a,t.baseQueue=s,r.lastRenderedState=n}if(e=r.interleaved,e!==null){o=e;do i=o.lane,hs.lanes|=i,vS|=i,o=o.next;while(o!==e)}else o===null&&(r.lanes=0);return[t.memoizedState,r.dispatch]}function Uae(e){var t=wf(),r=t.queue;if(r===null)throw Error(wr(311));r.lastRenderedReducer=e;var n=r.dispatch,o=r.pending,i=t.memoizedState;if(o!==null){r.pending=null;var a=o=o.next;do i=e(i,a.action),a=a.next;while(a!==o);JB(i,t.memoizedState)||(Wm=!0),t.memoizedState=i,t.baseQueue===null&&(t.baseState=i),r.lastRenderedState=i}return[i,n]}function $5e(){}function eze(e,t){var r=hs,n=wf(),o=t(),i=!JB(n.memoizedState,o);if(i&&(n.memoizedState=o,Wm=!0),n=n.queue,ise(nze.bind(null,r,n,e),[e]),n.getSnapshot!==t||i||ql!==null&&ql.memoizedState.tag&1){if(r.flags|=2048,UP(9,rze.bind(null,r,n,o,t),void 0,null),$l===null)throw Error(wr(349));(DS&30)!==0||tze(r,t,o)}return o}function tze(e,t,r){e.flags|=16384,e={getSnapshot:t,value:r},t=hs.updateQueue,t===null?(t={lastEffect:null,stores:null},hs.updateQueue=t,t.stores=[e]):(r=t.stores,r===null?t.stores=[e]:r.push(e))}function rze(e,t,r,n){t.value=r,t.getSnapshot=n,oze(t)&&ize(e)}function nze(e,t,r){return r(function(){oze(t)&&ize(e)})}function oze(e){var t=e.getSnapshot;e=e.value;try{var r=t();return!JB(e,r)}catch{return!0}}function ize(e){var t=Dy(e,1);t!==null&&OB(t,e,1,-1)}function DJe(e){var t=HC();return typeof e=="function"&&(e=e()),t.memoizedState=t.baseState=e,e={pending:null,interleaved:null,lanes:0,dispatch:null,lastRenderedReducer:RP,lastRenderedState:e},t.queue=e,e=e.dispatch=iYt.bind(null,hs,e),[t.memoizedState,e]}function UP(e,t,r,n){return e={tag:e,create:t,destroy:r,deps:n,next:null},t=hs.updateQueue,t===null?(t={lastEffect:null,stores:null},hs.updateQueue=t,t.lastEffect=e.next=e):(r=t.lastEffect,r===null?t.lastEffect=e.next=e:(n=r.next,r.next=e,e.next=n,t.lastEffect=e)),e}function aze(){return wf().memoizedState}function n5(e,t,r,n){var o=HC();hs.flags|=e,o.memoizedState=UP(1|t,r,void 0,n===void 0?null:n)}function M5(e,t,r,n){var o=wf();n=n===void 0?null:n;var i=void 0;if(Al!==null){var a=Al.memoizedState;if(i=a.destroy,n!==null&&rse(n,a.deps)){o.memoizedState=UP(t,r,i,n);return}}hs.flags|=e,o.memoizedState=UP(1|t,r,i,n)}function vJe(e,t){return n5(8390656,8,e,t)}function ise(e,t){return M5(2048,8,e,t)}function Aze(e,t){return M5(4,2,e,t)}function sze(e,t){return M5(4,4,e,t)}function cze(e,t){if(typeof t=="function")return e=e(),t(e),function(){t(null)};if(t!=null)return e=e(),t.current=e,function(){t.current=null}}function lze(e,t,r){return r=r!=null?r.concat([e]):null,M5(4,4,cze.bind(null,t,e),r)}function ase(){}function uze(e,t){var r=wf();t=t===void 0?null:t;var n=r.memoizedState;return n!==null&&t!==null&&rse(t,n[1])?n[0]:(r.memoizedState=[e,t],e)}function gze(e,t){var r=wf();t=t===void 0?null:t;var n=r.memoizedState;return n!==null&&t!==null&&rse(t,n[1])?n[0]:(e=e(),r.memoizedState=[e,t],e)}function mze(e,t,r){return(DS&21)===0?(e.baseState&&(e.baseState=!1,Wm=!0),e.memoizedState=r):(JB(r,t)||(r=I5e(),hs.lanes|=r,vS|=r,e.baseState=!0),t)}function nYt(e,t){var r=Ma;Ma=r!==0&&4>r?r:4,e(!0);var n=wae.transition;wae.transition={};try{e(!1),t()}finally{Ma=r,wae.transition=n}}function dze(){return wf().memoizedState}function oYt(e,t,r){var n=Db(e);if(r={lane:n,action:r,hasEagerState:!1,eagerState:null,next:null},pze(e))fze(t,r);else if(r=X5e(e,t,r,n),r!==null){var o=Zg();OB(r,e,n,o),Bze(r,t,n)}}function iYt(e,t,r){var n=Db(e),o={lane:n,action:r,hasEagerState:!1,eagerState:null,next:null};if(pze(e))fze(t,o);else{var i=e.alternate;if(e.lanes===0&&(i===null||i.lanes===0)&&(i=t.lastRenderedReducer,i!==null))try{var a=t.lastRenderedState,A=i(a,r);if(o.hasEagerState=!0,o.eagerState=A,JB(A,a)){var s=t.interleaved;s===null?(o.next=o,ZAe(t)):(o.next=s.next,s.next=o),t.interleaved=o;return}}catch{}r=X5e(e,t,o,n),r!==null&&(o=Zg(),OB(r,e,n,o),Bze(r,t,n))}}function pze(e){var t=e.alternate;return e===hs||t!==null&&t===hs}function fze(e,t){mP=x5=!0;var r=e.pending;r===null?t.next=t:(t.next=r.next,r.next=t),e.pending=t}function Bze(e,t,r){if((r&4194240)!==0){var n=t.lanes;n&=e.pendingLanes,r|=n,t.lanes=r,NAe(e,r)}}var S5={readContext:Ff,useCallback:mg,useContext:mg,useEffect:mg,useImperativeHandle:mg,useInsertionEffect:mg,useLayoutEffect:mg,useMemo:mg,useReducer:mg,useRef:mg,useState:mg,useDebugValue:mg,useDeferredValue:mg,useTransition:mg,useMutableSource:mg,useSyncExternalStore:mg,useId:mg,unstable_isNewReconciler:!1},aYt={readContext:Ff,useCallback:function(e,t){return HC().memoizedState=[e,t===void 0?null:t],e},useContext:Ff,useEffect:vJe,useImperativeHandle:function(e,t,r){return r=r!=null?r.concat([e]):null,n5(4194308,4,cze.bind(null,t,e),r)},useLayoutEffect:function(e,t){return n5(4194308,4,e,t)},useInsertionEffect:function(e,t){return n5(4,2,e,t)},useMemo:function(e,t){var r=HC();return t=t===void 0?null:t,e=e(),r.memoizedState=[e,t],e},useReducer:function(e,t,r){var n=HC();return t=r!==void 0?r(t):t,n.memoizedState=n.baseState=t,e={pending:null,interleaved:null,lanes:0,dispatch:null,lastRenderedReducer:e,lastRenderedState:t},n.queue=e,e=e.dispatch=oYt.bind(null,hs,e),[n.memoizedState,e]},useRef:function(e){var t=HC();return e={current:e},t.memoizedState=e},useState:DJe,useDebugValue:ase,useDeferredValue:function(e){return HC().memoizedState=e},useTransition:function(){var e=DJe(!1),t=e[0];return e=nYt.bind(null,e[1]),HC().memoizedState=e,[t,e]},useMutableSource:function(){},useSyncExternalStore:function(e,t,r){var n=hs,o=HC();if(ts){if(r===void 0)throw Error(wr(407));r=r()}else{if(r=t(),$l===null)throw Error(wr(349));(DS&30)!==0||tze(n,t,r)}o.memoizedState=r;var i={value:r,getSnapshot:t};return o.queue=i,vJe(nze.bind(null,n,i,e),[e]),n.flags|=2048,UP(9,rze.bind(null,n,i,r,t),void 0,null),r},useId:function(){var e=HC(),t=$l.identifierPrefix;if(ts){var r=Ey,n=Qy;r=(n&~(1<<32-YB(n)-1)).toString(32)+r,t=":"+t+"R"+r,r=wP++,0<r&&(t+="H"+r.toString(32)),t+=":"}else r=rYt++,t=":"+t+"r"+r.toString(32)+":";return e.memoizedState=t},unstable_isNewReconciler:!1},AYt={readContext:Ff,useCallback:uze,useContext:Ff,useEffect:ise,useImperativeHandle:lze,useInsertionEffect:Aze,useLayoutEffect:sze,useMemo:gze,useReducer:Rae,useRef:aze,useState:function(){return Rae(RP)},useDebugValue:ase,useDeferredValue:function(e){var t=wf();return mze(t,Al.memoizedState,e)},useTransition:function(){var e=Rae(RP)[0],t=wf().memoizedState;return[e,t]},useMutableSource:$5e,useSyncExternalStore:eze,useId:dze,unstable_isNewReconciler:!1},sYt={readContext:Ff,useCallback:uze,useContext:Ff,useEffect:ise,useImperativeHandle:lze,useInsertionEffect:Aze,useLayoutEffect:sze,useMemo:gze,useReducer:Uae,useRef:aze,useState:function(){return Uae(RP)},useDebugValue:ase,useDeferredValue:function(e){var t=wf();return Al===null?t.memoizedState=e:mze(t,Al.memoizedState,e)},useTransition:function(){var e=Uae(RP)[0],t=wf().memoizedState;return[e,t]},useMutableSource:$5e,useSyncExternalStore:eze,useId:dze,unstable_isNewReconciler:!1};function HB(e,t){if(e&&e.defaultProps){t=ys({},t),e=e.defaultProps;for(var r in e)t[r]===void 0&&(t[r]=e[r]);return t}return t}function mAe(e,t,r,n){t=e.memoizedState,r=r(n,t),r=r==null?t:ys({},t,r),e.memoizedState=r,e.lanes===0&&(e.updateQueue.baseState=r)}var k5={isMounted:function(e){return(e=e._reactInternals)?RS(e)===e:!1},enqueueSetState:function(e,t,r){e=e._reactInternals;var n=Zg(),o=Db(e),i=by(n,o);i.payload=t,r!=null&&(i.callback=r),t=xb(e,i,o),t!==null&&(OB(t,e,o,n),t5(t,e,o))},enqueueReplaceState:function(e,t,r){e=e._reactInternals;var n=Zg(),o=Db(e),i=by(n,o);i.tag=1,i.payload=t,r!=null&&(i.callback=r),t=xb(e,i,o),t!==null&&(OB(t,e,o,n),t5(t,e,o))},enqueueForceUpdate:function(e,t){e=e._reactInternals;var r=Zg(),n=Db(e),o=by(r,n);o.tag=2,t!=null&&(o.callback=t),t=xb(e,o,n),t!==null&&(OB(t,e,n,r),t5(t,e,n))}};function FJe(e,t,r,n,o,i,a){return e=e.stateNode,typeof e.shouldComponentUpdate=="function"?e.shouldComponentUpdate(n,i,a):t.prototype&&t.prototype.isPureReactComponent?!bP(r,n)||!bP(o,i):!0}function Ize(e,t,r){var n=!1,o=wb,i=t.contextType;return typeof i=="object"&&i!==null?i=Ff(i):(o=Zm(t)?xS:fg.current,n=t.contextTypes,i=(n=n!=null)?Gw(e,o):wb),t=new t(r,i),e.memoizedState=t.state!==null&&t.state!==void 0?t.state:null,t.updater=k5,e.stateNode=t,t._reactInternals=e,n&&(e=e.stateNode,e.__reactInternalMemoizedUnmaskedChildContext=o,e.__reactInternalMemoizedMaskedChildContext=i),t}function wJe(e,t,r,n){e=t.state,typeof t.componentWillReceiveProps=="function"&&t.componentWillReceiveProps(r,n),typeof t.UNSAFE_componentWillReceiveProps=="function"&&t.UNSAFE_componentWillReceiveProps(r,n),t.state!==e&&k5.enqueueReplaceState(t,t.state,null)}function dAe(e,t,r,n){var o=e.stateNode;o.props=r,o.state=e.memoizedState,o.refs={},qAe(e);var i=t.contextType;typeof i=="object"&&i!==null?o.context=Ff(i):(i=Zm(t)?xS:fg.current,o.context=Gw(e,i)),o.state=e.memoizedState,i=t.getDerivedStateFromProps,typeof i=="function"&&(mAe(e,t,i,r),o.state=e.memoizedState),typeof t.getDerivedStateFromProps=="function"||typeof o.getSnapshotBeforeUpdate=="function"||typeof o.UNSAFE_componentWillMount!="function"&&typeof o.componentWillMount!="function"||(t=o.state,typeof o.componentWillMount=="function"&&o.componentWillMount(),typeof o.UNSAFE_componentWillMount=="function"&&o.UNSAFE_componentWillMount(),t!==o.state&&k5.enqueueReplaceState(o,o.state,null),E5(e,r,o,n),o.state=e.memoizedState),typeof o.componentDidMount=="function"&&(e.flags|=4194308)}function Hw(e,t){try{var r="",n=t;do r+=M3t(n),n=n.return;while(n);var o=r}catch(i){o=`
|
|
Error generating stack: `+i.message+`
|
|
`+i.stack}return{value:e,source:t,stack:o,digest:null}}function Lae(e,t,r){return{value:e,source:null,stack:r??null,digest:t??null}}function pAe(e,t){try{console.error(t.value)}catch(r){setTimeout(function(){throw r})}}var cYt=typeof WeakMap=="function"?WeakMap:Map;function Cze(e,t,r){r=by(-1,r),r.tag=3,r.payload={element:null};var n=t.value;return r.callback=function(){v5||(v5=!0,xAe=n),pAe(e,t)},r}function hze(e,t,r){r=by(-1,r),r.tag=3;var n=e.type.getDerivedStateFromError;if(typeof n=="function"){var o=t.value;r.payload=function(){return n(o)},r.callback=function(){pAe(e,t)}}var i=e.stateNode;return i!==null&&typeof i.componentDidCatch=="function"&&(r.callback=function(){pAe(e,t),typeof n!="function"&&(Sb===null?Sb=new Set([this]):Sb.add(this));var a=t.stack;this.componentDidCatch(t.value,{componentStack:a!==null?a:""})}),r}function RJe(e,t,r){var n=e.pingCache;if(n===null){n=e.pingCache=new cYt;var o=new Set;n.set(t,o)}else o=n.get(t),o===void 0&&(o=new Set,n.set(t,o));o.has(r)||(o.add(r),e=EYt.bind(null,e,t,r),t.then(e,e))}function UJe(e){do{var t;if((t=e.tag===13)&&(t=e.memoizedState,t=t!==null?t.dehydrated!==null:!0),t)return e;e=e.return}while(e!==null);return null}function LJe(e,t,r,n,o){return(e.mode&1)===0?(e===t?e.flags|=65536:(e.flags|=128,r.flags|=131072,r.flags&=-52805,r.tag===1&&(r.alternate===null?r.tag=17:(t=by(-1,1),t.tag=2,xb(r,t,1))),r.lanes|=1),e):(e.flags|=65536,e.lanes=o,e)}var lYt=Fy.ReactCurrentOwner,Wm=!1;function Xg(e,t,r,n){t.child=e===null?W5e(t,null,r,n):Mw(t,e.child,r,n)}function TJe(e,t,r,n,o){r=r.render;var i=t.ref;return Lw(t,o),n=nse(e,t,r,n,i,o),r=ose(),e!==null&&!Wm?(t.updateQueue=e.updateQueue,t.flags&=-2053,e.lanes&=~o,vy(e,t,o)):(ts&&r&&JAe(t),t.flags|=1,Xg(e,t,n,o),t.child)}function PJe(e,t,r,n,o){if(e===null){var i=r.type;return typeof i=="function"&&!dse(i)&&i.defaultProps===void 0&&r.compare===null&&r.defaultProps===void 0?(t.tag=15,t.type=i,yze(e,t,i,n,o)):(e=A5(r.type,null,n,t,t.mode,o),e.ref=t.ref,e.return=t,t.child=e)}if(i=e.child,(e.lanes&o)===0){var a=i.memoizedProps;if(r=r.compare,r=r!==null?r:bP,r(a,n)&&e.ref===t.ref)return vy(e,t,o)}return t.flags|=1,e=vb(i,n),e.ref=t.ref,e.return=t,t.child=e}function yze(e,t,r,n,o){if(e!==null){var i=e.memoizedProps;if(bP(i,n)&&e.ref===t.ref)if(Wm=!1,t.pendingProps=n=i,(e.lanes&o)!==0)(e.flags&131072)!==0&&(Wm=!0);else return t.lanes=e.lanes,vy(e,t,o)}return fAe(e,t,r,n,o)}function Qze(e,t,r){var n=t.pendingProps,o=n.children,i=e!==null?e.memoizedState:null;if(n.mode==="hidden")if((t.mode&1)===0)t.memoizedState={baseLanes:0,cachePool:null,transitions:null},CA(vw,kd),kd|=r;else{if((r&1073741824)===0)return e=i!==null?i.baseLanes|r:r,t.lanes=t.childLanes=1073741824,t.memoizedState={baseLanes:e,cachePool:null,transitions:null},t.updateQueue=null,CA(vw,kd),kd|=e,null;t.memoizedState={baseLanes:0,cachePool:null,transitions:null},n=i!==null?i.baseLanes:r,CA(vw,kd),kd|=n}else i!==null?(n=i.baseLanes|r,t.memoizedState=null):n=r,CA(vw,kd),kd|=n;return Xg(e,t,o,r),t.child}function Eze(e,t){var r=t.ref;(e===null&&r!==null||e!==null&&e.ref!==r)&&(t.flags|=512,t.flags|=2097152)}function fAe(e,t,r,n,o){var i=Zm(r)?xS:fg.current;return i=Gw(t,i),Lw(t,o),r=nse(e,t,r,n,i,o),n=ose(),e!==null&&!Wm?(t.updateQueue=e.updateQueue,t.flags&=-2053,e.lanes&=~o,vy(e,t,o)):(ts&&n&&JAe(t),t.flags|=1,Xg(e,t,r,o),t.child)}function GJe(e,t,r,n,o){if(Zm(r)){var i=!0;I5(t)}else i=!1;if(Lw(t,o),t.stateNode===null)o5(e,t),Ize(t,r,n),dAe(t,r,n,o),n=!0;else if(e===null){var a=t.stateNode,A=t.memoizedProps;a.props=A;var s=a.context,c=r.contextType;typeof c=="object"&&c!==null?c=Ff(c):(c=Zm(r)?xS:fg.current,c=Gw(t,c));var l=r.getDerivedStateFromProps,u=typeof l=="function"||typeof a.getSnapshotBeforeUpdate=="function";u||typeof a.UNSAFE_componentWillReceiveProps!="function"&&typeof a.componentWillReceiveProps!="function"||(A!==n||s!==c)&&wJe(t,a,n,c),fb=!1;var g=t.memoizedState;a.state=g,E5(t,n,a,o),s=t.memoizedState,A!==n||g!==s||Xm.current||fb?(typeof l=="function"&&(mAe(t,r,l,n),s=t.memoizedState),(A=fb||FJe(t,r,A,n,g,s,c))?(u||typeof a.UNSAFE_componentWillMount!="function"&&typeof a.componentWillMount!="function"||(typeof a.componentWillMount=="function"&&a.componentWillMount(),typeof a.UNSAFE_componentWillMount=="function"&&a.UNSAFE_componentWillMount()),typeof a.componentDidMount=="function"&&(t.flags|=4194308)):(typeof a.componentDidMount=="function"&&(t.flags|=4194308),t.memoizedProps=n,t.memoizedState=s),a.props=n,a.state=s,a.context=c,n=A):(typeof a.componentDidMount=="function"&&(t.flags|=4194308),n=!1)}else{a=t.stateNode,Z5e(e,t),A=t.memoizedProps,c=t.type===t.elementType?A:HB(t.type,A),a.props=c,u=t.pendingProps,g=a.context,s=r.contextType,typeof s=="object"&&s!==null?s=Ff(s):(s=Zm(r)?xS:fg.current,s=Gw(t,s));var m=r.getDerivedStateFromProps;(l=typeof m=="function"||typeof a.getSnapshotBeforeUpdate=="function")||typeof a.UNSAFE_componentWillReceiveProps!="function"&&typeof a.componentWillReceiveProps!="function"||(A!==u||g!==s)&&wJe(t,a,n,s),fb=!1,g=t.memoizedState,a.state=g,E5(t,n,a,o);var p=t.memoizedState;A!==u||g!==p||Xm.current||fb?(typeof m=="function"&&(mAe(t,r,m,n),p=t.memoizedState),(c=fb||FJe(t,r,c,n,g,p,s)||!1)?(l||typeof a.UNSAFE_componentWillUpdate!="function"&&typeof a.componentWillUpdate!="function"||(typeof a.componentWillUpdate=="function"&&a.componentWillUpdate(n,p,s),typeof a.UNSAFE_componentWillUpdate=="function"&&a.UNSAFE_componentWillUpdate(n,p,s)),typeof a.componentDidUpdate=="function"&&(t.flags|=4),typeof a.getSnapshotBeforeUpdate=="function"&&(t.flags|=1024)):(typeof a.componentDidUpdate!="function"||A===e.memoizedProps&&g===e.memoizedState||(t.flags|=4),typeof a.getSnapshotBeforeUpdate!="function"||A===e.memoizedProps&&g===e.memoizedState||(t.flags|=1024),t.memoizedProps=n,t.memoizedState=p),a.props=n,a.state=p,a.context=s,n=c):(typeof a.componentDidUpdate!="function"||A===e.memoizedProps&&g===e.memoizedState||(t.flags|=4),typeof a.getSnapshotBeforeUpdate!="function"||A===e.memoizedProps&&g===e.memoizedState||(t.flags|=1024),n=!1)}return BAe(e,t,r,n,i,o)}function BAe(e,t,r,n,o,i){Eze(e,t);var a=(t.flags&128)!==0;if(!n&&!a)return o&&yJe(t,r,!1),vy(e,t,i);n=t.stateNode,lYt.current=t;var A=a&&typeof r.getDerivedStateFromError!="function"?null:n.render();return t.flags|=1,e!==null&&a?(t.child=Mw(t,e.child,null,i),t.child=Mw(t,null,A,i)):Xg(e,t,A,i),t.memoizedState=n.state,o&&yJe(t,r,!0),t.child}function bze(e){var t=e.stateNode;t.pendingContext?hJe(e,t.pendingContext,t.pendingContext!==t.context):t.context&&hJe(e,t.context,!1),$Ae(e,t.containerInfo)}function NJe(e,t,r,n,o){return Nw(),KAe(o),t.flags|=256,Xg(e,t,r,n),t.child}var IAe={dehydrated:null,treeContext:null,retryLane:0};function CAe(e){return{baseLanes:e,cachePool:null,transitions:null}}function xze(e,t,r){var n=t.pendingProps,o=Cs.current,i=!1,a=(t.flags&128)!==0,A;if((A=a)||(A=e!==null&&e.memoizedState===null?!1:(o&2)!==0),A?(i=!0,t.flags&=-129):(e===null||e.memoizedState!==null)&&(o|=1),CA(Cs,o&1),e===null)return uAe(t),e=t.memoizedState,e!==null&&(e=e.dehydrated,e!==null)?((t.mode&1)===0?t.lanes=1:e.data==="$!"?t.lanes=8:t.lanes=1073741824,null):(a=n.children,e=n.fallback,i?(n=t.mode,i=t.child,a={mode:"hidden",children:a},(n&1)===0&&i!==null?(i.childLanes=0,i.pendingProps=a):i=_5(a,n,0,null),e=bS(e,n,r,null),i.return=t,e.return=t,i.sibling=e,t.child=i,t.child.memoizedState=CAe(r),t.memoizedState=IAe,e):Ase(t,a));if(o=e.memoizedState,o!==null&&(A=o.dehydrated,A!==null))return uYt(e,t,a,n,A,o,r);if(i){i=n.fallback,a=t.mode,o=e.child,A=o.sibling;var s={mode:"hidden",children:n.children};return(a&1)===0&&t.child!==o?(n=t.child,n.childLanes=0,n.pendingProps=s,t.deletions=null):(n=vb(o,s),n.subtreeFlags=o.subtreeFlags&14680064),A!==null?i=vb(A,i):(i=bS(i,a,r,null),i.flags|=2),i.return=t,n.return=t,n.sibling=i,t.child=n,n=i,i=t.child,a=e.child.memoizedState,a=a===null?CAe(r):{baseLanes:a.baseLanes|r,cachePool:null,transitions:a.transitions},i.memoizedState=a,i.childLanes=e.childLanes&~r,t.memoizedState=IAe,n}return i=e.child,e=i.sibling,n=vb(i,{mode:"visible",children:n.children}),(t.mode&1)===0&&(n.lanes=r),n.return=t,n.sibling=null,e!==null&&(r=t.deletions,r===null?(t.deletions=[e],t.flags|=16):r.push(e)),t.child=n,t.memoizedState=null,n}function Ase(e,t){return t=_5({mode:"visible",children:t},e.mode,0,null),t.return=e,e.child=t}function WJ(e,t,r,n){return n!==null&&KAe(n),Mw(t,e.child,null,r),e=Ase(t,t.pendingProps.children),e.flags|=2,t.memoizedState=null,e}function uYt(e,t,r,n,o,i,a){if(r)return t.flags&256?(t.flags&=-257,n=Lae(Error(wr(422))),WJ(e,t,a,n)):t.memoizedState!==null?(t.child=e.child,t.flags|=128,null):(i=n.fallback,o=t.mode,n=_5({mode:"visible",children:n.children},o,0,null),i=bS(i,o,a,null),i.flags|=2,n.return=t,i.return=t,n.sibling=i,t.child=n,(t.mode&1)!==0&&Mw(t,e.child,null,a),t.child.memoizedState=CAe(a),t.memoizedState=IAe,i);if((t.mode&1)===0)return WJ(e,t,a,null);if(o.data==="$!"){if(n=o.nextSibling&&o.nextSibling.dataset,n)var A=n.dgst;return n=A,i=Error(wr(419)),n=Lae(i,n,void 0),WJ(e,t,a,n)}if(A=(a&e.childLanes)!==0,Wm||A){if(n=$l,n!==null){switch(a&-a){case 4:o=2;break;case 16:o=8;break;case 64:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:case 4194304:case 8388608:case 16777216:case 33554432:case 67108864:o=32;break;case 536870912:o=268435456;break;default:o=0}o=(o&(n.suspendedLanes|a))!==0?0:o,o!==0&&o!==i.retryLane&&(i.retryLane=o,Dy(e,o),OB(n,e,o,-1))}return mse(),n=Lae(Error(wr(421))),WJ(e,t,a,n)}return o.data==="$?"?(t.flags|=128,t.child=e.child,t=bYt.bind(null,e),o._reactRetry=t,null):(e=i.treeContext,Hd=bb(o.nextSibling),Vd=t,ts=!0,_B=null,e!==null&&(xf[Sf++]=Qy,xf[Sf++]=Ey,xf[Sf++]=SS,Qy=e.id,Ey=e.overflow,SS=t),t=Ase(t,n.children),t.flags|=4096,t)}function MJe(e,t,r){e.lanes|=t;var n=e.alternate;n!==null&&(n.lanes|=t),gAe(e.return,t,r)}function Tae(e,t,r,n,o){var i=e.memoizedState;i===null?e.memoizedState={isBackwards:t,rendering:null,renderingStartTime:0,last:n,tail:r,tailMode:o}:(i.isBackwards=t,i.rendering=null,i.renderingStartTime=0,i.last=n,i.tail=r,i.tailMode=o)}function Sze(e,t,r){var n=t.pendingProps,o=n.revealOrder,i=n.tail;if(Xg(e,t,n.children,r),n=Cs.current,(n&2)!==0)n=n&1|2,t.flags|=128;else{if(e!==null&&(e.flags&128)!==0)e:for(e=t.child;e!==null;){if(e.tag===13)e.memoizedState!==null&&MJe(e,r,t);else if(e.tag===19)MJe(e,r,t);else if(e.child!==null){e.child.return=e,e=e.child;continue}if(e===t)break e;for(;e.sibling===null;){if(e.return===null||e.return===t)break e;e=e.return}e.sibling.return=e.return,e=e.sibling}n&=1}if(CA(Cs,n),(t.mode&1)===0)t.memoizedState=null;else switch(o){case"forwards":for(r=t.child,o=null;r!==null;)e=r.alternate,e!==null&&b5(e)===null&&(o=r),r=r.sibling;r=o,r===null?(o=t.child,t.child=null):(o=r.sibling,r.sibling=null),Tae(t,!1,o,r,i);break;case"backwards":for(r=null,o=t.child,t.child=null;o!==null;){if(e=o.alternate,e!==null&&b5(e)===null){t.child=o;break}e=o.sibling,o.sibling=r,r=o,o=e}Tae(t,!0,r,null,i);break;case"together":Tae(t,!1,null,null,void 0);break;default:t.memoizedState=null}return t.child}function o5(e,t){(t.mode&1)===0&&e!==null&&(e.alternate=null,t.alternate=null,t.flags|=2)}function vy(e,t,r){if(e!==null&&(t.dependencies=e.dependencies),vS|=t.lanes,(r&t.childLanes)===0)return null;if(e!==null&&t.child!==e.child)throw Error(wr(153));if(t.child!==null){for(e=t.child,r=vb(e,e.pendingProps),t.child=r,r.return=t;e.sibling!==null;)e=e.sibling,r=r.sibling=vb(e,e.pendingProps),r.return=t;r.sibling=null}return t.child}function gYt(e,t,r){switch(t.tag){case 3:bze(t),Nw();break;case 5:q5e(t);break;case 1:Zm(t.type)&&I5(t);break;case 4:$Ae(t,t.stateNode.containerInfo);break;case 10:var n=t.type._context,o=t.memoizedProps.value;CA(y5,n._currentValue),n._currentValue=o;break;case 13:if(n=t.memoizedState,n!==null)return n.dehydrated!==null?(CA(Cs,Cs.current&1),t.flags|=128,null):(r&t.child.childLanes)!==0?xze(e,t,r):(CA(Cs,Cs.current&1),e=vy(e,t,r),e!==null?e.sibling:null);CA(Cs,Cs.current&1);break;case 19:if(n=(r&t.childLanes)!==0,(e.flags&128)!==0){if(n)return Sze(e,t,r);t.flags|=128}if(o=t.memoizedState,o!==null&&(o.rendering=null,o.tail=null,o.lastEffect=null),CA(Cs,Cs.current),n)break;return null;case 22:case 23:return t.lanes=0,Qze(e,t,r)}return vy(e,t,r)}var Dze,hAe,vze,Fze;Dze=function(e,t){for(var r=t.child;r!==null;){if(r.tag===5||r.tag===6)e.appendChild(r.stateNode);else if(r.tag!==4&&r.child!==null){r.child.return=r,r=r.child;continue}if(r===t)break;for(;r.sibling===null;){if(r.return===null||r.return===t)return;r=r.return}r.sibling.return=r.return,r=r.sibling}};hAe=function(){};vze=function(e,t,r,n){var o=e.memoizedProps;if(o!==n){e=t.stateNode,QS(YC.current);var i=null;switch(r){case"input":o=_ae(e,o),n=_ae(e,n),i=[];break;case"select":o=ys({},o,{value:void 0}),n=ys({},n,{value:void 0}),i=[];break;case"textarea":o=Jae(e,o),n=Jae(e,n),i=[];break;default:typeof o.onClick!="function"&&typeof n.onClick=="function"&&(e.onclick=f5)}Kae(r,n);var a;r=null;for(c in o)if(!n.hasOwnProperty(c)&&o.hasOwnProperty(c)&&o[c]!=null)if(c==="style"){var A=o[c];for(a in A)A.hasOwnProperty(a)&&(r||(r={}),r[a]="")}else c!=="dangerouslySetInnerHTML"&&c!=="children"&&c!=="suppressContentEditableWarning"&&c!=="suppressHydrationWarning"&&c!=="autoFocus"&&(BP.hasOwnProperty(c)?i||(i=[]):(i=i||[]).push(c,null));for(c in n){var s=n[c];if(A=o?.[c],n.hasOwnProperty(c)&&s!==A&&(s!=null||A!=null))if(c==="style")if(A){for(a in A)!A.hasOwnProperty(a)||s&&s.hasOwnProperty(a)||(r||(r={}),r[a]="");for(a in s)s.hasOwnProperty(a)&&A[a]!==s[a]&&(r||(r={}),r[a]=s[a])}else r||(i||(i=[]),i.push(c,r)),r=s;else c==="dangerouslySetInnerHTML"?(s=s?s.__html:void 0,A=A?A.__html:void 0,s!=null&&A!==s&&(i=i||[]).push(c,s)):c==="children"?typeof s!="string"&&typeof s!="number"||(i=i||[]).push(c,""+s):c!=="suppressContentEditableWarning"&&c!=="suppressHydrationWarning"&&(BP.hasOwnProperty(c)?(s!=null&&c==="onScroll"&&GA("scroll",e),i||A===s||(i=[])):(i=i||[]).push(c,s))}r&&(i=i||[]).push("style",r);var c=i;(t.updateQueue=c)&&(t.flags|=4)}};Fze=function(e,t,r,n){r!==n&&(t.flags|=4)};function tP(e,t){if(!ts)switch(e.tailMode){case"hidden":t=e.tail;for(var r=null;t!==null;)t.alternate!==null&&(r=t),t=t.sibling;r===null?e.tail=null:r.sibling=null;break;case"collapsed":r=e.tail;for(var n=null;r!==null;)r.alternate!==null&&(n=r),r=r.sibling;n===null?t||e.tail===null?e.tail=null:e.tail.sibling=null:n.sibling=null}}function dg(e){var t=e.alternate!==null&&e.alternate.child===e.child,r=0,n=0;if(t)for(var o=e.child;o!==null;)r|=o.lanes|o.childLanes,n|=o.subtreeFlags&14680064,n|=o.flags&14680064,o.return=e,o=o.sibling;else for(o=e.child;o!==null;)r|=o.lanes|o.childLanes,n|=o.subtreeFlags,n|=o.flags,o.return=e,o=o.sibling;return e.subtreeFlags|=n,e.childLanes=r,t}function mYt(e,t,r){var n=t.pendingProps;switch(zAe(t),t.tag){case 2:case 16:case 15:case 0:case 11:case 7:case 8:case 12:case 9:case 14:return dg(t),null;case 1:return Zm(t.type)&&B5(),dg(t),null;case 3:return n=t.stateNode,kw(),NA(Xm),NA(fg),tse(),n.pendingContext&&(n.context=n.pendingContext,n.pendingContext=null),(e===null||e.child===null)&&(KJ(t)?t.flags|=4:e===null||e.memoizedState.isDehydrated&&(t.flags&256)===0||(t.flags|=1024,_B!==null&&(vAe(_B),_B=null))),hAe(e,t),dg(t),null;case 5:ese(t);var o=QS(FP.current);if(r=t.type,e!==null&&t.stateNode!=null)vze(e,t,r,n,o),e.ref!==t.ref&&(t.flags|=512,t.flags|=2097152);else{if(!n){if(t.stateNode===null)throw Error(wr(166));return dg(t),null}if(e=QS(YC.current),KJ(t)){n=t.stateNode,r=t.type;var i=t.memoizedProps;switch(n[VC]=t,n[DP]=i,e=(t.mode&1)!==0,r){case"dialog":GA("cancel",n),GA("close",n);break;case"iframe":case"object":case"embed":GA("load",n);break;case"video":case"audio":for(o=0;o<AP.length;o++)GA(AP[o],n);break;case"source":GA("error",n);break;case"img":case"image":case"link":GA("error",n),GA("load",n);break;case"details":GA("toggle",n);break;case"input":z4e(n,i),GA("invalid",n);break;case"select":n._wrapperState={wasMultiple:!!i.multiple},GA("invalid",n);break;case"textarea":j4e(n,i),GA("invalid",n)}Kae(r,i),o=null;for(var a in i)if(i.hasOwnProperty(a)){var A=i[a];a==="children"?typeof A=="string"?n.textContent!==A&&(i.suppressHydrationWarning!==!0&&zJ(n.textContent,A,e),o=["children",A]):typeof A=="number"&&n.textContent!==""+A&&(i.suppressHydrationWarning!==!0&&zJ(n.textContent,A,e),o=["children",""+A]):BP.hasOwnProperty(a)&&A!=null&&a==="onScroll"&&GA("scroll",n)}switch(r){case"input":TJ(n),K4e(n,i,!0);break;case"textarea":TJ(n),W4e(n);break;case"select":case"option":break;default:typeof i.onClick=="function"&&(n.onclick=f5)}n=o,t.updateQueue=n,n!==null&&(t.flags|=4)}else{a=o.nodeType===9?o:o.ownerDocument,e==="http://www.w3.org/1999/xhtml"&&(e=n5e(r)),e==="http://www.w3.org/1999/xhtml"?r==="script"?(e=a.createElement("div"),e.innerHTML="<script><\/script>",e=e.removeChild(e.firstChild)):typeof n.is=="string"?e=a.createElement(r,{is:n.is}):(e=a.createElement(r),r==="select"&&(a=e,n.multiple?a.multiple=!0:n.size&&(a.size=n.size))):e=a.createElementNS(e,r),e[VC]=t,e[DP]=n,Dze(e,t,!1,!1),t.stateNode=e;e:{switch(a=jae(r,n),r){case"dialog":GA("cancel",e),GA("close",e),o=n;break;case"iframe":case"object":case"embed":GA("load",e),o=n;break;case"video":case"audio":for(o=0;o<AP.length;o++)GA(AP[o],e);o=n;break;case"source":GA("error",e),o=n;break;case"img":case"image":case"link":GA("error",e),GA("load",e),o=n;break;case"details":GA("toggle",e),o=n;break;case"input":z4e(e,n),o=_ae(e,n),GA("invalid",e);break;case"option":o=n;break;case"select":e._wrapperState={wasMultiple:!!n.multiple},o=ys({},n,{value:void 0}),GA("invalid",e);break;case"textarea":j4e(e,n),o=Jae(e,n),GA("invalid",e);break;default:o=n}Kae(r,o),A=o;for(i in A)if(A.hasOwnProperty(i)){var s=A[i];i==="style"?a5e(e,s):i==="dangerouslySetInnerHTML"?(s=s?s.__html:void 0,s!=null&&o5e(e,s)):i==="children"?typeof s=="string"?(r!=="textarea"||s!=="")&&IP(e,s):typeof s=="number"&&IP(e,""+s):i!=="suppressContentEditableWarning"&&i!=="suppressHydrationWarning"&&i!=="autoFocus"&&(BP.hasOwnProperty(i)?s!=null&&i==="onScroll"&&GA("scroll",e):s!=null&&RAe(e,i,s,a))}switch(r){case"input":TJ(e),K4e(e,n,!1);break;case"textarea":TJ(e),W4e(e);break;case"option":n.value!=null&&e.setAttribute("value",""+Fb(n.value));break;case"select":e.multiple=!!n.multiple,i=n.value,i!=null?Fw(e,!!n.multiple,i,!1):n.defaultValue!=null&&Fw(e,!!n.multiple,n.defaultValue,!0);break;default:typeof o.onClick=="function"&&(e.onclick=f5)}switch(r){case"button":case"input":case"select":case"textarea":n=!!n.autoFocus;break e;case"img":n=!0;break e;default:n=!1}}n&&(t.flags|=4)}t.ref!==null&&(t.flags|=512,t.flags|=2097152)}return dg(t),null;case 6:if(e&&t.stateNode!=null)Fze(e,t,e.memoizedProps,n);else{if(typeof n!="string"&&t.stateNode===null)throw Error(wr(166));if(r=QS(FP.current),QS(YC.current),KJ(t)){if(n=t.stateNode,r=t.memoizedProps,n[VC]=t,(i=n.nodeValue!==r)&&(e=Vd,e!==null))switch(e.tag){case 3:zJ(n.nodeValue,r,(e.mode&1)!==0);break;case 5:e.memoizedProps.suppressHydrationWarning!==!0&&zJ(n.nodeValue,r,(e.mode&1)!==0)}i&&(t.flags|=4)}else n=(r.nodeType===9?r:r.ownerDocument).createTextNode(n),n[VC]=t,t.stateNode=n}return dg(t),null;case 13:if(NA(Cs),n=t.memoizedState,e===null||e.memoizedState!==null&&e.memoizedState.dehydrated!==null){if(ts&&Hd!==null&&(t.mode&1)!==0&&(t.flags&128)===0)K5e(),Nw(),t.flags|=98560,i=!1;else if(i=KJ(t),n!==null&&n.dehydrated!==null){if(e===null){if(!i)throw Error(wr(318));if(i=t.memoizedState,i=i!==null?i.dehydrated:null,!i)throw Error(wr(317));i[VC]=t}else Nw(),(t.flags&128)===0&&(t.memoizedState=null),t.flags|=4;dg(t),i=!1}else _B!==null&&(vAe(_B),_B=null),i=!0;if(!i)return t.flags&65536?t:null}return(t.flags&128)!==0?(t.lanes=r,t):(n=n!==null,n!==(e!==null&&e.memoizedState!==null)&&n&&(t.child.flags|=8192,(t.mode&1)!==0&&(e===null||(Cs.current&1)!==0?sl===0&&(sl=3):mse())),t.updateQueue!==null&&(t.flags|=4),dg(t),null);case 4:return kw(),hAe(e,t),e===null&&xP(t.stateNode.containerInfo),dg(t),null;case 10:return XAe(t.type._context),dg(t),null;case 17:return Zm(t.type)&&B5(),dg(t),null;case 19:if(NA(Cs),i=t.memoizedState,i===null)return dg(t),null;if(n=(t.flags&128)!==0,a=i.rendering,a===null)if(n)tP(i,!1);else{if(sl!==0||e!==null&&(e.flags&128)!==0)for(e=t.child;e!==null;){if(a=b5(e),a!==null){for(t.flags|=128,tP(i,!1),n=a.updateQueue,n!==null&&(t.updateQueue=n,t.flags|=4),t.subtreeFlags=0,n=r,r=t.child;r!==null;)i=r,e=n,i.flags&=14680066,a=i.alternate,a===null?(i.childLanes=0,i.lanes=e,i.child=null,i.subtreeFlags=0,i.memoizedProps=null,i.memoizedState=null,i.updateQueue=null,i.dependencies=null,i.stateNode=null):(i.childLanes=a.childLanes,i.lanes=a.lanes,i.child=a.child,i.subtreeFlags=0,i.deletions=null,i.memoizedProps=a.memoizedProps,i.memoizedState=a.memoizedState,i.updateQueue=a.updateQueue,i.type=a.type,e=a.dependencies,i.dependencies=e===null?null:{lanes:e.lanes,firstContext:e.firstContext}),r=r.sibling;return CA(Cs,Cs.current&1|2),t.child}e=e.sibling}i.tail!==null&&cc()>Vw&&(t.flags|=128,n=!0,tP(i,!1),t.lanes=4194304)}else{if(!n)if(e=b5(a),e!==null){if(t.flags|=128,n=!0,r=e.updateQueue,r!==null&&(t.updateQueue=r,t.flags|=4),tP(i,!0),i.tail===null&&i.tailMode==="hidden"&&!a.alternate&&!ts)return dg(t),null}else 2*cc()-i.renderingStartTime>Vw&&r!==1073741824&&(t.flags|=128,n=!0,tP(i,!1),t.lanes=4194304);i.isBackwards?(a.sibling=t.child,t.child=a):(r=i.last,r!==null?r.sibling=a:t.child=a,i.last=a)}return i.tail!==null?(t=i.tail,i.rendering=t,i.tail=t.sibling,i.renderingStartTime=cc(),t.sibling=null,r=Cs.current,CA(Cs,n?r&1|2:r&1),t):(dg(t),null);case 22:case 23:return gse(),n=t.memoizedState!==null,e!==null&&e.memoizedState!==null!==n&&(t.flags|=8192),n&&(t.mode&1)!==0?(kd&1073741824)!==0&&(dg(t),t.subtreeFlags&6&&(t.flags|=8192)):dg(t),null;case 24:return null;case 25:return null}throw Error(wr(156,t.tag))}function dYt(e,t){switch(zAe(t),t.tag){case 1:return Zm(t.type)&&B5(),e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 3:return kw(),NA(Xm),NA(fg),tse(),e=t.flags,(e&65536)!==0&&(e&128)===0?(t.flags=e&-65537|128,t):null;case 5:return ese(t),null;case 13:if(NA(Cs),e=t.memoizedState,e!==null&&e.dehydrated!==null){if(t.alternate===null)throw Error(wr(340));Nw()}return e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 19:return NA(Cs),null;case 4:return kw(),null;case 10:return XAe(t.type._context),null;case 22:case 23:return gse(),null;case 24:return null;default:return null}}var XJ=!1,pg=!1,pYt=typeof WeakSet=="function"?WeakSet:Set,yn=null;function Dw(e,t){var r=e.ref;if(r!==null)if(typeof r=="function")try{r(null)}catch(n){zs(e,t,n)}else r.current=null}function yAe(e,t,r){try{r()}catch(n){zs(e,t,n)}}var kJe=!1;function fYt(e,t){if(oAe=m5,e=T5e(),OAe(e)){if("selectionStart"in e)var r={start:e.selectionStart,end:e.selectionEnd};else e:{r=(r=e.ownerDocument)&&r.defaultView||window;var n=r.getSelection&&r.getSelection();if(n&&n.rangeCount!==0){r=n.anchorNode;var o=n.anchorOffset,i=n.focusNode;n=n.focusOffset;try{r.nodeType,i.nodeType}catch{r=null;break e}var a=0,A=-1,s=-1,c=0,l=0,u=e,g=null;t:for(;;){for(var m;u!==r||o!==0&&u.nodeType!==3||(A=a+o),u!==i||n!==0&&u.nodeType!==3||(s=a+n),u.nodeType===3&&(a+=u.nodeValue.length),(m=u.firstChild)!==null;)g=u,u=m;for(;;){if(u===e)break t;if(g===r&&++c===o&&(A=a),g===i&&++l===n&&(s=a),(m=u.nextSibling)!==null)break;u=g,g=u.parentNode}u=m}r=A===-1||s===-1?null:{start:A,end:s}}else r=null}r=r||{start:0,end:0}}else r=null;for(iAe={focusedElem:e,selectionRange:r},m5=!1,yn=t;yn!==null;)if(t=yn,e=t.child,(t.subtreeFlags&1028)!==0&&e!==null)e.return=t,yn=e;else for(;yn!==null;){t=yn;try{var p=t.alternate;if((t.flags&1024)!==0)switch(t.tag){case 0:case 11:case 15:break;case 1:if(p!==null){var d=p.memoizedProps,f=p.memoizedState,I=t.stateNode,C=I.getSnapshotBeforeUpdate(t.elementType===t.type?d:HB(t.type,d),f);I.__reactInternalSnapshotBeforeUpdate=C}break;case 3:var y=t.stateNode.containerInfo;y.nodeType===1?y.textContent="":y.nodeType===9&&y.documentElement&&y.removeChild(y.documentElement);break;case 5:case 6:case 4:case 17:break;default:throw Error(wr(163))}}catch(Q){zs(t,t.return,Q)}if(e=t.sibling,e!==null){e.return=t.return,yn=e;break}yn=t.return}return p=kJe,kJe=!1,p}function dP(e,t,r){var n=t.updateQueue;if(n=n!==null?n.lastEffect:null,n!==null){var o=n=n.next;do{if((o.tag&e)===e){var i=o.destroy;o.destroy=void 0,i!==void 0&&yAe(t,r,i)}o=o.next}while(o!==n)}}function H5(e,t){if(t=t.updateQueue,t=t!==null?t.lastEffect:null,t!==null){var r=t=t.next;do{if((r.tag&e)===e){var n=r.create;r.destroy=n()}r=r.next}while(r!==t)}}function QAe(e){var t=e.ref;if(t!==null){var r=e.stateNode;e.tag,e=r,typeof t=="function"?t(e):t.current=e}}function wze(e){var t=e.alternate;t!==null&&(e.alternate=null,wze(t)),e.child=null,e.deletions=null,e.sibling=null,e.tag===5&&(t=e.stateNode,t!==null&&(delete t[VC],delete t[DP],delete t[sAe],delete t[q_t],delete t[$_t])),e.stateNode=null,e.return=null,e.dependencies=null,e.memoizedProps=null,e.memoizedState=null,e.pendingProps=null,e.stateNode=null,e.updateQueue=null}function Rze(e){return e.tag===5||e.tag===3||e.tag===4}function HJe(e){e:for(;;){for(;e.sibling===null;){if(e.return===null||Rze(e.return))return null;e=e.return}for(e.sibling.return=e.return,e=e.sibling;e.tag!==5&&e.tag!==6&&e.tag!==18;){if(e.flags&2||e.child===null||e.tag===4)continue e;e.child.return=e,e=e.child}if(!(e.flags&2))return e.stateNode}}function EAe(e,t,r){var n=e.tag;if(n===5||n===6)e=e.stateNode,t?r.nodeType===8?r.parentNode.insertBefore(e,t):r.insertBefore(e,t):(r.nodeType===8?(t=r.parentNode,t.insertBefore(e,r)):(t=r,t.appendChild(e)),r=r._reactRootContainer,r!=null||t.onclick!==null||(t.onclick=f5));else if(n!==4&&(e=e.child,e!==null))for(EAe(e,t,r),e=e.sibling;e!==null;)EAe(e,t,r),e=e.sibling}function bAe(e,t,r){var n=e.tag;if(n===5||n===6)e=e.stateNode,t?r.insertBefore(e,t):r.appendChild(e);else if(n!==4&&(e=e.child,e!==null))for(bAe(e,t,r),e=e.sibling;e!==null;)bAe(e,t,r),e=e.sibling}var bu=null,VB=!1;function db(e,t,r){for(r=r.child;r!==null;)Uze(e,t,r),r=r.sibling}function Uze(e,t,r){if(_C&&typeof _C.onCommitFiberUnmount=="function")try{_C.onCommitFiberUnmount(U5,r)}catch{}switch(r.tag){case 5:pg||Dw(r,t);case 6:var n=bu,o=VB;bu=null,db(e,t,r),bu=n,VB=o,bu!==null&&(VB?(e=bu,r=r.stateNode,e.nodeType===8?e.parentNode.removeChild(r):e.removeChild(r)):bu.removeChild(r.stateNode));break;case 18:bu!==null&&(VB?(e=bu,r=r.stateNode,e.nodeType===8?Dae(e.parentNode,r):e.nodeType===1&&Dae(e,r),QP(e)):Dae(bu,r.stateNode));break;case 4:n=bu,o=VB,bu=r.stateNode.containerInfo,VB=!0,db(e,t,r),bu=n,VB=o;break;case 0:case 11:case 14:case 15:if(!pg&&(n=r.updateQueue,n!==null&&(n=n.lastEffect,n!==null))){o=n=n.next;do{var i=o,a=i.destroy;i=i.tag,a!==void 0&&((i&2)!==0||(i&4)!==0)&&yAe(r,t,a),o=o.next}while(o!==n)}db(e,t,r);break;case 1:if(!pg&&(Dw(r,t),n=r.stateNode,typeof n.componentWillUnmount=="function"))try{n.props=r.memoizedProps,n.state=r.memoizedState,n.componentWillUnmount()}catch(A){zs(r,t,A)}db(e,t,r);break;case 21:db(e,t,r);break;case 22:r.mode&1?(pg=(n=pg)||r.memoizedState!==null,db(e,t,r),pg=n):db(e,t,r);break;default:db(e,t,r)}}function VJe(e){var t=e.updateQueue;if(t!==null){e.updateQueue=null;var r=e.stateNode;r===null&&(r=e.stateNode=new pYt),t.forEach(function(n){var o=xYt.bind(null,e,n);r.has(n)||(r.add(n),n.then(o,o))})}}function kB(e,t){var r=t.deletions;if(r!==null)for(var n=0;n<r.length;n++){var o=r[n];try{var i=e,a=t,A=a;e:for(;A!==null;){switch(A.tag){case 5:bu=A.stateNode,VB=!1;break e;case 3:bu=A.stateNode.containerInfo,VB=!0;break e;case 4:bu=A.stateNode.containerInfo,VB=!0;break e}A=A.return}if(bu===null)throw Error(wr(160));Uze(i,a,o),bu=null,VB=!1;var s=o.alternate;s!==null&&(s.return=null),o.return=null}catch(c){zs(o,t,c)}}if(t.subtreeFlags&12854)for(t=t.child;t!==null;)Lze(t,e),t=t.sibling}function Lze(e,t){var r=e.alternate,n=e.flags;switch(e.tag){case 0:case 11:case 14:case 15:if(kB(t,e),kC(e),n&4){try{dP(3,e,e.return),H5(3,e)}catch(d){zs(e,e.return,d)}try{dP(5,e,e.return)}catch(d){zs(e,e.return,d)}}break;case 1:kB(t,e),kC(e),n&512&&r!==null&&Dw(r,r.return);break;case 5:if(kB(t,e),kC(e),n&512&&r!==null&&Dw(r,r.return),e.flags&32){var o=e.stateNode;try{IP(o,"")}catch(d){zs(e,e.return,d)}}if(n&4&&(o=e.stateNode,o!=null)){var i=e.memoizedProps,a=r!==null?r.memoizedProps:i,A=e.type,s=e.updateQueue;if(e.updateQueue=null,s!==null)try{A==="input"&&i.type==="radio"&&i.name!=null&&t5e(o,i),jae(A,a);var c=jae(A,i);for(a=0;a<s.length;a+=2){var l=s[a],u=s[a+1];l==="style"?a5e(o,u):l==="dangerouslySetInnerHTML"?o5e(o,u):l==="children"?IP(o,u):RAe(o,l,u,c)}switch(A){case"input":Yae(o,i);break;case"textarea":r5e(o,i);break;case"select":var g=o._wrapperState.wasMultiple;o._wrapperState.wasMultiple=!!i.multiple;var m=i.value;m!=null?Fw(o,!!i.multiple,m,!1):g!==!!i.multiple&&(i.defaultValue!=null?Fw(o,!!i.multiple,i.defaultValue,!0):Fw(o,!!i.multiple,i.multiple?[]:"",!1))}o[DP]=i}catch(d){zs(e,e.return,d)}}break;case 6:if(kB(t,e),kC(e),n&4){if(e.stateNode===null)throw Error(wr(162));o=e.stateNode,i=e.memoizedProps;try{o.nodeValue=i}catch(d){zs(e,e.return,d)}}break;case 3:if(kB(t,e),kC(e),n&4&&r!==null&&r.memoizedState.isDehydrated)try{QP(t.containerInfo)}catch(d){zs(e,e.return,d)}break;case 4:kB(t,e),kC(e);break;case 13:kB(t,e),kC(e),o=e.child,o.flags&8192&&(i=o.memoizedState!==null,o.stateNode.isHidden=i,!i||o.alternate!==null&&o.alternate.memoizedState!==null||(lse=cc())),n&4&&VJe(e);break;case 22:if(l=r!==null&&r.memoizedState!==null,e.mode&1?(pg=(c=pg)||l,kB(t,e),pg=c):kB(t,e),kC(e),n&8192){if(c=e.memoizedState!==null,(e.stateNode.isHidden=c)&&!l&&(e.mode&1)!==0)for(yn=e,l=e.child;l!==null;){for(u=yn=l;yn!==null;){switch(g=yn,m=g.child,g.tag){case 0:case 11:case 14:case 15:dP(4,g,g.return);break;case 1:Dw(g,g.return);var p=g.stateNode;if(typeof p.componentWillUnmount=="function"){n=g,r=g.return;try{t=n,p.props=t.memoizedProps,p.state=t.memoizedState,p.componentWillUnmount()}catch(d){zs(n,r,d)}}break;case 5:Dw(g,g.return);break;case 22:if(g.memoizedState!==null){YJe(u);continue}}m!==null?(m.return=g,yn=m):YJe(u)}l=l.sibling}e:for(l=null,u=e;;){if(u.tag===5){if(l===null){l=u;try{o=u.stateNode,c?(i=o.style,typeof i.setProperty=="function"?i.setProperty("display","none","important"):i.display="none"):(A=u.stateNode,s=u.memoizedProps.style,a=s!=null&&s.hasOwnProperty("display")?s.display:null,A.style.display=i5e("display",a))}catch(d){zs(e,e.return,d)}}}else if(u.tag===6){if(l===null)try{u.stateNode.nodeValue=c?"":u.memoizedProps}catch(d){zs(e,e.return,d)}}else if((u.tag!==22&&u.tag!==23||u.memoizedState===null||u===e)&&u.child!==null){u.child.return=u,u=u.child;continue}if(u===e)break e;for(;u.sibling===null;){if(u.return===null||u.return===e)break e;l===u&&(l=null),u=u.return}l===u&&(l=null),u.sibling.return=u.return,u=u.sibling}}break;case 19:kB(t,e),kC(e),n&4&&VJe(e);break;case 21:break;default:kB(t,e),kC(e)}}function kC(e){var t=e.flags;if(t&2){try{e:{for(var r=e.return;r!==null;){if(Rze(r)){var n=r;break e}r=r.return}throw Error(wr(160))}switch(n.tag){case 5:var o=n.stateNode;n.flags&32&&(IP(o,""),n.flags&=-33);var i=HJe(e);bAe(e,i,o);break;case 3:case 4:var a=n.stateNode.containerInfo,A=HJe(e);EAe(e,A,a);break;default:throw Error(wr(161))}}catch(s){zs(e,e.return,s)}e.flags&=-3}t&4096&&(e.flags&=-4097)}function BYt(e,t,r){yn=e,Tze(e,t,r)}function Tze(e,t,r){for(var n=(e.mode&1)!==0;yn!==null;){var o=yn,i=o.child;if(o.tag===22&&n){var a=o.memoizedState!==null||XJ;if(!a){var A=o.alternate,s=A!==null&&A.memoizedState!==null||pg;A=XJ;var c=pg;if(XJ=a,(pg=s)&&!c)for(yn=o;yn!==null;)a=yn,s=a.child,a.tag===22&&a.memoizedState!==null?OJe(o):s!==null?(s.return=a,yn=s):OJe(o);for(;i!==null;)yn=i,Tze(i,t,r),i=i.sibling;yn=o,XJ=A,pg=c}_Je(e,t,r)}else(o.subtreeFlags&8772)!==0&&i!==null?(i.return=o,yn=i):_Je(e,t,r)}}function _Je(e){for(;yn!==null;){var t=yn;if((t.flags&8772)!==0){var r=t.alternate;try{if((t.flags&8772)!==0)switch(t.tag){case 0:case 11:case 15:pg||H5(5,t);break;case 1:var n=t.stateNode;if(t.flags&4&&!pg)if(r===null)n.componentDidMount();else{var o=t.elementType===t.type?r.memoizedProps:HB(t.type,r.memoizedProps);n.componentDidUpdate(o,r.memoizedState,n.__reactInternalSnapshotBeforeUpdate)}var i=t.updateQueue;i!==null&&SJe(t,i,n);break;case 3:var a=t.updateQueue;if(a!==null){if(r=null,t.child!==null)switch(t.child.tag){case 5:r=t.child.stateNode;break;case 1:r=t.child.stateNode}SJe(t,a,r)}break;case 5:var A=t.stateNode;if(r===null&&t.flags&4){r=A;var s=t.memoizedProps;switch(t.type){case"button":case"input":case"select":case"textarea":s.autoFocus&&r.focus();break;case"img":s.src&&(r.src=s.src)}}break;case 6:break;case 4:break;case 12:break;case 13:if(t.memoizedState===null){var c=t.alternate;if(c!==null){var l=c.memoizedState;if(l!==null){var u=l.dehydrated;u!==null&&QP(u)}}}break;case 19:case 17:case 21:case 22:case 23:case 25:break;default:throw Error(wr(163))}pg||t.flags&512&&QAe(t)}catch(g){zs(t,t.return,g)}}if(t===e){yn=null;break}if(r=t.sibling,r!==null){r.return=t.return,yn=r;break}yn=t.return}}function YJe(e){for(;yn!==null;){var t=yn;if(t===e){yn=null;break}var r=t.sibling;if(r!==null){r.return=t.return,yn=r;break}yn=t.return}}function OJe(e){for(;yn!==null;){var t=yn;try{switch(t.tag){case 0:case 11:case 15:var r=t.return;try{H5(4,t)}catch(s){zs(t,r,s)}break;case 1:var n=t.stateNode;if(typeof n.componentDidMount=="function"){var o=t.return;try{n.componentDidMount()}catch(s){zs(t,o,s)}}var i=t.return;try{QAe(t)}catch(s){zs(t,i,s)}break;case 5:var a=t.return;try{QAe(t)}catch(s){zs(t,a,s)}}}catch(s){zs(t,t.return,s)}if(t===e){yn=null;break}var A=t.sibling;if(A!==null){A.return=t.return,yn=A;break}yn=t.return}}var IYt=Math.ceil,D5=Fy.ReactCurrentDispatcher,sse=Fy.ReactCurrentOwner,vf=Fy.ReactCurrentBatchConfig,ra=0,$l=null,Nc=null,xu=0,kd=0,vw=Ub(0),sl=0,LP=null,vS=0,V5=0,cse=0,pP=null,jm=null,lse=0,Vw=1/0,hy=null,v5=!1,xAe=null,Sb=null,ZJ=!1,hb=null,F5=0,fP=0,SAe=null,i5=-1,a5=0;function Zg(){return(ra&6)!==0?cc():i5!==-1?i5:i5=cc()}function Db(e){return(e.mode&1)===0?1:(ra&2)!==0&&xu!==0?xu&-xu:tYt.transition!==null?(a5===0&&(a5=I5e()),a5):(e=Ma,e!==0||(e=window.event,e=e===void 0?16:x5e(e.type)),e)}function OB(e,t,r,n){if(50<fP)throw fP=0,SAe=null,Error(wr(185));TP(e,r,n),((ra&2)===0||e!==$l)&&(e===$l&&((ra&2)===0&&(V5|=r),sl===4&&Ib(e,xu)),qm(e,n),r===1&&ra===0&&(t.mode&1)===0&&(Vw=cc()+500,N5&&Lb()))}function qm(e,t){var r=e.callbackNode;n_t(e,t);var n=g5(e,e===$l?xu:0);if(n===0)r!==null&&q4e(r),e.callbackNode=null,e.callbackPriority=0;else if(t=n&-n,e.callbackPriority!==t){if(r!=null&&q4e(r),t===1)e.tag===0?eYt(JJe.bind(null,e)):O5e(JJe.bind(null,e)),X_t(function(){(ra&6)===0&&Lb()}),r=null;else{switch(C5e(n)){case 1:r=GAe;break;case 4:r=f5e;break;case 16:r=u5;break;case 536870912:r=B5e;break;default:r=u5}r=_ze(r,Pze.bind(null,e))}e.callbackPriority=t,e.callbackNode=r}}function Pze(e,t){if(i5=-1,a5=0,(ra&6)!==0)throw Error(wr(327));var r=e.callbackNode;if(Tw()&&e.callbackNode!==r)return null;var n=g5(e,e===$l?xu:0);if(n===0)return null;if((n&30)!==0||(n&e.expiredLanes)!==0||t)t=w5(e,n);else{t=n;var o=ra;ra|=2;var i=Nze();($l!==e||xu!==t)&&(hy=null,Vw=cc()+500,ES(e,t));do try{yYt();break}catch(A){Gze(e,A)}while(!0);WAe(),D5.current=i,ra=o,Nc!==null?t=0:($l=null,xu=0,t=sl)}if(t!==0){if(t===2&&(o=$ae(e),o!==0&&(n=o,t=DAe(e,o))),t===1)throw r=LP,ES(e,0),Ib(e,n),qm(e,cc()),r;if(t===6)Ib(e,n);else{if(o=e.current.alternate,(n&30)===0&&!CYt(o)&&(t=w5(e,n),t===2&&(i=$ae(e),i!==0&&(n=i,t=DAe(e,i))),t===1))throw r=LP,ES(e,0),Ib(e,n),qm(e,cc()),r;switch(e.finishedWork=o,e.finishedLanes=n,t){case 0:case 1:throw Error(wr(345));case 2:CS(e,jm,hy);break;case 3:if(Ib(e,n),(n&130023424)===n&&(t=lse+500-cc(),10<t)){if(g5(e,0)!==0)break;if(o=e.suspendedLanes,(o&n)!==n){Zg(),e.pingedLanes|=e.suspendedLanes&o;break}e.timeoutHandle=AAe(CS.bind(null,e,jm,hy),t);break}CS(e,jm,hy);break;case 4:if(Ib(e,n),(n&4194240)===n)break;for(t=e.eventTimes,o=-1;0<n;){var a=31-YB(n);i=1<<a,a=t[a],a>o&&(o=a),n&=~i}if(n=o,n=cc()-n,n=(120>n?120:480>n?480:1080>n?1080:1920>n?1920:3e3>n?3e3:4320>n?4320:1960*IYt(n/1960))-n,10<n){e.timeoutHandle=AAe(CS.bind(null,e,jm,hy),n);break}CS(e,jm,hy);break;case 5:CS(e,jm,hy);break;default:throw Error(wr(329))}}}return qm(e,cc()),e.callbackNode===r?Pze.bind(null,e):null}function DAe(e,t){var r=pP;return e.current.memoizedState.isDehydrated&&(ES(e,t).flags|=256),e=w5(e,t),e!==2&&(t=jm,jm=r,t!==null&&vAe(t)),e}function vAe(e){jm===null?jm=e:jm.push.apply(jm,e)}function CYt(e){for(var t=e;;){if(t.flags&16384){var r=t.updateQueue;if(r!==null&&(r=r.stores,r!==null))for(var n=0;n<r.length;n++){var o=r[n],i=o.getSnapshot;o=o.value;try{if(!JB(i(),o))return!1}catch{return!1}}}if(r=t.child,t.subtreeFlags&16384&&r!==null)r.return=t,t=r;else{if(t===e)break;for(;t.sibling===null;){if(t.return===null||t.return===e)return!0;t=t.return}t.sibling.return=t.return,t=t.sibling}}return!0}function Ib(e,t){for(t&=~cse,t&=~V5,e.suspendedLanes|=t,e.pingedLanes&=~t,e=e.expirationTimes;0<t;){var r=31-YB(t),n=1<<r;e[r]=-1,t&=~n}}function JJe(e){if((ra&6)!==0)throw Error(wr(327));Tw();var t=g5(e,0);if((t&1)===0)return qm(e,cc()),null;var r=w5(e,t);if(e.tag!==0&&r===2){var n=$ae(e);n!==0&&(t=n,r=DAe(e,n))}if(r===1)throw r=LP,ES(e,0),Ib(e,t),qm(e,cc()),r;if(r===6)throw Error(wr(345));return e.finishedWork=e.current.alternate,e.finishedLanes=t,CS(e,jm,hy),qm(e,cc()),null}function use(e,t){var r=ra;ra|=1;try{return e(t)}finally{ra=r,ra===0&&(Vw=cc()+500,N5&&Lb())}}function FS(e){hb!==null&&hb.tag===0&&(ra&6)===0&&Tw();var t=ra;ra|=1;var r=vf.transition,n=Ma;try{if(vf.transition=null,Ma=1,e)return e()}finally{Ma=n,vf.transition=r,ra=t,(ra&6)===0&&Lb()}}function gse(){kd=vw.current,NA(vw)}function ES(e,t){e.finishedWork=null,e.finishedLanes=0;var r=e.timeoutHandle;if(r!==-1&&(e.timeoutHandle=-1,W_t(r)),Nc!==null)for(r=Nc.return;r!==null;){var n=r;switch(zAe(n),n.tag){case 1:n=n.type.childContextTypes,n!=null&&B5();break;case 3:kw(),NA(Xm),NA(fg),tse();break;case 5:ese(n);break;case 4:kw();break;case 13:NA(Cs);break;case 19:NA(Cs);break;case 10:XAe(n.type._context);break;case 22:case 23:gse()}r=r.return}if($l=e,Nc=e=vb(e.current,null),xu=kd=t,sl=0,LP=null,cse=V5=vS=0,jm=pP=null,yS!==null){for(t=0;t<yS.length;t++)if(r=yS[t],n=r.interleaved,n!==null){r.interleaved=null;var o=n.next,i=r.pending;if(i!==null){var a=i.next;i.next=o,n.next=a}r.pending=n}yS=null}return e}function Gze(e,t){do{var r=Nc;try{if(WAe(),r5.current=S5,x5){for(var n=hs.memoizedState;n!==null;){var o=n.queue;o!==null&&(o.pending=null),n=n.next}x5=!1}if(DS=0,ql=Al=hs=null,mP=!1,wP=0,sse.current=null,r===null||r.return===null){sl=1,LP=t,Nc=null;break}e:{var i=e,a=r.return,A=r,s=t;if(t=xu,A.flags|=32768,s!==null&&typeof s=="object"&&typeof s.then=="function"){var c=s,l=A,u=l.tag;if((l.mode&1)===0&&(u===0||u===11||u===15)){var g=l.alternate;g?(l.updateQueue=g.updateQueue,l.memoizedState=g.memoizedState,l.lanes=g.lanes):(l.updateQueue=null,l.memoizedState=null)}var m=UJe(a);if(m!==null){m.flags&=-257,LJe(m,a,A,i,t),m.mode&1&&RJe(i,c,t),t=m,s=c;var p=t.updateQueue;if(p===null){var d=new Set;d.add(s),t.updateQueue=d}else p.add(s);break e}else{if((t&1)===0){RJe(i,c,t),mse();break e}s=Error(wr(426))}}else if(ts&&A.mode&1){var f=UJe(a);if(f!==null){(f.flags&65536)===0&&(f.flags|=256),LJe(f,a,A,i,t),KAe(Hw(s,A));break e}}i=s=Hw(s,A),sl!==4&&(sl=2),pP===null?pP=[i]:pP.push(i),i=a;do{switch(i.tag){case 3:i.flags|=65536,t&=-t,i.lanes|=t;var I=Cze(i,s,t);xJe(i,I);break e;case 1:A=s;var C=i.type,y=i.stateNode;if((i.flags&128)===0&&(typeof C.getDerivedStateFromError=="function"||y!==null&&typeof y.componentDidCatch=="function"&&(Sb===null||!Sb.has(y)))){i.flags|=65536,t&=-t,i.lanes|=t;var Q=hze(i,A,t);xJe(i,Q);break e}}i=i.return}while(i!==null)}kze(r)}catch(E){t=E,Nc===r&&r!==null&&(Nc=r=r.return);continue}break}while(!0)}function Nze(){var e=D5.current;return D5.current=S5,e===null?S5:e}function mse(){(sl===0||sl===3||sl===2)&&(sl=4),$l===null||(vS&268435455)===0&&(V5&268435455)===0||Ib($l,xu)}function w5(e,t){var r=ra;ra|=2;var n=Nze();($l!==e||xu!==t)&&(hy=null,ES(e,t));do try{hYt();break}catch(o){Gze(e,o)}while(!0);if(WAe(),ra=r,D5.current=n,Nc!==null)throw Error(wr(261));return $l=null,xu=0,sl}function hYt(){for(;Nc!==null;)Mze(Nc)}function yYt(){for(;Nc!==null&&!j3t();)Mze(Nc)}function Mze(e){var t=Vze(e.alternate,e,kd);e.memoizedProps=e.pendingProps,t===null?kze(e):Nc=t,sse.current=null}function kze(e){var t=e;do{var r=t.alternate;if(e=t.return,(t.flags&32768)===0){if(r=mYt(r,t,kd),r!==null){Nc=r;return}}else{if(r=dYt(r,t),r!==null){r.flags&=32767,Nc=r;return}if(e!==null)e.flags|=32768,e.subtreeFlags=0,e.deletions=null;else{sl=6,Nc=null;return}}if(t=t.sibling,t!==null){Nc=t;return}Nc=t=e}while(t!==null);sl===0&&(sl=5)}function CS(e,t,r){var n=Ma,o=vf.transition;try{vf.transition=null,Ma=1,QYt(e,t,r,n)}finally{vf.transition=o,Ma=n}return null}function QYt(e,t,r,n){do Tw();while(hb!==null);if((ra&6)!==0)throw Error(wr(327));r=e.finishedWork;var o=e.finishedLanes;if(r===null)return null;if(e.finishedWork=null,e.finishedLanes=0,r===e.current)throw Error(wr(177));e.callbackNode=null,e.callbackPriority=0;var i=r.lanes|r.childLanes;if(o_t(e,i),e===$l&&(Nc=$l=null,xu=0),(r.subtreeFlags&2064)===0&&(r.flags&2064)===0||ZJ||(ZJ=!0,_ze(u5,function(){return Tw(),null})),i=(r.flags&15990)!==0,(r.subtreeFlags&15990)!==0||i){i=vf.transition,vf.transition=null;var a=Ma;Ma=1;var A=ra;ra|=4,sse.current=null,fYt(e,r),Lze(r,e),O_t(iAe),m5=!!oAe,iAe=oAe=null,e.current=r,BYt(r,e,o),W3t(),ra=A,Ma=a,vf.transition=i}else e.current=r;if(ZJ&&(ZJ=!1,hb=e,F5=o),i=e.pendingLanes,i===0&&(Sb=null),q3t(r.stateNode,n),qm(e,cc()),t!==null)for(n=e.onRecoverableError,r=0;r<t.length;r++)o=t[r],n(o.value,{componentStack:o.stack,digest:o.digest});if(v5)throw v5=!1,e=xAe,xAe=null,e;return(F5&1)!==0&&e.tag!==0&&Tw(),i=e.pendingLanes,(i&1)!==0?e===SAe?fP++:(fP=0,SAe=e):fP=0,Lb(),null}function Tw(){if(hb!==null){var e=C5e(F5),t=vf.transition,r=Ma;try{if(vf.transition=null,Ma=16>e?16:e,hb===null)var n=!1;else{if(e=hb,hb=null,F5=0,(ra&6)!==0)throw Error(wr(331));var o=ra;for(ra|=4,yn=e.current;yn!==null;){var i=yn,a=i.child;if((yn.flags&16)!==0){var A=i.deletions;if(A!==null){for(var s=0;s<A.length;s++){var c=A[s];for(yn=c;yn!==null;){var l=yn;switch(l.tag){case 0:case 11:case 15:dP(8,l,i)}var u=l.child;if(u!==null)u.return=l,yn=u;else for(;yn!==null;){l=yn;var g=l.sibling,m=l.return;if(wze(l),l===c){yn=null;break}if(g!==null){g.return=m,yn=g;break}yn=m}}}var p=i.alternate;if(p!==null){var d=p.child;if(d!==null){p.child=null;do{var f=d.sibling;d.sibling=null,d=f}while(d!==null)}}yn=i}}if((i.subtreeFlags&2064)!==0&&a!==null)a.return=i,yn=a;else e:for(;yn!==null;){if(i=yn,(i.flags&2048)!==0)switch(i.tag){case 0:case 11:case 15:dP(9,i,i.return)}var I=i.sibling;if(I!==null){I.return=i.return,yn=I;break e}yn=i.return}}var C=e.current;for(yn=C;yn!==null;){a=yn;var y=a.child;if((a.subtreeFlags&2064)!==0&&y!==null)y.return=a,yn=y;else e:for(a=C;yn!==null;){if(A=yn,(A.flags&2048)!==0)try{switch(A.tag){case 0:case 11:case 15:H5(9,A)}}catch(E){zs(A,A.return,E)}if(A===a){yn=null;break e}var Q=A.sibling;if(Q!==null){Q.return=A.return,yn=Q;break e}yn=A.return}}if(ra=o,Lb(),_C&&typeof _C.onPostCommitFiberRoot=="function")try{_C.onPostCommitFiberRoot(U5,e)}catch{}n=!0}return n}finally{Ma=r,vf.transition=t}}return!1}function zJe(e,t,r){t=Hw(r,t),t=Cze(e,t,1),e=xb(e,t,1),t=Zg(),e!==null&&(TP(e,1,t),qm(e,t))}function zs(e,t,r){if(e.tag===3)zJe(e,e,r);else for(;t!==null;){if(t.tag===3){zJe(t,e,r);break}else if(t.tag===1){var n=t.stateNode;if(typeof t.type.getDerivedStateFromError=="function"||typeof n.componentDidCatch=="function"&&(Sb===null||!Sb.has(n))){e=Hw(r,e),e=hze(t,e,1),t=xb(t,e,1),e=Zg(),t!==null&&(TP(t,1,e),qm(t,e));break}}t=t.return}}function EYt(e,t,r){var n=e.pingCache;n!==null&&n.delete(t),t=Zg(),e.pingedLanes|=e.suspendedLanes&r,$l===e&&(xu&r)===r&&(sl===4||sl===3&&(xu&130023424)===xu&&500>cc()-lse?ES(e,0):cse|=r),qm(e,t)}function Hze(e,t){t===0&&((e.mode&1)===0?t=1:(t=NJ,NJ<<=1,(NJ&130023424)===0&&(NJ=4194304)));var r=Zg();e=Dy(e,t),e!==null&&(TP(e,t,r),qm(e,r))}function bYt(e){var t=e.memoizedState,r=0;t!==null&&(r=t.retryLane),Hze(e,r)}function xYt(e,t){var r=0;switch(e.tag){case 13:var n=e.stateNode,o=e.memoizedState;o!==null&&(r=o.retryLane);break;case 19:n=e.stateNode;break;default:throw Error(wr(314))}n!==null&&n.delete(t),Hze(e,r)}var Vze;Vze=function(e,t,r){if(e!==null)if(e.memoizedProps!==t.pendingProps||Xm.current)Wm=!0;else{if((e.lanes&r)===0&&(t.flags&128)===0)return Wm=!1,gYt(e,t,r);Wm=(e.flags&131072)!==0}else Wm=!1,ts&&(t.flags&1048576)!==0&&J5e(t,h5,t.index);switch(t.lanes=0,t.tag){case 2:var n=t.type;o5(e,t),e=t.pendingProps;var o=Gw(t,fg.current);Lw(t,r),o=nse(null,t,n,e,o,r);var i=ose();return t.flags|=1,typeof o=="object"&&o!==null&&typeof o.render=="function"&&o.$$typeof===void 0?(t.tag=1,t.memoizedState=null,t.updateQueue=null,Zm(n)?(i=!0,I5(t)):i=!1,t.memoizedState=o.state!==null&&o.state!==void 0?o.state:null,qAe(t),o.updater=k5,t.stateNode=o,o._reactInternals=t,dAe(t,n,e,r),t=BAe(null,t,n,!0,i,r)):(t.tag=0,ts&&i&&JAe(t),Xg(null,t,o,r),t=t.child),t;case 16:n=t.elementType;e:{switch(o5(e,t),e=t.pendingProps,o=n._init,n=o(n._payload),t.type=n,o=t.tag=DYt(n),e=HB(n,e),o){case 0:t=fAe(null,t,n,e,r);break e;case 1:t=GJe(null,t,n,e,r);break e;case 11:t=TJe(null,t,n,e,r);break e;case 14:t=PJe(null,t,n,HB(n.type,e),r);break e}throw Error(wr(306,n,""))}return t;case 0:return n=t.type,o=t.pendingProps,o=t.elementType===n?o:HB(n,o),fAe(e,t,n,o,r);case 1:return n=t.type,o=t.pendingProps,o=t.elementType===n?o:HB(n,o),GJe(e,t,n,o,r);case 3:e:{if(bze(t),e===null)throw Error(wr(387));n=t.pendingProps,i=t.memoizedState,o=i.element,Z5e(e,t),E5(t,n,null,r);var a=t.memoizedState;if(n=a.element,i.isDehydrated)if(i={element:n,isDehydrated:!1,cache:a.cache,pendingSuspenseBoundaries:a.pendingSuspenseBoundaries,transitions:a.transitions},t.updateQueue.baseState=i,t.memoizedState=i,t.flags&256){o=Hw(Error(wr(423)),t),t=NJe(e,t,n,r,o);break e}else if(n!==o){o=Hw(Error(wr(424)),t),t=NJe(e,t,n,r,o);break e}else for(Hd=bb(t.stateNode.containerInfo.firstChild),Vd=t,ts=!0,_B=null,r=W5e(t,null,n,r),t.child=r;r;)r.flags=r.flags&-3|4096,r=r.sibling;else{if(Nw(),n===o){t=vy(e,t,r);break e}Xg(e,t,n,r)}t=t.child}return t;case 5:return q5e(t),e===null&&uAe(t),n=t.type,o=t.pendingProps,i=e!==null?e.memoizedProps:null,a=o.children,aAe(n,o)?a=null:i!==null&&aAe(n,i)&&(t.flags|=32),Eze(e,t),Xg(e,t,a,r),t.child;case 6:return e===null&&uAe(t),null;case 13:return xze(e,t,r);case 4:return $Ae(t,t.stateNode.containerInfo),n=t.pendingProps,e===null?t.child=Mw(t,null,n,r):Xg(e,t,n,r),t.child;case 11:return n=t.type,o=t.pendingProps,o=t.elementType===n?o:HB(n,o),TJe(e,t,n,o,r);case 7:return Xg(e,t,t.pendingProps,r),t.child;case 8:return Xg(e,t,t.pendingProps.children,r),t.child;case 12:return Xg(e,t,t.pendingProps.children,r),t.child;case 10:e:{if(n=t.type._context,o=t.pendingProps,i=t.memoizedProps,a=o.value,CA(y5,n._currentValue),n._currentValue=a,i!==null)if(JB(i.value,a)){if(i.children===o.children&&!Xm.current){t=vy(e,t,r);break e}}else for(i=t.child,i!==null&&(i.return=t);i!==null;){var A=i.dependencies;if(A!==null){a=i.child;for(var s=A.firstContext;s!==null;){if(s.context===n){if(i.tag===1){s=by(-1,r&-r),s.tag=2;var c=i.updateQueue;if(c!==null){c=c.shared;var l=c.pending;l===null?s.next=s:(s.next=l.next,l.next=s),c.pending=s}}i.lanes|=r,s=i.alternate,s!==null&&(s.lanes|=r),gAe(i.return,r,t),A.lanes|=r;break}s=s.next}}else if(i.tag===10)a=i.type===t.type?null:i.child;else if(i.tag===18){if(a=i.return,a===null)throw Error(wr(341));a.lanes|=r,A=a.alternate,A!==null&&(A.lanes|=r),gAe(a,r,t),a=i.sibling}else a=i.child;if(a!==null)a.return=i;else for(a=i;a!==null;){if(a===t){a=null;break}if(i=a.sibling,i!==null){i.return=a.return,a=i;break}a=a.return}i=a}Xg(e,t,o.children,r),t=t.child}return t;case 9:return o=t.type,n=t.pendingProps.children,Lw(t,r),o=Ff(o),n=n(o),t.flags|=1,Xg(e,t,n,r),t.child;case 14:return n=t.type,o=HB(n,t.pendingProps),o=HB(n.type,o),PJe(e,t,n,o,r);case 15:return yze(e,t,t.type,t.pendingProps,r);case 17:return n=t.type,o=t.pendingProps,o=t.elementType===n?o:HB(n,o),o5(e,t),t.tag=1,Zm(n)?(e=!0,I5(t)):e=!1,Lw(t,r),Ize(t,n,o),dAe(t,n,o,r),BAe(null,t,n,!0,e,r);case 19:return Sze(e,t,r);case 22:return Qze(e,t,r)}throw Error(wr(156,t.tag))};function _ze(e,t){return p5e(e,t)}function SYt(e,t,r,n){this.tag=e,this.key=r,this.sibling=this.child=this.return=this.stateNode=this.type=this.elementType=null,this.index=0,this.ref=null,this.pendingProps=t,this.dependencies=this.memoizedState=this.updateQueue=this.memoizedProps=null,this.mode=n,this.subtreeFlags=this.flags=0,this.deletions=null,this.childLanes=this.lanes=0,this.alternate=null}function Df(e,t,r,n){return new SYt(e,t,r,n)}function dse(e){return e=e.prototype,!(!e||!e.isReactComponent)}function DYt(e){if(typeof e=="function")return dse(e)?1:0;if(e!=null){if(e=e.$$typeof,e===LAe)return 11;if(e===TAe)return 14}return 2}function vb(e,t){var r=e.alternate;return r===null?(r=Df(e.tag,t,e.key,e.mode),r.elementType=e.elementType,r.type=e.type,r.stateNode=e.stateNode,r.alternate=e,e.alternate=r):(r.pendingProps=t,r.type=e.type,r.flags=0,r.subtreeFlags=0,r.deletions=null),r.flags=e.flags&14680064,r.childLanes=e.childLanes,r.lanes=e.lanes,r.child=e.child,r.memoizedProps=e.memoizedProps,r.memoizedState=e.memoizedState,r.updateQueue=e.updateQueue,t=e.dependencies,r.dependencies=t===null?null:{lanes:t.lanes,firstContext:t.firstContext},r.sibling=e.sibling,r.index=e.index,r.ref=e.ref,r}function A5(e,t,r,n,o,i){var a=2;if(n=e,typeof e=="function")dse(e)&&(a=1);else if(typeof e=="string")a=5;else e:switch(e){case Iw:return bS(r.children,o,i,t);case UAe:a=8,o|=8;break;case Mae:return e=Df(12,r,t,o|2),e.elementType=Mae,e.lanes=i,e;case kae:return e=Df(13,r,t,o),e.elementType=kae,e.lanes=i,e;case Hae:return e=Df(19,r,t,o),e.elementType=Hae,e.lanes=i,e;case qJe:return _5(r,o,i,t);default:if(typeof e=="object"&&e!==null)switch(e.$$typeof){case XJe:a=10;break e;case ZJe:a=9;break e;case LAe:a=11;break e;case TAe:a=14;break e;case pb:a=16,n=null;break e}throw Error(wr(130,e==null?e:typeof e,""))}return t=Df(a,r,t,o),t.elementType=e,t.type=n,t.lanes=i,t}function bS(e,t,r,n){return e=Df(7,e,n,t),e.lanes=r,e}function _5(e,t,r,n){return e=Df(22,e,n,t),e.elementType=qJe,e.lanes=r,e.stateNode={isHidden:!1},e}function Pae(e,t,r){return e=Df(6,e,null,t),e.lanes=r,e}function Gae(e,t,r){return t=Df(4,e.children!==null?e.children:[],e.key,t),t.lanes=r,t.stateNode={containerInfo:e.containerInfo,pendingChildren:null,implementation:e.implementation},t}function vYt(e,t,r,n,o){this.tag=t,this.containerInfo=e,this.finishedWork=this.pingCache=this.current=this.pendingChildren=null,this.timeoutHandle=-1,this.callbackNode=this.pendingContext=this.context=null,this.callbackPriority=0,this.eventTimes=Cae(0),this.expirationTimes=Cae(-1),this.entangledLanes=this.finishedLanes=this.mutableReadLanes=this.expiredLanes=this.pingedLanes=this.suspendedLanes=this.pendingLanes=0,this.entanglements=Cae(0),this.identifierPrefix=n,this.onRecoverableError=o,this.mutableSourceEagerHydrationData=null}function pse(e,t,r,n,o,i,a,A,s){return e=new vYt(e,t,r,A,s),t===1?(t=1,i===!0&&(t|=8)):t=0,i=Df(3,null,null,t),e.current=i,i.stateNode=e,i.memoizedState={element:n,isDehydrated:r,cache:null,transitions:null,pendingSuspenseBoundaries:null},qAe(i),e}function FYt(e,t,r){var n=3<arguments.length&&arguments[3]!==void 0?arguments[3]:null;return{$$typeof:Bw,key:n==null?null:""+n,children:e,containerInfo:t,implementation:r}}function Yze(e){if(!e)return wb;e=e._reactInternals;e:{if(RS(e)!==e||e.tag!==1)throw Error(wr(170));var t=e;do{switch(t.tag){case 3:t=t.stateNode.context;break e;case 1:if(Zm(t.type)){t=t.stateNode.__reactInternalMemoizedMergedChildContext;break e}}t=t.return}while(t!==null);throw Error(wr(171))}if(e.tag===1){var r=e.type;if(Zm(r))return Y5e(e,r,t)}return t}function Oze(e,t,r,n,o,i,a,A,s){return e=pse(r,n,!0,e,o,i,a,A,s),e.context=Yze(null),r=e.current,n=Zg(),o=Db(r),i=by(n,o),i.callback=t??null,xb(r,i,o),e.current.lanes=o,TP(e,o,n),qm(e,n),e}function Y5(e,t,r,n){var o=t.current,i=Zg(),a=Db(o);return r=Yze(r),t.context===null?t.context=r:t.pendingContext=r,t=by(i,a),t.payload={element:e},n=n===void 0?null:n,n!==null&&(t.callback=n),e=xb(o,t,a),e!==null&&(OB(e,o,a,i),t5(e,o,a)),a}function R5(e){return e=e.current,e.child?(e.child.tag===5,e.child.stateNode):null}function KJe(e,t){if(e=e.memoizedState,e!==null&&e.dehydrated!==null){var r=e.retryLane;e.retryLane=r!==0&&r<t?r:t}}function fse(e,t){KJe(e,t),(e=e.alternate)&&KJe(e,t)}function wYt(){return null}var Jze=typeof reportError=="function"?reportError:function(e){console.error(e)};function Bse(e){this._internalRoot=e}O5.prototype.render=Bse.prototype.render=function(e){var t=this._internalRoot;if(t===null)throw Error(wr(409));Y5(e,t,null,null)};O5.prototype.unmount=Bse.prototype.unmount=function(){var e=this._internalRoot;if(e!==null){this._internalRoot=null;var t=e.containerInfo;FS(function(){Y5(null,e,null,null)}),t[Sy]=null}};function O5(e){this._internalRoot=e}O5.prototype.unstable_scheduleHydration=function(e){if(e){var t=Q5e();e={blockedOn:null,target:e,priority:t};for(var r=0;r<Bb.length&&t!==0&&t<Bb[r].priority;r++);Bb.splice(r,0,e),r===0&&b5e(e)}};function Ise(e){return!(!e||e.nodeType!==1&&e.nodeType!==9&&e.nodeType!==11)}function J5(e){return!(!e||e.nodeType!==1&&e.nodeType!==9&&e.nodeType!==11&&(e.nodeType!==8||e.nodeValue!==" react-mount-point-unstable "))}function jJe(){}function RYt(e,t,r,n,o){if(o){if(typeof n=="function"){var i=n;n=function(){var c=R5(a);i.call(c)}}var a=Oze(t,n,e,0,null,!1,!1,"",jJe);return e._reactRootContainer=a,e[Sy]=a.current,xP(e.nodeType===8?e.parentNode:e),FS(),a}for(;o=e.lastChild;)e.removeChild(o);if(typeof n=="function"){var A=n;n=function(){var c=R5(s);A.call(c)}}var s=pse(e,0,!1,null,null,!1,!1,"",jJe);return e._reactRootContainer=s,e[Sy]=s.current,xP(e.nodeType===8?e.parentNode:e),FS(function(){Y5(t,s,r,n)}),s}function z5(e,t,r,n,o){var i=r._reactRootContainer;if(i){var a=i;if(typeof o=="function"){var A=o;o=function(){var s=R5(a);A.call(s)}}Y5(t,a,e,o)}else a=RYt(r,t,e,o,n);return R5(a)}h5e=function(e){switch(e.tag){case 3:var t=e.stateNode;if(t.current.memoizedState.isDehydrated){var r=aP(t.pendingLanes);r!==0&&(NAe(t,r|1),qm(t,cc()),(ra&6)===0&&(Vw=cc()+500,Lb()))}break;case 13:FS(function(){var n=Dy(e,1);if(n!==null){var o=Zg();OB(n,e,1,o)}}),fse(e,1)}};MAe=function(e){if(e.tag===13){var t=Dy(e,134217728);if(t!==null){var r=Zg();OB(t,e,134217728,r)}fse(e,134217728)}};y5e=function(e){if(e.tag===13){var t=Db(e),r=Dy(e,t);if(r!==null){var n=Zg();OB(r,e,t,n)}fse(e,t)}};Q5e=function(){return Ma};E5e=function(e,t){var r=Ma;try{return Ma=e,t()}finally{Ma=r}};Xae=function(e,t,r){switch(t){case"input":if(Yae(e,r),t=r.name,r.type==="radio"&&t!=null){for(r=e;r.parentNode;)r=r.parentNode;for(r=r.querySelectorAll("input[name="+JSON.stringify(""+t)+'][type="radio"]'),t=0;t<r.length;t++){var n=r[t];if(n!==e&&n.form===e.form){var o=G5(n);if(!o)throw Error(wr(90));e5e(n),Yae(n,o)}}}break;case"textarea":r5e(e,r);break;case"select":t=r.value,t!=null&&Fw(e,!!r.multiple,t,!1)}};c5e=use;l5e=FS;var UYt={usingClientEntryPoint:!1,Events:[GP,Qw,G5,A5e,s5e,use]},rP={findFiberByHostInstance:hS,bundleType:0,version:"18.3.1",rendererPackageName:"react-dom"},LYt={bundleType:rP.bundleType,version:rP.version,rendererPackageName:rP.rendererPackageName,rendererConfig:rP.rendererConfig,overrideHookState:null,overrideHookStateDeletePath:null,overrideHookStateRenamePath:null,overrideProps:null,overridePropsDeletePath:null,overridePropsRenamePath:null,setErrorHandler:null,setSuspenseHandler:null,scheduleUpdate:null,currentDispatcherRef:Fy.ReactCurrentDispatcher,findHostInstanceByFiber:function(e){return e=m5e(e),e===null?null:e.stateNode},findFiberByHostInstance:rP.findFiberByHostInstance||wYt,findHostInstancesForRefresh:null,scheduleRefresh:null,scheduleRoot:null,setRefreshHandler:null,getCurrentFiber:null,reconcilerVersion:"18.3.1-next-f1338f8080-20240426"};if(typeof __REACT_DEVTOOLS_GLOBAL_HOOK__<"u"&&(nP=__REACT_DEVTOOLS_GLOBAL_HOOK__,!nP.isDisabled&&nP.supportsFiber))try{U5=nP.inject(LYt),_C=nP}catch{}var nP;Od.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED=UYt;Od.createPortal=function(e,t){var r=2<arguments.length&&arguments[2]!==void 0?arguments[2]:null;if(!Ise(t))throw Error(wr(200));return FYt(e,t,null,r)};Od.createRoot=function(e,t){if(!Ise(e))throw Error(wr(299));var r=!1,n="",o=Jze;return t!=null&&(t.unstable_strictMode===!0&&(r=!0),t.identifierPrefix!==void 0&&(n=t.identifierPrefix),t.onRecoverableError!==void 0&&(o=t.onRecoverableError)),t=pse(e,1,!1,null,null,r,!1,n,o),e[Sy]=t.current,xP(e.nodeType===8?e.parentNode:e),new Bse(t)};Od.findDOMNode=function(e){if(e==null)return null;if(e.nodeType===1)return e;var t=e._reactInternals;if(t===void 0)throw typeof e.render=="function"?Error(wr(188)):(e=Object.keys(e).join(","),Error(wr(268,e)));return e=m5e(t),e=e===null?null:e.stateNode,e};Od.flushSync=function(e){return FS(e)};Od.hydrate=function(e,t,r){if(!J5(t))throw Error(wr(200));return z5(null,e,t,!0,r)};Od.hydrateRoot=function(e,t,r){if(!Ise(e))throw Error(wr(405));var n=r!=null&&r.hydratedSources||null,o=!1,i="",a=Jze;if(r!=null&&(r.unstable_strictMode===!0&&(o=!0),r.identifierPrefix!==void 0&&(i=r.identifierPrefix),r.onRecoverableError!==void 0&&(a=r.onRecoverableError)),t=Oze(t,null,e,1,r??null,o,!1,i,a),e[Sy]=t.current,xP(e),n)for(e=0;e<n.length;e++)r=n[e],o=r._getVersion,o=o(r._source),t.mutableSourceEagerHydrationData==null?t.mutableSourceEagerHydrationData=[r,o]:t.mutableSourceEagerHydrationData.push(r,o);return new O5(t)};Od.render=function(e,t,r){if(!J5(t))throw Error(wr(200));return z5(null,e,t,!1,r)};Od.unmountComponentAtNode=function(e){if(!J5(e))throw Error(wr(40));return e._reactRootContainer?(FS(function(){z5(null,null,e,!1,function(){e._reactRootContainer=null,e[Sy]=null})}),!0):!1};Od.unstable_batchedUpdates=use;Od.unstable_renderSubtreeIntoContainer=function(e,t,r,n){if(!J5(r))throw Error(wr(200));if(e==null||e._reactInternals===void 0)throw Error(wr(38));return z5(e,t,r,!1,n)};Od.version="18.3.1-next-f1338f8080-20240426"});var Wze=eu((qHo,jze)=>{"use strict";function Kze(){if(!(typeof __REACT_DEVTOOLS_GLOBAL_HOOK__>"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(Kze)}catch(e){console.error(e)}}Kze(),jze.exports=zze()});var Zze=eu(Cse=>{"use strict";var Xze=Wze();Cse.createRoot=Xze.createRoot,Cse.hydrateRoot=Xze.hydrateRoot;var $Ho});var PYt={};ki(PYt,{ExtensionMap:()=>QT,PluginExtensions:()=>Mne,Viewer:()=>hse,ViewerAutoPreset:()=>MP,consoleStats:()=>zce,isDebugMode:()=>ir,isProductionMode:()=>td,isTimingMode:()=>at,lib:()=>qGt,setDebugMode:()=>_ce,setProductionMode:()=>Vce,setTimingMode:()=>Yce,version:()=>kp});var Jj={};ki(Jj,{ArrayTrajectory:()=>fc,Bond:()=>Et,CifExportContext:()=>Cj,Coordinates:()=>tm,IndexedCustomProperty:()=>N2,Model:()=>_t,Queries:()=>wo,QueryContext:()=>qo,Structure:()=>Ye,StructureElement:()=>W,StructureProperties:()=>Ke,StructureQuery:()=>Ah,StructureSelection:()=>Qt,StructureSequence:()=>G2,StructureSymmetry:()=>Jc,Symmetry:()=>ah,Time:()=>rs,Topology:()=>Ty,Types:()=>oK,Unit:()=>ge,UnitRing:()=>Am,UnitRings:()=>oh,encode_mmCIF_categories:()=>fpe,mmCIF_Export_Filters:()=>Gqe,to_mmCIF:()=>hj});var hA;(n=>{function e(o){return o}n.create=e;function t(o,i){return(o&i)!==0}n.has=t;function r(o,i){return!!i&&(o&i)===i}n.hasAll=r})(hA||={});var tr;(Q=>{function e(E=512){return{current:[],offset:0,capacity:E,chunks:[]}}Q.create=e;function t(E){return E.chunks.length?(E.offset>0&&(E.chunks[E.chunks.length]=E.current.length===E.offset?E.current.join(""):E.current.slice(0,E.offset).join("")),E.chunks.join("")):E.current.length===E.offset?E.current.join(""):E.current.splice(0,E.offset).join("")}Q.getString=t;function r(E){let b=0;for(let x of E.chunks)b+=x.length;for(let x=0;x<E.offset;x++)b+=E.current[x].length;return b}Q.getSize=r;function n(E){return E.offset>0&&(E.current.length===E.offset?E.chunks[E.chunks.length]=E.current.join(""):E.chunks[E.chunks.length]=E.current.slice(0,E.offset).join(""),E.offset=0),E.chunks}Q.getChunks=n;let o;(b=>b[b.Count=512]="Count")(o||={});let i=[];(function(){let E="";for(let b=0;b<512;b++)i[b]=E,E=E+" "})();function a(E){l(E,`
|
|
`)}Q.newline=a;function A(E,b){b>0&&l(E,i[b])}Q.whitespace=A;function s(E){l(E," ")}Q.whitespace1=s;function c(E,b){b&&(E.offset===E.capacity&&(E.chunks[E.chunks.length]=E.current.join(""),E.offset=0),E.current[E.offset++]=b)}Q.write=c;function l(E,b){E.offset===E.capacity&&(E.chunks[E.chunks.length]=E.current.join(""),E.offset=0),E.current[E.offset++]=b}Q.writeSafe=l;function u(E,b,x){if(!b){A(E,x);return}let S=x-b.length;A(E,S),l(E,b)}Q.writePadLeft=u;function g(E,b,x){if(!b){A(E,x);return}let S=x-b.length;l(E,b),A(E,S)}Q.writePadRight=g;function m(E,b){l(E,""+b)}Q.writeInteger=m;function p(E,b){l(E,""+b+" ")}Q.writeIntegerAndSpace=p;function d(E,b,x){let S=""+b,w=x-S.length;A(E,w),l(E,S)}Q.writeIntegerPadLeft=d;function f(E,b,x){let S=""+b,w=x-S.length;l(E,S),A(E,w)}Q.writeIntegerPadRight=f;function I(E,b,x){l(E,""+Math.round(x*b)/x)}Q.writeFloat=I;function C(E,b,x,S){let w=""+Math.round(x*b)/x,R=S-w.length;A(E,R),l(E,w)}Q.writeFloatPadLeft=C;function y(E,b,x,S){let w=""+Math.round(x*b)/x,R=S-w.length;l(E,w),A(E,R)}Q.writeFloatPadRight=y})(tr||={});var co=(function(){if(typeof window<"u"&&window.performance){let e=window.performance;return()=>e.now()}else return typeof process<"u"&&process.hrtime!=="undefined"&&typeof process.hrtime=="function"?()=>{let e=process.hrtime();return e[0]*1e3+e[1]/1e6}:Date.now?()=>Date.now():()=>+new Date})();function NS(e,t=!0){if(isNaN(e))return"n/a";let r=Math.floor(e/(3600*1e3)),n=Math.floor(e/(60*1e3)%60),o=Math.floor(e/1e3%60),i=Math.floor(e%1e3).toString();for(;i.length<3;)i="0"+i;for(;!t&&i.length>1&&i[i.length-1]==="0";)i=i.substr(0,i.length-1);return r>0?`${r}h${n}m${o}.${i}s`:n>0?`${n}m${o}.${i}s`:o>0?`${o}.${i}s`:`${e.toFixed(0)}ms`}var Hn;(i=>{let e=typeof btoa<"u"?btoa:a=>Buffer.from(a).toString("base64"),t=[];function r(){let a=+new Date+co();for(let A=0;A<16;A++)t[A]=String.fromCharCode((a+Math.random()*255)%255|0),a=Math.floor(a/255);return e(t.join("")).replace(/\+/g,"-").replace(/\//g,"_").substr(0,22)}i.create22=r;function n(){let a=+new Date+co();return"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,function(s){let c=(a+Math.random()*16)%16|0;return a=Math.floor(a/16),(s==="x"?c:c&3|8).toString(16)})}i.createv4=n;function o(a){return typeof a=="string"}i.is=o})(Hn||={});function dKe(e,t){return e-t}function pKe(e){return Array.prototype.sort.call(e,dKe),e}var pce;(m=>{class e{constructor(){this.size=0}has(d){return!1}forEach(d,f){return f}}class t{constructor(d){this.idx=d;this.size=1}has(d){return d===this.idx}forEach(d,f){return d(this.idx,f),f}}class r{constructor(d,f){this.mask=d;this.size=f;this.length=d.length}has(d){return d<this.length&&!!this.mask[d]}_forEach(d,f){for(let I=0;I<this.length;I++)this.mask[I]&&d(I,f)}forEach(d,f){return this._forEach(d,f),f}}class n{constructor(d){this.size=d}has(d){return!0}_forEach(d,f){for(let I=0;I<this.size;I++)d(I,f)}forEach(d,f){return this._forEach(d,f),f}}class o{constructor(d){this.set=d;this._flat=void 0;this.size=d.size}has(d){return this.set.has(d)}_forEach(d,f){for(let I of this.flatten())d(I,f)}flatten(){if(this._flat)return this._flat;let d=new Int32Array(this.size),f=0;return this.set.forEach(I=>d[f++]=I),pKe(d),this._flat=d,this._flat}forEach(d,f){return this._forEach(d,f),f}}function i(p){return new n(p)}m.always=i,m.never=new e;function A(p){return new o(p)}m.ofSet=A;function s(p){return new t(p)}m.singleton=s;function c(p){let d=p.length;if(d===0)return new e;if(d===1)return new t(p[0]);let f=0;for(let y of p)y>f&&(f=y);if(d===f)return new n(d);if(d/f<1/12){let y=new Set;for(let Q of p)y.add(Q);return new o(y)}let C=new Int8Array(f+1);for(let y of p)C[y]=1;return new r(C,p.length)}m.ofUniqueIndices=c;function l(p,d){return new r(p,d)}m.ofMask=l;function u(p,d){for(let f of d)if(p.has(f))return!0;return!1}m.hasAny=u;function g(p,d){let f=0,I=0;if(d.forEach(C=>{p.has(C)||(f++,C>I&&(I=C))}),f/I<1/12){let C=new Set;return d.forEach(y=>{p.has(y)||C.add(y)}),A(C)}else{let C=new Uint8Array(I+1);return d.forEach(y=>{p.has(y)||(C[y]=1)}),l(C,f)}}m.complement=g})(pce||={});function ua(e=0,t=Number.MAX_SAFE_INTEGER){let r=e;return()=>{let n=r;return r=(r+1)%t,n}}var XP;(r=>{function e(n){return{ref:n}}r.create=e;function t(n,o){return n.ref=o,n}r.set=t})(XP||={});var fKe=ua(0,2147483647),Kd;(r=>{function e(n,o){return{id:fKe(),version:0,value:n,metadata:o}}r.create=e;function t(n,o){return{id:n.id,version:n.version+1,value:o,metadata:n.metadata}}r.withValue=t})(Kd||={});var D;(o=>{function e(i,a){return XP.create(Kd.create(i,a))}o.create=e;function t(i,a){return XP.set(i,Kd.withValue(i.ref,a))}o.update=t;function r(i,a){return XP.set(i,a)}o.set=r;function n(i,a){return i.ref.value!==a?t(i,a):i}o.updateIfChanged=n})(D||={});var Hc=function(){};function em(e,t){let r=Math.pow(10,t);return Math.round(r*e)/r}function Fa(e,t){let r=e.length;if(r!==t.length)return!1;for(let n=0;n<r;n++)if(e[n]!==t[n])return!1;return!0}var Bce=Object.prototype.hasOwnProperty;function ka(e,t){if(e===t)return!0;let r=Array.isArray(e),n=Array.isArray(t);if(r&&n){if(e.length!==t.length)return!1;for(let o=0;o<e.length;o++)if(!ka(e[o],t[o]))return!1;return!0}if(r!==n)return!1;if(e&&t&&typeof e=="object"&&typeof t=="object"){let o=Object.keys(e);if(o.length!==Object.keys(t).length)return!1;let i=e instanceof Date,a=t instanceof Date;if(i&&a)return e.getTime()===t.getTime();if(i!==a)return!1;let A=e instanceof RegExp,s=t instanceof RegExp;if(A&&s)return e.toString()===t.toString();if(A!==s)return!1;for(let c=0;c<o.length;c++)if(!Bce.call(t,o[c]))return!1;for(let c=0;c<o.length;c++)if(!ka(e[o[c]],t[o[c]]))return!1;return!0}return!1}function Gb(e,t){if(e===t)return!0;let r=Array.isArray(e),n=Array.isArray(t);return r&&n?BKe(e,t):r!==n?!1:e&&t&&typeof e=="object"&&typeof t=="object"?KB(e,t):!1}function KB(e,t){if(e===t)return!0;if(!e||!t)return!1;let r=Object.keys(e);if(Object.keys(t).length!==r.length)return!1;for(let n of r)if(!Bce.call(e,n)||e[n]!==t[n])return!1;return!0}function BKe(e,t){if(e===t)return!0;if(!e||!t||e.length!==t.length)return!1;for(let r=0,n=e.length;r<n;++r)if(e[r]!==t[r])return!1;return!0}function AA(e,t){return e!==void 0?e:t}function fce(e){return(e<10?"0":"")+e}function Ice(e){let t=e.getHours(),r=e.getMinutes(),n=e.getSeconds();return`${t}:${fce(r)}:${fce(n)}`}function Cce(e){let t=["B","KB","MB","GB","TB","PB","EB","ZB","YB"],r=Math.floor(Math.log(e)/Math.log(1024));return`${(e/Math.pow(1024,r)).toFixed(2)} ${t[r]}`}var wa={};ki(wa,{createAndFillArray:()=>IKe,createArray:()=>Nb,fillArrayValues:()=>hce,getArrayBounds:()=>Ry,isTypedArray:()=>ZP,typedArrayWindow:()=>qP});function Ry(e,t){let r=t&&typeof t.start<"u"?Math.max(Math.min(t.start,e-1),0):0,n=t&&typeof t.end<"u"?Math.min(t.end,e):e;return{start:r,end:n}}function Nb(e,t){let r=t&&typeof t.array<"u"?t.array:Array,{start:n,end:o}=Ry(e,t);return{array:new r(o-n),start:n,end:o}}function hce(e,t,r){for(let n=0,o=t.length;n<o;n++)t[n]=e(r+n);return t}function IKe(e,t,r){let{array:n,start:o}=Nb(e,r);return hce(t,n,o)}function ZP(e){return!!e.buffer&&typeof e.byteLength=="number"&&typeof e.BYTES_PER_ELEMENT=="number"}function qP(e,t){let{constructor:r,buffer:n,length:o,byteOffset:i,BYTES_PER_ELEMENT:a}=e,{start:A,end:s}=Ry(o,t);return A===0&&s===o?e:new r(n,i+a*A,Math.min(o,s-A))}var mn=1e-6;function So(e,t,r){return Math.abs(e-t)<=r}function Uf(e,t,r){return(e-t)/(r-t)}function $t(e,t,r){return Math.max(t,Math.min(r,e))}function CKe(e){return $t(e,0,1)}function ho(e,t,r){return e+(t-e)*r}function jd(e,t,r,n,o,i){let a=(r-e)*i,A=(n-t)*i,s=o*o,c=o*s;return(2*t-2*r+a+A)*c+(-3*t+3*r-2*a-A)*s+a*o+t}function $P(e,t,r,n){let o=1-n;return o*o*e+2*o*n*t+n*n*r}function MS(e,t,r){return r=CKe(Uf(r,e,t)),r*r*(3-2*r)}var ez=isFinite;function B(){return B.zero()}(Yr=>{function e(){let he=[.1,0,0];return he[0]=0,he}Yr.zero=e;function t(he){let Ge=e();return Ge[0]=he[0],Ge[1]=he[1],Ge[2]=he[2],Ge}Yr.clone=t;function r(he){return Array.isArray(he)&&he.length===3}Yr.is=r;function n(he){return ez(he[0])&&ez(he[1])&&ez(he[2])}Yr.isFinite=n;function o(he){return Number.isInteger(he[0])&&Number.isInteger(he[1])&&Number.isInteger(he[2])}Yr.isInteger=o;function i(he){return Number.isNaN(he[0])||Number.isNaN(he[1])||Number.isNaN(he[2])}Yr.hasNaN=i;function a(he){return he[0]=NaN,he[1]=NaN,he[2]=NaN,he}Yr.setNaN=a;function A(he){return u(he.x,he.y,he.z)}Yr.fromObj=A;function s(he){return{x:he[0],y:he[1],z:he[2]}}Yr.toObj=s;function c(he,Ge,ie){return he[0]=Ge[ie+0],he[1]=Ge[ie+1],he[2]=Ge[ie+2],he}Yr.fromArray=c;function l(he,Ge,ie){return Ge[ie+0]=he[0],Ge[ie+1]=he[1],Ge[ie+2]=he[2],Ge}Yr.toArray=l;function u(he,Ge,ie){let He=e();return He[0]=he,He[1]=Ge,He[2]=ie,He}Yr.create=u;function g(he){let Ge=e();return Ge[0]=he[0],Ge[1]=he[1],Ge[2]=he[2],Ge}Yr.ofArray=g;function m(he,Ge,ie,He){return he[0]=Ge,he[1]=ie,he[2]=He,he}Yr.set=m;function p(he,Ge){return he[0]=Ge[0],he[1]=Ge[1],he[2]=Ge[2],he}Yr.copy=p;function d(he,Ge,ie){return he[0]=Ge[0]+ie[0],he[1]=Ge[1]+ie[1],he[2]=Ge[2]+ie[2],he}Yr.add=d;function f(he,Ge,ie){return he[0]=Ge[0]-ie[0],he[1]=Ge[1]-ie[1],he[2]=Ge[2]-ie[2],he}Yr.sub=f;function I(he,Ge,ie){return he[0]=Ge[0]*ie[0],he[1]=Ge[1]*ie[1],he[2]=Ge[2]*ie[2],he}Yr.mul=I;function C(he,Ge,ie){return he[0]=Ge[0]/ie[0],he[1]=Ge[1]/ie[1],he[2]=Ge[2]/ie[2],he}Yr.div=C;function y(he,Ge,ie){return he[0]=Ge[0]%ie[0],he[1]=Ge[1]%ie[1],he[2]=Ge[2]%ie[2],he}Yr.mod=y;function Q(he,Ge,ie){return he[0]=Ge[0]*ie,he[1]=Ge[1]*ie,he[2]=Ge[2]*ie,he}Yr.scale=Q;function E(he,Ge,ie,He){return he[0]=Ge[0]+ie[0]*He,he[1]=Ge[1]+ie[1]*He,he[2]=Ge[2]+ie[2]*He,he}Yr.scaleAndAdd=E;function b(he,Ge,ie,He){return he[0]=Ge[0]-ie[0]*He,he[1]=Ge[1]-ie[1]*He,he[2]=Ge[2]-ie[2]*He,he}Yr.scaleAndSub=b;function x(he,Ge,ie){return he[0]=Ge[0]+ie,he[1]=Ge[1]+ie,he[2]=Ge[2]+ie,he}Yr.addScalar=x;function S(he,Ge,ie){return he[0]=Ge[0]-ie,he[1]=Ge[1]-ie,he[2]=Ge[2]-ie,he}Yr.subScalar=S;function w(he,Ge){return he[0]=Math.round(Ge[0]),he[1]=Math.round(Ge[1]),he[2]=Math.round(Ge[2]),he}Yr.round=w;function R(he,Ge){return he[0]=Math.ceil(Ge[0]),he[1]=Math.ceil(Ge[1]),he[2]=Math.ceil(Ge[2]),he}Yr.ceil=R;function T(he,Ge){return he[0]=Math.floor(Ge[0]),he[1]=Math.floor(Ge[1]),he[2]=Math.floor(Ge[2]),he}Yr.floor=T;function L(he,Ge){return he[0]=Math.trunc(Ge[0]),he[1]=Math.trunc(Ge[1]),he[2]=Math.trunc(Ge[2]),he}Yr.trunc=L;function F(he,Ge){return he[0]=Math.abs(Ge[0]),he[1]=Math.abs(Ge[1]),he[2]=Math.abs(Ge[2]),he}Yr.abs=F;function v(he,Ge,ie){return he[0]=Math.min(Ge[0],ie[0]),he[1]=Math.min(Ge[1],ie[1]),he[2]=Math.min(Ge[2],ie[2]),he}Yr.min=v;function U(he,Ge,ie){return he[0]=Math.max(Ge[0],ie[0]),he[1]=Math.max(Ge[1],ie[1]),he[2]=Math.max(Ge[2],ie[2]),he}Yr.max=U;function G(he,Ge,ie,He){return he[0]=Math.max(ie[0],Math.min(He[0],Ge[0])),he[1]=Math.max(ie[1],Math.min(He[1],Ge[1])),he[2]=Math.max(ie[2],Math.min(He[2],Ge[2])),he}Yr.clamp=G;function N(he,Ge){let ie=Ge[0]-he[0],He=Ge[1]-he[1],Me=Ge[2]-he[2];return Math.sqrt(ie*ie+He*He+Me*Me)}Yr.distance=N;function k(he,Ge){let ie=Ge[0]-he[0],He=Ge[1]-he[1],Me=Ge[2]-he[2];return ie*ie+He*He+Me*Me}Yr.squaredDistance=k;function J(he){let Ge=he[0],ie=he[1],He=he[2];return Math.sqrt(Ge*Ge+ie*ie+He*He)}Yr.magnitude=J;function H(he){let Ge=he[0],ie=he[1],He=he[2];return Ge*Ge+ie*ie+He*He}Yr.squaredMagnitude=H;function z(he,Ge,ie){return Q(he,q(he,Ge),ie)}Yr.setMagnitude=z;function _(he,Ge){return he[0]=-Ge[0],he[1]=-Ge[1],he[2]=-Ge[2],he}Yr.negate=_;function M(he,Ge){return he[0]=1/Ge[0],he[1]=1/Ge[1],he[2]=1/Ge[2],he}Yr.inverse=M;function q(he,Ge){let ie=Ge[0],He=Ge[1],Me=Ge[2],$e=ie*ie+He*He+Me*Me;return $e>0&&($e=1/Math.sqrt($e),he[0]=Ge[0]*$e,he[1]=Ge[1]*$e,he[2]=Ge[2]*$e),he}Yr.normalize=q;function ne(he,Ge){return he[0]*Ge[0]+he[1]*Ge[1]+he[2]*Ge[2]}Yr.dot=ne;function oe(he,Ge,ie){let He=Ge[0],Me=Ge[1],$e=Ge[2],Jt=ie[0],Tr=ie[1],xr=ie[2];return he[0]=Me*xr-$e*Tr,he[1]=$e*Jt-He*xr,he[2]=He*Tr-Me*Jt,he}Yr.cross=oe;function ae(he,Ge,ie,He){let Me=Ge[0],$e=Ge[1],Jt=Ge[2];return he[0]=Me+He*(ie[0]-Me),he[1]=$e+He*(ie[1]-$e),he[2]=Jt+He*(ie[2]-Jt),he}Yr.lerp=ae;let me=e();function Se(he,Ge,ie,He){let Me=$t(ne(Ge,ie),-1,1),$e=Math.acos(Me)*He;return E(me,ie,Ge,-Me),q(me,me),d(he,Q(he,Ge,Math.cos($e)),Q(me,me,Math.sin($e)))}Yr.slerp=Se;function ee(he,Ge,ie,He,Me,$e){let Jt=$e*$e,Tr=Jt*(2*$e-3)+1,xr=Jt*($e-2)+$e,_e=Jt*($e-1),zt=Jt*(3-2*$e);return he[0]=Ge[0]*Tr+ie[0]*xr+He[0]*_e+Me[0]*zt,he[1]=Ge[1]*Tr+ie[1]*xr+He[1]*_e+Me[1]*zt,he[2]=Ge[2]*Tr+ie[2]*xr+He[2]*_e+Me[2]*zt,he}Yr.hermite=ee;function O(he,Ge,ie,He,Me,$e){let Jt=1-$e,Tr=Jt*Jt,xr=$e*$e,_e=Tr*Jt,zt=3*$e*Tr,Ur=3*xr*Jt,Pr=xr*$e;return he[0]=Ge[0]*_e+ie[0]*zt+He[0]*Ur+Me[0]*Pr,he[1]=Ge[1]*_e+ie[1]*zt+He[1]*Ur+Me[1]*Pr,he[2]=Ge[2]*_e+ie[2]*zt+He[2]*Ur+Me[2]*Pr,he}Yr.bezier=O;function X(he,Ge,ie,He,Me){return he[0]=$P(Ge[0],ie[0],He[0],Me),he[1]=$P(Ge[1],ie[1],He[1],Me),he[2]=$P(Ge[2],ie[2],He[2],Me),he}Yr.quadraticBezier=X;function Ce(he,Ge,ie,He,Me,$e,Jt){return he[0]=jd(Ge[0],ie[0],He[0],Me[0],$e,Jt),he[1]=jd(Ge[1],ie[1],He[1],Me[1],$e,Jt),he[2]=jd(Ge[2],ie[2],He[2],Me[2],$e,Jt),he}Yr.spline=Ce;function Ne(he,Ge){let ie=Math.random()*2*Math.PI,He=Math.random()*2-1,Me=Math.sqrt(1-He*He)*Ge;return he[0]=Math.cos(ie)*Me,he[1]=Math.sin(ie)*Me,he[2]=He*Ge,he}Yr.random=Ne;function $(he,Ge,ie){let He=Ge[0],Me=Ge[1],$e=Ge[2],Jt=1/(ie[3]*He+ie[7]*Me+ie[11]*$e+ie[15]||1);return he[0]=(ie[0]*He+ie[4]*Me+ie[8]*$e+ie[12])*Jt,he[1]=(ie[1]*He+ie[5]*Me+ie[9]*$e+ie[13])*Jt,he[2]=(ie[2]*He+ie[6]*Me+ie[10]*$e+ie[14])*Jt,he}Yr.transformMat4=$;function pe(he,Ge,ie){let He=Ge[0],Me=Ge[1],$e=Ge[2];return he[0]=ie[0]*He+ie[4]*Me+ie[8]*$e,he[1]=ie[1]*He+ie[5]*Me+ie[9]*$e,he[2]=ie[2]*He+ie[6]*Me+ie[10]*$e,q(he,he)}Yr.transformDirection=pe;function ye(he,Ge,ie,He,Me,$e){let Jt=Ge[0+Me],Tr=Ge[1+Me],xr=Ge[2+Me],_e=1/(ie[3+$e]*Jt+ie[7+$e]*Tr+ie[11+$e]*xr+ie[15+$e]||1);return he[0+He]=(ie[0+$e]*Jt+ie[4+$e]*Tr+ie[8+$e]*xr+ie[12+$e])*_e,he[1+He]=(ie[1+$e]*Jt+ie[5+$e]*Tr+ie[9+$e]*xr+ie[13+$e])*_e,he[2+He]=(ie[2+$e]*Jt+ie[6+$e]*Tr+ie[10+$e]*xr+ie[14+$e])*_e,he}Yr.transformMat4Offset=ye;function Be(he,Ge,ie,He,Me,$e){let Jt=Ge[0+Me],Tr=Ge[1+Me],xr=Ge[2+Me];he[0+He]=ie[0+$e]*Jt+ie[4+$e]*Tr+ie[8+$e]*xr,he[1+He]=ie[1+$e]*Jt+ie[5+$e]*Tr+ie[9+$e]*xr,he[2+He]=ie[2+$e]*Jt+ie[6+$e]*Tr+ie[10+$e]*xr;let _e=Math.hypot(he[0+He],he[1+He],he[2+He]);return _e>0&&(he[0+He]/=_e,he[1+He]/=_e,he[2+He]/=_e),he}Yr.transformDirectionOffset=Be;function De(he,Ge,ie){let He=Ge[0],Me=Ge[1],$e=Ge[2];return he[0]=He*ie[0]+Me*ie[3]+$e*ie[6],he[1]=He*ie[1]+Me*ie[4]+$e*ie[7],he[2]=He*ie[2]+Me*ie[5]+$e*ie[8],he}Yr.transformMat3=De;function Te(he,Ge,ie){let He=Ge[0],Me=Ge[1],$e=Ge[2],Jt=ie[0],Tr=ie[1],xr=ie[2],_e=ie[3],zt=_e*He+Tr*$e-xr*Me,Ur=_e*Me+xr*He-Jt*$e,Pr=_e*$e+Jt*Me-Tr*He,Si=-Jt*He-Tr*Me-xr*$e;return he[0]=zt*_e+Si*-Jt+Ur*-xr-Pr*-Tr,he[1]=Ur*_e+Si*-Tr+Pr*-Jt-zt*-xr,he[2]=Pr*_e+Si*-xr+zt*-Tr-Ur*-Jt,he}Yr.transformQuat=Te;function be(he,Ge){let ie=Math.sqrt(H(he)*H(Ge));if(ie===0)return Math.PI/2;let He=ne(he,Ge)/ie;return Math.acos($t(He,-1,1))}Yr.angle=be;let Fe=e(),Ae=e(),fe=e(),Qe=e(),Ie=e(),le=e(),Oe=e();function tt(he,Ge,ie,He){f(Fe,he,Ge),f(Ae,ie,Ge),f(fe,Ge,ie),f(Qe,He,ie),oe(Ie,Fe,Ae),oe(le,fe,Qe);let Me=be(Ie,le);return oe(Oe,Ie,le),ne(Ae,Oe)>0?Me:-Me}Yr.dihedralAngle=tt;function it(he,Ge,ie,He){return Yr.set(he,He*Math.cos(ie)*Math.sin(Ge),He*Math.sin(ie)*Math.sin(Ge),He*Math.cos(Ge))}Yr.directionFromSpherical=it;function Rt(he,Ge){return he[0]===Ge[0]&&he[1]===Ge[1]&&he[2]===Ge[2]}Yr.exactEquals=Rt;function Mt(he,Ge){let ie=he[0],He=he[1],Me=he[2],$e=Ge[0],Jt=Ge[1],Tr=Ge[2];return Math.abs(ie-$e)<=1e-6*Math.max(1,Math.abs(ie),Math.abs($e))&&Math.abs(He-Jt)<=1e-6*Math.max(1,Math.abs(He),Math.abs(Jt))&&Math.abs(Me-Tr)<=1e-6*Math.max(1,Math.abs(Me),Math.abs(Tr))}Yr.equals=Mt;let Bt=e();function Zt(he,Ge,ie){let He=be(Ge,ie);if(Math.abs(He)<1e-4)return Y.setIdentity(he);if(Math.abs(He-Math.PI)<1e-6)return Y.fromRotation(he,Math.PI,Math.abs(Ge[0])<.9?Yr.unitX:Yr.unitZ);let Me=oe(Bt,Ge,ie);return Y.fromRotation(he,He,Me)}Yr.makeRotation=Zt;let Nr=Yr();function un(he,Ge,ie,He){let Me=Math.cos(He),$e=Math.sin(He),Jt=Yr.dot(Ge,ie);return Yr.cross(Nr,ie,Ge),he[0]=Ge[0]*Me+Nr[0]*$e+ie[0]*Jt*(1-Me),he[1]=Ge[1]*Me+Nr[1]*$e+ie[1]*Jt*(1-Me),he[2]=Ge[2]*Me+Nr[2]*$e+ie[2]*Jt*(1-Me),he}Yr.rotateAroundAxis=un;function xn(he){return he[0]===0&&he[1]===0&&he[2]===0}Yr.isZero=xn;function On(he,Ge,ie,He){f(he,Ge,He);let Me=ne(ie,he)/H(ie);return d(he,Q(he,ie,Me),He)}Yr.projectPointOnVector=On;let Zo=e();function oi(he,Ge,ie,He){return q(Zo,ie),f(he,Ge,He),f(he,Ge,Q(Zo,Zo,ne(he,Zo)))}Yr.projectPointOnPlane=oi;function pa(he,Ge,ie){let He=ne(ie,Ge)/H(ie);return Q(he,ie,He)}Yr.projectOnVector=pa;let io=e();function j(he,Ge,ie){return pa(io,Ge,ie),f(he,Ge,io)}Yr.projectOnPlane=j;function ue(he,Ge,ie){return q(he,oe(he,oe(he,Ge,ie),Ge)),!Yr.isZero(he)||(he[0]=1,he[1]=0,he[2]=0,q(he,oe(he,oe(he,Ge,he),Ge)),!Yr.isZero(he))||(he[0]=0,he[1]=1,he[2]=0,q(he,oe(he,oe(he,Ge,he),Ge)),!Yr.isZero(he))||(q(he,ie),!Yr.isZero(he))||(he[0]=1,he[1]=0,he[2]=0),he}Yr.orthogonalize=ue;function et(he,Ge,ie){return ne(Ge,ie)>0?p(he,Ge):_(he,p(he,Ge)),he}Yr.matchDirection=et;function gt(he,Ge){if(xn(Ge))return p(he,Yr.unitX);{let ie=e();return Math.abs(Ge[0])<Math.abs(Ge[1])&&Math.abs(Ge[0])<Math.abs(Ge[2])?(ie[0]=0,ie[1]=Ge[2],ie[2]=-Ge[1]):Math.abs(Ge[1])<Math.abs(Ge[2])?(ie[0]=-Ge[2],ie[1]=0,ie[2]=Ge[0]):(ie[0]=Ge[1],ie[1]=-Ge[0],ie[2]=0),q(he,ie)}}Yr.orthogonalDirection=gt;let ht=e(),wt=e();function Ut(he,Ge,ie,He){return f(ht,ie,Ge),f(wt,He,Ge),q(he,oe(he,ht,wt))}Yr.triangleNormal=Ut;let Wt=e();function qt(he,Ge,ie){return Yr.scaleAndAdd(he,Ge,Yr.sub(Wt,ie,Ge),.5)}Yr.center=qt;function Kt(he,Ge){return`[${he[0].toPrecision(Ge)} ${he[1].toPrecision(Ge)} ${he[2].toPrecision(Ge)}]`}Yr.toString=Kt,Yr.origin=u(0,0,0),Yr.unit=u(1,1,1),Yr.negUnit=u(-1,-1,-1),Yr.unitX=u(1,0,0),Yr.unitY=u(0,1,0),Yr.unitZ=u(0,0,1),Yr.negUnitX=u(-1,0,0),Yr.negUnitY=u(0,-1,0),Yr.negUnitZ=u(0,0,-1)})(B||={});function Ht(){return Ht.zero()}(ee=>{function e(){let O=[.1,0,0,0,0,0,0,0,0];return O[0]=0,O}ee.zero=e;function t(){let O=e();return O[0]=1,O[1]=0,O[2]=0,O[3]=0,O[4]=1,O[5]=0,O[6]=0,O[7]=0,O[8]=1,O}ee.identity=t;function r(O){return O[0]=1,O[1]=0,O[2]=0,O[3]=0,O[4]=1,O[5]=0,O[6]=0,O[7]=0,O[8]=1,O}ee.setIdentity=r;function n(O,X,Ce){return X[Ce+0]=O[0],X[Ce+1]=O[1],X[Ce+2]=O[2],X[Ce+3]=O[3],X[Ce+4]=O[4],X[Ce+5]=O[5],X[Ce+6]=O[6],X[Ce+7]=O[7],X[Ce+8]=O[8],X}ee.toArray=n;function o(O,X,Ce){return O[0]=X[Ce+0],O[1]=X[Ce+1],O[2]=X[Ce+2],O[3]=X[Ce+3],O[4]=X[Ce+4],O[5]=X[Ce+5],O[6]=X[Ce+6],O[7]=X[Ce+7],O[8]=X[Ce+8],O}ee.fromArray=o;function i(O,X,Ce,Ne){return O[0]=X[0],O[1]=X[1],O[2]=X[2],O[3]=Ce[0],O[4]=Ce[1],O[5]=Ce[2],O[6]=Ne[0],O[7]=Ne[1],O[8]=Ne[2],O}ee.fromColumns=i;function a(O,X){return O[0]=X[0],O[1]=X[1],O[2]=X[2],O[3]=X[4],O[4]=X[5],O[5]=X[6],O[6]=X[8],O[7]=X[9],O[8]=X[10],O}ee.fromMat4=a;let A=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0];function s(O,X,Ce){return Y.fromEuler(A,X,Ce),a(O,A)}ee.fromEuler=s;function c(O,X,Ce){return Y.fromRotation(A,X,Ce),a(O,A)}ee.fromRotation=c;function l(O,X,Ce,Ne,$,pe,ye,Be,De){let Te=e();return Te[0]=O,Te[1]=X,Te[2]=Ce,Te[3]=Ne,Te[4]=$,Te[5]=pe,Te[6]=ye,Te[7]=Be,Te[8]=De,Te}ee.create=l;let u=t();function g(O,X){return f(O,u,typeof X>"u"?1e-6:X)}ee.isIdentity=g;function m(O){return Array.isArray(O)&&O.length===9}ee.is=m;function p(O){for(let X=0;X<9;X++)if(Number.isNaN(O[X]))return!0;return!1}ee.hasNaN=p;function d(O){return y(e(),O)}ee.clone=d;function f(O,X,Ce){for(let Ne=0;Ne<9;Ne++)if(Math.abs(O[Ne]-X[Ne])>Ce)return!1;return!0}ee.areEqual=f;function I(O,X,Ce,Ne){O[3*Ce+X]=Ne}ee.setValue=I;function C(O,X,Ce){return O[3*Ce+X]}ee.getValue=C;function y(O,X){return O[0]=X[0],O[1]=X[1],O[2]=X[2],O[3]=X[3],O[4]=X[4],O[5]=X[5],O[6]=X[6],O[7]=X[7],O[8]=X[8],O}ee.copy=y;function Q(O,X){if(O===X){let Ce=X[1],Ne=X[2],$=X[5];O[1]=X[3],O[2]=X[6],O[3]=Ce,O[5]=X[7],O[6]=Ne,O[7]=$}else O[0]=X[0],O[1]=X[3],O[2]=X[6],O[3]=X[1],O[4]=X[4],O[5]=X[7],O[6]=X[2],O[7]=X[5],O[8]=X[8];return O}ee.transpose=Q;function E(O,X){let Ce=X[0],Ne=X[1],$=X[2],pe=X[3],ye=X[4],Be=X[5],De=X[6],Te=X[7],be=X[8],Fe=be*ye-Be*Te,Ae=-be*pe+Be*De,fe=Te*pe-ye*De,Qe=Ce*Fe+Ne*Ae+$*fe;return Qe?(Qe=1/Qe,O[0]=Fe*Qe,O[1]=(-be*Ne+$*Te)*Qe,O[2]=(Be*Ne-$*ye)*Qe,O[3]=Ae*Qe,O[4]=(be*Ce-$*De)*Qe,O[5]=(-Be*Ce+$*pe)*Qe,O[6]=fe*Qe,O[7]=(-Te*Ce+Ne*De)*Qe,O[8]=(ye*Ce-Ne*pe)*Qe,O):(console.warn("non-invertible matrix.",X),O)}ee.invert=E;function b(O,X){return O===X?(O[3]=X[1],O[6]=X[2],O[7]=X[5]):(O[0]=X[0],O[1]=X[1],O[2]=X[2],O[3]=X[1],O[4]=X[4],O[5]=X[5],O[6]=X[2],O[7]=X[5],O[8]=X[8]),O}ee.symmtricFromUpper=b;function x(O,X){return O===X?(O[1]=X[3],O[2]=X[6],O[5]=X[7]):(O[0]=X[0],O[1]=X[3],O[2]=X[6],O[3]=X[3],O[4]=X[4],O[5]=X[7],O[6]=X[6],O[7]=X[7],O[8]=X[8]),O}ee.symmtricFromLower=x;function S(O){let X=O[0],Ce=O[1],Ne=O[2],$=O[3],pe=O[4],ye=O[5],Be=O[6],De=O[7],Te=O[8],be=Te*pe-ye*De,Fe=-Te*$+ye*Be,Ae=De*$-pe*Be;return X*be+Ce*Fe+Ne*Ae}ee.determinant=S;function w(O){return O[0]+O[4]+O[8]}ee.trace=w;function R(O,X,Ce){return O[0]=X[0]-Ce[0],O[1]=X[1]-Ce[1],O[2]=X[2]-Ce[2],O[3]=X[3]-Ce[3],O[4]=X[4]-Ce[4],O[5]=X[5]-Ce[5],O[6]=X[6]-Ce[6],O[7]=X[7]-Ce[7],O[8]=X[8]-Ce[8],O}ee.sub=R;function T(O,X,Ce){return O[0]=X[0]+Ce[0],O[1]=X[1]+Ce[1],O[2]=X[2]+Ce[2],O[3]=X[3]+Ce[3],O[4]=X[4]+Ce[4],O[5]=X[5]+Ce[5],O[6]=X[6]+Ce[6],O[7]=X[7]+Ce[7],O[8]=X[8]+Ce[8],O}ee.add=T;function L(O,X,Ce){let Ne=X[0],$=X[1],pe=X[2],ye=X[3],Be=X[4],De=X[5],Te=X[6],be=X[7],Fe=X[8],Ae=Ce[0],fe=Ce[1],Qe=Ce[2],Ie=Ce[3],le=Ce[4],Oe=Ce[5],tt=Ce[6],it=Ce[7],Rt=Ce[8];return O[0]=Ae*Ne+fe*ye+Qe*Te,O[1]=Ae*$+fe*Be+Qe*be,O[2]=Ae*pe+fe*De+Qe*Fe,O[3]=Ie*Ne+le*ye+Oe*Te,O[4]=Ie*$+le*Be+Oe*be,O[5]=Ie*pe+le*De+Oe*Fe,O[6]=tt*Ne+it*ye+Rt*Te,O[7]=tt*$+it*Be+Rt*be,O[8]=tt*pe+it*De+Rt*Fe,O}ee.mul=L;function F(O,X,Ce){return O[0]=X[0]-Ce,O[1]=X[1]-Ce,O[2]=X[2]-Ce,O[3]=X[3]-Ce,O[4]=X[4]-Ce,O[5]=X[5]-Ce,O[6]=X[6]-Ce,O[7]=X[7]-Ce,O[8]=X[8]-Ce,O}ee.subScalar=F;function v(O,X,Ce){return O[0]=X[0]+Ce,O[1]=X[1]+Ce,O[2]=X[2]+Ce,O[3]=X[3]+Ce,O[4]=X[4]+Ce,O[5]=X[5]+Ce,O[6]=X[6]+Ce,O[7]=X[7]+Ce,O[8]=X[8]+Ce,O}ee.addScalar=v;function U(O,X,Ce){return O[0]=X[0]*Ce,O[1]=X[1]*Ce,O[2]=X[2]*Ce,O[3]=X[3]*Ce,O[4]=X[4]*Ce,O[5]=X[5]*Ce,O[6]=X[6]*Ce,O[7]=X[7]*Ce,O[8]=X[8]*Ce,O}ee.mulScalar=U;let G=Math.PI/3,N=e();function k(O,X){let Ce=X[1]*X[1]+X[2]*X[2]+X[5]*X[5];if(Ce===0)O[0]=X[0],O[1]=X[4],O[2]=X[8];else{let Ne=w(X)/3,$=X[0]-Ne,pe=X[4]-Ne,ye=X[8]-Ne,Be=$*$+pe*pe+ye*ye+2*Ce,De=Math.sqrt(Be/6);U(N,ee.Identity,Ne),R(N,X,N),U(N,N,1/De);let Te=S(N)/2,be=Te<=-1?G:Te>=1?0:Math.acos(Te)/3;O[0]=Ne+2*De*Math.cos(be),O[2]=Ne+2*De*Math.cos(be+2*G),O[1]=3*Ne-O[0]-O[2]}return O}ee.symmetricEigenvalues=k;let J=[.1,0,0],H=[.1,0,0],z=[.1,0,0],_=[.1,0,0],M=[.1,0,0],q=[.1,0,0];function ne(O,X,Ce){B.set(J,X[0]-Ce,X[1],X[2]),B.set(H,X[1],X[4]-Ce,X[5]),B.set(z,X[2],X[5],X[8]-Ce),B.cross(_,J,H),B.cross(M,J,z),B.cross(q,H,z);let Ne=B.dot(_,_),$=B.dot(M,M),pe=B.dot(q,q),ye=Ne,Be=0;return $>ye&&(ye=$,Be=1),pe>ye&&(Be=2),Be===0?B.scale(O,_,1/Math.sqrt(Ne)):Be===1?B.scale(O,M,1/Math.sqrt($)):B.scale(O,q,1/Math.sqrt(pe)),O}ee.eigenvector=ne;function oe(O,X){return a(O,X),E(O,O),Q(O,O),O}ee.directionTransform=oe,ee.Identity=t();function me(O,X){return O[0]*X[0]+O[1]*X[1]+O[2]*X[2]+O[3]*X[3]+O[4]*X[4]+O[5]*X[5]+O[6]*X[6]+O[7]*X[7]+O[8]*X[8]}ee.innerProduct=me;function Se(O,X){let Ce=X[0],Ne=X[1],$=X[2],pe=X[4],ye=X[5],Be=X[6],De=X[8],Te=X[9],be=X[10];return O[0]=ye*be-Be*Te,O[1]=Be*De-pe*be,O[2]=pe*Te-ye*De,O[3]=Te*$-be*Ne,O[4]=be*Ce-De*$,O[5]=De*Ne-Te*Ce,O[6]=Ne*Be-$*ye,O[7]=$*pe-Ce*Be,O[8]=Ce*ye-Ne*pe,O}ee.adjointFromMat4=Se})(Ht||={});function Du(e){return Object.keys(e)}function Or(e){throw new Error("unreachable")}function Uy(e){return typeof e?.then=="function"}function gr(){return gr.zero()}(Ne=>{function e(){let $=[.1,0,0,0];return $[0]=0,$}Ne.zero=e;function t(){let $=e();return $[3]=1,$}Ne.identity=t;function r($){$[0]=0,$[1]=0,$[2]=0,$[3]=1}Ne.setIdentity=r;function n($){return Number.isNaN($[0])||Number.isNaN($[1])||Number.isNaN($[2])||Number.isNaN($[3])}Ne.hasNaN=n;function o($,pe,ye,Be){let De=t();return De[0]=$,De[1]=pe,De[2]=ye,De[3]=Be,De}Ne.create=o;function i($){return Array.isArray($)&&$.length===4}Ne.is=i;function a($,pe,ye){ye=ye*.5;let Be=Math.sin(ye);return $[0]=Be*pe[0],$[1]=Be*pe[1],$[2]=Be*pe[2],$[3]=Math.cos(ye),$}Ne.setAxisAngle=a;function A($,pe){let ye=Math.acos(pe[3])*2,Be=Math.sin(ye/2);return Be!==0?($[0]=pe[0]/Be,$[1]=pe[1]/Be,$[2]=pe[2]/Be):($[0]=1,$[1]=0,$[2]=0),ye}Ne.getAxisAngle=A;function s($,pe,ye){let Be=pe[0],De=pe[1],Te=pe[2],be=pe[3],Fe=ye[0],Ae=ye[1],fe=ye[2],Qe=ye[3];return $[0]=Be*Qe+be*Fe+De*fe-Te*Ae,$[1]=De*Qe+be*Ae+Te*Fe-Be*fe,$[2]=Te*Qe+be*fe+Be*Ae-De*Fe,$[3]=be*Qe-Be*Fe-De*Ae-Te*fe,$}Ne.multiply=s;function c($,pe,ye){ye*=.5;let Be=pe[0],De=pe[1],Te=pe[2],be=pe[3],Fe=Math.sin(ye),Ae=Math.cos(ye);return $[0]=Be*Ae+be*Fe,$[1]=De*Ae+Te*Fe,$[2]=Te*Ae-De*Fe,$[3]=be*Ae-Be*Fe,$}Ne.rotateX=c;function l($,pe,ye){ye*=.5;let Be=pe[0],De=pe[1],Te=pe[2],be=pe[3],Fe=Math.sin(ye),Ae=Math.cos(ye);return $[0]=Be*Ae-Te*Fe,$[1]=De*Ae+be*Fe,$[2]=Te*Ae+Be*Fe,$[3]=be*Ae-De*Fe,$}Ne.rotateY=l;function u($,pe,ye){ye*=.5;let Be=pe[0],De=pe[1],Te=pe[2],be=pe[3],Fe=Math.sin(ye),Ae=Math.cos(ye);return $[0]=Be*Ae+De*Fe,$[1]=De*Ae-Be*Fe,$[2]=Te*Ae+be*Fe,$[3]=be*Ae-Te*Fe,$}Ne.rotateZ=u;function g($,pe){let ye=pe[0],Be=pe[1],De=pe[2];return $[0]=ye,$[1]=Be,$[2]=De,$[3]=Math.sqrt(Math.abs(1-ye*ye-Be*Be-De*De)),$}Ne.calculateW=g;function m($,pe,ye,Be){let De=pe[0],Te=pe[1],be=pe[2],Fe=pe[3],Ae=ye[0],fe=ye[1],Qe=ye[2],Ie=ye[3],le,Oe,tt,it,Rt;return Oe=De*Ae+Te*fe+be*Qe+Fe*Ie,Oe<0&&(Oe=-Oe,Ae=-Ae,fe=-fe,Qe=-Qe,Ie=-Ie),1-Oe>1e-6?(le=Math.acos(Oe),tt=Math.sin(le),it=Math.sin((1-Be)*le)/tt,Rt=Math.sin(Be*le)/tt):(it=1-Be,Rt=Be),$[0]=it*De+Rt*Ae,$[1]=it*Te+Rt*fe,$[2]=it*be+Rt*Qe,$[3]=it*Fe+Rt*Ie,$}Ne.slerp=m;function p($,pe){let ye=pe[0],Be=pe[1],De=pe[2],Te=pe[3],be=ye*ye+Be*Be+De*De+Te*Te,Fe=be?1/be:0;return $[0]=-ye*Fe,$[1]=-Be*Fe,$[2]=-De*Fe,$[3]=Te*Fe,$}Ne.invert=p;function d($,pe){return $[0]=-pe[0],$[1]=-pe[1],$[2]=-pe[2],$[3]=pe[3],$}Ne.conjugate=d;function f($,pe){return $[0]*pe[0]+$[1]*pe[1]+$[2]*pe[2]+$[3]*pe[3]}Ne.dot=f;function I($,pe){let ye=pe[0]+pe[4]+pe[8],Be;if(ye>0)Be=Math.sqrt(ye+1),$[3]=.5*Be,Be=.5/Be,$[0]=(pe[5]-pe[7])*Be,$[1]=(pe[6]-pe[2])*Be,$[2]=(pe[1]-pe[3])*Be;else{let De=0;pe[4]>pe[0]&&(De=1),pe[8]>pe[De*3+De]&&(De=2);let Te=(De+1)%3,be=(De+2)%3;Be=Math.sqrt(pe[De*3+De]-pe[Te*3+Te]-pe[be*3+be]+1),$[De]=.5*Be,Be=.5/Be,$[3]=(pe[Te*3+be]-pe[be*3+Te])*Be,$[Te]=(pe[Te*3+De]+pe[De*3+Te])*Be,$[be]=(pe[be*3+De]+pe[De*3+be])*Be}return $}Ne.fromMat3=I;let C=[0,0,0,0,0,0,0,0,0,0,0,0];function y($,pe){return Ht.fromMat4(C,pe),I($,C)}Ne.fromMat4=y;function Q($,pe,ye){let[Be,De,Te]=pe,be=Math.cos(Be/2),Fe=Math.cos(De/2),Ae=Math.cos(Te/2),fe=Math.sin(Be/2),Qe=Math.sin(De/2),Ie=Math.sin(Te/2);switch(ye){case"XYZ":$[0]=fe*Fe*Ae+be*Qe*Ie,$[1]=be*Qe*Ae-fe*Fe*Ie,$[2]=be*Fe*Ie+fe*Qe*Ae,$[3]=be*Fe*Ae-fe*Qe*Ie;break;case"YXZ":$[0]=fe*Fe*Ae+be*Qe*Ie,$[1]=be*Qe*Ae-fe*Fe*Ie,$[2]=be*Fe*Ie-fe*Qe*Ae,$[3]=be*Fe*Ae+fe*Qe*Ie;break;case"ZXY":$[0]=fe*Fe*Ae-be*Qe*Ie,$[1]=be*Qe*Ae+fe*Fe*Ie,$[2]=be*Fe*Ie+fe*Qe*Ae,$[3]=be*Fe*Ae-fe*Qe*Ie;break;case"ZYX":$[0]=fe*Fe*Ae-be*Qe*Ie,$[1]=be*Qe*Ae+fe*Fe*Ie,$[2]=be*Fe*Ie-fe*Qe*Ae,$[3]=be*Fe*Ae+fe*Qe*Ie;break;case"YZX":$[0]=fe*Fe*Ae+be*Qe*Ie,$[1]=be*Qe*Ae+fe*Fe*Ie,$[2]=be*Fe*Ie-fe*Qe*Ae,$[3]=be*Fe*Ae-fe*Qe*Ie;break;case"XZY":$[0]=fe*Fe*Ae-be*Qe*Ie,$[1]=be*Qe*Ae-fe*Fe*Ie,$[2]=be*Fe*Ie+fe*Qe*Ae,$[3]=be*Fe*Ae+fe*Qe*Ie;break;default:Or(ye)}return $}Ne.fromEuler=Q;let E=[0,0,0];function b($,pe,ye){let Be=B.dot(pe,ye)+1;return Be<1e-6?(Be=0,Math.abs(pe[0])>Math.abs(pe[2])?B.set(E,-pe[1],pe[0],0):B.set(E,0,-pe[2],pe[1])):B.cross(E,pe,ye),$[0]=E[0],$[1]=E[1],$[2]=E[2],$[3]=Be,_($,$),$}Ne.fromUnitVec3=b;let x=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0];function S($,pe,ye,Be){return Y.fromBasis(x,pe,ye,Be),y($,x)}Ne.fromBasis=S;function w($){let pe=e();return pe[0]=$[0],pe[1]=$[1],pe[2]=$[2],pe[3]=$[3],pe}Ne.clone=w;function R($){return o($.x,$.y,$.z,$.w)}Ne.fromObj=R;function T($){return{x:$[0],y:$[1],z:$[2],w:$[3]}}Ne.toObj=T;function L($,pe,ye){return pe[ye+0]=$[0],pe[ye+1]=$[1],pe[ye+2]=$[2],pe[ye+3]=$[3],pe}Ne.toArray=L;function F($,pe,ye){return $[0]=pe[ye+0],$[1]=pe[ye+1],$[2]=pe[ye+2],$[3]=pe[ye+3],$}Ne.fromArray=F;function v($,pe){return $[0]=pe[0],$[1]=pe[1],$[2]=pe[2],$[3]=pe[3],$}Ne.copy=v;function U($,pe,ye,Be,De){return $[0]=pe,$[1]=ye,$[2]=Be,$[3]=De,$}Ne.set=U;function G($,pe){return $[0]===pe[0]&&$[1]===pe[1]&&$[2]===pe[2]&&$[3]===pe[3]}Ne.exactEquals=G;function N($,pe){let ye=$[0],Be=$[1],De=$[2],Te=$[3],be=pe[0],Fe=pe[1],Ae=pe[2],fe=pe[3];return Math.abs(ye-be)<=1e-6*Math.max(1,Math.abs(ye),Math.abs(be))&&Math.abs(Be-Fe)<=1e-6*Math.max(1,Math.abs(Be),Math.abs(Fe))&&Math.abs(De-Ae)<=1e-6*Math.max(1,Math.abs(De),Math.abs(Ae))&&Math.abs(Te-fe)<=1e-6*Math.max(1,Math.abs(Te),Math.abs(fe))}Ne.equals=N;function k($,pe,ye){return $[0]=pe[0]+ye[0],$[1]=pe[1]+ye[1],$[2]=pe[2]+ye[2],$[3]=pe[3]+ye[3],$}Ne.add=k;function J($){let pe=$[0],ye=$[1],Be=$[2],De=$[3];return Math.sqrt(pe*pe+ye*ye+Be*Be+De*De)}Ne.magnitude=J;function H($){let pe=$[0],ye=$[1],Be=$[2],De=$[3];return pe*pe+ye*ye+Be*Be+De*De}Ne.squaredMagnitude=H;function z($,pe){return 2*Math.acos(Math.abs($t(f($,pe),-1,1)))}Ne.angle=z;function _($,pe){let ye=pe[0],Be=pe[1],De=pe[2],Te=pe[3],be=ye*ye+Be*Be+De*De+Te*Te;return be>0&&(be=1/Math.sqrt(be),$[0]=ye*be,$[1]=Be*be,$[2]=De*be,$[3]=Te*be),$}Ne.normalize=_;let M=[0,0,0],q=[1,0,0],ne=[0,1,0];function oe($,pe,ye){let Be=B.dot(pe,ye);return Be<-.999999?(B.cross(M,q,pe),B.magnitude(M)<1e-6&&B.cross(M,ne,pe),B.normalize(M,M),a($,M,Math.PI),$):Be>.999999?($[0]=0,$[1]=0,$[2]=0,$[3]=1,$):(B.cross(M,pe,ye),$[0]=M[0],$[1]=M[1],$[2]=M[2],$[3]=1+Be,_($,$))}Ne.rotationTo=oe;let ae=e(),me=e();function Se($,pe,ye,Be,De,Te){return m(ae,pe,De,Te),m(me,ye,Be,Te),m($,ae,me,2*Te*(1-Te)),$}Ne.sqlerp=Se;let ee=[0,0,0,0,0,0,0,0,0];function O($,pe,ye,Be){return ee[0]=ye[0],ee[3]=ye[1],ee[6]=ye[2],ee[1]=Be[0],ee[4]=Be[1],ee[7]=Be[2],ee[2]=-pe[0],ee[5]=-pe[1],ee[8]=-pe[2],_($,I($,ee))}Ne.setAxes=O;function X($,pe){return`[${$[0].toPrecision(pe)} ${$[1].toPrecision(pe)} ${$[2].toPrecision(pe)} ${$[3].toPrecision(pe)}]`}Ne.toString=X,Ne.Identity=t()})(gr||={});var Mb=Math.PI/2,yce=Math.PI/180;function kr(e){return e*yce}function yA(e){return e/yce}function Ly(e){return e!==0&&(e&e-1)===0}function Qce(...e){let t=0,r=0;for(let n=0,o=e.length;n<o;++n){let i=e[n],a=Math.abs(i);a>r&&(t=i,r=a)}return t}function eG(e,t){return e*t}function tG(e){let t=0,r=0,n=0,o=-1,i=e*2+1,a=i/2,A=[];for(let s=Math.pow(i,2);s>0;--s){if(-a<t&&t<=a&&-a<r&&r<=a&&A.push([t,r]),t===r||t<0&&t===-r||t>0&&t===1-r){let c=n;n=-o,o=c}t+=n,r+=o}return A}function Y(){return Y.zero()}(io=>{function e(){let j=[.1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0];return j[0]=0,j}io.zero=e;function t(){let j=e();return j[0]=1,j[1]=0,j[2]=0,j[3]=0,j[4]=0,j[5]=1,j[6]=0,j[7]=0,j[8]=0,j[9]=0,j[10]=1,j[11]=0,j[12]=0,j[13]=0,j[14]=0,j[15]=1,j}io.identity=t;function r(j){return j[0]=1,j[1]=0,j[2]=0,j[3]=0,j[4]=0,j[5]=1,j[6]=0,j[7]=0,j[8]=0,j[9]=0,j[10]=1,j[11]=0,j[12]=0,j[13]=0,j[14]=0,j[15]=1,j}io.setIdentity=r;function n(j){for(let ue=0;ue<16;ue++)if(j[ue]!==0)return!1;return!0}io.isZero=n;function o(j){for(let ue=0;ue<16;ue++)j[ue]=0;return j}io.setZero=o;function i(j){let ue=e();for(let et=0;et<4;et++){let gt=j[et];for(let ht=0;ht<4;ht++)ue[4*ht+et]=gt[ht]}return ue}io.ofRows=i;let a=t();function A(j,ue){return l(j,a,typeof ue>"u"?1e-6:ue)}io.isIdentity=A;function s(j){return Array.isArray(j)&&j.length===16}io.is=s;function c(j){for(let ue=0;ue<16;ue++)if(Number.isNaN(j[ue]))return!0;return!1}io.hasNaN=c;function l(j,ue,et){for(let gt=0;gt<16;gt++)if(Math.abs(j[gt]-ue[gt])>et)return!1;return!0}io.areEqual=l;function u(j,ue,et,gt){j[4*et+ue]=gt}io.setValue=u;function g(j,ue,et){return j[4*et+ue]}io.getValue=g;function m(j,ue,et){return ue[et+0]=j[0],ue[et+1]=j[1],ue[et+2]=j[2],ue[et+3]=j[3],ue[et+4]=j[4],ue[et+5]=j[5],ue[et+6]=j[6],ue[et+7]=j[7],ue[et+8]=j[8],ue[et+9]=j[9],ue[et+10]=j[10],ue[et+11]=j[11],ue[et+12]=j[12],ue[et+13]=j[13],ue[et+14]=j[14],ue[et+15]=j[15],ue}io.toArray=m;function p(j,ue,et){return j[0]=ue[et+0],j[1]=ue[et+1],j[2]=ue[et+2],j[3]=ue[et+3],j[4]=ue[et+4],j[5]=ue[et+5],j[6]=ue[et+6],j[7]=ue[et+7],j[8]=ue[et+8],j[9]=ue[et+9],j[10]=ue[et+10],j[11]=ue[et+11],j[12]=ue[et+12],j[13]=ue[et+13],j[14]=ue[et+14],j[15]=ue[et+15],j}io.fromArray=p;function d(j,ue,et,gt){return o(j),u(j,0,0,ue[0]),u(j,1,0,ue[1]),u(j,2,0,ue[2]),u(j,0,1,et[0]),u(j,1,1,et[1]),u(j,2,1,et[2]),u(j,0,2,gt[0]),u(j,1,2,gt[1]),u(j,2,2,gt[2]),u(j,3,3,1),j}io.fromBasis=d;function f(j,ue){return j[0]=ue[0],j[1]=ue[1],j[2]=ue[2],j[3]=ue[3],j[4]=ue[4],j[5]=ue[5],j[6]=ue[6],j[7]=ue[7],j[8]=ue[8],j[9]=ue[9],j[10]=ue[10],j[11]=ue[11],j[12]=ue[12],j[13]=ue[13],j[14]=ue[14],j[15]=ue[15],j}io.copy=f;function I(j){return f(e(),j)}io.clone=I;function C(j,ue){return j[0]=ue[12],j[1]=ue[13],j[2]=ue[14],j}io.getTranslation=C;function y(j,ue){let et=ue[0],gt=ue[1],ht=ue[2],wt=ue[4],Ut=ue[5],Wt=ue[6],qt=ue[8],Kt=ue[9],Ot=ue[10];return j[0]=Math.sqrt(et*et+gt*gt+ht*ht),j[1]=Math.sqrt(wt*wt+Ut*Ut+Wt*Wt),j[2]=Math.sqrt(qt*qt+Kt*Kt+Ot*Ot),j}io.getScaling=y;function Q(j,ue){let et=ue[0]+ue[5]+ue[10],gt=0;return et>0?(gt=Math.sqrt(et+1)*2,j[3]=.25*gt,j[0]=(ue[6]-ue[9])/gt,j[1]=(ue[8]-ue[2])/gt,j[2]=(ue[1]-ue[4])/gt):ue[0]>ue[5]&&ue[0]>ue[10]?(gt=Math.sqrt(1+ue[0]-ue[5]-ue[10])*2,j[3]=(ue[6]-ue[9])/gt,j[0]=.25*gt,j[1]=(ue[1]+ue[4])/gt,j[2]=(ue[8]+ue[2])/gt):ue[5]>ue[10]?(gt=Math.sqrt(1+ue[5]-ue[0]-ue[10])*2,j[3]=(ue[8]-ue[2])/gt,j[0]=(ue[1]+ue[4])/gt,j[1]=.25*gt,j[2]=(ue[6]+ue[9])/gt):(gt=Math.sqrt(1+ue[10]-ue[0]-ue[5])*2,j[3]=(ue[1]-ue[4])/gt,j[0]=(ue[8]+ue[2])/gt,j[1]=(ue[6]+ue[9])/gt,j[2]=.25*gt),j}io.getRotation=Q;function E(j,ue){let et=1/Math.sqrt(ue[0]*ue[0]+ue[1]*ue[1]+ue[2]*ue[2]),gt=1/Math.sqrt(ue[4]*ue[4]+ue[5]*ue[5]+ue[6]*ue[6]),ht=1/Math.sqrt(ue[8]*ue[8]+ue[9]*ue[9]+ue[10]*ue[10]);return j[0]=ue[0]*et,j[1]=ue[1]*et,j[2]=ue[2]*et,j[3]=0,j[4]=ue[4]*gt,j[5]=ue[5]*gt,j[6]=ue[6]*gt,j[7]=0,j[8]=ue[8]*ht,j[9]=ue[9]*ht,j[10]=ue[10]*ht,j[11]=0,j[12]=0,j[13]=0,j[14]=0,j[15]=1,j}io.extractRotation=E;function b(j,ue){if(j===ue){let et=ue[1],gt=ue[2],ht=ue[3],wt=ue[6],Ut=ue[7],Wt=ue[11];j[1]=ue[4],j[2]=ue[8],j[3]=ue[12],j[4]=et,j[6]=ue[9],j[7]=ue[13],j[8]=gt,j[9]=wt,j[11]=ue[14],j[12]=ht,j[13]=Ut,j[14]=Wt}else j[0]=ue[0],j[1]=ue[4],j[2]=ue[8],j[3]=ue[12],j[4]=ue[1],j[5]=ue[5],j[6]=ue[9],j[7]=ue[13],j[8]=ue[2],j[9]=ue[6],j[10]=ue[10],j[11]=ue[14],j[12]=ue[3],j[13]=ue[7],j[14]=ue[11],j[15]=ue[15];return j}io.transpose=b;function x(j,ue){let et=ue[0],gt=ue[1],ht=ue[2],wt=ue[3],Ut=ue[4],Wt=ue[5],qt=ue[6],Kt=ue[7],Ot=ue[8],Ar=ue[9],cr=ue[10],rr=ue[11],yr=ue[12],br=ue[13],nr=ue[14],se=ue[15],ao=et*Wt-gt*Ut,Yr=et*qt-ht*Ut,he=et*Kt-wt*Ut,Ge=gt*qt-ht*Wt,ie=gt*Kt-wt*Wt,He=ht*Kt-wt*qt,Me=Ot*br-Ar*yr,$e=Ot*nr-cr*yr,Jt=Ot*se-rr*yr,Tr=Ar*nr-cr*br,xr=Ar*se-rr*br,_e=cr*se-rr*nr,zt=ao*_e-Yr*xr+he*Tr+Ge*Jt-ie*$e+He*Me;return zt?(zt=1/zt,j[0]=(Wt*_e-qt*xr+Kt*Tr)*zt,j[1]=(ht*xr-gt*_e-wt*Tr)*zt,j[2]=(br*He-nr*ie+se*Ge)*zt,j[3]=(cr*ie-Ar*He-rr*Ge)*zt,j[4]=(qt*Jt-Ut*_e-Kt*$e)*zt,j[5]=(et*_e-ht*Jt+wt*$e)*zt,j[6]=(nr*he-yr*He-se*Yr)*zt,j[7]=(Ot*He-cr*he+rr*Yr)*zt,j[8]=(Ut*xr-Wt*Jt+Kt*Me)*zt,j[9]=(gt*Jt-et*xr-wt*Me)*zt,j[10]=(yr*ie-br*he+se*ao)*zt,j[11]=(Ar*he-Ot*ie-rr*ao)*zt,j[12]=(Wt*$e-Ut*Tr-qt*Me)*zt,j[13]=(et*Tr-gt*$e+ht*Me)*zt,j[14]=(br*Yr-yr*Ge-nr*ao)*zt,j[15]=(Ot*Ge-Ar*Yr+cr*ao)*zt,!0):!1}io.tryInvert=x;function S(j,ue){return x(j,ue)||console.warn("non-invertible matrix.",ue),j}io.invert=S;function w(j,ue,et){let gt=ue[0],ht=ue[1],wt=ue[2],Ut=ue[3],Wt=ue[4],qt=ue[5],Kt=ue[6],Ot=ue[7],Ar=ue[8],cr=ue[9],rr=ue[10],yr=ue[11],br=ue[12],nr=ue[13],se=ue[14],ao=ue[15],Yr=et[0],he=et[1],Ge=et[2],ie=et[3];return j[0]=Yr*gt+he*Wt+Ge*Ar+ie*br,j[1]=Yr*ht+he*qt+Ge*cr+ie*nr,j[2]=Yr*wt+he*Kt+Ge*rr+ie*se,j[3]=Yr*Ut+he*Ot+Ge*yr+ie*ao,Yr=et[4],he=et[5],Ge=et[6],ie=et[7],j[4]=Yr*gt+he*Wt+Ge*Ar+ie*br,j[5]=Yr*ht+he*qt+Ge*cr+ie*nr,j[6]=Yr*wt+he*Kt+Ge*rr+ie*se,j[7]=Yr*Ut+he*Ot+Ge*yr+ie*ao,Yr=et[8],he=et[9],Ge=et[10],ie=et[11],j[8]=Yr*gt+he*Wt+Ge*Ar+ie*br,j[9]=Yr*ht+he*qt+Ge*cr+ie*nr,j[10]=Yr*wt+he*Kt+Ge*rr+ie*se,j[11]=Yr*Ut+he*Ot+Ge*yr+ie*ao,Yr=et[12],he=et[13],Ge=et[14],ie=et[15],j[12]=Yr*gt+he*Wt+Ge*Ar+ie*br,j[13]=Yr*ht+he*qt+Ge*cr+ie*nr,j[14]=Yr*wt+he*Kt+Ge*rr+ie*se,j[15]=Yr*Ut+he*Ot+Ge*yr+ie*ao,j}io.mul=w;function R(j,ue,et,gt,ht,wt){let Ut=ue[0+ht],Wt=ue[1+ht],qt=ue[2+ht],Kt=ue[3+ht],Ot=ue[4+ht],Ar=ue[5+ht],cr=ue[6+ht],rr=ue[7+ht],yr=ue[8+ht],br=ue[9+ht],nr=ue[10+ht],se=ue[11+ht],ao=ue[12+ht],Yr=ue[13+ht],he=ue[14+ht],Ge=ue[15+ht],ie=et[0+wt],He=et[1+wt],Me=et[2+wt],$e=et[3+wt];return j[0+gt]=ie*Ut+He*Ot+Me*yr+$e*ao,j[1+gt]=ie*Wt+He*Ar+Me*br+$e*Yr,j[2+gt]=ie*qt+He*cr+Me*nr+$e*he,j[3+gt]=ie*Kt+He*rr+Me*se+$e*Ge,ie=et[4+wt],He=et[5+wt],Me=et[6+wt],$e=et[7+wt],j[4+gt]=ie*Ut+He*Ot+Me*yr+$e*ao,j[5+gt]=ie*Wt+He*Ar+Me*br+$e*Yr,j[6+gt]=ie*qt+He*cr+Me*nr+$e*he,j[7+gt]=ie*Kt+He*rr+Me*se+$e*Ge,ie=et[8+wt],He=et[9+wt],Me=et[10+wt],$e=et[11+wt],j[8+gt]=ie*Ut+He*Ot+Me*yr+$e*ao,j[9+gt]=ie*Wt+He*Ar+Me*br+$e*Yr,j[10+gt]=ie*qt+He*cr+Me*nr+$e*he,j[11+gt]=ie*Kt+He*rr+Me*se+$e*Ge,ie=et[12+wt],He=et[13+wt],Me=et[14+wt],$e=et[15+wt],j[12+gt]=ie*Ut+He*Ot+Me*yr+$e*ao,j[13+gt]=ie*Wt+He*Ar+Me*br+$e*Yr,j[14+gt]=ie*qt+He*cr+Me*nr+$e*he,j[15+gt]=ie*Kt+He*rr+Me*se+$e*Ge,j}io.mulOffset=R;function T(j,ue,et,gt){return w(j,w(j,ue,et),gt)}io.mul3=T;function L(j,ue,et){let gt=et[0],ht=et[1],wt=et[2],Ut,Wt,qt,Kt,Ot,Ar,cr,rr,yr,br,nr,se;return ue===j?(j[12]=ue[0]*gt+ue[4]*ht+ue[8]*wt+ue[12],j[13]=ue[1]*gt+ue[5]*ht+ue[9]*wt+ue[13],j[14]=ue[2]*gt+ue[6]*ht+ue[10]*wt+ue[14],j[15]=ue[3]*gt+ue[7]*ht+ue[11]*wt+ue[15]):(Ut=ue[0],Wt=ue[1],qt=ue[2],Kt=ue[3],Ot=ue[4],Ar=ue[5],cr=ue[6],rr=ue[7],yr=ue[8],br=ue[9],nr=ue[10],se=ue[11],j[0]=Ut,j[1]=Wt,j[2]=qt,j[3]=Kt,j[4]=Ot,j[5]=Ar,j[6]=cr,j[7]=rr,j[8]=yr,j[9]=br,j[10]=nr,j[11]=se,j[12]=Ut*gt+Ot*ht+yr*wt+ue[12],j[13]=Wt*gt+Ar*ht+br*wt+ue[13],j[14]=qt*gt+cr*ht+nr*wt+ue[14],j[15]=Kt*gt+rr*ht+se*wt+ue[15]),j}io.translate=L;function F(j,ue){return j[0]=1,j[1]=0,j[2]=0,j[3]=0,j[4]=0,j[5]=1,j[6]=0,j[7]=0,j[8]=0,j[9]=0,j[10]=1,j[11]=0,j[12]=ue[0],j[13]=ue[1],j[14]=ue[2],j[15]=1,j}io.fromTranslation=F;function v(j,ue){return j[12]=ue[0],j[13]=ue[1],j[14]=ue[2],j}io.setTranslation=v;function U(j,ue,et,gt){return j[0]=et[0],j[4]=et[1],j[8]=et[2],j[1]=gt[0],j[5]=gt[1],j[9]=gt[2],j[2]=ue[0],j[6]=ue[1],j[10]=ue[2],j}io.setAxes=U;function G(j,ue,et,gt){let ht=gt[0],wt=gt[1],Ut=gt[2],Wt=Math.sqrt(ht*ht+wt*wt+Ut*Ut);if(Math.abs(Wt)<1e-6)return t();Wt=1/Wt,ht*=Wt,wt*=Wt,Ut*=Wt;let qt=Math.sin(et),Kt=Math.cos(et),Ot=1-Kt,Ar=ue[0],cr=ue[1],rr=ue[2],yr=ue[3],br=ue[4],nr=ue[5],se=ue[6],ao=ue[7],Yr=ue[8],he=ue[9],Ge=ue[10],ie=ue[11],He=ht*ht*Ot+Kt,Me=wt*ht*Ot+Ut*qt,$e=Ut*ht*Ot-wt*qt,Jt=ht*wt*Ot-Ut*qt,Tr=wt*wt*Ot+Kt,xr=Ut*wt*Ot+ht*qt,_e=ht*Ut*Ot+wt*qt,zt=wt*Ut*Ot-ht*qt,Ur=Ut*Ut*Ot+Kt;return j[0]=Ar*He+br*Me+Yr*$e,j[1]=cr*He+nr*Me+he*$e,j[2]=rr*He+se*Me+Ge*$e,j[3]=yr*He+ao*Me+ie*$e,j[4]=Ar*Jt+br*Tr+Yr*xr,j[5]=cr*Jt+nr*Tr+he*xr,j[6]=rr*Jt+se*Tr+Ge*xr,j[7]=yr*Jt+ao*Tr+ie*xr,j[8]=Ar*_e+br*zt+Yr*Ur,j[9]=cr*_e+nr*zt+he*Ur,j[10]=rr*_e+se*zt+Ge*Ur,j[11]=yr*_e+ao*zt+ie*Ur,ue!==j&&(j[12]=ue[12],j[13]=ue[13],j[14]=ue[14],j[15]=ue[15]),j}io.rotate=G;function N(j,ue,et){let gt=et[0],ht=et[1],wt=et[2],Ut=Math.sqrt(gt*gt+ht*ht+wt*wt);if(Math.abs(Ut)<1e-6)return r(j);Ut=1/Ut,gt*=Ut,ht*=Ut,wt*=Ut;let Wt=Math.sin(ue),qt=Math.cos(ue),Kt=1-qt;return j[0]=gt*gt*Kt+qt,j[1]=ht*gt*Kt+wt*Wt,j[2]=wt*gt*Kt-ht*Wt,j[3]=0,j[4]=gt*ht*Kt-wt*Wt,j[5]=ht*ht*Kt+qt,j[6]=wt*ht*Kt+gt*Wt,j[7]=0,j[8]=gt*wt*Kt+ht*Wt,j[9]=ht*wt*Kt-gt*Wt,j[10]=wt*wt*Kt+qt,j[11]=0,j[12]=0,j[13]=0,j[14]=0,j[15]=1,j}io.fromRotation=N;function k(j,ue,et){let gt=et[0],ht=et[1],wt=et[2];return j[0]=ue[0]*gt,j[1]=ue[1]*gt,j[2]=ue[2]*gt,j[3]=ue[3]*gt,j[4]=ue[4]*ht,j[5]=ue[5]*ht,j[6]=ue[6]*ht,j[7]=ue[7]*ht,j[8]=ue[8]*wt,j[9]=ue[9]*wt,j[10]=ue[10]*wt,j[11]=ue[11]*wt,j[12]=ue[12],j[13]=ue[13],j[14]=ue[14],j[15]=ue[15],j}io.scale=k;function J(j,ue,et){return j[0]=ue[0]*et,j[1]=ue[1]*et,j[2]=ue[2]*et,j[3]=ue[3]*et,j[4]=ue[4]*et,j[5]=ue[5]*et,j[6]=ue[6]*et,j[7]=ue[7]*et,j[8]=ue[8]*et,j[9]=ue[9]*et,j[10]=ue[10]*et,j[11]=ue[11]*et,j[12]=ue[12],j[13]=ue[13],j[14]=ue[14],j[15]=ue[15],j}io.scaleUniformly=J;function H(j,ue){return j[0]=ue[0],j[1]=0,j[2]=0,j[3]=0,j[4]=0,j[5]=ue[1],j[6]=0,j[7]=0,j[8]=0,j[9]=0,j[10]=ue[2],j[11]=0,j[12]=0,j[13]=0,j[14]=0,j[15]=1,j}io.fromScaling=H;function z(j,ue){return j[0]=ue,j[1]=0,j[2]=0,j[3]=0,j[4]=0,j[5]=ue,j[6]=0,j[7]=0,j[8]=0,j[9]=0,j[10]=ue,j[11]=0,j[12]=0,j[13]=0,j[14]=0,j[15]=1,j}io.fromUniformScaling=z;let _=[0,0,0],M=[0,0,0];function q(j,ue,et){let gt=B.cross(_,ue,B.unitX);B.dot(gt,gt)<1e-6&&B.cross(gt,ue,B.unitY),B.normalize(gt,gt);let ht=B.cross(M,ue,gt);return B.normalize(ht,ht),d(j,gt,ht,ue),j[12]=et[0],j[13]=et[1],j[14]=et[2],j}io.fromPlane=q;function ne(j,ue){return j[0]=ue[0],j[1]=ue[1],j[2]=ue[2],j[4]=ue[3],j[5]=ue[4],j[6]=ue[5],j[8]=ue[6],j[9]=ue[7],j[10]=ue[8],j}io.fromMat3=ne;function oe(j,ue,et,gt){let[ht,wt,Ut,Wt]=et,qt=ht+ht,Kt=wt+wt,Ot=Ut+Ut,Ar=ht*qt,cr=ht*Kt,rr=ht*Ot,yr=wt*Kt,br=wt*Ot,nr=Ut*Ot,se=Wt*qt,ao=Wt*Kt,Yr=Wt*Ot,[he,Ge,ie]=gt;return j[0]=(1-(yr+nr))*he,j[1]=(cr+Yr)*he,j[2]=(rr-ao)*he,j[3]=0,j[4]=(cr-Yr)*Ge,j[5]=(1-(Ar+nr))*Ge,j[6]=(br+se)*Ge,j[7]=0,j[8]=(rr+ao)*ie,j[9]=(br-se)*ie,j[10]=(1-(Ar+yr))*ie,j[11]=0,j[12]=ue[0],j[13]=ue[1],j[14]=ue[2],j[15]=1,j}io.compose=oe;let ae=[0,0,0],me=e();function Se(j,ue,et,gt){let ht=B.magnitude(B.set(ae,j[0],j[1],j[2])),wt=B.magnitude(B.set(ae,j[4],j[5],j[6])),Ut=B.magnitude(B.set(ae,j[8],j[9],j[10]));X(j)<0&&(ht=-ht),ue[0]=j[12],ue[1]=j[13],ue[2]=j[14],f(me,j);let qt=1/ht,Kt=1/wt,Ot=1/Ut;return me[0]*=qt,me[1]*=qt,me[2]*=qt,me[4]*=Kt,me[5]*=Kt,me[6]*=Kt,me[8]*=Ot,me[9]*=Ot,me[10]*=Ot,Q(et,me),gt[0]=ht,gt[1]=wt,gt[2]=Ut,j}io.decompose=Se;function ee(j){let ue=B(),et=gr(),gt=B();return Se(j,ue,et,gt),{position:ue,quaternion:et,scale:gt}}io.getDecomposition=ee;function O(j){let ue="";for(let et=0;et<4;et++){for(let gt=0;gt<4;gt++)ue+=j[4*gt+et].toString(),gt<3&&(ue+=" ");et<3&&(ue+=`
|
|
`)}return ue}io.makeTable=O;function X(j){let ue=j[0],et=j[1],gt=j[2],ht=j[3],wt=j[4],Ut=j[5],Wt=j[6],qt=j[7],Kt=j[8],Ot=j[9],Ar=j[10],cr=j[11],rr=j[12],yr=j[13],br=j[14],nr=j[15],se=ue*Ut-et*wt,ao=ue*Wt-gt*wt,Yr=ue*qt-ht*wt,he=et*Wt-gt*Ut,Ge=et*qt-ht*Ut,ie=gt*qt-ht*Wt,He=Kt*yr-Ot*rr,Me=Kt*br-Ar*rr,$e=Kt*nr-cr*rr,Jt=Ot*br-Ar*yr,Tr=Ot*nr-cr*yr,xr=Ar*nr-cr*br;return se*xr-ao*Tr+Yr*Jt+he*$e-Ge*Me+ie*He}io.determinant=X;function Ce(j,ue){return Ne(j,typeof ue<"u"?ue:1e-6)}io.isRotationAndTranslation=Ce;function Ne(j,ue){let et=j[0],gt=j[1],ht=j[2],wt=j[3],Ut=j[4],Wt=j[5],qt=j[6],Kt=j[7],Ot=j[8],Ar=j[9],cr=j[10],rr=j[11],yr=j[15];if(!So(yr,1,ue)||!So(wt,0,ue)||!So(Kt,0,ue)||!So(rr,0,ue))return!1;let br=Math.abs(et*(Wt*cr-qt*Ar)-gt*(Ut*cr-qt*Ot)+ht*(Ut*Ar-Wt*Ot));return!!So(br,1,ue)}function $(j,ue){return pe(j,typeof ue<"u"?ue:1e-6)}io.isTranslationAndUniformScaling=$;function pe(j,ue){let et=j[0];return So(j[1],0,ue)&&So(j[2],0,ue)&&So(j[3],0,ue)&&So(j[4],0,ue)&&So(j[5],et,ue)&&So(j[6],0,ue)&&So(j[7],0,ue)&&So(j[8],0,ue)&&So(j[9],0,ue)&&So(j[10],et,ue)&&So(j[11],0,ue)&&So(j[15],1,ue)}function ye(j,ue){let et=ue[0],gt=ue[1],ht=ue[2],wt=ue[3],Ut=et+et,Wt=gt+gt,qt=ht+ht,Kt=et*Ut,Ot=gt*Ut,Ar=gt*Wt,cr=ht*Ut,rr=ht*Wt,yr=ht*qt,br=wt*Ut,nr=wt*Wt,se=wt*qt;return j[0]=1-Ar-yr,j[1]=Ot+se,j[2]=cr-nr,j[3]=0,j[4]=Ot-se,j[5]=1-Kt-yr,j[6]=rr+br,j[7]=0,j[8]=cr+nr,j[9]=rr-br,j[10]=1-Kt-Ar,j[11]=0,j[12]=0,j[13]=0,j[14]=0,j[15]=1,j}io.fromQuat=ye;function Be(j,ue,et){let gt=ue[0],ht=ue[1],wt=ue[2],Ut=Math.cos(gt),Wt=Math.sin(gt),qt=Math.cos(ht),Kt=Math.sin(ht),Ot=Math.cos(wt),Ar=Math.sin(wt);if(et==="XYZ"){let cr=Ut*Ot,rr=Ut*Ar,yr=Wt*Ot,br=Wt*Ar;j[0]=qt*Ot,j[4]=-qt*Ar,j[8]=Kt,j[1]=rr+yr*Kt,j[5]=cr-br*Kt,j[9]=-Wt*qt,j[2]=br-cr*Kt,j[6]=yr+rr*Kt,j[10]=Ut*qt}else if(et==="YXZ"){let cr=qt*Ot,rr=qt*Ar,yr=Kt*Ot,br=Kt*Ar;j[0]=cr+br*Wt,j[4]=yr*Wt-rr,j[8]=Ut*Kt,j[1]=Ut*Ar,j[5]=Ut*Ot,j[9]=-Wt,j[2]=rr*Wt-yr,j[6]=br+cr*Wt,j[10]=Ut*qt}else if(et==="ZXY"){let cr=qt*Ot,rr=qt*Ar,yr=Kt*Ot,br=Kt*Ar;j[0]=cr-br*Wt,j[4]=-Ut*Ar,j[8]=yr+rr*Wt,j[1]=rr+yr*Wt,j[5]=Ut*Ot,j[9]=br-cr*Wt,j[2]=-Ut*Kt,j[6]=Wt,j[10]=Ut*qt}else if(et==="ZYX"){let cr=Ut*Ot,rr=Ut*Ar,yr=Wt*Ot,br=Wt*Ar;j[0]=qt*Ot,j[4]=yr*Kt-rr,j[8]=cr*Kt+br,j[1]=qt*Ar,j[5]=br*Kt+cr,j[9]=rr*Kt-yr,j[2]=-Kt,j[6]=Wt*qt,j[10]=Ut*qt}else if(et==="YZX"){let cr=Ut*qt,rr=Ut*Kt,yr=Wt*qt,br=Wt*Kt;j[0]=qt*Ot,j[4]=br-cr*Ar,j[8]=yr*Ar+rr,j[1]=Ar,j[5]=Ut*Ot,j[9]=-Wt*Ot,j[2]=-Kt*Ot,j[6]=rr*Ar+yr,j[10]=cr-br*Ar}else if(et==="XZY"){let cr=Ut*qt,rr=Ut*Kt,yr=Wt*qt,br=Wt*Kt;j[0]=qt*Ot,j[4]=-Ar,j[8]=Kt*Ot,j[1]=cr*Ar+br,j[5]=Ut*Ot,j[9]=rr*Ar-yr,j[2]=yr*Ar-rr,j[6]=Wt*Ot,j[10]=br*Ar+cr}return j[3]=0,j[7]=0,j[11]=0,j[12]=0,j[13]=0,j[14]=0,j[15]=1,j}io.fromEuler=Be;function De(j,ue,et,gt,ht,wt,Ut){let Wt=2*wt/(et-ue),qt=2*wt/(gt-ht),Kt=(et+ue)/(et-ue),Ot=(gt+ht)/(gt-ht),Ar=-(Ut+wt)/(Ut-wt),cr=-2*Ut*wt/(Ut-wt);return j[0]=Wt,j[1]=0,j[2]=0,j[3]=0,j[4]=0,j[5]=qt,j[6]=0,j[7]=0,j[8]=Kt,j[9]=Ot,j[10]=Ar,j[11]=-1,j[12]=0,j[13]=0,j[14]=cr,j[15]=0,j}io.perspective=De;function Te(j,ue,et,gt,ht,wt,Ut){let Wt=1/(et-ue),qt=1/(gt-ht),Kt=1/(Ut-wt),Ot=(et+ue)*Wt,Ar=(gt+ht)*qt,cr=(Ut+wt)*Kt;return j[0]=2*Wt,j[1]=0,j[2]=0,j[3]=0,j[4]=0,j[5]=2*qt,j[6]=0,j[7]=0,j[8]=0,j[9]=0,j[10]=-2*Kt,j[11]=0,j[12]=-Ot,j[13]=-Ar,j[14]=-cr,j[15]=1,j}io.ortho=Te;function be(j,ue,et,gt){let ht,wt,Ut,Wt,qt,Kt,Ot,Ar,cr,rr,yr=ue[0],br=ue[1],nr=ue[2],se=gt[0],ao=gt[1],Yr=gt[2],he=et[0],Ge=et[1],ie=et[2];return Math.abs(yr-he)<1e-6&&Math.abs(br-Ge)<1e-6&&Math.abs(nr-ie)<1e-6?r(j):(Ot=yr-he,Ar=br-Ge,cr=nr-ie,rr=1/Math.sqrt(Ot*Ot+Ar*Ar+cr*cr),Ot*=rr,Ar*=rr,cr*=rr,ht=ao*cr-Yr*Ar,wt=Yr*Ot-se*cr,Ut=se*Ar-ao*Ot,rr=Math.sqrt(ht*ht+wt*wt+Ut*Ut),rr?(rr=1/rr,ht*=rr,wt*=rr,Ut*=rr):(ht=0,wt=0,Ut=0),Wt=Ar*Ut-cr*wt,qt=cr*ht-Ot*Ut,Kt=Ot*wt-Ar*ht,rr=Math.sqrt(Wt*Wt+qt*qt+Kt*Kt),rr?(rr=1/rr,Wt*=rr,qt*=rr,Kt*=rr):(Wt=0,qt=0,Kt=0),j[0]=ht,j[1]=Wt,j[2]=Ot,j[3]=0,j[4]=wt,j[5]=qt,j[6]=Ar,j[7]=0,j[8]=Ut,j[9]=Kt,j[10]=cr,j[11]=0,j[12]=-(ht*yr+wt*br+Ut*nr),j[13]=-(Wt*yr+qt*br+Kt*nr),j[14]=-(Ot*yr+Ar*br+cr*nr),j[15]=1,j)}io.lookAt=be;function Fe(j,ue,et,gt){let ht=ue[0],wt=ue[1],Ut=ue[2],Wt=gt[0],qt=gt[1],Kt=gt[2],Ot=ht-et[0],Ar=wt-et[1],cr=Ut-et[2],rr=Ot*Ot+Ar*Ar+cr*cr;rr>0&&(rr=1/Math.sqrt(rr),Ot*=rr,Ar*=rr,cr*=rr);let yr=qt*cr-Kt*Ar,br=Kt*Ot-Wt*cr,nr=Wt*Ar-qt*Ot;return rr=yr*yr+br*br+nr*nr,rr>0&&(rr=1/Math.sqrt(rr),yr*=rr,br*=rr,nr*=rr),j[0]=yr,j[1]=br,j[2]=nr,j[3]=0,j[4]=Ar*nr-cr*br,j[5]=cr*yr-Ot*nr,j[6]=Ot*br-Ar*yr,j[7]=0,j[8]=Ot,j[9]=Ar,j[10]=cr,j[11]=0,j[12]=ht,j[13]=wt,j[14]=Ut,j[15]=1,j}io.targetTo=Fe;function Ae(j,ue){o(j);for(let et=0;et<4;et++){let gt=ue[et];u(j,et,gt,1)}return j}io.fromPermutation=Ae;function fe(j){let ue=j[0]*j[0]+j[1]*j[1]+j[2]*j[2],et=j[4]*j[4]+j[5]*j[5]+j[6]*j[6],gt=j[8]*j[8]+j[9]*j[9]+j[10]*j[10];return Math.sqrt(Math.max(ue,et,gt))}io.getMaxScaleOnAxis=fe;function Qe(j){return{x:B.create(j[0],j[1],j[2]),y:B.create(j[4],j[5],j[6]),z:B.create(j[8],j[9],j[10])}}io.extractBasis=Qe;let Ie=[1,0,0],le=[0,1,0],Oe=[0,0,1];io.rotX90=N(e(),kr(90),Ie),io.rotX180=N(e(),kr(180),Ie),io.rotY90=N(e(),kr(90),le),io.rotY180=N(e(),kr(180),le),io.rotY270=N(e(),kr(270),le),io.rotZ90=N(e(),kr(90),Oe),io.rotZ180=N(e(),kr(180),Oe),io.rotXY90=w(e(),io.rotX90,io.rotY90),io.rotZY90=w(e(),io.rotZ90,io.rotY90),io.rotZYZ90=w(e(),io.rotZY90,io.rotZ90),io.rotZ90X180=w(e(),io.rotZ90,io.rotX180),io.rotY90Z180=w(e(),io.rotY90,io.rotZ180),io.id=t()})(Y||={});var Fr;(R=>{function e(T,L,F){let v=[];for(let G=0;G<L.length;G++)v[G]=L[L.length-G-1];let U=[1];for(let G=1;G<T.length;G++)U[G]=T[v[G-1]];return{dimensions:T,axisOrderFastToSlow:v,axisOrderSlowToFast:L,accessDimensions:U,defaultCtor:F||Float64Array}}function t(T,L){return{space:T,data:L}}R.create=t;function r(T,L,F){let v=e(T,L,F),{get:U,set:G,add:N,dataOffset:k,getCoords:J}=g(v);return{rank:T.length,dimensions:T,axisOrderSlowToFast:L,create:m(v),get:U,set:G,add:N,dataOffset:k,getCoords:J}}R.Space=r;function n(T){return T}R.Data1=n;function o(T,L){return r([T],[0],L)}R.Vector=o;function i(T,L,F){return r([T,L],[1,0],F)}R.ColumnMajorMatrix=i;function a(T,L,F){return r([T,L],[0,1],F)}R.RowMajorMatrix=a;function A(T,L,F){if(L.rank!==2)throw new Error("Invalid tensor rank");let v=Math.min(4,L.dimensions[0]),U=Math.min(4,L.dimensions[1]);for(let G=0;G<v;G++)for(let N=0;N<U;N++)Y.setValue(T,G,N,L.get(F,G,N));return T}R.toMat4=A;function s(T,L,F){if(L.rank!==2)throw new Error("Invalid tensor rank");let v=Math.min(3,L.dimensions[0]),U=Math.min(3,L.dimensions[1]);for(let G=0;G<v;G++)for(let N=0;N<U;N++)Ht.setValue(T,G,N,L.get(F,G,N));return T}R.toMat3=s;function c(T,L,F){if(L.rank!==1)throw new Error("Invalid tensor rank");let v=Math.min(3,L.dimensions[0]);for(let U=0;U<v;U++)T[U]=F[U];return T}R.toVec3=c;function l(T,L,F){if(L.rank!==1)throw new Error("Invalid tensor rank");let v=Math.min(4,L.dimensions[0]);for(let U=0;U<v;U++)T[U]=F[U];return T}R.toVec4=l;function u(T,L){let F=T.length;if(F!==L.length)return!1;for(let v=0;v<F;v++)if(T[v]!==L[v])return!1;return!0}R.areEqualExact=u;function g(T){let{dimensions:L,axisOrderFastToSlow:F}=T;switch(L.length){case 1:return{get:(v,U)=>v[U],set:(v,U,G)=>v[U]=G,add:(v,U,G)=>v[U]+=G,dataOffset:v=>v,getCoords:(v,U)=>(U[0]=v,U)};case 2:{if(F[0]===0&&F[1]===1){let v=L[0];return{get:(U,G,N)=>U[N*v+G],set:(U,G,N,k)=>U[N*v+G]=k,add:(U,G,N,k)=>U[N*v+G]+=k,dataOffset:(U,G)=>G*v+U,getCoords:(U,G)=>(G[0]=U%v,G[1]=Math.floor(U/v),G)}}if(F[0]===1&&F[1]===0){let v=L[1];return{get:(U,G,N)=>U[G*v+N],set:(U,G,N,k)=>U[G*v+N]=k,add:(U,G,N,k)=>U[G*v+N]+=k,dataOffset:(U,G)=>U*v+G,getCoords:(U,G)=>(G[0]=Math.floor(U/v),G[1]=U%v,G)}}throw new Error("bad axis order")}case 3:{if(F[0]===0&&F[1]===1&&F[2]===2){let v=L[0],U=L[1],G=v*U;return{get:(N,k,J,H)=>N[k+J*v+H*G],set:(N,k,J,H,z)=>N[k+J*v+H*G]=z,add:(N,k,J,H,z)=>N[k+J*v+H*G]+=z,dataOffset:(N,k,J)=>N+k*v+J*G,getCoords:(N,k)=>{let J=Math.floor(N/v);return k[0]=N%v,k[1]=J%U,k[2]=Math.floor(J/U),k}}}if(F[0]===0&&F[1]===2&&F[2]===1){let v=L[0],U=L[2],G=v*U;return{get:(N,k,J,H)=>N[k+H*v+J*G],set:(N,k,J,H,z)=>N[k+H*v+J*G]=z,add:(N,k,J,H,z)=>N[k+H*v+J*G]+=z,dataOffset:(N,k,J)=>N+J*v+k*G,getCoords:(N,k)=>{let J=Math.floor(N/v);return k[0]=N%v,k[1]=Math.floor(J/U),k[2]=J%U,k}}}if(F[0]===1&&F[1]===0&&F[2]===2){let v=L[1],U=L[0],G=v*U;return{get:(N,k,J,H)=>N[J+k*v+H*G],set:(N,k,J,H,z)=>N[J+k*v+H*G]=z,add:(N,k,J,H,z)=>N[J+k*v+H*G]+=z,dataOffset:(N,k,J)=>k+N*v+J*G,getCoords:(N,k)=>{let J=Math.floor(N/v);return k[0]=J%U,k[1]=N%v,k[2]=Math.floor(J/U),k}}}if(F[0]===1&&F[1]===2&&F[2]===0){let v=L[1],U=L[2],G=v*U;return{get:(N,k,J,H)=>N[J+H*v+k*G],set:(N,k,J,H,z)=>N[J+H*v+k*G]=z,add:(N,k,J,H,z)=>N[J+H*v+k*G]+=z,dataOffset:(N,k,J)=>k+J*v+N*G,getCoords:(N,k)=>{let J=Math.floor(N/v);return k[0]=Math.floor(J/U),k[1]=N%v,k[2]=J%U,k}}}if(F[0]===2&&F[1]===0&&F[2]===1){let v=L[2],U=L[0],G=v*U;return{get:(N,k,J,H)=>N[H+k*v+J*G],set:(N,k,J,H,z)=>N[H+k*v+J*G]=z,add:(N,k,J,H,z)=>N[H+k*v+J*G]+=z,dataOffset:(N,k,J)=>J+N*v+k*G,getCoords:(N,k)=>{let J=Math.floor(N/v);return k[0]=J%U,k[1]=Math.floor(J/U),k[2]=N%v,k}}}if(F[0]===2&&F[1]===1&&F[2]===0){let v=L[2],U=L[1],G=v*U;return{get:(N,k,J,H)=>N[H+J*v+k*G],set:(N,k,J,H,z)=>N[H+J*v+k*G]=z,add:(N,k,J,H,z)=>N[H+J*v+k*G]+=z,dataOffset:(N,k,J)=>J+k*v+N*G,getCoords:(N,k)=>{let J=Math.floor(N/v);return k[0]=Math.floor(J/U),k[1]=J%U,k[2]=N%v,k}}}throw new Error("bad axis order")}default:return{get:(v,...U)=>v[p(T,U)],set:(v,...U)=>v[p(T,U)]=U[U.length-1],add:(v,...U)=>v[p(T,U)]+=U[U.length-1],dataOffset:(...v)=>p(T,v),getCoords:(v,U)=>d(T,v,U)}}}function m(T){let{dimensions:L}=T,F=1;for(let v=0,U=L.length;v<U;v++)F*=L[v];return v=>new(v||T.defaultCtor)(F)}function p(T,L){let{accessDimensions:F,axisOrderFastToSlow:v}=T,U=F.length-1,G=F[U]*L[v[U]];for(let N=U-1;N>=0;N--)G=(G+L[v[N]])*F[N];return G}function d(T,L,F){let{dimensions:v,axisOrderFastToSlow:U}=T,G=v.length,N=L;for(let k=0;k<G;k++){let J=v[U[k]];F[U[k]]=N%J,N=Math.floor(N/J)}return F[U[G+1]]=N,F}function f(T){let L=[];for(let F=0;F<T.length;F++)L[F]=T[T.length-F-1];return L}R.invertAxisOrder=f;function I(T,L){let F=[];for(let v=0;v<T.length;v++)F[v]=T[L[v]];return F}function C(T){let L=new Int32Array(T.length);for(let F=0;F<T.length;F++)L[T[F]]=F;return F=>I(F,L)}R.convertToCanonicalAxisIndicesFastToSlow=C;function y(T){let L=new Int32Array(T.length);for(let F=0;F<T.length;F++)L[T[T.length-F-1]]=F;return F=>I(F,L)}R.convertToCanonicalAxisIndicesSlowToFast=y;function Q(T,L){let[F]=T.space.dimensions,{data:v}=T,U=new Uint8Array(v.length),G=-1;if(v[0]<L)for(let N=0;N<F&&v[N]<L;N++)U[N]=1,G=N;if(v[F-1]<L)for(let N=F-1;N>G&&v[N]<L;N--)U[N]=1;return U}function E(T,L){let[F,v]=T.space.dimensions,{dataOffset:U,getCoords:G}=T.space,{data:N}=T,k=new Uint8Array(N.length),J=[],H=[0,0],z=F-1,_=v-1,M=(q,ne)=>q===0||ne===0||q===z||ne===_;for(let q=0;q<v;q++)for(let ne=0;ne<F;ne++){let oe=U(ne,q);if(!k[oe]&&N[oe]<L&&M(ne,q))for(J.push(oe);J.length>0;){let ae=J.pop();if(k[ae])continue;k[ae]=1,G(ae,H);let[me,Se]=H;if(me>0){let ee=U(me-1,Se);!k[ee]&&N[ee]<L&&J.push(ee)}if(me<z){let ee=U(me+1,Se);!k[ee]&&N[ee]<L&&J.push(ee)}if(Se>0){let ee=U(me,Se-1);!k[ee]&&N[ee]<L&&J.push(ee)}if(Se<_){let ee=U(me,Se+1);!k[ee]&&N[ee]<L&&J.push(ee)}}}return k}function b(T,L){let[F,v,U]=T.space.dimensions,{dataOffset:G,getCoords:N}=T.space,k=[],J=[0,0,0],H=F-1,z=v-1,_=U-1,M=(oe,ae,me)=>oe===0||ae===0||me===0||oe===H||ae===z||me===_,{data:q}=T,ne=new Uint8Array(q.length);for(let oe=0;oe<U;oe++)for(let ae=0;ae<v;ae++)for(let me=0;me<F;me++){let Se=G(me,ae,oe);if(q[Se]<L&&M(me,ae,oe)&&!ne[Se])for(k.push(Se);k.length>0;){let ee=k.pop();if(ne[ee])continue;ne[ee]=1,N(ee,J);let[O,X,Ce]=J;if(O>0){let Ne=G(O-1,X,Ce);!ne[Ne]&&q[Ne]<L&&k.push(Ne)}if(O<H){let Ne=G(O+1,X,Ce);!ne[Ne]&&q[Ne]<L&&k.push(Ne)}if(X>0){let Ne=G(O,X-1,Ce);!ne[Ne]&&q[Ne]<L&&k.push(Ne)}if(X<z){let Ne=G(O,X+1,Ce);!ne[Ne]&&q[Ne]<L&&k.push(Ne)}if(Ce>0){let Ne=G(O,X,Ce-1);!ne[Ne]&&q[Ne]<L&&k.push(Ne)}if(Ce<_){let Ne=G(O,X,Ce+1);!ne[Ne]&&q[Ne]<L&&k.push(Ne)}}}return ne}function x(T,L){switch(T.space.dimensions.length){case 1:return Q(T,L);case 2:return E(T,L);case 3:return b(T,L);default:throw new Error("Floodfill only implemented for rank-1, rank-2 and rank-3 tensors.")}}R.floodfill=x;function S(T,L,F,v){let{dataOffset:U}=v.space,G=L*2;switch(v.space.dimensions.length){case 1:return T==="outside"?(N,k)=>{let J=N[k];return J<L&&F[k]?G:J}:(N,k)=>{let J=N[k];return J<L&&!F[k]?G:J};case 2:return T==="outside"?(N,k,J)=>{let H=U(k,J),z=N[H];return z<L&&F[H]?G:z}:(N,k,J)=>{let H=U(k,J),z=N[H];return z<L&&!F[H]?G:z};case 3:return T==="outside"?(N,k,J,H)=>{let z=U(k,J,H),_=N[z];return _<L&&F[z]?G:_}:(N,k,J,H)=>{let z=U(k,J,H),_=N[z];return _<L&&!F[z]?G:_};default:throw new Error("Floodfill only implemented for rank-1, rank-2 and rank-3 tensors.")}}function w(T,L,F){let v=x(T,L),U={...T.space,get:S(F,L,v,T)};return R.create(U,T.data)}R.createFloodfilled=w})(Fr||={});function zC(e,t,r){for(;t<r&&e.charCodeAt(t)===32;)t++;return cl(e,t,r)}function cl(e,t,r){let n=t,o=0,i=1;for(e.charCodeAt(n)===45?(i=-1,++n):e.charCodeAt(n)===43&&++n;n<r;n++){let a=e.charCodeAt(n)-48;if(a>9||a<0)return i*o|0;o=10*o+a|0}return i*o}function Ece(e,t,r,n){return t.charCodeAt(r)===43&&r++,e*Math.pow(10,cl(t,r,n))}function xce(e,t,r){for(;t<r&&e.charCodeAt(t)===32;)t++;return Xa(e,t,r)}function Xa(e,t,r){let n=t,o=1,i=0,a=0,A=1;for(e.charCodeAt(n)===45?(o=-1,++n):e.charCodeAt(n)===43&&++n;n<r;){let s=e.charCodeAt(n)-48;if(s>=0&&s<10)i=i*10+s,++n;else if(s===-2){for(++n;n<r;)if(s=e.charCodeAt(n)-48,s>=0&&s<10)a=10*a+s,A=10*A,++n;else return s===53||s===21?Ece(o*(i+a/A),e,n+1,r):o*(i+a/A);return o*(i+a/A)}else{if(s===53||s===21)return Ece(o*i,e,n+1,r);break}}return o*i}function hKe(e,t,r){for(e.charCodeAt(t)===45&&t++;t<r;t++){let n=e.charCodeAt(t)-48;if(n>9||n<0)return!1}return!0}function bce(e,t,r){return e.charCodeAt(t)===43&&t++,hKe(e,t,r)?2:3}function Sce(e){let t=0,r=e.length;if(e.charCodeAt(t)===45&&++t,e.charCodeAt(t)===46&&r-t===1)return 3;for(;t<r;){let n=e.charCodeAt(t)-48;if(n>=0&&n<10)++t;else if(n===-2){++t;let o=!1;for(;t<r;)if(n=e.charCodeAt(t)-48,n>=0&&n<10)o=!0,++t;else return n===53||n===21?bce(e,t+1,r):3;return o?1:0}else{if(n===53||n===21)return t===0||t===1&&e.charCodeAt(0)===45?3:bce(e,t+1,r);break}}return t===r?0:3}var K;(T=>{let e;(oe=>{oe.str={"@type":"str",T:"",valueType:"str"},oe.ustr={"@type":"str",T:"",valueType:"str",transform:"uppercase"},oe.lstr={"@type":"str",T:"",valueType:"str",transform:"lowercase"},oe.int={"@type":"int",T:0,valueType:"int"},oe.coord={"@type":"coord",T:0,valueType:"float"},oe.float={"@type":"float",T:0,valueType:"float"};function k(ae){return{"@type":"str",T:ae?.defaultValue??"",transform:ae?.transform,valueType:"str"}}oe.Str=k;function J(ae=0){return{"@type":"int",T:ae,valueType:"int"}}oe.Int=J;function H(ae=0){return{"@type":"float",T:ae,valueType:"float"}}oe.Float=H;function z(ae,me=oe.float){return{"@type":"tensor",T:ae.create(),space:ae,valueType:"tensor",baseType:me}}oe.Tensor=z;function _(ae,me=oe.float){return z(Fr.Vector(ae,me["@type"]==="int"?Int32Array:Float64Array),me)}oe.Vector=_;function M(ae,me,Se=oe.float){return z(Fr.ColumnMajorMatrix(ae,me,Se["@type"]==="int"?Int32Array:Float64Array),Se)}oe.Matrix=M;function q(ae){return ae}oe.Aliased=q;function ne(ae,me,Se=[]){return{"@type":"list",T:Se,separator:ae,itemParse:me,valueType:"list"}}oe.List=ne})(e=T.Schema||={});function t(L){return!!L&&!!L.schema&&!!L.value}T.is=t;let r;(U=>(U[U.Present=0]="Present",U[U.NotPresent=1]="NotPresent",U[U.Unknown=2]="Unknown"))(r=T.ValueKinds||={}),T.ValueKind={Present:0,NotPresent:1,Unknown:2};function o(L,F){return Dce(F.T,L,F,1)}T.Undefined=o;function i(L,F,v){return Dce(L,F,v,0)}T.ofConst=i;function a(L){return rG(L)}T.ofLambda=a;function A(L,F){return a({value:v=>v+L,rowCount:Math.max(F-L+1,0),schema:e.int})}T.range=A;function s(L){return KC(L)}T.ofArray=s;function c(L){return KC({array:L,schema:e.int})}T.ofIntArray=c;function l(L){return KC({array:L,schema:e.float})}T.ofFloatArray=l;function u(L){return KC({array:L,schema:e.str})}T.ofStringArray=u;function g(L){return KC({array:L,schema:e.Aliased(e.str)})}T.ofStringAliasArray=g;function m(L,F=","){return KC({array:L,schema:e.List(F,v=>v)})}T.ofStringListArray=m;function p(L){let{count:F,data:v,indices:U}=L;return rG({value:G=>cl(v,U[2*G],U[2*G+1])||0,rowCount:F,schema:e.int})}T.ofIntTokens=p;function d(L){let{count:F,data:v,indices:U}=L;return rG({value:G=>Xa(v,U[2*G],U[2*G+1])||0,rowCount:F,schema:e.float})}T.ofFloatTokens=d;function f(L){let{count:F,data:v,indices:U}=L;return rG({value:G=>{let N=v.substring(U[2*G],U[2*G+1]);return N==="."||N==="?"?"":N},rowCount:F,schema:e.str})}T.ofStringTokens=f;function I(L,F,v){return EKe(L,F,v)}T.window=I;function C(L,F,v=!0){return DKe(L,F,v)}T.view=C;function y(L){return yKe(L)}T.createFirstIndexMap=y;function Q(L){return QKe(L)}T.createIndexer=Q;function E(L,F,v){return wKe(L,F,v||Array)}T.mapToArray=E;function b(L,F){return RKe(L,F)}T.areEqual=b;function x(L,F){return TKe(L,F)}T.indicesOf=x;function S(L,F){return L.__array?L:L.isDefined?KC({array:L.toArray({array:F}),schema:L.schema,valueKind:L.valueKind}):o(L.rowCount,L.schema)}T.asArrayColumn=S;function w(L,F,v=0){if(!L.isDefined)return;let U=L.__array;if(U)for(let G=0,N=U.length;G<N;G++)F[v+G]=U[G];else for(let G=0,N=L.rowCount;G<N;G++)F[v+G]=L.value(G)}T.copyToArray=w;function R(L){for(let F=0,v=L.rowCount;F<v;F++)if(F!==L.value(F))return!1;return!0}T.isIdentity=R})(K||={});function yKe(e){let t=new Map;for(let r=0,n=e.rowCount;r<n;r++){let o=e.value(r);t.has(o)||t.set(e.value(r),r)}return t}function QKe(e){let t=new Map;for(let r=0,n=e.rowCount;r<n;r++){let o=e.value(r);t.has(o)||t.set(e.value(r),r)}return r=>t.has(r)?t.get(r):-1}function Dce(e,t,r,n){return{schema:r,__array:void 0,isDefined:n===0,rowCount:t,value:i=>e,valueKind:i=>n,toArray:i=>{let{array:a}=Nb(t,i);for(let A=0,s=a.length;A<s;A++)a[A]=e;return a},areValuesEqual:(i,a)=>!0}}function rG({value:e,valueKind:t,areValuesEqual:r,rowCount:n,schema:o}){return{schema:o,__array:void 0,isDefined:!0,rowCount:n,value:e,valueKind:t||(i=>0),toArray:i=>{let{array:a,start:A}=Nb(n,i);for(let s=0,c=a.length;s<c;s++)a[s]=e(s+A);return a},areValuesEqual:r||((i,a)=>e(i)===e(a))}}function KC({array:e,schema:t,valueKind:r}){let n=e.length,o=t.T,i=t.valueType==="str"?t.transform==="lowercase"?A=>{let s=e[A];return typeof s=="string"?s.toLowerCase():`${s??o}`.toLowerCase()}:t.transform==="uppercase"?A=>{let s=e[A];return typeof s=="string"?s.toUpperCase():`${s??o}`.toUpperCase()}:A=>{let s=e[A];return typeof s=="string"?s:`${s??o}`}:A=>e[A],a=ZP(e);return{schema:t,__array:e,isDefined:!0,rowCount:n,value:i,valueKind:r||(A=>0),toArray:t.valueType==="str"?t.transform==="lowercase"?A=>{let{start:s,end:c}=Ry(n,A),l=new(A&&typeof A.array<"u"?A.array:e.constructor)(c-s);for(let u=0,g=c-s;u<g;u++){let m=e[s+u];l[u]=typeof m=="string"?m.toLowerCase():`${m??o}`.toLowerCase()}return l}:t.transform==="uppercase"?A=>{let{start:s,end:c}=Ry(n,A),l=new(A&&typeof A.array<"u"?A.array:e.constructor)(c-s);for(let u=0,g=c-s;u<g;u++){let m=e[s+u];l[u]=typeof m=="string"?m.toUpperCase():`${m??o}`.toUpperCase()}return l}:A=>{let{start:s,end:c}=Ry(n,A),l=new(A&&typeof A.array<"u"?A.array:e.constructor)(c-s);for(let u=0,g=c-s;u<g;u++){let m=e[s+u];l[u]=typeof m=="string"?m:`${m??o}`}return l}:a?A=>qP(e,A):A=>{let{start:s,end:c}=Ry(n,A);if(s===0&&c===e.length)return e;let l=new(A&&typeof A.array<"u"?A.array:e.constructor)(c-s);for(let u=0,g=c-s;u<g;u++)l[u]=e[s+u];return l},areValuesEqual:(A,s)=>e[A]===e[s]}}function EKe(e,t,r){return e.isDefined?t===0&&r===e.rowCount?e:e.__array&&ZP(e.__array)?bKe(e,t,r):xKe(e,t,r):K.Undefined(r-t,e.schema)}function bKe(e,t,r){let n=qP(e.__array,{start:t,end:r}),o=e.valueKind;return KC({array:n,schema:e.schema,valueKind:i=>o(t+i)})}function xKe(e,t,r){let n=e.value,o=e.valueKind,i=e.areValuesEqual,a=t===0?n:s=>n(s+t),A=r-t;return{schema:e.schema,__array:void 0,isDefined:e.isDefined,rowCount:A,value:a,valueKind:t===0?o:s=>o(s+t),toArray:s=>{let{array:c}=Nb(A,s);for(let l=0,u=c.length;l<u;l++)c[l]=n(l+t);return c},areValuesEqual:t===0?i:(s,c)=>i(s+t,c+t)}}function SKe(e,t){if(e.length!==t)return!1;for(let r=0,n=e.length;r<n;r++)if(e[r]!==r)return!1;return!0}function DKe(e,t,r){return e.rowCount===0||r&&SKe(t,e.rowCount)?e:e.__array&&typeof e.value(0)==typeof e.__array[0]?vKe(e,t):FKe(e,t)}function vKe(e,t){let r=e.__array,n=new r.constructor(t.length);for(let i=0,a=t.length;i<a;i++)n[i]=r[t[i]];let o=e.valueKind;return KC({array:n,schema:e.schema,valueKind:i=>o(t[i])})}function FKe(e,t){let r=e.value,n=e.valueKind,o=e.areValuesEqual,i=A=>r(t[A]),a=t.length;return{schema:e.schema,__array:void 0,isDefined:e.isDefined,rowCount:a,value:i,valueKind:A=>n(t[A]),toArray:A=>{let{array:s}=Nb(a,A);for(let c=0,l=s.length;c<l;c++)s[c]=r(t[c]);return s},areValuesEqual:(A,s)=>o(t[A],t[s])}}function wKe(e,t,r){let n=new r(e.rowCount);for(let o=0,i=e.rowCount;o<i;o++)n[o]=t(e.value(o));return n}function RKe(e,t){return e===t?!0:e.rowCount!==t.rowCount||e.isDefined!==t.isDefined||e.schema.valueType!==t.schema.valueType?!1:e.__array&&t.__array?UKe(e,t):LKe(e,t)}function UKe(e,t){let r=e.__array,n=t.__array;for(let o=0,i=e.rowCount;o<i;o++)if(r[o]!==n[o])return!1;return!0}function LKe(e,t){let r=e.value,n=t.value;for(let o=0,i=e.rowCount;o<i;o++)if(r(o)!==n(o))return!1;return!0}function TKe(e,t){let r=[],n=e.value;for(let o=0,i=e.rowCount;o<i;o++)t(n(o))&&(r[r.length]=o);return r}function nG(e,t,r){return e[t]-e[r]}function Lf(e,t,r){let n=e[t];e[t]=e[r],e[r]=n}function vce(e,t,r,n){let o=r+n>>1;return t(e,r,n)>0?t(e,r,o)>0?t(e,o,n)>0?o:n:r:t(e,n,o)>0?t(e,o,r)>0?o:r:n}function PKe(e,t,r){let{cmp:n,swap:o,data:i,parts:a}=e,A=t+1,s=r;for(o(i,t,vce(i,n,t,r));n(i,s,t)>0;)--s;for(let c=t+1;c<=s;c++){let l=n(i,c,t);if(l>0){for(o(i,c,s),--s;n(i,s,t)>0;)--s;c--}else l===0&&(o(i,c,A),A++)}for(let c=t;c<A;c++)o(i,c,t+s-c);a[0]=s-A+t+1,a[1]=s}function GKe({data:e,cmp:t,swap:r},n,o){for(let i=n+1;i<=o;i++){let a=i-1;for(;a>=n&&t(e,a,a+1)>0;)r(e,a,a+1),a=a-1}}function oG(e,t,r){let{parts:n}=e;for(;t<r;){if(r-t<16){GKe(e,t,r);return}PKe(e,t,r);let o=n[0],i=n[1];o-t<r-i?(oG(e,t,o-1),t=i+1):(oG(e,i+1,r),r=o-1)}}function NKe(e,t,r,n){let o=r+1,i=n;Lf(e,r,vce(e,nG,r,n));let a=e[r];for(;e[i]>a;)--i;for(let A=r+1;A<=i;A++){let s=e[A];if(s>a){for(Lf(e,A,i),--i;e[i]>a;)--i;A--}else s===a&&(Lf(e,A,o),++o)}for(let A=r;A<o;A++)Lf(e,A,r+i-A);t[0]=i-o+r+1,t[1]=i}function MKe(e,t,r){for(let n=t+1;n<=r;n++){let o=e[n],i=n-1;for(;i>=t&&e[i]>o;)e[i+1]=e[i],i=i-1;e[i+1]=o}}function tz(e,t,r,n){for(;r<n;){if(n-r<16){MKe(e,r,n);return}NKe(e,t,r,n);let o=t[0],i=t[1];o-r<n-i?(tz(e,t,r,o-1),r=i+1):(tz(e,t,i+1,n),n=o-1)}}function js(e,t=nG){return kKe(e,0,e.length,t)}function kKe(e,t,r,n=nG){return n===nG?tz(e,[0,0],t,r-1):oG({data:e,cmp:n,swap:Lf,parts:[0,0]},t,r-1),e}function kS(e,t,r,n,o){return oG({data:e,cmp:n,swap:o,parts:[0,0]},t,r-1),e}var Jr;(y=>{function e(Q){return Q&&typeof Q._rowCount=="number"&&!!Q._columns&&!!Q._schema}y.is=e;function t(Q,E,b={}){let x=Object.create(null),S=Object.keys(Q);x._rowCount=E._rowCount,x._columns=S,x._schema=Q;for(let w of S)if(E[w])x[w]=E[w];else if(b[w])x[w]=b[w];else throw Error(`Cannot find column '${w}'.`);return x}y.pickColumns=t;function r(Q,E){let b=Object.keys(E);return{_rowCount:E[b[0]].rowCount,_columns:b,_schema:Q,...E}}y.ofColumns=r;function n(Q,E,b){let x=Object.create(null),S=Object.keys(Q);x._rowCount=b,x._columns=S,x._schema=Q;for(let w of S)w in E?x[w]=E[w]:x[w]=K.Undefined(b,Q[w]);return x}y.ofPartialColumns=n;function o(Q,E){let b=Object.create(null),x=Object.keys(Q);b._rowCount=E,b._columns=x,b._schema=Q;for(let S of x)b[S]=K.Undefined(E,Q[S]);return b}y.ofUndefinedColumns=o;function i(Q,E){let b=Object.create(null),x=E.length,S=Object.keys(Q);b._rowCount=x,b._columns=S,b._schema=Q;for(let w of S)b[w]=K.ofLambda({rowCount:x,schema:Q[w],value:R=>E[R][w],valueKind:R=>typeof E[R][w]>"u"?K.ValueKinds.NotPresent:K.ValueKinds.Present});return b}y.ofRows=i;function a(Q,E){let b=Object.create(null),x=Object.keys(Q);b._rowCount=0,b._columns=x,b._schema=Q;for(let S of x)typeof E[S]<"u"?(b[S]=K.ofArray({array:E[S],schema:Q[S]}),b._rowCount=E[S]?.length):b[S]=K.Undefined(b._rowCount,Q[S]);return b}y.ofArrays=a;function A(Q,E,b){let x=Object.create(null),S=Object.keys(E);x._rowCount=b.length,x._columns=S,x._schema=E;for(let w of S)x[w]=K.view(Q[w],b);return x}y.view=A;function s(Q,E,b){let x=[];for(let S=0,w=Q._rowCount;S<w;++S)b(S)&&x.push(S);return A(Q,E,x)}y.pick=s;function c(Q,E,b,x){if(b===0&&x===Q._rowCount)return Q;let S=Object.create(null),w=Object.keys(E);S._rowCount=x-b,S._columns=w,S._schema=E;for(let R of w)S[R]=K.window(Q[R],b,x);return S}y.window=c;function l(Q,E){let b=Object.create(null),x=Object.keys(E);b._rowCount=0;for(let R of Q)b._rowCount+=R._rowCount;let S={};for(let R of x)S[R]=new Array(b._rowCount);b._columns=x,b._schema=E;let w=0;for(let R of Q){for(let T of x)K.copyToArray(R[T],S[T],w);w+=R._rowCount}for(let R of x)b[R]=K.ofArray({array:S[R],schema:E[R]});return b}y.concat=l;function u(Q,E,b){Q[E]=K.asArrayColumn(Q[E],b)}y.columnToArray=u;function g(Q,E){let b=new Int32Array(Q._rowCount);for(let w=0,R=b.length;w<R;w++)b[w]=w;js(b,(w,R,T)=>E(R,T));let x=!0;for(let w=0,R=b.length;w<R;w++)if(b[w]!==w){x=!1;break}if(x)return Q;let S=Object.create(null);S._rowCount=Q._rowCount,S._columns=Q._columns,S._schema=Q._schema;for(let w of Q._columns)S[w]=K.view(Q[w],b,!1);return S}y.sort=g;function m(Q,E){if(Q._rowCount!==E._rowCount||Q._columns.length!==E._columns.length)return!1;for(let b of Q._columns)if(!E[b])return!1;for(let b of Q._columns)if(!K.areEqual(Q[b],E[b]))return!1;return!0}y.areEqual=m;function p(Q,E){let b=Object.create(null),{_columns:x}=Q;for(let S=0;S<x.length;S++){let w=x[S];b[w]=Q[w].value(E)}return b}y.getRow=p;function d(Q,E){for(let b=0,x=Q._rowCount;b<x;++b)if(E(b))return p(Q,b)}y.pickRow=d;function f(Q){let E=[],{_rowCount:b}=Q;for(let x=0;x<b;x++)E[x]=p(Q,x);return E}y.getRows=f;function I(Q){let E={},{_columns:b}=Q;for(let x=0;x<b.length;x++){let S=b[x];E[S]=Q[S].toArray()}return E}y.toArrays=I;function C(Q){let E=tr.create(),{_columns:b,_rowCount:x}=Q,S=1;tr.write(E,"|");for(let w=0;w<b.length;w++)tr.write(E,b[w]),tr.write(E,"|"),S+=b[w].length+1;tr.newline(E),tr.write(E,new Array(S+1).join("-")),tr.newline(E);for(let w=0;w<x;w++){tr.write(E,"|");for(let R=0;R<b.length;R++){let T=Q[b[R]];T.valueKind(w)===K.ValueKinds.Present?(tr.write(E,T.value(w)),tr.write(E,"|")):tr.write(E,".|")}tr.newline(E)}return tr.getString(E)}y.formatToString=C})(Jr||={});var iG;(r=>{function e(n,o,i){let a=Object.keys(i),A=Object.create(null),s=[];A._name=n,A._tableNames=s,A._schema=o;for(let c of a)Jr.is(i[c])&&(A[c]=i[c],s[s.length]=c);return A}r.ofTables=e;function t(n){let o={};for(let i of n._tableNames)o[i]=Jr.getRows(n[i]);return o}r.getTablesAsRows=t})(iG||={});function rs(e,t){return{value:e,unit:t}}var tm;(A=>{function e(s,c,l){let u=!!s[0].cell,g=!!s[0].velocities,m=!!s[0].forces;return{id:Hn.create22(),frames:s,hasCell:u,hasVelocities:g,hasForces:m,deltaTime:c,timeOffset:l}}A.create=e;function t(s,c,l){let{x:u,y:g,z:m}=s;return s.xyzOrdering.frozen?l?s.xyzOrdering.isIdentity?(u=i(u,l),g=i(g,l),m=i(m,l)):Fa(s.xyzOrdering.index,l)||(u=o(u,s.xyzOrdering.index,l),g=o(g,s.xyzOrdering.index,l),m=o(m,s.xyzOrdering.index,l)):s.xyzOrdering.isIdentity||(u=a(u,s.xyzOrdering.index),g=a(g,s.xyzOrdering.index),m=a(m,s.xyzOrdering.index)):l&&(s.xyzOrdering.isIdentity?(s.xyzOrdering.isIdentity=!1,s.xyzOrdering.index=l,n(u,l),n(g,l),n(m,l)):Fa(s.xyzOrdering.index,l)||(u=o(u,s.xyzOrdering.index,l),g=o(g,s.xyzOrdering.index,l),m=o(m,s.xyzOrdering.index,l))),s.xyzOrdering.frozen=!0,{id:Hn.create22(),atomId:c.atomId,occupancy:c.occupancy??K.ofConst(1,s.elementCount,K.Schema.int),B_iso_or_equiv:c.B_iso_or_equiv??K.ofConst(0,s.elementCount,K.Schema.float),xyzDefined:!0,x:u,y:g,z:m}}A.getAtomicConformation=t;let r=[.123];function n(s,c){let l=r;for(let u=0,g=s.length;u<g;u++)l[u]=s[c[u]];for(let u=0,g=s.length;u<g;u++)s[u]=l[u]}function o(s,c,l){let u=new Float32Array(s.length);for(let g=0,m=s.length;g<m;g++)u[g]=s[c[l[g]]];return u}function i(s,c){let l=new Float32Array(s.length);for(let u=0,g=s.length;u<g;u++)l[u]=s[c[u]];return l}function a(s,c){let l=new Float32Array(s.length);for(let u=0,g=s.length;u<g;u++)l[c[u]]=s[u];return l}})(tm||={});var Ty;(t=>{function e(r,n,o,i){return{id:Hn.create22(),label:r,basic:n,sourceData:i,bonds:o}}t.create=e})(Ty||={});var jC=K.Schema,de=jC.str,Xe=jC.int,kn=jC.float,rz=jC.coord,Er=jC.Aliased,Py=jC.Matrix,aG=jC.Vector,fi=jC.lstr,kb=jC.List,Nn={atom_site:{auth_asym_id:de,auth_atom_id:de,auth_comp_id:de,auth_seq_id:Xe,B_iso_or_equiv:kn,Cartn_x:rz,Cartn_y:rz,Cartn_z:rz,group_PDB:Er(de),id:Xe,label_alt_id:de,label_asym_id:de,label_atom_id:de,label_comp_id:de,label_entity_id:de,label_seq_id:Xe,occupancy:kn,type_symbol:de,pdbx_PDB_ins_code:de,pdbx_PDB_model_num:Xe,pdbx_formal_charge:Xe,pdbx_label_index:Xe,pdbx_sifts_xref_db_name:de,pdbx_sifts_xref_db_acc:de,pdbx_sifts_xref_db_num:de,pdbx_sifts_xref_db_res:de,ihm_model_id:Xe},atom_site_anisotrop:{id:Xe,type_symbol:de,U:Py(3,3),U_esd:Py(3,3),pdbx_auth_seq_id:Xe,pdbx_auth_asym_id:de,pdbx_auth_atom_id:de,pdbx_auth_comp_id:de,pdbx_label_seq_id:Xe,pdbx_label_alt_id:de,pdbx_label_asym_id:de,pdbx_label_atom_id:de,pdbx_label_comp_id:de,pdbx_PDB_ins_code:de},atom_sites:{entry_id:de,fract_transf_matrix:Py(3,3),fract_transf_vector:aG(3)},audit_author:{name:de,pdbx_ordinal:Xe,identifier_ORCID:de},audit_conform:{dict_location:de,dict_name:de,dict_version:de},cell:{angle_alpha:kn,angle_beta:kn,angle_gamma:kn,entry_id:de,length_a:kn,length_b:kn,length_c:kn,Z_PDB:Xe,pdbx_unique_axis:de},chem_comp:{formula:de,formula_weight:kn,id:de,mon_nstd_flag:Er(fi),name:de,type:Er(fi),pdbx_synonyms:kb(";",e=>e)},chem_comp_bond:{atom_id_1:de,atom_id_2:de,comp_id:de,value_order:Er(fi),pdbx_ordinal:Xe,pdbx_stereo_config:Er(fi),pdbx_aromatic_flag:Er(fi)},citation:{book_publisher:de,country:de,id:de,journal_abbrev:de,journal_id_ASTM:de,journal_id_CSD:de,journal_id_ISSN:de,journal_volume:de,page_first:de,page_last:de,title:de,year:Xe,pdbx_database_id_DOI:de,pdbx_database_id_PubMed:Xe},citation_author:{citation_id:de,name:de,ordinal:Xe},database_2:{database_id:Er(fi),database_code:de},entity:{details:de,formula_weight:kn,id:de,src_method:Er(fi),type:Er(fi),pdbx_description:kb(",",e=>e),pdbx_number_of_molecules:Xe,pdbx_parent_entity_id:de,pdbx_mutation:de,pdbx_fragment:de,pdbx_ec:kb(",",e=>e)},entity_poly:{entity_id:de,nstd_linkage:Er(fi),nstd_monomer:Er(fi),type:Er(de),pdbx_strand_id:kb(",",e=>e),pdbx_seq_one_letter_code:de,pdbx_seq_one_letter_code_can:de,pdbx_target_identifier:de},entity_poly_seq:{entity_id:de,hetero:Er(fi),mon_id:de,num:Xe},entry:{id:de},exptl:{entry_id:de,method:Er(de)},software:{classification:de,date:de,description:de,name:de,type:Er(fi),version:de,pdbx_ordinal:Xe},struct:{entry_id:de,title:de,pdbx_structure_determination_methodology:Er(de),pdbx_descriptor:de},struct_asym:{details:de,entity_id:de,id:de,pdbx_modified:de,pdbx_blank_PDB_chainid_flag:Er(de)},struct_conf:{beg_label_asym_id:de,beg_label_comp_id:de,beg_label_seq_id:Xe,beg_auth_asym_id:de,beg_auth_comp_id:de,beg_auth_seq_id:Xe,conf_type_id:Er(fi),details:de,end_label_asym_id:de,end_label_comp_id:de,end_label_seq_id:Xe,end_auth_asym_id:de,end_auth_comp_id:de,end_auth_seq_id:Xe,id:de,pdbx_beg_PDB_ins_code:de,pdbx_end_PDB_ins_code:de,pdbx_PDB_helix_class:de,pdbx_PDB_helix_length:Xe,pdbx_PDB_helix_id:de},struct_conn:{conn_type_id:Er(fi),details:de,id:de,ptnr1_label_asym_id:de,ptnr1_label_atom_id:de,ptnr1_label_comp_id:de,ptnr1_label_seq_id:Xe,ptnr1_auth_asym_id:de,ptnr1_auth_comp_id:de,ptnr1_auth_seq_id:Xe,ptnr1_symmetry:de,ptnr2_label_asym_id:de,ptnr2_label_atom_id:de,ptnr2_label_comp_id:de,ptnr2_label_seq_id:Xe,ptnr2_auth_asym_id:de,ptnr2_auth_comp_id:de,ptnr2_auth_seq_id:Xe,ptnr2_symmetry:de,pdbx_ptnr1_PDB_ins_code:de,pdbx_ptnr1_label_alt_id:de,pdbx_ptnr1_standard_comp_id:de,pdbx_ptnr2_PDB_ins_code:de,pdbx_ptnr2_label_alt_id:de,pdbx_ptnr3_PDB_ins_code:de,pdbx_ptnr3_label_alt_id:de,pdbx_ptnr3_label_asym_id:de,pdbx_ptnr3_label_atom_id:de,pdbx_ptnr3_label_comp_id:de,pdbx_ptnr3_label_seq_id:Xe,pdbx_PDB_id:de,pdbx_dist_value:kn,pdbx_value_order:Er(fi)},struct_conn_type:{criteria:de,id:Er(fi),reference:de},struct_keywords:{entry_id:de,text:kb(",",e=>e),pdbx_keywords:de},struct_mon_prot_cis:{label_alt_id:de,label_asym_id:de,label_comp_id:de,label_seq_id:Xe,auth_asym_id:de,auth_comp_id:de,auth_seq_id:Xe,pdbx_auth_asym_id_2:de,pdbx_auth_comp_id_2:de,pdbx_auth_seq_id_2:Xe,pdbx_label_asym_id_2:de,pdbx_label_comp_id_2:de,pdbx_label_seq_id_2:Xe,pdbx_PDB_ins_code:de,pdbx_PDB_ins_code_2:de,pdbx_PDB_model_num:Xe,pdbx_omega_angle:de,pdbx_id:de,pdbx_auth_ins_code:de,pdbx_auth_ins_code_2:de},struct_ncs_oper:{code:Er(de),details:de,id:Xe,matrix:Py(3,3),vector:aG(3)},struct_sheet_range:{beg_label_asym_id:de,beg_label_comp_id:de,beg_label_seq_id:Xe,end_label_asym_id:de,end_label_comp_id:de,end_label_seq_id:Xe,beg_auth_asym_id:de,beg_auth_comp_id:de,beg_auth_seq_id:Xe,end_auth_asym_id:de,end_auth_comp_id:de,end_auth_seq_id:Xe,id:de,sheet_id:de,pdbx_beg_PDB_ins_code:de,pdbx_end_PDB_ins_code:de},struct_site:{details:de,id:de,pdbx_num_residues:Xe,pdbx_evidence_code:de,pdbx_auth_asym_id:de,pdbx_auth_comp_id:de,pdbx_auth_seq_id:Xe,pdbx_auth_ins_code:de},struct_site_gen:{details:de,id:de,label_alt_id:de,label_asym_id:de,label_atom_id:de,label_comp_id:de,label_seq_id:Xe,auth_asym_id:de,auth_atom_id:de,auth_comp_id:de,auth_seq_id:Xe,site_id:de,symmetry:de,pdbx_auth_ins_code:de,pdbx_num_res:Xe},struct_site_keywords:{site_id:de,text:de},symmetry:{entry_id:de,cell_setting:Er(fi),Int_Tables_number:Xe,space_group_name_Hall:de,"space_group_name_H-M":de},pdbx_database_status:{status_code:Er(de),status_code_sf:Er(de),status_code_mr:Er(de),entry_id:de,recvd_initial_deposition_date:de,SG_entry:Er(fi),deposit_site:Er(de),process_site:Er(de),status_code_cs:Er(de),methods_development_category:Er(de),pdb_format_compatible:Er(fi)},pdbx_nonpoly_scheme:{asym_id:de,entity_id:de,mon_id:de,pdb_strand_id:de,ndb_seq_num:de,pdb_seq_num:de,auth_seq_num:de,pdb_mon_id:de,auth_mon_id:de,pdb_ins_code:de},pdbx_database_related:{db_name:Er(de),details:de,db_id:de,content_type:Er(de)},pdbx_entity_nonpoly:{entity_id:de,comp_id:de,name:de},pdbx_chem_comp_synonyms:{name:de,comp_id:de,provenance:Er(de)},pdbx_chem_comp_identifier:{comp_id:de,identifier:de,type:Er(de),program:de,program_version:de},pdbx_unobs_or_zero_occ_residues:{id:Xe,polymer_flag:Er(fi),occupancy_flag:Er(Xe),PDB_model_num:Xe,auth_asym_id:de,auth_comp_id:de,auth_seq_id:Xe,PDB_ins_code:de,label_asym_id:de,label_comp_id:de,label_seq_id:Xe},pdbx_struct_mod_residue:{id:Xe,auth_asym_id:de,auth_comp_id:de,auth_seq_id:Xe,PDB_ins_code:de,label_asym_id:de,label_comp_id:de,label_seq_id:Xe,parent_comp_id:de,details:de},pdbx_struct_oper_list:{id:de,type:Er(de),name:de,symmetry_operation:de,matrix:Py(3,3),vector:aG(3)},pdbx_struct_assembly:{method_details:de,oligomeric_details:de,oligomeric_count:Xe,details:de,id:de},pdbx_struct_assembly_gen:{asym_id_list:kb(",",e=>e),assembly_id:de,oper_expression:de},pdbx_reference_entity_list:{prd_id:de,ref_entity_id:de,type:Er(fi),details:de,component_id:Xe},pdbx_reference_entity_link:{link_id:Xe,prd_id:de,details:de,ref_entity_id_1:de,ref_entity_id_2:de,entity_seq_num_1:Xe,entity_seq_num_2:Xe,comp_id_1:de,comp_id_2:de,atom_id_1:de,atom_id_2:de,value_order:Er(fi),component_1:Xe,component_2:Xe,link_class:Er(de)},pdbx_reference_entity_poly_link:{link_id:Xe,prd_id:de,ref_entity_id:de,component_id:Xe,entity_seq_num_1:Xe,entity_seq_num_2:Xe,comp_id_1:de,comp_id_2:de,atom_id_1:de,atom_id_2:de,value_order:Er(fi)},pdbx_molecule:{prd_id:de,instance_id:Xe,asym_id:de},pdbx_molecule_features:{prd_id:de,class:Er(fi),type:Er(fi),name:de,details:de},entity_src_nat:{entity_id:de,pdbx_organism_scientific:de,pdbx_plasmid_name:de,pdbx_src_id:Xe,pdbx_beg_seq_num:Xe,pdbx_end_seq_num:Xe},entity_src_gen:{entity_id:de,pdbx_gene_src_gene:kb(",",e=>e),pdbx_gene_src_scientific_name:de,plasmid_name:de,pdbx_src_id:Xe,pdbx_beg_seq_num:Xe,pdbx_end_seq_num:Xe},pdbx_entity_src_syn:{organism_scientific:de,entity_id:de,pdbx_src_id:Xe,pdbx_beg_seq_num:Xe,pdbx_end_seq_num:Xe},pdbx_entity_branch_descriptor:{entity_id:de,descriptor:de,type:Er(fi),program:de,program_version:de,ordinal:Xe},pdbx_entity_instance_feature:{details:de,feature_type:Er(de),auth_asym_id:de,asym_id:de,auth_seq_num:de,seq_num:Xe,comp_id:de,auth_comp_id:de,ordinal:Xe},pdbx_entity_branch_list:{entity_id:de,hetero:Er(fi),comp_id:de,num:Xe},pdbx_entity_branch_link:{link_id:Xe,details:de,entity_id:de,entity_branch_list_num_1:Xe,entity_branch_list_num_2:Xe,comp_id_1:de,comp_id_2:de,atom_id_1:de,leaving_atom_id_1:de,atom_stereo_config_1:Er(fi),atom_id_2:de,leaving_atom_id_2:de,atom_stereo_config_2:Er(fi),value_order:Er(fi)},pdbx_entity_branch:{entity_id:de,type:Er(de)},pdbx_branch_scheme:{entity_id:de,hetero:Er(fi),asym_id:de,mon_id:de,num:Xe,pdb_asym_id:de,pdb_seq_num:de,pdb_mon_id:de,auth_asym_id:de,auth_seq_num:de,auth_mon_id:de},pdbx_chem_comp_related:{comp_id:de,related_comp_id:de,relationship_type:Er(de),details:de},ihm_starting_model_details:{starting_model_id:de,entity_id:de,entity_description:de,asym_id:de,entity_poly_segment_id:Xe,starting_model_source:Er(de),starting_model_auth_asym_id:de,starting_model_sequence_offset:Xe,dataset_list_id:Xe},ihm_starting_comparative_models:{id:Xe,starting_model_id:de,starting_model_auth_asym_id:de,starting_model_seq_id_begin:Xe,starting_model_seq_id_end:Xe,template_auth_asym_id:de,template_seq_id_begin:Xe,template_seq_id_end:Xe,template_sequence_identity:kn,template_sequence_identity_denominator:Er(Xe),template_dataset_list_id:Xe,alignment_file_id:Xe},ihm_starting_model_seq_dif:{id:Xe,entity_id:de,asym_id:de,seq_id:Xe,comp_id:de,starting_model_id:de,db_asym_id:de,db_seq_id:Xe,db_comp_id:de,details:de},ihm_model_representation:{id:Xe,name:de,details:de},ihm_model_representation_details:{id:Xe,representation_id:Xe,entity_poly_segment_id:Xe,entity_id:de,entity_description:de,entity_asym_id:de,model_object_primitive:Er(de),starting_model_id:de,model_mode:Er(de),model_granularity:Er(de),model_object_count:Xe},ihm_struct_assembly_details:{id:Xe,assembly_id:Xe,parent_assembly_id:Xe,entity_description:de,entity_id:de,asym_id:de,entity_poly_segment_id:Xe},ihm_struct_assembly:{id:Xe,name:de,description:de},ihm_modeling_protocol:{id:Xe,num_steps:Xe,protocol_name:de},ihm_modeling_protocol_details:{id:Xe,protocol_id:Xe,step_id:Xe,struct_assembly_id:Xe,dataset_group_id:Xe,struct_assembly_description:de,step_name:de,step_method:de,num_models_begin:Xe,num_models_end:Xe,multi_scale_flag:Er(fi),multi_state_flag:Er(fi),ordered_flag:Er(fi),script_file_id:Xe,software_id:Xe},ihm_multi_state_modeling:{state_id:Xe,state_group_id:Xe,population_fraction:kn,population_fraction_sd:kn,state_type:de,state_name:de,experiment_type:Er(de),details:de},ihm_modeling_post_process:{id:Xe,protocol_id:Xe,analysis_id:Xe,step_id:Xe,type:Er(de),feature:Er(de),num_models_begin:Xe,num_models_end:Xe},ihm_ensemble_info:{ensemble_id:Xe,ensemble_name:de,post_process_id:Xe,model_group_id:Xe,ensemble_clustering_method:Er(de),ensemble_clustering_feature:Er(de),num_ensemble_models:Xe,num_ensemble_models_deposited:Xe,ensemble_precision_value:kn,ensemble_file_id:Xe},ihm_model_list:{model_id:Xe,model_name:de,assembly_id:Xe,protocol_id:Xe,representation_id:Xe},ihm_model_group:{id:Xe,name:de,details:de},ihm_model_group_link:{model_id:Xe,group_id:Xe},ihm_model_representative:{id:Xe,model_group_id:Xe,model_id:Xe,selection_criteria:Er(de)},ihm_dataset_list:{id:Xe,data_type:Er(de),database_hosted:Er(fi)},ihm_dataset_group:{id:Xe,name:de,application:Er(de),details:de},ihm_dataset_group_link:{dataset_list_id:Xe,group_id:Xe},ihm_related_datasets:{dataset_list_id_derived:Xe,dataset_list_id_primary:Xe},ihm_dataset_related_db_reference:{id:Xe,dataset_list_id:Xe,db_name:Er(de),accession_code:de,version:de,details:de},ihm_external_reference_info:{reference_id:Xe,reference_provider:de,reference_type:Er(de),reference:de,refers_to:Er(de),associated_url:de},ihm_external_files:{id:Xe,reference_id:Xe,file_path:de,content_type:Er(de),file_size_bytes:kn,details:de},ihm_dataset_external_reference:{id:Xe,dataset_list_id:Xe,file_id:Xe},ihm_localization_density_files:{id:Xe,file_id:Xe,ensemble_id:Xe,entity_id:de,entity_poly_segment_id:Xe,asym_id:de},ihm_predicted_contact_restraint:{id:Xe,group_id:Xe,entity_id_1:de,entity_id_2:de,asym_id_1:de,asym_id_2:de,comp_id_1:de,comp_id_2:de,seq_id_1:Xe,seq_id_2:Xe,rep_atom_1:Er(de),rep_atom_2:Er(de),distance_lower_limit:kn,distance_upper_limit:kn,probability:kn,restraint_type:Er(de),model_granularity:Er(de),dataset_list_id:Xe,software_id:Xe},ihm_cross_link_list:{id:Xe,group_id:Xe,entity_description_1:de,entity_description_2:de,entity_id_1:de,entity_id_2:de,comp_id_1:de,comp_id_2:de,seq_id_1:Xe,seq_id_2:Xe,linker_type:Er(de),dataset_list_id:Xe},ihm_cross_link_restraint:{id:Xe,group_id:Xe,entity_id_1:de,entity_id_2:de,asym_id_1:de,asym_id_2:de,comp_id_1:de,comp_id_2:de,seq_id_1:Xe,seq_id_2:Xe,atom_id_1:de,atom_id_2:de,restraint_type:Er(de),conditional_crosslink_flag:Er(de),model_granularity:Er(de),distance_threshold:kn,psi:kn,sigma_1:kn,sigma_2:kn},ihm_cross_link_result_parameters:{id:Xe,restraint_id:Xe,model_id:Xe,psi:kn,sigma_1:kn,sigma_2:kn},ihm_2dem_class_average_restraint:{id:Xe,dataset_list_id:Xe,number_raw_micrographs:Xe,pixel_size_width:kn,pixel_size_height:kn,image_resolution:kn,image_segment_flag:Er(fi),number_of_projections:Xe,struct_assembly_id:Xe,details:de},ihm_2dem_class_average_fitting:{id:Xe,restraint_id:Xe,model_id:Xe,cross_correlation_coefficient:kn,rot_matrix:Py(3,3),tr_vector:aG(3)},ihm_3dem_restraint:{id:Xe,dataset_list_id:Xe,model_id:Xe,struct_assembly_id:Xe,fitting_method:de,number_of_gaussians:Xe,cross_correlation_coefficient:kn},ihm_sas_restraint:{id:Xe,dataset_list_id:Xe,model_id:Xe,struct_assembly_id:Xe,profile_segment_flag:Er(fi),fitting_atom_type:de,fitting_method:de,fitting_state:Er(de),radius_of_gyration:kn,chi_value:kn,details:de},ihm_starting_model_coord:{ordinal_id:Xe,starting_model_id:de,group_PDB:Er(de),id:Xe,type_symbol:de,entity_id:de,atom_id:de,comp_id:de,seq_id:Xe,asym_id:de,Cartn_x:kn,Cartn_y:kn,Cartn_z:kn,B_iso_or_equiv:kn},ihm_sphere_obj_site:{id:Xe,entity_id:de,seq_id_begin:Xe,seq_id_end:Xe,asym_id:de,Cartn_x:kn,Cartn_y:kn,Cartn_z:kn,object_radius:kn,rmsf:kn,model_id:Xe},ihm_gaussian_obj_site:{id:Xe,entity_id:de,seq_id_begin:Xe,seq_id_end:Xe,asym_id:de,mean_Cartn_x:kn,mean_Cartn_y:kn,mean_Cartn_z:kn,weight:kn,covariance_matrix:Py(3,3),model_id:Xe},ihm_gaussian_obj_ensemble:{id:Xe,entity_id:de,seq_id_begin:Xe,seq_id_end:Xe,asym_id:de,mean_Cartn_x:kn,mean_Cartn_y:kn,mean_Cartn_z:kn,weight:kn,covariance_matrix:Py(3,3),ensemble_id:Xe},ihm_feature_list:{feature_id:Xe,feature_type:Er(de),entity_type:Er(de)},ihm_poly_residue_feature:{ordinal_id:Xe,feature_id:Xe,entity_id:de,asym_id:de,comp_id_begin:de,comp_id_end:de,seq_id_begin:Xe,seq_id_end:Xe},ihm_derived_distance_restraint:{id:Xe,group_id:Xe,feature_id_1:Xe,feature_id_2:Xe,group_conditionality:Er(de),random_exclusion_fraction:kn,distance_upper_limit:kn,restraint_type:Er(de),dataset_list_id:Xe},ma_model_list:{ordinal_id:Xe,model_id:Xe,model_group_id:Xe,model_name:de,model_group_name:de,model_type:Er(de),data_id:Xe},ma_target_entity:{entity_id:de,data_id:Xe,origin:Er(de)},ma_target_entity_instance:{asym_id:de,entity_id:de,details:de},ma_target_ref_db_details:{target_entity_id:de,db_name:Er(de),db_code:de,db_accession:de,seq_db_isoform:de,seq_db_align_begin:de,seq_db_align_end:de,ncbi_taxonomy_id:de,organism_scientific:de},ma_data:{id:Xe,content_type:Er(de),content_type_other_details:de,name:de},ma_software_group:{ordinal_id:Xe,group_id:Xe,software_id:Xe},ma_qa_metric:{id:Xe,name:de,type:Er(de),mode:Er(de),software_group_id:Xe},ma_qa_metric_global:{ordinal_id:Xe,model_id:Xe,metric_id:Xe,metric_value:kn},ma_qa_metric_local:{ordinal_id:Xe,model_id:Xe,label_asym_id:de,label_seq_id:Xe,label_comp_id:de,metric_id:Xe,metric_value:kn},ma_qa_metric_local_pairwise:{ordinal_id:Xe,model_id:Xe,label_asym_id_1:de,label_seq_id_1:Xe,label_comp_id_1:de,label_asym_id_2:de,label_seq_id_2:Xe,label_comp_id_2:de,metric_id:Xe,metric_value:kn}};var Fce={type_symbol:K.Schema.Aliased(Nn.atom_site.type_symbol),label_atom_id:Nn.atom_site.label_atom_id,auth_atom_id:Nn.atom_site.auth_atom_id,label_alt_id:Nn.atom_site.label_alt_id,label_comp_id:Nn.atom_site.label_comp_id,auth_comp_id:Nn.atom_site.auth_comp_id,pdbx_formal_charge:Nn.atom_site.pdbx_formal_charge},wce={group_PDB:Nn.atom_site.group_PDB,label_seq_id:Nn.atom_site.label_seq_id,auth_seq_id:Nn.atom_site.auth_seq_id,pdbx_PDB_ins_code:Nn.atom_site.pdbx_PDB_ins_code},Rce={label_asym_id:Nn.atom_site.label_asym_id,auth_asym_id:Nn.atom_site.auth_asym_id,label_entity_id:Nn.atom_site.label_entity_id},nz;(t=>{function e(){return{label_entity_id:"",label_asym_id:"",auth_seq_id:0,pdbx_PDB_ins_code:void 0}}t.EmptyResidueKey=e})(nz||={});var ed;(a=>{function e(A,s){return A.residueAtomSegments.index[A.chainAtomSegments.offsets[s]]}a.chainStartResidueIndex=e;function t(A,s){return A.residueAtomSegments.index[A.chainAtomSegments.offsets[s+1]-1]+1}a.chainEndResidueIndexExcl=t;function r(A,s){return t(A,s)-e(A,s)}a.chainResidueCount=r;function n(A,s){return A.residueAtomSegments.offsets[s]}a.residueFirstAtomIndex=n;function o(A,s){return A.chainAtomSegments.index[s]}a.atomChainIndex=o;function i(A,s){return A.chainAtomSegments.index[A.residueAtomSegments.offsets[s]]}a.residueChainIndex=i})(ed||={});var Hb={H:1,D:1,T:1,HE:2,LI:3,BE:4,B:5,C:6,N:7,O:8,F:9,NE:10,NA:11,MG:12,AL:13,SI:14,P:15,S:16,CL:17,AR:18,K:19,CA:20,SC:21,TI:22,V:23,CR:24,MN:25,FE:26,CO:27,NI:28,CU:29,ZN:30,GA:31,GE:32,AS:33,SE:34,BR:35,KR:36,RB:37,SR:38,Y:39,ZR:40,NB:41,MO:42,TC:43,RU:44,RH:45,PD:46,AG:47,CD:48,IN:49,SN:50,SB:51,TE:52,I:53,XE:54,CS:55,BA:56,LA:57,CE:58,PR:59,ND:60,PM:61,SM:62,EU:63,GD:64,TB:65,DY:66,HO:67,ER:68,TM:69,YB:70,LU:71,HF:72,TA:73,W:74,RE:75,OS:76,IR:77,PT:78,AU:79,HG:80,TL:81,PB:82,BI:83,PO:84,AT:85,RN:86,FR:87,RA:88,AC:89,TH:90,PA:91,U:92,NP:93,PU:94,AM:95,CM:96,BK:97,CF:98,ES:99,FM:100,MD:101,NO:102,LR:103,RF:104,DB:105,SG:106,BH:107,HS:108,MT:109},VKe={1:1.1,2:1.4,3:1.81,4:1.53,5:1.92,6:1.7,7:1.55,8:1.52,9:1.47,10:1.54,11:2.27,12:1.73,13:1.84,14:2.1,15:1.8,16:1.8,17:1.75,18:1.88,19:2.75,20:2.31,21:2.3,22:2.15,23:2.05,24:2.05,25:2.05,26:2.05,27:2,28:2,29:2,30:2.1,31:1.87,32:2.11,33:1.85,34:1.9,35:1.83,36:2.02,37:3.03,38:2.49,39:2.4,40:2.3,41:2.15,42:2.1,43:2.05,44:2.05,45:2,46:2.05,47:2.1,48:2.2,49:2.2,50:1.93,51:2.17,52:2.06,53:1.98,54:2.16,55:3.43,56:2.68,57:2.5,58:2.48,59:2.47,60:2.45,61:2.43,62:2.42,63:2.4,64:2.38,65:2.37,66:2.35,67:2.33,68:2.32,69:2.3,70:2.28,71:2.27,72:2.25,73:2.2,74:2.1,75:2.05,76:2,77:2,78:2.05,79:2.1,80:2.05,81:1.96,82:2.02,83:2.07,84:1.97,85:2.02,86:2.2,87:3.48,88:2.83,89:2,90:2.4,91:2,92:2.3,93:2,94:2,95:2,96:2,97:2,98:2,99:2,100:2,101:2,102:2,103:2,104:2,105:2,106:2,107:2,108:2,109:2},_Ke={1:1.008,2:4.0026,3:6.94,4:9.0122,5:10.81,6:10.81,7:14.007,8:15.999,9:18.998,10:20.18,11:22.99,12:24.305,13:26.982,14:28.085,15:30.974,16:32.06,17:35.45,18:39.948,19:39.098,20:40.078,21:44.956,22:47.867,23:50.942,24:51.996,25:54.938,26:55.845,27:58.933,28:58.693,29:63.546,30:65.38,31:69.723,32:72.63,33:74.922,34:78.971,35:79.904,36:83.798,37:85.468,38:87.62,39:88.906,40:91.224,41:92.906,42:95.95,43:96.906,44:101.07,45:102.91,46:106.42,47:107.87,48:112.41,49:114.82,50:118.71,51:121.76,52:127.6,53:127.6,54:131.29,55:132.91,56:137.33,57:138.91,58:140.12,59:140.91,60:144.24,61:144.912,62:150.36,63:151.96,64:157.25,65:158.93,66:162.5,67:164.93,68:167.26,69:168.93,70:173.05,71:174.97,72:178.49,73:180.95,74:183.84,75:186.21,76:190.23,77:192.22,78:195.08,79:196.97,80:200.59,81:204.38,82:207.2,83:208.98,84:1.97,85:2.02,86:2.2,87:3.48,88:2.83,89:2,90:232.04,91:231.04,92:238.03,93:237.048,94:244.064,95:243.061,96:247.07,97:247.07,98:251.079,99:252.083,100:257.095,101:258.098,102:259.101,103:262.11,104:267.122,105:270.131,106:271.134,107:270.133,108:270.134,109:278.156},YKe=1.7,OKe=10.81,JKe=0;function rm(e){let t=Hb[e];return t===void 0?YKe:VKe[t]}function Uce(e){let t=Hb[e];return t===void 0?OKe:_Ke[t]}function Gy(e){let t=Hb[e];return t===void 0?JKe:t}var oz={};ki(oz,{EPSILON:()=>mn,Mat3:()=>Ht,Mat4:()=>Y,Quat:()=>gr,Vec2:()=>Le,Vec3:()=>B,Vec4:()=>lr});function Le(){return Le.zero()}(L=>{function e(){let F=[.1,0];return F[0]=0,F}L.zero=e;function t(F){let v=e();return v[0]=F[0],v[1]=F[1],v}L.clone=t;function r(F){return o(F.x,F.y)}L.fromObj=r;function n(F){return{x:F[0],y:F[1]}}L.toObj=n;function o(F,v){let U=e();return U[0]=F,U[1]=v,U}L.create=o;function i(F){return Number.isNaN(F[0])||Number.isNaN(F[1])}L.hasNaN=i;function a(F){return Array.isArray(F)&&F.length===2}L.is=a;function A(F,v,U){return v[U+0]=F[0],v[U+1]=F[1],v}L.toArray=A;function s(F,v,U){return F[0]=v[U+0],F[1]=v[U+1],F}L.fromArray=s;function c(F,v){return F[0]=v[0],F[1]=v[1],F}L.copy=c;function l(F,v,U){return F[0]=v,F[1]=U,F}L.set=l;function u(F,v,U){return F[0]=v[0]+U[0],F[1]=v[1]+U[1],F}L.add=u;function g(F,v,U){return F[0]=v[0]-U[0],F[1]=v[1]-U[1],F}L.sub=g;function m(F,v,U){return F[0]=v[0]*U[0],F[1]=v[1]*U[1],F}L.mul=m;function p(F,v,U){return F[0]=v[0]/U[0],F[1]=v[1]/U[1],F}L.div=p;function d(F,v,U){return F[0]=v[0]*U,F[1]=v[1]*U,F}L.scale=d;function f(F,v){return F[0]=Math.round(v[0]),F[1]=Math.round(v[1]),F}L.round=f;function I(F,v){return F[0]=Math.ceil(v[0]),F[1]=Math.ceil(v[1]),F}L.ceil=I;function C(F,v){return F[0]=Math.floor(v[0]),F[1]=Math.floor(v[1]),F}L.floor=C;function y(F,v){let U=v[0]-F[0],G=v[1]-F[1];return Math.sqrt(U*U+G*G)}L.distance=y;function Q(F,v){let U=v[0]-F[0],G=v[1]-F[1];return U*U+G*G}L.squaredDistance=Q;function E(F){let v=F[0],U=F[1];return Math.sqrt(v*v+U*U)}L.magnitude=E;function b(F){let v=F[0],U=F[1];return v*v+U*U}L.squaredMagnitude=b;function x(F,v,U){return d(F,w(F,v),U)}L.setMagnitude=x;function S(F,v){return F[0]=1/v[0],F[1]=1/v[1],F}L.inverse=S;function w(F,v){let U=v[0],G=v[1],N=U*U+G*G;return N>0&&(N=1/Math.sqrt(N),F[0]=v[0]*N,F[1]=v[1]*N),F}L.normalize=w;function R(F,v){return F[0]===v[0]&&F[1]===v[1]}L.areEqual=R;function T(F,v){return`[${F[0].toPrecision(v)} ${F[1].toPrecision(v)}}]`}L.toString=T})(Le||={});function lr(){return lr.zero()}(L=>{function e(){let F=[.1,0,0,0];return F[0]=0,F}L.zero=e;function t(F){let v=e();return v[0]=F[0],v[1]=F[1],v[2]=F[2],v[3]=F[3],v}L.clone=t;function r(F,v,U,G){let N=e();return N[0]=F,N[1]=v,N[2]=U,N[3]=G,N}L.create=r;function n(F,v){return F[0]=v.center[0],F[1]=v.center[1],F[2]=v.center[2],F[3]=v.radius,F}L.fromSphere=n;function o(F){return n(e(),F)}L.ofSphere=o;function i(F){return Number.isNaN(F[0])||Number.isNaN(F[1])||Number.isNaN(F[2])||Number.isNaN(F[3])}L.hasNaN=i;function a(F){return Array.isArray(F)&&F.length===4}L.is=a;function A(F,v,U){return v[U+0]=F[0],v[U+1]=F[1],v[U+2]=F[2],v[U+3]=F[3],v}L.toArray=A;function s(F,v,U){return F[0]=v[U+0],F[1]=v[U+1],F[2]=v[U+2],F[3]=v[U+3],F}L.fromArray=s;function c(F,v,U){v[U+0]=F[0],v[U+1]=F[1],v[U+2]=F[2]}L.toVec3Array=c;function l(F,v,U){return F[0]=v[U+0],F[1]=v[U+1],F[2]=v[U+2],F[3]=0,F}L.fromVec3Array=l;function u(F,v){return F[0]=v[0],F[1]=v[1],F[2]=v[2],F[3]=v[3],F}L.copy=u;function g(F,v,U,G,N){return F[0]=v,F[1]=U,F[2]=G,F[3]=N,F}L.set=g;function m(F,v,U){return F[0]=v[0]+U[0],F[1]=v[1]+U[1],F[2]=v[2]+U[2],F[3]=v[3]+U[3],F}L.add=m;function p(F,v){let U=v[0]-F[0],G=v[1]-F[1],N=v[2]-F[2],k=v[3]-F[3];return Math.sqrt(U*U+G*G+N*N+k*k)}L.distance=p;function d(F,v,U){return F[0]=v[0]*U,F[1]=v[1]*U,F[2]=v[2]*U,F[4]=v[4]*U,F}L.scale=d;function f(F,v){return F[0]=Math.round(v[0]),F[1]=Math.round(v[1]),F[2]=Math.round(v[2]),F[3]=Math.round(v[3]),F}L.round=f;function I(F,v){return F[0]=Math.ceil(v[0]),F[1]=Math.ceil(v[1]),F[2]=Math.ceil(v[2]),F[3]=Math.ceil(v[3]),F}L.ceil=I;function C(F,v){return F[0]=Math.floor(v[0]),F[1]=Math.floor(v[1]),F[2]=Math.floor(v[2]),F[3]=Math.floor(v[3]),F}L.floor=C;function y(F,v){let U=v[0]-F[0],G=v[1]-F[1],N=v[2]-F[2],k=v[3]-F[3];return U*U+G*G+N*N+k*k}L.squaredDistance=y;function Q(F){let v=F[0],U=F[1],G=F[2],N=F[3];return Math.sqrt(v*v+U*U+G*G+N*N)}L.norm=Q;function E(F){let v=F[0],U=F[1],G=F[2],N=F[3];return v*v+U*U+G*G+N*N}L.squaredNorm=E;function b(F,v,U){let G=v[0],N=v[1],k=v[2],J=v[3];return F[0]=U[0]*G+U[4]*N+U[8]*k+U[12]*J,F[1]=U[1]*G+U[5]*N+U[9]*k+U[13]*J,F[2]=U[2]*G+U[6]*N+U[10]*k+U[14]*J,F[3]=U[3]*G+U[7]*N+U[11]*k+U[15]*J,F}L.transformMat4=b;function x(F,v){return F[0]*v[0]+F[1]*v[1]+F[2]*v[2]+F[3]*v[3]}L.dot=x;function S(F,v){return F[0]=1/v[0],F[1]=1/v[1],F[2]=1/v[2],F[3]=1/v[3],F}L.inverse=S;function w(F,v){return F[0]===v[0]&&F[1]===v[1]&&F[2]===v[2]&&F[3]===v[3]}L.exactEquals=w;function R(F,v){let U=F[0],G=F[1],N=F[2],k=F[3],J=v[0],H=v[1],z=v[2],_=v[3];return Math.abs(U-J)<=1e-6*Math.max(1,Math.abs(U),Math.abs(J))&&Math.abs(G-H)<=1e-6*Math.max(1,Math.abs(G),Math.abs(H))&&Math.abs(N-z)<=1e-6*Math.max(1,Math.abs(N),Math.abs(z))&&Math.abs(k-_)<=1e-6*Math.max(1,Math.abs(k),Math.abs(_))}L.equals=R;function T(F,v){return`[${F[0].toPrecision(v)} ${F[1].toPrecision(v)} ${F[2].toPrecision(v)} ${F[3].toPrecision(v)}]`}L.toString=T})(lr||={});var AG=Object.prototype.hasOwnProperty;function Lce(e,t){for(let r of Object.keys(t))AG.call(t,r)&&typeof e[r]>"u"&&(e[r]=t[r]);return e}function zKe(e,t){let r=!1;for(let n of Object.keys(t))if(AG.call(t,n)&&t[n]!==e[n]){r=!0;break}return r?Object.assign({},e,t):e}function Ny(e,t){if(!e)return!t;if(!t)return!1;let r=Object.keys(e);if(Object.keys(t).length!==r.length)return!1;for(let n of r)if(!AG.call(e,n)||e[n]!==t[n])return!1;return!0}function Tce(e,t){let r=e;for(let n=0;n<t.length;n++)if(t[n]&&(r=zKe(e,t[n]),r!==e)){for(let o=n+1;o<t.length;o++)r=Object.assign(r,t[o]);break}return r}function ii(e){if(e===null||typeof e!="object")return e;if(e instanceof Array){let t=[];for(let r=0,n=e.length;r<n;r++)t[r]=ii(e[r]);return t}if(typeof e=="object"&&!("prototype"in e)){let t={};for(let r in e)AG.call(e,r)&&(t[r]=ii(e[r]));return t}throw new Error(`Can't clone, type "${typeof e}" unsupported`)}function Vb(e,t){let r={};for(let n of Object.keys(e))r[n]=t(e[n]);return r}function Pce(e,t){let r={};for(let n of e)r[n]=t(n);return r}function Bi(e,t){if(e)for(let r of Object.keys(e))t(e[r],r)}function ll(e,t){let r={};for(let n of t)Object.hasOwn(e,n)&&(r[n]=e[n]);return r}function iz(e,t,r){let n={};for(let o of t){let i=r[o];i!==null&&(i===void 0&&(i=o),Object.hasOwn(e,i)&&(n[o]=e[i]))}return n}function az(e){let t;for(let n in e){let o=e[n].length;if(t!==void 0&&t!==o)throw new Error("FormatError: arrays must have the same length.");t=o}if(t===void 0)return[];let r=new Array(t);for(let n=0;n<t;n++){let o={};for(let i in e)o[i]=e[i][n];r[n]=o}return r}function tu(e,t){let r={...e};for(let n of t)delete r[n];return r}function KKe(e,t){let r={};for(let n=0;n<e.length;n++)r[e[n]]=t[n];return r}function HS(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}async function Gce(e){let t=Object.keys(e),r=Object.values(e),n=await Promise.all(r);return KKe(t,n)}function WC(e){return JSON.stringify(e,(t,r)=>HS(r)?jKe(r):r)}function sG(e){return JSON.stringify(e,void 0," ").replace(/,\n\t*/g,", ").replace(/\n\t*/g,"")}function jKe(e){let t={};for(let r of Object.keys(e).sort()){let n=e[r];n!==void 0&&(t[r]=n)}return t}function Es(e){let t=-1/0;for(let r=0,n=e.length;r<n;++r)e[r]>t&&(t=e[r]);return t}function My(e){let t=1/0;for(let r=0,n=e.length;r<n;++r)e[r]<t&&(t=e[r]);return t}function ul(e){let t=1/0,r=-1/0;for(let n=0,o=e.length;n<o;++n)e[n]<t&&(t=e[n]),e[n]>r&&(r=e[n]);return[t,r]}function Az(e,t=1,r=0){let n=e.length,o=0;for(let i=r;i<n;i+=t)o+=e[i];return o}function ky(e,t=1,r=0){return Az(e,t,r)/(e.length/t)}function Hy(e){let t=e.length,r=0;for(let n=0;n<t;++n){let o=e[n];r+=o*o}return Math.sqrt(r/t)}function QA(e,t){for(let r=0,n=t?Math.min(t,e.length):e.length;r<n;++r)e[r]=r;return e}function Tf(e,t){let r=0,n=!1;for(let o=e.length;r<o;r++)if(e[r]===t){n=!0;break}return n?(Vy(e,r),!0):!1}function Vy(e,t){for(let r=t,n=e.length-1;r<n;r++)e[r]=e[r+1];e.pop()}function Po(e,t){return e.indexOf(t)>=0?!1:(e.push(t),!0)}function vu(e,t){let r=e.indexOf(t);if(r<0)return!1;for(let n=r,o=e.length-1;n<o;n++)e[n]=e[n+1];return e.pop(),!0}function VS(e,t){let r=0;for(let n=0,o=e.length;n<o;++n)t.includes(e[n])&&(r+=1);return r}function _b(e,t){if(!e||e.length===0)return!t||t.length===0;if(!t)return!1;let r=e.length;if(r!==t.length)return!1;for(let n=0;n<r;n++)if(e[n]!==t[n])return!1;return!0}function Nce(e){for(let t=0,r=e.length;t<r;t++)if(e[t]!==t)return!1;return!0}function $w(e,t,r){for(let n=0,o=e.length;n<o;++n)if(e[n][0]===t){e[n][1]=r;return}e.push([t,r])}function Vc(e,t){t===void 0&&(t=e,e=0);let r=Math.max(t-e,0),n=Array(r);for(let o=0;o<r;o++)n[o]=e+o;return n}function _y(e,t){let r=e.length,n=t.length;e.length+=n;for(let o=0;o<n;o++)e[r+o]=t[o];return e}function e2(e,t){return WKe(e,t)?e:e.sort(t)}function WKe(e,t){for(let r=1,n=e.length;r<n;r++)if(t(e[r-1],e[r])>0)return!1;return!0}function jB(e,t){let r=e.length,n=0;for(let o=0;o<r;o++)t(e[o])&&(e[n++]=e[o]);return e.length=n,e}function Mce(e){let t=new Set,r=[];for(let n of e){let o=WC(n);t.has(o)||(t.add(o),r.push(n))}return r}function Yb(e,t,r,n,o){for(let i=0;i<o;i++)e[r+i]=t[n+i];return e}function kce(e,t){let r=[],n=[],o=[];e.x.length&&(r.push(...ul(e.x)),n.push(...ul(e.y)),o.push(...ul(e.z))),t&&(t.spheres.x.length&&(r.push(...ul(t.spheres.x)),n.push(...ul(t.spheres.y)),o.push(...ul(t.spheres.z))),t.gaussians.x.length&&(r.push(...ul(t.gaussians.x)),n.push(...ul(t.gaussians.y)),o.push(...ul(t.gaussians.z))));let[i,a]=ul(r),[A,s]=ul(n),[c,l]=ul(o),u=i+(a-i)/2,g=A+(s-A)/2,m=c+(l-c)/2;return B.create(u,g,m)}function Hce(e){let t=new Set,r=new Set;return e.properties.structAsymMap.forEach(({auth_id:n},o)=>{t.add(n),r.add(o)}),{auth:t.size,label:r.size}}function XKe(){let e=(function(){let d=typeof window<"u"&&window,f=typeof self<"u"&&typeof WorkerGlobalScope<"u"&&self instanceof WorkerGlobalScope&&self;return d||typeof global<"u"&&global||f})(),t={},r=typeof document<"u"?document:void 0,n=1,o;function i(d,...f){typeof d!="function"&&(d=new Function(""+d));let I={callback:d,args:f};return t[n]=I,o(n),n++}function a(d){delete t[d]}function A(d){let f=d.callback,I=d.args;switch(I.length){case 0:f();break;case 1:f(I[0]);break;case 2:f(I[0],I[1]);break;case 3:f(I[0],I[1],I[2]);break;default:f.apply(void 0,I);break}}function s(d){let f=t[d];a(d),A(f)}function c(){o=function(d){process.nextTick(function(){s(d)})}}function l(){if(e&&e.postMessage&&!e.importScripts){let d=!0,f=e.onmessage;return e.onmessage=function(){d=!1},e.postMessage("","*"),e.onmessage=f,d}}function u(){let d="setImmediate$"+Math.random()+"$",f=function(I){I.source===e&&typeof I.data=="string"&&I.data.indexOf(d)===0&&s(+I.data.slice(d.length))};window.addEventListener?window.addEventListener("message",f,!1):window.attachEvent("onmessage",f),o=function(I){window.postMessage(d+I,"*")}}function g(){let d=new MessageChannel;d.port1.onmessage=function(f){let I=f.data;s(I)},o=function(f){d.port2.postMessage(f)}}function m(){let d=r.documentElement;o=function(f){let I=r.createElement("script");I.onreadystatechange=function(){s(f),I.onreadystatechange=null,d.removeChild(I),I=null},d.appendChild(I)}}function p(){o=function(d){setTimeout(s,0,d)}}return typeof process<"u"&&{}.toString.call(process)==="[object process]"?c():l()?u():typeof MessageChannel<"u"?g():r&&"onreadystatechange"in r.createElement("script")?m():p(),{setImmediate:i,clearImmediate:a}}var sz=(function(){return typeof setImmediate<"u"?typeof window<"u"?{setImmediate:(e,...t)=>window.setImmediate(e,...t),clearImmediate:e=>window.clearImmediate(e)}:{setImmediate,clearImmediate}:XKe()})();function ZKe(e){sz.setImmediate(e)}var Pf={setImmediate:sz.setImmediate,clearImmediate:sz.clearImmediate,immediatePromise(){return new Promise(ZKe)},delay(e,t=void 0){return new Promise(r=>setTimeout(r,e,t))}};var td=(function(){try{return!0}catch{return!1}})(),ir=(function(){try{return!1}catch{return!1}})(),at=!1;function Vce(e){typeof e<"u"&&(td=e)}function _ce(e){typeof e<"u"&&(ir=e)}function Yce(e){typeof e<"u"&&(at=e)}var t2=[];function Oce(e){t2.includes(e)||t2.push(e)}function Jce(e){let t=t2.indexOf(e);t!==-1&&t2.splice(t,1)}function zce(){for(let e of t2)e()}var qKe=typeof performance<"u"&&!!performance.mark&&performance.measure,cz=qKe&&at,r2;(i=>{function e(a){return`startTask${a.id}`}function t(a){return`endTask${a.id}`}function r(a){cz&&performance.mark(e(a))}i.markStart=r;function n(a){cz&&performance.mark(t(a))}i.markEnd=n;function o(a){cz&&performance.measure(`\u2733\uFE0F ${a.name}`,e(a),t(a))}i.measure=o})(r2||={});function Kce(e,t,r=250){let n=Zce(e,t,r),o=new cG(n,n.root);return lz(e,o)}function jce(e,t,r=250){let n=Zce(e,t,r);return new cG(n,n.root)}function lG(e,t){return lz(t,e)}function Wce(e,t,r){return e.runChild(t,r)}function Xce(e){return{taskId:e.id,taskName:e.name,message:"",startedTime:0,canAbort:!0,isIndeterminate:!0,current:0,max:0}}function Zce(e,t,r){let n={abortRequested:!1,treeAborted:!1,reason:""};return{updateRateMs:r,lastNotified:co(),observer:t,abortToken:n,taskId:e.id,root:{progress:Xce(e),children:[]},tryAbort:$Ke(n)}}function $Ke(e){return t=>{e.abortRequested=!0,e.reason=t||e.reason}}function qce(e){return{progress:{...e.progress},children:e.children.map(qce)}}function $ce(e){return e.progress.canAbort&&e.children.every($ce)}function eje(e){return{root:qce(e.root),canAbort:$ce(e.root),requestAbort:e.tryAbort}}async function lz(e,t){r2.markStart(e),t.node.progress.startedTime=co();try{let r=await e.f(t);return r2.markEnd(e),r2.measure(e),t.info.abortToken.abortRequested&&ele(t.info),r}catch(r){throw ve.isAbort(r)&&(t.isAborted=!0,t.node.children.length>0&&await new Promise(n=>{t.onChildrenFinished=n}),e.onAbort&&e.onAbort()),r}}function ele(e){throw e.abortToken.treeAborted||(e.abortToken.treeAborted=!0,tle(e.root),rle(e,co())),ve.Aborted(e.abortToken.reason)}function tle(e){let t=e.progress;t.isIndeterminate=!0,t.canAbort=!1,t.message="Aborting...";for(let r of e.children)tle(r)}function rle(e,t){e.lastNotified=t;let r=eje(e);e.observer(r)}var cG=class e{constructor(t,r){this.isSynchronous=!1;this.isExecuting=!0;this.lastUpdatedTime=0;this.onChildrenFinished=void 0;this.node=r,this.info=t}checkAborted(){this.info.abortToken.abortRequested&&(this.isAborted=!0,ele(this.info))}get shouldUpdate(){return this.checkAborted(),co()-this.lastUpdatedTime>this.info.updateRateMs}updateProgress(t){if(this.checkAborted(),!t)return;let r=this.node.progress;typeof t=="string"?(r.message=t,r.isIndeterminate=!0):(typeof t.canAbort<"u"&&(r.canAbort=t.canAbort),typeof t.message<"u"&&(r.message=t.message),typeof t.current<"u"&&(r.current=t.current),typeof t.max<"u"&&(r.max=t.max),r.isIndeterminate=typeof r.current>"u"||typeof r.max>"u",typeof t.isIndeterminate<"u"&&(r.isIndeterminate=t.isIndeterminate))}update(t,r){if(this.lastUpdatedTime=co(),this.updateProgress(t),!r)return rle(this.info,this.lastUpdatedTime),this.checkAborted(),Pf.immediatePromise()}async runChild(t,r){this.updateProgress(r);let n={progress:Xce(t),children:[]},o=this.node.children;o.push(n);let i=new e(this.info,n);try{return await lz(t,i)}catch(a){if(ve.isAbort(a)&&this.isAborted)return;throw a}finally{let a=o.indexOf(n);if(a>=0){for(let A=a,s=o.length-1;A<s;A++)o[A]=o[A+1];o.pop()}o.length===0&&this.onChildrenFinished&&this.onChildrenFinished()}}};var uz=class{constructor(){this.shouldUpdate=!1;this.isSynchronous=!0}update(t,r){}},_S=new uz;var ve;(l=>{class e{constructor(g,m,p){this.name=g;this.f=m;this.onAbort=p;this.id=c()}run(g,m=250){return g?Kce(this,g,m):this.f(_S)}runAsChild(g,m){return g.isSynchronous?this.f(_S):Wce(g,this,m)}runInContext(g){return g.isSynchronous?this.f(_S):lG(g,this)}}function t(u){let g=u;return!!u&&typeof g.id=="number"&&typeof g.name=="string"&&!!g.run}l.is=t;function r(u){return!!u&&!!u.isAborted}l.isAbort=r;function n(u){return{isAborted:!0,reason:u,toString(){return`Aborted${u?": "+u:""}`}}}l.Aborted=n;function o(u,g,m){return new e(u,g,m)}l.create=o;function i(u,g){return o(u,async m=>g)}l.constant=i;function a(){return o("",async u=>{})}l.empty=a;function A(u,g){return o(u,async m=>{throw new Error(g)})}l.fail=A;function s(u,g){return t(u)?g?u.runInContext(g):u.run():u}l.resolveInContext=s;let c=ua(0,1073741823)})(ve||={});var nle;(t=>t.Synchronous=_S)(nle||={});var ole;(r=>{function e(n,o=""){let i=n.progress;if(!n.children.length)return i.isIndeterminate?`${o}${i.taskName}: ${i.message}`:`${o}${i.taskName}: [${i.current}/${i.max}] ${i.message}`;let a=o+" |_ ",A=n.children.map(s=>e(s,a));return i.isIndeterminate?`${o}${i.taskName}: ${i.message}
|
|
${A.join(`
|
|
`)}`:`${o}${i.taskName}: [${i.current}/${i.max}] ${i.message}
|
|
${A.join(`
|
|
`)}`}function t(n){return e(n.root)}r.format=t})(ole||={});async function bs(e,t,r,n,o){let i=Math.max(t,0),a=0,A=0;if(e.isSynchronous)return n(Number.MAX_SAFE_INTEGER,r),r;let s=co(),c=0,l=0;for(;(c=n(i,r))>0;){a+=c;let u=co()-s;l+=u,A+=u,e.shouldUpdate&&(await o(e,r,a),i=Math.round(l*a/A)+1,s=co(),l=0)}return e.shouldUpdate&&await o(e,r,a),r}var qe;(u=>{function e(g){return g.creator&&g.chunkSize}u.is=e;function t(g){let m=g.growBy*g.elementSize;g.currentSize=m,g.currentIndex=0,g.currentChunk=new g.ctor(m),g.allocatedSize+=m,g.chunks[g.chunks.length]=g.currentChunk}function r(g,m,p,d,f){g.currentIndex>=g.currentSize&&t(g);let I=g.currentChunk,C=g.currentIndex;return I[C]=m,I[C+1]=p,I[C+2]=d,I[C+3]=f,g.currentIndex+=4,g.elementCount++}u.add4=r;function n(g,m,p,d){g.currentIndex>=g.currentSize&&t(g);let f=g.currentChunk,I=g.currentIndex;return f[I]=m,f[I+1]=p,f[I+2]=d,g.currentIndex+=3,g.elementCount++}u.add3=n;function o(g,m,p){g.currentIndex>=g.currentSize&&t(g);let d=g.currentChunk,f=g.currentIndex;return d[f]=m,d[f+1]=p,g.currentIndex+=2,g.elementCount++}u.add2=o;function i(g,m){return g.currentIndex>=g.currentSize&&t(g),g.currentChunk[g.currentIndex]=m,g.currentIndex+=1,g.elementCount++}u.add=i;function a(g,m,p){for(let d=0;d<m;d++)g.currentIndex>=g.currentSize&&t(g),g.currentChunk[g.currentIndex++]=p,g.elementCount++;return g.elementCount}u.addRepeat=a;function A(g,m){let{elementSize:p}=g;for(let d=0,f=m.length;d<f;d+=p){g.currentIndex>=g.currentSize&&t(g);let{currentChunk:I}=g;for(let C=0;C<p;C++)I[g.currentIndex++]=m[d+C];g.elementCount++}return g.elementCount}u.addMany=A;function s(g,m=!1){return c(g,m)}u.compact=s;function c(g,m){let{ctor:p,chunks:d,currentIndex:f}=g;if(!d.length)return new p(0);if(d.length===1&&(m||f===g.allocatedSize))return d[0];let I=0;for(let E=0,b=d.length-1;E<b;E++)I+=d[E].length;I+=g.currentIndex;let C=new p(I),y=0;if(C.buffer)for(let E=0,b=d.length-1;E<b;E++)C.set(d[E],y),y+=d[E].length;else for(let E=0,b=d.length-1;E<b;E++){let x=d[E];for(let S=0,w=x.length;S<w;S++)C[y+S]=x[S];y+=x.length}let Q=d[d.length-1];if(C.buffer&&f>=g.currentSize)C.set(Q,y);else for(let E=0,b=Q.length;E<b;E++)C[y+E]=Q[E];return C}u._compact=c;function l(g,m,p,d){let f={ctor:g,elementSize:m,growBy:Math.max(1,Math.ceil(p)),allocatedSize:0,elementCount:0,currentSize:0,currentChunk:void 0,currentIndex:0,chunks:[]};if(typeof d>"u")return f;if(typeof d=="number")return f.currentChunk=new g(d*m),f.allocatedSize=d*m,f.currentSize=f.currentChunk.length,f.chunks[0]=f.currentChunk,f;let I=d;if(I.length%m!==0)throw new Error("initialChunk length must be a multiple of the element size.");return f.currentChunk=I,f.allocatedSize=I.length,f.currentSize=I.length,f.chunks[0]=I,f}u.create=l})(qe||={});function tje(e,t,r){return e[t].key<e[r].key?-1:1}function rje(e,t,r,n,o){let i=new Map,a=[],A=t(e[0]),s=!0;for(let m=n;m<o;m++){let p=t(e[m]);if(i.has(p))i.get(p).count++,A!==p&&(s=!1);else{let d={key:p,count:1,offset:m};i.set(p,d),a[a.length]=d}A=p}let c=new Int32Array(a.length+1);c[a.length]=o;let l=!0;if(r){for(let m=1,p=a.length;m<p;m++)if(a[m-1].key>a[m].key){l=!1;break}}if(s&&l){for(let m=0;m<a.length;m++)c[m]=a[m].offset;return c}r&&!l&&kS(a,0,a.length,tje,Lf);let u=0;for(let m=0;m<a.length;m++){let p=a[m];p.offset=u,u+=p.count}let g=new Int32Array(o-n);for(let m=n;m<o;m++){let p=t(e[m]),d=i.get(p);g[d.offset++]=e[m]}for(let m=0,p=g.length;m<p;m++)e[m+n]=g[m];c[0]=n;for(let m=1;m<a.length;m++)c[m]=a[m-1].offset+n;return c}function uG(e,t,r){let n=r&&r.start||0,o=r&&r.end||e.length;if(o-n<=0)throw new Error("Can only bucket non-empty collections.");return rje(e,t,!!(r&&r.sort),n,o)}var gz=class{constructor(t,r){this.getHash=t;this.areEqual=r;this.id=0;this.byHash=new Map;this.groups=[]}createGroup(t,r){let n=this.id++,o=[t];return this.groups[n]=o,{id:n,keys:o,value:r}}add(t,r){let n=this.getHash(r);if(this.byHash.has(n)){let o=this.byHash.get(n);for(let a=0,A=o.length;a<A;a++){let s=o[a];if(this.areEqual(r,s.value))return s.keys[s.keys.length]=t,s.value}let i=this.createGroup(t,r);return o[o.length]=i,i.value}else{let o=this.createGroup(t,r);return this.byHash.set(n,[o]),o.value}}};function mz(e,t){return new gz(e,t)}function gG(e){let t=e^e>>4;return t=(t^3735928559)+(t<<5),t=t^t>>11,t}function lc(e,t){let r=23;return r=31*r+e|0,r=31*r+t|0,r=r^r>>4,r=(r^3735928559)+(r<<5),r=r^r>>11,r}function ile(e,t,r){let n=23;return n=31*n+e|0,n=31*n+t|0,n=31*n+r|0,n=n^n>>4,n=(n^3735928559)+(n<<5),n=n^n>>11,n}function ale(e,t,r,n){let o=23;return o=31*o+e|0,o=31*o+t|0,o=31*o+r|0,o=31*o+n|0,o=o^o>>4,o=(o^3735928559)+(o<<5),o=o^o>>11,o}function Ob(e){let t=0;for(let r=0,n=e.length;r<n;r++)t=(t<<5)-t+e.charCodeAt(r)|0;return t}function ko(e,t){return(e+t)*(e+t+1)/2+t}function Fu(e,t){return e<t?ko(e,t):ko(t,e)}function YS(e,t){let r=Math.floor((Math.sqrt(8*t+1)-1)/2),n=(r*r+r)/2,o=t-n;return e[0]=r-o,e[1]=o,e}function na(e){let t=2166136261;for(let r=0,n=e.length;r<n;++r)t^=e[r],t+=(t<<1)+(t<<4)+(t<<7)+(t<<8)+(t<<24);return t>>>0}var dz=class{constructor(){this.hashTarget=new Uint32Array(8);this.numberBytes=new Uint8Array(8);this.numberView=new DataView(this.numberBytes.buffer)}hash(t){return this.hashTarget.set(nje),this.hashValue(t,0),Aje(this.hashTarget)}hashValue(t,r){if(r>50)return;let n=typeof t;switch(this.addByte(n.charCodeAt(0)),n){case"string":this.addString(t);break;case"number":this.addNumber(t);break;case"boolean":this.addByte(t?1:0);break;case"object":t===null?this.addByte(0):Array.isArray(t)?this.addArray(t,r):this.addObject(t,r);break;case"undefined":this.addByte(255);break}}addByte(t){this.hashTarget[0]^=t&255,oje(this.hashTarget)}addString(t){for(let r=0;r<t.length;r++){let n=t.charCodeAt(r);n<128?this.addByte(n):n<2048?(this.addByte(192|n>>6),this.addByte(128|n&63)):(this.addByte(224|n>>12),this.addByte(128|n>>6&63),this.addByte(128|n&63))}}addNumber(t){if(Number.isNaN(t))this.addByte(127),this.addByte(192),this.addByte(0),this.addByte(0),this.addByte(0),this.addByte(0),this.addByte(0),this.addByte(0);else if(!Number.isFinite(t))t>0?(this.addByte(127),this.addByte(128),this.addByte(0),this.addByte(0)):(this.addByte(255),this.addByte(128),this.addByte(0),this.addByte(0)),this.addByte(0),this.addByte(0),this.addByte(0),this.addByte(0);else{this.numberView.setFloat64(0,t,!1);for(let r=0;r<8;r++)this.addByte(this.numberBytes[r])}}addArray(t,r){this.addNumber(t.length);for(let n=0;n<t.length;n++)this.addNumber(n),this.hashValue(t[n],r+1)}addObject(t,r){let n=Object.keys(t).sort();this.addNumber(n.length);for(let o of n)this.addString(o),this.hashValue(t[o],r+1)}},lJt=new dz,nje=new Uint32Array([1818371886,129696066,1656234357,1653982605,383153456,3715178979,3004645376,256]),XC=new Uint32Array(8),ZC=new Uint32Array(8);function oje(e){XC[0]=0,XC[1]=0,XC[2]=e[0]<<24,XC[3]=e[0]>>>8|e[1]<<24,XC[4]=e[1]>>>8|e[2]<<24,XC[5]=e[2]>>>8|e[3]<<24,XC[6]=e[3]>>>8|e[4]<<24,XC[7]=e[4]>>>8|e[5]<<24,ZC[0]=e[0]<<8,ZC[1]=e[0]>>>24|e[1]<<8,ZC[2]=e[1]>>>24|e[2]<<8,ZC[3]=e[2]>>>24|e[3]<<8,ZC[4]=e[3]>>>24|e[4]<<8,ZC[5]=e[4]>>>24|e[5]<<8,ZC[6]=e[5]>>>24|e[6]<<8,ZC[7]=e[6]>>>24|e[7]<<8;let t=0;for(let r=0;r<8;r++){let n=e[r]*59+t;e[r]=n>>>0,t=Math.floor(n/4294967296)}t=0;for(let r=0;r<8;r++){let n=e[r]+XC[r]+ZC[r]+t;e[r]=n>>>0,t=n>=4294967296?1:0}}var ije=["00000000","0000000","000000","00000","0000","000","00","0"];function aje(e){let t=e.toString(16);return t.length>=8?t:ije[t.length]+t}function Aje(e){let t="";for(let r=7;r>=0;r--)t+=aje(e[r]);return t}function pz(e,t=42){let r=JSON.stringify(e);return sle(r,t)}function Ale(e,t){let r={length:e.length,charCodeAt(n){return e[n]}};return sle(r,t)}function sle(e,t){let r=t>>>0,n=t>>>0,o=t>>>0,i=t>>>0,a=e.length%16,A=e.length-a;for(let g=0;g<A;g+=16){let m=e.charCodeAt(g)&255|(e.charCodeAt(g+1)&255)<<8|(e.charCodeAt(g+2)&255)<<16|(e.charCodeAt(g+3)&255)<<24,p=e.charCodeAt(g+4)&255|(e.charCodeAt(g+5)&255)<<8|(e.charCodeAt(g+6)&255)<<16|(e.charCodeAt(g+7)&255)<<24,d=e.charCodeAt(g+8)&255|(e.charCodeAt(g+9)&255)<<8|(e.charCodeAt(g+10)&255)<<16|(e.charCodeAt(g+11)&255)<<24,f=e.charCodeAt(g+12)&255|(e.charCodeAt(g+13)&255)<<8|(e.charCodeAt(g+14)&255)<<16|(e.charCodeAt(g+15)&255)<<24;m=Math.imul(m,597399067),m=m<<15|m>>>17,m=Math.imul(m,2869860233),r^=m,r=r<<19|r>>>13,r+=n,r=Math.imul(r,5)+1444728091,p=Math.imul(p,2869860233),p=p<<16|p>>>16,p=Math.imul(p,951274213),n^=p,n=n<<17|n>>>15,n+=o,n=Math.imul(n,5)+197830471,d=Math.imul(d,951274213),d=d<<17|d>>>15,d=Math.imul(d,2716044179),o^=d,o=o<<15|o>>>17,o+=i,o=Math.imul(o,5)+2530024501,f=Math.imul(f,2716044179),f=f<<13|f>>>19,f=Math.imul(f,597399067),i^=f,i=i<<13|i>>>19,i+=r,i=Math.imul(i,5)+850148119}let s=0,c=0,l=0,u=0;switch(a){case 15:u^=e.charCodeAt(A+14)<<16;case 14:u^=e.charCodeAt(A+13)<<8;case 13:u^=e.charCodeAt(A+12),u=Math.imul(u,2716044179),u=u<<13|u>>>19,u=Math.imul(u,597399067),i^=u;case 12:l^=e.charCodeAt(A+11)<<24;case 11:l^=e.charCodeAt(A+10)<<16;case 10:l^=e.charCodeAt(A+9)<<8;case 9:l^=e.charCodeAt(A+8),l=Math.imul(l,951274213),l=l<<17|l>>>15,l=Math.imul(l,2716044179),o^=l;case 8:c^=e.charCodeAt(A+7)<<24;case 7:c^=e.charCodeAt(A+6)<<16;case 6:c^=e.charCodeAt(A+5)<<8;case 5:c^=e.charCodeAt(A+4),c=Math.imul(c,2869860233),c=c<<16|c>>>16,c=Math.imul(c,951274213),n^=c;case 4:s^=e.charCodeAt(A+3)<<24;case 3:s^=e.charCodeAt(A+2)<<16;case 2:s^=e.charCodeAt(A+1)<<8;case 1:s^=e.charCodeAt(A),s=Math.imul(s,597399067),s=s<<15|s>>>17,s=Math.imul(s,2869860233),r^=s}return r^=e.length,n^=e.length,o^=e.length,i^=e.length,r+=n,r+=o,r+=i,n+=r,o+=r,i+=r,r^=r>>>16,r=Math.imul(r,2246822507),r^=r>>>13,r=Math.imul(r,3266489909),r^=r>>>16,n^=n>>>16,n=Math.imul(n,2246822507),n^=n>>>13,n=Math.imul(n,3266489909),n^=n>>>16,o^=o>>>16,o=Math.imul(o,2246822507),o^=o>>>13,o=Math.imul(o,3266489909),o^=o>>>16,i^=i>>>16,i=Math.imul(i,2246822507),i^=i>>>13,i=Math.imul(i,3266489909),i^=i>>>16,r+=n,r+=o,r+=i,n+=r,o+=r,i+=r,(r>>>0).toString(16).padStart(8,"0")+(n>>>0).toString(16).padStart(8,"0")+(o>>>0).toString(16).padStart(8,"0")+(i>>>0).toString(16).padStart(8,"0")}var Yy=class{constructor(t=26699){this.state=t>>>0}int(){let t=this.state;this.state=Math.imul(this.state,1664525)+1013904223,this.state=this.state>>>0;let r=(t>>>18^t)>>>5,n=t>>>27;return(r>>>n|r<<32-n)>>>0}float(){return this.int()/4294967296}};function fz(e,t,r){let n=0;for(let o=0;o<21;++o)n|=(e>>o&1)<<3*o+2,n|=(t>>o&1)<<3*o+1,n|=(r>>o&1)<<3*o;return n}function OS(e,t){for(let r=0,n=e.length;r<n;r++)if(t(e[r]))return e[r]}function JS(e){if(Array.from)return Array.from(e);let t=[];for(;;){let{done:r,value:n}=e.next();if(r)break;t[t.length]=n}return t}function n2(e,t,r){let n=t-e+1,o=r?new r(n):new Int32Array(n);for(let i=0;i<n;i++)o[i]=i+e;return o}function cle(e,t){let r=new(sje(e))(t.length);for(let n=0,o=t.length;n<o;n++)r[n]=e[t[n]];return r}function sje(e){let t=e.constructor;if(!t)throw new Error("data does not define a constructor and it should");return t}var EA;(d=>{d.Zero=0;let{_int32:t,_float64:r,_int32_1:n,_float64_1:o}=(function(){let f=new ArrayBuffer(8),I=new ArrayBuffer(8);return{_int32:new Int32Array(f),_float64:new Float64Array(f),_int32_1:new Int32Array(I),_float64_1:new Float64Array(I)}})();function i(f){return typeof f=="number"}d.is=i;function a(f,I){return t[0]=f,t[1]=I,r[0]}d.create=a;function A(f){return r[0]=f,t[1]-t[0]}d.diff=A;function s(f){return r[0]=f,t[0]}d.fst=s;function c(f){return r[0]=f,t[1]}d.snd=c;function l(f,I){return r[0]=f,o[0]=I,t[0]===n[0]&&t[1]===n[1]}d.areEqual=l;function u(f,I){r[0]=f,o[0]=I;let C=t[0]-n[0];return C!==0?C:t[1]-n[1]}d.compare=u;function g(f,I,C){r[0]=f[I],o[0]=f[C];let y=t[0]-n[0];return y!==0?y:t[1]-n[1]}d.compareInArray=g;function m(f){return r[0]=f,lc(t[0],t[1])}d.hashCode=m;function p(f){return r[0]=f,`(${t[0]}, ${t[1]})`}d.toString=p})(EA||={});var Bz=EA.Zero;function Iz(e,t){return t<e?EA.create(e,e):EA.create(e,t+1)}function dG(e,t){return t<=e?EA.create(e,e):EA.create(e,t)}function lle(e){return e<0?EA.create(0,0):EA.create(0,e)}var ule=EA.is,Gf=EA.fst,WB=EA.snd,o2=EA.fst;function i2(e){return EA.snd(e)-1}var Oy=EA.diff,gle=EA.hashCode,mle=EA.toString;function dle(e,t){return EA.fst(e)<=t&&t<EA.snd(e)}function ple(e,t){let r=Gf(e);return t>=r&&t<WB(e)?t-r:-1}function fle(e,t){return EA.fst(e)+t}var Ble=EA.areEqual;function Cz(e,t){let r=Oy(e),n=Oy(t);return r===0&&n===0?!0:r>0&&n>0&&i2(e)>=o2(t)&&o2(e)<=i2(t)}function Ile(e,t){return Oy(e)?Oy(t)?Gf(e)<=Gf(t)&&WB(e)>=WB(t):!0:Oy(t)===0}function mG(e,t){let r=Gf(e);if(t<=r)return 0;let n=WB(e);return t>=n?n-r:t-r}function Cle(e,t,r){let n=Gf(r),o=Gf(e);if(t<=n+o)return n;let i=WB(r);return t>=i+o?i:t-o}function hz(e,t,r){return dG(mG(e,t),mG(e,r+1))}function hle(e,t){return Cz(e,t)?dG(Math.max(Gf(e),Gf(t)),Math.min(WB(e),WB(t))):Bz}function yle(e,t){return Oy(hz(e,o2(t),i2(t)))}function Qle(e,t){return EA.create(Gf(e)+t,WB(e)+t)}var Ue;(w=>(w.Empty=Bz,w.ofSingleton=R=>Iz(R,R),w.ofRange=Iz,w.ofBounds=dG,w.ofLength=lle,w.is=ule,w.has=dle,w.indexOf=ple,w.getAt=fle,w.start=Gf,w.end=WB,w.min=o2,w.max=i2,w.size=Oy,w.hashCode=gle,w.toString=mle,w.areEqual=Ble,w.areIntersecting=Cz,w.isSubInterval=Ile,w.findPredecessorIndex=mG,w.findPredecessorIndexInInterval=Cle,w.findRange=hz,w.intersectionSize=yle,w.intersect=hle,w.offset=Qle))(Ue||={});var zS=[];function Ele(e){return[e]}function ble(e){return e}function xle(e){return js(e),e}function yz(e,t){if(t<e)return[];let r=new Int32Array(t-e+1);for(let n=e;n<=t;n++)r[n-e]=n;return r}function Sle(e){return e&&(Array.isArray(e)||!!e.buffer)}function Qz(e){return e[e.length-1]-e[0]+1===e.length}function pG(e){return e[0]}function fG(e){return e[e.length-1]+1}function Dle(e){return e[0]}function vle(e){return e[e.length-1]}function Ez(e){return e.length}function Fle(e){let t=e.length;return t?t>2?ale(t,e[0],e[t-1],e[t>>1]):ile(t,e[0],e[t-1]):0}function wle(e){let t=e.length;return t>5?`[${e[0]}, ${e[1]}, ..., ${e[t-1]}], length ${t}`:`[${e.join(", ")}]`}function bz(e,t){let r=e.length;return r===0?-1:e[0]<=t&&t<=e[r-1]?Ple(e,t,0,r):-1}function Rle(e,t,r){return xz(e,t,Ue.start(r),Ue.end(r))}function xz(e,t,r,n){return e.length===0||n<=r?-1:e[r]<=t&&t<=e[n-1]?Ple(e,t,r,n):-1}function Ule(e,t){return bz(e,t)>=0}function Sz(e,t){if(e===t)return!0;let r=e.length;if(r!==t.length||e[0]!==t[0]||e[r-1]!==t[r-1])return!1;if(Qz(e))return!0;r--;for(let n=1;n<r;n++)if(e[n]!==t[n])return!1;return!0}function Jy(e,t){return Gle(e,t,0,e.length)}function Lle(e,t,r){return Gle(e,t,Ue.start(r),Ue.end(r))}function Tle(e,t,r){return Ue.ofBounds(Jy(e,t),Jy(e,r+1))}function Ple(e,t,r,n){let o=r,i=n-1;for(;o<=i;){if(o+11>i){for(let s=o;s<=i;s++)if(t===e[s])return s;return-1}let a=o+i>>1,A=e[a];if(t<A)i=a-1;else if(t>A)o=a+1;else return a}return-1}function Gle(e,t,r,n){if(r===n||e[r]>=t)return r;if(e[n-1]<t)return n;let o=r,i=n;for(;i-o>4;){let a=o+i>>1;e[a]>=t?i=a:o=a+1}for(let a=o;a<i;a++)if(e[a]>=t)return a;return i}function Nle(e,t){if(e===t)return!0;let{startI:r,startJ:n,endI:o,endJ:i}=Jb(e,t);for(;r<o&&n<i;){let a=e[r],A=t[n];if(a<A)r++;else if(a>A)n++;else return!0}return!1}function Mle(e,t){if(e===t)return!0;let r=t.length,{startI:n,startJ:o,endI:i,endJ:a}=Jb(e,t);if(a-o<r||i-n<r)return!1;let A=0;for(;n<i&&o<a;){let s=e[n],c=t[o];s<c?n++:s>c?o++:(n++,o++,A++)}return A===r}function Dz(e,t){if(e===t)return e;let r=e.length,n=t.length;if(r===0)return t;if(n===0)return e;if(e[0]>t[0])return Dz(t,e);let{startI:o,startJ:i,endI:a,endJ:A}=Jb(e,t),s=vz(e,t,o,i,a,A);if(s===r&&s===n||s===n)return e;if(s===r)return t;let c=new Int32Array(r+n-s),l=0,u=0,g=0;for(l=0;l<o;l++)c[g++]=e[l];for(;u<A&&e[o]>t[u];)c[g++]=t[u++];for(;l<a&&u<A;){let m=e[l],p=t[u];m<p?(c[g++]=m,l++):m>p?(c[g++]=p,u++):(c[g++]=m,l++,u++)}for(;l<a;l++)c[g++]=e[l];for(;u<A;u++)c[g++]=t[u];for(;l<r;l++)c[g++]=e[l];for(;u<n;u++)c[g++]=t[u];return c}function kle(e,t){if(e===t)return Ez(e);let{startI:r,startJ:n,endI:o,endJ:i}=Jb(e,t);return vz(e,t,r,n,o,i)}function vz(e,t,r,n,o,i){let a=r,A=n,s=0;for(;a<o&&A<i;){let c=e[a],l=t[A];c<l?a++:c>l?A++:(a++,A++,s++)}return s}function Hle(e,t){if(e===t)return e;let{startI:r,startJ:n,endI:o,endJ:i}=Jb(e,t),a=vz(e,t,r,n,o,i),A=e.length,s=t.length;if(!a)return zS;if(a===A&&a===s||a===s)return t;if(a===A)return e;let c=new Int32Array(a),l=0,u=r,g=n;for(;u<o&&g<i;){let m=e[u],p=t[g];m<p?u++:(m>p||(c[l++]=m,u++),g++)}return c}function Vle(e,t){if(e===t)return zS;let r=e.length,{startI:n,startJ:o,endI:i,endJ:a}=Jb(e,t),A=n,s=o,c=0;for(;A<i&&s<a;){let g=e[A],m=t[s];g<m?A++:g>m?s++:(A++,s++,c++)}if(!c)return e;if(c>=r)return zS;let l=new Int32Array(r-c),u=0;for(let g=0;g<n;g++)l[u++]=e[g];for(A=n,s=o;A<i&&s<a;){let g=e[A],m=t[s];g<m?(l[u++]=g,A++):(g>m||A++,s++)}for(;A<r;A++)l[u++]=e[A];return l}function _le(e){if(e.length<2)return e;let t=1;for(let o=0,i=e.length-1;o<i;o++)e[o]!==e[o+1]&&t++;if(t===e.length)return e;let r=new Int32Array(t),n=0;for(let o=0,i=e.length-1;o<i;o++)e[o]!==e[o+1]&&(r[n++]=e[o]);return r[n]=e[e.length-1],r}function Yle(e,t){if(Sz(e,t))return n2(0,e.length-1);let{startI:r,startJ:n,endI:o,endJ:i}=Jb(e,t),a=r,A=n,s=0;for(;a<o&&A<i;){let g=e[a],m=t[A];g<m?a++:g>m?A++:(a++,A++,s++)}let c=e.length;if(!s)return zS;if(s===c)return n2(0,e.length-1);let l=new Int32Array(s),u=0;for(a=r,A=n;a<o&&A<i;){let g=e[a],m=t[A];g<m?a++:(g>m||(l[u++]=a,a++),A++)}return l}var qC={startI:0,startJ:0,endI:0,endJ:0};function Jb(e,t){let r=e.length,n=t.length,o=r/n;return r>=128||n>=128||o<=.34||o>=2.99?(qC.startI=Jy(e,pG(t)),qC.startJ=Jy(t,pG(e)),qC.endI=Jy(e,fG(t)),qC.endJ=Jy(t,fG(e))):(qC.startI=0,qC.startJ=0,qC.endI=r,qC.endJ=n),qC}var je;(U=>(U.Empty=zS,U.ofUnsortedArray=xle,U.ofSingleton=Ele,U.ofSortedArray=ble,U.ofRange=yz,U.ofBounds=(G,N)=>yz(G,N-1),U.is=Sle,U.isRange=Qz,U.has=Ule,U.indexOf=bz,U.indexOfInInterval=Rle,U.indexOfInRange=xz,U.start=pG,U.end=fG,U.min=Dle,U.max=vle,U.size=Ez,U.hashCode=Fle,U.toString=wle,U.areEqual=Sz,U.areIntersecting=Nle,U.isSubset=Mle,U.union=Dz,U.intersect=Hle,U.subtract=Vle,U.findPredecessorIndex=Jy,U.findPredecessorIndexInInterval=Lle,U.findRange=Tle,U.intersectionSize=kle,U.deduplicate=_le,U.indicesOf=Yle))(je||={});var Nf=Ue.Empty,Wle=Ue.ofSingleton,Xle=Ue.ofRange,Zle=Ue.ofBounds;function Wd(e){return e.length?je.isRange(e)?Ue.ofRange(e[0],e[e.length-1]):e:Nf}function $C(e){return Ue.is(e)?Ue.size(e):je.size(e)}function qle(e,t){return Ue.is(e)?Ue.has(e,t):je.has(e,t)}function $le(e,t){return Ue.is(e)?Ue.indexOf(e,t):je.indexOf(e,t)}function BG(e,t){return Ue.is(e)?Ue.getAt(e,t):e[t]}function zb(e){return Ue.is(e)?Ue.min(e):je.min(e)}function Kb(e){return Ue.is(e)?Ue.max(e):je.max(e)}function eue(e){return Ue.is(e)?Ue.start(e):je.start(e)}function tue(e){return Ue.is(e)?Ue.end(e):je.end(e)}function rue(e){return $C(e)===0}function nue(e){return Ue.is(e)?Ue.hashCode(e):je.hashCode(e)}function oue(e){return Ue.is(e)?Ue.toString(e):je.toString(e)}function iue(e,t){return Ue.is(e)?Ue.is(t)?Ue.areEqual(e,t):Ole(e,t):Ue.is(t)?Ole(t,e):je.areEqual(e,t)}function aue(e,t){return Ue.is(e)?Ue.is(t)?Ue.areIntersecting(e,t):Jle(t,e):Ue.is(t)?Jle(e,t):je.areIntersecting(e,t)}function Aue(e,t){return Ue.is(e)?Ue.is(t)?Ue.isSubInterval(e,t):mje(e,t):Ue.is(t)?gje(e,t):je.isSubset(e,t)}function sue(e,t){return Ue.is(e)?Ue.findPredecessorIndex(e,t):je.findPredecessorIndex(e,t)}function cue(e,t,r){return Ue.is(e)?Ue.findPredecessorIndexInInterval(e,t,r):je.findPredecessorIndexInInterval(e,t,r)}function lue(e,t,r){return Ue.is(e)?Ue.findRange(e,t,r):je.findRange(e,t,r)}function uue(e,t){return Ue.is(e)?Ue.is(t)?Ue.intersectionSize(e,t):Kle(t,e):Ue.is(t)?Kle(e,t):je.intersectionSize(e,t)}function gue(e,t){return Ue.is(e)?Ue.is(t)?fje(e,t):zle(t,e):Ue.is(t)?zle(e,t):Wd(je.union(e,t))}function mue(e,t){return Ue.is(e)?Ue.is(t)?Ue.intersect(e,t):jle(t,e):Ue.is(t)?jle(e,t):Wd(je.intersect(e,t))}function due(e,t){return Ue.is(e)?Ue.is(t)?Bje(e,t):Cje(e,t):Ue.is(t)?Ije(e,t):Wd(je.subtract(e,t))}function Ole(e,t){return Ue.size(e)===je.size(t)&&Ue.start(e)===je.start(t)&&Ue.end(e)===je.end(t)}function Jle(e,t){return e.length!==0&&Ue.size(je.findRange(e,Ue.min(t),Ue.max(t)))!==0}function gje(e,t){let r=Ue.min(t),n=Ue.max(t);if(n-r+1===0)return!0;let o=je.min(e),i=je.max(e);if(r<o||n>i)return!1;let a=je.findRange(e,r,n);return Ue.size(a)===Ue.size(t)}function mje(e,t){let r=Ue.min(e),n=Ue.max(e);if(n-r+1===0)return!1;let o=je.min(t),i=je.max(t);return o>=r&&i<=n}function dje(e,t){let r=$C(e),n=$C(t);return r===0&&n===0?!0:r>0&&n>0&&Kb(e)>=zb(t)&&zb(e)<=Kb(t)}function pje(e,t){return $C(e)?$C(t)?zb(e)<=zb(t)&&Kb(e)>=Kb(t):!0:$C(t)===0}function fje(e,t){if(Ue.areEqual(e,t))return e;let r=Ue.size(e),n=Ue.size(t);if(!n)return e;if(!r)return t;let o=Ue.min(e),i=Ue.min(t);if(dje(e,t))return Ue.ofRange(Math.min(o,i),Math.max(Ue.max(e),Ue.max(t)));let a,A,s,c;o<i?(a=r,A=o,s=n,c=i):(a=n,A=i,s=r,c=o);let l=new Int32Array(r+n);for(let u=0;u<a;u++)l[u]=u+A;for(let u=0;u<s;u++)l[u+a]=u+c;return Wd(l)}function zle(e,t){let r=Ue.size(t);if(!r)return e;if(pje(t,e))return t;let n=Ue.min(t),o=Ue.max(t),i=je.findRange(e,n,o),a=Ue.start(i),A=Ue.end(i),s=new Int32Array(a+(e.length-A)+r),c=0;for(let l=0;l<a;l++)s[c++]=e[l];for(let l=n;l<=o;l++)s[c++]=l;for(let l=A,u=e.length;l<u;l++)s[c++]=e[l];return Wd(s)}function Kle(e,t){if(!Ue.size(t))return 0;let r=je.findRange(e,Ue.min(t),Ue.max(t));return Ue.end(r)-Ue.start(r)}function jle(e,t){if(!Ue.size(t))return Nf;let r=je.findRange(e,Ue.min(t),Ue.max(t)),n=Ue.start(r),o=Ue.end(r),i=o-n;if(!i)return Nf;if(i===e.length)return e;let a=new Int32Array(i),A=0;for(let s=n;s<o;s++)a[A++]=e[s];return Wd(a)}function Bje(e,t){if(Ue.areEqual(e,t))return Nf;if(!Ue.areIntersecting(e,t))return e;let r=Ue.min(e),n=Ue.max(e),o=Ue.min(t),i=Ue.max(t);if(n<r||i<o)return e;if(Ue.isSubInterval(t,e))return Nf;if(Ue.isSubInterval(e,t)){let a=o-r,A=n-i;if(a<=0)return Ue.ofRange(i+1,i+A);if(A<=0)return Ue.ofRange(r,r+a-1);let s=new Int32Array(a+A),c=0;for(let l=0;l<a;l++)s[c++]=r+l;for(let l=1;l<=A;l++)s[c++]=i+l;return Wd(s)}return r<o?Ue.ofRange(r,o-1):Ue.ofRange(i+1,n)}function Ije(e,t){let r=Ue.min(t),n=Ue.max(t);if(n<r)return e;let o=je.findRange(e,r,n),i=Ue.start(o),a=Ue.end(o),A=e.length-(a-i);if(A<=0)return Nf;if(A===e.length)return e;let s=new Int32Array(A),c=0;for(let l=0;l<i;l++)s[c++]=e[l];for(let l=a,u=e.length;l<u;l++)s[c++]=e[l];return Wd(s)}function Cje(e,t){let r=Ue.min(e),n=Ue.max(e);if(n<r)return e;let o=n-r+1,i=je.findRange(t,r,n),a=Ue.start(i),A=Ue.end(i),s=A-a;if(s===0)return e;let c=o-s;if(c<=0)return Nf;let l=new Int32Array(c),u=t.length-1,g=t[Math.min(a,u)],m=t[Math.min(A,u)],p=0;for(let d=r;d<g;d++)l[p++]=d;for(let d=g;d<=m;d++)je.indexOfInInterval(t,d,i)<0&&(l[p++]=d);for(let d=m+1;d<=n;d++)l[p++]=d;return Wd(l)}function pue(e,t,r){if(Ue.is(e)){let n=Ue.min(e);for(let o=n,i=Ue.max(e);o<=i;o++)t(o,o-n,r)}else for(let n=0,o=e.length;n<o;n++)t(e[n],n,r);return r}function fue(e,t,r,n){if(Ue.is(e)){let o=0;for(let i=Ue.min(e),a=Ue.max(e);i<=a;i++){let A=t(i),s=i+1;for(;s<a&&t(s)===A;)s++;i=s-1,r(A,o,n),o++}}else{let o=0;for(let i=0,a=e.length;i<a;i++){let A=t(e[i]),s=i+1;for(;s<a&&t(e[s])===A;)s++;i=s-1,r(A,o,n),o++}}return n}function Bue(e,t,r){if(t===r)return e;let n=$C(e),o=t.length,i=r.length;if(n===0||o===0||i===0)return Nf;let a=je.findPredecessorIndex(r,t[zb(e)]),A=je.findPredecessorIndex(r,t[Kb(e)]+1),s=0,c=0,l=0,u=a;for(;l<n&&u<A;){let m=t[BG(e,l)],p=r[u];m<p?l++:(m>p||(s++,l++),u++)}if(s===0)return Nf;if(s===o&&s===i)return e;let g=new Int32Array(s);for(c=0,l=0,u=a;l<n&&u<A;){let m=t[BG(e,l)],p=r[u];m<p?l++:(m>p||(g[c++]=u,l++),u++)}return Wd(g)}var Ee;(G=>{G.Empty=Nf,G.ofSingleton=Wle,G.ofRange=Xle,G.ofBounds=Zle,G.ofSortedArray=Wd,G.has=qle,G.indexOf=$le,G.getAt=BG,G.isEmpty=rue,G.min=zb,G.max=Kb,G.start=eue,G.end=tue,G.size=$C,G.hashCode=nue,G.areEqual=iue,G.areIntersecting=aue,G.isSubset=Aue,G.union=gue,G.intersect=mue,G.indexedIntersect=Bue,G.subtract=due,G.findPredecessorIndex=sue,G.findPredecessorIndexInInterval=cue,G.findRange=lue,G.intersectionSize=uue;function R(N,k,J){return pue(N,k,J)}G.forEach=R;function T(N,k,J,H){return fue(N,k,J,H)}G.forEachSegment=T;function L(N){return Ue.is(N)}G.isInterval=L;function F(N){return!Ue.is(N)}G.isSortedArray=F;function v(N){let k=[];return G.forEach(N,J=>k.push(J)),k}G.toArray=v;function U(N){return oue(N)}G.toString=U})(Ee||={});function wz(e){let t=je.ofSortedArray(e),r=je.max(t),n=new Int32Array(r);for(let o=0,i=e.length-1;o<i;o++)for(let a=e[o],A=e[o+1];a<A;a++)n[a]=o;return{offsets:t,index:n,count:e.length-1}}function Iue(e,t){let r=Ue.start(t),n=new Int32Array(e.length+1);for(let o=0,i=e.length;o<i;o++)n[o]=e[o]-r;return n[e.length]=Ue.end(t)-r,wz(n)}function Cue({count:e}){return e}function hue({index:e},t){return e[t]}function yue({offsets:e},t,r){let n=Ee.max(e),o=r>=n?-1:Ee.findPredecessorIndex(e,r-1);return Ee.findRange(t,Ee.getAt(e,o),Ee.getAt(e,o+1)-1)}var Fz=class{constructor(t,r,n,o){this.segments=t;this.segmentMap=r;this.set=n;this.segmentMin=0;this.segmentMax=0;this.setRange=Ue.Empty;this.value={index:0,start:0,end:0};this.hasNext=!1;this.setRange=o,this.updateSegmentRange()}move(){for(;this.hasNext;)if(this.updateValue()){this.value.index=this.segmentMin++,this.hasNext=this.segmentMax>=this.segmentMin&&Ue.size(this.setRange)>0;break}else this.updateSegmentRange();return this.value}updateValue(){let t=this.segments[this.segmentMin+1],r=Ee.findPredecessorIndexInInterval(this.set,t,this.setRange);return this.value.start=Ue.start(this.setRange),this.value.end=r,this.setRange=Ue.ofBounds(r,Ue.end(this.setRange)),r>this.value.start}updateSegmentRange(){let t=Ue.min(this.setRange),r=Ue.max(this.setRange);if(r<t){this.hasNext=!1;return}this.segmentMin=this.segmentMap[Ee.getAt(this.set,t)],this.segmentMax=this.segmentMap[Ee.getAt(this.set,r)],this.hasNext=this.segmentMax>=this.segmentMin}setSegment(t){this.setRange=Ue.ofBounds(t.start,t.end),this.updateSegmentRange()}};function Que(e,t,r){let n=typeof r<"u"?Ue.ofBounds(r.start,r.end):Ue.ofBounds(0,Ee.size(t));return new Fz(e.offsets,e.index,t,n)}var sr;(a=>(a.create=wz,a.ofOffsets=Iue,a.count=Cue,a.getSegment=hue,a.projectValue=yue,a.transientSegments=Que))(sr||={});function Uz(e){return new Rz(e)}var Rz=class{remove(t){let{prev:r,next:n}=this,o=r[t],i=n[t];o>=0&&(n[o]=i,r[t]=-1),i>=0&&(r[i]=o,n[t]=-1),t===this.head&&(o<0?this.head=i:this.head=o)}has(t){return this.prev[t]>=0||this.next[t]>=0||this.head===t}constructor(t){this.head=t>0?0:-1,this.prev=new Int32Array(t),this.next=new Int32Array(t);for(let r=0;r<t;r++)this.next[r]=r+1,this.prev[r]=r-1;this.prev[0]=-1,this.next[t-1]=-1}};var _c;(a=>{a.Empty=new Map;function t(A){return JS(A.keys())}a.keyArray=t;function r(){return new Map}a.Mutable=r;function n(A){return A}a.asImmutable=n;function o(A){let s=r(),c=A.keys();for(;;){let{done:l,value:u}=c.next();if(l)break;s.set(u,A.get(u))}return s}a.copy=o;function i(A,s){let c=s.keys();for(;;){let{done:l,value:u}=c.next();if(l)break;A.set(u,s.get(u))}return A}a.addFrom=i})(_c||={});var Lz=class{constructor(t){this.xs=[];this.index=-1;this.length=0;this.hasNext=!1;this.length=t.length,this.hasNext=t.length>0,this.xs=t,this.index=-1,this.lastValue=t.length>0?t[0]:void 0}move(){return++this.index,this.lastValue=this.xs[this.index],this.hasNext=this.index<this.length-1,this.lastValue}},IG=class{constructor(t,r){this.max=r;this.value=0;this.hasNext=!1;this.value=t-1,this.hasNext=r>=t}move(){return++this.value,this.hasNext=this.value<this.max,this.value}},Tz=class{constructor(t){this.value=t;this.hasNext=!0}move(){return this.hasNext=!1,this.value}},Pz=class{constructor(t,r){this.base=t;this.f=r;this.hasNext=!1;this.hasNext=t.hasNext}move(){let t=this.f(this.base.move());return this.hasNext=this.base.hasNext,t}},Gz=class{constructor(t,r){this.base=t;this.p=r;this.hasNext=this.findNext()}move(){let t=this.next;return this.hasNext=this.findNext(),t}findNext(){for(;this.base.hasNext;)if(this.next=this.base.move(),this.p(this.next))return!0;return!1}},jb;(A=>{A.Empty=new IG(0,-1);function t(s){return new Lz(s)}A.Array=t;function r(s){return new Tz(s)}A.Value=r;function n(s,c){return new IG(s,c)}A.Range=n;function o(s,c){return new Pz(s,c)}A.map=o;function i(s,c){return new Gz(s,c)}A.filter=i;function a(s,c,l){for(;s.hasNext;)if(c(s.move(),l))return l;return l}A.forEach=a})(jb||={});var fa;(u=>{function e(g,m){if(g===m)return!0;if(g.vertexCount!==m.vertexCount||g.edgeCount!==m.edgeCount)return!1;let{a:p,b:d,offset:f}=g,{a:I,b:C,offset:y}=m;for(let Q=0,E=g.a.length;Q<E;Q++)if(p[Q]!==I[Q])return!1;for(let Q=0,E=g.b.length;Q<E;Q++)if(d[Q]!==C[Q])return!1;for(let Q=0,E=g.offset.length;Q<E;Q++)if(f[Q]!==y[Q])return!1;for(let Q of Object.keys(g.edgeProps)){let E=g.edgeProps[Q],b=m.edgeProps[Q];if(!b)return!1;for(let x=0,S=E.length;x<S;x++)if(E[x]!==b[x])return!1}return!0}u.areEqual=e;class t{constructor(m,p,d,f,I,C){this.offset=m;this.a=p;this.b=d;this.edgeCount=f;this.props=C;this.vertexCount=m.length-1,this.edgeProps=I||{}}getEdgeIndex(m,p){let d,f;m<p?(d=m,f=p):(d=p,f=m);for(let I=this.offset[d],C=this.offset[d+1];I<C;I++)if(this.b[I]===f)return I;return-1}getDirectedEdgeIndex(m,p){for(let d=this.offset[m],f=this.offset[m+1];d<f;d++)if(this.b[d]===p)return d;return-1}getVertexEdgeCount(m){return this.offset[m+1]-this.offset[m]}}function r(g,m,p,d,f,I){return new t(g,m,p,d,f,I)}u.create=r;class n{constructor(m,p,d){this.vertexCount=m;this.xs=p;this.ys=d;this.current=0;this.curA=0;this.curB=0;this.edgeCount=p.length,this.offsets=new Int32Array(this.vertexCount+1),this.bucketFill=new Int32Array(this.vertexCount);let f=new Int32Array(this.vertexCount);for(let C=0,y=this.xs.length;C<y;C++)f[this.xs[C]]++;for(let C=0,y=this.ys.length;C<y;C++)f[this.ys[C]]++;let I=0;for(let C=0;C<this.vertexCount;C++)this.offsets[C]=I,I+=f[C];this.offsets[this.vertexCount]=I,this.slotCount=I,this.a=new Int32Array(I),this.b=new Int32Array(I)}createGraph(m,p){return r(this.offsets,this.a,this.b,this.edgeCount,m,p)}addNextEdge(){let m=this.xs[this.current],p=this.ys[this.current],d=this.offsets[m]+this.bucketFill[m];this.a[d]=m,this.b[d]=p,this.bucketFill[m]++;let f=this.offsets[p]+this.bucketFill[p];this.a[f]=p,this.b[f]=m,this.bucketFill[p]++,this.current++,this.curA=d,this.curB=f}addAllEdges(){for(let m=0;m<this.edgeCount;m++)this.addNextEdge()}assignProperty(m,p){m[this.curA]=p,m[this.curB]=p}assignDirectedProperty(m,p,d,f){m[this.curA]=p,m[this.curB]=f,d[this.curB]=p,d[this.curA]=f}}u.EdgeBuilder=n;class o{constructor(m,p,d){this.vertexCount=m;this.xs=p;this.ys=d;this.current=0;this.curA=0;this.edgeCount=p.length,this.offsets=new Int32Array(this.vertexCount+1),this.bucketFill=new Int32Array(this.vertexCount);let f=new Int32Array(this.vertexCount);for(let C=0,y=this.xs.length;C<y;C++)f[this.xs[C]]++;let I=0;for(let C=0;C<this.vertexCount;C++)this.offsets[C]=I,I+=f[C];this.offsets[this.vertexCount]=I,this.slotCount=I,this.a=new Int32Array(I),this.b=new Int32Array(I)}createGraph(m,p){return r(this.offsets,this.a,this.b,this.edgeCount,m,p)}addNextEdge(){let m=this.xs[this.current],p=this.ys[this.current],d=this.offsets[m]+this.bucketFill[m];this.a[d]=m,this.b[d]=p,this.bucketFill[m]++,this.current++,this.curA=d}addAllEdges(){for(let m=0;m<this.edgeCount;m++)this.addNextEdge()}assignProperty(m,p){m[this.curA]=p}}u.DirectedEdgeBuilder=o;class i{constructor(m){this.vertexCount=m;this.xs=[];this.ys=[];this.included=new Set}addEdge(m,p){let d=m,f=p;m>p&&(d=p,f=m);let I=ko(d,f);return this.included.has(I)?!1:(this.included.add(I),this.xs[this.xs.length]=d,this.ys[this.ys.length]=f,!0)}getGraph(){return a(this.vertexCount,this.xs,this.ys)}getEdgeBuiler(){return new n(this.vertexCount,this.xs,this.ys)}}u.UniqueEdgeBuilder=i;function a(g,m,p){let d=new u.EdgeBuilder(g,m,p);return d.addAllEdges(),d.createGraph({})}u.fromVertexPairs=a;function A(g,m,p){let{b:d,offset:f,vertexCount:I,edgeProps:C}=g,y=new Int32Array(I);for(let L=0,F=m.length;L<F;L++)y[m[L]]=L+1;let Q=0;for(let L=0;L<I;L++)if(y[L]!==0)for(let F=f[L],v=f[L+1];F<v;F++)d[F]>L&&y[d[F]]!==0&&Q++;let E=new Int32Array(m.length+1),b=new Int32Array(2*Q),x=new Int32Array(2*Q),S=new Int32Array(2*Q),w=0,R=0;for(let L=0;L<I;L++){if(y[L]===0)continue;let F=y[L]-1;for(let v=f[L],U=f[L+1];v<U;v++){let G=y[d[v]];G!==0&&(x[w]=F,S[w]=G-1,b[w]=v,w++)}E[++R]=w}let T={};for(let L of Object.keys(C))T[L]=cle(C[L],b);return r(E,x,S,Q,T,p)}u.induceByVertices=A;function s(g){let m=g.vertexCount;if(m===0)return{componentCount:0,componentIndex:new Int32Array(0)};if(g.edgeCount===0){let Q=new Int32Array(m);for(let E=0,b=m;E<b;E++)Q[E]=E;return{componentCount:m,componentIndex:Q}}let p=new Int32Array(m);for(let Q=0,E=m;Q<E;Q++)p[Q]=-1;let d=0;p[0]=d;let{offset:f,b:I}=g,C=[0],y=Uz(m);for(y.remove(0);C.length>0;){let Q=C.pop(),E=p[Q];for(let b=f[Q],x=f[Q+1];b<x;b++){let S=I[b];y.has(S)&&(y.remove(S),C.push(S),p[S]=E)}C.length===0&&y.head>=0&&(C.push(y.head),p[y.head]=++d,y.remove(y.head))}return{componentCount:m,componentIndex:p}}u.connectedComponents=s;function c(g,m,p,d){if(je.areIntersecting(m,p))return!0;if(d<1)return!1;let f=new Set;for(let I=0,C=m.length;I<C;++I)f.add(m[I]);return Eue(g,m,p,d,f)}u.areVertexSetsConnected=c;function l(g){let m=g.vertexCount,{offset:p,b:d}=g,f=new Array(m),I=new Int32Array(m);for(let C=0;C<m;C++){let y=new Int32Array(m).fill(-1),Q=0,E=0;for(I[E++]=C,y[C]=0;Q<E;){let b=I[Q++],x=y[b];for(let S=p[b],w=p[b+1];S<w;S++){let R=d[S];y[R]<0&&(y[R]=x+1,I[E++]=R)}}f[C]=y}return f}u.graphShortestPaths=l})(fa||={});function Eue(e,t,r,n,o){let{b:i,offset:a}=e,A=[];for(let s=0,c=t.length;s<c;++s){let l=t[s];for(let u=a[l],g=a[l+1];u<g;++u){let m=i[u];if(!o.has(m)){if(je.has(r,m))return!0;o.add(m),A[A.length]=m}}}return n>1?Eue(e,A,r,n-1,o):!1}var Nz=class{constructor(){this.map=new Map;this.applicable=new Map}add(t,r,n){this.map.set(t,r),n&&this.applicable.set(t,n)}remove(t){this.map.delete(t),this.applicable.delete(t)}get(t){return this.map.get(t)}isApplicable(t){if(!this.map.has(t.sourceData.kind))return!1;let r=this.applicable.get(t.sourceData.kind);return r?r(t):!0}};var Ws;(t=>{function e(r,n){let{name:o}=r,i=new Nz;return{descriptor:r,formatRegistry:i,isApplicable(a){return i.isApplicable(a)},get(a){let A=n?.asDynamic?a._dynamicPropertyData:a._staticPropertyData;if(A[o])return A[o];if(a.customProperties.has(r))return;let s=i.get(a.sourceData.kind);if(s)return A[o]=s(a),a.customProperties.add(r),A[o]},set(a,A){n?.asDynamic?a._dynamicPropertyData[o]=A:a._staticPropertyData[o]=A},delete(a){n?.asDynamic?delete a._dynamicPropertyData[o]:delete a._staticPropertyData[o]}}}t.create=e})(Ws||={});var oK={};ki(oK,{AminoAcidNames:()=>zy,AminoAcidNamesD:()=>Xz,AminoAcidNamesL:()=>A2,BaseNames:()=>Ky,BetaProteinComponentTypeNames:()=>kue,BondType:()=>It,CommonProteinCaps:()=>Zz,DNAComponentTypeNames:()=>Kz,DProteinComponentTypeNames:()=>Oz,DefaultMaxAsa:()=>Lje,DefaultResidueHydrophobicity:()=>Tje,DnaBaseNames:()=>Zb,ElementSymbol:()=>qd,EntityType:()=>Nue,GammaProteinComponentTypeNames:()=>Mue,IonComponentTypeNames:()=>Yue,LProteinComponentTypeNames:()=>Jz,LipidComponentTypeNames:()=>Oue,MaxAsa:()=>Uje,MoleculeType:()=>Za,NucleicBackboneAtoms:()=>th,OtherComponentTypeNames:()=>_ue,OtherProteinComponentTypeNames:()=>zz,PeptideBaseNames:()=>QG,PolymerNames:()=>$B,PolymerType:()=>a2,PolymerTypeAtomRoleId:()=>_z,ProteinBackboneAtoms:()=>Uu,ProteinComponentTypeNames:()=>Vue,ProteinTerminusComponentTypeNames:()=>Hue,PurineBaseNames:()=>Jue,PyrimidineBaseNames:()=>zue,RNAComponentTypeNames:()=>jz,ResidueHydrophobicity:()=>s2,RnaBaseNames:()=>Xb,SaccharideComponentTypeNames:()=>Wz,SecondaryStructureType:()=>vr,TraceAtoms:()=>Yz,WaterNames:()=>Wb,getComponentType:()=>jS,getDefaultChemicalComponent:()=>tK,getElementFromAtomicNumber:()=>Vz,getEntitySubtype:()=>nK,getEntityType:()=>rK,getMoleculeType:()=>Yc,getPolymerType:()=>eK,isNucleic:()=>qa,isPolymer:()=>rh,isProtein:()=>EG,isPurineBase:()=>qz,isPyrimidineBase:()=>$z});function kA(){return kA.zero()}(T=>{function e(){let L=[.1,0,0];return L[0]=0,L}T.zero=e;function t(L,F,v){let U=e();return U[0]=L,U[1]=F,U[2]=v,U}T.create=t;function r(L,F,v,U){return L[0]=F,L[1]=v,L[2]=U,L}T.set=r;function n(L,F){let v=F[0]-L[0],U=F[1]-L[1],G=F[2]-L[2];return Math.sqrt(v*v+U*U+G*G)}T.distance=n;function o(L,F){let[v,U,G]=ke.toRgb(F),[N,k,J]=R(v,U,G),H=116*k-16;return L[0]=H<0?0:H,L[1]=500*(N-k),L[2]=200*(k-J),L}T.fromColor=o;function i(L,F){return nm.toLab(L,F)}T.fromHcl=i;function a(L){let F=(L[0]+16)/116,v=isNaN(L[1])?F:F+L[1]/500,U=isNaN(L[2])?F:F-L[2]/200;F=f*x(F),v=d*x(v),U=I*x(U);let G=b(3.2404542*v-1.5371385*F-.4985314*U),N=b(-.969266*v+1.8760108*F+.041556*U),k=b(.0556434*v-.2040259*F+1.0572252*U);return ke.fromRgb(Math.round($t(G,0,255)),Math.round($t(N,0,255)),Math.round($t(k,0,255)))}T.toColor=a;function A(L,F){let[v,U,G]=F,N=Math.sqrt(U*U+G*G),k=(yA(Math.atan2(G,U))+360)%360;return Math.round(N*1e4)===0&&(k=Number.NaN),L[0]=k,L[1]=N,L[2]=v,L}T.toHcl=A;function s(L,F){return L[0]=F[0],L[1]=F[1],L[2]=F[2],L}T.copy=s;function c(L,F,v){return L[0]=F[0]-p*v,L[1]=F[1],L[2]=F[2],L}T.darken=c;function l(L,F,v){return c(L,F,-v)}T.lighten=l;let u=[0,0,0];function g(L,F,v){return A(u,F),nm.toLab(L,nm.saturate(u,u,v))}T.saturate=g;function m(L,F,v){return g(L,F,-v)}T.desaturate=m;let p=18,d=.95047,f=1,I=1.08883,C=.137931034,y=.206896552,Q=.12841855,E=.008856452;function b(L){return 255*(L<=.00304?12.92*L:1.055*Math.pow(L,1/2.4)-.055)}function x(L){return L>y?L*L*L:Q*(L-C)}function S(L){return(L/=255)<=.04045?L/12.92:Math.pow((L+.055)/1.055,2.4)}function w(L){return L>E?Math.pow(L,1/3):L/Q+C}function R(L,F,v){L=S(L),F=S(F),v=S(v);let U=w((.4124564*L+.3575761*F+.1804375*v)/d),G=w((.2126729*L+.7151522*F+.072175*v)/f),N=w((.0193339*L+.119192*F+.9503041*v)/I);return[U,G,N]}})(kA||={});function nm(){return nm.zero()}(I=>{function e(){let C=[.1,0,0];return C[0]=0,C}I.zero=e;function t(C,y,Q){let E=e();return E[0]=C,E[1]=y,E[2]=Q,E}I.create=t;function r(C,y,Q,E){return C[0]=y,C[1]=Q,C[2]=E,C}I.set=r;function n(C){return!isNaN(C[0])}I.hasHue=n;let o=[0,0,0];function i(C,y){return kA.toHcl(C,kA.fromColor(o,y))}I.fromColor=i;function a(C,y){return kA.toHcl(C,y)}I.fromLab=a;let A=[0,0,0];function s(C){return kA.toColor(c(A,C))}I.toColor=s;function c(C,y){let[Q,E,b]=y;return isNaN(Q)&&(Q=0),Q=kr(Q),C[0]=b,C[1]=Math.cos(Q)*E,C[2]=Math.sin(Q)*E,C}I.toLab=c;function l(C,y){return C[0]=y[0],C[1]=y[1],C[2]=y[2],C}I.copy=l;function u(C,y,Q){return C[0]=y[0],C[1]=Math.max(0,y[1]+f*Q),C[2]=y[2],C}I.saturate=u;function g(C,y,Q){return u(C,y,-Q)}I.desaturate=g;let m=[0,0,0];function p(C,y,Q){return c(m,y),kA.toHcl(C,kA.darken(m,m,Q))}I.darken=p;function d(C,y,Q){return p(C,y,-Q)}I.lighten=d;let f=18})(nm||={});function XB(){return XB.zero()}(n=>{function e(){let o=[.1,0,0];return o[0]=0,o}n.zero=e;function t(o,i){return o[0]=(i>>16&255)/255,o[1]=(i>>8&255)/255,o[2]=(i&255)/255,o}n.fromColor=t;function r(o){return o[0]*255<<16|o[1]*255<<8|o[2]*255}n.toColor=r})(XB||={});function ZB(){return ZB.zero()}(c=>{function e(){let l=[.1,0,0];return l[0]=0,l}c.zero=e;let t=XB();function r(l,u){return XB.fromColor(t,u),c.fromRgb(l,t)}c.fromColor=r;function n(l){return A(t,l),XB.toColor(t)}c.toColor=n;function o(l,u){let[g,m,p]=u,d=Math.min(g,m,p),f=Math.max(g,m,p),I=(f+d)/2,C=0,y=0;return f===d?(C=0,y=Number.NaN):C=I<.5?(f-d)/(f+d):(f-d)/(2-f-d),g===f?y=(m-p)/(f-d):m===f?y=2+(p-g)/(f-d):p===f&&(y=4+(g-m)/(f-d)),y*=60,y<0&&(y+=360),l[0]=y,l[1]=C,l[2]=I,l}c.fromRgb=o;let i=[0,0,0],a=[0,0,0];function A(l,u){let[g,m,p]=u,d,f,I;if(m===0)d=f=I=p;else{let C=i,y=a,Q=p<.5?p*(1+m):p+m-p*m,E=2*p-Q,b=g/360;C[0]=b+1/3,C[1]=b,C[2]=b-1/3;for(let x=0;x<3;x++)C[x]<0&&(C[x]+=1),C[x]>1&&(C[x]-=1),6*C[x]<1?y[x]=E+(Q-E)*6*C[x]:2*C[x]<1?y[x]=Q:3*C[x]<2?y[x]=E+(Q-E)*(2/3-C[x])*6:y[x]=E;d=y[0],f=y[1],I=y[2]}return l[0]=d,l[1]=f,l[2]=I,l}c.toRgb=A;function s(l,u,g,m){let p=u,d=g,[f,I,C]=p,[y,Q,E]=d,b,x,S;!isNaN(f)&&!isNaN(y)?(y>f&&y-f>180?S=y-(f+360):y<f&&f-y>180?S=y+360-f:S=y-f,x=f+m*S):isNaN(f)?isNaN(y)?x=Number.NaN:(x=y,(C===1||C===0)&&(b=Q)):(x=f,(E===1||E===0)&&(b=I)),b===void 0&&(b=I+m*(Q-I));let w=C+m*(E-C);return l[0]=x,l[1]=b,l[2]=w,l}c.interpolate=s})(ZB||={});function ke(e){return e}(J=>{function e(H){return`rgb(${H>>16&255}, ${H>>8&255}, ${H&255})`}J.toStyle=e;function t(H){return"#"+("000000"+H.toString(16)).slice(-6)}J.toHexStyle=t;function r(H){return"0x"+("000000"+H.toString(16)).slice(-6)}J.toHexString=r;function n(H){return`RGB: ${J.toRgb(H).join(", ")}`}J.toRgbString=n;function o(H){return[H>>16&255,H>>8&255,H&255]}J.toRgb=o;function i(H){return[(H>>16&255)/255,(H>>8&255)/255,(H&255)/255]}J.toRgbNormalized=i;function a(H){return parseInt(H.replace("#","0x"))}J.fromHexStyle=a;function A(H){return parseInt(H)}J.fromHexString=A;function s(H,z,_){return H<<16|z<<8|_}J.fromRgb=s;function c(H,z,_){return H*255<<16|z*255<<8|_*255}J.fromNormalizedRgb=c;function l(H,z){return s(H[z],H[z+1],H[z+2])}J.fromArray=l;function u(H,z){return c(H[z],H[z+1],H[z+2])}J.fromNormalizedArray=u;function g(H){return typeof H=="number"?H:H[0]}J.fromColorListEntry=g;function m(H,z,_){return z[_]=H>>16&255,z[_+1]=H>>8&255,z[_+2]=H&255,z}J.toArray=m;function p(H,z,_){return z[_]=(H>>16&255)/255,z[_+1]=(H>>8&255)/255,z[_+2]=(H&255)/255,z}J.toArrayNormalized=p;function d(H,z){return H[0]=z>>16&255,H[1]=z>>8&255,H[2]=z&255,H}J.toVec3=d;function f(H,z){return H[0]=(z>>16&255)/255,H[1]=(z>>8&255)/255,H[2]=(z&255)/255,H}J.toVec3Normalized=f;function I(H,z,_){let M=H>>16&255,q=H>>8&255,ne=H&255,oe=z>>16&255,ae=z>>8&255,me=z&255,Se=M+(oe-M)*_,ee=q+(ae-q)*_,O=ne+(me-ne)*_;return Se<<16|ee<<8|O}J.interpolate=I;let C=ZB.zero(),y=ZB.zero();function Q(H,z,_){let M=ZB.fromColor(C,H),q=ZB.fromColor(y,z);return ZB.interpolate(M,M,q,_),ZB.toColor(M)}J.interpolateHsl=Q;function E(H){let z=H>>16&255,_=H>>8&255,M=H&255;return z!==_||z!==M}J.hasHue=E;let b=[0,0,0];function x(H,z){return E(H)?(nm.fromColor(b,H),nm.toColor(nm.saturate(b,b,z))):H}J.saturate=x;function S(H,z){return x(H,-z)}J.desaturate=S;let w=[0,0,0];function R(H,z){return kA.fromColor(w,H),kA.toColor(kA.darken(w,w,z))}J.darken=R;function T(H,z){return R(H,-z)}J.lighten=T;function L(H){return H<=.03928?H/12.92:Math.pow((H+.055)/1.055,2.4)}function F(H){let z=L((H>>16&255)/255),_=L((H>>8&255)/255),M=L((H&255)/255);return .2126*z+.7152*_+.0722*M}J.luminance=F;function v(H,z){let _=F(H),M=F(z);return _>M?(_+.05)/(M+.05):(M+.05)/(_+.05)}J.contrast=v;function U(H){return H<.04045?H*.0773993808:Math.pow(H*.9478672986+.0521327014,2.4)}function G(H){return c(U((H>>16&255)/255),U((H>>8&255)/255),U((H&255)/255))}J.sRGBToLinear=G;function N(H){return H<.0031308?H*12.92:1.055*Math.pow(H,.41666)-.055}function k(H){return c(N((H>>16&255)/255),N((H>>8&255)/255),N((H&255)/255))}J.linearToSRGB=k})(ke||={});function Rn(e,t,r,n){return{label:e,description:r,list:n,type:t}}function qB(e,t,r){let n={};for(let o in e){let i=e[o];i=ke.saturate(i,t),i=ke.darken(i,-r),n[o]=i}return n}function bue(e,t=" "){return e.replace(/([a-z\xE0-\xFF])([A-Z\xC0\xDF])/g,`$1${t}$2`)}function uc(e){return wu(bue(e))}var Eje=e=>e.toUpperCase();function xue(e){return e?typeof e=="string"?e.toUpperCase():`${e}`.toUpperCase():""}function wu(e){return e.toLowerCase().replace(/^\w|\s\w/g,Eje)}function bje(e){return e.replace(/_/g," ")}function xje(e){return e.replace(/-/g," ")}function Ra(e){return wu(bue(bje(xje(e))))}function Sue(e,t){let r=Object.keys(t),n=Object.values(t);return new Function(...r,`return \`${e}\`;`)(...n)}function Ru(e){return e.replace(/<\/?[^>]+>/g,"")}function eh(e){return e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}var Kr={reds:Rn("Reds","sequential","Reds, sequential color scheme from ColorBrewer 2.0",[16774640,16703698,16563105,16552562,16476746,15678252,13309981,10817301,6750221]),oranges:Rn("Oranges","sequential","Oranges, sequential color scheme from ColorBrewer 2.0",[16774635,16705230,16634018,16625259,16616764,15821075,14239745,10892803,8333060]),greens:Rn("Greens","sequential","Greens, sequential color scheme from ColorBrewer 2.0",[16252149,15070688,13101504,10607003,7652470,4303709,2329413,27948,17435]),blues:Rn("Blues","sequential","Blues, sequential color scheme from ColorBrewer 2.0",[16251903,14609399,13032431,10406625,7057110,4362950,2191797,545180,536683]),purples:Rn("Purples","sequential","Purples, sequential color scheme from ColorBrewer 2.0",[16579581,15724021,14342891,12369372,10394312,8420794,6967715,5515151,4128893]),greys:Rn("Greys","sequential","Greys, sequential color scheme from ColorBrewer 2.0",[16777215,15790320,14277081,12434877,9868950,7566195,5395026,2434341,0]),"orange-red":Rn("Orange-Red","sequential","OrRd, sequential color scheme from ColorBrewer 2.0",[16775148,16705736,16635038,16628612,16551257,15689032,14102559,11730944,8323072]),"blue-green":Rn("Blue-Green","sequential","BuGn, sequential color scheme from ColorBrewer 2.0",[16252157,15070713,13429990,10082505,6734500,4304502,2329413,27948,17435]),"purple-blue-green":Rn("Purple-Blue-Green","sequential","PuBuGn, sequential color scheme from ColorBrewer 2.0",[16775163,15524592,13685222,10927579,6793679,3576e3,164234,93273,83510]),"green-blue":Rn("Green-Blue","sequential","GnBu, sequential color scheme from ColorBrewer 2.0",[16252144,14742491,13429701,11066805,8113348,5157843,2854078,551084,540801]),"purple-blue":Rn("Purple-Blue","sequential","PuBu, sequential color scheme from ColorBrewer 2.0",[16775163,15525874,13685222,10927579,7645647,3576e3,356528,285325,145496]),"blue-purple":Rn("Blue-Purple","sequential","BuPu, sequential color scheme from ColorBrewer 2.0",[16252157,14740724,12571622,10403034,9213638,9202609,8929693,8458108,5046347]),"red-purple":Rn("Red-Purple","sequential","RdPu, sequential color scheme from ColorBrewer 2.0",[16775155,16638173,16565696,16424885,16214177,14496919,11403646,7995767,4784234]),"purple-red":Rn("Purple-Red","sequential","PuRd, sequential color scheme from ColorBrewer 2.0",[16250105,15196655,13941210,13210823,14640560,15149450,13505110,9961539,6750239]),"yellow-orange-red":Rn("Yellow-Orange-Red","sequential","YlOrRd, sequential color scheme from ColorBrewer 2.0",[16777164,16772512,16701814,16691788,16616764,16535082,14883356,12386342,8388646]),"yellow-orange-brown":Rn("Yellow-Orange-Brown","sequential","YlOrBr, sequential color scheme from ColorBrewer 2.0",[16777189,16775100,16704401,16696399,16685353,15495188,13388802,10040324,6694150]),"yellow-green":Rn("Yellow-Green","sequential","YlGn, sequential color scheme from ColorBrewer 2.0",[16777189,16252089,14282915,11394446,7915129,4303709,2327619,26679,17705]),"yellow-green-blue":Rn("Yellow-Green-Blue","sequential","YlGnBu, sequential color scheme from ColorBrewer 2.0",[16777177,15595697,13101492,8375739,4306628,1937856,2252456,2438292,531800]),"red-blue":Rn("Red-Blue","diverging","RdBu, diverging color scheme from ColorBrewer 2.0",[6750239,11671595,14049357,16033154,16636871,16250871,13755888,9618910,4428739,2188972,340065]),"red-grey":Rn("Red-Grey","diverging","RdGy, diverging color scheme from ColorBrewer 2.0",[6750239,11671595,14049357,16033154,16636871,16777215,14737632,12237498,8882055,5066061,1710618]),"pink-yellow-green":Rn("Pink-Yellow-Green","diverging","PiYG, diverging color scheme from ColorBrewer 2.0",[9306450,12917629,14579630,15840986,16638191,16250871,15136208,12116358,8371265,5083681,2581529]),"brown-white-green":Rn("Brown-White-Green","diverging","BrBG, diverging color scheme from ColorBrewer 2.0",[5517317,9195786,12550445,14664317,16181443,16119285,13101797,8441281,3512207,91742,15408]),"purple-green":Rn("Purple-Green","diverging","PRGn, diverging color scheme from ColorBrewer 2.0",[4194379,7744131,10055851,12756431,15193320,16250871,14282963,10935200,5942881,1800247,17435]),"purple-orange":Rn("Purple-Orange","diverging","PuOr, diverging color scheme from ColorBrewer 2.0",[2949195,5515144,8418220,11709394,14211819,16250871,16703670,16627811,14713364,11753478,8338184]),"orange-purple":Rn("Orange-Purple","diverging","Reversed PuOr, diverging color scheme from ColorBrewer 2.0",[8338184,11753478,14713364,16627811,16703670,16250871,14211819,11709394,8418220,5515144,2949195]),"red-yellow-green":Rn("Red-Yellow-Green","diverging","RdYlGn, diverging color scheme from ColorBrewer 2.0",[10813478,14102567,16018755,16625249,16703627,16777151,14282635,10934634,6733155,1742928,26679]),"red-yellow-blue":Rn("Red-Yellow-Blue","diverging","RdYlBu, diverging color scheme from ColorBrewer 2.0",[10813478,14102567,16018755,16625249,16703632,16777151,14742520,11262441,7646673,4552116,3225237]),spectral:Rn("Spectral","diverging","Spectral, diverging color scheme from ColorBrewer 2.0",[10355010,13975119,16018755,16625249,16703627,16777151,15136152,11263396,6734501,3311805,6180770]),magma:Rn("Magma","sequential","Magma, sequential color scheme from Matplotlib, perceptually uniform shades of black-red-white",[4,131595,328726,591648,920363,1314358,1708098,2167117,2691418,3346535,3870576,4460406,4985210,5510013,5969279,6560384,7019905,7676289,8135554,8660609,9185665,9710720,10235519,10826110,11351164,12007289,12532343,13057395,13516656,14042475,14567784,14962532,15357537,15687006,16017244,16216156,16349533,16483167,16551011,16619112,16686957,16689523,16692347,16694658,16696970,16699282,16701594,16638627,16640940,16577718,16580031]),"magma-no-black":Rn("Magma (no black)","sequential","Magma, sequential color scheme from Matplotlib, perceptually uniform shades of black-red-white (with the black region removed)",[4329332,4853881,5378684,5903742,6363263,6888576,7413633,7938689,8463745,8988801,9513600,10038655,10563454,11088508,11613562,12138360,12728949,13254258,13714030,14239338,14699366,15094114,15489119,15753309,16017499,16216411,16350045,16483424,16551523,16619368,16621934,16689780,16692091,16694402,16696969,16633746,16636058,16638371,16575148,16577461,16514239]),inferno:Rn("Inferno","sequential","Inferno, sequential color scheme from Matplotlib, perceptually uniform shades of black-red-yellow",[4,131596,328727,657186,1050925,1444665,1969221,2427985,3082843,3737955,4328040,4852843,5377645,5902702,6427502,6952814,7477870,8133997,8659051,9184105,9643623,10168676,10693729,11218782,11743834,12334932,12794703,13254730,13583429,14109502,14504250,14833460,15162926,15427112,15757088,15955993,16154643,16288012,16421383,16489222,16557322,16559634,16497183,16434218,16305463,16176966,16048470,15919721,15921789,16120210,16580516]),"inferno-no-black":Rn("Inferno (no black)","sequential","Inferno, sequential color scheme from Matplotlib, perceptually uniform shades of black-red-yellow (with the black region removed)",[4721514,5246316,5771373,6296430,6821486,7346542,7871597,8396651,8921450,9446504,9971557,10496610,10956127,11481435,12006486,12466258,12926285,13386056,13780802,14241085,14570295,14965297,15229227,15558693,15757342,15956248,16154897,16288267,16421638,16489734,16492043,16494612,16496926,16368426,16305463,16111429,15982678,15853928,15856253,16119953,16580260]),plasma:Rn("Plasma","sequential","Plasma, sequential color scheme from Matplotlib, perceptually uniform shades of blue-red-yellow",[1771148,2426257,3081365,3671193,4195228,4784799,5308834,5833124,6357158,6815911,7340200,7864744,8324007,8783782,9309348,9769377,10164126,10624154,11018902,11413393,11808141,12137352,12466307,12795519,13124730,13453685,13717361,14046573,14309992,14573668,14837344,15035483,15299159,15497299,15695438,15893834,16091974,16224833,16357693,16425017,16557877,16625457,16627245,16629289,16631334,16567845,16438820,16310052,16115494,15921190,15726625]),viridis:Rn("Viridis","sequential","Viridis, sequential color scheme from Matplotlib, perceptually uniform shades of blue-green-yellow",[4524123,4656994,4658793,4726127,4727668,4663929,4599933,4535937,4406404,4276870,4081800,3952010,3822475,3627148,3497356,3302029,3172237,3042446,2912654,2782862,2652814,2523022,2393229,2328973,2198924,2069132,2004874,2005897,2007175,2139525,2337154,2666111,3060348,3520376,4045684,4570991,5227369,5883748,6605661,7392854,8180303,8967495,9819967,10672695,11525166,12443174,13295646,14148121,15000344,15852828,16639780]),cividis:Rn("Cividis","sequential","Cividis, sequential color scheme from Matplotlib, perceptually uniform shades of blue-grey-yellow, should look effectively identical to colorblind and non-colorblind users",[8273,9305,10079,76644,339560,668266,1062508,1390957,1916270,2375790,2835566,3295342,3754862,4214638,4543085,5068397,5462638,5856878,6185326,6579567,6908272,7236721,7499890,7828595,8091764,8354933,8617846,8946551,9209463,9472888,9736056,10064760,10327928,10656632,10985591,11379830,11708532,12102770,12497264,12891501,13285994,13745766,14140259,14600287,14994522,15389014,15717970,16046926,16310347,16508232,16640581]),twilight:Rn("Twilight","cyclical","Twilight, cyclical color scheme from Matplotlib, perceptually uniform shades of white-blue-black-red-white",[14670305,14211037,13554648,12766675,11847630,10993866,10139847,9351365,8628419,8036290,7509952,7048895,6718653,6519739,6386105,6252470,6184114,6181293,6112935,6044831,5976470,5777291,5447293,5052270,4592479,4067665,3674181,3281211,3150646,3543352,4067644,4657728,5379141,6166345,6953549,7741007,8463184,9120336,9777743,10304079,10830671,11291984,11687762,12083541,12348505,12613471,12878439,13077872,13211771,13411209,13545111,13809830,14074293,14338756,14537169,14735067,14801121]),"set-2":Rn("Set-2","qualitative","Set2, categorical color scheme from ColorBrewer 2.0",[6734501,16551266,9281739,15174339,10934356,16767279,15058068,11776947]),accent:Rn("Accent","qualitative","Accent, categorical color scheme from ColorBrewer 2.0",[8374655,12496596,16629894,16777113,3697840,15729279,12540695,6710886]),"set-1":Rn("Set-1","qualitative","Set1, categorical color scheme from ColorBrewer 2.0",[14948892,3636920,5091146,9981603,16744192,16777011,10901032,16220607,10066329]),"set-3":Rn("Set-3","qualitative","Set3, categorical color scheme from ColorBrewer 2.0",[9294791,16777139,12499674,16482418,8434131,16626786,11787881,16567781,14277081,12353725,13429701,16772463]),"dark-2":Rn("Dark-2","qualitative","Dark2, categorical color scheme from ColorBrewer 2.0",[1810039,14245634,7696563,15149450,6727198,15117058,10909213,6710886]),paired:Rn("Paired","qualitative","Paired, categorical color scheme from ColorBrewer 2.0",[10931939,2062516,11722634,3383340,16489113,14883356,16629615,16744192,13284054,6962586,16777113,11622696]),"pastel-2":Rn("Pastel-2","qualitative","Pastel2, categorical color scheme from ColorBrewer 2.0",[11789005,16633260,13358568,16042724,15136201,16773806,15852236,13421772]),"pastel-1":Rn("Pastel-1","qualitative","Pastel1, categorical color scheme from ColorBrewer 2.0",[16495790,11783651,13429701,14601188,16701862,16777164,15063229,16636652,15921906]),turbo:Rn("Turbo","sequential","Turbo color scheme from D3.js, improved (smooth) rainbow colormap for visualization",[2299675,3547990,4337541,4799658,4934343,4872413,4613867,4289780,3900152,3510520,3120629,2796271,2602726,2474716,2477264,2611140,2875575,3270826,3731101,4387984,5109892,5897080,6815085,7798371,8781145,9829201,10811209,11858498,12774460,13755446,14605618,15389486,16042283,16563496,16757029,16753699,16750369,16746782,16743196,16608538,16146200,15487253,14763026,13973263,13052940,12198408,11344133,10621442,9965056,9571328,9440256]),"turbo-no-black":Rn("Turbo (no black)","sequential","Turbo color scheme from D3.js, improved (smooth) rainbow colormap for visualization, with black region removed",[4866485,4872413,4354034,3770361,3120629,2667241,2475736,2611140,3073454,3928216,5109892,6487408,8126047,9829201,11531332,13167162,14605618,15780908,16693543,16753699,16748063,16741916,16146200,15026195,13644558,12198408,10818563,9833728]),warm:Rn("Warm","sequential","Warm, sequential color scheme from D3.js",[7225514,7684013,8208303,8797873,9322162,9846195,10370483,10960051,11484338,12008625,12532911,13057452,13581737,14040742,14434210,14959005,15352473,15746196,16074382,16402824,16665475,16731772,16732790,16733808,16734826,16735843,16737117,16738135,16739409,16740939,16742471,16743746,16745277,16747065,16748598,16487987,16162097,15901743,15575598,15184174,14858031,14466608,14140466,13748788,13422648,13030972,12704833,12378438,12052044,11791187,11530331]),cool:Rn("Cool","sequential","Cool, sequential color scheme from D3.js",[7225514,7095217,6899639,6769597,6574275,6313160,6117837,5856977,5596117,5335513,5009115,4748510,4422368,4161761,3835361,3575009,3314401,3053791,2793438,2598363,2337752,2208213,2013137,1883340,1819335,1755074,1691068,1692086,1758640,1825706,1957795,2155164,2352790,2615695,2878601,3207042,3600764,3994230,4453489,4912492,5437031,5961315,6551391,7140956,7730778,8386136,8975703,9630807,10285911,10940761,11530331]),"cubehelix-default":Rn("CubehelixDefault","sequential","CubehelixDefault, sequential color scheme from D3.js",[0,525064,984594,1313308,1576742,1709360,1776697,1712705,1649479,1520715,1457486,1394254,1396557,1529674,1662534,2057794,2518076,3109175,3765555,4618288,5536047,6519343,7568178,8550967,9599551,10516809,11368789,12155235,12745329,13270146,13663891,13861539,13928371,13929921,13800654,13606106,13411811,13217514,12957935,12829170,12700403,12768243,12835826,13099761,13428976,13823727,14349039,14939888,15530483,16186616,16777215]),rainbow:Rn("Rainbow","cyclical","Rainbow, cyclical color scheme from D3.js",[7225514,8208303,9322162,10370483,11484338,12532911,13581737,14434210,15352473,16074382,16665475,16732790,16734826,16737117,16739409,16742471,16745277,16748598,16162097,15575598,14858031,14140466,13422648,12704833,12052044,11530331,10285911,8975703,7730777,6485855,5437031,4453489,3600764,2878601,2352790,1957795,1758896,1691068,1819335,2013137,2337752,2793438,3314401,3835617,4422368,5009115,5596117,6117837,6574275,6899639,7225514]),sinebow:Rn("Sinebow","cyclical","Sinebow, cyclical color scheme from D3.js",[16728128,16666162,16473382,16149788,15695122,15174923,14458117,13740802,12892928,11978752,10999043,9953287,8972813,7860757,6879262,5831722,4849463,3931972,3079507,2357858,1635442,1109378,648082,317858,118193,49087,111053,303833,561890,1081837,1602292,2319098,3036157,3884287,4798463,5778172,6823928,7804402,8916458,9897952,10945493,11927752,12845243,13697708,14419357,15141773,15667837,16129133,16459357,16659022,16728128]),"category-10":Rn("Category10","qualitative","Category10, categorical color scheme from D3.js / tab10 from Matplotlib (default in Matplotlib)",[2062260,16744206,2924588,14034728,9725885,9197131,14907330,8355711,12369186,1556175]),"observable-10":Rn("Observable10","qualitative","Observable10, categorical color scheme from D3.js",[4352464,15708440,16740956,7128496,3975505,16747191,10773490,9944053,10251086,9738400]),"tableau-10":Rn("Tableau10","qualitative","Tableau10, categorical color scheme from D3.js",[5142951,15896108,14767961,7780274,5873999,15583561,11500193,16752039,10253663,12234923]),"simple-rainbow":Rn("Simple rainbow","sequential","Simple 5-color rainbow (blue-green-yellow-orange-red)",[3367393,3516485,16383744,15501073,12526114]),"red-white-blue":Rn("Red-White-Blue","diverging","Diverging color scheme with red-white-blue",[12526114,16777215,3367393]),"many-distinct":Rn("Many-Distinct","qualitative","Customized color scheme combining colors from multiple standard schemes (Dark2, Set1, Set2)",[1810039,14245634,7696563,15149450,6727198,15117058,10909213,6710886,14948892,3636920,5091146,9981603,16744192,16777011,10901032,16220607,10066329,6734501,16551266,9281739,15174339,10934356,16767279,15058068,11776947])},Sje=Object.keys(Kr),CG=Sje.map(e=>[e,Kr[e].label,wu(Kr[e].type),Kr[e].description]),hG=CG.filter(e=>Kr[e[0]].type==="sequential"||Kr[e[0]].type==="diverging"||Kr[e[0]].type==="cyclical"),Due=CG.filter(e=>Kr[e[0]].type==="qualitative");function ns(e){return e in Kr?Kr[e]:(console.warn(`unknown color list named '${e}'`),Kr["red-yellow-blue"])}function Ba(e){return{kind:"table-legend",table:e}}function vue(e,t,r){return{kind:"scale-legend",minLabel:e,maxLabel:t,colors:r}}var Dje={domain:[0,1],reverse:!1,listOrName:"red-yellow-blue",minLabel:"",maxLabel:""},oa;(A=>{function e(s){return r(s,"continuous")}A.create=e;function t(s){return r(s,"discrete")}A.createDiscrete=t;function r(s,c){let{domain:l,reverse:u,listOrName:g}={...Dje,...s},m=typeof g=="string"?ns(g).list:g,p=u?m.slice().reverse():m,d=0,f=0,I=0;function C(x,S){f=x,I=S,d=I-f||1}C(l[0],l[1]);let y=AA(s.minLabel,f.toString()),Q=AA(s.maxLabel,I.toString()),E;if(p.every(x=>Array.isArray(x))){let x=[...p];x.sort((T,L)=>T[1]-L[1]);let S=x.map(T=>T[0]),w=je.ofSortedArray(x.map(T=>T[1])),R=S.length-1;switch(c){case"continuous":E=T=>n(T,S,w,f,R,d);break;case"discrete":E=T=>i(T,S,w,f,R,d);break}}else switch(c){case"continuous":E=x=>o(x,p,f,d);break;case"discrete":E=x=>a(x,p,f,I,d);break}return{color:E,colorToArray:(x,S,w)=>{ke.toArray(E(x),S,w)},normalizedColorToArray:(x,S,w)=>{ke.toArrayNormalized(E(x),S,w)},setDomain:C,get legend(){return vue(y,Q,p)}}}function n(s,c,l,u,g,m){let p=$t((s-u)/m,0,1),d=je.findPredecessorIndex(l,p);if(d===0)return c[0];if(d>g)return c[g];let f=l[d-1],I=l[d],C=$t((p-f)/(I-f),0,1);return ke.interpolate(c[d-1],c[d],C)}function o(s,c,l,u){let g=Math.min(c.length-1,Math.max(0,(s-l)/u*(c.length-1))),m=Math.floor(g),p=c[m],d=c[Math.ceil(g)];return ke.interpolate(p,d,g-m)}function i(s,c,l,u,g,m){if(c.length===0)return ke.fromRgb(0,0,0);let p=$t((s-u)/m,0,1),d=je.findPredecessorIndex(l,p);return d===0?c[0]:d>g?c[g]:c[d]}function a(s,c,l,u,g){if(c.length===0)return ke.fromRgb(0,0,0);let m=g/c.length;if(s<=l)return c[0];if(s>=u)return c[c.length-1];let p=Math.min(c.length-1,Math.floor((s-l)/m));return c[p]}})(oa||={});var Mz=new Set(["145","147","149","289","291","293","445","475","491","510","604","045","05L","07E","07Y","08U","09X","0AT","0BD","0H0","0HX","0LP","0MK","0NZ","0TS","0UB","0V4","0WK","0XY","0YT","10M","12E","14T","15L","16F","16G","16O","17T","18D","18O","18T","1AR","1BW","1CF","1FT","1GL","1GN","1JB","1LL","1NA","1S3","1S4","1SD","1X4","20S","20X","22O","22S","23V","24S","25E","26M","26O","26Q","26R","26V","26W","26Y","27C","2DG","2DR","2F8","2FG","2FL","2FP","2GL","2GS","2H5","2HA","2M4","2M5","2M8","2OS","2SI","2WP","2WS","32O","34V","38J","3BU","3CM","3DO","3DY","3FM","3GR","3HD","3J3","3J4","3LJ","3LR","3MF","3MG","3MK","3R3","3S6","3SA","3YW","40J","42D","44S","46D","46M","46Z","48Z","49A","49S","49T","49V","4AM","4CQ","4GC","4GL","4GP","4JA","4N2","4NN","4QY","4R1","4RS","4SG","4U0","4U1","4U2","4UZ","4V5","50A","51N","56N","57S","5DI","5GF","5GO","5II","5KQ","5KS","5KT","5KV","5L2","5L3","5LS","5LT","5MM","5N6","5QP","5RP","5SA","5SP","5TH","5TJ","5TK","5TM","61J","62I","64K","66O","6BG","6C2","6DM","6GB","6GP","6GR","6K3","6KH","6KL","6KS","6KU","6KW","6LA","6LS","6LW","6MJ","6MN","6PG","6PY","6PZ","6S2","6SA","6UD","6Y6","6YR","6ZC","73E","79J","7CV","7D1","7GP","7JZ","7K2","7K3","7NU","7SA","83Y","89Y","8B7","8B9","8EX","8GA","8GG","8GP","8I4","8LM","8LR","8OQ","8PK","8S0","8YV","95Z","96O","98U","9AM","9C1","9CD","9GP","9KJ","9MR","9OK","9PG","9QG","9QZ","9RN","9S7","9SG","9SJ","9SM","9SP","9T1","9T7","9VP","9WJ","9WN","9WZ","9YW","A0K","A1AIO","A1APB","A1APC","A1APD","A1CCV","A1CCW","A1CF3","A1CF4","A1CWR","A1E3E","A1EAX","A1EFW","A1EGT","A1EGV","A1EGW","A1EGX","A1EGY","A1EJ0","A1EJ2","A1EKO","A1EN6","A1H03","A1H0P","A1H0Z","A1H10","A1H1B","A1H1F","A1H1V","A1I0J","A1I0L","A1I9U","A1ID6","A1IH4","A1IVP","A1IZL","A1JAQ","A1JUC","A1L1P","A1Q","A2G","A5C","A6P","AAL","AAO","ABC","ABD","ABE","ABF","ABL","AC1","ACG","ACR","ACX","ADA","ADG","ADR","AF1","AFD","AFL","AFO","AFP","AFR","AGC","AGH","AGL","AGR","AH2","AH8","AHG","AHM","AHR","AIG","ALL","ALX","AMG","AMN","AMU","AMV","ANA","AOG","AOS","AQA","ARA","ARB","ARE","ARI","ARW","ASC","ASG","ASO","AXP","AXR","AY9","AZC","B0D","B16","B1H","B1N","B2G","B4G","B6D","B7G","B8D","B9D","BBK","BBV","BCD","BCW","BDF","BDG","BDP","BDR","BDZ","BEM","BFN","BFP","BG6","BG8","BGC","BGL","BGN","BGP","BGS","BHG","BM3","BM7","BMA","BMX","BND","BNG","BNX","BO1","BOG","BQY","BRI","BS7","BTG","BTU","BW3","BWG","BXF","BXP","BXX","BXY","BZD","C3B","C3G","C3X","C4B","C4W","C4X","C5X","CAP","CBF","CBI","CBK","CDR","CE5","CE6","CE8","CEG","CEX","CEY","CEZ","CGF","CJB","CKB","CKP","CNP","CR1","CR6","CRA","CT3","CTO","CTR","CTT","D0N","D1M","D5E","D6G","DAF","DAG","DAN","DDA","DDB","DDL","DEG","DEL","DFR","DFX","DG0","DGC","DGD","DGM","DGO","DGS","DGU","DIG","DJB","DJE","DK4","DKX","DKZ","DL6","DLD","DLF","DLG","DMU","DNO","DO8","DOM","DP5","DPC","DQQ","DQR","DR2","DR3","DR4","DR5","DRI","DSR","DT6","DVC","DYM","E3M","E4P","E5G","EAG","EBG","EBQ","ED6","EEN","EEQ","EGA","EJT","EMP","EMZ","EPG","EQP","EQV","ERE","ERI","ETT","EUS","F1P","F1X","F55","F58","F6P","F8X","FBP","FCA","FCB","FCT","FDP","FDQ","FFC","FFX","FIF","FIX","FK9","FKD","FMF","FMO","FNG","FNY","FRU","FSA","FSI","FSM","FSR","FSW","FU4","FUB","FUC","FUD","FUF","FUL","FUY","FVQ","FX1","FYJ","G0S","G16","G1P","G20","G28","G2F","G3F","G3I","G4D","G4S","G6D","G6P","G6S","G7P","G8Z","GAA","GAC","GAD","GAF","GAL","GAT","GBH","GC1","GC4","GC9","GCB","GCD","GCN","GCO","GCS","GCT","GCU","GCV","GCW","GDA","GDL","GE1","GE3","GFP","GIV","GL0","GL1","GL2","GL4","GL5","GL6","GL7","GL9","GLA","GLB","GLC","GLD","GLF","GLG","GLO","GLP","GLS","GLT","GLW","GM0","GMB","GMH","GMT","GMZ","GN1","GN4","GNS","GNX","GP0","GP1","GP4","GPH","GPK","GPM","GPO","GPQ","GPU","GPV","GPW","GQ1","GRF","GRX","GS1","GS4","GS9","GSA","GSD","GTE","GTH","GTK","GTM","GTR","GU0","GU1","GU2","GU3","GU4","GU5","GU6","GU8","GU9","GUF","GUL","GUP","GUZ","GXL","GXV","GYE","GYG","GYP","GYU","GYV","GZL","H1M","H1S","H2P","H3S","H53","H6Q","H6Z","HBZ","HD4","HDL","HLA","HMS","HNV","HNW","HSG","HSH","HSJ","HSQ","HSR","HSU","HSX","HSY","HSZ","HTG","HTM","HVC","I57","IAB","IDC","IDF","IDG","IDR","IDS","IDT","IDU","IDX","IDY","IEM","IN1","IPT","ISD","ISL","ISX","IVG","IXD","J5B","JFZ","JHM","JLT","JRV","JS2","JSV","JV4","JVA","JVS","JZR","K5B","K99","KBA","KBG","KD5","KDA","KDB","KDD","KDE","KDF","KDM","KDN","KDO","KDR","KFN","KG1","KGM","KHP","KME","KO1","KO2","KOT","KQC","KTU","L1L","L6N","L6S","L6T","LAG","LAH","LAI","LAK","LAO","LAT","LB2","LBS","LBT","LCN","LDY","LEC","LER","LFC","LFR","LGC","LGU","LKA","LKS","LM2","LMO","LMT","LMU","LNV","LOG","LOX","LPK","LRH","LSM","LTG","LTM","LVO","LVZ","LXB","LXC","LXZ","LZ0","M1F","M1P","M2F","M3M","M3N","M55","M6D","M6P","M7B","M7P","M8C","MA1","MA2","MA3","MA8","MAB","MAF","MAG","MAL","MAN","MAT","MAV","MAW","MBE","MBF","MBG","MCU","MDA","MDP","MFA","MFB","MFU","MG5","MGA","MGC","MGL","MGS","MJJ","MLB","MLR","MMA","MMN","MN0","MNA","MQG","MQT","MRH","MRP","MSX","MTT","MUB","MUG","MUR","MVP","MXY","MXZ","MYG","N1L","N3U","N9S","NA1","NAA","NAG","NBG","NBX","NBY","NDG","NED","NFG","NG1","NG6","NGA","NGB","NGC","NGE","NGF","NGK","NGL","NGR","NGS","NGY","NGZ","NHF","NLC","NM6","NM9","NNG","NOJ","NPF","NSQ","NT1","NTF","NTO","NTP","NXD","NYT","O1G","OAK","OEL","OI7","OPM","ORP","OSU","OTG","OTN","OTU","OX2","P53","P6P","P8E","PA1","PA5","PAV","PDX","PH5","PKM","PNA","PNG","PNJ","PNW","PPC","PRP","PSG","PSJ","PSV","PTQ","PUF","PZU","QDK","QIF","QKH","QPS","QV4","R1P","R1X","R2B","R2G","R5P","RAA","RAE","RAF","RAM","RAO","RAT","RB5","RBL","RCD","RDP","REL","RER","RF5","RG1","RGG","RHA","RHC","RI2","RIB","RIP","RM4","RNS","RNT","ROB","ROR","RP3","RP5","RP6","RPA","RR7","RRJ","RRY","RST","RTG","RTV","RUB","RUG","RUU","RV7","RVG","RVM","RWI","RY7","RZM","S6P","S7P","S81","SA0","SCG","SCR","SDD","SDY","SEJ","SF6","SF9","SFJ","SFU","SG4","SG5","SG6","SG7","SGA","SGC","SGD","SGN","SGS","SHB","SHD","SHG","SI3","SIA","SID","SIO","SIZ","SLB","SLM","SLT","SMD","SN5","SNG","SOE","SOG","SOL","SOR","SR1","SSG","SSH","STW","STZ","SUC","SUP","SUS","SWE","SZZ","T68","T6D","T6P","T6T","TA6","TAG","TCB","TCG","TDG","TEU","TF0","TFU","TGA","TGK","TGR","TGY","TH1","TM5","TM6","TM9","TMR","TMX","TNX","TOA","TOC","TQY","TRE","TRV","TS8","TT7","TTV","TTZ","TU4","TUG","TUJ","TUP","TUR","TVD","TVG","TVM","TVS","TVV","TVY","TW7","TWA","TWD","TWG","TWJ","TWY","TXB","TY6","TYV","U1Y","U2A","U2D","U63","U8V","U97","U9A","U9D","U9G","U9J","U9M","UAP","UBH","UBO","UCD","UDC","UEA","V3M","V3P","V71","VDF","VG1","VJ1","VJ4","VPH","VPQ","VTB","W9T","WIA","WKO","WKT","WOO","WT8","WUN","WZ1","WZ2","WZ4","X0X","X1P","X1X","X2F","X2Y","X34","X4S","X5S","X6N","X6X","X6Y","X6Z","XBP","XDP","XDX","XGP","XIL","XIQ","XKJ","XLF","XLS","XMM","XS2","XUL","XXM","XXR","XXX","XY6","XY9","XYB","XYF","XYL","XYP","XYS","XYT","XYZ","Y8W","Y98","YDR","YIO","YJM","YKR","YO5","YX0","YX1","YYB","YYD","YYH","YYJ","YYK","YYM","YYQ","YYR","YZ0","YZT","Z0F","Z15","Z16","Z2D","Z2T","Z3K","Z3L","Z3Q","Z3U","Z4K","Z4R","Z4S","Z4U","Z4V","Z4W","Z4Y","Z57","Z5J","Z5L","Z61","Z6G","Z6H","Z6J","Z6W","Z8H","Z8T","Z9D","Z9E","Z9H","Z9K","Z9L","Z9M","Z9N","Z9W","ZB0","ZB1","ZB2","ZB3","ZCD","ZCZ","ZD0","ZDC","ZDM","ZDO","ZEE","ZEL","ZGE","ZMR","UMQ","SQD"]);var Rr={Blue:37052,Green:42577,Yellow:16765952,Orange:16021792,Pink:16162465,Purple:10830745,LightBlue:9424105,Brown:10582605,Red:15539236,Secondary:15854817};var vje={0:0,1:1,2:2,3:3,4:4,5:5,6:6,7:7,8:8,9:9,10:10,11:11};function Fue(e,t){return e===10?t===4?12:t===5?13:t===6?14:t===7?15:10:vje[e]}var yG={abbr:"Unk",name:"Unknown",color:Rr.Secondary,type:10},KS=[{abbr:"Glc",name:"Glucose",color:Rr.Blue,type:0},{abbr:"Man",name:"Mannose",color:Rr.Green,type:0},{abbr:"Gal",name:"Galactose",color:Rr.Yellow,type:0},{abbr:"Gul",name:"Gulose",color:Rr.Orange,type:0},{abbr:"Alt",name:"Altrose",color:Rr.Pink,type:0},{abbr:"All",name:"Allose",color:Rr.Purple,type:0},{abbr:"Tal",name:"Talose",color:Rr.LightBlue,type:0},{abbr:"Ido",name:"Idose",color:Rr.Brown,type:0},{abbr:"GlcNAc",name:"N-Acetyl Glucosamine",color:Rr.Blue,type:1},{abbr:"ManNAc",name:"N-Acetyl Mannosamine",color:Rr.Green,type:1},{abbr:"GalNAc",name:"N-Acetyl Galactosamine",color:Rr.Yellow,type:1},{abbr:"GulNAc",name:"N-Acetyl Gulosamine",color:Rr.Orange,type:1},{abbr:"AltNAc",name:"N-Acetyl Altrosamine",color:Rr.Pink,type:1},{abbr:"AllNAc",name:"N-Acetyl Allosamine",color:Rr.Purple,type:1},{abbr:"TalNAc",name:"N-Acetyl Talosamine",color:Rr.LightBlue,type:1},{abbr:"IdoNAc",name:"N-Acetyl Idosamine",color:Rr.Brown,type:1},{abbr:"GlcN",name:"Glucosamine",color:Rr.Blue,type:2},{abbr:"ManN",name:"Mannosamine",color:Rr.Green,type:2},{abbr:"GalN",name:"Galactosamine",color:Rr.Yellow,type:2},{abbr:"GulN",name:"Gulosamine",color:Rr.Orange,type:2},{abbr:"AltN",name:"Altrosamine",color:Rr.Pink,type:2},{abbr:"AllN",name:"Allosamine",color:Rr.Purple,type:2},{abbr:"TalN",name:"Talosamine",color:Rr.LightBlue,type:2},{abbr:"IdoN",name:"Idosamine",color:Rr.Brown,type:2},{abbr:"GlcNS",name:"N-sulfo Glucosamine",color:Rr.Blue,type:2},{abbr:"GlcA",name:"Glucuronic Acid",color:Rr.Blue,type:3},{abbr:"ManA",name:"Mannuronic Acid",color:Rr.Green,type:3},{abbr:"GalA",name:"Galacturonic Acid",color:Rr.Yellow,type:3},{abbr:"GulA",name:"Guluronic Acid",color:Rr.Orange,type:3},{abbr:"AltA",name:"Altruronic Acid",color:Rr.Pink,type:3},{abbr:"AllA",name:"Alluronic Acid",color:Rr.Purple,type:3},{abbr:"TalA",name:"Taluronic Acid",color:Rr.LightBlue,type:3},{abbr:"IdoA",name:"Iduronic Acid",color:Rr.Brown,type:3},{abbr:"Qui",name:"Quinovose",color:Rr.Blue,type:4},{abbr:"Rha",name:"Rhamnose",color:Rr.Green,type:4},{abbr:"6dGul",name:"6-Deoxy Gulose",color:Rr.Orange,type:4},{abbr:"6dAlt",name:"6-Deoxy Altrose",color:Rr.Pink,type:4},{abbr:"6dTal",name:"6-Deoxy Talose",color:Rr.LightBlue,type:4},{abbr:"Fuc",name:"Fucose",color:Rr.Red,type:4},{abbr:"QuiNAc",name:"N-Acetyl Quinovosamine",color:Rr.Blue,type:5},{abbr:"RhaNAc",name:"N-Acetyl Rhamnosamine",color:Rr.Green,type:5},{abbr:"6dAltNAc",name:"N-Acetyl 6-Deoxy Altrosamine",color:Rr.Pink,type:5},{abbr:"6dTalNAc",name:"N-Acetyl 6-Deoxy Talosamine",color:Rr.LightBlue,type:5},{abbr:"FucNAc",name:"N-Acetyl Fucosamine",color:Rr.Red,type:5},{abbr:"AAT",name:"AAT",color:Rr.Red,type:5},{abbr:"Oli",name:"Olivose",color:Rr.Blue,type:6},{abbr:"Tyv",name:"Tyvelose",color:Rr.Green,type:6},{abbr:"Abe",name:"Abequose",color:Rr.Orange,type:6},{abbr:"Par",name:"Paratose",color:Rr.Pink,type:6},{abbr:"Dig",name:"Digitoxose",color:Rr.Purple,type:6},{abbr:"Col",name:"Colitose",color:Rr.LightBlue,type:6},{abbr:"Ara",name:"Arabinose",color:Rr.Green,type:7},{abbr:"Lyx",name:"Lyxose",color:Rr.Yellow,type:7},{abbr:"Xyl",name:"Xylose",color:Rr.Orange,type:7},{abbr:"Rib",name:"Ribose",color:Rr.Pink,type:7},{abbr:"Kdn",name:"Keto-Deoxy Nonulonic Acid",color:Rr.Green,type:8},{abbr:"Neu5Ac",name:"N-Acetyl Neuraminic Acid",color:Rr.Purple,type:8},{abbr:"Neu5Gc",name:"N-Glycolyl Neuraminic Acid",color:Rr.LightBlue,type:8},{abbr:"Neu",name:"Neuraminic Acid",color:Rr.Brown,type:8},{abbr:"Sia",name:"Sialic acid",color:Rr.Red,type:8},{abbr:"Pse",name:"Pseudaminic Acid",color:Rr.Green,type:9},{abbr:"Leg",name:"Legionaminic Acid",color:Rr.Yellow,type:9},{abbr:"Aci",name:"Acinetaminic Acid",color:Rr.Pink,type:9},{abbr:"4eLeg",name:"4-Epilegionaminic Acid",color:Rr.LightBlue,type:9},{abbr:"Bac",name:"Bacillosamine",color:Rr.Blue,type:10},{abbr:"LDmanHep",name:"L-Glycero-D-Manno Heptose",color:Rr.Green,type:10},{abbr:"Kdo",name:"Keto-Deoxy Octulonic Acid",color:Rr.Yellow,type:10},{abbr:"Dha",name:"3-Deoxy Lyxo-Heptulosaric Acid",color:Rr.Orange,type:10},{abbr:"DDmanHep",name:"D-Glycero-D-Manno-Heptose",color:Rr.Pink,type:10},{abbr:"MurNAc",name:"N-Acetyl Muramic Acid",color:Rr.Purple,type:10},{abbr:"MurNGc",name:"N-Glycolyl Muramic Acid",color:Rr.LightBlue,type:10},{abbr:"Mur",name:"Muramic Acid",color:Rr.Brown,type:10},{abbr:"K3O",name:"D-glycero-a-D-talo-oct-2-Ulosonic Acid",color:Rr.Red,type:10},{abbr:"dUA",name:"4-deoxy-4,5-didehydro iduronic acid",color:Rr.Secondary,type:10},{abbr:"Api",name:"Apicose",color:Rr.Green,type:11},{abbr:"Fru",name:"Fructose",color:Rr.Green,type:11},{abbr:"Tag",name:"Tagatose",color:Rr.Yellow,type:11},{abbr:"Sor",name:"Sorbose",color:Rr.Orange,type:11},{abbr:"Psi",name:"Psicose",color:Rr.Pink,type:11}],wue=(function(){let e=new Map;for(let t=0,r=KS.length;t<r;++t){let n=KS[t];e.set(n.abbr,n)}return e})(),Rue=[["Glc-family",Rr.Blue],["Man-family",Rr.Green],["Gal-family",Rr.Yellow],["Gul-family",Rr.Orange],["Alt-family",Rr.Pink],["All-family",Rr.Purple],["Tal-family",Rr.LightBlue],["Ido-family",Rr.Brown],["Fuc-family",Rr.Red],["Generic/Unknown/Secondary",Rr.Secondary]],Uue={Glc:["GLC","BGC","Z8T","TRE","MLR"],Man:["MAN","BMA"],Gal:["GLA","GAL","GZL","GXL","GIV"],Gul:["4GL","GL0","GUP","Z8H"],Alt:["Z6H","3MK","SHD"],All:["AFD","ALL","WOO","Z2D"],Tal:["ZEE","A5C","SDY"],Ido:["ZCD","Z0F","4N2"],GlcNAc:["NDG","NAG","NGZ"],ManNAc:["BM3","BM7"],GalNAc:["A2G","NGA","YYQ"],GulNAc:["LXB"],AltNAc:[],AllNAc:["NAA"],TalNAc:[],IdoNAc:["LXZ","HSQ"],GlcN:["PA1","GCS"],ManN:["95Z"],GalN:["X6X","1GN"],GulN:[],AltN:[],AllN:[],TalN:[],IdoN:[],GlcA:["GCU","BDP"],ManA:["MAV","BEM"],GalA:["ADA","GTR","GTK"],GulA:["LGU"],AltA:[],AllA:[],TalA:["X1X","X0X"],IdoA:["IDR"],Qui:["G6D","YYK"],Rha:["RAM","RM4","XXR"],"6dGul":["66O"],"6dAlt":[],"6dTal":[],Fuc:["FUC","FUL","FCA","FCB","GYE"],QuiNAc:["Z9W"],RhaNAc:[],"6dAltNAc":[],"6dTalNAc":[],FucNAc:["49T"],Oli:["DDA","RAE","Z5J"],Tyv:["TYV"],Abe:["ABE"],Par:["PZU"],Dig:["Z3U"],Col:[],Ara:["64K","ARA","ARB","AHR","FUB","BXY","BXX","SEJ"],Lyx:["LDY","Z4W"],Xyl:["XYS","XYP","XYZ","HSY","LXC"],Rib:["YYM","RIP","RIB","BDR","0MK","Z6J","32O"],Kdn:["KDM","KDN"],Neu5Ac:["SIA","SLB"],Neu5Gc:["NGC","NGE"],Neu:[],Sia:[],Pse:[],Leg:[],Aci:[],"4eLeg":[],Bac:[],LDmanHep:["GMH"],Kdo:["KDO"],Dha:[],DDmanHep:["289"],MurNAc:["MUB","AMU"],MurNGc:[],Mur:["1S4","MUR"],Api:["XXM"],Fru:["BDF","Z9N","FRU","LFR"],Tag:["T6T"],Sor:["SOE","UEA"],Psi:["PSV","SF6","SF9","TTV"]},Lue={Glc:["AGLC","BGLC"],GlcNAc:["AGLCNA","BGLCNA","BGLCN0"],GlcA:["AGLCA","BGLCA","BGLCA0"],Man:["AMAN","BMAN"],Rha:["ARHM","BRHM"],Ara:["AARB","BARB"],Gal:["AGAL","BGAL"],GalNAc:["AGALNA","BGALNA"],Gul:["AGUL","BGUL"],Alt:["AALT","BALT"],All:["AALL","BALL"],Tal:["ATAL","BTAL"],Ido:["AIDO","BIDO"],IdoA:["AIDOA","BIDOA"],Fuc:["AFUC","BFUC"],Lyx:["ALYF","BLYF"],Xyl:["AXYL","BXYL","AXYF","BXYF"],Rib:["ARIB","BRIB"],Fru:["AFRU","BFRU"],Neu5Ac:["ANE5AC","BNE5AC"]},Fje={Glc:["0GA","0GB","1GA","1GB","2GA","2GB","3GA","3GB","4GA","4GB","6GA","6GB","ZGA","ZGB","YGA","YGB","XGA","XGB","WGA","WGB","VGA","VGB","UGA","UGB","TGA","TGB","SGA","SGB","RGA","RGB","QGA","QGB","PGA","PGB","0gA","0gB","1gA","1gB","2gA","2gB","3gA","3gB","4gA","4gB","6gA","6gB","ZgA","ZgB","YgA","YgB","XgA","XgB","WgA","WgB","VgA","VgB","UgA","UgB","TgA","TgB","SgA","SgB","RgA","RgB","QgA","QgB","PgA","PgB"],GlcNAc:["0YA","0YB","1YA","1YB","3YA","3YB","4YA","4YB","6YA","6YB","WYA","WYB","VYA","VYB","UYA","UYB","QYA","QYB","0yA","0yB","1yA","1yB","3yA","3yB","4yA","4yB","6yA","6yB","WyA","WyB","VyA","VyB","UyA","UyB","QyA","QyB","0YS","0Ys","3YS","3Ys","4YS","4Ys","6YS","6Ys","QYS","QYs","UYS","UYs","VYS","VYs","WYS","WYs","0yS","0ys","3yS","3ys","4yS","4ys"],GlcA:["0ZA","0ZB","1ZA","1ZB","2ZA","2ZB","3ZA","3ZB","4ZA","4ZB","ZZA","ZZB","YZA","YZB","WZA","WZB","TZA","TZB","0zA","0zB","1zA","1zB","2zA","2zB","3zA","3zB","4zA","4zB","ZzA","ZzB","YzA","YzB","WzA","WzB","TzA","TzB","TZBP","WZBP","YZBP","4ZBP","ZZBP","3ZBP","2ZBP","1ZBP","0ZBP","0ZF","1ZF","4ZF","0Zf","1Zf","4Zf"],GlcN:["0YN","3YN","4YN","6YN","WYN","VYN","UYN","QYN","3Yn","4Yn","WYn","0Yn","0YP","3YP","4YP","6YP","WYP","VYP","UYP","QYP","0Yp","3Yp","4Yp","WYp","QYN","WYN","VYN","3YN","UYN","4YN","6YN","1YN","0YN","QYn","VYn","WYn","3Yn","UYn","6Yn","4Yn","1Yn","0Yn","QYNP","WYNP","VYNP","3YNP","UYNP","4YNP","6YNP","1YNP","0YNP","QYnP","UYnP","VYnP","6YnP","WYnP","4YnP","3YnP","1YnP","0YnP"],Man:["0MA","0MB","1MA","1MB","2MA","2MB","3MA","3MB","4MA","4MB","6MA","6MB","ZMA","ZMB","YMA","YMB","XMA","XMB","WMA","WMB","VMA","VMB","UMA","UMB","TMA","TMB","SMA","SMB","RMA","RMB","QMA","QMB","PMA","PMB","0mA","0mB","1mA","1mB","2mA","2mB","3mA","3mB","4mA","4mB","6mA","6mB","ZmA","ZmB","YmA","YmB","XmA","XmB","WmA","WmB","VmA","VmB","UmA","UmB","TmA","TmB","SmA","SmB","RmA","RmB","QmA","QmB","PmA","PmB"],ManNAc:["0WA","0WB","1WA","1WB","3WA","3WB","4WA","4WB","6WA","6WB","WWA","WWB","VWA","VWB","UWA","UWB","QWA","QWB","0wA","0wB","1wA","1wB","3wA","3wB","4wA","4wB","6wA","6wB","WwA","WwB","VwA","VwB","UwA","UwB","QwA","QwB"],Ara:["0AA","0AB","1AA","1AB","2AA","2AB","3AA","3AB","4AA","4AB","ZAA","ZAB","YAA","YAB","WAA","WAB","TAA","TAB","0AD","0AU","1AD","1AU","2AD","2AU","3AD","3AU","5AD","5AU","ZAD","ZAU","0aA","0aB","1aA","1aB","2aA","2aB","3aA","3aB","4aA","4aB","ZaA","ZaB","YaA","YaB","WaA","WaB","TaA","TaB","0aD","0aU","1aD","1aU","2aD","2aU","3aD","3aU","5aD","5aU","ZaD","ZaU"],Gal:["0LA","0LB","1LA","1LB","2LA","2LB","3LA","3LB","4LA","4LB","6LA","6LB","ZLA","ZLB","YLA","YLB","XLA","XLB","WLA","WLB","VLA","VLB","ULA","ULB","TLA","TLB","SLA","SLB","RLA","RLB","QLA","QLB","PLA","PLB","0lA","0lB","1lA","1lB","2lA","2lB","3lA","3lB","4lA","4lB","6lA","6lB","ZlA","ZlB","YlA","YlB","XlA","XlB","WlA","WlB","VlA","VlB","UlA","UlB","TlA","TlB","SlA","SlB","RlA","RlB","QlA","QlB","PlA","PlB"],GalNAc:["0VA","0VB","1VA","1VB","3VA","3VB","4VA","4VB","6VA","6VB","WVA","WVB","VVA","VVB","UVA","UVB","QVA","QVB","0vA","0vB","1vA","1vB","3vA","3vB","4vA","4vB","6vA","6vB","WvA","WvB","VvA","VvB","UvA","UvB","QvA","QvB"],GalA:["0OA","0OB","1OA","1OB","2OA","2OB","3OA","3OB","4OA","4OB","ZOA","ZOB","YOA","YOB","WOA","WOB","TOA","TOB","0oA","0oB","1oA","1oB","2oA","2oB","3oA","3oB","4oA","4oB","ZoA","ZoB","YoA","YoB","WoA","WoB","ToA","ToB"],Gul:["0KA","0KB","1KA","1KB","2KA","2KB","3KA","3KB","4KA","4KB","6KA","6KB","ZKA","ZKB","YKA","YKB","XKA","XKB","WKA","WKB","VKA","VKB","UKA","UKB","TKA","TKB","SKA","SKB","RKA","RKB","QKA","QKB","PKA","PKB","0kA","0kB","1kA","1kB","2kA","2kB","3kA","3kB","4kA","4kB","6kA","6kB","ZkA","ZkB","YkA","YkB","XkA","XkB","WkA","WkB","VkA","VkB","UkA","UkB","TkA","TkB","SkA","SkB","RkA","RkB","QkA","QkB","PkA","PkB"],Alt:["0EA","0EB","1EA","1EB","2EA","2EB","3EA","3EB","4EA","4EB","6EA","6EB","ZEA","ZEB","YEA","YEB","XEA","XEB","WEA","WEB","VEA","VEB","UEA","UEB","TEA","TEB","SEA","SEB","REA","REB","QEA","QEB","PEA","PEB","0eA","0eB","1eA","1eB","2eA","2eB","3eA","3eB","4eA","4eB","6eA","6eB","ZeA","ZeB","YeA","YeB","XeA","XeB","WeA","WeB","VeA","VeB","UeA","UeB","TeA","TeB","SeA","SeB","ReA","ReB","QeA","QeB","PeA","PeB"],All:["0NA","0NB","1NA","1NB","2NA","2NB","3NA","3NB","4NA","4NB","6NA","6NB","ZNA","ZNB","YNA","YNB","XNA","XNB","WNA","WNB","VNA","VNB","UNA","UNB","TNA","TNB","SNA","SNB","RNA","RNB","QNA","QNB","PNA","PNB","0nA","0nB","1nA","1nB","2nA","2nB","3nA","3nB","4nA","4nB","6nA","6nB","ZnA","ZnB","YnA","YnB","XnA","XnB","WnA","WnB","VnA","VnB","UnA","UnB","TnA","TnB","SnA","SnB","RnA","RnB","QnA","QnB","PnA","PnB"],Tal:["0TA","0TB","1TA","1TB","2TA","2TB","3TA","3TB","4TA","4TB","6TA","6TB","ZTA","ZTB","YTA","YTB","XTA","XTB","WTA","WTB","VTA","VTB","UTA","UTB","TTA","TTB","STA","STB","RTA","RTB","QTA","QTB","PTA","PTB","0tA","0tB","1tA","1tB","2tA","2tB","3tA","3tB","4tA","4tB","6tA","6tB","ZtA","ZtB","YtA","YtB","XtA","XtB","WtA","WtB","VtA","VtB","UtA","UtB","TtA","TtB","StA","StB","RtA","RtB","QtA","QtB","PtA","PtB"],Ido:["0IA","0IB","1IA","1IB","2IA","2IB","3IA","3IB","4IA","4IB","6IA","6IB","ZIA","ZIB","YIA","YIB","XIA","XIB","WIA","WIB","VIA","VIB","UIA","UIB","TIA","TIB","SIA","SIB","RIA","RIB","QIA","QIB","PIA","PIB","0iA","0iB","1iA","1iB","2iA","2iB","3iA","3iB","4iA","4iB","6iA","6iB","ZiA","ZiB","YiA","YiB","XiA","XiB","WiA","WiB","ViA","ViB","UiA","UiB","TiA","TiB","SiA","SiB","RiA","RiB","QiA","QiB","PiA","PiB"],IdoA:["0UA","0UB","1UA","1UB","2UA","2UB","3UA","3UB","4UA","4UB","ZUA","ZUB","YUA","YUB","WUA","WUB","TUA","TUB","0uA","0uB","1uA","1uB","2uA","2uB","3uA","3uB","4uA","4uB","ZuA","ZuB","YuA","YuB","WuA","WuB","TuA","TuB","YuAP"],Fuc:["0FA","0FB","1FA","1FB","2FA","2FB","3FA","3FB","4FA","4FB","ZFA","ZFB","YFA","YFB","WFA","WFB","TFA","TFB","0fA","0fB","1fA","1fB","2fA","2fB","3fA","3fB","4fA","4fB","ZfA","ZfB","YfA","YfB","WfA","WfB","TfA","TfB"],Rha:["0HA","0HB","1HA","1HB","2HA","2HB","3HA","3HB","4HA","4HB","ZHA","ZHB","YHA","YHB","WHA","WHB","THA","THB","0hA","0hB","1hA","1hB","2hA","2hB","3hA","3hB","4hA","4hB","ZhA","ZhB","YhA","YhB","WhA","WhB","ThA","ThB"],Qui:["0QA","0QB","1QA","1QB","2QA","2QB","3QA","3QB","4QA","4QB","ZQA","ZQB","YQA","YQB","WQA","WQB","TQA","TQB","0qA","0qB","1qA","1qB","2qA","2qB","3qA","3qB","4qA","4qB","ZqA","ZqB","YqA","YqB","WqA","WqB","TqA","TqB"],Lyx:["0DA","0DB","1DA","1DB","2DA","2DB","3DA","3DB","4DA","4DB","ZDA","ZDB","YDA","YDB","WDA","WDB","TDA","TDB","0DD","0DU","1DD","1DU","2DD","2DU","3DD","3DU","5DD","5DU","ZDD","ZDU","0dA","0dB","1dA","1dB","2dA","2dB","3dA","3dB","4dA","4dB","ZdA","ZdB","YdA","YdB","WdA","WdB","TdA","TdB","0dD","0dU","1dD","1dU","2dD","2dU","3dD","3dU","5dD","5dU","ZdD","ZdU"],Xyl:["0XA","0XB","1XA","1XB","2XA","2XB","3XA","3XB","4XA","4XB","ZXA","ZXB","YXA","YXB","WXA","WXB","TXA","TXB","0XD","0XU","1XD","1XU","2XD","2XU","3XD","3XU","5XD","5XU","ZXD","ZXU","0xA","0xB","1xA","1xB","2xA","2xB","3xA","3xB","4xA","4xB","ZxA","ZxB","YxA","YxB","WxA","WxB","TxA","TxB","0xD","0xU","1xD","1xU","2xD","2xU","3xD","3xU","5xD","5xU","ZxD","ZxU"],Rib:["0RA","0RB","1RA","1RB","2RA","2RB","3RA","3RB","4RA","4RB","ZRA","ZRB","YRA","YRB","WRA","WRB","TRA","TRB","0RD","0RU","1RD","1RU","2RD","2RU","3RD","3RU","5RD","5RU","ZRD","ZRU","0rA","0rB","1rA","1rB","2rA","2rB","3rA","3rB","4rA","4rB","ZrA","ZrB","YrA","YrB","WrA","WrB","TrA","TrB","0rD","0rU","1rD","1rU","2rD","2rU","3rD","3rU","5rD","5rU","ZrD","ZrU"],Fru:["0CA","0CB","1CA","1CB","2CA","2CB","3CA","3CB","4CA","4CB","5CA","5CB","WCA","WCB","0CD","0CU","1CD","1CU","2CD","2CU","3CD","3CU","4CD","4CU","6CD","6CU","WCD","WCU","VCD","VCU","UCD","UCU","QCD","QCU","0cA","0cB","1cA","1cB","2cA","2cB","3cA","3cB","4cA","4cB","5cA","5cB","WcA","WcB","0cD","0cU","1cD","1cU","2cD","2cU","3cD","3cU","4cD","4cU","6cD","6cU","WcD","WcU","VcD","VcU","UcD","UcU","QcD","QcU"],Tag:["0JA","0JB","1JA","1JB","2JA","2JB","3JA","3JB","4JA","4JB","5JA","5JB","WJA","WJB","0JD","0JU","1JD","1JU","2JD","2JU","3JD","3JU","4JD","4JU","6JD","6JU","WJD","WJU","VJD","VJU","UJD","UJU","QJD","QJU","0jA","0jB","1jA","1jB","2jA","2jB","3jA","3jB","4jA","4jB","5jA","5jB","WjA","WjB","0jD","0jU","1jD","1jU","2jD","2jU","3jD","3jU","4jD","4jU","6jD","6jU","WjD","WjU","VjD","VjU","UjD","UjU","QjD","QjU"],Sor:["0BA","0BB","1BA","1BB","2BA","2BB","3BA","3BB","4BA","4BB","5BA","5BB","WBA","WBB","0BD","0BU","1BD","1BU","2BD","2BU","3BD","3BU","4BD","4BU","6BD","6BU","WBD","WBU","VBD","VBU","UBD","UBU","QBD","QBU","0bA","0bB","1bA","1bB","2bA","2bB","3bA","3bB","4bA","4bB","5bA","5bB","WbA","WbB","0bD","0bU","1bD","1bU","2bD","2bU","3bD","3bU","4bD","4bU","6bD","6bU","WbD","WbU","VbD","VbU","UbD","UbU","QbD","QbU"],Psi:["0PA","0PB","1PA","1PB","2PA","2PB","3PA","3PB","4PA","4PB","5PA","5PB","WPA","WPB","0PD","0PU","1PD","1PU","2PD","2PU","3PD","3PU","4PD","4PU","6PD","6PU","WPD","WPU","VPD","VPU","UPD","UPU","QPD","QPU","0pA","0pB","1pA","1pB","2pA","2pB","3pA","3pB","4pA","4pB","5pA","5pB","WpA","WpB","0pD","0pU","1pD","1pU","2pD","2pU","3pD","3pU","4pD","4pU","6pD","6pU","WpD","WpU","VpD","VpU","UpD","UpU","QpD","QpU"],Neu5Ac:["0SA","0SB","4SA","4SB","7SA","7SB","8SA","8SB","9SA","9SB","ASA","ASB","BSA","BSB","CSA","CSB","DSA","DSB","ESA","ESB","FSA","FSB","GSA","GSB","HSA","HSB","ISA","ISB","JSA","JSB","KSA","KSB","0sA","0sB","4sA","4sB","7sA","7sB","8sA","8sB","9sA","9sB","AsA","AsB","BsA","BsB","CsA","CsB","DsA","DsB","EsA","EsB","FsA","FsB","GsA","GsB","HsA","HsB","IsA","IsB","JsA","JsB","KsA","KsB"],Neu5Gc:["0GL","4GL","7GL","8GL","9GL","CGL","DGL","EGL","FGL","GGL","HGL","IGL","JGL","KGL","0gL","4gL","7gL","8gL","9gL","AgL","BgL","CgL","DgL","EgL","FgL","GgL","HgL","IgL","JgL","KgL"],Tyv:["YTV","4TV","2TV","1TV","0TV","YTv","4Tv","2Tv","1Tv","0Tv"],Abe:["YAE","2AE","4AE","1AE","0AE","YAe","4Ae","2Ae","1Ae","0Ae"],Bac:["0BC","1BC","3BC","0bC","1bC","3bC"],Kdn:["0KN","4KN","5KN","7KN","8KN","9KN","AKN","BKN","CKN","DKN","EKN","FKN","GKN","HKN","IKN","JKN","KKN","LKN","MKN","NKN","OKN","PKN","QKN","RKN","SKN","TKN","UKN","VKN","WKN","XKN","YKN","0Kn","4Kn","5Kn","7Kn","8Kn","9Kn","AKn","BKn","CKn","DKn","EKn","FKn","GKn","HKn","IKn","JKn","KKn","LKn","MKn","NKn","OKn","PKn","QKn","RKn","SKn","TKn","UKn","VKn","WKn","XKn","YKn"],Kdo:["0KO","4KO","5KO","7KO","8KO","AKO","BKO","CKO","DKO","EKO","FKO","GKO","HKO","IKO","JKO","KKO","0Ko","4Ko","5Ko","7Ko","8Ko","AKo","BKo","CKo","DKo","EKo","FKo","GKo","HKo","IKo","JKo","KKo"],QuiNAc:["0QF","1QF","3QF","0Qf","1Qf","3Qf"],AAT:["0FC","1FC","3FC","0Fc","1Fc","3Fc"],Ara4N:["ZaN","3aN","2aN","1aN","0aN","Zan","3an","2an","1an","0an"],Aci:["JeC","8eC","4eC","2eC","0eC","Jec","8ec","4ec","2ec","0ec"],Leg:["JLG","8LG","4LG","2LG","0LG","JLg","8Lg","4Lg","2Lg","0Lg"],Pse:["JmP","8mP","4mP","2mP","0mP","Jmp","8mp","4mp","2mp","0mp"],Fus:["EgF","HgF","JgF","8gF","KgF","7gF","4gF","2gF","0gF","Egf","Hgf","Jgf","8gf","Kgf","7gf","4gf","2gf","0gf"],DDmanpHep:["ODH","NDH","LDH","MDH","KDH","7DH","PDH","SDH","RDH","XDH","QDH","VDH","UDH","6DH","TDH","ZDH","YDH","2DH","WDH","3DH","4DH","1DH","ODh","NDh","LDh","MDh","KDh","7Dh","PDh","SDh","RDh","XDh","QDh","VDh","UDh","6Dh","TDh","ZDh","YDh","2Dh","WDh","3Dh","4Dh","1Dh"],LDmanpHep:["OLH","NLH","LLH","MLH","KLH","7LH","PLH","SLH","RLH","XLH","QLH","VLH","ULH","6LH","TLH","ZLH","YLH","2LH","WLH","3LH","4LH","1LH","OLh","NLh","LLh","MLh","KLh","7Lh","PLh","SLh","RLh","XLh","QLh","VLh","ULh","6Lh","TLh","ZLh","YLh","2Lh","WLh","3Lh","4Lh","1Lh"],K3O:["dKX","EKX","hKX","HKX","jKX","JKX","pKX","8KX","MKX","kKX","KKX","qKX","7KX","xKX","WKX","tKX","3KX","sKX","4KX","5KX","2KX","0KX","dKx","EKx","hKx","HKx","jKx","JKx","pKx","8Kx","MKx","kKx","KKx","qKx","7Kx","xKx","WKx","tKx","3Kx","sKx","4Kx","5Kx","2Kx","0Kx"],MurNAc:["UMR","4MR","6MR","1MR","0MR","UMr","4Mr","6Mr","1Mr","0Mr"],Oli:["WdR","4dR","3dR","1dR","0dR"],dUA:["Z45","345","245","145","045"],GlcNS:["QYS","UYS","VYS","6YS","WYS","4YS","3YS","1YS","0YS","QYs","UYs","VYs","6Ys","WYs","4Ys","3Ys","1Ys","0Ys","QyS","UyS","VyS","6yS","WyS","4yS","3yS","1yS","0yS","Qys","Uys","Vys","6ys","Wys","4ys","3ys","1ys","0ys"]},Tue=(function(){let e=new Map;for(let t=0,r=KS.length;t<r;++t){let n=KS[t],o=Uue[n.abbr];if(o)for(let a=0,A=o.length;a<A;++a)e.set(o[a],n);let i=Lue[n.abbr];if(i)for(let a=0,A=i.length;a<A;++a)e.set(i[a],n)}return Mz.forEach(t=>{e.has(t)||e.set(t,yG)}),e})(),wje=(function(){let e=new Map;for(let t=0,r=KS.length;t<r;++t){let n=KS[t],o=Uue[n.abbr];if(o)for(let A=0,s=o.length;A<s;++A)e.set(o[A],n);let i=Lue[n.abbr];if(i)for(let A=0,s=i.length;A<s;++A)e.set(i[A],n);let a=Fje[n.abbr];if(a)for(let A=0,s=a.length;A<s;++A)e.has(a[A])||e.set(a[A],n)}return Mz.forEach(t=>{e.has(t)||e.set(t,yG)}),e})();function Pue(e){Zd=e==="default"?Tue:wje}var Zd=Tue;var lo;(g=>{function e(m){return Array.from(m.values())}g.toArray=e;function t(m,p){if(m===p)return!0;if(m.size<p.size)return!1;for(let d of p)if(!m.has(d))return!1;return!0}g.isSuperset=t;function r(m,...p){for(let d=0;d<p.length;d++)for(let f of p[d])m.add(f);return m}g.add=r;function n(m,p){let d=new Set(m);if(m===p)return d;for(let f of p)d.add(f);return d}g.union=n;function o(...m){if(m.length===0)return new Set;let p=new Set(m[0]);for(let d=1,f=m.length;d<f;d++)for(let I of m[d])p.add(I);return p}g.unionMany=o;function i(m){if(m.length===0)return new Set;let p=new Set(m[0]);for(let d=1;d<m.length;d++)for(let f of m[d])p.add(f);return p}g.unionManyArrays=i;function a(m,p){if(m===p)return new Set(m);let d=new Set;for(let f of p)m.has(f)&&d.add(f);return d}g.intersection=a;function A(m,p){if(m===p)return m.size>0;m.size<p.size&&([m,p]=[p,m]);for(let d of p)if(m.has(d))return!0;return!1}g.areIntersecting=A;function s(m,p){if(m===p)return m.size;m.size<p.size&&([m,p]=[p,m]);let d=0;for(let f of p)m.has(f)&&(d+=1);return d}g.intersectionSize=s;function c(m,p){if(m===p)return new Set;let d=new Set(m);for(let f of p)d.delete(f);return d}g.difference=c;function l(m,p){if(m===p)return 0;let d=m.size;for(let f of m)p.has(f)&&(d-=1);return d}g.differenceSize=l;function u(m,p){if(m===p)return!0;if(m.size!==p.size)return!1;for(let d of p)if(!m.has(d))return!1;return!0}g.areEqual=u})(lo||={});var kz=new Set(["DAPC","DBPC","DFPC","DGPC","DIPC","DLPC","DNPC","DOPC","DPPC","DRPC","DTPC","DVPC","DXPC","DYPC","LPPC","PAPC","PEPC","PGPC","PIPC","POPC","PRPC","PUPC","DAPE","DBPE","DFPE","DGPE","DIPE","DLPE","DNPE","DOPE","DPPE","DRPE","DTPE","DUPE","DVPE","DXPE","DYPE","LPPE","PAPE","PGPE","PIPE","POPE","PQPE","PRPE","PUPE","DAPS","DBPS","DFPS","DGPS","DIPS","DLPS","DNPS","DOPS","DPPS","DRPS","DTPS","DUPS","DVPS","DXPS","DYPS","LPPS","PAPS","PGPS","PIPS","POPS","PQPS","PRPS","PUPS","DAPA","DBPA","DFPA","DGPA","DIPA","DLPA","DNPA","DOPA","DPPA","DRPA","DTPA","DVPA","DXPA","DYPA","LPPA","PAPA","PGPA","PIPA","POPA","PRPA","PUPA","DAPG","DBPG","DFPG","DGPG","DIPG","DLPG","DNPG","DOPG","DPPG","DRPG","DTPG","DVPG","DXPG","DYPG","LPPG","PAPG","PGPG","PIPG","POPG","PRPG","DMPC","DPP","DPPI","PAPI","PIPI","POP","POPI","PUPI","PVP","PVPI","PADG","PIDG","PODG","PUDG","PVDG","APC","CPC","IPC","LPC","OPC","PPC","TPC","UPC","VPC","BNSM","DBSM","DPSM","DXSM","PGSM","PNSM","POSM","PVSM","XNSM","DPCE","DXCE","PNCE","XNCE","PA","ST","OL","LEO","LEN","AR","DHA","PC","PE","PS","PH-","P2-","PGR","PGS","PI","CHL"]);var Hz=new Set(["118","119","543","1AL","1CU","2FK","2HP","2OF","3CO","3MT","3NI","3OF","3P8","4MO","4PU","4TI","6MO","ACT","AG","AL","ALF","AM","ATH","AU","AU3","AUC","AZI","BA","BCT","BEF","BF4","BO4","BR","BS3","BSY","CA","CAC","CD","CD1","CD3","CD5","CE","CF","CHT","CL","CO","CO3","CO5","CON","CR","CS","CSB","CU","CU1","CU3","CUA","CUZ","CYN","DME","DMI","DSC","DTI","DY","E4N","EDR","EMC","ER3","EU","EU3","F","FE","FE2","FPO","GA","GD3","GEP","HAI","HG","HGC","IN","IOD","IR","IR3","IRI","IUM","K","KO4","LA","LCO","LCP","LI","LU","MAC","MG","MH2","MH3","MLI","MMC","MN","MN3","MN5","MN6","MO1","MO2","MO3","MO4","MO5","MO6","MOO","MOS","MOW","MW1","MW2","MW3","NA","NA2","NA5","NA6","NAO","NAW","ND","NET","NH4","NI","NI1","NI2","NI3","NO2","NO3","NRU","NT3","O4M","OAA","OC1","OC2","OC3","OC4","OC5","OC6","OC7","OC8","OCL","OCM","OCN","OCO","OF1","OF2","OF3","OH","OS","OS4","OXL","PB","PBM","PD","PDV","PER","PI","PO3","PO4","PR","PT","PT4","PTN","RB","RH3","RHD","RHF","RU","SB","SCN","SE4","SEK","SM","SMO","SO3","SO4","SR","T1A","TB","TBA","TCN","TEA","TH","THE","TL","TMA","TRA","UNX","V","VN3","VO4","W","WO5","Y1","YB","YB2","YH","YT3","ZCM","ZN","ZN2","ZN3","ZNO","ZO3","ZR","ZTM","NCO","OHX"]);var Rje=(function(){let e=Object.create(null),t=[];for(let r=65;r<=90;r++)t[t.length]=String.fromCharCode(r);for(let r=97;r<=122;r++)t[t.length]=String.fromCharCode(r);for(let r=48;r<=57;r++)t[t.length]=String.fromCharCode(r);for(let r of t){e[r]=r.toUpperCase();for(let n of t){e[r+n]=(r+n).toUpperCase();for(let o of t)e[r+n+o]=(r+n+o).toUpperCase()}}return e})();function qd(e){return Rje[e]||e.toUpperCase()}var Gue=new Map([[1,"H"],[2,"He"],[3,"Li"],[4,"Be"],[5,"B"],[6,"C"],[7,"N"],[8,"O"],[9,"F"],[10,"Ne"],[11,"Na"],[12,"Mg"],[13,"Al"],[14,"Si"],[15,"P"],[16,"S"],[17,"Cl"],[18,"Ar"],[19,"K"],[20,"Ca"],[21,"Sc"],[22,"Ti"],[23,"V"],[24,"Cr"],[25,"Mn"],[26,"Fe"],[27,"Co"],[28,"Ni"],[29,"Cu"],[30,"Zn"],[31,"Ga"],[32,"Ge"],[33,"As"],[34,"Se"],[35,"Br"],[36,"Kr"],[37,"Rb"],[38,"Sr"],[39,"Y"],[40,"Zr"],[41,"Nb"],[42,"Mo"],[43,"Tc"],[44,"Ru"],[45,"Rh"],[46,"Pd"],[47,"Ag"],[48,"Cd"],[49,"In"],[50,"Sn"],[51,"Sb"],[52,"Te"],[53,"I"],[54,"Xe"],[55,"Cs"],[56,"Ba"],[57,"La"],[58,"Ce"],[59,"Pr"],[60,"Nd"],[61,"Pm"],[62,"Sm"],[63,"Eu"],[64,"Gd"],[65,"Tb"],[66,"Dy"],[67,"Ho"],[68,"Er"],[69,"Tm"],[70,"Yb"],[71,"Lu"],[72,"Hf"],[73,"Ta"],[74,"W"],[75,"Re"],[76,"Os"],[77,"Ir"],[78,"Pt"],[79,"Au"],[80,"Hg"],[81,"Tl"],[82,"Pb"],[83,"Bi"],[84,"Po"],[85,"At"],[86,"Rn"],[87,"Fr"],[88,"Ra"],[89,"Ac"],[90,"Th"],[91,"Pa"],[92,"U"],[93,"Np"],[94,"Pu"],[95,"Am"],[96,"Cm"],[97,"Bk"],[98,"Cf"],[99,"Es"],[100,"Fm"],[101,"Md"],[102,"No"],[103,"Lr"],[104,"Rf"],[105,"Db"],[106,"Sg"],[107,"Bh"],[108,"Hs"],[109,"Mt"],[110,"Ds"],[111,"Rg"],[112,"Cn"],[113,"Uut"],[114,"Fl"],[115,"Uup"],[116,"Lv"],[117,"Uus"],[118,"Uuo"]].map(e=>[e[0],qd(e[1])]));function Vz(e){return Gue.has(e)?Gue.get(e):qd("H")}var Nue=(i=>(i[i.unknown=0]="unknown",i[i.polymer=1]="polymer",i[i["non-polymer"]=2]="non-polymer",i[i.macrolide=3]="macrolide",i[i.water=4]="water",i[i.branched=5]="branched",i))(Nue||{}),Za=(l=>(l[l.Unknown=0]="Unknown",l[l.Other=1]="Other",l[l.Water=2]="Water",l[l.Ion=3]="Ion",l[l.Lipid=4]="Lipid",l[l.Protein=5]="Protein",l[l.RNA=6]="RNA",l[l.DNA=7]="DNA",l[l.PNA=8]="PNA",l[l.Saccharide=9]="Saccharide",l))(Za||{}),a2=(A=>(A[A.NA=0]="NA",A[A.Protein=1]="Protein",A[A.GammaProtein=2]="GammaProtein",A[A.BetaProtein=3]="BetaProtein",A[A.RNA=4]="RNA",A[A.DNA=5]="DNA",A[A.PNA=6]="PNA",A))(a2||{}),_z={0:{trace:new Set,directionFrom:new Set,directionTo:new Set,backboneStart:new Set,backboneEnd:new Set,coarseBackbone:new Set},1:{trace:new Set(["CA"]),directionFrom:new Set(["C"]),directionTo:new Set(["O","OC1","O1","OX1","OXT","OT1"]),backboneStart:new Set(["N"]),backboneEnd:new Set(["C"]),coarseBackbone:new Set(["CA","CA1","BB","BAS"])},2:{trace:new Set(["CA"]),directionFrom:new Set(["C"]),directionTo:new Set(["O"]),backboneStart:new Set(["N"]),backboneEnd:new Set(["CD"]),coarseBackbone:new Set(["CA"])},3:{trace:new Set(["CA"]),directionFrom:new Set(["C"]),directionTo:new Set(["O"]),backboneStart:new Set(["N"]),backboneEnd:new Set(["CG"]),coarseBackbone:new Set(["CA"])},4:{trace:new Set(["O3'","O3*"]),directionFrom:new Set(["C4'","C4*"]),directionTo:new Set(["C3'","C3*"]),backboneStart:new Set(["P"]),backboneEnd:new Set(["O3'","O3*"]),coarseBackbone:new Set(["P"])},5:{trace:new Set(["O3'","O3*"]),directionFrom:new Set(["C3'","C3*"]),directionTo:new Set(["C1'","C1*"]),backboneStart:new Set(["P"]),backboneEnd:new Set(["O3'","O3*"]),coarseBackbone:new Set(["P"])},6:{trace:new Set(["N4'","N4*"]),directionFrom:new Set(["N4'","N4*"]),directionTo:new Set(["C7'","C7*"]),backboneStart:new Set(["N1'","N1*"]),backboneEnd:new Set(["C'","C*"]),coarseBackbone:new Set(["P"])}},Uu=new Set(["CA","C","N","O","O1","O2","OC1","OC2","OT1","OT2","OX1","OXT","H","H1","H2","H3","HA","HN","HXT","CA1","BB","BAS"]),th=new Set(["P","OP1","OP2","HOP2","HOP3","O2'","O3'","O4'","O5'","C1'","C2'","C3'","C4'","C5'","H1'","H2'","H2''","HO2'","H3'","H4'","H5'","H5''","HO3'","HO5'","O2*","O3*","O4*","O5*","C1*","C2*","C3*","C4*","C5*"]),Yz=new Set(["CA","CA1","BB","BAS","O3'","O3*","N4'","N4*"]),Oz=new Set(["d-peptide linking","d-peptide nh3 amino terminus","d-peptide cooh carboxy terminus","d-gamma-peptide, c-delta linking","d-beta-peptide, c-gamma linking"]),Jz=new Set(["l-peptide linking","l-peptide nh3 amino terminus","l-peptide cooh carboxy terminus","l-gamma-peptide, c-delta linking","l-beta-peptide, c-gamma linking"]),Mue=new Set(["d-gamma-peptide, c-delta linking","l-gamma-peptide, c-delta linking"]),kue=new Set(["d-beta-peptide, c-gamma linking","l-beta-peptide, c-gamma linking"]),Hue=new Set(["d-peptide nh3 amino terminus","d-peptide cooh carboxy terminus","l-peptide nh3 amino terminus","l-peptide cooh carboxy terminus"]),zz=new Set(["peptide linking","peptide-like"]),Vue=lo.unionMany(Oz,Jz,zz),Kz=new Set(["dna linking","l-dna linking","dna oh 5 prime terminus","dna oh 3 prime terminus"]),jz=new Set(["rna linking","l-rna linking","rna oh 5 prime terminus","rna oh 3 prime terminus"]),Wz=lo.unionMany(new Set(["d-saccharide, beta linking","l-saccharide, beta linking","d-saccharide, alpha linking","l-saccharide, alpha linking","l-saccharide","d-saccharide","saccharide"]),new Set(["d-saccharide 1,4 and 1,4 linking","l-saccharide 1,4 and 1,4 linking","d-saccharide 1,4 and 1,6 linking","l-saccharide 1,4 and 1,6 linking"])),_ue=new Set(["non-polymer","other"]),Yue=new Set(["ion"]),Oue=new Set(["lipid"]),Wb=new Set(["SOL","WAT","HOH","H2O","W","DOD","D3O","TIP","TIP3","TIP4","SPC"]),A2=new Set(["HIS","ARG","LYS","ILE","PHE","LEU","TRP","ALA","MET","PRO","CYS","ASN","VAL","GLY","SER","GLN","TYR","ASP","GLU","THR","SEC","PYL","UNK","MSE","SEP","TPO","PTR","PCA","HYP","HSD","HSE","HSP","LSN","ASPP","GLUP","HID","HIE","HIP","LYN","ASH","GLH"]),Xz=new Set(["DAL","DAR","DSG","DAS","DCY","DGL","DGN","DHI","DIL","DLE","DLY","MED","DPN","DPR","DSN","DTH","DTR","DTY","DVA","DNE"]),zy=lo.unionMany(A2,Xz),Zz=new Set(["NME","ACE","NH2","FOR","FMT"]),Xb=new Set(["A","C","T","G","I","U","N"]),Zb=new Set(["DA","DC","DT","DG","DI","DU","DN"]),QG=new Set(["APN","CPN","TPN","GPN"]),Jue=new Set(["A","G","I","DA","DG","DI","APN","GPN"]),zue=new Set(["C","T","U","DC","DT","DU","CPN","TPN"]),Ky=lo.unionMany(Xb,Zb,QG),qz=e=>Jue.has(e.toUpperCase()),$z=e=>zue.has(e.toUpperCase()),$B=lo.unionMany(zy,Ky);function Yc(e,t){return t=t.toUpperCase(),QG.has(t)?8:Vue.has(e)?5:jz.has(e)?6:Kz.has(e)?7:Wz.has(e)?9:Wb.has(t)?2:Hz.has(t)?3:kz.has(t)?4:_ue.has(e)?Zd.has(t)?9:zy.has(t)?5:Xb.has(t)?6:Zb.has(t)?7:1:0}function eK(e,t){return t===5?Mue.has(e)?2:kue.has(e)?3:Hue.has(e)?0:1:t===6?4:t===7?5:t===8?6:0}function jS(e){return e=e.toUpperCase(),zy.has(e)?"peptide linking":Xb.has(e)?"rna linking":Zb.has(e)?"dna linking":Zd.has(e)?"saccharide":"other"}function tK(e){return{formula:"",formula_weight:0,id:e,name:e,mon_nstd_flag:$B.has(e)?"y":"n",pdbx_synonyms:[],type:jS(e)}}function rK(e){return e=e.toUpperCase(),Wb.has(e)?"water":$B.has(e)?"polymer":Zd.has(e)?"branched":"non-polymer"}function nK(e,t){return e=e.toUpperCase(),Jz.has(t)?"polypeptide(L)":Oz.has(t)?"polypeptide(D)":jz.has(t)?"polyribonucleotide":Kz.has(t)?"polydeoxyribonucleotide":Wz.has(t)||Zd.has(e)?"oligosaccharide":QG.has(e)?"peptide nucleic acid":A2.has(e)?"polypeptide(L)":Xz.has(e)?"polypeptide(D)":Xb.has(e)?"polyribonucleotide":Zb.has(e)?"polydeoxyribonucleotide":Yue.has(t)||Hz.has(e)?"ion":Oue.has(t)||kz.has(e)?"lipid":zz.has(t)?"peptide-like":"other"}function rh(e){return qa(e)||EG(e)}function qa(e){return e===7||e===6||e===8}function EG(e){return e===5}var vr;(A=>{A.is=hA.has,A.create=hA.create;let r;(M=>(M[M.None=0]="None",M[M.DoubleHelix=1]="DoubleHelix",M[M.Helix=2]="Helix",M[M.Beta=4]="Beta",M[M.Bend=8]="Bend",M[M.Turn=16]="Turn",M[M.LeftHanded=32]="LeftHanded",M[M.RightHanded=64]="RightHanded",M[M.ClassicTurn=128]="ClassicTurn",M[M.InverseTurn=256]="InverseTurn",M[M.HelixOther=512]="HelixOther",M[M.Helix27=1024]="Helix27",M[M.Helix3Ten=2048]="Helix3Ten",M[M.HelixAlpha=4096]="HelixAlpha",M[M.HelixGamma=8192]="HelixGamma",M[M.HelixOmega=16384]="HelixOmega",M[M.HelixPi=32768]="HelixPi",M[M.HelixPolyproline=65536]="HelixPolyproline",M[M.DoubleHelixOther=131072]="DoubleHelixOther",M[M.DoubleHelixZ=262144]="DoubleHelixZ",M[M.DoubleHelixA=524288]="DoubleHelixA",M[M.DoubleHelixB=1048576]="DoubleHelixB",M[M.BetaOther=2097152]="BetaOther",M[M.BetaStrand=4194304]="BetaStrand",M[M.BetaSheet=8388608]="BetaSheet",M[M.BetaBarell=16777216]="BetaBarell",M[M.TurnOther=33554432]="TurnOther",M[M.Turn1=67108864]="Turn1",M[M.Turn2=134217728]="Turn2",M[M.Turn3=268435456]="Turn3",M[M.NA=536870912]="NA"))(r=A.Flag||={}),A.SecondaryStructureMmcif={helx_lh_27_p:1058,helx_lh_3t_p:2082,helx_lh_al_p:4130,helx_lh_a_n:524321,helx_lh_b_n:1048609,helx_lh_ga_p:8226,helx_lh_n:33,helx_lh_om_p:16418,helx_lh_ot_n:131105,helx_lh_ot_p:546,helx_lh_p:34,helx_lh_pi_p:32802,helx_lh_pp_p:65570,helx_lh_z_n:262177,helx_n:1,helx_ot_n:1,helx_ot_p:2,helx_p:2,helx_rh_27_p:1090,helx_rh_3t_p:2114,helx_rh_al_p:4162,helx_rh_a_n:524353,helx_rh_b_n:1048641,helx_rh_ga_p:8258,helx_rh_n:65,helx_rh_om_p:16450,helx_rh_ot_n:131137,helx_rh_ot_p:578,helx_rh_p:66,helx_rh_pi_p:32834,helx_rh_pp_p:65602,helx_rh_z_n:262209,strn:4194308,turn_ot_p:33554448,turn_p:16,turn_ty1p_p:67109136,turn_ty1_p:67109008,turn_ty2p_p:134218e3,turn_ty2_p:134217872,turn_ty3p_p:268435728,turn_ty3_p:268435600,bend:8,other:0},A.SecondaryStructurePdb={1:4162,2:16450,3:32834,4:8258,5:2114,6:4130,7:16418,8:8226,9:1026,10:65538},A.SecondaryStructureStride={H:4098,G:2050,I:32770,E:8388612,B:4194308,T:16,C:536870912},A.SecondaryStructureDssp={H:4098,B:4194308,E:8388612,G:2050,I:32770,T:16,S:8}})(vr||={});var Uje={ALA:121,ARG:265,ASN:187,ASP:187,CYS:148,GLU:214,GLN:214,GLY:97,HIS:216,ILE:195,LEU:191,LYS:230,MET:203,PHE:228,PRO:154,SER:143,THR:163,TRP:264,TYR:255,VAL:165,HSD:216,HSE:216,HSP:216,HID:216,HIE:216,HIP:216,ASH:187,GLH:214},Lje=121,It;(c=>{c.is=hA.has;let t;(I=>(I[I.None=0]="None",I[I.Covalent=1]="Covalent",I[I.MetallicCoordination=2]="MetallicCoordination",I[I.HydrogenBond=4]="HydrogenBond",I[I.Disulfide=8]="Disulfide",I[I.Aromatic=16]="Aromatic",I[I.Computed=32]="Computed"))(t=c.Flag||={});function r(l){return hA.create(l)}c.create=r;function n(l){return(l&1)!==0}c.isCovalent=n;function o(l){return l===Math.pow(2,6)-1}c.isAll=o,c.Names={covalent:1,"metal-coordination":2,"hydrogen-bond":4,disulfide:8,aromatic:16,computed:32};function a(l){return l in c.Names}c.isName=a;function A(l){switch(l){case"covalent":return 1;case"metal-coordination":return 2;case"hydrogen-bond":return 4;case"disulfide":return 8;case"aromatic":return 16;case"computed":return 32}}c.fromName=A;function s(l){let u=0;for(let g=0,m=l.length;g<m;++g)u|=A(l[g]);return u}c.fromNames=s})(It||={});var s2={ALA:[.17,.5,.33],ARG:[.81,1.81,1],ASN:[.42,.85,.43],ASP:[1.23,3.64,2.41],ASH:[-.07,.43,.5],CYS:[-.24,-.02,.22],GLN:[.58,.77,.19],GLU:[2.02,3.63,1.61],GLH:[-.01,.11,.12],GLY:[.01,1.15,1.14],HIS:[.17,.11,-.06],ILE:[-.31,-1.12,-.81],LEU:[-.56,-1.25,-.69],LYS:[.99,2.8,1.81],MET:[-.23,-.67,-.44],PHE:[-1.13,-1.71,-.58],PRO:[.45,.14,-.31],SER:[.13,.46,.33],THR:[.14,.25,.11],TRP:[-1.85,-2.09,-.24],TYR:[-.94,-.71,.23],VAL:[.07,-.46,-.53],HSD:[.17,.11,-.06],HSE:[.17,.11,-.06],HSP:[.96,2.33,1.37],HID:[.17,.11,-.06],HIE:[.17,.11,-.06],HIP:[.96,2.33,1.37]},Tje=[0,0,0];function Pje(e,t,r,n){let o=new fa.EdgeBuilder(n,e,t),i=new Int32Array(o.slotCount),a=new Array(o.slotCount),A=new Array(o.slotCount),s=new Int8Array(o.slotCount),c=new Array(o.slotCount),l=new Array(o.slotCount);for(let u=0,g=o.edgeCount;u<g;u++)o.addNextEdge(),o.assignProperty(i,r.key?r.key[u]:-1),o.assignDirectedProperty(a,r.operatorA?r.operatorA[u]:-1,A,r.operatorB?r.operatorB[u]:-1),o.assignProperty(s,r.order?r.order[u]:1),o.assignProperty(c,r.distance?r.distance[u]:-1),o.assignProperty(l,r.flag?r.flag[u]:It.Flag.Covalent);return o.createGraph({key:i,operatorA:a,operatorB:A,order:s,distance:c,flag:l})}var Hi;(i=>{i.Descriptor={name:"index_pair_bonds"},i.Provider=Ws.create(i.Descriptor,{asDynamic:!0}),i.DefaultProps={maxDistance:-1,cacheable:!0};function n(a,A={}){let s={...i.DefaultProps,...A},{pairs:c,count:l}=a,u=c.indexA.toArray(),g=c.indexB.toArray(),m=c.key&&c.key.toArray(),p=c.operatorA&&c.operatorA.toArray(),d=c.operatorB&&c.operatorB.toArray(),f=c.order&&c.order.toArray(),I=c.distance&&c.distance.toArray(),C=c.flag&&c.flag.toArray(),y=!1;if(p&&d){y=!0;for(let b=0,x=p.length;b<x;++b)if(p[b]===-1||d[b]===-1){y=!1;break}}let Q=Pje(u,g,{key:m,operatorA:p,operatorB:d,order:f,distance:I,flag:C},l),E=new Map;if(y){let{operatorA:b,operatorB:x}=Q.edgeProps;for(let S=0,w=b.length;S<w;++S)if(b[S]===x[S]){let R=b[S];E.has(R)?E.get(R).push(S):E.set(R,[S])}}return{bonds:Q,maxDistance:s.maxDistance,cacheable:s.cacheable,hasOperators:y,bySameOperator:E}}i.fromData=n;function o(a,A,s,c,l){let u,g,m,p;A<s?(u=A,g=s,m=c,p=l):(u=s,g=A,m=l,p=c);for(let d=a.offset[u],f=a.offset[u+1];d<f;d++)if(a.b[d]===g&&a.edgeProps.operatorA[d]===m&&a.edgeProps.operatorB[d]===p)return d;return-1}i.getEdgeIndexForOperators=o})(Hi||={});function ia(e){return e}(t=>{function e(r){return r.__key||(r.__key=Hn.create22()),r.__key}t.getUUID=e})(ia||={});var bA=class{constructor(){this._list=[];this._set=new Set;this._refs=new Map;this._assets=new Map}get all(){return this._list}add(t){this._set.has(t)||(this._list.push(t),this._set.add(t))}reference(t,r){let n=this._refs.get(t)||0;n+=r?1:-1,this._refs.set(t,Math.max(n,0))}hasReference(t){return(this._refs.get(t)||0)>0}has(t){return this._set.has(t)}assets(t,r){let n=this._assets.get(t);if(n)for(let o of n)o.dispose();r?this._assets.set(t,r):this._assets.delete(t)}dispose(){this._assets.forEach(t=>{for(let r of t)r.dispose()})}};function dr(e){return function(t){return bG(e,t)}}function bG(e,t){let{data:r,indices:n,count:o}=e,{valueType:i}=t,a=i==="str"?A=>r.substring(n[2*A],n[2*A+1]):i==="int"?A=>cl(r,n[2*A],n[2*A+1])||0:A=>Xa(r,n[2*A],n[2*A+1])||0;return{schema:t,__array:void 0,isDefined:!0,rowCount:o,value:a,valueKind:A=>K.ValueKinds.Present,toArray:A=>wa.createAndFillArray(o,a,A),areValuesEqual:iK(e)}}function iK(e){let{data:t,indices:r}=e;return function(n,o){let i=r[2*n],a=r[2*o],A=r[2*n+1]-i;if(A!==r[2*o+1]-a)return!1;for(let s=0;s<A;s++)if(t.charCodeAt(s+i)!==t.charCodeAt(s+a))return!1;return!0}}function Kue(e){let{count:t,indices:r}=e;for(let n=0;n<t;++n)if(r[2*n]!==r[2*n+1])return!1;return!0}function qb(e,t){return{name:t,blocks:e}}function $b(e,t,r,n=[]){return{categoryNames:e,header:r,categories:t,saveFrames:n,getField(o){let[i,a]=o.split(".");return t[i].getField(a||"")}}}function jue(e,t,r){return{categoryNames:e,header:r,categories:t}}function Ua(e,t,r,n){return{rowCount:t,name:e,fieldNames:[...r],getField(o){return n[o]}}}(n=>{function e(o){return{rowCount:0,name:o,fieldNames:[],getField(i){}}}n.empty=e;function t(o,i){let a=Object.keys(i);return{rowCount:a.length>0?i[a[0]].rowCount:0,name:o,fieldNames:a,getField(A){return i[A]}}}n.ofFields=t;function r(o,i){let a={};for(let A of i._columns)a[A]=Lt.ofColumn(i[A]);return t(o,a)}n.ofTable=r})(Ua||={});var Lt;(a=>{function e(A){return t([A])}a.ofString=e;function t(A){let s=A.length,c=m=>{let p=A[m];return!p||p==="."||p==="?"?"":p},l=m=>{let p=A[m];return cl(p,0,p.length)||0},u=m=>{let p=A[m];return Xa(p,0,p.length)||0};return{__array:void 0,binaryEncoding:void 0,isDefined:!0,rowCount:s,str:c,int:l,float:u,valueKind:m=>{let p=A[m],d=p.length;if(d>1)return K.ValueKinds.Present;if(d===0)return K.ValueKinds.NotPresent;let f=p.charCodeAt(0);return f===46?K.ValueKinds.NotPresent:f===63?K.ValueKinds.Unknown:K.ValueKinds.Present},areValuesEqual:(m,p)=>A[m]===A[p],toStringArray:m=>m?wa.createAndFillArray(s,c,m):A,toIntArray:m=>wa.createAndFillArray(s,l,m),toFloatArray:m=>wa.createAndFillArray(s,u,m)}}a.ofStrings=t;function r(A){let s=A.length,c=m=>""+A[m],l=m=>A[m],u=m=>K.ValueKinds.Present,g=m=>!m||m.array&&A instanceof m.array?A:wa.createAndFillArray(s,l,m);return{__array:void 0,binaryEncoding:void 0,isDefined:!0,rowCount:s,str:c,int:l,float:l,valueKind:u,areValuesEqual:(m,p)=>A[m]===A[p],toStringArray:m=>wa.createAndFillArray(s,c,m),toIntArray:g,toFloatArray:g}}a.ofNumbers=r;function n(A){let{data:s,indices:c,count:l}=A,u=d=>{let f=s.substring(c[2*d],c[2*d+1]);return f==="."||f==="?"?"":f},g=d=>cl(s,c[2*d],c[2*d+1])||0,m=d=>Xa(s,c[2*d],c[2*d+1])||0;return{__array:void 0,binaryEncoding:void 0,isDefined:!0,rowCount:l,str:u,int:g,float:m,valueKind:d=>{let f=c[2*d],I=c[2*d+1]-f;if(I>1)return K.ValueKinds.Present;if(I===0)return K.ValueKinds.NotPresent;let C=s.charCodeAt(f);return C===46?K.ValueKinds.NotPresent:C===63?K.ValueKinds.Unknown:K.ValueKinds.Present},areValuesEqual:iK(A),toStringArray:d=>wa.createAndFillArray(l,u,d),toIntArray:d=>wa.createAndFillArray(l,g,d),toFloatArray:d=>wa.createAndFillArray(l,m,d)}}a.ofTokens=n;function o(A){let{rowCount:s,valueKind:c,areValuesEqual:l,isDefined:u}=A,g,m,p;switch(A.schema.valueType){case"float":case"int":g=f=>""+A.value(f),m=A.value,p=A.value;break;case"str":g=A.value,m=f=>{let I=A.value(f);return cl(I,0,I.length)||0},p=f=>{let I=A.value(f);return Xa(I,0,I.length)||0};break;case"list":let{separator:d}=A.schema;g=f=>A.value(f).join(d),m=f=>NaN,p=f=>NaN;break;default:throw new Error(`unsupported valueType '${A.schema.valueType}'`)}return{__array:void 0,binaryEncoding:void 0,isDefined:u,rowCount:s,str:g,int:m,float:p,valueKind:c,areValuesEqual:l,toStringArray:d=>wa.createAndFillArray(s,g,d),toIntArray:d=>wa.createAndFillArray(s,m,d),toFloatArray:d=>wa.createAndFillArray(s,p,d)}}a.ofColumn=o;function i(A,s){return o(K.Undefined(A,s))}a.ofUndefined=i})(Lt||={});function Wue(e,t,r,n){let o=r?0:1;switch(t){case 1:return n==="brackets"?i=>`${e}[${i+o}]`:i=>`${e}_${i+o}`;case 2:return n==="brackets"?(i,a)=>`${e}[${i+o}][${a+o}]`:(i,a)=>`${e}_${i+o}${a+o}`;case 3:return n==="brackets"?(i,a,A)=>`${e}[${i+o}][${a+o}][${A+o}]`:(i,a,A)=>`${e}_${i+o}${a+o}${A+o}`;default:throw new Error("Tensors with rank > 3 or rank 0 are currently not supported.")}}function Xue(e,t,r,n){let o=t.create();if(t.rank===1){let i=t.dimensions[0];for(let a=0;a<i;a++){let A=e.getField(n(a));t.set(o,a,A?A.float(r):0)}}else if(t.rank===2){let i=t.dimensions[0],a=t.dimensions[1];for(let A=0;A<i;A++)for(let s=0;s<a;s++){let c=e.getField(n(A,s));t.set(o,A,s,c?c.float(r):0)}}else if(t.rank===3){let i=t.dimensions[0],a=t.dimensions[1],A=t.dimensions[2];for(let s=0;s<i;s++)for(let c=0;c<a;c++)for(let l=0;l<A;l++){let u=e.getField(n(s,c,l));t.set(o,s,c,l,u?u.float(r):0)}}else throw new Error("Tensors with rank > 3 or rank 0 are currently not supported.");return o}function Zue(e){let t=0,r=!1,n=0;for(let o=0,i=e.rowCount;o<i;o++){if(e.valueKind(o)!==K.ValueKinds.Present){n++;continue}let A=Sce(e.str(o));if(A!==0)if(A===1)t++;else{r=!0;break}}return r||n===e.rowCount?K.Schema.str:t>0?K.Schema.float:K.Schema.int}var c2;(n=>{function e(o){return o.replace(".","_").replace(/\[/,"_").replace(/(\[|\])/g,"")}n.canonical=e;function t(o,i){return e(o)===e(i)}n.equal=t;function r(o,i,a=!1){let A=`${o}${i?`.${i}`:""}`;return a?e(A):A}n.create=r})(c2||={});function $ue(e,t,r){let n={};for(let o of t.blocks)n[o.header]=Oc(e,o,r);return n}function Oc(e,t,r){return Hje(e,t,r)}function om(e,t){return new xG(t,e,!0)}function Gje(e){switch(e.valueType){case"str":return(t,r,n)=>Nje(e,t,t.str,t.toStringArray);case"int":return(t,r,n)=>que(e,t,t.int,t.toIntArray);case"float":return(t,r,n)=>que(e,t,t.float,t.toFloatArray);case"list":throw new Error("Use createListColumn instead.");case"tensor":throw new Error("Use createTensorColumn instead.")}}function Nje(e,t,r,n){return{schema:e,__array:t.__array,isDefined:t.isDefined,rowCount:t.rowCount,value:e.transform==="lowercase"?o=>r(o).toLowerCase():e.transform==="uppercase"?o=>r(o).toUpperCase():r,valueKind:t.valueKind,areValuesEqual:t.areValuesEqual,toArray:e.transform==="lowercase"?o=>Array.from(n(o)).map(i=>i.toLowerCase()):e.transform==="uppercase"?o=>Array.from(n(o)).map(i=>i.toUpperCase()):n}}function que(e,t,r,n){return{schema:e,__array:t.__array,isDefined:t.isDefined,rowCount:t.rowCount,value:r,valueKind:t.valueKind,areValuesEqual:t.areValuesEqual,toArray:n}}function Mje(e,t,r){let n=e.separator,o=e.itemParse,i=t.getField(r),a=i?s=>i.str(s).split(n).map(c=>o(c.trim())).filter(c=>!!c):s=>[],A=s=>wa.createAndFillArray(t.rowCount,a,s);return{schema:e,__array:void 0,isDefined:!!i,rowCount:t.rowCount,value:a,valueKind:i?i.valueKind:()=>K.ValueKinds.NotPresent,areValuesEqual:(s,c)=>Fa(a(s),a(c)),toArray:A}}function kje(e,t,r){let n=e.space,o=t.fieldNames.includes(`${r}[0]`)||t.fieldNames.includes(`${r}[0][0]`)||t.fieldNames.includes(`${r}[0][0][0]`),i=o?0:1,a=t.fieldNames.includes(`${r}_1`)||t.fieldNames.includes(`${r}_11`)||t.fieldNames.includes(`${r}_111`)?"underscore":"brackets",A=Wue(r,n.rank,o,a),s=t.getField(A(i,i,i))||K.Undefined(t.rowCount,e),c=u=>Xue(t,n,u,A),l=u=>wa.createAndFillArray(t.rowCount,c,u);return{schema:e,__array:void 0,isDefined:s.isDefined,rowCount:t.rowCount,value:c,valueKind:s.valueKind,areValuesEqual:(u,g)=>Fr.areEqualExact(c(u),c(g)),toArray:l}}var xG=class{constructor(t,r,n){this._isDefined=n;let o=Object.keys(r);this._rowCount=t.rowCount,this._columns=o,this._schema=r;let i=Object.create(null);for(let a of o)Object.defineProperty(this,a,{get:function(){if(i[a])return i[a];let A=r[a];if(A.valueType==="list")i[a]=Mje(A,t,a);else if(A.valueType==="tensor")i[a]=kje(A,t,a);else{let s=Gje(A),c=t.getField(a);i[a]=c?s(c,t,a):K.Undefined(t.rowCount,A)}return i[a]},enumerable:!0,configurable:!1})}};function Hje(e,t,r){let n=Object.create(null);for(let o of Object.keys(e))n[o]=Yje(o,e[o],t,r);return iG.ofTables(t.header,e,n)}function Vje(e){let t=Object.create(null);for(let r of Object.keys(e.categories))for(let n of e.categories[r].fieldNames){let o=c2.create(r,n,!0);t[o]=e.categories[r].getField(n)}return t}function _je(e,t,r,n){let o=c2.create(t,e),i=c2.canonical(o);if(i in r)return r[i];if(n&&o in n)for(let a of n[o]){let A=c2.canonical(a);if(A in r)return r[A]}}function Yje(e,t,r,n){let o=r.categories[e];if(n){let i=Vje(r),a=Object.create(null),A=[],s=0;for(let c of Object.keys(t)){let l=_je(c,e,i,n);l&&(a[c]=l,A.push(c),s=l.rowCount)}o={rowCount:s,name:e,fieldNames:[...A],getField(c){return a[c]}}}return new xG(o||Ua.empty(e),t,!!o)}function $a(){return $a.empty()}(u=>{function e(g,m,p,d){return{origin:g,dirA:m,dirB:p,dirC:d}}u.create=e;function t(){return{origin:B(),dirA:B(),dirB:B(),dirC:B()}}u.empty=t;function r(g,m){return B.copy(g.origin,m.origin),B.copy(g.dirA,m.dirA),B.copy(g.dirB,m.dirB),B.copy(g.dirC,m.dirC),g}u.copy=r;function n(g){return r(t(),g)}u.clone=n;function o(g,m){return B.set(g,B.magnitude(m.dirA)*2,B.magnitude(m.dirB)*2,B.magnitude(m.dirC)*2)}u.size=o;let i=B();function a(g){return o(i,g),i[0]*i[1]*i[2]}u.volume=a;function A(g,m){return B.copy(g.origin,m.origin),B.normalize(g.dirA,m.dirA),B.normalize(g.dirB,m.dirB),B.normalize(g.dirC,m.dirC),g}u.normalize=A;let s=Ht();function c(g,m,p){B.transformMat4(g.origin,m.origin,p);let d=Ht.directionTransform(s,p);return B.transformMat3(g.dirA,m.dirA,d),B.transformMat3(g.dirB,m.dirB,d),B.transformMat3(g.dirC,m.dirC,d),g}u.transform=c;function l(g,m,p){return B.scale(g.dirA,m.dirA,p),B.scale(g.dirB,m.dirB,p),B.scale(g.dirC,m.dirC,p),g}u.scale=l})($a||={});var Dn;(u=>{function e(g,m,p=Float32Array){let d=g*m;return{data:new p(d),size:d,cols:g,rows:m}}u.create=e;function t(g,m,p){return g.data[g.rows*p+m]}u.get=t;function r(g,m,p,d){return g.data[g.rows*p+m]=d,g}u.set=r;function n(g,m,p,d){return g.data[g.rows*p+m]+=d,g}u.add=n;function o(g){return g.data.fill(0),g}u.makeZero=o;function i(g){return{data:g.data.slice(),size:g.size,cols:g.cols,rows:g.rows}}u.clone=i;function a(g,m,p){return{data:g,size:m*p,cols:m,rows:p}}u.fromArray=a;function A(g,m){if(g.cols!==m.rows||g.rows!==m.cols)throw new Error("transpose: matrix dimensions incompatible");if(g.data===m.data)throw new Error("transpose: matrices share memory");let p=m.rows,d=m.cols,f=m.data,I=g.data;for(let C=0,y=0,Q=0;C<p;Q+=1,y+=d,++C){let E=Q;for(let b=0;b<d;E+=p,b++)I[E]=f[y+b]}return g}u.transpose=A;function s(g,m,p){let d=m.cols,f=m.rows,I=p.rows,C=m.data,y=p.data,Q=g.data;for(let E=0,b=0,x=0;E<f;b+=d,E++)for(let S=0,w=0;w<I;x++,w++){let R=0,T=b;for(let L=0;L<d;T++,S++,L++)R+=C[T]*y[S];Q[x]=R}return g}u.multiplyABt=s;function c(g){let m=g.rows,p=g.cols,d=g.data,f=new Array(p);for(let I=0;I<p;++I)f[I]=0;for(let I=0,C=0;I<m;++I)for(let y=0;y<p;++y,++C)f[y]+=d[C];for(let I=0;I<p;++I)f[I]/=m;return f}u.meanRows=c;function l(g,m){let p=g.rows,d=g.cols,f=g.data;for(let I=0,C=0;I<p;++I)for(let y=0;y<d;++y,++C)f[C]-=m[y];return g}u.subRows=l})(Dn||={});function AK(e,t,r,n){n=e[t],e[t]=e[r],e[r]=n}function Oje(e,t){return e=Math.abs(e),t=Math.abs(t),e>t?(t/=e,e*Math.sqrt(1+t*t)):t>0?(e/=t,t*Math.sqrt(1+e*e)):0}var Jje=1192092896e-16,zje=1e-37;function Kje(e,t,r,n,o,i,a,A){let s=Jje*2,c=zje,l=0,u=0,g=0,m=0,p=Math.max(i,30),d=0,f=0,I=0,C=0,y=0,Q=0,E=0,b=0,x=0,S=0,w=0,R=0,T=0,L=0,F=0,v=0,U=0,G=4660,N=0,k=0,J=0,H=new Float64Array(a<<3);for(;l<a;l++){for(g=0,w=0;g<i;g++)b=e[l*t+g],w+=b*b;if(H[l]=w,n){for(g=0;g<a;g++)n[l*o+g]=0;n[l*o+l]=1}}for(;m<p;m++){for(y=0,l=0;l<a-1;l++)for(u=l+1;u<a;u++){for(d=l*t|0,f=u*t|0,F=H[l],v=0,U=H[u],g=2,v+=e[d]*e[f],v+=e[d+1]*e[f+1];g<i;g++)v+=e[d+g]*e[f+g];if(!(Math.abs(v)<=s*Math.sqrt(F*U))){for(v*=2,R=F-U,T=Oje(v,R),R<0?(L=(T-R)*.5,E=Math.sqrt(L/T),Q=v/(T*E*2)):(Q=Math.sqrt((T+R)/(T*2)),E=v/(T*Q*2)),F=0,U=0,g=2,x=Q*e[d]+E*e[f],S=-E*e[d]+Q*e[f],e[d]=x,e[f]=S,F+=x*x,U+=S*S,x=Q*e[d+1]+E*e[f+1],S=-E*e[d+1]+Q*e[f+1],e[d+1]=x,e[f+1]=S,F+=x*x,U+=S*S;g<i;g++)x=Q*e[d+g]+E*e[f+g],S=-E*e[d+g]+Q*e[f+g],e[d+g]=x,e[f+g]=S,F+=x*x,U+=S*S;if(H[l]=F,H[u]=U,y=1,n)for(I=l*o|0,C=u*o|0,g=2,x=Q*n[I]+E*n[C],S=-E*n[I]+Q*n[C],n[I]=x,n[C]=S,x=Q*n[I+1]+E*n[C+1],S=-E*n[I+1]+Q*n[C+1],n[I+1]=x,n[C+1]=S;g<a;g++)x=Q*n[I+g]+E*n[C+g],S=-E*n[I+g]+Q*n[C+g],n[I+g]=x,n[C+g]=S}}if(y===0)break}for(l=0;l<a;l++){for(g=0,w=0;g<i;g++)b=e[l*t+g],w+=b*b;H[l]=Math.sqrt(w)}for(l=0;l<a-1;l++){for(u=l,g=l+1;g<a;g++)H[u]<H[g]&&(u=g);if(l!==u&&(AK(H,l,u,w),n)){for(g=0;g<i;g++)AK(e,l*t+g,u*t+g,b);for(g=0;g<a;g++)AK(n,l*o+g,u*o+g,b)}}for(l=0;l<a;l++)r[l]=H[l];if(n)for(l=0;l<A;l++){for(w=l<a?H[l]:0;w<=c;){for(k=1/i,g=0;g<i;g++)G=G*214013+2531011,N=(G>>16&32767&256)!==0?k:-k,e[l*t+g]=N;for(m=0;m<2;m++)for(u=0;u<l;u++){for(w=0,g=0;g<i;g++)w+=e[l*t+g]*e[u*t+g];for(J=0,g=0;g<i;g++)b=e[l*t+g]-w*e[u*t+g],e[l*t+g]=b,J+=Math.abs(b);for(J=J?1/J:0,g=0;g<i;g++)e[l*t+g]*=J}for(w=0,g=0;g<i;g++)b=e[l*t+g],w+=b*b;w=Math.sqrt(w)}for(E=1/w,g=0;g<i;g++)e[l*t+g]*=E}}function ege(e,t,r,n){let o=0,i=0,a=e.rows,A=e.cols,s=a,c=A;s<c&&(o=1,i=s,s=c,c=i);let l=Dn.create(s,s),u=Dn.create(1,c),g=Dn.create(c,c);if(o===0)Dn.transpose(l,e);else{for(i=0;i<A*a;i++)l.data[i]=e.data[i];for(;i<c*s;i++)l.data[i]=0}if(Kje(l.data,s,u.data,g.data,c,s,c,s),t){for(i=0;i<c;i++)t.data[i]=u.data[i];for(;i<A;i++)t.data[i]=0}o===0?(r&&Dn.transpose(r,l),n&&Dn.transpose(n,g)):(r&&Dn.transpose(r,g),n&&Dn.transpose(n,l))}var ru;(i=>{function e(a){let A=t(a),s=o(a,A);return{momentsAxes:A,boxAxes:s}}i.ofPositions=e;function t(a){if(a.length===3)return $a.create(B.fromArray(B(),a,0),B.create(1,0,0),B.create(0,1,0),B.create(0,0,1));let A=Dn.fromArray(a,3,a.length/3),s=A.rows,c=s/3,l=Dn.create(3,3),u=Dn.create(1,3),g=Dn.create(3,3),m=Dn.create(3,3),p=Dn.meanRows(A),d=Dn.subRows(Dn.clone(A),p),f=Dn.transpose(Dn.create(s,3),d);Dn.multiplyABt(l,f,f),ege(l,u,g,m);let I=B.create(p[0],p[1],p[2]),C=B.create(g.data[0],g.data[3],g.data[6]),y=B.create(g.data[1],g.data[4],g.data[7]),Q=B.create(g.data[2],g.data[5],g.data[8]);return B.scale(C,C,Math.sqrt(u.data[0]/c)),B.scale(y,y,Math.sqrt(u.data[1]/c)),B.scale(Q,Q,Math.sqrt(u.data[2]/c)),$a.create(I,C,y,Q)}i.calculateMomentsAxes=t;function r(a){let A=$a.clone(a);return B.magnitude(A.dirC)<1e-6&&B.cross(A.dirC,A.dirA,A.dirB),$a.normalize(A,A)}i.calculateNormalizedAxes=r;let n=B();function o(a,A){if(a.length===3)return $a.clone(A);let s=-1/0,c=-1/0,l=-1/0,u=-1/0,g=-1/0,m=-1/0,p=B(),d=B(),f=A.origin,I=r(A);for(let R=0,T=a.length;R<T;R+=3){B.projectPointOnVector(p,B.fromArray(p,a,R),I.dirA,f);let L=B.dot(I.dirA,B.normalize(d,B.sub(d,p,f))),F=B.distance(p,f);L>0?F>s&&(s=F):F>c&&(c=F),B.projectPointOnVector(p,B.fromArray(p,a,R),I.dirB,f);let v=B.dot(I.dirB,B.normalize(d,B.sub(d,p,f))),U=B.distance(p,f);v>0?U>l&&(l=U):U>u&&(u=U),B.projectPointOnVector(p,B.fromArray(p,a,R),I.dirC,f);let G=B.dot(I.dirC,B.normalize(d,B.sub(d,p,f))),N=B.distance(p,f);G>0?N>g&&(g=N):N>m&&(m=N)}let C=B.setMagnitude(B(),I.dirA,(s+c)/2),y=B.setMagnitude(B(),I.dirB,(l+u)/2),Q=B.setMagnitude(B(),I.dirC,(g+m)/2),E=B.isFinite(C),b=B.isFinite(y),x=B.isFinite(Q),S=B(),w=function(R,T,L){B.copy(n,f),E&&B.scaleAndAdd(n,n,I.dirA,R),b&&B.scaleAndAdd(n,n,I.dirB,T),x&&B.scaleAndAdd(n,n,I.dirC,L),B.add(S,S,n)};return w(s,l,g),w(s,l,-m),w(s,-u,-m),w(s,-u,g),w(-c,-u,-m),w(-c,-u,g),w(-c,l,g),w(-c,l,-m),B.scale(S,S,1/8),$a.create(S,C,y,Q)}i.calculateBoxAxes=o})(ru||={});function we(){return we.zero()}(F=>{function e(v){return v.extrema!==void 0}F.hasExtrema=e;function t(v,U){return{center:v,radius:U}}F.create=t;function r(){return{center:B(),radius:0}}F.zero=r;function n(v){let U=t(B.clone(v.center),v.radius);return e(v)&&(U.extrema=v.extrema.map(G=>B.clone(G))),U}F.clone=n;function o(v,U,G){return B.copy(v.center,U),v.radius=G,v}F.set=o;function i(v,U){return B.copy(v.center,U.center),v.radius=U.radius,e(U)&&a(v,U.extrema.map(G=>B.clone(G))),v}F.copy=i;function a(v,U){return v.extrema!==void 0?(v.extrema.length=0,v.extrema.push(...U)):v.extrema=U,v}F.setExtrema=a;function A(v){let{x:U,y:G,z:N,indices:k}=v,J=0,H=0,z=0,_=0,M=Ee.size(k);for(let q=0;q<M;q++){let ne=Ee.getAt(k,q);J+=U[ne],H+=G[ne],z+=N[ne]}M>0&&(J/=M,H/=M,z/=M);for(let q=0;q<M;q++){let ne=Ee.getAt(k,q),oe=U[ne]-J,ae=G[ne]-H,me=N[ne]-z,Se=oe*oe+ae*ae+me*me;Se>_&&(_=Se)}return{center:B.create(J,H,z),radius:Math.sqrt(_)}}F.computeBounding=A;function s(v,U,G){return B.transformMat4(v.center,U.center,G),v.radius=U.radius*Y.getMaxScaleOnAxis(G),e(U)&&a(v,U.extrema.map(N=>B.transformMat4(B(),N,G))),v}F.transform=s;function c(v,U,G){return B.add(v.center,U.center,G),e(U)&&a(v,U.extrema.map(N=>B.add(B(),N,G))),v}F.translate=c;function l(v,U,G){return B.scale(v.center,U.center,G),v.radius=U.radius*G,e(U)&&a(v,U.extrema.map(N=>B.scale(B(),N,G))),v}F.scale=l;function u(v,U,G){return B.scale(v.center,U.center,G),v.radius=U.radius*G,v}F.scaleNX=u;function g(v,U,G){return B.toArray(v.center,U,G),U[G+3]=v.radius,U}F.toArray=g;function m(v,U,G){return B.fromArray(v.center,U,G),v.radius=U[G+3],v}F.fromArray=m;function p(v,U){return B.scale(v.center,B.add(v.center,U.max,U.min),.5),v.radius=B.distance(v.center,U.max),F.setExtrema(v,[B.create(U.min[0],U.min[1],U.min[2]),B.create(U.max[0],U.max[1],U.max[2]),B.create(U.max[0],U.min[1],U.min[2]),B.create(U.min[0],U.max[1],U.max[2]),B.create(U.min[0],U.min[1],U.max[2]),B.create(U.max[0],U.min[1],U.max[2]),B.create(U.max[0],U.max[1],U.min[2]),B.create(U.min[0],U.max[1],U.min[2])]),v}F.fromBox3D=p;function d(v,U){return B.copy(v.center,U.origin),v.radius=Math.max(B.magnitude(U.dirA),B.magnitude(U.dirB),B.magnitude(U.dirC)),v}F.fromAxes3D=d;let f=B();function I(v,U,G){let[N,k,J]=U,H=B.create(0,0,0);B.transformMat4(H,H,G);let z=B.create(N,k,J);B.transformMat4(z,z,G);let _=B.create(N,0,0);B.transformMat4(_,_,G);let M=B.create(0,k,J);B.transformMat4(M,M,G);let q=B.create(0,0,J);B.transformMat4(q,q,G);let ne=B.create(N,0,J);B.transformMat4(ne,ne,G);let oe=B.create(N,k,0);B.transformMat4(oe,oe,G);let ae=B.create(0,k,0);B.transformMat4(ae,ae,G),B.add(f,H,z),B.scale(f,f,.5);let me=Math.max(B.distance(H,z),B.distance(_,M));return F.set(v,f,me/2),F.setExtrema(v,[H,z,_,M,q,ne,oe,ae]),v}F.fromDimensionsAndTransform=I;let C=B();function y(v,U,G){return B.distance(U.center,G)<U.radius?F.copy(v,U):(B.sub(C,U.center,G),B.sub(C,U.center,C),B.setMagnitude(C,C,U.radius),B.scale(v.center,B.add(C,C,G),.5),v.radius=B.distance(v.center,G),v)}F.addVec3=y;function Q(v,U,G){return B.copy(v.center,U.center),v.radius=Math.max(U.radius,B.distance(U.center,G.center)+G.radius),e(U)&&e(G)&&a(v,[...U.extrema.map(N=>B.clone(N)),...G.extrema.map(N=>B.clone(N))]),v}F.expandBySphere=Q;let E=B();function b(v,U,G){if(B.copy(v.center,U.center),v.radius=U.radius+G,U.radius<1e-12||(U.extrema?.length??0)<=1)return v.extrema=void 0,v;if(e(U)){let N=new Float32Array(U.extrema.length*3);for(let J=0;J<U.extrema.length;J++)B.toArray(U.extrema[J],N,J*3);let k=ru.calculateMomentsAxes(N);$a.scale(k,$a.normalize(k,k),G),a(v,U.extrema.map(J=>{B.normalize(E,B.sub(E,J,U.center));let H=B.clone(J),z=B.dot(E,k.dirA)<0?-1:1;B.scaleAndAdd(H,H,k.dirA,z);let _=B.dot(E,k.dirB)<0?-1:1;B.scaleAndAdd(H,H,k.dirB,_);let M=B.dot(E,k.dirC)<0?-1:1;return B.scaleAndAdd(H,H,k.dirC,M),B.distance(v.center,H)>v.radius&&(U.extrema.length>=14&&B.normalize(E,B.sub(E,H,U.center)),B.scaleAndAdd(H,v.center,E,v.radius)),H}))}return v}F.expand=b;function x(v,U){return v.radius===U.radius&&B.exactEquals(v.center,U.center)}F.exactEquals=x;function S(v,U){let G=v.radius,N=U.radius;return Math.abs(G-N)<=1e-6*Math.max(1,Math.abs(G),Math.abs(N))&&B.equals(v.center,U.center)}F.equals=S;function w(v,U){if(e(U)){for(let G of U.extrema)if(B.distance(v.center,G)>v.radius)return!1;return!0}else return B.distance(v.center,U.center)+U.radius<=v.radius}F.includes=w;function R(v,U){return B.distance(v.center,U.center)<=v.radius+U.radius}F.overlaps=R;function T(v,U){return B.distance(v.center,U.center)-v.radius+U.radius}F.distance=T;function L(v,U){let{center:G,radius:N}=v;return B.distance(U,G)-N}F.distanceToVec=L})(we||={});function Ct(){return Ct.zero()}(F=>{function e(v,U){return{min:v,max:U}}F.create=e;function t(){return{min:B(),max:B()}}F.zero=t;function r(v,U){return B.copy(v.min,U.min),B.copy(v.max,U.max),v}F.copy=r;function n(v,U,G){return B.copy(v.min,U),B.copy(v.max,G),v}F.set=n;function o(v){return r(t(),v)}F.clone=o;let i=B();function a(v,U){return we.hasExtrema(U)&&U.extrema.length>=14?s(v,U.extrema):(B.set(i,U.radius,U.radius,U.radius),B.sub(v.min,U.center,i),B.add(v.max,U.center,i),v)}F.fromSphere3D=a;function A(v,U){for(let G=0,N=U.length;G<N;G++)I(v,U[G]);return v}F.addVec3Array=A;function s(v,U){return f(v),A(v,U),v}F.fromVec3Array=s;function c(v,U){return we.hasExtrema(U)&&U.extrema.length>=14?A(v,U.extrema):(I(v,B.subScalar(i,U.center,U.radius)),I(v,B.addScalar(i,U.center,U.radius)),v)}F.addSphere3D=c;function l(v,U){return I(v,U.min),I(v,U.max),v}F.addBox3D=l;function u(v,U){return B.clamp(i,U.center,v.min,v.max),B.squaredDistance(i,U.center)<=U.radius*U.radius}F.intersectsSphere3D=u;function g(v){let U=B.create(Number.MAX_VALUE,Number.MAX_VALUE,Number.MAX_VALUE),G=B.create(-Number.MAX_VALUE,-Number.MAX_VALUE,-Number.MAX_VALUE),{x:N,y:k,z:J,indices:H}=v;for(let z=0,_=Ee.size(H);z<_;z++){let M=Ee.getAt(H,z);U[0]=Math.min(N[M],U[0]),U[1]=Math.min(k[M],U[1]),U[2]=Math.min(J[M],U[2]),G[0]=Math.max(N[M],G[0]),G[1]=Math.max(k[M],G[1]),G[2]=Math.max(J[M],G[2])}return{min:U,max:G}}F.computeBounding=g;function m(v,U){return B.sub(v,U.max,U.min)}F.size=m;let p=B();function d(v){return m(p,v),p[0]*p[1]*p[2]}F.volume=d;function f(v){return B.set(v.min,Number.MAX_VALUE,Number.MAX_VALUE,Number.MAX_VALUE),B.set(v.max,-Number.MAX_VALUE,-Number.MAX_VALUE,-Number.MAX_VALUE),v}F.setEmpty=f;function I(v,U){return B.min(v.min,v.min,U),B.max(v.max,v.max,U),v}F.add=I;function C(v,U,G){return B.sub(v.min,U.min,G),B.add(v.max,U.max,G),v}F.expand=C;function y(v,U,G){return B.subScalar(v.min,U.min,G),B.addScalar(v.max,U.max,G),v}F.expandUniformly=y;function Q(v,U,G){return B.scale(v.min,U.min,G),B.scale(v.max,U.max,G),v}F.scale=Q;let E=B();function b(v,U,G){let[N,k,J]=U.min,[H,z,_]=U.max;return f(v),I(v,B.transformMat4(E,B.set(E,N,k,J),G)),I(v,B.transformMat4(E,B.set(E,N,k,_),G)),I(v,B.transformMat4(E,B.set(E,N,z,J),G)),I(v,B.transformMat4(E,B.set(E,N,z,_),G)),I(v,B.transformMat4(E,B.set(E,H,k,J),G)),I(v,B.transformMat4(E,B.set(E,H,k,_),G)),I(v,B.transformMat4(E,B.set(E,H,z,J),G)),I(v,B.transformMat4(E,B.set(E,H,z,_),G)),v}F.transform=b;function x(v,U){return!(U[0]<v.min[0]||U[0]>v.max[0]||U[1]<v.min[1]||U[1]>v.max[1]||U[2]<v.min[2]||U[2]>v.max[2])}F.containsVec3=x;function S(v,U){return!(v.max[0]<U.min[0]||v.min[0]>U.max[0]||v.max[1]<U.min[1]||v.min[1]>U.max[1]||v.max[2]<U.min[2]||v.min[2]>U.max[2])}F.overlaps=S;function w(v,U){let G=U.center,N=U.radius;return!(G[0]-N<v.min[0]||G[0]+N>v.max[0]||G[1]-N<v.min[1]||G[1]+N>v.max[1]||G[2]-N<v.min[2]||G[2]+N>v.max[2])}F.containsSphere3D=w;function R(v,U){return B.center(v,U.max,U.min)}F.center=R;function T(v,U){return B.exactEquals(v.min,U.min)&&B.exactEquals(v.max,U.max)}F.exactEquals=T;function L(v,U){return B.equals(v.min,U.min)&&B.equals(v.max,U.max)}F.equals=L})(Ct||={});function $d(e,t,r){let n=new Float32Array(e);for(let o=0;o<n.length;o++)n[o]=t+r*o;return n}var Go;(b=>{b.DefaultName="1_555",b.Default=n(b.DefaultName,Y.identity()),b.RotationTranslationEpsilon=.005;function n(x,S,w){let{assembly:R,ncsId:T,hkl:L,spgrOp:F,key:v}=w||{},U=L?B.clone(L):B();F=F??-1,v=v??-1,T=T||-1;let G=Y.isIdentity(S),N=A(w,G),k=w?.instanceId??x;return G?{name:x,instanceId:k,assembly:R,matrix:S,inverse:Y.identity(),isIdentity:!0,hkl:U,spgrOp:F,ncsId:T,suffix:N,key:v}:(Y.isRotationAndTranslation(S,b.RotationTranslationEpsilon)||console.warn(`Symmetry operator (${x}) should be a composition of rotation and translation.`),{name:x,instanceId:k,assembly:R,matrix:S,inverse:Y.invert(Y(),S),isIdentity:!1,hkl:U,spgrOp:F,key:v,ncsId:T,suffix:N})}b.create=n;function o(x){return!!x&&!!x.matrix&&!!x.inverse&&typeof x.name=="string"}function i(x,S,w,R){let T=L=>L>=0&&L<=9?`${L}`:`(${L})`;return`${x+1}_${T(S+5)}${T(w+5)}${T(R+5)}`}b.getSymmetryOperatorName=i;function a(x){return"ASM-"+x.join("-")}b.getAssemblyOperatorName=a;function A(x,S){if(!x)return"";if(x.assembly)return o(x)?x.suffix:S?"":`_${x.assembly.operId}`;if(typeof x.spgrOp<"u"&&typeof x.hkl<"u"&&x.spgrOp!==-1){let[w,R,T]=x.hkl;return`-${i(x.spgrOp,w,R,T)}`}return x.ncsId!==-1?`_${x.ncsId}`:""}let s=Y();function c(x,S){Y.setIdentity(s);for(let w=0;w<3;w++)for(let R=0;R<3;R++)Y.setValue(s,w,R,Ht.getValue(x,w,R));return Y.setTranslation(s,S),Y.isRotationAndTranslation(s,b.RotationTranslationEpsilon)}b.checkIfRotationAndTranslation=c;function l(x,S,w,R){let T=Y.identity();for(let L=0;L<3;L++)for(let F=0;F<3;F++)Y.setValue(T,L,F,Ht.getValue(S,L,F));return Y.setTranslation(T,w),n(x,T,{ncsId:R})}b.ofRotationAndOffset=l;let u=gr.identity(),g=gr(),m=gr(),p=B();function d(x,S,w){let R=S.inverse;if(S.isIdentity)return Y.copy(x,R);let T=1-w;Y.getRotation(g,R),gr.slerp(g,u,g,T);let L=gr.getAxisAngle(p,g);return Y.fromRotation(x,L,p),Y.setValue(x,0,3,T*Y.getValue(R,0,3)),Y.setValue(x,1,3,T*Y.getValue(R,1,3)),Y.setValue(x,2,3,T*Y.getValue(R,2,3)),x}b.lerpFromIdentity=d;function f(x,S,w,R){if(Math.abs(R)<=1e-5)return Y.copy(x,S);if(Math.abs(R-1)<=1e-5)return Y.copy(x,w);Y.getRotation(g,S),Y.getRotation(m,w),gr.slerp(m,g,m,R);let T=gr.getAxisAngle(p,m);return Y.fromRotation(x,T,p),Y.setValue(x,0,3,ho(Y.getValue(S,0,3),Y.getValue(w,0,3),R)),Y.setValue(x,1,3,ho(Y.getValue(S,1,3),Y.getValue(w,1,3),R)),Y.setValue(x,2,3,ho(Y.getValue(S,2,3),Y.getValue(w,2,3),R)),x}b.slerp=f;function I(x,S){let w=Y.mul(Y(),S.matrix,x.matrix);return n(S.name,w,S)}b.compose=I;class C{constructor(S,w,R=SG){this.operator=S;this.coordinates=w;this.r=R;this._x=w.x,this._y=w.y,this._z=w.z,this._m=S.matrix}invariantPosition(S,w){return w[0]=this._x[S],w[1]=this._y[S],w[2]=this._z[S],w}position(S,w){return w[0]=this._x[S],w[1]=this._y[S],w[2]=this._z[S],B.transformMat4(w,w,this._m),w}x(S){let w=this._m,R=w[0],T=w[4],L=w[8],F=w[12],v=this._x[S],U=this._y[S],G=this._z[S],N=w[3]*v+w[7]*U+w[11]*G+w[15]||1;return(R*v+T*U+L*G+F)/N}y(S){let w=this._m,R=w[1],T=w[5],L=w[9],F=w[13],v=this._x[S],U=this._y[S],G=this._z[S],N=w[3]*v+w[7]*U+w[11]*G+w[15]||1;return(R*v+T*U+L*G+F)/N}z(S){let w=this._m,R=w[2],T=w[6],L=w[10],F=w[14],v=this._x[S],U=this._y[S],G=this._z[S],N=w[3]*v+w[7]*U+w[11]*G+w[15]||1;return(R*v+T*U+L*G+F)/N}}class y{constructor(S,w,R=SG){this.operator=S;this.coordinates=w;this.r=R;this._x=w.x,this._y=w.y,this._z=w.z,this._m=S.matrix}invariantPosition(S,w){return w[0]=this._x[S],w[1]=this._y[S],w[2]=this._z[S],w}position(S,w){return w[0]=this.x(S),w[1]=this.y(S),w[2]=this.z(S),w}x(S){let w=this._m;return w[0]*this._x[S]+w[4]*this._y[S]+w[8]*this._z[S]+w[12]}y(S){let w=this._m;return w[1]*this._x[S]+w[5]*this._y[S]+w[9]*this._z[S]+w[13]}z(S){let w=this._m;return w[2]*this._x[S]+w[6]*this._y[S]+w[10]*this._z[S]+w[14]}}class Q{constructor(S,w,R=SG){this.operator=S;this.coordinates=w;this.r=R;this._x=w.x,this._y=w.y,this._z=w.z}invariantPosition(S,w){return w[0]=this._x[S],w[1]=this._y[S],w[2]=this._z[S],w}position(S,w){return w[0]=this._x[S],w[1]=this._y[S],w[2]=this._z[S],w}x(S){return this._x[S]}y(S){return this._y[S]}z(S){return this._z[S]}}function E(x,S,w=SG){return Y.isIdentity(x.matrix)?new Q(x,S,w):jje(x.matrix)?new y(x,S,w):new C(x,S,w)}b.createMapping=E})(Go||={});function SG(e){return 0}function jje(e){return e[3]===0&&e[7]===0&&e[11]===0&&e[15]===1}var DG=[[1,0,0,0],[0,1,0,0],[0,0,1,0],[-1,0,0,0],[0,-1,0,0],[0,0,-1,0],[0,1,0,.5],[1,0,0,.5],[-1,0,0,.5],[0,0,1,.5],[0,-1,0,.5],[0,0,-1,.5],[1,0,0,.25],[0,-1,0,.25],[0,0,1,.25],[-1,0,0,.25],[0,1,0,.25],[0,-1,0,.75],[0,0,1,.75],[0,1,0,.75],[1,0,0,.75],[-1,0,0,.75],[0,0,-1,.25],[0,0,-1,.75],[1,-1,0,0],[-1,1,0,0],[0,0,1,.3333333333333333],[0,0,1,.6666666666666666],[1,0,0,.6666666666666666],[0,1,0,.3333333333333333],[0,-1,0,.6666666666666666],[1,-1,0,.3333333333333333],[-1,1,0,.6666666666666666],[-1,0,0,.3333333333333333],[1,0,0,.3333333333333333],[0,1,0,.6666666666666666],[0,-1,0,.3333333333333333],[1,-1,0,.6666666666666666],[-1,1,0,.3333333333333333],[-1,0,0,.6666666666666666],[0,0,-1,.3333333333333333],[0,0,-1,.6666666666666666],[0,0,1,.8333333333333334],[0,0,1,.16666666666666666],[0,0,-1,.8333333333333334],[0,0,-1,.16666666666666666]],tge=[[0,1,2],[3,4,5],[3,1,5],[3,6,5],[7,6,2],[8,6,5],[0,4,2],[0,4,9],[7,10,2],[7,10,9],[0,10,2],[8,10,5],[3,1,11],[3,6,11],[0,10,9],[8,6,11],[3,4,2],[0,4,5],[3,4,9],[7,10,5],[8,4,9],[8,10,9],[8,10,2],[0,6,9],[3,10,9],[0,10,11],[7,1,9],[8,1,11],[7,4,11],[7,6,9],[7,10,11],[3,10,2],[8,1,5],[0,4,11],[3,1,2],[3,1,9],[7,4,2],[8,1,2],[8,1,9],[3,6,9],[7,4,9],[8,6,2],[8,6,9],[3,6,2],[12,13,14],[15,16,14],[12,17,18],[15,19,18],[20,13,18],[21,16,18],[20,17,14],[21,19,14],[0,1,5],[8,10,11],[7,6,11],[7,6,5],[8,4,2],[7,4,5],[7,1,5],[7,1,11],[0,10,5],[0,1,11],[0,6,11],[0,6,5],[3,10,11],[8,4,11],[15,13,22],[12,16,22],[15,17,23],[12,19,23],[21,13,23],[20,16,23],[21,17,22],[20,19,22],[4,0,2],[1,3,2],[4,0,14],[1,3,18],[4,0,9],[1,3,9],[4,0,18],[1,3,14],[10,7,9],[6,8,9],[4,7,14],[6,3,18],[10,0,18],[1,8,14],[1,3,5],[4,0,5],[6,8,11],[10,7,11],[1,3,11],[4,0,11],[10,7,2],[6,8,2],[3,10,22],[7,1,23],[8,4,23],[0,6,22],[1,0,5],[4,3,5],[1,0,23],[4,3,22],[10,7,14],[6,8,18],[8,6,22],[7,10,23],[4,3,11],[1,0,11],[1,0,22],[4,3,23],[10,7,18],[6,8,14],[8,6,23],[7,10,22],[6,7,11],[10,8,11],[8,1,23],[0,10,22],[3,6,22],[7,4,23],[4,3,2],[1,0,2],[10,8,2],[6,7,2],[4,3,9],[1,0,9],[10,8,9],[6,7,9],[4,8,14],[6,0,18],[10,3,18],[1,7,14],[4,8,18],[6,0,14],[10,3,14],[1,7,18],[6,7,5],[10,8,5],[6,8,5],[10,7,5],[8,1,22],[0,10,23],[3,6,23],[7,4,22],[4,24,2],[25,3,2],[4,24,26],[25,3,27],[4,24,27],[25,3,26],[28,29,26],[30,31,26],[32,33,26],[34,35,27],[36,37,27],[38,39,27],[2,0,1],[1,2,0],[1,25,5],[24,0,5],[39,36,40],[35,38,40],[37,34,40],[33,30,41],[29,32,41],[31,28,41],[5,3,4],[4,5,3],[25,1,5],[0,24,5],[24,4,5],[3,25,5],[4,3,41],[25,1,40],[24,4,41],[3,25,40],[4,3,40],[25,1,41],[24,4,40],[3,25,41],[35,34,40],[37,36,40],[39,38,40],[29,28,41],[31,30,41],[33,32,41],[3,5,4],[5,4,3],[25,1,2],[0,24,2],[24,4,2],[3,25,2],[25,1,9],[0,24,9],[24,4,9],[3,25,9],[30,33,26],[32,29,26],[28,31,26],[36,39,27],[38,35,27],[34,37,27],[0,2,1],[2,1,0],[30,33,42],[32,29,42],[28,31,42],[36,39,43],[38,35,43],[34,37,43],[7,9,6],[9,6,7],[25,1,11],[0,24,11],[24,4,11],[3,25,11],[35,34,44],[37,36,44],[39,38,44],[29,28,45],[31,30,45],[33,32,45],[8,11,10],[11,10,8],[1,25,2],[24,0,2],[1,25,42],[24,0,43],[1,25,43],[24,0,42],[1,25,27],[24,0,26],[1,25,26],[24,0,27],[1,25,9],[24,0,9],[4,24,5],[25,3,5],[4,24,11],[25,3,11],[1,0,40],[4,3,44],[0,24,45],[1,0,41],[4,3,45],[0,24,44],[0,24,40],[0,24,41],[2,3,4],[5,3,1],[5,0,4],[4,2,3],[1,5,3],[4,5,0],[2,7,6],[2,8,10],[5,8,6],[5,7,10],[1,9,7],[4,9,8],[1,11,8],[4,11,7],[9,0,6],[9,3,10],[11,3,6],[11,0,10],[6,2,7],[10,2,8],[6,5,8],[10,5,7],[9,7,1],[9,8,4],[11,8,1],[11,7,4],[6,9,0],[10,9,3],[6,11,3],[10,11,0],[9,7,6],[9,8,10],[11,8,6],[11,7,10],[6,9,7],[10,9,8],[6,11,8],[10,11,7],[2,3,10],[5,8,1],[11,0,4],[10,2,3],[1,5,8],[4,11,0],[5,0,1],[2,0,4],[2,3,1],[1,5,0],[4,2,0],[1,2,3],[11,8,10],[11,7,6],[9,7,10],[9,8,6],[10,11,8],[6,11,7],[10,9,7],[6,9,8],[5,8,10],[5,7,6],[2,7,10],[2,8,6],[4,11,8],[1,11,7],[4,9,7],[1,9,8],[11,3,10],[11,0,6],[9,0,10],[9,3,6],[10,5,8],[6,5,7],[10,2,7],[6,2,8],[11,8,4],[11,7,1],[9,7,4],[9,8,1],[10,11,3],[6,11,0],[10,9,0],[6,9,3],[22,15,13],[22,12,16],[14,12,13],[14,15,16],[13,22,15],[16,22,12],[13,14,12],[16,14,15],[22,21,17],[22,20,19],[14,20,17],[14,21,19],[13,23,21],[16,23,20],[13,18,20],[16,18,21],[23,15,17],[23,12,19],[18,12,17],[18,15,19],[17,22,21],[19,22,20],[17,14,20],[19,14,21],[23,21,13],[23,20,16],[18,20,13],[18,21,16],[17,23,15],[19,23,12],[17,18,12],[19,18,15],[5,0,6],[2,7,4],[9,3,1],[6,5,0],[4,2,7],[1,9,3],[0,2,4],[3,2,1],[0,5,1],[2,1,3],[2,4,0],[5,1,0],[7,9,10],[8,9,6],[7,11,6],[9,6,8],[9,10,7],[11,6,7],[1,7,11],[4,8,11],[1,8,9],[4,7,9],[0,9,10],[3,9,6],[3,11,10],[0,11,6],[2,6,8],[2,10,7],[5,6,7],[5,10,8],[6,0,11],[10,3,11],[6,3,9],[10,0,9],[7,2,10],[8,2,6],[8,5,10],[7,5,6],[9,1,8],[9,4,7],[11,1,7],[11,4,8],[7,9,4],[8,9,1],[8,11,4],[7,11,1],[9,6,3],[9,10,0],[11,6,0],[11,10,3],[19,12,23],[13,15,22],[16,21,18],[17,20,14],[20,14,17],[21,18,16],[15,22,13],[12,23,19],[18,16,21],[14,17,20],[23,19,12],[22,13,15],[19,20,22],[13,21,23],[16,15,14],[17,12,18],[20,18,13],[21,14,19],[15,23,17],[12,22,16],[18,19,15],[14,13,12],[23,16,20],[22,17,21],[16,12,22],[17,15,23],[19,21,14],[13,20,18],[12,14,13],[15,18,19],[21,22,17],[20,23,16],[14,16,15],[18,17,12],[22,19,20],[23,13,21],[16,20,23],[17,21,22],[19,15,18],[13,12,14],[12,18,17],[15,14,16],[21,23,13],[20,22,19],[14,19,21],[18,13,20],[22,16,12],[23,17,15],[19,12,22],[17,21,23],[16,15,18],[13,20,14],[20,14,13],[15,18,16],[21,23,17],[12,22,19],[18,16,15],[14,13,20],[22,19,12],[23,17,21],[3,2,4],[3,5,1],[0,5,4],[2,4,3],[5,1,3],[5,4,0],[1,7,9],[4,8,9],[1,8,11],[4,7,11],[0,9,6],[3,9,10],[3,11,6],[0,11,10],[2,6,7],[2,10,8],[5,6,8],[5,10,7],[6,0,9],[10,3,9],[6,3,11],[10,0,11],[7,2,6],[8,2,10],[8,5,6],[7,5,10],[9,1,7],[9,4,8],[11,1,8],[11,4,7],[7,9,1],[8,9,4],[8,11,1],[7,11,4],[9,6,0],[9,10,3],[11,6,3],[11,10,0],[8,9,10],[8,11,6],[7,11,10],[9,10,8],[11,6,8],[11,10,7],[6,0,2],[10,3,2],[6,3,5],[10,0,5],[7,2,1],[8,2,4],[8,5,1],[7,5,4],[9,1,0],[9,4,3],[11,1,3],[11,4,0],[1,7,2],[4,8,2],[1,8,5],[4,7,5],[0,9,1],[3,9,4],[3,11,1],[0,11,4],[2,6,0],[2,10,3],[5,6,3],[5,10,0],[0,2,6],[3,2,10],[3,5,6],[0,5,10],[2,1,7],[2,4,8],[5,1,8],[5,4,7],[16,12,14],[13,21,18],[19,15,23],[17,20,22],[12,14,16],[21,18,13],[15,23,19],[20,22,17],[14,16,12],[18,13,21],[23,19,15],[22,17,20],[19,20,18],[17,15,14],[16,21,22],[13,12,23],[20,18,19],[15,14,17],[21,22,16],[12,23,13],[18,19,20],[14,17,15],[22,16,21],[23,13,12],[6,0,5],[10,3,5],[6,3,2],[10,0,2],[7,2,4],[8,2,1],[8,5,4],[7,5,1],[9,1,3],[9,4,0],[11,1,0],[11,4,3],[1,7,5],[4,8,5],[1,8,2],[4,7,2],[0,9,4],[3,9,1],[3,11,4],[0,11,1],[2,6,3],[2,10,0],[5,6,0],[5,10,3],[0,2,10],[3,2,6],[3,5,10],[0,5,6],[2,1,8],[2,4,7],[5,1,7],[5,4,8],[21,17,23],[20,16,22],[12,13,18],[15,19,14],[23,21,17],[22,20,16],[18,12,13],[14,15,19],[17,23,21],[16,22,20],[13,18,12],[19,14,15],[21,13,22],[20,19,23],[12,17,14],[15,16,18],[23,15,13],[22,12,19],[18,20,17],[14,21,16],[17,22,15],[16,23,12],[13,14,20],[19,18,21],[15,17,22],[12,16,23],[20,13,14],[21,19,18],[22,21,13],[23,20,19],[14,12,17],[18,15,16],[13,23,15],[19,22,12],[17,18,20],[16,14,21],[15,13,23],[12,19,22],[20,17,18],[21,16,14],[22,15,17],[23,12,16],[14,20,13],[18,21,19],[13,22,21],[19,23,20],[17,14,12],[16,18,15],[6,5,3],[4,9,3],[9,3,4],[5,7,4],[4,5,7],[5,3,6]],rge=[[0],[0,1],[0,2],[0,3],[0,2,4,5],[0,6],[0,7],[0,6,4,8],[0,7,4,9],[0,6,2,1],[0,3,1,10],[0,6,2,1,4,8,5,11],[0,12,1,7],[0,1,13,14],[0,12,1,7,4,15,11,9],[0,16,2,17],[0,18,12,17],[0,16,5,19],[0,20,13,19],[0,18,12,17,4,21,15,19],[0,16,2,17,4,22,5,19],[0,16,2,17,23,24,13,25,26,20,27,28,4,22,5,19],[0,16,17,2,29,21,30,15],[0,20,13,19,29,31,32,33],[0,16,6,34],[0,18,7,34],[0,16,7,35],[0,16,36,37],[0,18,36,38],[0,16,14,39],[0,20,40,34],[0,16,8,41],[0,18,8,42],[0,16,9,42],[0,16,6,34,4,22,8,41],[0,18,7,34,4,21,9,41],[0,16,7,35,4,22,9,42],[0,16,6,34,23,24,14,39],[0,16,10,43,23,24,7,35],[0,16,36,37,23,24,9,42],[0,16,8,41,23,24,40,38],[0,16,6,34,23,24,14,39,26,20,40,38,4,22,8,41],[0,16,44,45,23,24,46,47,26,20,48,49,4,22,50,51],[0,16,6,34,29,21,9,42],[0,16,8,41,29,21,7,35],[0,16,36,37,29,21,14,39],[0,16,2,17,1,52,6,34],[0,16,2,17,53,54,9,42],[0,16,12,33,1,52,7,35],[0,16,2,17,11,55,8,41],[0,56,2,57,1,58,6,37],[0,56,15,25,1,58,9,39],[0,20,27,17,1,59,40,34],[0,56,12,28,1,58,7,38],[0,16,5,19,1,52,8,41],[0,22,13,28,1,55,14,38],[0,18,13,60,1,61,14,43],[0,16,15,30,1,52,9,42],[0,16,5,19,11,55,6,34],[0,21,12,19,1,54,7,41],[0,20,13,19,1,59,14,41],[0,20,3,30,1,59,10,42],[0,18,12,17,1,61,7,34,4,21,15,19,11,54,9,41],[0,24,13,17,1,62,14,34,4,20,27,19,11,59,40,41],[0,16,2,17,1,52,6,34,4,22,5,19,11,55,8,41],[0,16,12,33,1,52,7,35,4,22,15,30,11,55,9,42],[0,31,3,17,1,63,10,34,4,56,32,19,11,58,36,41],[0,22,2,19,64,59,14,38,4,16,5,17,65,62,40,39],[0,16,2,17,1,52,6,34,23,24,13,25,64,62,14,39,26,20,27,28,65,59,40,38,4,22,5,19,11,55,8,41],[0,16,2,17,66,67,44,45,23,24,13,25,68,69,46,47,26,20,27,28,70,71,48,49,4,22,5,19,72,73,50,51],[0,16,2,17,1,52,6,34,29,21,15,30,53,54,9,42],[0,16,5,19,1,52,8,41,29,21,12,33,53,54,7,35],[0,20,13,19,1,59,14,41,29,31,32,33,53,63,36,35],[0,31,3,17,1,63,10,34,29,20,27,30,53,59,40,42],[0,16,74,75],[0,18,76,77],[0,16,78,79],[0,18,80,81],[0,16,74,75,29,21,82,83],[0,21,84,85,29,16,86,87],[0,16,88,89],[0,16,88,89,29,21,90,91],[0,16,74,75,1,52,88,89],[0,16,78,79,1,52,92,93],[0,16,94,95,11,55,88,89],[0,16,82,83,53,54,88,89],[0,16,74,75,1,52,88,89,29,21,82,83,53,54,90,91],[0,21,84,85,96,97,88,91,29,16,86,87,98,99,90,89],[0,16,74,75,2,17,100,101],[0,16,94,95,5,19,100,101],[0,18,76,77,2,33,102,103],[0,18,104,105,106,107,100,108],[0,16,78,79,2,17,109,108],[0,16,82,83,15,30,100,101],[0,18,80,81,2,33,110,111],[0,18,112,113,114,115,100,108],[0,16,74,75,2,17,100,101,29,21,82,83,15,30,116,117],[0,21,84,85,118,119,116,101,29,16,86,87,120,121,100,117],[0,16,74,75,6,34,122,123],[0,16,74,75,8,41,124,125],[0,16,78,79,7,35,122,123],[0,16,82,83,9,42,122,123],[0,16,74,75,7,35,126,127],[0,16,74,75,9,42,128,129],[0,16,78,79,6,34,126,127],[0,16,78,79,8,41,128,129],[0,16,74,75,6,34,122,123,29,21,82,83,9,42,128,129],[0,16,74,75,7,35,126,127,29,21,82,83,8,41,124,125],[0,21,84,85,6,42,130,131,29,16,86,87,9,34,132,133],[0,21,84,85,7,41,134,135,29,16,86,87,8,35,136,137],[0,16,89,88,2,17,122,123],[0,16,89,88,12,33,126,127],[0,16,89,88,5,19,124,125],[0,16,89,88,15,30,128,129],[0,16,88,89,6,34,100,101],[0,16,89,88,7,35,109,108],[0,16,89,88,8,41,138,139],[0,16,89,88,9,42,116,117],[0,16,89,88,6,34,100,101,29,21,91,90,9,42,116,117],[0,16,89,88,7,35,109,108,29,21,91,90,8,41,138,139],[0,16,89,88,2,17,122,123,29,21,91,90,15,30,128,129],[0,16,89,88,118,121,132,131,29,21,91,90,120,119,130,133],[0,16,74,75,2,17,100,101,1,52,88,89,6,34,122,123],[0,16,74,75,12,33,109,108,1,52,88,89,7,35,126,127],[0,16,74,75,2,17,100,101,11,55,140,141,8,41,124,125],[0,16,74,75,2,17,100,101,53,54,90,91,9,42,128,129],[0,16,74,75,5,19,138,139,1,52,88,89,8,41,124,125],[0,16,74,75,15,30,116,117,1,52,88,89,9,42,128,129],[0,16,94,95,5,19,100,101,11,55,88,89,6,34,124,125],[0,16,94,95,15,30,109,108,11,55,88,89,7,35,128,129],[0,16,78,79,2,17,109,108,1,52,92,93,6,34,126,127],[0,16,78,79,12,33,100,101,1,52,92,93,7,35,122,123],[0,16,82,83,12,33,138,139,53,54,88,89,8,41,126,127],[0,16,82,83,2,17,116,117,53,54,88,89,9,42,122,123],[0,16,78,79,5,19,116,117,1,52,92,93,8,41,128,129],[0,16,82,83,15,30,100,101,1,52,90,91,9,42,122,123],[0,16,82,83,15,30,100,101,53,54,88,89,6,34,128,129],[0,16,82,83,5,19,109,108,53,54,88,89,7,35,124,125],[0,16,74,75,2,17,100,101,1,52,88,89,6,34,122,123,29,21,82,83,15,30,116,117,53,54,90,91,9,42,128,129],[0,16,74,75,12,33,109,108,1,52,88,89,7,35,126,127,29,21,82,83,5,19,138,139,53,54,90,91,8,41,124,125],[0,21,84,85,118,119,116,101,96,97,88,91,9,34,132,133,29,16,86,87,120,121,100,117,98,99,90,89,6,42,130,131],[0,21,84,85,142,143,138,108,96,97,88,91,8,35,136,137,29,16,86,87,144,145,109,139,98,99,90,89,7,41,134,135],[0,146,147],[0,148,149],[0,150,151],[0,146,147,152,153,154,155,156,157],[0,158,159],[0,146,147,1,160,161],[0,146,147,1,160,161,152,153,154,162,163,164,155,156,157,165,166,167],[0,158,159,1,168,169],[0,146,147,101,170,171],[0,146,147,100,172,173],[0,148,149,174,175,171],[0,148,149,100,176,177],[0,150,151,178,179,171],[0,150,151,100,180,181],[0,146,147,100,172,173,152,153,154,182,183,184,155,156,157,185,186,187],[0,158,159,101,188,189],[0,146,147,122,190,191],[0,146,147,123,192,193],[0,146,147,126,194,195],[0,146,147,127,196,197],[0,146,147,122,190,191,152,153,154,198,199,200,155,156,157,201,202,203],[0,158,159,123,204,205],[0,146,147,126,194,195,152,153,154,206,207,208,155,156,157,209,210,211],[0,158,159,129,212,213],[0,146,147,101,170,171,1,160,161,123,192,193],[0,146,147,108,214,215,1,160,161,127,196,197],[0,146,147,100,172,173,1,160,161,122,190,191],[0,146,147,109,216,217,1,160,161,126,194,195],[0,146,147,100,172,173,1,160,161,122,190,191,152,153,154,182,183,184,162,163,164,198,199,200,155,156,157,185,186,187,165,166,167,201,202,203],[0,158,159,101,188,189,1,168,169,123,204,205],[0,146,147,109,216,217,1,160,161,126,194,195,152,153,154,218,219,220,162,163,164,206,207,208,155,156,157,221,222,223,165,166,167,209,210,211],[0,158,159,117,224,225,1,168,169,129,212,213],[0,146,147,16,226,227],[0,148,149,18,228,229],[0,150,151,18,230,231],[0,150,151,16,232,233],[0,148,149,16,234,235],[0,146,147,18,236,237],[0,146,147,52,238,239],[0,146,147,16,226,227,1,160,161,52,238,239],[0,146,147,18,236,237,1,160,161,61,240,241],[0,146,147,16,226,227,100,172,173,101,170,171],[0,148,149,18,228,229,242,172,181,243,214,244],[0,150,151,18,230,231,245,172,177,246,214,247],[0,150,151,16,232,233,245,172,177,174,170,248],[0,148,149,16,234,235,242,172,181,178,170,249],[0,146,147,18,236,237,100,172,173,108,214,215],[0,146,147,16,226,227,122,190,191,123,192,193],[0,146,147,16,226,227,126,194,195,127,196,197],[0,146,147,18,236,237,126,194,195,123,192,193],[0,146,147,18,236,237,122,190,191,127,196,197],[0,146,147,52,238,239,122,190,191,101,170,171],[0,146,147,61,240,241,126,194,195,101,170,171],[0,146,147,52,238,239,100,172,173,123,192,193],[0,146,147,61,240,241,100,172,173,127,196,197],[0,146,147,16,226,227,100,172,173,101,170,171,1,160,161,52,239,238,122,190,191,123,192,193],[0,146,147,16,226,227,109,216,217,108,214,215,1,160,161,52,239,238,126,194,195,127,196,197],[0,146,147,18,236,237,109,216,217,101,170,171,1,160,161,61,241,240,126,194,195,123,192,193],[0,146,147,18,236,237,100,172,173,108,214,215,1,160,161,61,241,240,122,190,191,127,196,197],[0,16,2,17,158,250,251,252,159,253,254,255],[0,16,2,17,158,250,251,252,159,253,254,255,23,24,13,25,256,257,258,259,260,261,262,263,26,20,27,28,264,265,266,267,268,269,270,271,4,22,5,19,272,273,274,275,276,277,278,279],[0,16,2,17,158,250,251,252,159,253,254,255,29,21,15,30,280,281,282,283,284,285,286,287],[0,20,13,19,158,273,266,259,159,261,278,271],[0,20,13,19,158,273,266,259,159,261,278,271,29,31,32,33,280,288,289,290,284,291,292,293],[0,16,2,17,158,250,251,252,159,253,254,255,1,52,6,34,168,294,295,296,169,297,298,299],[0,16,2,17,158,250,251,252,159,253,254,255,53,54,9,42,300,301,302,303,304,305,306,307],[0,16,2,17,158,250,251,252,159,253,254,255,1,52,6,34,168,294,295,296,169,297,298,299,23,24,13,25,256,257,258,259,260,261,262,263,64,62,14,39,308,309,310,311,312,313,314,315,26,20,27,28,264,265,266,267,268,269,270,271,65,59,40,38,316,317,318,319,320,321,322,323,4,22,5,19,272,273,274,275,276,277,278,279,11,55,8,41,324,325,326,327,328,329,330,331],[0,16,2,17,158,250,251,252,159,253,254,255,66,67,44,45,332,333,334,335,336,337,338,339,23,24,13,25,256,257,258,259,260,261,262,263,68,69,46,47,340,341,342,343,344,345,346,347,26,20,27,28,264,265,266,267,268,269,270,271,70,71,48,49,348,349,350,351,352,353,354,355,4,22,5,19,272,273,274,275,276,277,278,279,72,73,50,51,356,357,358,359,360,361,362,363],[0,16,2,17,158,250,251,252,159,253,254,255,1,52,6,34,168,294,295,296,169,297,298,299,29,21,15,30,280,281,282,283,284,285,286,287,53,54,9,42,300,301,302,303,304,305,306,307],[0,20,13,19,158,273,266,259,159,261,278,271,1,59,14,41,168,325,318,311,169,313,330,323],[0,20,13,19,158,273,266,259,159,261,278,271,1,59,14,41,168,325,318,311,169,313,330,323,29,31,32,33,280,288,289,290,284,291,292,293,53,63,36,35,300,364,365,366,304,367,368,369],[0,16,2,17,158,250,251,252,159,253,254,255,100,101,75,74,370,371,188,372,373,374,375,189],[0,16,2,17,158,250,251,252,159,253,254,255,116,117,83,82,376,377,224,378,379,380,381,225],[0,16,2,17,158,250,251,252,159,253,254,255,100,101,75,74,370,371,188,372,373,374,375,189,23,24,13,25,256,257,258,259,260,261,262,263,382,383,384,385,386,387,388,389,390,391,392,393,26,20,27,28,264,265,266,267,268,269,270,271,394,395,396,397,398,399,400,401,402,403,404,405,4,22,5,19,272,273,274,275,276,277,278,279,138,139,95,94,406,407,408,409,410,411,412,413],[0,24,5,28,158,265,258,275,159,277,270,263,414,415,416,417,418,419,420,421,422,423,424,425,23,16,27,19,256,273,251,267,260,269,278,255,426,427,428,429,430,431,432,433,434,435,436,437,26,22,13,17,264,250,274,259,268,261,254,279,438,439,440,441,442,443,444,445,446,447,448,449,4,20,2,25,272,257,266,252,276,253,262,271,450,451,452,453,454,455,456,457,458,459,460,461],[0,16,2,17,158,250,251,252,159,253,254,255,100,101,75,74,370,371,188,372,373,374,375,189,29,21,15,30,280,281,282,283,284,285,286,287,116,117,83,82,376,377,224,378,379,380,381,225],[0,20,13,19,158,273,266,259,159,261,278,271,450,415,440,429,454,431,420,445,458,447,436,425],[0,20,13,19,158,273,266,259,159,261,278,271,462,463,464,465,466,467,468,469,470,471,472,473],[0,20,13,19,158,273,266,259,159,261,278,271,462,463,464,465,466,467,468,469,470,471,472,473,29,31,32,33,280,288,289,290,284,291,292,293,450,415,440,429,454,431,420,445,458,447,436,425],[0,16,2,17,158,250,251,252,159,253,254,255,123,122,88,89,204,474,475,476,205,477,478,479],[0,16,2,17,158,250,251,252,159,253,254,255,123,122,88,89,204,474,475,476,205,477,478,479,23,24,13,25,256,257,258,259,260,261,262,263,480,481,482,483,484,485,486,487,488,489,490,491,26,20,27,28,264,265,266,267,268,269,270,271,492,493,494,495,496,497,498,499,500,501,502,503,4,22,5,19,272,273,274,275,276,277,278,279,125,124,140,141,504,505,506,507,508,509,510,511],[0,16,2,17,158,250,251,252,159,253,254,255,123,122,88,89,204,474,475,476,205,477,478,479,29,21,15,30,280,281,282,283,284,285,286,287,129,128,90,91,212,512,513,514,213,515,516,517],[0,16,2,17,158,250,251,252,159,253,254,255,129,128,90,91,212,512,513,514,213,515,516,517],[0,16,2,17,158,250,251,252,159,253,254,255,129,128,90,91,212,512,513,514,213,515,516,517,23,24,13,25,256,257,258,259,260,261,262,263,518,519,520,521,522,523,524,525,526,527,528,529,26,20,27,28,264,265,266,267,268,269,270,271,530,531,532,533,534,535,536,537,538,539,540,541,4,22,5,19,272,273,274,275,276,277,278,279,127,126,92,93,542,543,544,545,546,547,548,549],[0,20,13,19,158,273,266,259,159,261,278,271,550,551,552,553,554,555,556,557,558,559,560,561,29,31,32,33,280,288,289,290,284,291,292,293,562,563,564,565,566,567,568,569,570,571,572,573],[0,16,2,17,158,250,251,252,159,253,254,255,100,101,75,74,370,371,188,372,373,374,375,189,1,52,6,34,168,294,295,296,169,297,298,299,122,123,89,88,475,476,204,474,479,478,477,205],[0,16,2,17,158,250,251,252,159,253,254,255,100,101,75,74,370,371,188,372,373,374,375,189,53,54,9,42,300,301,302,303,304,305,306,307,128,129,91,90,513,514,212,512,517,516,515,213],[0,16,2,17,158,250,251,252,159,253,254,255,116,117,83,82,376,377,224,378,379,380,381,225,1,52,6,34,168,294,295,296,169,297,298,299,128,129,91,90,513,514,212,512,517,516,515,213],[0,16,2,17,158,250,251,252,159,253,254,255,116,117,83,82,376,377,224,378,379,380,381,225,53,54,9,42,300,301,302,303,304,305,306,307,122,123,89,88,475,476,204,474,479,478,477,205],[0,16,2,17,158,250,251,252,159,253,254,255,100,101,75,74,370,371,188,372,373,374,375,189,1,52,6,34,168,294,295,296,169,297,298,299,122,123,89,88,475,476,204,474,479,478,477,205,23,24,13,25,256,257,258,259,260,261,262,263,382,383,384,385,386,387,388,389,390,391,392,393,64,62,14,39,308,309,310,311,312,313,314,315,481,480,483,482,486,487,484,485,491,490,489,488,26,20,27,28,264,265,266,267,268,269,270,271,394,395,396,397,398,399,400,401,402,403,404,405,65,59,40,38,316,317,318,319,320,321,322,323,493,492,495,494,498,499,496,497,503,502,501,500,4,22,5,19,272,273,274,275,276,277,278,279,138,139,95,94,406,407,408,409,410,411,412,413,11,55,8,41,324,325,326,327,328,329,330,331,124,125,141,140,506,507,504,505,511,510,509,508],[0,16,2,17,158,250,251,252,159,253,254,255,116,117,83,82,376,377,224,378,379,380,381,225,1,52,6,34,168,294,295,296,169,297,298,299,128,129,91,90,513,514,212,512,517,516,515,213,23,24,13,25,256,257,258,259,260,261,262,263,574,575,576,577,578,579,580,581,582,583,584,585,64,62,14,39,308,309,310,311,312,313,314,315,519,518,521,520,524,525,522,523,529,528,527,526,26,20,27,28,264,265,266,267,268,269,270,271,586,587,588,589,590,591,592,593,594,595,596,597,65,59,40,38,316,317,318,319,320,321,322,323,531,530,533,532,536,537,534,535,541,540,539,538,4,22,5,19,272,273,274,275,276,277,278,279,109,108,79,78,598,599,600,601,602,603,604,605,11,55,8,41,324,325,326,327,328,329,330,331,126,127,93,92,544,545,542,543,549,548,547,546],[0,24,5,28,158,265,258,275,159,277,270,263,414,415,416,417,418,419,420,421,422,423,424,425,66,69,50,49,332,349,342,359,336,361,354,347,493,123,483,140,498,507,204,485,503,490,509,205,23,16,27,19,256,273,251,267,260,269,278,255,426,427,428,429,430,431,432,433,434,435,436,437,68,67,48,51,340,357,334,351,344,353,362,339,124,480,89,494,506,499,484,474,511,478,501,488,26,22,13,17,264,250,274,259,268,261,254,279,438,439,440,441,442,443,444,445,446,447,448,449,70,73,46,45,348,333,358,343,352,345,338,363,122,492,141,482,475,487,496,505,479,510,489,500,4,20,2,25,272,257,266,252,276,253,262,271,450,451,452,453,454,455,456,457,458,459,460,461,72,71,44,47,356,341,350,335,360,337,346,355,481,125,495,88,486,476,504,497,491,502,477,508],[0,24,5,28,158,265,258,275,159,277,270,263,414,415,416,417,418,419,420,421,422,423,424,425,606,607,608,609,610,611,612,613,614,615,616,617,531,129,521,92,536,545,212,523,541,528,547,213,23,16,27,19,256,273,251,267,260,269,278,255,426,427,428,429,430,431,432,433,434,435,436,437,618,619,620,621,622,623,624,625,626,627,628,629,126,518,91,532,544,537,522,512,549,516,539,526,26,22,13,17,264,250,274,259,268,261,254,279,438,439,440,441,442,443,444,445,446,447,448,449,630,631,632,633,634,635,636,637,638,639,640,641,128,530,93,520,513,525,534,543,517,548,527,538,4,20,2,25,272,257,266,252,276,253,262,271,450,451,452,453,454,455,456,457,458,459,460,461,642,643,644,645,646,647,648,649,650,651,652,653,519,127,533,90,524,514,542,535,529,540,515,546],[0,16,2,17,158,250,251,252,159,253,254,255,100,101,75,74,370,371,188,372,373,374,375,189,1,52,6,34,168,294,295,296,169,297,298,299,122,123,89,88,475,476,204,474,479,478,477,205,29,21,15,30,280,281,282,283,284,285,286,287,116,117,83,82,376,377,224,378,379,380,381,225,53,54,9,42,300,301,302,303,304,305,306,307,128,129,91,90,513,514,212,512,517,516,515,213],[0,20,13,19,158,273,266,259,159,261,278,271,462,463,464,465,466,467,468,469,470,471,472,473,1,59,14,41,168,325,318,311,169,313,330,323,551,550,553,552,556,557,554,555,561,560,559,558,29,31,32,33,280,288,289,290,284,291,292,293,450,415,440,429,454,431,420,445,458,447,436,425,53,63,36,35,300,364,365,366,304,367,368,369,563,562,565,564,568,569,566,567,573,572,571,570],[0,16],[0,18],[0,16,26,20],[0,2,23,13],[0,3,4,32],[0,2,29,15],[0,3,29,27],[0,52],[0,63],[0,52,26,59],[0,63,26,54],[0,52,16,1],[0,18,1,61],[0,52,16,1,26,59,20,65],[0,31,1,63],[0,1,24,62],[0,15,1,9],[0,5,1,8],[0,31,1,63,26,21,65,54],[0,2,57,56],[0,60,3,16],[0,22,57,3],[0,2,28,20],[0,17,13,24],[0,20,19,13,4,24,17,27],[0,22,57,3,4,16,60,32],[0,22,57,3,23,20,30,12,26,24,33,15,4,16,60,32],[0,22,57,3,29,18,27,25],[0,22,3,57,1,55,10,37],[0,22,385,396,3,57,109,117],[0,22,57,3,159,279,654,655,158,274,656,657,29,18,25,27,284,658,262,269,280,659,257,267]],l2={"P 1":0,"P -1":1,"P 1 2 1":2,"P 1 21 1":3,"C 1 2 1":4,"P 1 m 1":5,"P 1 c 1":6,"C 1 m 1":7,"C 1 c 1":8,"P 1 2/m 1":9,"P 1 21/m 1":10,"C 1 2/m 1":11,"P 1 2/c 1":12,"P 1 21/c 1":13,"C 1 2/c 1":14,"P 2 2 2":15,"P 2 2 21":16,"P 21 21 2":17,"P 21 21 21":18,"C 2 2 21":19,"C 2 2 2":20,"F 2 2 2":21,"I 2 2 2":22,"I 21 21 21":23,"P m m 2":24,"P m c 21":25,"P c c 2":26,"P m a 2":27,"P c a 21":28,"P n c 2":29,"P m n 21":30,"P b a 2":31,"P n a 21":32,"P n n 2":33,"C m m 2":34,"C m c 21":35,"C c c 2":36,"A m m 2":37,"A b m 2":38,"A m a 2":39,"A b a 2":40,"F m m 2":41,"F d d 2":42,"I m m 2":43,"I b a 2":44,"I m a 2":45,"P 2/m 2/m 2/m":46,"P m m m":46,"P 2/n 2/n 2/n":47,"P n n n":47,"P 2/c 2/c 2/m":48,"P c c m":48,"P 2/b 2/a 2/n":49,"P b a n":49,"P 21/m 2/m 2/a":50,"P m m a":50,"P 2/n 21/n 2/a":51,"P n n a":51,"P 2/m 2/n 21/a":52,"P m n a":52,"P 21/c 2/c 2/a":53,"P c c a":53,"P 21/b 21/a 2/m":54,"P b a m":54,"P 21/c 21/c 2/n":55,"P c c n":55,"P 2/b 21/c 21/m":56,"P b c m":56,"P 21/n 21/n 2/m":57,"P n n m":57,"P 21/m 21/m 2/n":58,"P m m n":58,"P 21/b 2/c 21/n":59,"P b c n":59,"P 21/b 21/c 21/a":60,"P b c a":60,"P 21/n 21/m 21/a":61,"P n m a":61,"C 2/m 2/c 21/m":62,"C m c m":62,"C 2/m 2/c 21/a":63,"C m c a":63,"C 2/m 2/m 2/m":64,"C m m m":64,"C 2/c 2/c 2/m":65,"C c c m":65,"C 2/m 2/m 2/a":66,"C m m a":66,"C 2/c 2/c 2/a":67,"C c c a":67,"F 2/m 2/m 2/m":68,"F m m m":68,"F 2/d 2/d 2/d":69,"F d d d":69,"I 2/m 2/m 2/m":70,"I m m m":70,"I 2/b 2/a 2/m":71,"I b a m":71,"I 21/b 21/c 21/a":72,"I b c a":72,"I 21/m 21/m 21/a":73,"I m m a":73,"P 4":74,"P 41":75,"P 42":76,"P 43":77,"I 4":78,"I 41":79,"P -4":80,"I -4":81,"P 4/m":82,"P 42/m":83,"P 4/n":84,"P 42/n":85,"I 4/m":86,"I 41/a":87,"P 4 2 2":88,"P 4 21 2":89,"P 41 2 2":90,"P 41 21 2":91,"P 42 2 2":92,"P 42 21 2":93,"P 43 2 2":94,"P 43 21 2":95,"I 4 2 2":96,"I 41 2 2":97,"P 4 m m":98,"P 4 b m":99,"P 42 c m":100,"P 42 n m":101,"P 4 c c":102,"P 4 n c":103,"P 42 m c":104,"P 42 b c":105,"I 4 m m":106,"I 4 c m":107,"I 41 m d":108,"I 41 c d":109,"P -4 2 m":110,"P -4 2 c":111,"P -4 21 m":112,"P -4 21 c":113,"P -4 m 2":114,"P -4 c 2":115,"P -4 b 2":116,"P -4 n 2":117,"I -4 m 2":118,"I -4 c 2":119,"I -4 2 m":120,"I -4 2 d":121,"P 4/m 2/m 2/m":122,"P4/m m m":122,"P 4/m 2/c 2/c":123,"P4/m c c":123,"P 4/n 2/b 2/m":124,"P4/n b m":124,"P 4/n 2/n 2/c":125,"P4/n n c":125,"P 4/m 21/b 2/m":126,"P4/m b m":126,"P 4/m 21/n 2/c":127,"P4/m n c":127,"P 4/n 21/m 2/m":128,"P4/n m m":128,"P 4/n 2/c 2/c":129,"P4/n c c":129,"P 42/m 2/m 2/c":130,"P42/m m c":130,"P 42/m 2/c 2/m":131,"P42/m c m":131,"P 42/n 2/b 2/c":132,"P42/n b c":132,"P 42/n 2/n 2/m":133,"P42/n n m":133,"P 42/m 21/b 2/c":134,"P42/m b c":134,"P 42/m 21/n 2/m":135,"P42/m n m":135,"P 42/n 21/m 2/c":136,"P42/n m c":136,"P 42/n 21/c 2/m":137,"P42/n c m":137,"I 4/m 2/m 2/m":138,"I4/m m m":138,"I 4/m 2/c 2/m":139,"I4/m c m":139,"I 41/a 2/m 2/d":140,"I41/a m d":140,"I 41/a 2/c 2/d":141,"I41/a c d":141,"P 3":142,"P 31":143,"P 32":144,"H 3":145,"R 3":146,"P -3":147,"H -3":148,"R -3":149,"P 3 1 2":150,"P 3 2 1":151,"P 31 1 2":152,"P 31 2 1":153,"P 32 1 2":154,"P 32 2 1":155,"H 3 2":156,"R 3 2":157,"P 3 m 1":158,"P 3 1 m":159,"P 3 c 1":160,"P 3 1 c":161,"H 3 m":162,"R 3 m":163,"H 3 c":164,"R 3 c":165,"P -3 1 2/m":166,"P -3 1 m":166,"P -3 1 2/c":167,"P -3 1 c":167,"P -3 2/m 1":168,"P -3 m 1":168,"P -3 2/c 1":169,"P -3 c 1":169,"H -3 2/m":170,"H -3 m":170,"R -3 2/m":171,"R -3 m":171,"H -3 2/c":172,"H -3 c":172,"R -3 2/c":173,"R -3 c":173,"P 6":174,"P 61":175,"P 65":176,"P 62":177,"P 64":178,"P 63":179,"P -6":180,"P 6/m":181,"P 63/m":182,"P 6 2 2":183,"P 61 2 2":184,"P 65 2 2":185,"P 62 2 2":186,"P 64 2 2":187,"P 63 2 2":188,"P 6 m m":189,"P 6 c c":190,"P 63 c m":191,"P 63 m c":192,"P -6 m 2":193,"P -6 c 2":194,"P -6 2 m":195,"P -6 2 c":196,"P 6/m 2/m 2/m":197,"P 6/m m m":197,"P 6/m 2/c 2/c":198,"P 6/m c c":198,"P 63/m 2/c 2/m":199,"P 63/m c m":199,"P 63/m 2/m 2/c":200,"P 63/m m c":200,"P 2 3":201,"F 2 3":202,"I 2 3":203,"P 21 3":204,"I 21 3":205,"P 2/m -3":206,"P m -3":206,"P 2/n -3":207,"P n -3":207,"F 2/m -3":208,"F m -3":208,"F 2/d -3":209,"F d -3":209,"I 2/m -3":210,"I m -3":210,"P 21/a -3":211,"P a -3":211,"I 21/a -3":212,"I a -3":212,"P 4 3 2":213,"P 42 3 2":214,"F 4 3 2":215,"F 41 3 2":216,"I 4 3 2":217,"P 43 3 2":218,"P 41 3 2":219,"I 41 3 2":220,"P -4 3 m":221,"F -4 3 m":222,"I -4 3 m":223,"P -4 3 n":224,"F -4 3 c":225,"I -4 3 d":226,"P 4/m -3 2/m":227,"P m -3 m":227,"P 4/n -3 2/n":228,"P n -3 n":228,"P 42/m -3 2/n":229,"P m -3 n":229,"P 42/n -3 2/m":230,"P n -3 m":230,"F 4/m -3 2/m":231,"F m -3 m":231,"F 4/m -3 2/c":232,"F m -3 c":232,"F 41/d -3 2/m":233,"F d -3 m":233,"F 41/d -3 2/c":234,"F d -3 c":234,"I 4/m -3 2/m":235,"I m -3 m":235,"I 41/a -3 2/d":236,"I a -3 d":236,"P 1 1 2":237,"P 1 1 21":238,"B 1 1 2":239,"B 2":239,"A 1 2 1":240,"C 1 21 1":241,"I 1 2 1":242,"I 2":242,"I 1 21 1":243,"P 1 1 m":244,"P 1 1 b":245,"B 1 1 m":246,"B 1 1 b":247,"P 1 1 2/m":248,"P 1 1 21/m":249,"B 1 1 2/m":250,"P 1 1 2/b":251,"P 1 1 21/b":252,"P 1 21/n 1":253,"P 1 21/a 1":254,"B 1 1 2/b":255,"P 21 2 2":256,"P 2 21 2":257,"P 21 21 2 (a)":258,"P 21 2 21":259,"P 2 21 21":260,"C 2 2 21a)":261,"C 2 2 2a":262,"F 2 2 2a":263,"I 2 2 2a":264,"P 21/m 21/m 2/n a":265,"P 42 21 2a":266,"I 2 3a":267};function Wje(e){switch(e){case 1146:return 146;case 1148:return 149;case 1155:return 157;case 1160:return 163;case 1161:return 165;case 1166:return 171;case 1167:return 173;case 1003:return 237;case 1004:return 238;case 1005:return 239;case 2005:return 240;case 3005:return 241;case 4005:return 242;case 5005:return 243;case 1006:return 244;case 1007:return 245;case 1008:return 246;case 1009:return 247;case 1010:return 248;case 1011:return 249;case 1012:return 250;case 1013:return 251;case 1014:return 252;case 2014:return 253;case 3014:return 254;case 1015:return 255;case 1017:return 256;case 2017:return 257;case 1018:return 258;case 2018:return 259;case 3018:return 260;case 1020:return 261;case 1021:return 262;case 1022:return 263;case 1023:return 264;case 1059:return 265;case 1094:return 266;case 1197:return 267}let t=0;return e>146&&++t,e>148&&++t,e>155&&++t,e>160&&++t,e>161&&++t,e>166&&++t,e>167&&++t,e-1+t}function Xje(e){if(e<146)return e+1;if(e===146)return 1146;if(e<149)return e+1-1;if(e===149)return 1148;if(e<157)return e+1-2;if(e===157)return 1155;if(e<163)return e+1-3;if(e===163)return 1160;if(e<165)return e+1-4;if(e===165)return 1161;if(e<171)return e+1-5;if(e===171)return 1166;if(e<173)return e+1-6;if(e===173)return 1167;if(e<237)return e+1-7;if(e===237)return 1003;if(e===238)return 1004;if(e===239)return 1005;if(e===240)return 2005;if(e===241)return 3005;if(e===242)return 4005;if(e===243)return 5005;if(e===244)return 1006;if(e===245)return 1007;if(e===246)return 1008;if(e===247)return 1009;if(e===248)return 1010;if(e===249)return 1011;if(e===250)return 1012;if(e===251)return 1013;if(e===252)return 1014;if(e===253)return 2014;if(e===254)return 3014;if(e===255)return 1015;if(e===256)return 1017;if(e===257)return 2017;if(e===258)return 1018;if(e===259)return 2018;if(e===260)return 3018;if(e===261)return 1020;if(e===262)return 1021;if(e===263)return 1022;if(e===264)return 1023;if(e===265)return 1059;if(e===266)return 1094;if(e===267)return 1197;throw new Error(`unknown spacegroup index '${e}'`)}var sK=(function(){let e=Object.create(null);for(let t of Object.keys(l2))e[l2[t]]=t;return e})(),nge=(function(){let e=Object.create(null);for(let t of Object.keys(l2)){let r=l2[t];e[r]=Xje(r)}return e})();function oge(e){let t=typeof e=="number"?Wje(e):l2[e];return typeof t>"u"||typeof sK[t]>"u"?-1:t}var Ia;(n=>{n.Zero=r("P 1",B.create(1,1,1),B.create(Math.PI/2,Math.PI/2,Math.PI/2));function t(o){return o?o.index===0&&o.size[0]===1&&o.size[1]===1&&o.size[1]===1:!0}n.isZero=t;function r(o,i,a){let A=oge(o);if(A<0)return console.warn(`Unknown spacegroup '${o}', returning a 'P 1' with cellsize [1, 1, 1]`),n.Zero;let s=i[0]*i[1]*i[2],c=a[0],l=a[1],u=a[2],g=i[0],m=i[1],p=i[2],d=Math.cos(l),f=(Math.cos(c)-Math.cos(l)*Math.cos(u))/Math.sin(u),I=Math.sqrt(1-d*d-f*f),C=[g,0,0],y=[Math.cos(u)*m,Math.sin(u)*m,0],Q=[d*p,f*p,I*p],E=Y.ofRows([[C[0],y[0],Q[0],0],[0,y[1],Q[1],0],[0,0,Q[2],0],[0,0,0,1]]),b=Y.invert(Y.zero(),E);return{index:A,size:i,volume:s,anglesInRadians:a,toFractional:b,fromFractional:E}}n.create=r})(Ia||={});var HA;(f=>{f.ZeroP1=t(Ia.Zero);function t(I){let C=rge[I.index].map(E=>u(tge[E])),y=sK[I.index],Q=nge[I.index];return{name:y,num:Q,cell:I,operators:C}}f.create=t;let r=B(),n=Y();function o(I,C,y,Q,E,b){return B.set(r,y,Q,E),Y.fromTranslation(n,r),Y.mul(b,Y.mul(b,Y.mul(b,I.cell.fromFractional,n),I.operators[C]),I.cell.toFractional)}f.setOperatorMatrix=o;function i(I,C,y,Q,E){let b=o(I,C,y,Q,E,Y.zero());return Go.create(Go.getSymmetryOperatorName(C,y,Q,E),b,{hkl:B.create(y,Q,E),spgrOp:C})}f.getSymmetryOperator=i;let a=B(),A=B(),s=B(),c=B();function l(I,C,y,Q,E,b){let x=Y.zero();B.set(r,y,Q,E),B.floor(a,b),Y.copy(x,I.operators[C]),B.floor(A,B.transformMat4(A,b,x)),Y.getTranslation(c,x),B.sub(c,c,A),B.add(c,c,a),B.add(c,c,r),Y.setTranslation(x,c),Y.mul(x,I.cell.fromFractional,x),Y.mul(x,x,I.cell.toFractional),B.sub(s,A,a);let S=y-s[0],w=Q-s[1],R=E-s[2];return Go.create(Go.getSymmetryOperatorName(C,S,w,R),x,{hkl:B.create(S,w,R),spgrOp:C})}f.getSymmetryOperatorRef=l;function u(I){let C=DG[I[0]],y=DG[I[1]],Q=DG[I[2]];return Y.ofRows([C,y,Q,[0,0,0,1]])}function g(I){return[d(m(I[0],I[4],I[8]),p(I[12])),d(m(I[1],I[5],I[9]),p(I[13])),d(m(I[2],I[6],I[10]),p(I[14]))].join(",")}f.getOperatorXyz=g;function m(I,C,y){let Q=[];if(I>0?Q.push("+X"):I<0&&Q.push("-X"),C>0?Q.push("+Y"):C<0&&Q.push("-Y"),y>0?Q.push("+Z"):y<0&&Q.push("-Z"),Q.length===1)return Q[0].charAt(0)==="+"?Q[0].substr(1):Q[0];if(Q.length===2){let E=Q[0].charAt(0),b=Q[1].charAt(0);if(E==="+")return`${Q[0].substr(1)}${Q[1]}`;if(b==="+")return`${Q[1].substr(1)}${Q[0]}`}throw new Error(`unknown rotation '${Q}', ${I} ${C} ${y}`)}function p(I){switch(I){case 1/2:return"1/2";case 1/4:return"1/4";case 3/4:return"3/4";case 1/3:return"1/3";case 2/3:return"2/3";case 1/6:return"1/6";case 5/6:return"5/6"}return""}function d(I,C){return C===""?I:I.length>2?`${I}+${C}`:I.charAt(0)==="-"?`${C}${I}`:`${C}+${I}`}})(HA||={});var Lu;(o=>{function e(i,a,A){i.squaredDistances[i.count]=A,i.indices[i.count++]=a}o.add=e;function t(i){i.count=0}o.reset=t;function r(){return{count:0,indices:[],squaredDistances:[]}}o.create=r;function n(i,a){for(let A=0;A<a.count;++A)i.indices[A]=a.indices[A],i.squaredDistances[A]=a.squaredDistances[A];return i.count=a.count,i}o.copy=n})(Lu||={});var lK=class{constructor(t,r){this.parent=null;this.child=null;this.degree=0;this.isMarked=!1;this.key=t,this.value=r,this.prev=this,this.next=this}},uK=class{constructor(t){if(this._index=-1,this._items=[],this._len=0,t){let r=t,n=0;do this._items[n++]=r,r=r.next;while(t!==r);this._len=n}}hasNext(){return this._index<this._len-1}next(){return this._items[++this._index]}reset(t){this._index=-1,this._len=0;let r=t,n=0;do this._items[n++]=r,r=r.next;while(t!==r);this._len=n}},cK=new uK,WS=class{constructor(t){this._minNode=null;this._nodeCount=0;this._compare=t||this._defaultCompare}clear(){this._minNode=null,this._nodeCount=0}decreaseKey(t,r){if(!t)throw new Error("Cannot decrease key of non-existent node");if(this._compare({key:r},{key:t.key})>0)throw new Error("New key is larger than old key");t.key=r;let n=t.parent;n&&this._compare(t,n)<0&&(this._cut(t,n,this._minNode),this._cascadingCut(n,this._minNode)),this._compare(t,this._minNode)<0&&(this._minNode=t)}delete(t){let r=t.parent;r&&(this._cut(t,r,this._minNode),this._cascadingCut(r,this._minNode)),this._minNode=t,this.extractMinimum()}extractMinimum(){let t=this._minNode;if(t){if(t.child){let n=t.child;do n.parent=null,n=n.next;while(n!==t.child)}let r=null;t.next!==t&&(r=t.next),this._removeNodeFromList(t),this._nodeCount--,this._minNode=this._mergeLists(r,t.child),this._minNode&&(this._minNode=this._consolidate(this._minNode))}return t}findMinimum(){return this._minNode}insert(t,r){let n=new lK(t,r);return this._minNode=this._mergeLists(this._minNode,n),this._nodeCount++,n}isEmpty(){return this._minNode===null}size(){return this._minNode===null?0:this._getNodeListSize(this._minNode)}union(t){this._minNode=this._mergeLists(this._minNode,t._minNode),this._nodeCount+=t._nodeCount}_defaultCompare(t,r){return t.key>r.key?1:t.key<r.key?-1:0}_cut(t,r,n){t.parent=null,r.degree--,t.next===t?r.child=null:r.child=t.next,this._removeNodeFromList(t);let o=this._mergeLists(n,t);return t.isMarked=!1,o}_cascadingCut(t,r){let n=t.parent;return n&&(t.isMarked?(r=this._cut(t,n,r),r=this._cascadingCut(n,r)):t.isMarked=!0),r}_consolidate(t){let r=[];for(cK.reset(t);cK.hasNext();){let o=cK.next(),i=r[o.degree];for(;i;){if(this._compare(o,i)>0){let a=o;o=i,i=a}this._linkHeaps(i,o),r[o.degree]=null,o.degree++,i=r[o.degree]}r[o.degree]=o}let n=null;for(let o=0;o<r.length;o++){let i=r[o];i&&(i.next=i,i.prev=i,n=this._mergeLists(n,i))}return n}_removeNodeFromList(t){let r=t.prev,n=t.next;r.next=n,n.prev=r,t.next=t,t.prev=t}_linkHeaps(t,r){this._removeNodeFromList(t),r.child=this._mergeLists(t,r.child),t.parent=r,t.isMarked=!1}_mergeLists(t,r){if(!t)return r||null;if(!r)return t;let n=t.next;return t.next=r.next,t.next.prev=t,r.next=n,r.next.prev=r,this._compare(t,r)<0?t:r}_getNodeListSize(t){let r=0,n=t;do r++,n.child&&(r+=this._getNodeListSize(n.child)),n=n.next;while(n!==t);return r}};function VA(e){let t,r;return(...n)=>{if(!t||t.length!==n.length)return t=n,r=e.apply(void 0,n),r;for(let o=0,i=n.length;o<i;o++)if(n[o]!==t[o])return t=n,r=e.apply(void 0,n),r;return r}}function Tu(e){let t=new Map;return r=>{if(t.has(r))return t.get(r);let n=e(r);return t.set(r,n),n}}function nu(){return nu.create(B.create(0,0,0),B.create(1,0,0))}(m=>{function e(p,d){return{origin:p,direction:d}}m.create=e;function t(p,d){return B.copy(p.origin,d.origin),B.copy(p.direction,d.direction),p}m.copy=t;function r(p){return t(m(),p)}m.clone=r;function n(p,d,f){return B.copy(p.origin,d.origin),B.normalize(p.direction,B.sub(p.direction,f,d.origin)),p}m.targetTo=n;function o(p,d,f){return B.transformMat4(p.origin,d.origin,f),B.transformDirection(p.direction,d.direction,f),p}m.transform=o;let i=B();function a(p,d){let{center:f,radius:I}=d,{origin:C,direction:y}=p,Q=B.sub(i,C,f),E=B.dot(y,y),b=2*B.dot(Q,y),x=B.dot(Q,Q)-I*I,S=b*b-4*E*x;if(S<0)return-1;let w=(-b-Math.sqrt(S))/(2*E);return w<0?-1:w}function A(p,d,f){let I=a(d,f);return I<0?!1:(B.scaleAndAdd(p,d.origin,d.direction,I),!0)}m.intersectSphere3D=A;function s(p,d){return a(p,d)>=0}m.isIntersectingSphere3D=s;function c(p,d){return B.distance(p.origin,d.center)<d.radius}m.isInsideSphere3D=c;function l(p,d){let{origin:f,direction:I}=p,[C,y,Q]=d.min,[E,b,x]=d.max,[S,w,R]=f,T=1/I[0],L=1/I[1],F=1/I[2],v,U,G,N,k,J;return T>=0?(v=(C-S)*T,U=(E-S)*T):(v=(E-S)*T,U=(C-S)*T),L>=0?(G=(y-w)*L,N=(b-w)*L):(G=(b-w)*L,N=(y-w)*L),v>N||G>U||(G>v&&(v=G),N<U&&(U=N),F>=0?(k=(Q-R)*F,J=(x-R)*F):(k=(x-R)*F,J=(Q-R)*F),v>J||k>U)?-1:(k>v&&(v=k),J<U&&(U=J),v>=0?v:-1)}function u(p,d,f){let I=l(d,f);return I<0?!1:(B.scaleAndAdd(p,d.origin,d.direction,I),!0)}m.intersectBox3D=u;function g(p,d){return l(p,d)>=0}m.isIntersectingBox3D=g})(nu||={});function ou(e,t,r){return new mK(e,t,r)}var mK=class{find(t,r,n,o,i){this.ctx.x=t,this.ctx.y=r,this.ctx.z=n,this.ctx.radius=o,this.ctx.isCheck=!1;let a=i??this.result;return age(this.ctx,a),a}nearest(t,r,n,o=1,i,a){this.ctx.x=t,this.ctx.y=r,this.ctx.z=n,this.ctx.k=o,this.ctx.stopIf=i;let A=a??this.result;return a9e(this.ctx,A),A}check(t,r,n,o){return this.ctx.x=t,this.ctx.y=r,this.ctx.z=n,this.ctx.radius=o,this.ctx.isCheck=!0,age(this.ctx,this.result)}approxNearest(t,r,n,o,i){this.ctx.x=t,this.ctx.y=r,this.ctx.z=n,this.ctx.radius=o,this.ctx.isCheck=!1;let a=i??this.result;return r9e(this.ctx,a),a}constructor(t,r,n){let o=qje(t,r,n);this.ctx=$je(o),this.boundary={box:o.boundingBox,sphere:o.boundingSphere},this.buckets={offset:o.bucketOffset,count:o.bucketCounts,array:o.bucketArray},this.result=Lu.create()}};function Zje(e){let{expandedBox:t,size:[r,n,o],data:{x:i,y:a,z:A,radius:s,indices:c},elementCount:l,delta:u}=e,g=r*n*o,{min:[m,p,d]}=t,f=0,I=0,C=new Uint32Array(g),y=new Int32Array(l);for(let S=0;S<l;S++){let w=Ee.getAt(c,S),R=Math.floor((i[w]-m)/u[0]),T=Math.floor((a[w]-p)/u[1]),L=Math.floor((A[w]-d)/u[2]),F=(R*n+T)*o+L;(C[F]+=1)===1&&(I+=1),y[S]=F}if(s)for(let S=0;S<l;S++){let w=Ee.getAt(c,S);s[w]>f&&(f=s[w])}let Q=new Int32Array(I);for(let S=0,w=0;S<g;S++){let R=C[S];R>0&&(C[S]=w+1,Q[w]=R,w+=1)}let E=new Uint32Array(I);for(let S=1;S<I;++S)E[S]+=E[S-1]+Q[S-1];let b=new Int32Array(I),x=new Int32Array(l);for(let S=0;S<l;S++){let w=C[y[S]];if(w>0){let R=w-1;x[E[R]+b[R]]=S,b[R]+=1}}return{size:e.size,bucketArray:x,bucketCounts:Q,bucketOffset:E,grid:C,delta:u,min:e.expandedBox.min,data:e.data,maxRadius:f,expandedBox:e.expandedBox,boundingBox:e.boundingBox,boundingSphere:e.boundingSphere}}var ige=2**24;function qje(e,t,r){let n=Ct.expand(Ct(),t.box,B.create(.5,.5,.5)),{indices:o}=e,i=Ct.size(B(),n),a,A,s=Ee.size(o),c=typeof r=="number"?r:32,l=Array.isArray(r)&&r;if(l&&!B.isZero(l))A=[Math.ceil(i[0]/l[0]),Math.ceil(i[1]/l[1]),Math.ceil(i[2]/l[2])],a=l;else if(s>0){let p=Math.ceil(s/c),d=Math.pow(p/(i[0]*i[1]*i[2]),1/3);A=[Math.ceil(i[0]*d),Math.ceil(i[1]*d),Math.ceil(i[2]*d)],a=[i[0]/A[0],i[1]/A[1],i[2]/A[2]]}else a=i,A=[1,1,1];let u=A[0]*A[1]*A[2];if(u>ige){let p=Math.cbrt(u/ige);A=[Math.ceil(A[0]/p),Math.ceil(A[1]/p),Math.ceil(A[2]/p)],a=[i[0]/A[0],i[1]/A[1],i[2]/A[2]]}let g={x:e.x,y:e.y,z:e.z,indices:o,radius:e.radius},m={size:A,data:g,expandedBox:n,boundingBox:t.box,boundingSphere:t.sphere,elementCount:s,delta:a};return Zje(m)}function $je(e){return{grid:e,x:.1,y:.1,z:.1,k:1,stopIf:void 0,radius:.1,isCheck:!1}}function age(e,t){let{min:r,size:[n,o,i],bucketOffset:a,bucketCounts:A,bucketArray:s,grid:c,data:{x:l,y:u,z:g,indices:m,radius:p},delta:d,maxRadius:f}=e.grid,{radius:I,isCheck:C,x:y,y:Q,z:E}=e,b=I+f,x=b*b;Lu.reset(t);let S=Math.max(0,Math.floor((y-b-r[0])/d[0])),w=Math.max(0,Math.floor((Q-b-r[1])/d[1])),R=Math.max(0,Math.floor((E-b-r[2])/d[2])),T=Math.min(n-1,Math.floor((y+b-r[0])/d[0])),L=Math.min(o-1,Math.floor((Q+b-r[1])/d[1])),F=Math.min(i-1,Math.floor((E+b-r[2])/d[2]));if(S>T||w>L||R>F)return!1;for(let v=S;v<=T;v++)for(let U=w;U<=L;U++)for(let G=R;G<=F;G++){let N=c[(v*o+U)*i+G];if(N===0)continue;let k=N-1,J=a[k],H=A[k],z=J+H;for(let _=J;_<z;_++){let M=Ee.getAt(m,s[_]),q=l[M]-y,ne=u[M]-Q,oe=g[M]-E,ae=q*q+ne*ne+oe*oe;if(ae<=x){if(f>0&&Math.sqrt(ae)-p[M]>I)continue;if(C)return!0;Lu.add(t,s[_],ae)}}}return t.count>0}function e9e(e){let t=[],r=e*2+1;for(let n=0;n<r;++n)for(let o=0;o<r;++o)for(let i=0;i<r;++i)t.push(B.create(n-e,o-e,i-e));return t.sort((n,o)=>B.squaredMagnitude(n)-B.squaredMagnitude(o)),t.flat()}var t9e=Tu(e9e);function r9e(e,t){let{min:r,size:[n,o,i],bucketOffset:a,bucketCounts:A,bucketArray:s,grid:c,data:{x:l,y:u,z:g,indices:m},delta:p}=e.grid,{radius:d,x:f,y:I,z:C}=e,y=d*d;Lu.reset(t);let Q=Math.max(0,Math.floor((f-d-r[0])/p[0])),E=Math.max(0,Math.floor((I-d-r[1])/p[1])),b=Math.max(0,Math.floor((C-d-r[2])/p[2])),x=Math.min(n-1,Math.floor((f+d-r[0])/p[0])),S=Math.min(o-1,Math.floor((I+d-r[1])/p[1])),w=Math.min(i-1,Math.floor((C+d-r[2])/p[2]));if(Q>x||E>S||b>w)return!1;let R=Math.floor((f-r[0])/p[0]),T=Math.floor((I-r[1])/p[1]),L=Math.floor((C-r[2])/p[2]),F=t9e(Math.max(x-Q,S-E,w-b)+1);for(let v=0,U=F.length;v<U;v+=3){let G=R+F[v],N=T+F[v+1],k=L+F[v+2];if(G<Q||G>x||N<E||N>S||k<b||k>w)continue;let J=c[(G*o+N)*i+k];if(J===0)continue;let H=J-1,z=a[H],_=A[H],M=z+_,q=Number.MAX_VALUE;for(let ne=z;ne<M;ne++){let oe=Ee.getAt(m,s[ne]),ae=l[oe]-f,me=u[oe]-I,Se=g[oe]-C,ee=ae*ae+me*me+Se*Se;ee<=y&&ee<q&&(Lu.add(t,s[ne],ee),q=ee)}if(q!==Number.MAX_VALUE)return!0}return t.count>0}var nh=nu(),u2=new Set,gK=new Set,n9e=[.1],o9e=[.1],i9e=[.1],XS=new WS;function a9e(e,t){let{min:r,expandedBox:n,boundingSphere:{center:o},size:[i,a,A],bucketOffset:s,bucketCounts:c,bucketArray:l,grid:u,data:{x:g,y:m,z:p,indices:d,radius:f},delta:I,maxRadius:C}=e.grid,{x:y,y:Q,z:E,k:b,stopIf:x}=e,S=Ee.size(d);if(Lu.reset(t),S===0||b<=0)return!1;let w,R,T,L=!1,F=1,v=!0,U=0,G=n9e,N=o9e,k=0,J=!0,H,z=!1,_=i9e,M=C*C;G.length=0,_.length=0,u2.clear(),XS.clear(),B.set(nh.origin,y,Q,E),Ct.containsVec3(n,nh.origin)?(w=Math.floor((y-r[0])/I[0]),R=Math.floor((Q-r[1])/I[1]),T=Math.floor((E-r[2])/I[2])):(nu.targetTo(nh,nh,o),nu.intersectBox3D(nh.origin,nh,n),w=Math.max(0,Math.min(i-1,Math.floor((nh.origin[0]-r[0])/I[0]))),R=Math.max(0,Math.min(a-1,Math.floor((nh.origin[1]-r[1])/I[1]))),T=Math.max(0,Math.min(A-1,Math.floor((nh.origin[2]-r[2])/I[2]))));let q=C!==0?Math.max(1,Math.min(i-1,Math.ceil(C/I[0]))):1,ne=C!==0?Math.max(1,Math.min(a-1,Math.ceil(C/I[1]))):1,oe=C!==0?Math.max(1,Math.min(A-1,Math.ceil(C/I[2]))):1;for(G.push(w,R,T,(w*a+R)*A+T);t.count<S;){let ae=F*4;for(let me=0;me<ae;me+=4)if(H=G[me+3],!u2.has(H)){u2.add(H),z=u2.size>=u.length;let Se=u[H];if(Se!==0){let ee=k,O=Se-1,X=s[O],Ce=c[O],Ne=X+Ce;for(let $=X;$<Ne;$++){let pe=l[$],ye=Ee.getAt(d,pe),Be=g[ye]-y,De=m[ye]-Q,Te=p[ye]-E,be=Be*Be+De*De+Te*Te;if(C!==0){let Fe=f[ye];be-=Fe*Fe}J&&be>k&&(k=be),XS.insert(be,pe)}ee<k&&(J=!1)}}N.length=0,U=0,gK.clear();for(let me=0;me<ae;me+=4){w=G[me],R=G[me+1],T=G[me+2];for(let Se=-q;Se<=q;Se++){let ee=w+Se;if(!(ee<0||ee>=i))for(let O=-ne;O<=ne;O++){let X=R+O;if(!(X<0||X>=a))for(let Ce=-oe;Ce<=oe;Ce++){let Ne=T+Ce;if(!(Ne<0||Ne>=A)&&(H=(ee*a+X)*A+Ne,!gK.has(H)&&(gK.add(H),!u2.has(H)))){if(!v){let $=r[0]+ee*I[0]-y,pe=r[1]+X*I[1]-Q,ye=r[2]+Ne*I[2]-E;if($*$+pe*pe+ye*ye-M>k){_.push(ee,X,Ne,H);continue}}N.push(ee,X,Ne,H),U++}}}}}if(v=!1,U===0){if(b===1){let me=XS.findMinimum();if(me){let{key:Se,value:ee}=me;return Lu.add(t,ee,Se),!0}}else for(;!XS.isEmpty()&&(z||XS.findMinimum().key<=k)&&t.count<b;){let me=XS.extractMinimum(),Se=me.key,ee=me.value;Lu.add(t,ee,Se),x&&!L&&(L=x(ee,Se))}if(t.count>=b||L||t.count>=S)return t.count>0;if(v=!0,J=!0,_.length>0){for(let me=0,Se=_.length;me<Se;me++)G.push(_[me]);_.length=0,F=G.length}}else{let me=G;G=N,N=me,F=U}}return t.count>0}var W={};ki(W,{Bundle:()=>AD,Location:()=>Di,Loci:()=>np,Schema:()=>y2,Stats:()=>hde,atomicProperty:()=>QZe,chainIndex:()=>xZe,coarseProperty:()=>EZe,entityIndex:()=>SZe,property:()=>yZe,residueIndex:()=>bZe});var Di;(g=>{function e(m,p,d){return{kind:"element-location",structure:m,unit:p,element:d||0}}g.create=e;function t(m){return e(m.structure,m.unit,m.element)}g.clone=t;function r(m,p,d,f){return p&&(m.structure=p),d&&(m.unit=d),f!==void 0&&(m.element=f),m}g.set=r;function n(m,p){return m.unit=p.unit,m.element=p.element,m}g.copy=n;function o(m){return!!m&&m.kind==="element-location"}g.is=o;function i(m,p){return m.unit===p.unit&&m.element===p.element}g.areEqual=i;let a=B(),A=B();function s(m,p){return m.unit.conformation.position(m.element,a),p.unit.conformation.position(p.element,A),B.distance(a,A)}g.distance=s;function c(m,p){return p.unit.conformation.position(p.element,m)}g.position=c;function l(m){return m.unit.model.atomicHierarchy.residueAtomSegments.index[m.element]}g.residueIndex=l;function u(m){return m.unit.model.atomicHierarchy.chainAtomSegments.index[m.element]}g.chainIndex=u})(Di||={});var dK=class{constructor(t,r){this.getHash=t;this.areEqual=r;this.size=0;this.byHash=new Map}add(t){let r=this.getHash(t);if(this.byHash.has(r)){let n=this.byHash.get(r);for(let o=0,i=n.length;o<i;o++)if(this.areEqual(t,n[o]))return!1;return n[n.length]=t,this.size++,!0}else return this.byHash.set(r,[t]),this.size++,!0}has(t){let r=this.getHash(t);if(!this.byHash.has(r))return!1;let n=this.byHash.get(r);for(let o=0,i=n.length;o<i;o++)if(this.areEqual(t,n[o]))return!0;return!1}};function ZS(e,t){return new dK(e,t)}function g2(){return new pK}function Age(e){return{previous:null,next:null,inList:!0,value:e}}var pK=class{constructor(){this.count=0;this.first=null;this.last=null}addFirst(t){let r=Age(t);return r.inList=!0,this.first&&(this.first.previous=r),r.next=this.first,this.first=r,this.count++,this.last||(this.last=r),r}addLast(t){let r=Age(t);return this.last!==null&&(this.last.next=r),r.previous=this.last,this.last=r,this.first===null&&(this.first=r),r.inList=!0,this.count++,r}removeFirst(){let t=this.first;if(t)return this.remove(t),t.value}removeLast(){let t=this.last;if(t)return this.remove(t),t.value}remove(t){t.inList&&(t.inList=!1,t.previous!==null?t.previous.next=t.next:t.previous===null&&(this.first=t.next),t.next!==null?t.next.previous=t.previous:t.next===null&&(this.last=t.previous),t.next=null,t.previous=null,this.count--)}find(t){let r=this.first;for(;r!==null;){if(r.value===t)return r;r=r.next}}};var yo;(n=>{function e(){return{keys:new Set,array:[]}}n.create=e;function t({keys:o,array:i},a,A){return o.has(a)?!1:(o.add(a),i[i.length]=A,!0)}n.add=t;function r({keys:o},i){return o.has(i)}n.has=r})(yo||={});var Je;(u=>{function e(g,m,p){return{kind:"variable",name:g,type:m,isConstraint:p}}u.Variable=e;function t(g,m,p){return{kind:"value",namespace:g,name:m,parent:p}}u.Value=t;function r(g,m,p,d){return{kind:"container",namespace:g,name:m,child:p,alias:d}}u.Container=r;function n(g){return{kind:"union",types:g}}u.Union=n;function o(g,m,p,d){let f=Object.create(null);for(let I of d)f[I]=!0;return{kind:"oneof",namespace:g,name:m,type:p,values:f}}u.OneOf=o,u.Any={kind:"any"},u.AnyValue={kind:"any-value"},u.Num=t("","Number"),u.Str=t("","String"),u.Bool=o("","Bool",u.Str,["true","false"]);function l({values:g}){return Object.keys(g).sort()}u.oneOfValues=l})(Je||={});var os;(A=>{function e(s){return{name:s}}A.Symbol=e;function t(s,c){return c?{head:s,args:c}:{head:s}}A.Apply=t;function r(s){return!!s&&Array.isArray(s)}A.isArgumentsArray=r;function n(s){return!!s&&!Array.isArray(s)}A.isArgumentsMap=n;function o(s){return!i(s)&&!a(s)}A.isLiteral=o;function i(s){return!!s&&!!s.head&&typeof s=="object"}A.isApply=i;function a(s){return!!s&&typeof s.name=="string"}A.isSymbol=a})(os||={});function Vt(e,t){let{description:r=void 0,isOptional:n=!1,isRest:o=!1,defaultValue:i=void 0}=t||{};return{type:e,isOptional:n,isRest:o,defaultValue:i,description:r}}var _r;(n=>{n.None=t({});function t(o){return{kind:"dictionary",map:o,"@type":0}}n.Dictionary=t;function r(o,i){let{nonEmpty:a=!1}=i||{};return{kind:"list",type:o,nonEmpty:a,"@type":0}}n.List=r})(_r||={});function e0(e,t,r,n){let o=function(i){return os.Apply(os.Symbol(o.id),i)};return o.info={namespace:"",name:e,description:n},o.id="",o.args=t,o.type=r,o}function iu(e,t,r,n){let o=function(i){return os.Apply(os.Symbol(o.id),i)};return o.info={namespace:e,name:t,description:n},o.id=`${e}.${t}`,o.args=_r.None,o.type=r,o}function m2(e){let t=e;return typeof t=="function"&&!!t.info&&!!t.args&&typeof t.info.namespace=="string"&&!!t.type}function $r(e,t,r){return e0("",e,t,r)}function vG(e){cge("","",e)}function FG(e){let t=[];return lge(e,t),t}function sge(e){let t=/([a-z])([A-Z])([a-z]|$)/g;return e.replace(t,(r,n,o,i)=>`${n}-${o.toLocaleLowerCase()}${i}`).replace(t,(r,n,o,i)=>`${n}-${o.toLocaleLowerCase()}${i}`)}function cge(e,t,r){if(m2(r)){r.info.namespace=e,r.info.name=r.info.name||sge(t),r.id=`${r.info.namespace}.${r.info.name}`;return}let n=`${r["@namespace"]||sge(t)}`,o=e?`${e}.${n}`:n;for(let i of Object.keys(r))typeof r[i]!="object"&&!m2(r[i])||cge(o,i,r[i])}function lge(e,t){if(m2(e)){t.push(e);return}for(let r of Object.keys(e))typeof e[r]!="object"&&!m2(e[r])||lge(e[r],t)}var Do;(c=>(c.AnyVar=Je.Variable("a",Je.Any),c.AnyValueVar=Je.Variable("a",Je.Any),c.ConstrainedVar=Je.Variable("a",Je.Any,!0),c.Regex=Je.Value("Core","Regex"),c.Set=l=>Je.Container("Core","Set",l||c.AnyValueVar),c.List=l=>Je.Container("Core","List",l||c.AnyVar),c.Fn=(l,u)=>Je.Container("Core","Fn",l||c.AnyVar,u),c.Flags=(l,u)=>Je.Container("Core","Flags",l,u),c.BitFlags=(0,c.Flags)(Je.Num,"BitFlags")))(Do||={});function Xs(e,t){return $r(_r.Dictionary({0:Vt(e)}),e,t)}function jy(e,t){return $r(_r.List(e,{nonEmpty:!0}),e,t)}function ep(e,t,r){return $r(_r.Dictionary({0:Vt(e),1:Vt(e)}),t,r)}var HKt=_r.Dictionary({0:Vt(Je.Num),1:Vt(Je.Num)}),s9e={"@header":"Types",bool:$r(_r.Dictionary({0:Vt(Je.AnyValue)}),Je.Bool,"Convert a value to boolean."),num:$r(_r.Dictionary({0:Vt(Je.AnyValue)}),Je.Num,"Convert a value to number."),str:$r(_r.Dictionary({0:Vt(Je.AnyValue)}),Je.Str,"Convert a value to string."),regex:$r(_r.Dictionary({0:Vt(Je.Str,{description:"Expression"}),1:Vt(Je.Str,{isOptional:!0,description:"Flags, e.g. 'i' for ignore case"})}),Do.Regex,"Creates a regular expression from a string using the ECMAscript syntax."),list:$r(_r.List(Do.AnyVar),Do.List()),set:$r(_r.List(Do.AnyValueVar),Do.Set()),bitflags:$r(_r.Dictionary({0:Vt(Je.Num)}),Do.BitFlags,"Interpret a number as bitflags."),compositeKey:$r(_r.List(Je.AnyValue),Je.AnyValue)},c9e={"@header":"Logic",not:Xs(Je.Bool),and:jy(Je.Bool),or:jy(Je.Bool)},l9e={"@header":"Control",eval:$r(_r.Dictionary({0:Vt(Do.Fn(Do.AnyVar))}),Do.AnyVar,"Evaluate a function."),fn:$r(_r.Dictionary({0:Vt(Do.AnyVar)}),Do.Fn(Do.AnyVar),'Wrap an expression to a "lazy" function.'),if:$r(_r.Dictionary({0:Vt(Je.Bool,{description:"Condition"}),1:Vt(Je.Variable("a",Je.Any),{description:"If true"}),2:Vt(Je.Variable("b",Je.Any),{description:"If false"})}),Je.Union([Je.Variable("a",Je.Any),Je.Variable("b",Je.Any)])),assoc:$r(_r.Dictionary({0:Vt(Je.Str,{description:"Name"}),1:Vt(Je.Variable("a",Je.Any),{description:"Value to assign"})}),Je.Variable("a",Je.Any))},u9e={"@header":"Relational",eq:ep(Je.Variable("a",Je.AnyValue,!0),Je.Bool),neq:ep(Je.Variable("a",Je.AnyValue,!0),Je.Bool),lt:ep(Je.Num,Je.Bool),lte:ep(Je.Num,Je.Bool),gr:ep(Je.Num,Je.Bool),gre:ep(Je.Num,Je.Bool),inRange:$r(_r.Dictionary({0:Vt(Je.Num,{description:"Value to test"}),1:Vt(Je.Num,{description:"Minimum value"}),2:Vt(Je.Num,{description:"Maximum value"})}),Je.Bool,"Check if the value of the 1st argument is >= 2nd and <= 3rd.")},g9e={"@header":"Math",add:jy(Je.Num),sub:jy(Je.Num),mult:jy(Je.Num),div:ep(Je.Num,Je.Num),pow:ep(Je.Num,Je.Num),mod:ep(Je.Num,Je.Num),min:jy(Je.Num),max:jy(Je.Num),cantorPairing:ep(Je.Num,Je.Num),sortedCantorPairing:ep(Je.Num,Je.Num),invertCantorPairing:$r(_r.Dictionary({0:Vt(Je.Num)}),Do.List(Je.Num)),floor:Xs(Je.Num),ceil:Xs(Je.Num),roundInt:Xs(Je.Num),trunc:Xs(Je.Num),abs:Xs(Je.Num),sign:Xs(Je.Num),sqrt:Xs(Je.Num),cbrt:Xs(Je.Num),sin:Xs(Je.Num),cos:Xs(Je.Num),tan:Xs(Je.Num),asin:Xs(Je.Num),acos:Xs(Je.Num),atan:Xs(Je.Num),sinh:Xs(Je.Num),cosh:Xs(Je.Num),tanh:Xs(Je.Num),exp:Xs(Je.Num),log:Xs(Je.Num),log10:Xs(Je.Num),atan2:ep(Je.Num,Je.Num)},m9e={"@header":"Strings",concat:jy(Je.Str),match:$r(_r.Dictionary({0:Vt(Do.Regex),1:Vt(Je.Str)}),Je.Bool)},d9e={"@header":"Lists",getAt:$r(_r.Dictionary({0:Vt(Do.List()),1:Vt(Je.Num)}),Do.AnyVar),equal:$r(_r.Dictionary({0:Vt(Do.List()),1:Vt(Do.List())}),Je.Bool)},p9e={"@header":"Sets",has:$r(_r.Dictionary({0:Vt(Do.Set(Do.ConstrainedVar)),1:Vt(Do.ConstrainedVar)}),Je.Bool,"Check if the the 1st argument includes the value of the 2nd."),isSubset:$r(_r.Dictionary({0:Vt(Do.Set(Do.ConstrainedVar)),1:Vt(Do.Set(Do.ConstrainedVar))}),Je.Bool,"Check if the the 1st argument is a subset of the 2nd.")},f9e={"@header":"Flags",hasAny:$r(_r.Dictionary({0:Vt(Do.Flags(Do.ConstrainedVar)),1:Vt(Do.Flags(Do.ConstrainedVar))}),Je.Bool,"Check if the the 1st argument has at least one of the 2nd one's flags."),hasAll:$r(_r.Dictionary({0:Vt(Do.Flags(Do.ConstrainedVar)),1:Vt(Do.Flags(Do.ConstrainedVar))}),Je.Bool,"Check if the the 1st argument has all 2nd one's flags.")},wG={"@header":"Language Primitives",type:s9e,logic:c9e,ctrl:l9e,rel:u9e,math:g9e,str:m9e,list:d9e,set:p9e,flags:f9e};vG(wG);var B9e=FG(wG),VKt=(function(){let e=Object.create(null);for(let t of B9e)e[t.id]=t;return e})();var Cr;(d=>(d.ElementSymbol=Je.Value("Structure","ElementSymbol"),d.AtomName=Je.Value("Structure","AtomName"),d.BondFlag=Je.OneOf("Structure","BondFlag",Je.Str,["covalent","metallic","ion","hydrogen","sulfide","computed","aromatic"]),d.BondFlags=Do.Flags(d.BondFlag,"BondFlags"),d.SecondaryStructureFlag=Je.OneOf("Structure","SecondaryStructureFlag",Je.Str,["alpha","beta","3-10","pi","sheet","strand","helix","turn","none"]),d.SecondaryStructureFlags=Do.Flags(d.SecondaryStructureFlag,"SecondaryStructureFlag"),d.RingFingerprint=Je.Value("Structure","RingFingerprint"),d.EntityType=Je.OneOf("Structure","EntityType",Je.Str,["polymer","non-polymer","water","branched"]),d.EntitySubtype=Je.OneOf("Structure","EntitySubtype",Je.Str,["other","polypeptide(D)","polypeptide(L)","polydeoxyribonucleotide","polyribonucleotide","polydeoxyribonucleotide/polyribonucleotide hybrid","cyclic-pseudo-peptide","peptide nucleic acid","oligosaccharide"]),d.ObjectPrimitive=Je.OneOf("Structure","ObjectPrimitive",Je.Str,["atomistic","sphere","gaussian","other"]),d.ResidueId=Je.Value("Structure","ResidueId"),d.ElementSet=Je.Value("Structure","ElementSet"),d.ElementSelection=Je.Value("Structure","ElementSelection"),d.ElementReference=Je.Value("Structure","ElementReference"),d.ElementSelectionQuery=Do.Fn(d.ElementSelection,"ElementSelectionQuery")))(Cr||={});var C9e={"@header":"Types",elementSymbol:$r(_r.Dictionary({0:Vt(Je.Str)}),Cr.ElementSymbol,"Create element symbol representation from a string value."),atomName:$r(_r.Dictionary({0:Vt(Je.AnyValue)}),Cr.AtomName,"Convert a value to an atom name."),entityType:$r(_r.Dictionary({0:Vt(Cr.EntityType)}),Cr.EntityType,`Create normalized representation of entity type: ${Je.oneOfValues(Cr.EntityType).join(", ")}.`),bondFlags:$r(_r.List(Cr.BondFlag),Cr.BondFlags,`Create bond flags representation from a list of strings. Allowed flags: ${Je.oneOfValues(Cr.BondFlag).join(", ")}.`),ringFingerprint:$r(_r.List(Cr.ElementSymbol,{nonEmpty:!0}),Cr.RingFingerprint,"Create ring fingerprint from the supplied atom element list."),secondaryStructureFlags:$r(_r.List(Cr.SecondaryStructureFlag),Cr.SecondaryStructureFlags,`Create secondary structure flags representation from a list of strings. Allowed flags: ${Je.oneOfValues(Cr.SecondaryStructureFlag).join(", ")}.`),authResidueId:$r(_r.Dictionary({0:Vt(Je.Str,{description:"auth_asym_id"}),1:Vt(Je.Num,{description:"auth_seq_id"}),2:Vt(Je.Str,{description:"pdbx_PDB_ins_code",isOptional:!0})}),Cr.ResidueId,'Residue identifier based on "auth_" annotation.'),labelResidueId:$r(_r.Dictionary({0:Vt(Je.Str,{description:"label_entity_id"}),1:Vt(Je.Str,{description:"label_asym_id"}),2:Vt(Je.Num,{description:"label_seq_id"}),3:Vt(Je.Str,{description:"pdbx_PDB_ins_code",isOptional:!0})}),Cr.ResidueId,`Residue identifier based on mmCIF's "label_" annotation.`)},h9e={"@header":"Iteration Slots",element:$r(_r.None,Cr.ElementReference,"A reference to the current element."),elementSetReduce:$r(_r.None,Je.Variable("a",Je.AnyValue,!0),"Current value of the element set reducer.")},y9e={"@header":"Generators",all:$r(_r.None,Cr.ElementSelectionQuery,"The entire structure."),atomGroups:$r(_r.Dictionary({"entity-test":Vt(Je.Bool,{isOptional:!0,defaultValue:!0,description:"Test for the 1st atom of every entity"}),"chain-test":Vt(Je.Bool,{isOptional:!0,defaultValue:!0,description:"Test for the 1st atom of every chain"}),"residue-test":Vt(Je.Bool,{isOptional:!0,defaultValue:!0,description:"Test for the 1st atom every residue"}),"atom-test":Vt(Je.Bool,{isOptional:!0,defaultValue:!0}),"group-by":Vt(Je.Any,{isOptional:!0,defaultValue:"atom-key",description:"Group atoms to sets based on this property. Default: each atom has its own set"})}),Cr.ElementSelectionQuery,"Return all atoms for which the tests are satisfied, grouped into sets."),bondedAtomicPairs:$r(_r.Dictionary({0:Vt(Je.Bool,{isOptional:!0,defaultValue:"true for covalent bonds",description:"Test each bond with this predicate. Each bond is visited twice with swapped atom order."})}),Cr.ElementSelectionQuery,"Return all pairs of atoms for which the test is satisfied."),rings:$r(_r.Dictionary({fingerprint:Vt(Cr.RingFingerprint,{isOptional:!0}),"only-aromatic":Vt(Je.Bool,{isOptional:!0,defaultValue:!1})}),Cr.ElementSelectionQuery,"Return all rings or those with the specified fingerprint and/or only aromatic rings."),queryInSelection:$r(_r.Dictionary({0:Vt(Cr.ElementSelectionQuery),query:Vt(Cr.ElementSelectionQuery),"in-complement":Vt(Je.Bool,{isOptional:!0,defaultValue:!1})}),Cr.ElementSelectionQuery,"Executes query only on atoms that are in the source selection."),empty:$r(_r.None,Cr.ElementSelectionQuery,"Nada.")},Q9e={"@header":"Selection Modifications",queryEach:$r(_r.Dictionary({0:Vt(Cr.ElementSelectionQuery),query:Vt(Cr.ElementSelectionQuery)}),Cr.ElementSelectionQuery,"Query every atom set in the input selection separately."),intersectBy:$r(_r.Dictionary({0:Vt(Cr.ElementSelectionQuery),by:Vt(Cr.ElementSelectionQuery)}),Cr.ElementSelectionQuery,"Intersect each atom set from the first sequence from atoms in the second one."),exceptBy:$r(_r.Dictionary({0:Vt(Cr.ElementSelectionQuery),by:Vt(Cr.ElementSelectionQuery)}),Cr.ElementSelectionQuery,"Remove all atoms from 'selection' that occur in 'by'."),unionBy:$r(_r.Dictionary({0:Vt(Cr.ElementSelectionQuery),by:Vt(Cr.ElementSelectionQuery)}),Cr.ElementSelectionQuery,"For each atom set A in the orginal sequence, combine all atoms sets in the target selection that intersect with A."),union:$r(_r.Dictionary({0:Vt(Cr.ElementSelectionQuery)}),Cr.ElementSelectionQuery,"Collects all atom sets in the sequence into a single atom set."),cluster:$r(_r.Dictionary({0:Vt(Cr.ElementSelectionQuery),"min-distance":Vt(Je.Num,{isOptional:!0,defaultValue:0}),"max-distance":Vt(Je.Num),"min-size":Vt(Je.Num,{description:"Minimal number of sets to merge, must be at least 2",isOptional:!0,defaultValue:2}),"max-size":Vt(Je.Num,{description:"Maximal number of sets to merge, if not set, no limit",isOptional:!0})}),Cr.ElementSelectionQuery,"Combines atom sets that have mutual distance in the interval [min-radius, max-radius]. Minimum/maximum size determines how many atom sets can be combined."),includeSurroundings:$r(_r.Dictionary({0:Vt(Cr.ElementSelectionQuery),radius:Vt(Je.Num),"atom-radius":Vt(Je.Num,{isOptional:!0,defaultValue:0,description:"Value added to each atom before the distance check, for example VDW radius. Using this argument is computationally demanding."}),"as-whole-residues":Vt(Je.Bool,{isOptional:!0})}),Cr.ElementSelectionQuery,"For each atom set in the selection, include all surrouding atoms/residues that are within the specified radius."),surroundingLigands:$r(_r.Dictionary({0:Vt(Cr.ElementSelectionQuery),radius:Vt(Je.Num),"include-water":Vt(Je.Bool,{isOptional:!0,defaultValue:!0})}),Cr.ElementSelectionQuery,"Find all ligands components around the source query."),includeConnected:$r(_r.Dictionary({0:Vt(Cr.ElementSelectionQuery),"bond-test":Vt(Je.Bool,{isOptional:!0,defaultValue:"true for covalent bonds"}),"layer-count":Vt(Je.Num,{isOptional:!0,defaultValue:1,description:"Number of bonded layers to include."}),"fixed-point":Vt(Je.Bool,{isOptional:!0,defaultValue:!1,description:"Continue adding layers as long as new connections exist."}),"as-whole-residues":Vt(Je.Bool,{isOptional:!0})}),Cr.ElementSelectionQuery,"Pick all atom sets that are connected to the target."),wholeResidues:$r(_r.Dictionary({0:Vt(Cr.ElementSelectionQuery)}),Cr.ElementSelectionQuery,"Expand the selection to whole residues."),expandProperty:$r(_r.Dictionary({0:Vt(Cr.ElementSelectionQuery),property:Vt(Je.AnyValue)}),Cr.ElementSelectionQuery,"To each atom set in the selection, add all atoms that have the same property value that was already present in the set.")},E9e={"@header":"Selection Filters",pick:$r(_r.Dictionary({0:Vt(Cr.ElementSelectionQuery),test:Vt(Je.Bool)}),Cr.ElementSelectionQuery,"Pick all atom sets that satisfy the test."),first:$r(_r.Dictionary({0:Vt(Cr.ElementSelectionQuery)}),Cr.ElementSelectionQuery,"Take the 1st atom set in the sequence."),withSameAtomProperties:$r(_r.Dictionary({0:Vt(Cr.ElementSelectionQuery),source:Vt(Cr.ElementSelectionQuery),property:Vt(Je.Any)}),Cr.ElementSelectionQuery,"Pick all atom sets for which the set of given atom properties is a subset of the source properties."),intersectedBy:$r(_r.Dictionary({0:Vt(Cr.ElementSelectionQuery),by:Vt(Cr.ElementSelectionQuery)}),Cr.ElementSelectionQuery,"Pick all atom sets that have non-zero intersection with the target."),within:$r(_r.Dictionary({0:Vt(Cr.ElementSelectionQuery),target:Vt(Cr.ElementSelectionQuery),"min-radius":Vt(Je.Num,{isOptional:!0,defaultValue:0}),"max-radius":Vt(Je.Num),"atom-radius":Vt(Je.Num,{isOptional:!0,defaultValue:0,description:"Value added to each atom before the distance check, for example VDW radius. Using this argument is computationally demanding."}),invert:Vt(Je.Bool,{isOptional:!0,defaultValue:!1,description:"If true, pick only atom sets that are further than the specified radius."})}),Cr.ElementSelectionQuery,"Pick all atom sets from selection that have any atom within the radius of any atom from target."),isConnectedTo:$r(_r.Dictionary({0:Vt(Cr.ElementSelectionQuery),target:Vt(Cr.ElementSelectionQuery),"bond-test":Vt(Je.Bool,{isOptional:!0,defaultValue:"true for covalent bonds"}),disjunct:Vt(Je.Bool,{isOptional:!0,defaultValue:!0,description:"If true, there must exist a bond to an atom that lies outside the given atom set to pass test."}),invert:Vt(Je.Bool,{isOptional:!0,defaultValue:!1,description:"If true, return atom sets that are not connected."})}),Cr.ElementSelectionQuery,"Pick all atom sets that are connected to the target.")},b9e={"@header":"Selection Combinators",intersect:$r(_r.List(Cr.ElementSelectionQuery),Cr.ElementSelectionQuery,"Return all unique atom sets that appear in all of the source selections."),merge:$r(_r.List(Cr.ElementSelectionQuery),Cr.ElementSelectionQuery,"Merges multiple selections into a single one. Only unique atom sets are kept."),distanceCluster:$r(_r.Dictionary({matrix:Vt(Do.List(Do.List(Je.Num)),{description:"Distance matrix, represented as list of rows (num[][])). Lower triangle is min distance, upper triangle is max distance."}),selections:Vt(Do.List(Cr.ElementSelectionQuery),{description:"A list of held selections."})}),Cr.ElementSelectionQuery,"Pick combinations of atom sets from the source sequences that are mutually within distances specified by a matrix.")},x9e={"@header":"Atom Sets",atomCount:$r(_r.None,Je.Num),countQuery:$r(_r.Dictionary({0:Vt(Cr.ElementSelectionQuery)}),Je.Num,"Counts the number of occurences of a specific query inside the current atom set."),reduce:$r(_r.Dictionary({initial:Vt(Je.Variable("a",Je.AnyValue,!0),{description:"Initial value assigned to slot.atom-set-reduce. Current atom is set to the 1st atom of the current set for this."}),value:Vt(Je.Variable("a",Je.AnyValue,!0),{description:"Expression executed for each atom in the set"})}),Je.Variable("a",Je.AnyValue,!0),"Execute the value expression for each atom in the current atom set and return the result. Works the same way as Array.reduce in JavaScript (``result = value(value(...value(initial)))``)"),propertySet:$r(_r.Dictionary({0:Vt(Do.ConstrainedVar)}),Do.Set(Do.ConstrainedVar),"Returns a set with all values of the given property in the current atom set.")},S9e={"@header":"Atom Properties",core:{"@header":"Core Properties",elementSymbol:uo(Cr.ElementSymbol),vdw:uo(Je.Num,"Van der Waals radius"),mass:uo(Je.Num,"Atomic weight"),atomicNumber:uo(Je.Num,"Atomic number"),x:uo(Je.Num,"Cartesian X coordinate"),y:uo(Je.Num,"Cartesian Y coordinate"),z:uo(Je.Num,"Cartesian Z coordinate"),atomKey:uo(Je.AnyValue,"Unique value for each atom. Main use case is grouping of atoms."),bondCount:$r(_r.Dictionary({0:Vt(Cr.ElementReference,{isOptional:!0,defaultValue:"slot.current-atom"}),flags:Vt(Cr.BondFlags,{isOptional:!0,defaultValue:"covalent"})}),Je.Num,"Number of bonds (by default only covalent bonds are counted)."),sourceIndex:uo(Je.Num,"Index of the atom/element in the input file."),operatorName:uo(Je.Str,"Name of the symmetry operator applied to this element."),instanceId:uo(Je.Str,"Canonical name of the symmetry operator applied to this element."),operatorKey:uo(Je.Num,"Key of the symmetry operator applied to this element."),modelIndex:uo(Je.Num,"Index of the model in the input file."),modelLabel:uo(Je.Str,"Label/header of the model in the input file."),modelEntryId:uo(Je.Str,"Entry ID of the model (e.g., PDB ID).")},topology:{connectedComponentKey:uo(Je.AnyValue,"Unique value for each connected component.")},macromolecular:{"@header":"Macromolecular Properties (derived from the mmCIF format)",authResidueId:uo(Cr.ResidueId,"type.auth-residue-id symbol executed on current atom's residue"),labelResidueId:uo(Cr.ResidueId,"type.label-residue-id symbol executed on current atom's residue"),residueKey:uo(Je.AnyValue,"Unique value for each tuple ``(label_entity_id,auth_asym_id, auth_seq_id, pdbx_PDB_ins_code)``, main use case is grouping of atoms"),chainKey:uo(Je.AnyValue,"Unique value for each tuple ``(label_entity_id, auth_asym_id)``, main use case is grouping of atoms"),entityKey:uo(Je.AnyValue,"Unique value for each tuple ``label_entity_id``, main use case is grouping of atoms"),isHet:uo(Je.Bool,"Equivalent to atom_site.group_PDB !== ATOM"),id:uo(Je.Num,"_atom_site.id"),label_atom_id:uo(Cr.AtomName),label_alt_id:uo(Je.Str),label_comp_id:uo(Je.Str),label_asym_id:uo(Je.Str),label_entity_id:uo(Je.Str),label_seq_id:uo(Je.Num),auth_atom_id:uo(Cr.AtomName),auth_comp_id:uo(Je.Str),auth_asym_id:uo(Je.Str),auth_seq_id:uo(Je.Num),residueSourceIndex:uo(Je.Num),pdbx_PDB_ins_code:uo(Je.Str),pdbx_formal_charge:uo(Je.Num),occupancy:uo(Je.Num),B_iso_or_equiv:uo(Je.Num),entityType:uo(Cr.EntityType,"Type of the entity as defined in mmCIF (polymer, non-polymer, branched, water)"),entitySubtype:uo(Cr.EntitySubtype,"Subtype of the entity as defined in mmCIF _entity_poly.type and _pdbx_entity_branch.type (other, polypeptide(D), polypeptide(L), polydeoxyribonucleotide, polyribonucleotide, polydeoxyribonucleotide/polyribonucleotide hybrid, cyclic-pseudo-peptide, peptide nucleic acid, oligosaccharide)"),entityPrdId:uo(Je.Str,"The PRD ID of the entity."),entityDescription:uo(Do.List(Je.Str)),objectPrimitive:uo(Cr.ObjectPrimitive,"Type of the primitive object used to model this segment as defined in mmCIF/IHM (atomistic, sphere, gaussian, other)"),secondaryStructureKey:uo(Je.AnyValue,"Unique value for each secondary structure element."),secondaryStructureFlags:uo(Cr.SecondaryStructureFlags),isModified:uo(Je.Bool,"True if the atom belongs to modification of a standard residue."),modifiedParentName:uo(Je.Str,"'3-letter' code of the modifed parent residue."),isNonStandard:uo(Je.Bool,"True if this is a non-standard residue."),chemCompType:uo(Je.Str,"Type of the chemical component as defined in mmCIF.")},ihm:{hasSeqId:$r(_r.Dictionary({0:Vt(Je.Num)}),Je.Bool,"Checks if the current element represents a given sequence id"),overlapsSeqIdRange:$r(_r.Dictionary({beg:Vt(Je.Num),end:Vt(Je.Num)}),Je.Bool,"Checks if the current element overlaps with the specified residue range")}},D9e={"@header":"Bond Properties",flags:qS(Cr.BondFlags),order:qS(Je.Num),key:qS(Je.Num),length:qS(Je.Num),atomA:qS(Cr.ElementReference),atomB:qS(Cr.ElementReference)};function uo(e,t){return $r(_r.Dictionary({0:Vt(Cr.ElementReference,{isOptional:!0,defaultValue:"slot.current-atom"})}),e,t)}function qS(e,t){return $r(_r.None,e,t)}var uge={"@header":"Structure Queries",type:C9e,slot:h9e,generator:y9e,modifier:Q9e,filter:E9e,combinator:b9e,atomSet:x9e,atomProperty:S9e,bondProperty:D9e};var F9e={"@header":"Generators",bundleElement:$r(_r.Dictionary({groupedUnits:Vt(Je.Any),set:Vt(Je.Any),ranges:Vt(Je.Any)}),Je.Any),bundle:$r(_r.Dictionary({elements:Vt(Je.Any)}),Cr.ElementSelectionQuery,"A selection with single structure containing represented by the bundle."),current:$r(_r.None,Cr.ElementSelectionQuery,"Current selection provided by the query context. Avoid using this in State Transforms.")},gge={"@header":"Internal Queries",generator:F9e};var Ve={core:wG,structureQuery:uge,internal:gge};vG(Ve);var w9e=FG(Ve),$Kt=(function(){let e=Object.create(null);for(let t of w9e)e[t.id]=t;return e})();var ce;(Q=>{Q.core=Ve.core,Q.struct=Ve.structureQuery,Q.internal=Ve.internal;function n(E){return Q.struct.type.atomName([E])}Q.atomName=n;function o(E){return Q.struct.type.elementSymbol([E])}Q.es=o;function i(...E){return Q.core.type.list(E)}Q.list=i;function a(...E){return Q.core.type.set(E)}Q.set=a;function A(E,b){return Q.core.type.regex([E,b])}Q.re=A;function s(E){return Q.core.ctrl.fn([E])}Q.fn=s;function c(E){return Q.core.ctrl.eval([E])}Q.evaluate=c;let l=Q.struct.atomProperty.core,u=Q.struct.atomProperty.macromolecular,g=Q.struct.atomProperty.topology;function m(E){return l[E]()}Q.acp=m;function p(E){return g[E]()}Q.atp=p;function d(E){return u[E]()}Q.ammp=d;let f=Q.struct.atomSet.propertySet;function I(E){return f([m(E)])}Q.acpSet=I;function C(E){return f([p(E)])}Q.atpSet=C;function y(E){return f([d(E)])}Q.ammpSet=y})(ce||={});var R9e=B.add,U9e=B.squaredDistance,L9e=B.distance;var gc=class{constructor(){this.count=0;this.center=B();this.radiusSq=0}reset(){B.set(this.center,0,0,0),this.radiusSq=0,this.count=0}includeStep(t){R9e(this.center,this.center,t),this.count++}finishedIncludeStep(){this.count!==0&&B.scale(this.center,this.center,1/this.count)}radiusStep(t){let r=U9e(t,this.center);r>this.radiusSq&&(this.radiusSq=r)}radiusSphereStep(t,r){let n=L9e(t,this.center)+r,o=n*n;o>this.radiusSq&&(this.radiusSq=o)}getSphere(t){return t||(t=we()),B.copy(t.center,this.center),t.radius=Math.sqrt(this.radiusSq),t}getCount(){return this.count}};(a=>{let e=new a,t=B(),r=B();function n({x:A,y:s,z:c},l){e.reset();let u=A.length;for(let g=0;g<u;g++)B.set(t,A[g],s[g],c[g]),e.includeStep(t);e.finishedIncludeStep();for(let g=0;g<u;g++)B.set(t,A[g],s[g],c[g]),e.radiusStep(t);return B.copy(l.center,e.center),l.radius=Math.sqrt(e.radiusSq),l}a.fromArrays=n;function o(A,s,c){e.reset();for(let l=0;l<A;l++)s(l,t),e.includeStep(t);e.finishedIncludeStep();for(let l=0;l<A;l++)s(l,t),e.radiusStep(t);return B.copy(c.center,e.center),c.radius=Math.sqrt(e.radiusSq),c}a.fromProvider=o;function i(A,s,c){e.reset();for(let l=0;l<A;l++)s(l,t,r),e.includeStep(t),e.includeStep(r);e.finishedIncludeStep();for(let l=0;l<A;l++)s(l,t,r),e.radiusStep(t),e.radiusStep(r);return B.copy(c.center,e.center),c.radius=Math.sqrt(e.radiusSq),c}a.fromPairProvider=i})(gc||={});var Pu=class e{constructor(t){this.map=t;let r=0,n=[],o=new Map,i=new Map;this.map.forEach(a=>{a.forEach(A=>{r+=A.edgeCount,A.connectedIndices.forEach(s=>{A.getEdges(s).forEach(c=>{let{unitA:l,unitB:u}=A,g=e.getEdgeIndexKey(l,u),m=e.getEdgeIndexKey(s,c.indexB),p=o.get(g);p===void 0?o.set(g,new Map([[m,n.length]])):p.set(m,n.length);let d=e.getVertexKey(s,l),f=i.get(d);f===void 0?i.set(d,[n.length]):f.push(n.length),n.push({...c,indexA:s,unitA:l,unitB:u})})})})}),this.edgeCount=r,this.edges=n,this.edgeKeyIndex=o,this.vertexKeyIndex=i}getConnectedUnits(t){return this.map.has(t)?this.map.get(t):mge}getEdgeIndex(t,r,n,o){let i=this.edgeKeyIndex.get(e.getEdgeUnitKey(r,o));if(i===void 0)return-1;let a=i.get(e.getEdgeIndexKey(t,n));return a!==void 0?a:-1}hasEdge(t,r,n,o){return this.getEdgeIndex(t,r,n,o)!==-1}getEdge(t,r,n,o){let i=this.getEdgeIndex(t,r,n,o);return i!==-1?this.edges[i]:void 0}getEdgeIndices(t,r){return this.vertexKeyIndex.get(e.getVertexKey(t,r))||[]}};(a=>{class e{constructor(s,c,l,u,g){this.unitA=s;this.unitB=c;this.edgeCount=l;this.connectedIndices=u;this.edgeMap=g}hasEdges(s){return this.edgeMap.has(s)}getEdges(s){return this.edgeMap.has(s)?this.edgeMap.get(s):mge}get areUnitsOrdered(){return this.unitA<this.unitB}}a.UnitPairEdges=e;function t(A,s){return ko(A,s)}a.getEdgeUnitKey=t;function r(A,s){return ko(A,s)}a.getEdgeIndexKey=r;function n(A,s){return ko(A,s)}a.getVertexKey=n;function o(A,s,c){A.has(s)?A.get(s).push(c):A.set(s,[c])}class i{constructor(){this.map=new Map}startUnitPair(s,c){this.uA=s,this.uB=c,this.mapAB=new Map,this.mapBA=new Map,this.linkedA=yo.create(),this.linkedB=yo.create(),this.linkCount=0}finishUnitPair(){this.linkCount!==0&&(o(this.map,this.uA,new e(this.uA,this.uB,this.linkCount,this.linkedA.array,this.mapAB)),o(this.map,this.uB,new e(this.uB,this.uA,this.linkCount,this.linkedB.array,this.mapBA)))}add(s,c,l){o(this.mapAB,s,{indexB:c,props:l}),o(this.mapBA,c,{indexB:s,props:l}),yo.add(this.linkedA,s,s),yo.add(this.linkedB,c,c),this.linkCount+=1}getMap(){return this.map}}a.Builder=i})(Pu||={});var mge=[];var d2;(t=>t.Empty=fa.create([],[],[],0,{flags:[],order:[],key:[]}))(d2||={});var eI=class extends Pu{getBondFromLocation(t){return ge.isAtomic(t.aUnit)&&ge.isAtomic(t.bUnit)?this.getEdge(t.aIndex,t.aUnit.id,t.bIndex,t.bUnit.id):void 0}getBondIndexFromLocation(t){return ge.isAtomic(t.aUnit)&&ge.isAtomic(t.bUnit)?this.getEdgeIndex(t.aIndex,t.aUnit.id,t.bIndex,t.bUnit.id):-1}};(t=>{class e extends Pu.UnitPairEdges{}t.UnitPairBonds=e})(eI||={});var T9e=4,RG={forceCompute:!1,noCompute:!1,maxRadius:T9e},fK={H:0,h:0,D:0,d:0,T:0,t:0,He:2,HE:2,he:2,Li:3,LI:3,li:3,Be:4,BE:4,be:4,B:5,b:5,C:6,c:6,N:7,n:7,O:8,o:8,F:9,f:9,Ne:10,NE:10,ne:10,Na:11,NA:11,na:11,Mg:12,MG:12,mg:12,Al:13,AL:13,al:13,Si:14,SI:14,si:14,P:15,p:15,S:16,s:16,Cl:17,CL:17,cl:17,Ar:18,AR:18,ar:18,K:19,k:19,Ca:20,CA:20,ca:20,Sc:21,SC:21,sc:21,Ti:22,TI:22,ti:22,V:23,v:23,Cr:24,CR:24,cr:24,Mn:25,MN:25,mn:25,Fe:26,FE:26,fe:26,Co:27,CO:27,co:27,Ni:28,NI:28,ni:28,Cu:29,CU:29,cu:29,Zn:30,ZN:30,zn:30,Ga:31,GA:31,ga:31,Ge:32,GE:32,ge:32,As:33,AS:33,as:33,Se:34,SE:34,se:34,Br:35,BR:35,br:35,Kr:36,KR:36,kr:36,Rb:37,RB:37,rb:37,Sr:38,SR:38,sr:38,Y:39,y:39,Zr:40,ZR:40,zr:40,Nb:41,NB:41,nb:41,Mo:42,MO:42,mo:42,Tc:43,TC:43,tc:43,Ru:44,RU:44,ru:44,Rh:45,RH:45,rh:45,Pd:46,PD:46,pd:46,Ag:47,AG:47,ag:47,Cd:48,CD:48,cd:48,In:49,IN:49,in:49,Sn:50,SN:50,sn:50,Sb:51,SB:51,sb:51,Te:52,TE:52,te:52,I:53,i:53,Xe:54,XE:54,xe:54,Cs:55,CS:55,cs:55,Ba:56,BA:56,ba:56,La:57,LA:57,la:57,Ce:58,CE:58,ce:58,Pr:59,PR:59,pr:59,Nd:60,ND:60,nd:60,Pm:61,PM:61,pm:61,Sm:62,SM:62,sm:62,Eu:63,EU:63,eu:63,Gd:64,GD:64,gd:64,Tb:65,TB:65,tb:65,Dy:66,DY:66,dy:66,Ho:67,HO:67,ho:67,Er:68,ER:68,er:68,Tm:69,TM:69,tm:69,Yb:70,YB:70,yb:70,Lu:71,LU:71,lu:71,Hf:72,HF:72,hf:72,Ta:73,TA:73,ta:73,W:74,w:74,Re:75,RE:75,re:75,Os:76,OS:76,os:76,Ir:77,IR:77,ir:77,Pt:78,PT:78,pt:78,Au:79,AU:79,au:79,Hg:80,HG:80,hg:80,Tl:81,TL:81,tl:81,Pb:82,PB:82,pb:82,Bi:83,BI:83,bi:83,Po:84,PO:84,po:84,At:85,AT:85,at:85,Rn:86,RN:86,rn:86,Fr:87,FR:87,fr:87,Ra:88,RA:88,ra:88,Ac:89,AC:89,ac:89,Th:90,TH:90,th:90,Pa:91,PA:91,pa:91,U:92,u:92,Np:93,NP:93,np:93,Pu:94,PU:94,pu:94,Am:95,AM:95,am:95,Cm:96,CM:96,cm:96,Bk:97,BK:97,bk:97,Cf:98,CF:98,cf:98,Es:99,ES:99,es:99,Fm:100,FM:100,fm:100,Md:101,MD:101,md:101,No:102,NO:102,no:102,Lr:103,LR:103,lr:103,Rf:104,RF:104,rf:104,Db:105,DB:105,db:105,Sg:106,SG:106,sg:106,Bh:107,BH:107,bh:107,Hs:108,HS:108,hs:108,Mt:109,MT:109,mt:109},P9e={0:1.42,1:1.42,3:2.7,4:2.7,6:1.75,7:1.6,8:1.52,11:2.7,12:2.7,13:2.7,14:1.9,15:2,16:1.9,17:1.8,19:2.7,20:2.7,21:2.7,22:2.7,23:2.7,24:2.7,25:2.7,26:2.7,27:2.7,28:2.7,29:2.7,30:2.7,31:2.7,33:2.68,37:2.7,38:2.7,39:2.7,40:2.7,41:2.7,42:2.7,43:2.7,44:2.7,45:2.7,46:2.7,47:2.7,48:2.7,49:2.7,50:2.7,55:2.7,56:2.7,57:2.7,58:2.7,59:2.7,60:2.7,61:2.7,62:2.7,63:2.7,64:2.7,65:2.7,66:2.7,67:2.7,68:2.7,69:2.7,70:2.7,71:2.7,72:2.7,73:2.7,74:2.7,75:2.7,76:2.7,77:2.7,78:2.7,79:2.7,80:2.7,81:2.7,82:2.7,83:2.7,87:2.7,88:2.7,89:2.7,90:2.7,91:2.7,92:2.7,93:2.7,94:2.7,95:2.7,96:2.7,97:2.7,98:2.7,99:2.7,100:2.7,101:2.7,102:2.7,103:2.7,104:2.7,105:2.7,106:2.7,107:2.7,108:2.7,109:2.88},G9e={0:.8,20:1.31,27:1.2,35:1.15,44:1.1,54:1,60:1.84,72:1.88,84:1.75,85:1.56,86:1.76,98:1.6,99:1.68,100:1.63,112:1.6,113:1.59,114:1.36,129:1.45,135:1.47,144:1.6,152:1.45,170:1.4,180:1.55,202:2.4,222:2.24,224:1.91,225:1.98,243:2.02,269:2,293:1.9,316:1.8,420:2.37,480:2.3,512:2.3,544:2.3,612:2.1,629:1.54,665:1,813:2.6,851:2.65,854:2.27,894:1.93,896:2.1,937:2.05,938:2.06,981:1.62,1258:2.68,1309:2.33,1484:1,1763:2.14,1823:2.48,1882:2.1,1944:1.72,2063:2.72,2380:2.34,3132:2.6,3367:2.44,3733:2.11,3819:2.6,3821:2.36,4736:2.75,5724:2.73,5959:2.63,6519:2.84,6750:2.87,8991:2.81},dge=2.001,Wy=(function(){let e=["LI","NA","K","RB","CS","FR","BE","MG","CA","SR","BA","RA","AL","GA","IN","SN","TL","PB","BI","SC","TI","V","CR","MN","FE","CO","NI","CU","ZN","Y","ZR","NB","MO","TC","RU","RH","PD","AG","CD","LA","HF","TA","W","RE","OS","IR","PT","AU","HG","AC","RF","DB","SG","BH","HS","MT","CE","PR","ND","PM","SM","EU","GD","TB","DY","HO","ER","TM","YB","LU","TH","PA","U","NP","PU","AM","CM","BK","CF","ES","FM","MD","NO","LR"],t=new Set;for(let r of e)t.add(fK[r]);return t})();function N9e(e,t){return e<t?(e+t)*(e+t+1)/2+t:(e+t)*(e+t+1)/2+e}function im(e){let t=fK[e];return t===void 0?-1:t}function M9e(e,t){if(e<0||t<0)return-1;let r=G9e[N9e(e,t)];return r===void 0?-1:r}function tI(e){if(e<0)return dge;let t=P9e[e];return t===void 0?dge:t}function $S(e,t,r,n){let o=M9e(e,t);return o>0?o:t<0?r:(r+n)/1.95}var k9e=fK.H;function tp(e){return e===k9e}var H9e=new Map([["HIS|CD2|CG",2],["HIS|CE1|ND1",2],["ARG|CZ|NH2",2],["PHE|CE1|CZ",2],["PHE|CD2|CE2",2],["PHE|CD1|CG",2],["TRP|CD1|CG",2],["TRP|CD2|CE2",2],["TRP|CE3|CZ3",2],["TRP|CH2|CZ2",2],["ASN|CG|OD1",2],["GLN|CD|OE1",2],["TYR|CD1|CG",2],["TYR|CD2|CE2",2],["TYR|CE1|CZ",2],["ASP|CG|OD1",2],["GLU|CD|OE1",2],["G|C8|N7",2],["G|C4|C5",2],["G|C2|N3",2],["G|C6|O6",2],["C|C4|N3",2],["C|C5|C6",2],["C|C2|O2",2],["A|C2|N3",2],["A|C6|N1",2],["A|C4|C5",2],["A|C8|N7",2],["U|C5|C6",2],["U|C2|O2",2],["U|C4|O4",2],["DG|C8|N7",2],["DG|C4|C5",2],["DG|C2|N3",2],["DG|C6|O6",2],["DC|C4|N3",2],["DC|C5|C6",2],["DC|C2|O2",2],["DA|C2|N3",2],["DA|C6|N1",2],["DA|C4|C5",2],["DA|C8|N7",2],["DT|C5|C6",2],["DT|C2|O2",2],["DT|C4|O4",2]]);function pge(e,t,r){return[t,r]=t<r?[t,r]:[r,t],zy.has(e)&&t==="C"&&r==="O"||Ky.has(e)&&t==="OP1"&&r==="P"?2:H9e.get(`${e}|${t}|${r}`)||1}var V9e=new Map([["LYS|NZ|RET|C15",2]]);function UG(e,t,r,n){return e>r&&([e,r]=[r,e],[t,n]=[n,t]),V9e.get(`${e}|${t}|${r}|${n}`)||1}var fge="0.3.0",No;(o=>{let e;(u=>(u[u.Int8=1]="Int8",u[u.Int16=2]="Int16",u[u.Int32=3]="Int32",u[u.Uint8=4]="Uint8",u[u.Uint16=5]="Uint16",u[u.Uint32=6]="Uint32"))(e=o.IntDataType||={});let t;(A=>(A[A.Float32=32]="Float32",A[A.Float64=33]="Float64"))(t=o.FloatDataType||={});function r(i){let a;return i instanceof Int8Array?a=1:i instanceof Int16Array?a=2:i instanceof Int32Array?a=3:i instanceof Uint8Array?a=4:i instanceof Uint16Array?a=5:i instanceof Uint32Array?a=6:i instanceof Float32Array?a=32:i instanceof Float64Array?a=33:a=3,a}o.getDataType=r;function n(i){if(i instanceof Int8Array||i instanceof Int16Array||i instanceof Int32Array)return!0;for(let a=0,A=i.length;a<A;a++)if(a<0)return!1;return!0}o.isSignedIntegerDataType=n})(No||={});var p2=new Uint16Array(new Uint8Array([18,52]).buffer)[0]===13330;function t0(e,t){let r=new ArrayBuffer(e.length),n=new Uint8Array(r);for(let o=0,i=e.length;o<i;o+=t)for(let a=0;a<t;a++)n[o+t-a-1]=e[o+a];return r}var BK=28672;function LG(e){if(e.length>BK){let t=[];for(let r=0;r<e.length;r+=BK)t.push(String.fromCharCode.apply(null,e.subarray(r,r+BK)));return t.join("")}else return String.fromCharCode.apply(null,e)}function eD(e){let t=e.data;for(let r=e.encoding.length-1;r>=0;r--)t=_9e(t,e.encoding[r]);return t}function _9e(e,t){switch(t.kind){case"ByteArray":switch(t.type){case No.IntDataType.Uint8:return e;case No.IntDataType.Int8:return Y9e(e);case No.IntDataType.Int16:return O9e(e);case No.IntDataType.Uint16:return J9e(e);case No.IntDataType.Int32:return z9e(e);case No.IntDataType.Uint32:return K9e(e);case No.FloatDataType.Float32:return j9e(e);case No.FloatDataType.Float64:return W9e(e);default:Or(t.type)}case"FixedPoint":return X9e(e,t);case"IntervalQuantization":return Z9e(e,t);case"RunLength":return q9e(e,t);case"Delta":return $9e(e,t);case"IntegerPacking":return r8e(e,t);case"StringArray":return n8e(e,t)}}function Bge(e,t){switch(e){case No.IntDataType.Int8:return new Int8Array(t);case No.IntDataType.Int16:return new Int16Array(t);case No.IntDataType.Int32:return new Int32Array(t);case No.IntDataType.Uint8:return new Uint8Array(t);case No.IntDataType.Uint16:return new Uint16Array(t);case No.IntDataType.Uint32:return new Uint32Array(t);default:return new Int32Array(t)}}function Ige(e,t){switch(e){case No.FloatDataType.Float32:return new Float32Array(t);case No.FloatDataType.Float64:return new Float64Array(t);default:return new Float64Array(t)}}function Y9e(e){return new Int8Array(e.buffer,e.byteOffset)}function tD(e,t,r){return p2?new r(e.buffer):new r(t0(e,t))}function O9e(e){return tD(e,2,Int16Array)}function J9e(e){return tD(e,2,Uint16Array)}function z9e(e){return tD(e,4,Int32Array)}function K9e(e){return tD(e,4,Uint32Array)}function j9e(e){return tD(e,4,Float32Array)}function W9e(e){return tD(e,8,Float64Array)}function X9e(e,t){let r=e.length,n=Ige(t.srcType,r),o=1/t.factor;for(let i=0;i<r;i++)n[i]=o*e[i];return n}function Z9e(e,t){let r=e.length,n=Ige(t.srcType,r),o=(t.max-t.min)/(t.numSteps-1),i=t.min;for(let a=0;a<r;a++)n[a]=i+o*e[a];return n}function q9e(e,t){let r=Bge(t.srcType,t.srcSize),n=0;for(let o=0,i=e.length;o<i;o+=2){let a=e[o],A=e[o+1];for(let s=0;s<A;++s)r[n++]=a}return r}function $9e(e,t){let r=e.length,n=Bge(t.srcType,r);if(!r)return e;n[0]=e[0]+(t.origin|0);for(let o=1;o<r;++o)n[o]=e[o]+n[o-1];return n}function e8e(e,t){let r=t.byteCount===1?127:32767,n=-r-1,o=e.length,i=new Int32Array(t.srcSize),a=0,A=0;for(;a<o;){let s=0,c=e[a];for(;c===r||c===n;)s+=c,a++,c=e[a];s+=c,i[A]=s,a++,A++}return i}function t8e(e,t){let r=t.byteCount===1?255:65535,n=e.length,o=new Int32Array(t.srcSize),i=0,a=0;for(;i<n;){let A=0,s=e[i];for(;s===r;)A+=s,i++,s=e[i];A+=s,o[a]=A,i++,a++}return o}function r8e(e,t){return e.length===t.srcSize?e:t.isUnsigned?t8e(e,t):e8e(e,t)}function n8e(e,t){let r=eD({encoding:t.offsetEncoding,data:t.offsets}),n=eD({encoding:t.dataEncoding,data:e}),o=t.stringData,i=new Array(r.length);i[0]="";for(let s=1,c=r.length;s<c;s++)i[s]=o.substring(r[s-1],r[s]);let a=0,A=new Array(n.length);for(let s=0,c=n.length;s<c;s++)A[a++]=i[n[s]+1];return A}function o8e(e,t,r){let n=1,o;for(o=0;o<t;o++){let i=n*e;if(Math.abs(Math.round(i)-i)<=r)return o;n*=10}return-1}function Cge(e,t){return Math.abs(e)<t?0:Math.floor(Math.log10(Math.abs(e)))+1}function hge(e,t,r){let n=1,o=0;for(let i=0,a=e.length;i<a;i++){if(n>=0){let s=o8e(e[i],t,r);s<0?n=-1:s>n&&(n=s)}let A=Math.abs(e[i]);if(A>r){let s=Math.floor(Math.log10(Math.abs(A)))+1;s>o&&(o=s)}}return{mantissaDigits:n,integerDigits:o}}function TG(e){e=e.trim();let t=parseInt(e,10);return Number.isNaN(t)?!1:t.toString()===e}function r0(e){if(!isFinite(e))return 0;let t=1,r=0;for(;Math.round(e*t)/t!==e;)t*=10,++r;return r}function f2(e,t){return parseFloat(e.toPrecision(t))}function yge(e,t){return parseFloat(e.toFixed(t))}function B2(e){return PG.classify(e)}function Qge(e){return Ege.classify(e)}var PG;(g=>{function e(m,p){return m>=0?Math.ceil((m+1)/p):Math.ceil((m+1)/(-p-1))}function t(m){let p=!1;for(let d=0,f=m.length;d<f;d++)if(m[d]<0){p=!0;break}return p?{signed:p,limit8:127,limit16:32767}:{signed:p,limit8:255,limit16:65535}}function r(){return{pack8:0,pack16:0,count:0}}function n({limit8:m,limit16:p},d,f){d.pack8+=e(f,m),d.pack16+=e(f,p),d.count+=1}function o(m,p){m.pack8+=e(p,127),m.pack16+=e(p,32767),m.count+=1}function i(m){return m.count*4<m.pack16*2?{length:m.count*4,elem:4}:m.pack16*2<m.pack8?{length:m.pack16*2,elem:2}:{length:m.pack8,elem:1}}function a(m,p){let d=r();for(let f=0,I=m.length;f<I;f++)n(p,d,m[f]);return{...i(d),kind:"pack"}}function A(m,p){let d=r(),f=m[0];for(let I=1,C=m.length;I<C;I++)o(d,m[I]-f),f=m[I];return{...i(d),kind:"delta"}}function s(m,p){let d=r(),f=1;for(let I=1,C=m.length;I<C;I++)m[I-1]!==m[I]?(n(p,d,m[I-1]),n(p,d,f),f=1):f++;return n(p,d,m[m.length-1]),n(p,d,f),{...i(d),kind:"rle"}}function c(m,p){let d=r(),f=1,I=0,C=0;for(let y=1,Q=m.length;y<Q;y++){let E=m[y]-I;C!==E?(o(d,C),o(d,f),f=1):f++,C=E,I=m[y]}return o(d,C),o(d,f),{...i(d),kind:"delta-rle"}}function l(m){let p=t(m),d=[a(m,p),s(m,p),A(m,p),c(m,p)];return d.sort((f,I)=>f.length-I.length),d}g.getSize=l;function u(m){if(m.length<2)return ro.by(ro.byteArray);let d=l(m)[0];switch(d.kind){case"pack":return ro.by(ro.integerPacking);case"rle":return ro.by(ro.runLength).and(ro.integerPacking);case"delta":return ro.by(ro.delta).and(ro.integerPacking);case"delta-rle":return ro.by(ro.delta).and(ro.runLength).and(ro.integerPacking);default:Or(d)}}g.classify=u})(PG||={});var Ege;(n=>{function t(o){let{mantissaDigits:a,integerDigits:A}=hge(o,4,1e-6);if(a<0||a+A>10)return ro.by(ro.byteArray);if(a===0)return PG.classify(o);let s=r(a),c=new Int32Array(o.length);for(let m=0,p=o.length;m<p;m++)c[m]=Math.round(s*o[m]);let u=PG.getSize(c)[0],g=ro.by(ro.fixedPoint(s));switch(u.kind){case"pack":return g.and(ro.integerPacking);case"rle":return g.and(ro.runLength).and(ro.integerPacking);case"delta":return g.and(ro.delta).and(ro.integerPacking);case"delta-rle":return g.and(ro.delta).and(ro.runLength).and(ro.integerPacking);default:Or(u)}}n.classify=t;function r(o){let i=1;for(let a=0;a<o;a++)i*=10;return i}})(Ege||={});var GG=class e{constructor(t){this.providers=t}and(t){return new e(this.providers.concat([t]))}encode(t){let r=[];for(let n of this.providers){let o=n(t);if(!o.encodings.length)throw new Error("Encodings must be non-empty.");t=o.data;for(let i of o.encodings)r.push(i)}if(!(t instanceof Uint8Array))throw new Error("The encoding must result in a Uint8Array. Fix your encoding chain.");return{encoding:r,data:t}}},rI;(n=>{function e(o){return new GG([o])}n.by=e;function t(o){let i=e(r(o[0]));for(let a=1;a<o.length&&o[a-1].kind!=="IntegerPacking";a++)i=i.and(r(o[a]));return i}n.fromEncoding=t;function r(o){switch(o.kind){case"ByteArray":return ro.byteArray;case"FixedPoint":return ro.fixedPoint(o.factor);case"IntervalQuantization":return ro.intervalQuantizaiton(o.min,o.max,o.numSteps);case"RunLength":return ro.runLength;case"Delta":return ro.delta;case"IntegerPacking":return ro.integerPacking;case"StringArray":return ro.stringArray}}})(rI||={});var ro;(y=>{function e(Q){return new GG([Q])}y.by=e;function t(Q){return{encodings:[{kind:"ByteArray",type:No.IntDataType.Uint8}],data:Q}}function r(Q){return{encodings:[{kind:"ByteArray",type:No.IntDataType.Int8}],data:new Uint8Array(Q.buffer,Q.byteOffset)}}let n={[No.IntDataType.Int16]:function(Q,E,b){Q.setInt16(2*E,b,!0)},[No.IntDataType.Uint16]:function(Q,E,b){Q.setUint16(2*E,b,!0)},[No.IntDataType.Int32]:function(Q,E,b){Q.setInt32(4*E,b,!0)},[No.IntDataType.Uint32]:function(Q,E,b){Q.setUint32(4*E,b,!0)},[No.FloatDataType.Float32]:function(Q,E,b){Q.setFloat32(4*E,b,!0)},[No.FloatDataType.Float64]:function(Q,E,b){Q.setFloat64(8*E,b,!0)}},o={[No.IntDataType.Int16]:2,[No.IntDataType.Uint16]:2,[No.IntDataType.Int32]:4,[No.IntDataType.Uint32]:4,[No.FloatDataType.Float32]:4,[No.FloatDataType.Float64]:8};function i(Q){let E=No.getDataType(Q);if(E===No.IntDataType.Int8)return r(Q);if(E===No.IntDataType.Uint8)return t(Q);let b=new Uint8Array(Q.length*o[E]),x=n[E],S=new DataView(b.buffer);for(let w=0,R=Q.length;w<R;w++)x(S,w,Q[w]);return{encodings:[{kind:"ByteArray",type:E}],data:b}}y.byteArray=i;function a(Q,E){let b=No.getDataType(Q),x=new Int32Array(Q.length);for(let S=0,w=Q.length;S<w;S++)x[S]=Math.round(Q[S]*E);return{encodings:[{kind:"FixedPoint",factor:E,srcType:b}],data:x}}function A(Q){return E=>a(E,Q)}y.fixedPoint=A;function s(Q,E,b,x,S){let w=No.getDataType(Q);if(!Q.length)return{encodings:[{kind:"IntervalQuantization",min:E,max:b,numSteps:x,srcType:w}],data:new Int32Array(0)};if(b<E){let L=E;E=b,b=L}let R=(b-E)/(x-1),T=new S(Q.length);for(let L=0,F=Q.length;L<F;L++){let v=Q[L];v<=E?T[L]=0:v>=b?T[L]=x-1:T[L]=Math.round((v-E)/R)|0}return{encodings:[{kind:"IntervalQuantization",min:E,max:b,numSteps:x,srcType:w}],data:T}}function c(Q,E,b,x=Int32Array){return S=>s(S,Q,E,b,x)}y.intervalQuantizaiton=c;function l(Q){let E=No.getDataType(Q);if(E===void 0&&(Q=new Int32Array(Q),E=No.IntDataType.Int32),!Q.length)return{encodings:[{kind:"RunLength",srcType:E,srcSize:0}],data:new Int32Array(0)};let b=2;for(let R=1,T=Q.length;R<T;R++)Q[R-1]!==Q[R]&&(b+=2);let x=new Int32Array(b),S=0,w=1;for(let R=1,T=Q.length;R<T;R++)Q[R-1]!==Q[R]?(x[S]=Q[R-1],x[S+1]=w,w=1,S+=2):++w;return x[S]=Q[Q.length-1],x[S+1]=w,{encodings:[{kind:"RunLength",srcType:E,srcSize:Q.length}],data:x}}y.runLength=l;function u(Q){if(!No.isSignedIntegerDataType(Q))throw new Error("Only signed integer types can be encoded using delta encoding.");let E=No.getDataType(Q);if(E===void 0&&(Q=new Int32Array(Q),E=No.IntDataType.Int32),!Q.length)return{encodings:[{kind:"Delta",origin:0,srcType:E}],data:new Q.constructor(0)};let b=new Q.constructor(Q.length),x=Q[0];b[0]=Q[0];for(let S=1,w=Q.length;S<w;S++)b[S]=Q[S]-Q[S-1];return b[0]=0,{encodings:[{kind:"Delta",origin:x,srcType:E}],data:b}}y.delta=u;function g(Q){for(let E=0,b=Q.length;E<b;E++)if(Q[E]<0)return!0;return!1}function m(Q,E){let b=0;for(let x=0,S=Q.length;x<S;x++)b+=Q[x]/E|0;return b+=Q.length,b}function p(Q,E){let b=-E-1,x=0;for(let S=0,w=Q.length;S<w;S++){let R=Q[S];R>=0?x+=R/E|0:x+=R/b|0}return x+=Q.length,x}function d(Q){let E=g(Q),b=E?p(Q,127):m(Q,255),x=E?p(Q,32767):m(Q,65535);return Q.length*4<x*2?{isSigned:E,size:Q.length,bytesPerElement:4}:x*2<b?{isSigned:E,size:x,bytesPerElement:2}:{isSigned:E,size:b,bytesPerElement:1}}function f(Q,E){let b=E.isSigned?E.bytesPerElement===1?127:32767:E.bytesPerElement===1?255:65535,x=-b-1,S=Q.length,w=E.isSigned?E.bytesPerElement===1?new Int8Array(E.size):new Int16Array(E.size):E.bytesPerElement===1?new Uint8Array(E.size):new Uint16Array(E.size),R=0;for(let L=0;L<S;L++){let F=Q[L];if(F>=0)for(;F>=b;)w[R]=b,++R,F-=b;else for(;F<=x;)w[R]=x,++R,F-=x;w[R]=F,++R}let T=i(w);return{encodings:[{kind:"IntegerPacking",byteCount:E.bytesPerElement,isUnsigned:!E.isSigned,srcSize:S},T.encodings[0]],data:T.data}}function I(Q){let E=d(Q);return E.bytesPerElement===4?i(Q):f(Q,E)}y.integerPacking=I;function C(Q){let E=Object.create(null),b=[],x=new Int32Array(Q.length),S=qe.create(Int32Array,1,Math.min(1024,Q.length<32?Q.length+1:Math.round(Q.length/8)+1));qe.add(S,0);let w=0,R=0;for(let G of Q){if(G==null){x[R++]=-1;continue}let N=E[G];N===void 0&&(w+=G.length,N=b.length,b[N]=G,E[G]=N,qe.add(S,w)),x[R++]=N}let T=qe.compact(S),F=B2(T).encode(T),U=B2(x).encode(x);return{encodings:[{kind:"StringArray",dataEncoding:U.encoding,stringData:b.join(""),offsetEncoding:F.encoding,offsets:F.data}],data:U.data}}y.stringArray=C})(ro||={});var Gu;(A=>{let e;(u=>(u[u.Str=0]="Str",u[u.Int=1]="Int",u[u.Float=2]="Float"))(e=A.Type||={});function t(s,c,l){return{name:s,type:0,value:c,valueKind:l&&l.valueKind,defaultFormat:l&&l.encoder?{encoder:l.encoder}:void 0,shouldInclude:l&&l.shouldInclude}}A.str=t;function r(s,c,l){return{name:s,type:1,value:c,valueKind:l&&l.valueKind,defaultFormat:l?{encoder:l.encoder,typedArray:l.typedArray}:void 0,shouldInclude:l&&l.shouldInclude}}A.int=r;function n(s,c,l){return{name:s,type:2,value:c,valueKind:l&&l.valueKind,defaultFormat:l?{encoder:l.encoder,typedArray:l.typedArray,digitCount:typeof l.digitCount<"u"?l.digitCount:void 0}:void 0,shouldInclude:l&&l.shouldInclude}}A.float=n;function o(s){return r(s,(c,l,u)=>u+1,{typedArray:Int32Array,encoder:ro.by(ro.delta).and(ro.runLength).and(ro.integerPacking)})}A.index=o;class i{constructor(){this.fields=[]}index(c){return this.fields.push(A.index(c)),this}str(c,l,u){return this.fields.push(A.str(c,l,u)),this}int(c,l,u){return this.fields.push(A.int(c,l,u)),this}vec(c,l,u){for(let g=0;g<l.length;g++)this.fields.push(A.int(`${c}[${g+1}]`,l[g],u));return this}float(c,l,u){return this.fields.push(A.float(c,l,u)),this}many(c){for(let l=0;l<c.length;l++)this.fields.push(c[l]);return this}add(c){return this.fields.push(c),this}getFields(){return this.fields}}A.Builder=i;function a(){return new i}A.build=a})(Gu||={});var hg;(i=>{i.Empty={fields:[],source:[]};function t(a){let A=[],s=[],c=[],l=[];for(let g of a.split(/[\r\n]+/)){if(g=g.trim(),g.length===0)continue;let m=/^!/.test(g);m&&(g=g.substr(1));let p=g.split(/\./),d=p[1],f=m?d?l:s:d?c:A;f[f.length]=g,d&&!A.includes(p[0])&&(A[A.length]=p[0])}let u=c.map(g=>g.split(".")[0]);return{includeCategory(g){return s.includes(g)?!1:A.length<=0||A.indexOf(g)!==-1},includeField(g,m){let p=g+"."+m;return l.includes(p)?!1:!u.includes(g)||c.includes(p)}}}i.filterOf=t,i.DefaultFilter={includeCategory(a){return!0},includeField(a,A){return!0}},i.DefaultFormatter={getFormat(a,A){}};function o(a,A){return A?{fields:bge(a._schema),source:[{data:a,rowCount:A.length,keys:()=>jb.Array(A)}]}:{fields:bge(a._schema),source:[{data:a,rowCount:a._rowCount}]}}i.ofTable=o})(hg||={});var hK;(r=>{function e(n,o,i){n.startDataBlock(o);for(let a of i._tableNames)n.writeCategory({name:a,instance:()=>hg.ofTable(i[a])})}r.writeDatabase=e;function t(n,o){for(let i of Object.keys(o))e(n,i,o[i])}r.writeDatabaseCollection=t})(hK||={});function IK(e){return(t,r)=>r[e].value(t)}function i8e(e){return(t,r)=>r[e].value(t).join(r[e].schema.separator)}function CK(e,...t){return(r,n)=>n[e].schema.space.get(n[e].value(r),...t)}function I2(e){return(t,r)=>r[e].valueKind(t)}function a8e(e,t){let r=[],n=2,o=I2(e);if(t.rank===1){let i=t.dimensions[0];for(let a=0;a<i;a++){let A=`${e}[${a+1}]`;r.push({name:A,type:n,value:CK(e,a),valueKind:o})}}else if(t.rank===2){let i=t.dimensions[0],a=t.dimensions[1];for(let A=0;A<i;A++)for(let s=0;s<a;s++){let c=`${e}[${A+1}][${s+1}]`;r.push({name:c,type:n,value:CK(e,A,s),valueKind:o})}}else if(t.rank===3){let i=t.dimensions[0],a=t.dimensions[1],A=t.dimensions[2];for(let s=0;s<i;s++)for(let c=0;c<a;c++)for(let l=0;l<A;l++){let u=`${e}[${s+1}][${c+1}][${l+1}]`;r.push({name:u,type:n,value:CK(e,s,c,l),valueKind:o})}}else throw new Error("Tensors with rank > 3 or rank 0 are currently not supported.");return r}function bge(e){let t=[];for(let r of Object.keys(e)){let n=e[r];n.valueType==="int"?t.push({name:r,type:1,value:IK(r),valueKind:I2(r)}):n.valueType==="float"?t.push({name:r,type:2,value:IK(r),valueKind:I2(r)}):n.valueType==="str"?t.push({name:r,type:0,value:IK(r),valueKind:I2(r)}):n.valueType==="list"?t.push({name:r,type:0,value:i8e(r),valueKind:I2(r)}):n.valueType==="tensor"?t.push(...a8e(r,n.space)):Or(n.valueType)}return t}function xge(e){return e.defaultFormat&&typeof e.defaultFormat.digitCount<"u"?Math.max(0,Math.min(e.defaultFormat.digitCount,16)):6}function C2(e){return e.fields.some(t=>!!t.shouldInclude)?e.fields.filter(t=>!t.shouldInclude||e.source.some(r=>t.shouldInclude(r.data))):e.fields}function NG(e,t){let r=e.instance(t),n=r.source.filter(a=>a.rowCount>0);if(!n.length)return{instance:r,rowCount:0,source:[]};let o=n.reduce((a,A)=>a+A.rowCount,0),i=n.map(a=>({data:a.data,keys:()=>a.keys?a.keys():jb.Range(0,a.rowCount-1),rowCount:a.rowCount}));return{instance:r,rowCount:o,source:i}}var kG=class{constructor(){this.builder=tr.create();this.encoded=!1;this.dataBlockCreated=!1;this.filter=hg.DefaultFilter;this.formatter=hg.DefaultFormatter;this.isBinary=!1;this.binaryEncodingProvider=void 0}setFilter(t){this.filter=t||hg.DefaultFilter}isCategoryIncluded(t){return this.filter.includeCategory(t)}setFormatter(t){this.formatter=t||hg.DefaultFormatter}startDataBlock(t){this.dataBlockCreated=!0,tr.write(this.builder,`data_${(t||"").replace(/[ \n\t]/g,"").toUpperCase()}
|
|
#
|
|
`)}writeCategory(t,r,n){if(this.encoded)throw new Error("The writer contents have already been encoded, no more writing.");if(!this.dataBlockCreated)throw new Error("No data block created.");if(!n?.ignoreFilter&&!this.filter.includeCategory(t.name))return;let{instance:o,rowCount:i,source:a}=NG(t,r);i&&(i===1?s8e(t,o,a,this.builder,this.filter,this.formatter):c8e(t,o,a,this.builder,this.filter,this.formatter))}encode(){this.encoded=!0}writeTo(t){let r=tr.getChunks(this.builder);for(let n=0,o=r.length;n<o;n++)t.writeString(r[n])}getSize(){return tr.getSize(this.builder)}getData(){return tr.getString(this.builder)}};function Dge(e,t,r,n,o,i){let a=n.valueKind,A=a?a(r,t):K.ValueKinds.Present;if(A!==K.ValueKinds.Present)A===K.ValueKinds.NotPresent?m8e(e):d8e(e);else{let s=n.value(r,t,i),c=n.type;if(c===Gu.Type.Str)return l8e(s)?(MG(e,s),!0):p8e(e,s);c===Gu.Type.Int?u8e(e,s):g8e(e,s,o)}return!1}function vge(e,t,r){let n=[];for(let o of t){let i=r.getFormat(e,o.name);i&&typeof i.digitCount<"u"?n[n.length]=o.type===Gu.Type.Float?Math.pow(10,Math.max(0,Math.min(i.digitCount,15))):0:n[n.length]=o.type===Gu.Type.Float?Math.pow(10,xge(o)):0}return n}function s8e(e,t,r,n,o,i){let a=C2(t),A=r[0],s=A.data,c=a.reduce((m,p)=>o.includeField(e.name,p.name)?Math.max(m,p.name.length):0,0);if(c===0)return;c+=e.name.length+6;let u=A.keys().move(),g=vge(e.name,t.fields,i);for(let m=0;m<a.length;m++){let p=a[m];if(!o.includeField(e.name,p.name))continue;tr.writePadRight(n,`_${e.name}.${p.name}`,c),Dge(n,s,u,p,g[m],0)||tr.newline(n)}tr.write(n,`#
|
|
`)}function c8e(e,t,r,n,o,i){let a=C2(t),A=o===hg.DefaultFilter?a:a.filter(u=>o.includeField(e.name,u.name)),s=A.length;if(s===0)return;let c=vge(e.name,A,i);Sge(n,"loop_");for(let u=0;u<s;u++)Sge(n,`_${e.name}.${A[u].name}`);let l=0;for(let u=0;u<r.length;u++){let g=r[u],m=g.data;if(g.rowCount===0)continue;let p=g.keys();for(;p.hasNext;){let d=p.move(),f=!1;for(let I=0;I<s;I++)f=Dge(n,m,d,A[I],c[I],l);f||tr.newline(n),l++}}tr.write(n,`#
|
|
`)}function l8e(e){return typeof e=="string"&&e.indexOf(`
|
|
`)>=0}function Sge(e,t){tr.write(e,t),tr.newline(e)}function u8e(e,t){tr.writeInteger(e,t),tr.whitespace1(e)}function g8e(e,t,r){tr.writeFloat(e,t,r),tr.whitespace1(e)}function m8e(e){tr.writeSafe(e,". ")}function d8e(e){tr.writeSafe(e,"? ")}function p8e(e,t){if(!t)return tr.writeSafe(e,". "),!1;let r=t.charCodeAt(0),n=!1,o=0,i=!1,a=!1;for(let A=0,s=t.length-1;A<=s;A++)switch(t.charCodeAt(A)){case 9:n=!0;break;case 10:return MG(e,t),!0;case 32:n=!0;break;case 34:if(A&&A===s)break;if(i)return MG(e,t),!0;a=!0,n=!0,o=0;break;case 39:if(A&&A===s)break;if(a)return MG(e,t),!0;i=!0,n=!0,o=1;break}return!n&&(r===35||r===36||r===59||r===91||r===93||r===95)&&(n=!0),n?(tr.writeSafe(e,o?'"':"'"),tr.writeSafe(e,t),tr.writeSafe(e,o?'" ':"' ")):(tr.writeSafe(e,t),tr.writeSafe(e," ")),!1}function MG(e,t){tr.writeSafe(e,`
|
|
;`+t),tr.writeSafe(e,`
|
|
;
|
|
`)}var am={is(e){return typeof e.charCodeAt=="function"},toString(e){try{return e.toString()}catch(t){throw new Error(`Failed to convert StringLike object into string. This might be because the length ${e.length} exceeds maximum allowed string length ${n0}. (${t})`)}}},n0=536870888,HG=28,VG=class e{constructor(t=HG){this._chunks=[];this._length=0;this._tmpArray=[];this.STRING_CHUNK_SIZE=2**t,this.STRING_CHUNK_SHIFT=t,this.STRING_CHUNK_MASK=2**t-1}get length(){return this._length}static fromString(t,r=HG){let n=new e(r);return n._append(t),n}static fromStrings(t,r=HG){let n=new e(r);for(let o of t)n._append(o);return n}static fromUtf8Data(t,r=0,n=t.length,o=HG){let i=2**o,a=[],A=r;for(;A<n;){let s=Math.min(A+i,n);if(s<n){for(;(t[s]&192)===128;)if(s--,s===A)throw new Error("Input is rubbish, no UTF-8 character start found in a chunk")}let c=rp(t,A,s-A);a.push(c),A=s}return e.fromStrings(a,o)}_append(t){let r=this.STRING_CHUNK_SIZE,n=this._chunks.length===0||this._chunks[this._chunks.length-1].length===r?"":this._chunks.pop(),o=r-n.length;for(this._chunks.push(n+t.substring(0,o));o<t.length;)this._chunks.push(t.substring(o,o+r)),o+=r;this._length+=t.length}_getChunkIndex(t){return t>>>this.STRING_CHUNK_SHIFT}_getIndexInChunk(t){return t&this.STRING_CHUNK_MASK}_isOutOfRange(t){return t<0||t>=this.length}at(t){return-this.length<=t&&t<0?this.at(t+this.length):this.charAt(t)||void 0}charAt(t){if(this._isOutOfRange(t))return"";let r=this._getChunkIndex(t),n=this._getIndexInChunk(t);return this._chunks[r][n]}charCodeAt(t){if(this._isOutOfRange(t))return NaN;let r=this._getChunkIndex(t),n=this._getIndexInChunk(t);return this._chunks[r].charCodeAt(n)}substring(t,r){let n=Math.min(Math.max(t??0,0),this.length),o=Math.min(Math.max(r??this.length,0),this.length);if(n>o)return this.substring(o,n);if(n===o)return"";if(o-n>n0)throw new Error(`Trying to create get a substring longer (${o-n}) than maximum allowed string length (${n0}).`);let i=this._getChunkIndex(n),a=this._getIndexInChunk(n),A=this._getChunkIndex(o),s=this._getIndexInChunk(o);if(i===A)return this._chunks[i].substring(a,s);{let c=this._getTmpArray();c.push(this._chunks[i].substring(a,this.STRING_CHUNK_SIZE));for(let l=i+1;l<A;l++)c.push(this._chunks[l]);return c.push(this._chunks[A].substring(0,s)),c.join("")}}_getTmpArray(){for(;this._tmpArray.length;)this._tmpArray.pop();return this._tmpArray}indexOf(t,r=0){if(t.length>this.STRING_CHUNK_SIZE)throw new Error("NotImplementedError: indexOf is only implemented for searchString shorter than STRING_CHUNK_SIZE");r<0&&(r=0);let n=this._getChunkIndex(r);for(let o=n;o<this._chunks.length;o++){let i=this._chunks[o],a=o===n?this._getIndexInChunk(r):0,A=i.indexOf(t,a);if(A>=0)return o*this.STRING_CHUNK_SIZE+A;if(o!==this._chunks.length-1){let s=Math.max(this.STRING_CHUNK_SIZE-t.length+1,a),l=(i.substring(s,void 0)+this._chunks[o+1].substring(0,t.length-1)).indexOf(t);if(l>=0)return o*this.STRING_CHUNK_SIZE+s+l}}return-1}includes(t,r=0){return this.indexOf(t,r)>=0}startsWith(t,r=0){if(t.length>this.STRING_CHUNK_SIZE)throw new Error("NotImplementedError: startsWith is only implemented for searchString shorter than STRING_CHUNK_SIZE");return this.substring(r,r+t.length)===t}toString(){try{return this._chunks.join("")}catch(t){throw new Error(`Failed to convert StringLike object into string. This might be because the length ${this.length} exceeds maximum allowed string length ${n0}. (${t})`)}}};function nI(e,t,r){for(let n=0,o=r.length;n<o;n++){let i=r.charCodeAt(n);if(i<128){e[t++]=i>>>0&127|0;continue}if(i<2048){e[t++]=i>>>6&31|192,e[t++]=i>>>0&63|128;continue}if(i<65536){e[t++]=i>>>12&15|224,e[t++]=i>>>6&63|128,e[t++]=i>>>0&63|128;continue}if(i<1114112){e[t++]=i>>>18&7|240,e[t++]=i>>>12&63|128,e[t++]=i>>>6&63|128,e[t++]=i>>>0&63|128;continue}throw new Error("bad codepoint "+i)}}var f8e=(function(){let e=[];for(let t=0;t<1024;t++)e[t]=String.fromCharCode(t);return e})();function wge(e){throw new Error(e)}function B8e(e,t,r){let n=f8e,o,i=0,a=[],A=512;for(let s=t,c=t+r;s<c;s++){let l=e[s];(l&128)===0?a[i++]=n[l]:(l&224)===192?a[i++]=n[(l&15)<<6|e[++s]&63]:(l&240)===224?a[i++]=String.fromCharCode((l&15)<<12|(e[++s]&63)<<6|(e[++s]&63)<<0):(l&248)===240?a[i++]=String.fromCharCode((l&7)<<18|(e[++s]&63)<<12|(e[++s]&63)<<6|(e[++s]&63)<<0):wge("Invalid byte "+l.toString(16)),i===A&&(o=o||[],o[o.length]=a.join(""),i=0)}return o?(i>0&&(o[o.length]=a.slice(0,i).join("")),o.join("")):a.slice(0,i).join("")}var Fge=typeof TextDecoder<"u"?new TextDecoder:void 0;function rp(e,t=0,r=e.length){if(Fge){let n=t||r!==e.length?e.subarray(t,t+r):e;return Fge.decode(n)}else return B8e(e,t,r)}function rD(e,t=0,r=e.length){if(r<=n0)return rp(e,t,r);let n=VG.fromUtf8Data(e,t,t+r);return n.length<=n0?n.toString():n}function Xy(e){let t=0;for(let r=0,n=e.length;r<n;r++){let o=e.charCodeAt(r);if(o<128){t+=1;continue}if(o<2048){t+=2;continue}if(o<65536){t+=3;continue}if(o<1114112){t+=4;continue}wge("bad codepoint "+o)}return t}function Rge(e){let t=new ArrayBuffer(_G(e)),r=new DataView(t),n=new Uint8Array(t);return YG(e,r,n,0),n}function _G(e){let t=typeof e;if(t==="string"){let r=Xy(e);if(r<32)return 1+r;if(r<256)return 2+r;if(r<65536)return 3+r;if(r<4294967296)return 5+r}if(e instanceof Uint8Array){let r=e.byteLength;if(r<256)return 2+r;if(r<65536)return 3+r;if(r<4294967296)return 5+r}if(t==="number"){if(Math.floor(e)!==e)return 9;if(e>=0){if(e<128)return 1;if(e<256)return 2;if(e<65536)return 3;if(e<4294967296)return 5;throw new Error("Number too big 0x"+e.toString(16))}if(e>=-32)return 1;if(e>=-128)return 2;if(e>=-32768)return 3;if(e>=-2147483648)return 5;throw new Error("Number too small -0x"+e.toString(16).substr(1))}if(t==="boolean"||e===null||e===void 0)return 1;if(t==="object"){let r,n=0;if(Array.isArray(e)){r=e.length;for(let o=0;o<r;o++)n+=_G(e[o])}else{let o=Object.keys(e);r=o.length;for(let i=0;i<r;i++){let a=o[i];n+=_G(a)+_G(e[a])}}if(r<16)return 1+n;if(r<65536)return 3+n;if(r<4294967296)return 5+n;throw new Error("Array or object too long 0x"+r.toString(16))}throw new Error("Unknown type "+t)}function YG(e,t,r,n){let o=typeof e;if(o==="string"){let i=Xy(e);if(i<32)return t.setUint8(n,i|160),nI(r,n+1,e),1+i;if(i<256)return t.setUint8(n,217),t.setUint8(n+1,i),nI(r,n+2,e),2+i;if(i<65536)return t.setUint8(n,218),t.setUint16(n+1,i),nI(r,n+3,e),3+i;if(i<4294967296)return t.setUint8(n,219),t.setUint32(n+1,i),nI(r,n+5,e),5+i}if(e instanceof Uint8Array){let i=e.byteLength,a=new Uint8Array(t.buffer);if(i<256)return t.setUint8(n,196),t.setUint8(n+1,i),a.set(e,n+2),2+i;if(i<65536)return t.setUint8(n,197),t.setUint16(n+1,i),a.set(e,n+3),3+i;if(i<4294967296)return t.setUint8(n,198),t.setUint32(n+1,i),a.set(e,n+5),5+i}if(o==="number"){if(!isFinite(e))throw new Error("Number not finite: "+e);if(Math.floor(e)!==e)return t.setUint8(n,203),t.setFloat64(n+1,e),9;if(e>=0){if(e<128)return t.setUint8(n,e),1;if(e<256)return t.setUint8(n,204),t.setUint8(n+1,e),2;if(e<65536)return t.setUint8(n,205),t.setUint16(n+1,e),3;if(e<4294967296)return t.setUint8(n,206),t.setUint32(n+1,e),5;throw new Error("Number too big 0x"+e.toString(16))}if(e>=-32)return t.setInt8(n,e),1;if(e>=-128)return t.setUint8(n,208),t.setInt8(n+1,e),2;if(e>=-32768)return t.setUint8(n,209),t.setInt16(n+1,e),3;if(e>=-2147483648)return t.setUint8(n,210),t.setInt32(n+1,e),5;throw new Error("Number too small -0x"+(-e).toString(16).substr(1))}if(e==null)return t.setUint8(n,192),1;if(o==="boolean")return t.setUint8(n,e?195:194),1;if(o==="object"){let i,a=0,A=Array.isArray(e),s;if(A?i=e.length:(s=Object.keys(e),i=s.length),i<16?(t.setUint8(n,i|(A?144:128)),a=1):i<65536?(t.setUint8(n,A?220:222),t.setUint16(n+1,i),a=3):i<4294967296&&(t.setUint8(n,A?221:223),t.setUint32(n+1,i),a=5),A)for(let c=0;c<i;c++)a+=YG(e[c],t,r,n+a);else for(let c=0,l=s.length;c<l;c++){let u=s[c];a+=YG(u,t,r,n+a),a+=YG(e[u],t,r,n+a)}return a}throw new Error("Unknown type "+o)}var OG=class{constructor(t,r,n){this.autoClassify=n;this.dataBlocks=[];this.filter=hg.DefaultFilter;this.formatter=hg.DefaultFormatter;this.isBinary=!0;this.binaryEncodingProvider=void 0;this.binaryEncodingProvider=r,this.data={encoder:t,version:fge,dataBlocks:this.dataBlocks}}setFilter(t){this.filter=t||hg.DefaultFilter}isCategoryIncluded(t){return this.filter.includeCategory(t)}setFormatter(t){this.formatter=t||hg.DefaultFormatter}startDataBlock(t){this.dataBlocks.push({header:(t||"").replace(/[ \n\t]/g,"").toUpperCase(),categories:[]})}writeCategory(t,r,n){if(!this.data)throw new Error("The writer contents have already been encoded, no more writing.");if(!this.dataBlocks.length)throw new Error("No data block created.");if(!n?.ignoreFilter&&!this.filter.includeCategory(t.name))return;let{instance:o,rowCount:i,source:a}=NG(t,r);if(!i)return;let A={name:"_"+t.name,columns:[],rowCount:i},s=C2(o);for(let c of s){if(!this.filter.includeField(t.name,c.name))continue;let l=this.formatter.getFormat(t.name,c.name);A.columns.push(Q8e(t.name,c,a,i,l,this.binaryEncodingProvider,this.autoClassify))}A.columns.length&&this.dataBlocks[this.dataBlocks.length-1].categories.push(A)}encode(){this.encodedData||(this.encodedData=Rge(this.data),this.data=null,this.dataBlocks=null)}writeTo(t){t.writeBinary(this.encodedData)}getData(){return this.encode(),this.encodedData}getSize(){return this.encodedData.length}};function I8e(e,t){return t&&t.typedArray?t.typedArray:e.defaultFormat&&e.defaultFormat.typedArray?e.defaultFormat.typedArray:e.type===Gu.Type.Str?Array:e.type===Gu.Type.Int?Int32Array:Float64Array}function C8e(e){return e===Gu.Type.Str?rI.by(ro.stringArray):rI.by(ro.byteArray)}function h8e(e,t,r,n){return r&&r.encoder?r.encoder:t.defaultFormat&&t.defaultFormat.encoder?t.defaultFormat.encoder:n?n.get(e,t.name):void 0}function y8e(e,t){return e===Gu.Type.Str?rI.by(ro.stringArray):e===Gu.Type.Int?B2(t):Qge(t)}function Q8e(e,t,r,n,o,i,a){let{array:A,allPresent:s,mask:c}=E8e(t,I8e(t,o),n,r),l;t.type===Gu.Type.Str?l=rI.by(ro.stringArray):l=h8e(e,t,o,i),l||(a?l=y8e(t.type,A):l=C8e(t.type));let u=l.encode(A),g;if(!s){let m=rI.by(ro.runLength).and(ro.byteArray).encode(c);m.data.length<c.length?g=m:g=rI.by(ro.byteArray).encode(c)}return{name:t.name,data:u,mask:g}}function E8e(e,t,r,n){let o=e.type===Gu.Type.Str,i=new t(r),a=new Uint8Array(r),A=e.valueKind,s=e.value,c=!0,l=0;for(let u=0;u<n.length;u++){let g=n[u].data,m=n[u].keys();for(;m.hasNext;){let p=m.move(),d=A?A(p,g):K.ValueKinds.Present;if(d!==K.ValueKinds.Present)a[l]=d,o&&(i[l]=""),c=!1;else{let f=s(p,g,l);typeof f=="string"&&!f?(a[l]=K.ValueKinds.NotPresent,c=!1):a[l]=K.ValueKinds.Present,i[l]=f}l++}}return{array:i,allPresent:c,mask:a}}var eo;(g=>{g.Encoder=hK,g.Category=hg,g.Field=Gu,g.Encoding=ro;function o(m){let{binary:p=!1,encoderName:d="mol*"}=m||{};return p?new OG(d,m?m.binaryEncodingPovider:void 0,m?!!m.binaryAutoClassifyEncoding:!1):new kG}g.createEncoder=o;function i(){return g.Field.build()}g.fields=i;let a=g.Encoding;g.Encodings={deltaRLE:a.by(a.delta).and(a.runLength).and(a.integerPacking),fixedPoint2:a.by(a.fixedPoint(100)).and(a.delta).and(a.integerPacking),fixedPoint3:a.by(a.fixedPoint(1e3)).and(a.delta).and(a.integerPacking)};function s(m,p){return{fields:m,source:[p]}}g.categoryInstance=s;function c(m){return{get(p,d){let f=m.categories[p];if(!f)return;let I=f.getField(d);return I&&I.binaryEncoding?rI.fromEncoding(I.binaryEncoding):void 0}}}g.createEncodingProviderFromCifFrame=c;function l(m){return{get(p,d){for(let f=0;f<m.length;f++){let I=m[f];if(I.categoryName===p&&I.columnName===d)return u(I)}}}}g.createEncodingProviderFromJsonConfig=l;function u(m){let p=m.precision;if(p!==void 0){let d=Math.pow(10,p),f=a.by(a.fixedPoint(d));switch(m.encoding){case"pack":return f.and(a.integerPacking);case"rle":return f.and(a.runLength).and(a.integerPacking);case"delta":return f.and(a.delta).and(a.integerPacking);case"delta-rle":return f.and(a.delta).and(a.runLength).and(a.integerPacking)}}else switch(m.encoding){case"pack":return a.by(a.integerPacking);case"rle":return a.by(a.runLength).and(a.integerPacking);case"delta":return a.by(a.delta).and(a.integerPacking);case"delta-rle":return a.by(a.delta).and(a.runLength).and(a.integerPacking)}throw new Error("cannot be reached")}})(eo||={});var Zy;(A=>{A.Descriptor={name:"chem_comp_bond",cifExport:{prefix:"",categories:[{name:"chem_comp_bond",instance(s){let c=A.Provider.get(s.firstModel);if(!c)return eo.Category.Empty;let l=c.data;if(!l)return eo.Category.Empty;let u=s.structures[0].uniqueResidueNames,{comp_id:g,_rowCount:m}=l,p=[];for(let d=0;d<m;d++)u.has(g.value(d))&&(p[p.length]=d);return eo.Category.ofTable(l,p)}}]}},A.Provider=Ws.create(A.Descriptor);function r(s,c){return Jr.pick(c,Nn.chem_comp_bond,l=>s.properties.chemicalComponentMap.has(c.comp_id.value(l)))}A.chemCompBondFromTable=r;function n(s){let c=new Map;function l(y){if(c.has(y))return c.get(y);let Q=new a(y);return c.set(y,Q),Q}let{comp_id:u,atom_id_1:g,atom_id_2:m,value_order:p,pdbx_aromatic_flag:d,_rowCount:f,pdbx_ordinal:I}=s,C=l(u.value(0));for(let y=0;y<f;y++){let Q=u.value(y),E=g.value(y),b=m.value(y),x=p.value(y),S=d.value(y)==="y",w=I.value(y);C.compId!==Q&&(C=l(Q));let R=It.Flag.Covalent,T=1;switch(S&&(R|=It.Flag.Aromatic),x.toLowerCase()){case"delo":R|=It.Flag.Aromatic;break;case"doub":T=2;break;case"trip":T=3;break;case"quad":T=4;break}C.add(E,b,T,R,w)}return c}A.getEntriesFromChemCompBond=n;function o(s,c,l,u){return u&&l.startsWith("D")&&c!=="DOD"&&(l="H"+l.substring(1)),s.get(l)}class i{constructor(c,l){this.atomId=c;this.compId=l;this.map=new Map}get(c,l){return o(this.map,this.compId,c,l)}}A.Pairs=i;class a{constructor(c){this.compId=c;this.map=new Map}add(c,l,u,g,m,p=!0){let d=this.map.get(c);if(d!==void 0)d.map.get(l)===void 0&&d.map.set(l,{order:u,flags:g,key:m});else{let f=new i(c,this.compId);f.map.set(l,{order:u,flags:g,key:m}),this.map.set(c,f)}p&&this.add(l,c,u,g,m,!1)}get(c,l){return o(this.map,this.compId,c,l)}}A.Entry=a})(Zy||={});var yg;(a=>{a.Descriptor={name:"struct_conn",cifExport:{prefix:"",categories:[{name:"struct_conn",instance(A){let s=a.Provider.get(A.firstModel);if(!s||s.entries.length===0)return eo.Category.Empty;let c=A.structures[0],l=[];for(let u of s.entries)n(c,u.partnerA.atomIndex)&&n(c,u.partnerB.atomIndex)&&(l[l.length]=u.rowIndex);return eo.Category.ofTable(s.data,l)}}]}},a.Provider=Ws.create(a.Descriptor);function r(A){let s=a.Provider.get(A);return!!s&&s.entries.length/A.atomicConformation.atomId.rowCount>.95}a.isExhaustive=r;function n({units:A},s){for(let c=0,l=A.length;c<l;c++)if(je.indexOf(A[c].elements,s)>=0)return!0;return!1}function o(A){let s=new Map;for(let c of A){let{partnerA:{atomIndex:l},partnerB:{atomIndex:u}}=c;s.has(l)?s.get(l).push(c):s.set(l,[c]),s.has(u)?s.get(u).push(c):s.set(u,[c])}return s}a.getAtomIndexFromEntries=o;function i(A,s){let{conn_type_id:c,pdbx_dist_value:l,pdbx_value_order:u}=A,g={label_asym_id:A.ptnr1_label_asym_id,label_seq_id:A.ptnr1_label_seq_id,auth_seq_id:A.ptnr1_auth_seq_id,label_atom_id:A.ptnr1_label_atom_id,label_alt_id:A.pdbx_ptnr1_label_alt_id,ins_code:A.pdbx_ptnr1_PDB_ins_code,symmetry:A.ptnr1_symmetry},m={label_asym_id:A.ptnr2_label_asym_id,label_seq_id:A.ptnr2_label_seq_id,auth_seq_id:A.ptnr2_auth_seq_id,label_atom_id:A.ptnr2_label_atom_id,label_alt_id:A.pdbx_ptnr2_label_alt_id,ins_code:A.pdbx_ptnr2_PDB_ins_code,symmetry:A.ptnr2_symmetry},p=Array.from(s.entities.data.id.toArray()),d=(I,C)=>{if(C.label_asym_id.valueKind(I)!==K.ValueKinds.Present)return;let y=C.label_asym_id.value(I),Q=C.label_atom_id.value(I);if(!Q)return;let E=C.auth_seq_id.valueKind(I)===K.ValueKind.Present?C.auth_seq_id.value(I):C.label_seq_id.value(I),b=C.ins_code.value(I),x=C.label_alt_id.value(I);for(let S of p){let w=s.atomicHierarchy.index.findResidue(S,y,E,b);if(w<0)continue;let R=s.atomicHierarchy.index.findAtomOnResidue(w,Q,x);if(!(R<0))return{residueIndex:w,atomIndex:R,symmetry:C.symmetry.value(I)}}},f=[];for(let I=0;I<A._rowCount;I++){let C=d(I,g),y=d(I,m);if(C===void 0||y===void 0)continue;let Q=c.value(I),E=u.value(I)||"",b=It.Flag.None,x=1;switch(E){case"sing":x=1;break;case"doub":x=2;break;case"trip":x=3;break;case"quad":x=4;break;default:x=UG(A.ptnr1_label_comp_id.value(I),A.ptnr1_label_atom_id.value(I),A.ptnr2_label_comp_id.value(I),A.ptnr2_label_atom_id.value(I))}switch(Q){case"covale":b=It.Flag.Covalent;break;case"disulf":b=It.Flag.Covalent|It.Flag.Disulfide;break;case"hydrog":b=It.Flag.HydrogenBond;break;case"metalc":b=It.Flag.MetallicCoordination;break}f.push({rowIndex:I,flags:b,order:x,distance:l.value(I),partnerA:C,partnerB:y})}return f}a.getEntriesFromStructConn=i})(yg||={});var b8e=B.distance,x8e=6,S8e=5.5,D8e=3.9;function yK(e,t,r,n,o,i,a){let A=new fa.EdgeBuilder(i,e,t),s=new Uint16Array(A.slotCount),c=new Int8Array(A.slotCount),l=new Uint32Array(A.slotCount);for(let u=0,g=A.edgeCount;u<g;u++)A.addNextEdge(),A.assignProperty(s,n[u]),A.assignProperty(c,r[u]),A.assignProperty(l,o[u]);return A.createGraph({flags:s,order:c,key:l},a)}var Uge=B(),Lge=B();function v8e(e,t,r){return e.conformation.position(t,Uge),e.conformation.position(r,Lge),b8e(Uge,Lge)}var F8e=new Set;function w8e(e){let t=Hi.Provider.get(e.model),{elements:r}=e,{type_symbol:n}=e.model.atomicHierarchy.atoms,o=e.elements.length,{maxDistance:i}=t,{offset:a,b:A,edgeProps:{order:s,distance:c,flag:l,key:u,operatorA:g,operatorB:m}}=t.bonds,{atomSourceIndex:p}=e.model.atomicHierarchy,{invertedIndex:d}=_t.getInvertedAtomSourceIndex(e.model),f=[],I=[],C=[],y=[],Q=[],E=e.conformation.operator.key;for(let b=0;b<o;b++){let x=r[b],S=im(n.value(x)),w=tp(S),R=p.value(x);for(let T=a[R],L=a[R+1];T<L;++T){let F=d[A[T]];if(x>=F)continue;let v=je.indexOf(e.elements,F);if(v<0)continue;let U=g[T],G=m[T];if(U>=0&&U!==E||G>=0&&G!==E)continue;let N=im(n.value(F)),k=c[T],J=v8e(e,x,F),H=!1;if(k>=0)H=So(J,k,.3);else if(i>=0)H=J<i;else{let z=$S(S,N,tI(S),tI(N));H=J<z,w&&tp(N)&&(H=!1)}H&&(f[f.length]=b,I[I.length]=v,y[y.length]=s[T],C[C.length]=l[T],Q[Q.length]=u[T])}}return yK(f,I,y,C,Q,o,{canRemap:!1,cacheable:t.cacheable})}function R8e(e,t){let r=_t.isCoarseGrained(e.model),n=r?x8e:t.maxRadius,{x:o,y:i,z:a}=e.model.atomicConformation,A=e.elements.length,{elements:s,residueIndex:c,chainIndex:l}=e,{type_symbol:u,label_atom_id:g,label_alt_id:m,label_comp_id:p}=e.model.atomicHierarchy.atoms,{label_seq_id:d}=e.model.atomicHierarchy.residues,{traceElementIndex:f}=e.model.atomicHierarchy.derived.residue,{index:I}=e.model.atomicHierarchy,{byEntityKey:C}=e.model.sequence,y=e.lookup3d,Q=yg.Provider.get(e.model),E=Zy.Provider.get(e.model),b=yg.isExhaustive(e.model),x=[],S=[],w=[],R=[],T=[],L=-1,F,v=!0,U=!0,G=!0,N=F8e,k=!!Q?.residueCantorPairs.size;for(let J=0;J<A;J++){let H=s[J],z=u.value(H);v&&z!=="H"&&z!=="O"&&(v=!1);let _=t.forceCompute?void 0:Q&&Q.byAtomIndex.get(H),M=!1;if(_)for(let ye of _){let{partnerA:Be,partnerB:De}=ye;if(Be.symmetry!==De.symmetry)continue;let Te=Be.atomIndex===H?De:Be,be=je.indexOf(e.elements,Te.atomIndex);be<0||s[be]<H||(x[x.length]=J,S[S.length]=be,w[w.length]=ye.flags,R[R.length]=ye.order,T[T.length]=ye.rowIndex,M||N.clear(),M=!0,N.add(be))}if(b)continue;let q=c[H],ne=d.value(q),oe=p.value(H);if(!t.forceCompute&&q!==L)if(E&&E.entries.has(oe)){let ye=C[I.getEntityFromChain(l[H])];ye&&ye.sequence.microHet.has(ne)?F=void 0:F=E.entries.get(oe)}else F=void 0;L=q;let ae=im(z),me=tp(ae),Se=g.value(H),ee=F?F.get(Se,me):void 0,{indices:O,count:X,squaredDistances:Ce}=y.find(o[H],i[H],a[H],n),Ne=tI(ae),$=m.value(H),pe=Wy.has(ae);for(let ye=0;ye<X;ye++){let Be=O[ye];if(M&&N.has(Be))continue;let De=s[Be];if(De<=H)continue;let Te=m.value(De);if($&&Te&&$!==Te)continue;if(k){let le=Fu(c[H],c[De]);if(Q.residueCantorPairs.has(le))continue}let be=im(u.value(De)),Fe=tp(be);if(me&&Fe)continue;let Ae=(pe||Wy.has(be))&&!(me||Fe),fe=c[De];if(q===fe&&ee){let le=ee.get(g.value(De),Fe);if(le){x[x.length]=J,S[S.length]=Be,R[R.length]=le.order;let Oe=le.flags;Ae&&(Oe|It.Flag.Covalent&&(Oe^=It.Flag.Covalent),Oe|=It.Flag.MetallicCoordination),w[w.length]=Oe,T[T.length]=le.key}continue}let Qe=Math.sqrt(Ce[ye]);if(Qe===0)continue;let Ie=!1;if(r)q===fe?Ie=Qe<=S8e:Ie=Qe<=D8e&&f[q]===H&&f[fe]===De;else{let le=$S(ae,be,Ne,tI(be));Ie=Qe<=le}if(Ie){x[x.length]=J,S[S.length]=Be,R[R.length]=pge(oe,Se,g.value(De)),w[w.length]=(Ae?It.Flag.MetallicCoordination:It.Flag.Covalent)|It.Flag.Computed,T[T.length]=-1;let le=d.value(fe);ne===le&&(U=!1),Math.abs(ne-le)>1&&(G=!1)}}}return yK(x,S,R,w,T,A,{canRemap:v||U&&G})}function U8e(e){return e.conformation.operator.key===-1?!1:!!Hi.Provider.get(e.model)?.hasOperators}function L8e(e){let t=Hi.Provider.get(e.model),r=t.bySameOperator.get(e.conformation.operator.key);if(!r)return d2.Empty;let{a:n,b:o,edgeProps:{key:i,flag:a,order:A}}=t.bonds,{invertedIndex:s}=_t.getInvertedAtomSourceIndex(e.model),{elements:c}=e,l=[],u=[],g=[],m=[],p=[];for(let d=0,f=r.length;d<f;++d){let I=r[d];if(n[I]>=o[I])continue;let C=s[n[I]],y=je.indexOf(c,C);if(y<0)continue;let Q=s[o[I]],E=je.indexOf(c,Q);E<0||(l[l.length]=y,u[u.length]=E,g[g.length]=a[I],m[m.length]=A[I],p[p.length]=i[I])}return yK(l,u,m,g,p,c.length,{canRemap:!1,cacheable:t.cacheable})}function Tge(e,t){let r={...RG,...t};return r.noCompute?d2.Empty:e.elements.length<=1?d2.Empty:!r.forceCompute&&Hi.Provider.get(e.model)?U8e(e)?L8e(e):w8e(e):R8e(e,r)}var T8e=B.distance,P8e=B.set,G8e=B.squaredDistance,N8e=B.transformMat4,Pge=B(),Gge=B();function Nge(e,t,r,n){return e.conformation.position(t,Pge),r.conformation.position(n,Gge),T8e(Pge,Gge)}var M8e=Y(),o0=B();function k8e(e,t,r,n){let{maxRadius:o}=r,{elements:i,residueIndex:a}=e,{x:A,y:s,z:c}=e.model.atomicConformation,{elements:l,residueIndex:u}=t,g=e.elements.length,{type_symbol:m,label_alt_id:p,label_atom_id:d,label_comp_id:f}=e.model.atomicHierarchy.atoms,{type_symbol:I,label_alt_id:C,label_atom_id:y,label_comp_id:Q}=t.model.atomicHierarchy.atoms,{auth_seq_id:E}=e.model.atomicHierarchy.residues,{auth_seq_id:b}=t.model.atomicHierarchy.residues,{occupancy:x}=e.model.atomicConformation,{occupancy:S}=t.model.atomicConformation,w=x.isDefined&&S.isDefined,R=e.model===t.model&&yg.Provider.get(e.model),T=!r.forceCompute&&e.model===t.model&&Hi.Provider.get(e.model),{atomSourceIndex:L}=e.model.atomicHierarchy,{invertedIndex:F}=T?_t.getInvertedAtomSourceIndex(t.model):{invertedIndex:void 0},v=e.model===t.model&&yg.isExhaustive(e.model),U=Y.mul(M8e,t.conformation.operator.inverse,e.conformation.operator.matrix),G=!Y.isIdentity(U),{center:N,radius:k}=t.boundary.sphere,J=(k+o)*(k+o);n.startUnitPair(e.id,t.id);let H=e.conformation.operator.key,z=t.conformation.operator.key;for(let _=0;_<g;_++){let M=i[_];if(P8e(o0,A[M],s[M],c[M]),G&&N8e(o0,o0,U),G8e(o0,N)>J)continue;if(!r.forceCompute&&T){let{maxDistance:ye}=T,{offset:Be,b:De,edgeProps:{order:Te,distance:be,flag:Fe,key:Ae,operatorA:fe,operatorB:Qe}}=T.bonds,Ie=L.value(M),le=im(m.value(M));for(let Oe=Be[Ie],tt=Be[Ie+1];Oe<tt;++Oe){let it=F[De[Oe]],Rt=je.indexOf(t.elements,it);if(Rt<0)continue;let Mt=fe[Oe],Bt=Qe[Oe];if(Mt>=0&&Bt>=0&&(Mt===Bt||Mt!==H||Bt!==z))continue;let Zt=im(m.value(it)),Nr=be[Oe],un=Nge(e,M,t,it),xn=!1;if(Nr>=0)xn=So(un,Nr,.3);else if(ye>=0)xn=un<ye;else{let On=$S(le,Zt,tI(le),tI(Zt));xn=un<On,tp(le)&&tp(Zt)&&(xn=!1)}xn&&n.add(_,Rt,{order:Te[Oe],flag:Fe[Oe],key:Ae[Oe]})}continue}let q=r.forceCompute?void 0:R&&R.byAtomIndex.get(M);if(q&&q.length){let ye=!1;for(let Be of q){let{partnerA:De,partnerB:Te}=Be,be=De.atomIndex===M?Te:De,Fe=je.indexOf(t.elements,be.atomIndex);Fe<0||Nge(e,M,t,be.atomIndex)>o||(n.add(_,Fe,{order:Be.order,flag:Be.flags,key:Be.rowIndex}),ye=!0)}if(ye)continue}if(v)continue;let ne=x.value(M),{lookup3d:oe}=t,{indices:ae,count:me,squaredDistances:Se}=oe.find(o0[0],o0[1],o0[2],o);if(me===0)continue;let ee=im(m.value(M)),O=tp(ee),X=tI(ee),Ce=p.value(M),Ne=Wy.has(ee),$=d.value(M),pe=f.value(a[M]);for(let ye=0;ye<me;ye++){let Be=ae[ye],De=l[Be],Te=C.value(De);if(Ce&&Te&&Ce!==Te||w&&S.value(De)<1&&ne<1&&E.value(a[M])===b.value(u[De]))continue;if(R&&e.model===t.model){let Ie=Fu(a[M],u[De]);if(R.residueCantorPairs.has(Ie))continue}let be=im(I.value(De)),Fe=tp(be);if(O&&Fe)continue;let Ae=(Ne||Wy.has(be))&&!(O||Fe),fe=Math.sqrt(Se[ye]);if(fe===0)continue;let Qe=$S(ee,be,X,tI(be));if(fe<=Qe){let Ie=y.value(De),le=Q.value(u[De]);n.add(_,Be,{order:UG(pe,le,$,Ie),flag:(Ae?It.Flag.MetallicCoordination:It.Flag.Covalent)|It.Flag.Computed,key:-1})}}}n.finishUnitPair()}function H8e(e){for(let t of e.models)if(!Hi.Provider.get(t)?.hasOperators)return!1;for(let t of e.units)if(t.conformation.operator.key===-1)return!1;return!0}function V8e(e,t){let r=new Map;for(let n of e.units){let{key:o}=n.conformation.operator;r.has(o)?r.get(o).add(n):r.set(o,new Set([n]))}for(let n of e.models){let o=Hi.Provider.get(n),{a:i,b:a}=o.bonds,{order:A,flag:s,key:c,operatorA:l,operatorB:u}=o.bonds.edgeProps,{invertedIndex:g}=_t.getInvertedAtomSourceIndex(n),m=new Map;for(let f of e.units)if(f.model===n)for(let I=0,C=f.elements.length;I<C;++I){let y=f.elements[I];m.has(y)?m.get(y).add(f):m.set(y,new Set([f]))}let p=new Map;for(let f=0,I=l.length;f<I;++f){let C,y;if(l[f]===u[f]?(C=m.get(g[i[f]]),y=m.get(g[a[f]])):(C=r.get(l[f]),y=r.get(u[f])),!(!C||!y)){for(let Q of C)if(l[f]===Q.conformation.operator.key)for(let E of y){if(u[f]!==E.conformation.operator.key||Q===E||!ge.isAtomic(Q)||!ge.isAtomic(E)||Q.id>E.id)continue;let b=ko(Q.id,E.id);p.has(b)?p.get(b).add(f):p.set(b,new Set([f]))}}}let d=[-1,-1];p.forEach((f,I)=>{let[C,y]=YS(d,I),Q=e.unitMap.get(C),E=e.unitMap.get(y);t.startUnitPair(C,y),f.forEach(b=>{let x=g[i[b]],S=je.indexOf(Q.elements,x);if(S<0)return;let w=g[a[b]],R=je.indexOf(E.elements,w);R<0||t.add(S,R,{order:A[b],flag:s[b],key:c[b]})}),t.finishUnitPair()})}}var _8e={...RG,ignoreWater:!0,ignoreIon:!0};function Y8e(e,t){let r=new Pu.Builder,n=e.models.some(i=>Hi.Provider.get(i)),o=e.models.some(i=>yg.isExhaustive(i));return t.noCompute||e.isCoarseGrained&&!n&&!o?new eI(r.getMap()):!t.forceCompute&&H8e(e)?(V8e(e,r),new eI(r.getMap())):(Ye.eachUnitPair(e,(i,a)=>{k8e(i,a,t,r)},{maxRadius:t.maxRadius,validUnit:i=>t.validUnit(i),validUnitPair:(i,a)=>t.validUnitPair(e,i,a)}),new eI(r.getMap()))}function Mge(e,t){let r={..._8e,...t};return Y8e(e,{...r,validUnit:t&&t.validUnit||(n=>ge.isAtomic(n)),validUnitPair:t&&t.validUnitPair||((n,o,i)=>{if(!Ye.validUnitPair(n,o,i))return!1;let A=o.model.atomicHierarchy.derived.residue.moleculeType,s=i.model.atomicHierarchy.derived.residue.moleculeType,c=(!ge.isAtomic(o)||A[o.residueIndex[o.elements[0]]]!==2)&&(!ge.isAtomic(i)||s[i.residueIndex[i.elements[0]]]!==2),l=!ge.isAtomic(o)||A[o.residueIndex[o.elements[0]]]!==3,u=!ge.isAtomic(i)||s[i.residueIndex[i.elements[0]]]!==3,g=l&&u;return(c||!r.ignoreWater)&&(g||!r.ignoreIon)?!0:O8e(o,i)})})}function O8e(e,t){if(e.model!==t.model||!ge.isAtomic(e)||!ge.isAtomic(t))return!1;let r=yg.Provider.get(e.model);if(!r)return!1;let n=e.elements.length<t.elements.length?e:t,o=e.elements.length>=t.elements.length?e:t,{elements:i}=n,{elements:a}=o,{indexOf:A}=je;for(let s=0,c=i.length;s<c;s++){let l=i[s],u=r.byAtomIndex.get(l);if(u?.length)for(let g of u){let m=g.partnerA.atomIndex===l?g.partnerB.atomIndex:g.partnerA.atomIndex;if(A(a,m)>=0)return!0}}return!1}var Et;(d=>{function e(f,I,C,y,Q,E){return{kind:"bond-location",aStructure:f,aUnit:I,aIndex:C,bStructure:y,bUnit:Q,bIndex:E}}d.Location=e;function t(f){return!!f&&f.kind==="bond-location"}d.isLocation=t;function r(f,I){return f.aStructure.label===I.aStructure.label&&f.bStructure.label===I.bStructure.label&&f.aIndex===I.aIndex&&f.bIndex===I.bIndex&&f.aUnit.id===I.aUnit.id&&f.bUnit.id===I.bUnit.id}d.areLocationsEqual=r;function n(f,I){return{kind:"bond-loci",structure:f,bonds:I}}d.Loci=n;function o(f){return!!f&&f.kind==="bond-loci"}d.isLoci=o;function i(f,I){if(f.structure!==I.structure||f.bonds.length!==I.bonds.length)return!1;for(let C=0,y=f.bonds.length;C<y;++C)if(!r(f.bonds[C],I.bonds[C]))return!1;return!0}d.areLociEqual=i;function a(f){return f.bonds.length===0}d.isLociEmpty=a;function A(f,I){if(I===f.structure)return f;let C=[];return f.bonds.forEach(y=>{let Q=I.unitMap.get(y.aUnit.id);if(!Q)return;let E=I.unitMap.get(y.bUnit.id);if(!E)return;let b=y.aUnit.elements[y.aIndex],x=je.indexOf(Q.elements,b);if(x===-1)return;let S=y.bUnit.elements[y.bIndex],w=je.indexOf(E.elements,S);w!==-1&&C.push(e(f.structure,Q,x,f.structure,E,w))}),n(I,C)}d.remapLoci=A;function s(f){let I=[],C=new Map;for(let y of f.bonds){let{aIndex:Q,aUnit:E,bIndex:b,bUnit:x}=y;E===x?C.has(E.id)?C.get(E.id).push(Q,b):C.set(E.id,[Q,b]):(C.has(E.id)?C.get(E.id).push(Q):C.set(E.id,[Q]),C.has(x.id)?C.get(x.id).push(b):C.set(x.id,[b]))}return C.forEach((y,Q)=>{I.push({unit:f.structure.unitMap.get(Q),indices:je.deduplicate(je.ofUnsortedArray(y))})}),W.Loci(f.structure,I)}d.toStructureElementLoci=s;function c(f){let{aUnit:I,aIndex:C}=f.bonds[0];return W.Loci(f.structure,[{unit:I,indices:Ee.ofSingleton(C)}])}d.toFirstStructureElementLoci=c;function l(f,I){if(I.aUnit===I.bUnit){let C=I.aUnit.bonds,y=C.getEdgeIndex(I.aIndex,I.bIndex);return y<0?It.create(It.Flag.None):It.create(C.edgeProps.flags[y])}else{let C=f.interUnitBonds.getBondFromLocation(I);return C?It.create(C.props.flag):It.create(It.Flag.None)}}d.getType=l;function u(f,I){if(I.aUnit===I.bUnit){let C=I.aUnit.bonds,y=C.getEdgeIndex(I.aIndex,I.bIndex);return y<0?0:C.edgeProps.order[y]}else{let C=f.interUnitBonds.getBondFromLocation(I);return C?C.props.order:0}}d.getOrder=u;function g(f){let I=0;for(let C of f.unitSymmetryGroups){let y=C.units[0];ge.isAtomic(y)&&(I+=y.bonds.edgeCount*C.units.length)}return I}d.getIntraUnitBondCount=g;class m{constructor(){this.current={};this.hasNext=!1}move(){return this.advance(),this.current}setElement(I,C,y){this.structure=I,this.unit=C,this.index=y,this.interBondIndices=I.interUnitBonds.getEdgeIndices(y,C.id),this.interBondCount=this.interBondIndices.length,this.interBondIndex=0,this.intraBondEnd=C.bonds.offset[y+1],this.intraBondIndex=C.bonds.offset[y],this.hasNext=this.interBondIndex<this.interBondCount||this.intraBondIndex<this.intraBondEnd}advance(){if(this.intraBondIndex<this.intraBondEnd)this.current.otherUnit=this.unit,this.current.otherIndex=this.unit.bonds.b[this.intraBondIndex],this.current.type=this.unit.bonds.edgeProps.flags[this.intraBondIndex],this.current.order=this.unit.bonds.edgeProps.order[this.intraBondIndex],this.intraBondIndex+=1;else if(this.interBondIndex<this.interBondCount){let I=this.structure.interUnitBonds.edges[this.interBondIndices[this.interBondIndex]];this.current.otherUnit=this.structure.unitMap.get(I.unitA!==this.unit.id?I.unitA:I.unitB),this.current.otherIndex=I.indexA!==this.index?I.indexA:I.indexB,this.current.type=I.props.flag,this.current.order=I.props.order,this.interBondIndex+=1}else{this.hasNext=!1;return}this.hasNext=this.interBondIndex<this.interBondCount||this.intraBondIndex<this.intraBondEnd}}d.ElementBondIterator=m;function p(f,I){return gc.fromPairProvider(f.bonds.length,(C,y,Q)=>{let{aUnit:E,aIndex:b,bUnit:x,bIndex:S}=f.bonds[C];E.conformation.position(E.elements[b],y),x.conformation.position(x.elements[S],Q)},I)}d.getBoundingSphere=p})(Et||={});function Jge(e){let t=z8e(e),r=J8e(e,t),n=sr.transientSegments(e.model.atomicHierarchy.residueAtomSegments,e.elements);for(;n.hasNext;){let o=n.move();K8e(r,o.start,o.end)}return r.rings}function J8e(e,t){return{startVertex:0,endVertex:0,count:0,isRingAtom:new Int32Array(t),marked:new Int32Array(t),queue:new Int32Array(t),pred:new Int32Array(t),depth:new Int32Array(t),left:new Int32Array(5),right:new Int32Array(5),color:new Int32Array(t),currentColor:0,currentAltLoc:"",hasAltLoc:!1,rings:[],currentRings:[],unit:e,bonds:e.bonds,altLoc:e.model.atomicHierarchy.atoms.label_alt_id}}function kge(e){e.count=e.endVertex-e.startVertex;let{isRingAtom:t,pred:r,color:n,depth:o,marked:i}=e;for(let a=0;a<e.count;a++)t[a]=0,r[a]=-1,i[a]=-1,n[a]=0,o[a]=0;e.currentColor=0,e.currentAltLoc="",e.hasAltLoc=!1}function Hge(e){let{depth:t}=e;for(let r=0;r<e.count;r++)t[r]=e.count+1}function z8e(e){let t=sr.transientSegments(e.model.atomicHierarchy.residueAtomSegments,e.elements),r=0;for(;t.hasNext;){let n=t.move();r=Math.max(r,n.end-n.start)}return r}function Vge(e,t){let r=e.bonds.offset,n=e.startVertex+t,o=r[n],a=r[n+1]-o;return!(a<=1||e.isRingAtom[t]&&a===2)}function K8e(e,t,r){if(e.startVertex=t,e.endVertex=r,e.endVertex-e.startVertex<3)return;e.currentRings=[];let{elements:n}=e.unit,o=[];for(let a=e.startVertex;a<e.endVertex;a++){let A=e.altLoc.value(n[a]);Po(o,A)}vu(o,"");let i=1;if(o.length===0){kge(e);for(let a=0;a<e.count;a++)Vge(e,a)&&(Hge(e),i=_ge(e,a,i))}else for(let a=0;a<o.length;a++){kge(e),e.hasAltLoc=!0,e.currentAltLoc=o[a];for(let A=0;A<e.count;A++){if(!Vge(e,A))continue;let s=e.altLoc.value(n[e.startVertex+A]);s&&s!==e.currentAltLoc||(Hge(e),i=_ge(e,A,i))}}for(let a=0,A=e.currentRings.length;a<A;a++)e.rings.push(e.currentRings[a])}function j8e(e,t,r,n){if(r<t)return!1;let{pred:o,color:i,left:a,right:A}=e,s=++e.currentColor,c=t;for(let I=0;I<5&&(i[c]=s,c=o[c],!(c<0));I++);let l=0,u=0,g=!1,m=0;c=r;for(let I=0;I<5;I++){if(i[c]===s){m=c,g=!0;break}if(A[u++]=c,c=o[c],c<0)break}if(!g)return!1;c=t;for(let I=0;I<5&&(a[l++]=c,!(m===c||(c=o[c],c<0)));I++);let p=l+u;if(p<3)return!1;let d=new Int32Array(p),f=0;for(let I=0;I<l;I++)d[f++]=e.startVertex+a[I],n[a[I]]=1;for(let I=u-1;I>=0;I--)d[f++]=e.startVertex+A[I],n[A[I]]=1;js(d);for(let I=0,C=e.currentRings.length;I<C;I++){let y=e.currentRings[I];if(d.length===y.length){if(je.areEqual(d,y))return!1}else if(d.length>y.length&&je.isSubset(d,y))return!1}return e.currentRings.push(je.ofSortedArray(d)),!0}function _ge(e,t,r){let{bonds:n,startVertex:o,endVertex:i,isRingAtom:a,marked:A,queue:s,pred:c,depth:l}=e,{elements:u}=e.unit,{b:g,edgeProps:{flags:m},offset:p}=n;A[t]=r,l[t]=0,s[0]=t;let d=0,f=1;for(;d<f;){let I=s[d++],C=l[I],y=o+I,Q=p[y],E=p[y+1];for(let b=Q;b<E;b++){let x=g[b];if(x<o||x>=i||!It.isCovalent(m[b]))continue;if(e.hasAltLoc){let R=e.altLoc.value(u[x]);if(R&&e.currentAltLoc!==R)continue}let S=x-o;if(A[S]===r){if(c[S]!==I&&c[I]!==S&&j8e(e,I,S,a))return r+1;continue}let w=Math.min(l[S],C+1);w>5||(l[S]=w,A[S]=r,s[f++]=S,c[S]=I)}}return r+1}function zge(e){let t=e.length,r=new Array(t);for(let a=0;a<t;a++)r[a]=e[t-a-1];let n=Yge(e),o=Yge(r),i=!1;for(let a=0;a<t;a++){let A=e[(a+n)%t],s=r[(a+o)%t];if(A!==s){i=A<s;break}}return i?Oge(e,n):Oge(r,o)}function Yge(e){let t=e.length,r=new Int32Array(t*2);for(let a=0;a<r.length;a++)r[a]=-1;let n="",o="",i=0;for(let a=1;a<r.length;a++){let A=r[a-i-1];for(;A!==-1&&(n=e[a%t],o=e[(i+A+1)%t],n!==o);)n<o&&(i=a-A-1),A=r[A];A===-1?(n=e[a%t],o=e[(i+A+1)%t],n!==o?(n<o&&(i=a),r[a-i]=-1):r[a-i]=A+1):r[a-i]=A+1}return i}function Oge(e,t){let r=e.length,n=[],o;for(o=0;o<r-1;o++)n.push(e[(o+t)%r]),n.push("-");return n.push(e[(o+t)%r]),n.join("")}function Kge(e,t){let r=new Map,n=new Map;for(let s=0,c=e.length;s<c;s++){let l=e[s];for(let u=0,g=l.length;u<g;u++){let m=l[u];r.has(m)?r.get(m).push(s):r.set(m,[s])}}for(let s=0,c=t.length;s<c;s++){let l=t[s],u=e[l];for(let g=0,m=u.length;g<m;g++){let p=u[g];n.has(p)?n.get(p).push(l):n.set(p,[l])}}let o=new fa.UniqueEdgeBuilder(e.length);for(let s=0,c=e.length;s<c;s++){let l=e[s];for(let u=0,g=l.length;u<g;u++){let m=l[u],p=r.get(m);if(p.length!==1)for(let d=0,f=p.length;d<f;d++){let I=p[d];s>=I||o.addEdge(s,I)}}}let i=fa.connectedComponents(o.getGraph()),a=i.componentIndex,A=[];for(let s=0;s<i.componentCount;s++)A[s]=[];for(let s=0,c=e.length;s<c;s++)A[a[s]].push(s);return{elementRingIndices:r,elementAromaticRingIndices:n,ringComponentIndex:a,ringComponents:A}}var jge={H:"Hydrogen",HE:"Helium",LI:"Lithium",BE:"Beryllium",B:"Boron",C:"Carbon",N:"Nitrogen",O:"Oxygen",F:"Fluorine",NE:"Neon",NA:"Sodium",MG:"Magnesium",AL:"Aluminum",SI:"Silicon",P:"Phosphorus",S:"Sulfur",CL:"Chlorine",AR:"Argon",K:"Potassium",CA:"Calcium",SC:"Scandium",TI:"Titanium",V:"Vanadium",CR:"Chromium",MN:"Manganese",FE:"Iron",CO:"Cobalt",NI:"Nickel",CU:"Copper",ZN:"Zinc",GA:"Gallium",GE:"Germanium",AS:"Arsenic",SE:"Selenium",BR:"Bromine",KR:"Krypton",RB:"Rubidium",SR:"Strontium",Y:"Yttrium",ZR:"Zirconium",NB:"Niobium",MO:"Molybdenum",TC:"Technetium",RU:"Ruthenium",RH:"Rhodium",PD:"Palladium",AG:"Silver",CD:"Cadmium",IN:"Indium",SN:"Tin",SB:"Antimony",TE:"Tellurium",I:"Iodine",XE:"Xenon",CS:"Cesium",BA:"Barium",LA:"Lanthanum",CE:"Cerium",PR:"Praseodymium",ND:"Neodymium",PM:"Promethium",SM:"Samarium",EU:"Europium",GD:"Gadolinium",TB:"Terbium",DY:"Dysprosium",HO:"Holmium",ER:"Erbium",TM:"Thulium",YB:"Ytterbium",LU:"Lutetium",HF:"Hafnium",TA:"Tantalum",W:"Wolfram",RE:"Rhenium",OS:"Osmium",IR:"Iridium",PT:"Platinum",AU:"Gold",HG:"Mercury",TL:"Thallium",PB:"Lead",BI:"Bismuth",PO:"Polonium",AT:"Astatine",RN:"Radon",FR:"Francium",RA:"Radium",AC:"Actinium",TH:"Thorium",PA:"Protactinium",U:"Uranium",NP:"Neptunium",PU:"Plutonium",AM:"Americium",CM:"Curium",BK:"Berkelium",CF:"Californium",ES:"Einsteinium",FM:"Fermium",MD:"Mendelevium",NO:"Nobelium",LR:"Lawrencium",RF:"Rutherfordium",DB:"Dubnium",SG:"Seaborgium",BH:"Bohrium",HS:"Hassium",MT:"Meitnerium",DS:"Darmstadtium",RG:"Roentgenium",CN:"Copernicium",NH:"Nihonium",FL:"Flerovium",MC:"Moscovium",LV:"Livermorium",TS:"Tennessine",OG:"Oganesson"},W8e=new Set(["LI","NA","K","RB","CS","FR"]);function X8e(e){return W8e.has(e)}var Z8e=new Set(["BE","MG","CA","SR","BA","RA"]);function q8e(e){return Z8e.has(e)}var $8e=new Set(["ZN","GA","CD","IN","SN","HG","TI","PB","BI","PO","CN"]);function e6e(e){return $8e.has(e)}var t6e=new Set(["F","CL","BR","I","AT"]);function QK(e){return t6e.has(e)}function EK(e){let t=Gy(e);return t>=21&&t<=29||t>=39&&t<=47||t>=72&&t<=79||t>=104&&t<=108}function r6e(e){let t=Gy(e);return t>=57&&t<=71}function n6e(e){let t=Gy(e);return t>=89&&t<=103}function h2(e){return X8e(e)||q8e(e)||r6e(e)||n6e(e)||EK(e)||e6e(e)}function o6e(e,t){let r=e.coarseElements.entityKey[t],n=e.model.sequence.byEntityKey[r].sequence,o=e.coarseElements.seq_id_begin.value(t);return n.compId.value(o-1)}function qy(e,t){switch(e.kind){case ge.Kind.Atomic:return e.model.atomicHierarchy.derived.residue.moleculeType[e.residueIndex[t]];case ge.Kind.Spheres:case ge.Kind.Gaussians:let r=o6e(e,t),n=e.model.properties.chemicalComponentMap.get(r);if(n)return Yc(n.type,r)}return 0}var i6e=new Set;function oI(e,t){let r=_z[e];if(r!==void 0){let n=r[t];if(n!==void 0)return n}return i6e}var Wge=B.zero();function JG(e,t){let r=e.conformation,n=new Float32Array(t.length*3),{elements:o}=e;for(let i=0,a=t.length;i<a;++i)r.position(o[t[i]],Wge),B.toArray(Wge,n,i*3);return n}var oh=class{constructor(t,r){this.unit=r;this.all=t}get index(){return this._index?this._index:(this._index=Kge(this.all,this.aromaticRings),this._index)}get byFingerprint(){return this._byFingerprint?this._byFingerprint:(this._byFingerprint=a6e(this.unit,this.all),this._byFingerprint)}get elementRingIndices(){return this.index.elementRingIndices}get elementAromaticRingIndices(){return this.index.elementAromaticRingIndices}get ringComponentIndex(){return this.index.ringComponentIndex}get ringComponents(){return this.index.ringComponents}get aromaticRings(){return this._aromaticRings?this._aromaticRings:(this._aromaticRings=c6e(this.unit,this.all),this._aromaticRings)}},Am;(A=>{function e(s,c){let{elements:l}=s,{type_symbol:u}=s.model.atomicHierarchy.atoms,g=[];for(let m=0,p=c.length;m<p;m++)g[g.length]=u.value(l[c[m]]);return t(g)}A.fingerprint=e;function t(s){return zge(s)}A.elementFingerprint=t;let r=new Set(["B","C","N","O","SI","P","S","GE","AS","SN","SB","BI"]),n=new Set(["B","C","N","SI","P","S","GE","AS","SN","SB","BI"]),o=.05;function i(s,c){let{elements:l,bonds:{b:u,offset:g,edgeProps:{flags:m,order:p}}}=s,{type_symbol:d,label_comp_id:f}=s.model.atomicHierarchy.atoms;if(f.value(s.elements[c[0]])==="PRO")return!1;let I=0,C=!1;for(let Q=0,E=c.length;Q<E;++Q){let b=c[Q];!C&&r.has(d.value(l[b]))&&(C=!0);for(let x=g[b],S=g[b+1];x<S;++x)It.is(It.Flag.Aromatic,m[x])&&je.has(c,u[x])&&(I+=1)}for(let Q=0,E=c.length;Q<E;++Q){let b=c[Q],x=d.value(l[b]);if(!n.has(x))continue;let S=0,w=!1;for(let R=g[b],T=g[b+1];R<T;++R){S+=1;let L=m[R],F=p[R];(It.is(It.Flag.Aromatic,L)||F===2||F===3)&&(w=!0)}if(S>=4&&!w)return!1}if(I===2*c.length)return!0;if(!C||c.length<5||I>0)return!1;let y=ru.calculateMomentsAxes(JG(s,c));return B.magnitude(y.dirC)<o}A.isAromatic=i;function a(s,c){let{label_alt_id:l}=s.model.atomicHierarchy.atoms,{elements:u}=s;for(let g=0,m=c.length;g<m;++g){let p=u[c[g]],d=l.value(p);if(d)return d}return""}A.getAltId=a})(Am||={});(r=>{function e(n){if(ge.Traits.is(n.traits,ge.Trait.Water)||ge.Traits.is(n.traits,ge.Trait.CoarseGrained))return new r([],n);let o=Jge(n);return new r(o,n)}r.create=e;function t(n,o){let i=new Map;for(let a=0,A=o.length;a<A;a++){let s=o[a];s6e(n,s,i)}return i}r.byFingerprintAndResidue=t})(oh||={});function a6e(e,t){let r=new Map,n=0;for(let o=0,i=t.length;o<i;o++){let a=t[o],A=Am.fingerprint(e,a);r.has(A)?r.get(A).push(n):r.set(A,[n]),n++}return r}function A6e(e,t){let{elements:r}=e,n=e.model.atomicHierarchy.residueAtomSegments.index,o=n[r[t[0]]];for(let i=1,a=t.length;i<a;i++)if(o!==n[r[t[i]]])return-1;return o}function s6e(e,t,r){let n=e.byFingerprint.get(t);if(n)for(let o=0,i=n.length;o<i;o++){let a=n[o],A=A6e(e.unit,e.all[a]);A>=0&&(r.has(A)?r.get(A).push(a):r.set(A,[a]))}}function c6e(e,t){let r=[];for(let n=0,o=t.length;n<o;++n)Am.isAromatic(e,t[n])&&r.push(n);return r}var vo;(y=>{function e(Q){return je.ofSortedArray(Q)}y.ofSortedRanges=e;function t(Q){return Q[0]}y.start=t;function r(Q){return Q[Q.length-1]+1}y.end=r;function n(Q){return Q[0]}y.min=n;function o(Q){return Q[Q.length-1]}y.max=o;function i(Q){let E=0;for(let b=0,x=Q.length;b<x;b+=2)E+=Q[b+1]-Q[b]+1;return E}y.size=i;function a(Q){return Q.length/2}y.count=a;function A(Q,E){return Q[E*2]}y.startAt=A;function s(Q,E){return Q[E*2+1]+1}y.endAt=s;function c(Q,E){return Q[E*2]}y.minAt=c;function l(Q,E){return Q[E*2+1]}y.maxAt=l;function u(Q,E){if(Q.length!==E.length)return!1;for(let b=0,x=Q.length;b<x;++b)if(Q[b]!==E[b])return!1;return!0}y.areEqual=u;function g(Q,E){let b=0;for(let x=0,S=Q.length;x<S;x+=2)for(let w=Q[x],R=Q[x+1];w<=R;++w)E(w,b),++b}y.forEach=g;function m(Q,E){return d(Q,E)!==-1}y.has=m;function p(Q,E,b){return f(Q,E,b)!==-1}y.hasFrom=p;function d(Q,E){return f(Q,E,0)}y.firstIntersectionIndex=d;function f(Q,E,b){if(c(Q,b)>Ee.max(E)||o(Q)<Ee.min(E))return-1;for(let x=b,S=a(Q);x<S;++x){let w=Ue.ofRange(c(Q,x),l(Q,x));if(Ee.areIntersecting(w,E))return x}return-1}y.firstIntersectionIndexFrom=f;function I(Q,E){return new C(Q,E)}y.transientSegments=I;class C{constructor(E,b){this.ranges=E;this.set=b;this.value={index:0,start:0,end:0};this.curIndex=0;this.hasNext=!1;this.curIndex=d(E,b),this.hasNext=this.curIndex!==-1}updateValue(){this.value.index=this.curIndex,this.value.start=Ee.findPredecessorIndex(this.set,A(this.ranges,this.curIndex)),this.value.end=Ee.findPredecessorIndex(this.set,s(this.ranges,this.curIndex))}move(){return this.hasNext&&(this.updateValue(),this.curIndex=f(this.ranges,this.set,this.curIndex+1),this.hasNext=this.curIndex!==-1),this.value}}y.Iterator=C})(vo||={});function Xge(e){let t=[],{elements:r,model:n}=e,{residueAtomSegments:o}=e.model.atomicHierarchy,{traceElementIndex:i}=n.atomicHierarchy.derived.residue,a=vo.transientSegments(e.model.atomicRanges.polymerRanges,r),A=sr.transientSegments(o,r);for(;a.hasNext;){let s=a.move();for(A.setSegment(s);A.hasNext;){let c=A.move(),{start:l,end:u,index:g}=c;if(Ee.areIntersecting(Ue.ofRange(r[l],r[u-1]),r)){let m=i[g];t.push(m===-1?o.offsets[g]:m)}}}return je.ofSortedArray(t)}function Zge(e){let t=[],{elements:r,model:n}=e,{spheres:o,gaussians:i}=n.coarseHierarchy,a=ge.isSpheres(e)?o.polymerRanges:i.polymerRanges,A=vo.transientSegments(a,r);for(;A.hasNext;){let{start:s,end:c}=A.move();for(let l=s;l<c;++l)t.push(r[l])}return je.ofSortedArray(t)}function qge(e){let t=[],{elements:r,model:n,residueIndex:o}=e,{residueAtomSegments:i}=e.model.atomicHierarchy,{traceElementIndex:a}=n.atomicHierarchy.derived.residue,A=vo.transientSegments(e.model.atomicRanges.gapRanges,e.elements);for(;A.hasNext;){let s=A.move(),c=o[r[s.start]],l=o[r[s.end-1]],u=a[c],g=a[l];t.push(u===-1?i.offsets[c]:u),t.push(g===-1?i.offsets[l]:g)}return je.ofSortedArray(t)}function $ge(e){let t=[],{elements:r,model:n}=e,{spheres:o,gaussians:i}=n.coarseHierarchy,a=ge.isSpheres(e)?o.gapRanges:i.gapRanges,A=vo.transientSegments(a,r);for(;A.hasNext;){let{start:s,end:c}=A.move();t.push(r[s],r[c-1])}return je.ofSortedArray(t)}function eme(e){let t=[],{elements:r,model:n}=e,{chainAtomSegments:o,residueAtomSegments:i}=n.atomicHierarchy,{moleculeType:a,traceElementIndex:A}=n.atomicHierarchy.derived.residue,s=sr.transientSegments(o,r),c=sr.transientSegments(i,r);for(;s.hasNext;)for(c.setSegment(s.move());c.hasNext;){let{index:l}=c.move();if(qa(a[l])){let u=A[l];t.push(u===-1?i.offsets[l]:u)}}return je.ofSortedArray(t)}function tme(e){let t=[],{elements:r,model:n}=e,{chainAtomSegments:o,residueAtomSegments:i}=n.atomicHierarchy,{moleculeType:a,traceElementIndex:A}=n.atomicHierarchy.derived.residue,s=sr.transientSegments(o,r),c=sr.transientSegments(i,r);for(;s.hasNext;)for(c.setSegment(s.move());c.hasNext;){let{index:l}=c.move();if(EG(a[l])){let u=A[l];t.push(u===-1?i.offsets[l]:u)}}return je.ofSortedArray(t)}var rme=B();function l6e(e){let{elements:t,conformation:r}=e,n=new Float32Array(t.length*3);for(let o=0,i=t.length;o<i;o++)r.invariantPosition(t[o],rme),B.toArray(rme,n,o*3);return n}function bK(e){let t=l6e(e);return ru.ofPositions(t)}var xK=B.dot,zG=B.copy,u6e=B.scaleAndSub,g6e=B.scaleAndAdd,qi=class{constructor(t){this.minDist=[];this.maxDist=[];this.extrema=[];this.centroidHelper=new gc;this.dir=nme(t),this.dirLength=this.dir.length,this.reset()}computeExtrema(t,r){let n=xK(this.dir[t],r);n<this.minDist[t]&&(this.minDist[t]=n,zG(this.extrema[t*2],r)),n>this.maxDist[t]&&(this.maxDist[t]=n,zG(this.extrema[t*2+1],r))}computeSphereExtrema(t,r,n){let o=this.dir[t],i=xK(o,r);i-n<this.minDist[t]&&(this.minDist[t]=i-n,u6e(this.extrema[t*2],r,o,n)),i+n>this.maxDist[t]&&(this.maxDist[t]=i+n,g6e(this.extrema[t*2+1],r,o,n))}includeSphere(t){if(we.hasExtrema(t)&&t.extrema.length>1)for(let r of t.extrema)this.includePosition(r);else this.includePositionRadius(t.center,t.radius)}includePosition(t){for(let r=0;r<this.dirLength;++r)this.computeExtrema(r,t)}includePositionRadius(t,r){for(let n=0;n<this.dirLength;++n)this.computeSphereExtrema(n,t,r)}finishedIncludeStep(){this.dirLength<49&&this.refineExtrema();for(let t=0;t<this.extrema.length;t++)this.centroidHelper.includeStep(this.extrema[t]);this.centroidHelper.finishedIncludeStep()}refineExtrema(){let t=nme("98"),r=[],n=[],o=[];for(let i=0,a=t.length;i<a;++i){r[i]=1/0,n[i]=-1/0,o[i*2]=B(),o[i*2+1]=B();let A=t[i];for(let s=0,c=this.extrema.length;s<c;++s){let l=this.extrema[s],u=xK(A,l);u<r[i]&&(r[i]=u,zG(o[i*2],l)),u>n[i]&&(n[i]=u,zG(o[i*2+1],l))}}this.extrema=o}radiusSphere(t){if(we.hasExtrema(t)&&t.extrema.length>1)for(let r of t.extrema)this.radiusPosition(r);else this.radiusPositionRadius(t.center,t.radius)}radiusPosition(t){this.centroidHelper.radiusStep(t)}radiusPositionRadius(t,r){this.centroidHelper.radiusSphereStep(t,r)}getSphere(t){return we.setExtrema(this.centroidHelper.getSphere(t),this.extrema.slice())}getBox(t){return Ct.fromVec3Array(t||Ct(),this.extrema)}reset(){this.extrema.length=this.dirLength*2;for(let t=0;t<this.dirLength;++t)this.minDist[t]=1/0,this.maxDist[t]=-1/0,this.extrema[t*2]=B(),this.extrema[t*2+1]=B();this.centroidHelper.reset()}},nme=Tu(e=>{let t;switch(e){case"6":t=[...KG];break;case"14":t=[...KG,...SK];break;case"26":t=[...KG,...SK,...ome];break;case"98":t=[...KG,...SK,...ome,...m6e,...d6e,...p6e];break}return t.map(r=>{let n=B.create(r[0],r[1],r[2]);return B.normalize(n,n)})}),KG=[[1,0,0],[0,1,0],[0,0,1]],SK=[[1,1,1],[-1,1,1],[-1,-1,1],[1,-1,1]],ome=[[1,1,0],[1,-1,0],[1,0,1],[1,0,-1],[0,1,1],[0,1,-1]],m6e=[[0,1,2],[0,2,1],[1,0,2],[2,0,1],[1,2,0],[2,1,0],[0,1,-2],[0,2,-1],[1,0,-2],[2,0,-1],[1,-2,0],[2,-1,0]],d6e=[[1,1,2],[2,1,1],[1,2,1],[1,-1,2],[1,1,-2],[1,-1,-2],[2,-1,1],[2,1,-1],[2,-1,-1],[1,-2,1],[1,2,-1],[1,-2,-1]],p6e=[[2,2,1],[1,2,2],[2,1,2],[2,-2,1],[2,2,-1],[2,-2,-1],[1,-2,2],[1,2,-2],[1,-2,-2],[2,-1,2],[2,1,-2],[2,-1,-2]];var ime=B.set,f6e=new qi("14"),B6e=new qi("98");function I6e(e){return e>1e4?f6e:B6e}function WG(e){let t=Ct.computeBounding(e);return{box:t,sphere:we.fromBox3D(we(),t)}}var jG=B();function rd(e){let{x:t,y:r,z:n,radius:o,indices:i}=e,a=Ee.size(i);if(a>25e4)return WG(e);let A=I6e(a);A.reset();for(let c=0;c<a;c++){let l=Ee.getAt(i,c);ime(jG,t[l],r[l],n[l]),A.includePositionRadius(jG,o&&o[l]||0)}A.finishedIncludeStep();for(let c=0;c<a;c++){let l=Ee.getAt(i,c);ime(jG,t[l],r[l],n[l]),A.radiusPositionRadius(jG,o&&o[l]||0)}let s=A.getSphere();if(!o&&we.hasExtrema(s)&&a<=s.extrema.length){let c=[];for(let l=0;l<a;l++){let u=Ee.getAt(i,l);c.push(B.create(t[u],r[u],n[u]))}we.setExtrema(s,c)}return{box:A.getBox(),sphere:s}}var XG=class e{constructor(){this.data=new Map}get(t){let r=je.hashCode(t);if(this.data.has(r)){for(let[n,o]of this.data.get(r))if(je.areEqual(t,n))return o}}set(t,r){let n=je.hashCode(t);if(this.data.has(n)){let o=this.data.get(n);for(let i of o)if(je.areEqual(t,i[0])){i[1]=r;return}o.push([t,r])}else this.data.set(n,[[t,r]])}static get(t){return t._dynamicPropertyData.ElementSetIntraBondCache||(t._dynamicPropertyData.ElementSetIntraBondCache=new e),t._dynamicPropertyData.ElementSetIntraBondCache}};var nD=class{constructor(t,r,n){this.operatorsProvider=n;this.id=t,this.details=r}get operatorGroups(){return this._operators?this._operators:(this._operators=this.operatorsProvider(),this._operators)}};(t=>{function e(r,n,o){return new t(r,n,o)}t.create=e})(nD||={});var ah;(n=>{n.Default={assemblies:[],spacegroup:HA.ZeroP1,isNonStandardCrystalFrame:!1};function t(o,i){let a=i.toLocaleLowerCase(),A=Fo.Provider.get(o);return A?OS(A.assemblies,s=>s.id.toLowerCase()===a):void 0}n.findAssembly=t;function r(o){let{cell:i,name:a,num:A}=o.spacegroup,{size:s,anglesInRadians:c}=i,l=s[0].toFixed(2),u=s[1].toFixed(2),g=s[2].toFixed(2),m=yA(c[0]).toFixed(2),p=yA(c[1]).toFixed(2),d=yA(c[2]).toFixed(2),f=[];return f.push(`Unit Cell <b>${a}</b> #${A}`),f.push(`${l}\xD7${u}\xD7${g} \u212B`),f.push(`\u03B1=${m}\xB0 \u03B2=${p}\xB0 \u03B3=${d}\xB0`),f.join(" | ")}n.getUnitcellLabel=r})(ah||={});function ame(e,t,r){if(!e._rowCount)return[];let n=y6e(r),o=[];for(let i=0;i<e._rowCount;i++)o[o.length]=C6e(e,t,i,n);return o}function C6e(e,t,r,n){let o=e.id.value(r),i=e.details.value(r),a=[],{assembly_id:A,oper_expression:s,asym_id_list:c}=t;for(let l=0,u=t._rowCount;l<u;l++)A.value(l)===o&&(a[a.length]={assemblyId:o,expression:s.value(l),asymIds:c.value(l)});return nD.create(o,i,h6e(a,n))}function h6e(e,t){return()=>{let r=[],n=0;for(let o=0;o<e.length;o++){let i=e[o],a=b6e(i.expression),A=Q6e(a),s=E6e(t,A,n,i.assemblyId),c=wo.generators.atoms({chainTest:wo.pred.and(wo.pred.eq(l=>Ke.unit.operator_name(l.element),Go.DefaultName),wo.pred.inSet(l=>Ke.chain.label_asym_id(l.element),i.asymIds))});r[r.length]={selector:c,operators:s,asymIds:i.asymIds},n+=s.length}return r}}function y6e(e){let{id:t,matrix:r,vector:n,_schema:o}=e,i=new Map,a=B();for(let A=0,s=e._rowCount;A<s;A++){let c=Fr.toMat4(Y(),o.matrix.space,r.value(A));Fr.toVec3(a,o.vector.space,n.value(A)),Y.setTranslation(c,a),Y.setValue(c,3,3,1),i.set(t.value(A),c)}return i}function Q6e(e){let t=[],r=[];for(let n=0;n<e.length;n++)r[n]="";return Ame(e,t,e.length-1,r),t}function Ame(e,t,r,n){if(r<0){t[t.length]=n.slice(0);return}let o=e[r],i=o.length;for(let a=0;a<i;a++)n[r]=o[a],Ame(e,t,r-1,n)}function E6e(e,t,r,n){let o=[],i=r;for(let a of t){let A=Y.identity();for(let l=0;l<a.length;l++)Y.mul(A,A,e.get(a[l]));i++;let s=`ASM_${i}`,c=Go.getAssemblyOperatorName(a);o[o.length]=Go.create(s,A,{instanceId:c,assembly:{id:n,operId:i,operList:a}})}return o}function b6e(e){let t=/\(?([^\(\)]+)\)?]*/g,r=[],n=[],o;for(;o=t.exec(e);)r[r.length]=o[1];return r.forEach(i=>{let a=[];i.split(",").forEach(A=>{let s=A.indexOf("-");if(s>0){let c=parseInt(A.substring(0,s)),l=parseInt(A.substr(s+1));for(let u=c;u<=l;u++)a[a.length]=u.toString()}else a[a.length]=A.trim()}),n[n.length]=a}),n}var Fo;(o=>{o.Descriptor={name:"model_symmetry"},o.Provider=Ws.create(o.Descriptor);function r(i){let a=ame(i.pdbx_struct_assembly,i.pdbx_struct_assembly_gen,i.pdbx_struct_oper_list),A=D6e(i.symmetry,i.cell),s=x6e(i.atom_sites,A);return{assemblies:a,spacegroup:A,isNonStandardCrystalFrame:s,ncsOperators:v6e(i.struct_ncs_oper)}}o.fromData=r;function n(i,a){let A=Ia.create("P 1",i,a),s=HA.create(A);return{assemblies:[],spacegroup:s,isNonStandardCrystalFrame:!1}}o.fromCell=n})(Fo||={});function x6e(e,t){return e._rowCount===0,!1}function S6e(e){let t=e.Int_Tables_number.value(0),r=e["space_group_name_H-M"].value(0);return e.Int_Tables_number.isDefined?e["space_group_name_H-M"].isDefined?r:t:r}function D6e(e,t){if(e._rowCount===0||t._rowCount===0)return HA.ZeroP1;let r=t.length_a.value(0),n=t.length_b.value(0),o=t.length_c.value(0);if(r===0||n===0||o===0)return HA.ZeroP1;let i=t.angle_alpha.value(0),a=t.angle_beta.value(0),A=t.angle_gamma.value(0);if(i===0||a===0||A===0)return HA.ZeroP1;let s=S6e(e),c=Ia.create(s,B.create(r,n,o),B.scale(B(),B.create(i,a,A),Math.PI/180));return HA.create(c)}function v6e(e){if(e._rowCount===0)return;let{id:t,matrix:r,vector:n}=e,o=Nn.struct_ncs_oper.matrix.space,i=Nn.struct_ncs_oper.vector.space,a=[];for(let A=0;A<e._rowCount;A++){let s=Fr.toMat3(Ht(),o,r.value(A)),c=Fr.toVec3(B(),i,n.value(A));if(!Go.checkIfRotationAndTranslation(s,c)||e.code.value(A)==="given"&&!Ht.isIdentity(s)&&!B.isZero(c))continue;let l=t.value(A);a[a.length]=Go.ofRotationAndOffset(`ncs_${l}`,s,c,l)}return a}var F6e={delocalizedTriplets:{getThirdElement:()=>{},getTripletIndices:()=>{},triplets:[]}};function sme(e){return ge.Traits.is(e.traits,ge.Trait.Water)||ge.Traits.is(e.traits,ge.Trait.CoarseGrained)?F6e:{delocalizedTriplets:w6e(e)}}function w6e(e){let t=e.bonds,{b:r,edgeProps:n,offset:o}=t,{order:i,flags:a}=n,{elementAromaticRingIndices:A}=e.rings,s=[],c=new Map,l=new Map,u=(g,m,p)=>{let d=s.length;s.push(je.ofUnsortedArray([g,m,p])),c.set(Fu(g,m),p),l.has(g)?l.get(g).push(d):l.set(g,[d])};for(let g=0;g<e.elements.length;g++){if(A.has(g)||o[g+1]-o[g]+1<2)continue;let p=[];for(let d=o[g],f=o[g+1];d<f;d++){let I=a[d];It.is(I,It.Flag.Aromatic)&&p.push(r[d])}if(p.length>=2){u(g,p[0],p[1]);for(let d=1,f=p.length;d<f;d++)u(g,p[d],p[0])}}return{getThirdElement:(g,m)=>c.get(Fu(g,m)),getTripletIndices:g=>l.get(g),triplets:s}}var ge;(H=>{let e;(q=>(q[q.Atomic=0]="Atomic",q[q.Spheres=1]="Spheres",q[q.Gaussians=2]="Gaussians"))(e=H.Kind||={});let t;(q=>(q[q.Atomic=0]="Atomic",q[q.Spheres=1]="Spheres",q[q.Gaussians=2]="Gaussians"))(t=H.Kinds||={});function r(z){return z.kind===0}H.isAtomic=r;function n(z){return z.kind===1||z.kind===2}H.isCoarse=n;function o(z){return z.kind===1}H.isSpheres=o;function i(z){return z.kind===2}H.isGaussians=i;function a(z,_,M,q,ne,oe,ae,me,Se){switch(ne){case 0:return new C(z,_,M,q,oe,me,Go.createMapping(ae,oe.atomicConformation,d(oe)),Se??y());case 1:return R(z,_,M,q,oe,1,me,Go.createMapping(ae,oe.coarseConformation.spheres,f(oe)),Se??x());case 2:return R(z,_,M,q,oe,2,me,Go.createMapping(ae,oe.coarseConformation.gaussians,I(oe)),Se??x())}}H.create=a;function A(z){let _=_c.Mutable();for(let M=0,q=z.length;M<q;M++)_.set(z[M].id,M);return _}function s(z){let _=[];for(let M=0,q=z.length;M<q;M++)_.push(z[M].id);return na(_)}function c(z){let _={};return{elements:z[0].elements,units:z,get unitIndexMap(){return _.unitIndexMap||(_.unitIndexMap=A(z)),_.unitIndexMap},hashCode:u(z[0]),transformHash:s(z)}}H.SymmetryGroup=c,(M=>{function z(q,ne){return q.hashCode!==ne.hashCode?!1:je.areEqual(q.elements,ne.elements)}M.areInvariantElementsEqual=z;function _(q){let ne=_c.Mutable();for(let oe=0,ae=q.length;oe<ae;++oe){let me=q[oe];for(let Se=0,ee=me.units.length;Se<ee;++Se)ne.set(me.units[Se].id,oe)}return ne}M.getUnitSymmetryGroupsIndexMap=_})(c=H.SymmetryGroup||={});function l(z){return H.isAtomic(z)?z.model.atomicConformation.id:z.model.coarseConformation.id}H.conformationId=l;function u(z){return lc(z.invariantId,je.hashCode(z.elements))}H.hashUnit=u;let g;(ae=>(ae[ae.None=0]="None",ae[ae.MultiChain=1]="MultiChain",ae[ae.Partitioned=2]="Partitioned",ae[ae.FastBoundary=4]="FastBoundary",ae[ae.Water=8]="Water",ae[ae.CoarseGrained=16]="CoarseGrained"))(g=H.Trait||={});let m;(M=>(M.is=hA.has,M.create=hA.create))(m=H.Traits||={});function p(){return{}}function d(z){let _=z.atomicHierarchy.atoms.type_symbol.value;return M=>rm(_(M))}function f(z){let _=z.coarseConformation.spheres.radius;return M=>_[M]}function I(z){return _=>0}class C{constructor(_,M,q,ne,oe,ae,me,Se){this.kind=0;this.objectPrimitive="atomistic";this._transientCache=void 0;this.id=_,this.invariantId=M,this.chainGroupId=q,this.traits=ne,this.model=oe,this.elements=ae,this.conformation=me,this.residueIndex=oe.atomicHierarchy.residueAtomSegments.index,this.chainIndex=oe.atomicHierarchy.chainAtomSegments.index,this.props=Se}get transientCache(){return this._transientCache===void 0&&(this._transientCache=new Map),this._transientCache}getChild(_){return _.length===this.elements.length?this:new C(this.id,this.invariantId,this.chainGroupId,this.traits,this.model,_,this.conformation,y())}getCopy(_,M,q,ne){let oe=new C(_,M,q,this.traits,this.model,this.elements,this.conformation,this.props);return ne?.propagateTransientCache&&(oe._transientCache=this._transientCache),oe}applyOperator(_,M,q=!1){let ne=q?M:Go.compose(this.conformation.operator,M);return new C(_,this.invariantId,this.chainGroupId,this.traits,this.model,this.elements,Go.createMapping(ne,this.model.atomicConformation,this.conformation.r),this.props)}remapModel(_,M,q){q||(q={...this.props,bonds:M&&!this.props.bonds?.props?.canRemap?void 0:v(this,this.props.bonds,_,M)},H.isSameConformation(this,_)||(q.boundary=void 0,q.lookup3d=void 0,q.principalAxes=void 0));let ne=this.conformation.operator,oe=Fo.Provider.get(_);if(ne.spgrOp!==-1&&oe&&oe!==Fo.Provider.get(this.model)){let[me,Se,ee]=ne.hkl,{toFractional:O}=oe.spacegroup.cell,X=B.transformMat4(B(),_t.getCenter(_),O);ne=HA.getSymmetryOperatorRef(oe.spacegroup,ne.spgrOp,me,Se,ee,X)}let ae=this.model.atomicConformation!==_.atomicConformation||ne!==this.conformation.operator?Go.createMapping(ne,_.atomicConformation,d(_)):this.conformation;return new C(this.id,this.invariantId,this.chainGroupId,this.traits,_,this.elements,ae,q)}get boundary(){if(this.props.boundary)return this.props.boundary;let _=m.is(this.traits,4),{x:M,y:q,z:ne}=this.model.atomicConformation,oe=_?void 0:_t.getAtomicRadii(this.model);return this.props.boundary=_?WG({x:M,y:q,z:ne,radius:oe,indices:this.elements}):rd({x:M,y:q,z:ne,radius:oe,indices:this.elements}),this.props.boundary}get lookup3d(){if(this.props.lookup3d)return this.props.lookup3d;let{x:_,y:M,z:q}=this.model.atomicConformation;return this.props.lookup3d=ou({x:_,y:M,z:q,indices:this.elements},this.boundary),this.props.lookup3d}get principalAxes(){return this.props.principalAxes?this.props.principalAxes:(this.props.principalAxes=bK(this),this.props.principalAxes)}get bonds(){if(this.props.bonds)return this.props.bonds;let _=XG.get(this.model),M=_.get(this.elements);return M||(M=Tge(this),M.props?.cacheable&&_.set(this.elements,M)),this.props.bonds=M,this.props.bonds}get rings(){return this.props.rings?this.props.rings:(this.props.rings=oh.create(this),this.props.rings)}get resonance(){return this.props.resonance?this.props.resonance:(this.props.resonance=sme(this),this.props.resonance)}get polymerElements(){return this.props.polymerElements?this.props.polymerElements:(this.props.polymerElements=Xge(this),this.props.polymerElements)}get gapElements(){return this.props.gapElements?this.props.gapElements:(this.props.gapElements=qge(this),this.props.gapElements)}get nucleotideElements(){return this.props.nucleotideElements?this.props.nucleotideElements:(this.props.nucleotideElements=eme(this),this.props.nucleotideElements)}get proteinElements(){return this.props.proteinElements?this.props.proteinElements:(this.props.proteinElements=tme(this),this.props.proteinElements)}get residueCount(){if(this.props.residueCount!==void 0)return this.props.residueCount;let _=0,M=sr.transientSegments(this.model.atomicHierarchy.residueAtomSegments,this.elements);for(;M.hasNext;)M.move(),_+=1;return this.props.residueCount=_,this.props.residueCount}getResidueIndex(_){return this.residueIndex[this.elements[_]]}}H.Atomic=C;function y(){return p()}class Q{constructor(_,M,q,ne,oe,ae,me,Se,ee){this._transientCache=void 0;this.kind=ae,this.objectPrimitive=ae===1?"sphere":"gaussian",this.id=_,this.invariantId=M,this.chainGroupId=q,this.traits=ne,this.model=oe,this.elements=me,this.conformation=Se,this.coarseElements=ae===1?oe.coarseHierarchy.spheres:oe.coarseHierarchy.gaussians,this.coarseConformation=ae===1?oe.coarseConformation.spheres:oe.coarseConformation.gaussians,this.props=ee}get transientCache(){return this._transientCache===void 0&&(this._transientCache=new Map),this._transientCache}getChild(_){return _.length===this.elements.length?this:R(this.id,this.invariantId,this.chainGroupId,this.traits,this.model,this.kind,_,this.conformation,x())}getCopy(_,M,q,ne){let oe=R(_,M,q,this.traits,this.model,this.kind,this.elements,this.conformation,this.props);return ne?.propagateTransientCache&&(oe._transientCache=this._transientCache),oe}applyOperator(_,M,q=!1){let ne=q?M:Go.compose(this.conformation.operator,M);return R(_,this.invariantId,this.chainGroupId,this.traits,this.model,this.kind,this.elements,Go.createMapping(ne,this.getCoarseConformation(),this.conformation.r),this.props)}remapModel(_,M,q){let ne=this.getCoarseConformation(),oe=E(this.kind,_);q||(q={...this.props},H.isSameConformation(this,_)||(q.boundary=void 0,q.lookup3d=void 0,q.principalAxes=void 0));let ae=ne!==oe?Go.createMapping(this.conformation.operator,oe,this.kind===1?f(_):I(_)):this.conformation;return new Q(this.id,this.invariantId,this.chainGroupId,this.traits,_,this.kind,this.elements,ae,q)}get boundary(){if(this.props.boundary)return this.props.boundary;let{x:_,y:M,z:q}=this.getCoarseConformation(),ne=this.getCoarseRadii();return this.props.boundary=m.is(this.traits,4)?WG({x:_,y:M,z:q,radius:ne,indices:this.elements}):rd({x:_,y:M,z:q,radius:ne,indices:this.elements}),this.props.boundary}get lookup3d(){if(this.props.lookup3d)return this.props.lookup3d;let{x:_,y:M,z:q}=this.getCoarseConformation();return this.props.lookup3d=ou({x:_,y:M,z:q,indices:this.elements},this.boundary),this.props.lookup3d}get principalAxes(){return this.props.principalAxes?this.props.principalAxes:(this.props.principalAxes=bK(this),this.props.principalAxes)}get polymerElements(){return this.props.polymerElements?this.props.polymerElements:(this.props.polymerElements=Zge(this),this.props.polymerElements)}get gapElements(){return this.props.gapElements?this.props.gapElements:(this.props.gapElements=$ge(this),this.props.gapElements)}getCoarseConformation(){return E(this.kind,this.model)}getCoarseRadii(){return b(this.kind,this.model)}}function E(z,_){return z===1?_.coarseConformation.spheres:_.coarseConformation.gaussians}function b(z,_){return z===1?_.coarseConformation.spheres.radius:void 0}function x(){return p()}class S extends Q{}H.Spheres=S;class w extends Q{}H.Gaussians=w;function R(z,_,M,q,ne,oe,ae,me,Se){return new Q(z,_,M,q,ne,oe,ae,me,Se)}function T(z,_){return z.chainGroupId===_.chainGroupId&&z.conformation.operator.name===_.conformation.operator.name}H.areSameChainOperatorGroup=T;function L(z,_){return Y.areEqual(z.conformation.operator.matrix,_.conformation.operator.matrix,1e-6)}H.areOperatorsEqual=L;function F(z,_){return z===_?!0:je.areEqual(z.elements,_.elements)?U(z,_.model):!1}H.areConformationsEqual=F;function v(z,_,M,q){if(!_)return;if(z.model.atomicConformation.id===M.atomicConformation.id)return _;let ne=Hi.Provider.get(z.model);if(ne){let oe=Hi.Provider.get(M);return!oe||ne===oe?_:void 0}return _.props?.canRemap||!q||U(z,M)?_:void 0}function U(z,_){let M=_t.CoordinatesHistory.get(_t.getRoot(_));if(M)return M.areEqual(z.elements,z.kind,_);let q=z.elements,{x:ne,y:oe,z:ae}=z.conformation.coordinates,{x:me,y:Se,z:ee}=G(z.kind,_);for(let O=0,X=q.length;O<X;O++){let Ce=q[O];if(ne[Ce]!==me[Ce]||oe[Ce]!==Se[Ce]||ae[Ce]!==ee[Ce])return!1}return!0}H.isSameConformation=U;function G(z,_){return z===0?_.atomicConformation:z===1?_.coarseConformation.spheres:_.coarseConformation.gaussians}H.getModelConformationOfKind=G;function N(z){return G(z.kind,z.model)}H.getConformation=N;function k(z,_){return z===0?_.atomicHierarchy:z===1?_.coarseHierarchy.spheres:_.coarseHierarchy.gaussians}H.getModelHierarchyOfKind=k;function J(z){return k(z.kind,z.model)}H.getHierarchy=J})(ge||={});var oD;(n=>{function e(o,i,a,A){o.indices[o.count]=a,o.units[o.count]=i,o.squaredDistances[o.count]=A,o.count++}n.add=e;function t(){return{count:0,indices:[],units:[],squaredDistances:[]}}n.create=t;function r(o,i){for(let a=0;a<i.count;++a)o.indices[a]=i.indices[a],o.units[a]=i.units[a],o.squaredDistances[a]=i.squaredDistances[a];return o.count=i.count,o}n.copy=r})(oD||={});function $y(){return{result:oD.create(),closeUnitsResult:Lu.create(),unitGroupResult:Lu.create()}}var ZG=class{constructor(t){this.structure=t;this.pivot=B();this.heap=new WS;this.findContext=$y();let{units:r,boundary:n}=t,o=r.length,i=new Float32Array(o),a=new Float32Array(o),A=new Float32Array(o),s=new Float32Array(o),c=B();for(let u=0;u<o;u++){let g=r[u],m=g.boundary.sphere;B.transformMat4(c,m.center,g.conformation.operator.matrix),i[u]=c[0],a[u]=c[1],A[u]=c[2],s[u]=m.radius}let l={x:i,y:a,z:A,radius:s,indices:Ee.ofBounds(0,o)};this.unitLookup=ou(l,n)}findUnitIndices(t,r,n,o){return this.unitLookup.find(t,r,n,o)}find(t,r,n,o,i){return this._find(t,r,n,o,i??this.findContext)}_find(t,r,n,o,i){Lu.reset(i.result);let{units:a}=this.structure,A=this.unitLookup.find(t,r,n,o,i.closeUnitsResult);if(A.count===0)return i.result;for(let s=0,c=A.count;s<c;s++){let l=a[A.indices[s]];B.set(this.pivot,t,r,n),l.conformation.operator.isIdentity||B.transformMat4(this.pivot,this.pivot,l.conformation.operator.inverse);let g=l.lookup3d.find(this.pivot[0],this.pivot[1],this.pivot[2],o,i.unitGroupResult);for(let m=0,p=g.count;m<p;m++)oD.add(i.result,l,g.indices[m],g.squaredDistances[m])}return i.result}nearest(t,r,n,o=1,i){return this._nearest(t,r,n,o,i??this.findContext)}_nearest(t,r,n,o,i){let a=i.result,A=this.heap;Lu.reset(a),A.clear();let{units:s}=this.structure,c=0,l=this.unitLookup.nearest(t,r,n,s.length,m=>(c+=s[m].elements.length)>=o,i.closeUnitsResult);if(l.count===0)return a;let u=0,g=-Number.MAX_VALUE;for(let m=0,p=l.count;m<p;m++){let d=l.squaredDistances[m];if(u>=o&&g<d)break;B.set(this.pivot,t,r,n);let f=s[l.indices[m]];f.conformation.operator.isIdentity||B.transformMat4(this.pivot,this.pivot,f.conformation.operator.inverse);let C=f.lookup3d.nearest(this.pivot[0],this.pivot[1],this.pivot[2],o,void 0,i.unitGroupResult);if(C.count!==0){u+=C.count,g=Math.max(g,C.squaredDistances[C.count-1]);for(let y=0,Q=C.count;y<Q;y++)A.insert(C.squaredDistances[y],{index:C.indices[y],unit:f})}}if(o===1){let m=A.findMinimum();if(m){let{key:p}=m,{unit:d,index:f}=m.value;oD.add(a,d,f,p)}}else for(;!A.isEmpty()&&a.count<o;){let m=A.extractMinimum(),{key:p}=m,{unit:d,index:f}=m.value;oD.add(a,d,f,p)}return a}findIntoBuilder(t,r,n,o,i){let{units:a}=this.structure,A=this.unitLookup.find(t,r,n,o);if(A.count!==0)for(let s=0,c=A.count;s<c;s++){let l=a[A.indices[s]];B.set(this.pivot,t,r,n),l.conformation.operator.isIdentity||B.transformMat4(this.pivot,this.pivot,l.conformation.operator.inverse);let g=l.lookup3d.find(this.pivot[0],this.pivot[1],this.pivot[2],o);if(g.count===0)continue;let m=l.elements;i.beginUnit(l.id);for(let p=0,d=g.count;p<d;p++)i.addElement(m[g.indices[p]]);i.commitUnit()}}findIntoBuilderIf(t,r,n,o,i,a){let{units:A}=this.structure,s=this.unitLookup.find(t,r,n,o);if(s.count===0)return;let c=W.Location.create(this.structure);for(let l=0,u=s.count;l<u;l++){let g=A[s.indices[l]];B.set(this.pivot,t,r,n),g.conformation.operator.isIdentity||B.transformMat4(this.pivot,this.pivot,g.conformation.operator.inverse);let p=g.lookup3d.find(this.pivot[0],this.pivot[1],this.pivot[2],o);if(p.count===0)continue;let d=g.elements;c.unit=g,i.beginUnit(g.id);for(let f=0,I=p.count;f<I;f++)c.element=d[p.indices[f]],a(c)&&i.addElement(c.element);i.commitUnit()}}findIntoBuilderWithRadius(t,r,n,o,i,a,A,s){let{units:c}=this.structure,l=this.unitLookup.find(t,r,n,a);if(l.count===0)return;let u=W.Location.create(this.structure),g=o+i+a;for(let m=0,p=l.count;m<p;m++){let d=c[l.indices[m]];B.set(this.pivot,t,r,n),d.conformation.operator.isIdentity||B.transformMat4(this.pivot,this.pivot,d.conformation.operator.inverse);let I=d.lookup3d.find(this.pivot[0],this.pivot[1],this.pivot[2],g);if(I.count===0)continue;let C=d.elements;u.unit=d,s.beginUnit(d.id);for(let y=0,Q=I.count;y<Q;y++){u.element=C[I.indices[y]];let E=A(u);Math.sqrt(I.squaredDistances[y])-o-E>a||s.addElement(C[I.indices[y]])}s.commitUnit()}}check(t,r,n,o){let{units:i}=this.structure,a=this.unitLookup.find(t,r,n,o);if(a.count===0)return!1;for(let A=0,s=a.count;A<s;A++){let c=i[a.indices[A]];if(B.set(this.pivot,t,r,n),c.conformation.operator.isIdentity||B.transformMat4(this.pivot,this.pivot,c.conformation.operator.inverse),c.lookup3d.check(this.pivot[0],this.pivot[1],this.pivot[2],o))return!0}return!1}approxNearest(t,r,n,o,i){return this._approxNearest(t,r,n,o,i??this.findContext)}_approxNearest(t,r,n,o,i){Lu.reset(i.result);let{units:a}=this.structure,A=this.unitLookup.find(t,r,n,o,i.closeUnitsResult);if(A.count===0)return i.result;let s=Number.MAX_VALUE;for(let c=0,l=A.count;c<l;c++){let u=a[A.indices[c]];B.set(this.pivot,t,r,n),u.conformation.operator.isIdentity||B.transformMat4(this.pivot,this.pivot,u.conformation.operator.inverse);let m=u.lookup3d.approxNearest(this.pivot[0],this.pivot[1],this.pivot[2],o,i.unitGroupResult);for(let p=0,d=m.count;p<d;p++)m.squaredDistances[p]<s&&(oD.add(i.result,u,m.indices[p],m.squaredDistances[p]),s=m.squaredDistances[p])}return i.result}get boundary(){return this.structure.boundary}};function Mf(e,t){if(t.length===0)return Ye.Empty;if(t.length===1)return t[0];let r=new Map,n=new Set;for(let{units:i}of t)for(let a=0,A=i.length;a<A;a++){let s=i[a];if(r.has(s.id)){if(n.has(s.id))continue;let c=je.union(r.get(s.id),s.elements);r.set(s.id,c),c.length===e.unitMap.get(s.id).elements.length&&n.add(s.id)}else r.set(s.id,s.elements),s.elements.length===e.unitMap.get(s.id).elements.length&&n.add(s.id)}let o=e.subsetBuilder(!0);return r.forEach(R6e,o),o.getStructure()}function R6e(e,t){this.setUnit(t,e)}function cme(e,t){if(e===t)return!0;if(e.units.length!==t.units.length)return!1;let r=e.units,n=t.unitMap;for(let o=0,i=r.length;o<i;o++){let a=r[o];if(!n.has(a.id))return!1;let A=n.get(a.id);if(!je.areEqual(a.elements,A.elements))return!1}return!0}function iD(e,t){if(e===t)return!0;let r,n;e.units.length<t.units.length?(r=e,n=t):(r=t,n=e);let o=r.units,i=n.unitMap;for(let a=0,A=o.length;a<A;a++){let s=o[a];if(!i.has(s.id))continue;let c=i.get(s.id);if(je.areIntersecting(s.elements,c.elements))return!0}return!1}function qG(e,t){if(e===t)return e;if(!iD(e,t))return Ye.Empty;let r,n;e.units.length<t.units.length?(r=e,n=t):(r=t,n=e);let o=r.units,i=n.unitMap,a=[];for(let A=0,s=o.length;A<s;A++){let c=o[A];if(!i.has(c.id))continue;let l=i.get(c.id);if(je.areIntersecting(c.elements,l.elements)){let u=je.intersect(c.elements,l.elements);a[a.length]=c.getChild(u)}}return Ye.create(a,{parent:e.parent||t.parent})}function aD(e,t){if(e===t)return Ye.Empty;if(!iD(e,t))return e;let r=e.units,n=t.unitMap,o=[];for(let i=0,a=r.length;i<a;i++){let A=r[i];if(!n.has(A.id)){o[o.length]=A;continue}let s=n.get(A.id),c=je.subtract(A.elements,s.elements);c.length>0&&(o[o.length]=A.getChild(c))}return Ye.create(o,{parent:e.parent||t.parent})}var Qt;(f=>{function e(I,C){return{kind:"singletons",source:I,structure:C}}f.Singletons=e;function t(I,C){return{kind:"sequence",source:I,structures:C}}f.Sequence=t;function r(I){return e(I,Ye.Empty)}f.Empty=r;function n(I){return I.kind==="singletons"}f.isSingleton=n;function o(I){return n(I)?I.structure.units.length===0:I.structures.length===0}f.isEmpty=o;function i(I){return n(I)?I.structure.elementCount:I.structures.length}f.structureCount=i;function a(I){return o(I)?Ye.Empty:n(I)?I.structure:Mf(I.source,I.structures)}f.unionStructure=a;function A(I){let C=[],{unitMap:y}=I.source;for(let Q of a(I).units)Q===y.get(Q.id)?C[C.length]={unit:Q,indices:Ee.ofBounds(0,Q.elements.length)}:C[C.length]={unit:Q,indices:Ee.ofSortedArray(je.indicesOf(y.get(Q.id).elements,Q.elements))};return W.Loci(I.source,C)}f.toLociWithCurrentUnits=A;function s(I){let C=[],{unitMap:y}=I.source;for(let Q of a(I).units){let E=y.get(Q.id);E===Q?C[C.length]={unit:E,indices:Ee.ofBounds(0,E.elements.length)}:C[C.length]={unit:E,indices:Ee.ofSortedArray(je.indicesOf(E.elements,Q.elements))}}return W.Loci(I.source,C)}f.toLociWithSourceUnits=s;function c(I,C,y){return C.length===0?r(I):y?e(I,Mf(I,C)):t(I,C)}class l{constructor(C){this.source=C;this.structures=[];this.allSingletons=!0}add(C){let y=C.elementCount;y!==0&&(this.structures[this.structures.length]=C,y!==1&&(this.allSingletons=!1))}getSelection(){return c(this.source,this.structures,this.allSingletons)}}class u{constructor(C){this.structure=C;this.structures=[];this.allSingletons=!0;this.uniqueSets=ZS(Ye.hashCode,Ye.areUnitIdsAndIndicesEqual)}add(C){let y=C.elementCount;y===0||!this.uniqueSets.add(C)||(this.structures[this.structures.length]=C,y!==1&&(this.allSingletons=!1))}getSelection(){return c(this.structure,this.structures,this.allSingletons)}}function g(I){return new l(I)}f.LinearBuilder=g;function m(I){return new u(I)}f.UniqueBuilder=m;function p(I,C){let y=0;if(f.isSingleton(I))for(let Q of I.structure.units){let{elements:E}=Q;for(let b=0,x=E.length;b<x;b++){let S=Ye.create([Q.getChild(je.ofSingleton(E[b]))],{parent:I.source});C(S,y++)}}else for(let Q of I.structures)C(Q,y++)}f.forEach=p;function d(I,C){return n(I)?e(C,I.structure):t(C,I.structures)}f.withInputStructure=d})(Qt||={});var FK={};ki(FK,{atomicHet:()=>M6e,atomicSequence:()=>G6e,bundleElementImpl:()=>DK,bundleGenerator:()=>vK,defaultBondTest:()=>$G,spheres:()=>k6e,water:()=>N6e});function U6e(e){return!!e.items}function L6e(e){let{and:t}=ce.core.logic,{eq:r,gre:n,lte:o}=ce.core.rel,{macromolecular:i,ihm:a,core:A}=ce.struct.atomProperty,s={};mc(e.label_entity_id)&&(s["entity-test"]=r([i.label_entity_id(),e.label_entity_id]));let c=[];mc(e.operator_name)&&c.push(r([A.operatorName(),e.operator_name])),mc(e.instance_id)&&c.push(r([A.instanceId(),e.instance_id])),mc(e.label_asym_id)&&c.push(r([i.label_asym_id(),e.label_asym_id])),mc(e.auth_asym_id)&&c.push(r([i.auth_asym_id(),e.auth_asym_id])),c.length===1?s["chain-test"]=c[0]:c.length>1&&(s["chain-test"]=t(c));let l=[];mc(e.label_seq_id)&&l.push(a.hasSeqId({0:e.label_seq_id})),mc(e.auth_seq_id)&&l.push(r([i.auth_seq_id(),e.auth_seq_id])),mc(e.residue_index)&&l.push(r([i.residueSourceIndex(),e.residue_index])),mc(e.pdbx_PDB_ins_code)&&l.push(r([i.pdbx_PDB_ins_code(),e.pdbx_PDB_ins_code])),(mc(e.beg_label_seq_id)||mc(e.end_label_seq_id))&&l.push(a.overlapsSeqIdRange({beg:e.beg_label_seq_id,end:e.end_label_seq_id})),mc(e.beg_auth_seq_id)&&l.push(n([i.auth_seq_id(),e.beg_auth_seq_id])),mc(e.end_auth_seq_id)&&l.push(o([i.auth_seq_id(),e.end_auth_seq_id])),l.length===1?s["residue-test"]=l[0]:l.length>1&&(s["residue-test"]=t(l));let u=[];return mc(e.label_comp_id)&&u.push(r([i.label_comp_id(),e.label_comp_id])),mc(e.auth_comp_id)&&u.push(r([i.auth_comp_id(),e.auth_comp_id])),mc(e.atom_id)&&u.push(r([i.id(),e.atom_id])),mc(e.atom_index)&&u.push(r([ce.struct.atomProperty.core.sourceIndex(),e.atom_index])),mc(e.label_atom_id)&&u.push(r([i.label_atom_id(),e.label_atom_id])),mc(e.auth_atom_id)&&u.push(r([i.auth_atom_id(),e.auth_atom_id])),mc(e.type_symbol)&&u.push(r([ce.struct.atomProperty.core.elementSymbol(),e.type_symbol.toUpperCase()])),u.length===1?s["atom-test"]=u[0]:u.length>1&&(s["atom-test"]=t(u)),ce.struct.generator.atomGroups(s)}function lme(e){let t=[];return ume(e,r=>t.push(L6e(r))),t.length===1?t[0]:T6e(t)}function T6e(e){return ce.struct.combinator.merge(e.map(t=>ce.struct.modifier.union([t])))}function mc(e){return e!=null}function ume(e,t){if(U6e(e))if(Array.isArray(e.items))if(e.prefix)for(let r of e.items)t(Object.assign({},e.prefix,r));else for(let r of e.items)t(r);else{let r={...e.prefix},n=Object.keys(e.items),o=e.items[n[0]].length;for(let i=0;i<o;i++){for(let a of n)r[a]=e.items[a][i];t(r)}}else t(e)}function gme(e,t,r){let n=lme(t);return np.fromExpression(e,n,r)}function P6e(e,t,r){let n=gme(e,t,r);return AD.fromLoci(n)}var y2={forEachItem:ume,toExpression:lme,toLoci:gme,toBundle:P6e};var AD;(m=>{m.Empty={hash:-1,elements:[]};function t(p,d){return a(Qt.toLociWithSourceUnits(Qt.Singletons(p,d)))}m.fromSubStructure=t;function r(p){return a(Qt.toLociWithSourceUnits(p))}m.fromSelection=r;function n(p,d,f){return a(np.fromExpression(p,d,f))}m.fromExpression=n;function o(p,d,f){return a(np.fromQuery(p,d,f))}m.fromQuery=o;function i(p,d,f){return y2.toBundle(p,d,f)}m.fromSchema=i;function a(p){let d=[];for(let C of p.elements){let{unit:y,indices:Q}=C;if(Ee.size(Q)===0)continue;let E=[],b=[];if(Ee.isInterval(Q))Ee.size(Q)===1?b.push(Ue.min(Q)):E.push(Ue.min(Q),Ue.max(Q));else{let x=0,S=Q.length;for(;x<S;){let w=x;for(x++;x<S&&Q[x-1]+1===Q[x];)x++;let R=x;if(R-w>2)E.push(Q[w],Q[R-1]);else for(let T=w;T<R;T++)b[b.length]=Q[T]}}d.push({unit:y,set:je.ofSortedArray(b),ranges:vo.ofSortedRanges(E)})}let f=new Map;for(let C=0,y=d.length;C<y;++C){let Q=d[C],E=lc(na(Q.ranges),na(Q.set));if(f.has(E)){let{groupedUnits:b}=f.get(E);b.has(Q.unit.invariantId)?b.get(Q.unit.invariantId).push(Q.unit.id):b.set(Q.unit.invariantId,[Q.unit.id])}else{let b=new Map;b.set(Q.unit.invariantId,[Q.unit.id]),f.set(E,{groupedUnits:b,set:Q.set,ranges:Q.ranges})}}let I=[];return f.forEach(C=>{let y=[];C.groupedUnits.forEach(Q=>y.push(je.ofUnsortedArray(Q))),y.sort((Q,E)=>Q[0]-E[0]),I.push({groupedUnits:y,set:C.set,ranges:C.ranges})}),{hash:p.structure.hashCode,elements:I}}m.fromLoci=a;function A(p,d){let f=[];for(let I=0,C=p.length;I<C;++I){let y=p[I];d.unitMap.has(y)&&f.push(d.unitMap.get(y))}return f}function s(p,d){p.hash!==-1&&p.hash!==d.hashCode&&new Error("Bundle not compatible with given structure");let f=[];for(let I of p.elements)for(let C of I.groupedUnits){let y=A(C,d);if(y.length===0)continue;let Q;if(I.ranges.length===0)Q=I.set;else if(I.set.length===0)if(I.ranges.length===2)Q=Ue.ofRange(I.ranges[0],I.ranges[1]);else{let E=new Int32Array(vo.size(I.ranges));vo.forEach(I.ranges,(b,x)=>E[x]=b),Q=je.ofSortedArray(E)}else{let E=vo.size(I.ranges),b=new Int32Array(I.set.length+E);vo.forEach(I.ranges,(x,S)=>b[S]=x),b.set(I.set,E),Q=je.ofUnsortedArray(b)}for(let E of y)f.push({unit:E,indices:Q})}return np(d,f)}m.toLoci=s;function c(p,d){p.hash!==-1&&p.hash!==d.hashCode&&new Error("Bundle not compatible with given structure");let f=[];for(let I of p.elements)for(let C of I.groupedUnits){let y=A(C,d);if(y.length===0)continue;let Q=y[0].elements,E=vo.size(I.ranges),b=I.set.length,x=new Int32Array(b+E),S;if(E===0){for(let w=0,R=b;w<R;++w)x[w]=Q[I.set[w]];S=je.ofSortedArray(x)}else if(b===0)vo.forEach(I.ranges,(w,R)=>x[R]=Q[w]),S=je.ofSortedArray(x);else if(je.min(I.set)>vo.max(I.ranges)){vo.forEach(I.ranges,(w,R)=>x[R]=Q[w]);for(let w=0,R=b;w<R;++w)x[w+E]=Q[I.set[w]];S=je.ofSortedArray(x)}else if(vo.min(I.ranges)>je.max(I.set)){for(let w=0,R=b;w<R;++w)x[w]=Q[I.set[w]];vo.forEach(I.ranges,(w,R)=>x[R+b]=Q[w]),S=je.ofSortedArray(x)}else{vo.forEach(I.ranges,(w,R)=>x[R]=Q[w]);for(let w=0,R=b;w<R;++w)x[w+E]=Q[I.set[w]];S=je.ofUnsortedArray(x)}for(let w of y)f.push(w.getChild(S))}return Ye.create(f,{parent:d})}m.toStructure=c;function l(p){return ce.internal.generator.bundleElement({groupedUnits:ce.core.type.list(p.groupedUnits.map(d=>ce.core.type.list(d))),ranges:ce.core.type.list(p.ranges),set:ce.core.type.list(p.set)})}function u(p){return ce.internal.generator.bundle({elements:ce.core.type.list(p.elements.map(l))})}m.toExpression=u;function g(p,d){if(p.elements.length!==d.elements.length)return!1;for(let f=0,I=p.elements.length;f<I;++f){let C=p.elements[f],y=d.elements[f];if(C.groupedUnits.length!==y.groupedUnits.length)return!1;for(let Q=0,E=y.groupedUnits.length;Q<E;++Q)if(!je.areEqual(C.groupedUnits[Q],y.groupedUnits[Q]))return!1;if(!je.areEqual(C.set,y.set)||!vo.areEqual(C.ranges,y.ranges))return!1}return!0}m.areEqual=g})(AD||={});function $G(e){return It.isCovalent(e.atomicBond.type)}function G6e(){return function(t){let{inputStructure:r}=t,n=W.Location.create(r),o=[];for(let i of r.units){if(i.kind!==ge.Kind.Atomic)continue;n.unit=i;let a=i.elements;if(n.element=a[0],Ke.entity.type(n)!=="polymer")continue;let A=sr.transientSegments(i.model.atomicHierarchy.residueAtomSegments,a),s=0;for(;A.hasNext;)s++,A.move();s<8||o.push(i)}return Qt.Singletons(r,Ye.create(o,{parent:r}))}}function N6e(){return function(t){let{inputStructure:r}=t,n=W.Location.create(r),o=[];for(let i of r.units){if(i.kind!==ge.Kind.Atomic)continue;n.unit=i;let a=i.elements;n.element=a[0],Ke.entity.type(n)==="water"&&o.push(i)}return Qt.Singletons(r,Ye.create(o,{parent:r}))}}function M6e(){return function(t){let{inputStructure:r}=t,n=W.Location.create(r),o=[];for(let i of r.units){if(i.kind!==ge.Kind.Atomic)continue;n.unit=i;let a=i.elements;if(n.element=a[0],Ke.entity.type(n)!=="water"){if(Ke.entity.type(n)==="polymer"){let A=sr.transientSegments(i.model.atomicHierarchy.residueAtomSegments,a),s=0;for(;A.hasNext;)s++,A.move();if(s>=8)continue}o.push(i)}}return Qt.Singletons(r,Ye.create(o,{parent:r}))}}function k6e(){return function(t){let{inputStructure:r}=t,n=[];for(let o of r.units)o.kind===ge.Kind.Spheres&&n.push(o);return Qt.Singletons(r,Ye.create(n,{parent:r}))}}function DK(e,t,r){return{groupedUnits:e,ranges:t,set:r}}function vK(e){return function(r){let n={hash:r.inputStructure.hashCode,elements:e};return Qt.Sequence(r.inputStructure,[AD.toStructure(n,r.inputStructure)])}}var qo=class{constructor(t,r){this.currentElementStack=[];this.currentAtomicBondStack=[];this.currentStructureStack=[];this.inputStructureStack=[];this.timeCreated=co();this.element=W.Location.create(void 0);this.currentStructure=void 0;this.atomicBond=new eN;this.currentSelection=void 0;this.inputStructure=t,this.timeoutMs=r&&r.timeoutMs||0,this.currentSelection=r&&r.currentSelection}pushCurrentElement(){return this.currentElementStack[this.currentElementStack.length]=this.element,this.element=W.Location.create(void 0),this.element}popCurrentElement(){this.element=this.currentElementStack.pop()}pushCurrentBond(){return this.atomicBond&&this.currentAtomicBondStack.push(this.atomicBond),this.atomicBond=new eN,this.atomicBond}popCurrentBond(){this.currentAtomicBondStack.length>0?this.atomicBond=this.currentAtomicBondStack.pop():this.atomicBond=void 0}pushCurrentStructure(){this.currentStructure&&this.currentStructureStack.push(this.currentStructure)}popCurrentStructure(){this.currentStructureStack.length?this.currentStructure=this.currentStructureStack.pop():this.currentStructure=void 0}pushInputStructure(t){this.inputStructureStack.push(this.inputStructure),this.inputStructure=t}popInputStructure(){if(this.inputStructureStack.length===0)throw new Error("Must push before pop.");this.inputStructure=this.inputStructureStack.pop()}throwIfTimedOut(){if(this.timeoutMs!==0&&co()-this.timeCreated>this.timeoutMs)throw new Error(`The query took too long to execute (> ${this.timeoutMs/1e3}s).`)}tryGetCurrentSelection(){if(!this.currentSelection)throw new Error("The current selection is not assigned.");return this.currentSelection}},eN=class{constructor(){this.a=W.Location.create(void 0);this.aIndex=0;this.b=W.Location.create(void 0);this.bIndex=0;this.type=It.Flag.None;this.order=0;this.key=-1;this.testFn=$G}setStructure(t){this.a.structure=t,this.b.structure=t}setTestFn(t){this.testFn=t||$G}test(t,r){return this.testFn(t)?!0:r?(this.swap(),this.testFn(t)):!1}swap(){let t=this.aIndex;this.aIndex=this.bIndex,this.bIndex=t;let r=this.a.unit;this.a.unit=this.b.unit,this.b.unit=r;let n=this.a.element;this.a.element=this.b.element,this.b.element=n}get length(){return W.Location.distance(this.a,this.b)}};var Ah;(r=>{function e(n,o,i){return n(new qo(o,i))}r.run=e;function t(n,o,i){let a=n(new qo(o,i));return Qt.toLociWithSourceUnits(a)}r.loci=t})(Ah||={});var RK={};ki(RK,{all:()=>mme,atoms:()=>i0,bondedAtomicPairs:()=>j6e,chains:()=>V6e,none:()=>rN,querySelection:()=>K6e,residues:()=>H6e,rings:()=>z6e});var sD=class{constructor(t){this.source=t;this.set=ZS(Ye.hashCode,Ye.areUnitIdsAndIndicesEqual);this.structures=[];this.allSingletons=!0}add(t){t.elementCount&&(t.elementCount!==1&&(this.allSingletons=!1),this.set.add(t)&&(this.structures[this.structures.length]=t))}getSelection(){return this.allSingletons?Qt.Singletons(this.source,Mf(this.source,this.structures)):Qt.Sequence(this.source,this.structures)}},tN=class{constructor(t){this.source=t;this.builders=[];this.builderMap=new Map}add(t,r,n){let o=this.builderMap.get(t);o||(o=this.source.subsetBuilder(!0),this.builders[this.builders.length]=o,this.builderMap.set(t,o)),o.addToUnit(r,n)}allSingletons(){for(let t=0,r=this.builders.length;t<r;t++)if(this.builders[t].elementCount>1)return!1;return!0}singletonSelection(){let t=this.source.subsetBuilder(!0),r=W.Location.create(this.source);for(let n=0,o=this.builders.length;n<o;n++)this.builders[n].setSingletonLocation(r),t.addToUnit(r.unit.id,r.element);return Qt.Singletons(this.source,t.getStructure())}fullSelection(){let t=new Array(this.builders.length);for(let r=0,n=this.builders.length;r<n;r++)t[r]=this.builders[r].getStructure();return Qt.Sequence(this.source,t)}getSelection(){return this.builders.length===0?Qt.Empty(this.source):this.allSingletons()?this.singletonSelection():this.fullSelection()}};var rN=e=>Qt.Sequence(e.inputStructure,[]),mme=e=>Qt.Singletons(e.inputStructure,e.inputStructure);function H6e(e){return i0({...e,groupBy:t=>Ke.residue.key(t.element)})}function V6e(e){return i0({...e,groupBy:t=>Ke.chain.key(t.element)})}function eQ(e){return!0}function _6e(e){return 0}function i0(e){if(!e||!e.atomTest&&!e.residueTest&&!e.chainTest&&!e.entityTest&&!e.unitTest&&!e.groupBy)return mme;if(e.atomTest&&!e.residueTest&&!e.chainTest&&!e.entityTest&&!e.unitTest&&!e.groupBy)return Y6e(e.atomTest);let t={unitTest:e.unitTest||eQ,entityTest:e.entityTest||eQ,chainTest:e.chainTest||eQ,residueTest:e.residueTest||eQ,atomTest:e.atomTest||eQ,groupBy:e.groupBy||_6e};return e.groupBy?J6e(t):O6e(t)}function Y6e(e){return function(r){let{inputStructure:n}=r,{units:o}=n,i=r.pushCurrentElement(),a=n.subsetBuilder(!0);i.structure=n;for(let A of o){i.unit=A;let s=A.elements;a.beginUnit(A.id);for(let c=0,l=s.length;c<l;c++)i.element=s[c],e(r)&&a.addElement(i.element);a.commitUnit(),r.throwIfTimedOut()}return r.popCurrentElement(),Qt.Singletons(n,a.getStructure())}}function O6e({unitTest:e,entityTest:t,chainTest:r,residueTest:n,atomTest:o}){return function(a){let{inputStructure:A}=a,{units:s}=A,c=a.pushCurrentElement(),l=A.subsetBuilder(!0),u=n===eQ&&o===eQ,g=o===eQ;c.structure=A;for(let m of s){if(c.unit=m,!e(a))continue;let{elements:p,model:d}=m;if(l.beginUnit(m.id),m.kind===ge.Kind.Atomic){let f=sr.transientSegments(m.model.atomicHierarchy.chainAtomSegments,p),I=sr.transientSegments(m.model.atomicHierarchy.residueAtomSegments,p);for(;f.hasNext;){let C=f.move();if(c.element=p[C.start],!(!t(a)||!r(a))){if(u){l.addElementRange(p,C.start,C.end);continue}for(I.setSegment(C);I.hasNext;){let y=I.move();if(c.element=p[y.start],!!n(a)){if(g){l.addElementRange(p,y.start,y.end);continue}for(let Q=y.start,E=y.end;Q<E;Q++)c.element=p[Q],o(a)&&l.addElement(c.element)}}}}}else{let{chainElementSegments:f}=m.kind===ge.Kind.Spheres?d.coarseHierarchy.spheres:d.coarseHierarchy.gaussians,I=sr.transientSegments(f,p);for(;I.hasNext;){let C=I.move();if(c.element=p[C.start],!(!t(a)||!r(a))){if(u){l.addElementRange(p,C.start,C.end);continue}for(let y=C.start,Q=C.end;y<Q;y++)c.element=p[y],n(a)&&l.addElement(c.element)}}}l.commitUnit(),a.throwIfTimedOut()}return a.popCurrentElement(),Qt.Singletons(A,l.getStructure())}}function J6e({unitTest:e,entityTest:t,chainTest:r,residueTest:n,atomTest:o,groupBy:i}){return function(A){let{inputStructure:s}=A,{units:c}=s,l=A.pushCurrentElement(),u=new tN(s);l.structure=s;for(let g of c){if(l.unit=g,!e(A))continue;let{elements:m,model:p}=g;if(g.kind===ge.Kind.Atomic){let d=sr.transientSegments(p.atomicHierarchy.chainAtomSegments,m),f=sr.transientSegments(p.atomicHierarchy.residueAtomSegments,m);for(;d.hasNext;){let I=d.move();if(l.element=m[I.start],!(!t(A)||!r(A)))for(f.setSegment(I);f.hasNext;){let C=f.move();if(l.element=m[C.start],!!n(A))for(let y=C.start,Q=C.end;y<Q;y++)l.element=m[y],o(A)&&u.add(i(A),g.id,l.element)}}}else{let{chainElementSegments:d}=g.kind===ge.Kind.Spheres?p.coarseHierarchy.spheres:p.coarseHierarchy.gaussians,f=sr.transientSegments(d,m);for(;f.hasNext;){let I=f.move();if(l.element=m[I.start],!(!t(A)||!r(A)))for(let C=I.start,y=I.end;C<y;C++)l.element=m[C],n(A)&&u.add(i(A),g.id,l.element)}}A.throwIfTimedOut()}return A.popCurrentElement(),u.getSelection()}}function wK(e,t,r){let n=new Int32Array(t.length);for(let o=0,i=t.length;o<i;o++)n[o]=e.elements[t[o]];return Ye.create([e.getChild(je.ofSortedArray(n))],{parent:r})}function z6e(e,t){return function(n){let{units:o}=n.inputStructure,i=Qt.LinearBuilder(n.inputStructure);if(!e||e.length===0){for(let a of o)if(ge.isAtomic(a))if(t)for(let A of a.rings.aromaticRings)i.add(wK(a,a.rings.all[A],n.inputStructure));else for(let A of a.rings.all)i.add(wK(a,A,n.inputStructure))}else{let a=yo.create();for(let A=0;A<e.length;A++)yo.add(a,e[A],e[A]);for(let A of o){if(!ge.isAtomic(A))continue;let s=A.rings;for(let c of a.array)if(s.byFingerprint.has(c))for(let l of s.byFingerprint.get(c))t&&!s.aromaticRings.includes(l)||i.add(wK(A,s.all[l],n.inputStructure))}}return i.getSelection()}}function K6e(e,t,r=!1){return function(o){let i=e(o);if(Qt.structureCount(i)===0)return i;let a=r?aD(o.inputStructure,Qt.unionStructure(i)):Qt.unionStructure(i);if(a.elementCount===0)return Qt.Empty(o.inputStructure);o.throwIfTimedOut(),o.pushInputStructure(a);let A=t(o);return o.popInputStructure(),Qt.withInputStructure(A,o.inputStructure)}}function j6e(e){return function(r){let n=r.inputStructure,o=n.interUnitBonds,i=Qt.UniqueBuilder(r.inputStructure);r.pushCurrentBond();let a=r.atomicBond;a.setTestFn(e),a.setStructure(n);for(let A of n.units){if(A.kind!==ge.Kind.Atomic)continue;let{offset:s,b:c,edgeProps:{flags:l,order:u,key:g}}=A.bonds;a.a.unit=A,a.b.unit=A;for(let m=0,p=A.elements.length;m<p;m++){a.aIndex=m,a.a.element=A.elements[m];for(let d=s[m],f=s[m+1];d<f;d++)if(a.bIndex=c[d],a.b.element=A.elements[c[d]],a.type=l[d],a.order=u[d],a.key=g[d],a.test(r,!1)){let I=n.subsetBuilder(!1);I.beginUnit(A.id),I.addElement(a.a.element),I.addElement(a.b.element),I.commitUnit(),i.add(I.getStructure())}}}for(let A of o.edges)if(a.a.unit=n.unitMap.get(A.unitA),a.a.element=a.a.unit.elements[A.indexA],a.aIndex=A.indexA,a.b.unit=n.unitMap.get(A.unitB),a.b.element=a.b.unit.elements[A.indexB],a.bIndex=A.indexB,a.order=A.props.order,a.type=A.props.flag,a.key=A.props.key,a.test(r,!1)){let s=n.subsetBuilder(!1);s.addToUnit(a.a.unit.id,a.a.element),s.addToUnit(a.b.unit.id,a.b.element),i.add(s.getStructure())}return r.popCurrentBond(),i.getSelection()}}var KK={};ki(KK,{exceptBy:()=>dXe,expandProperty:()=>fXe,includeConnected:()=>BXe,includeSurroundings:()=>uXe,intersectBy:()=>mXe,querySelection:()=>gXe,surroundingLigands:()=>CXe,union:()=>pXe,wholeResidues:()=>sXe});var a0=class{constructor(t){this.parent=t;this.ids=[];this.unitMap=_c.Mutable();this.parentId=-1;this.currentUnit=yo.create();this.elementCount=0}addToUnit(t,r){let n=this.unitMap.get(t);if(n)yo.add(n,r,r)&&this.elementCount++;else{let o=yo.create();yo.add(o,r,r),this.unitMap.set(t,o),this.ids[this.ids.length]=t,this.elementCount++}}has(t,r){let n=this.unitMap.get(t);return n?yo.has(n,r):!1}beginUnit(t){this.parentId=t,this.unitMap.has(t)?this.currentUnit=this.unitMap.get(t):this.currentUnit=this.currentUnit.array.length>0?yo.create():this.currentUnit}addElement(t){yo.add(this.currentUnit,t,t)&&this.elementCount++}commitUnit(){this.currentUnit.array.length===0||this.unitMap.has(this.parentId)||(this.ids[this.ids.length]=this.parentId,this.unitMap.set(this.parentId,this.currentUnit),this.parentId=-1)}getStructure(){if(this.isEmpty)return Ye.Empty;let t=[];js(this.ids);let r=Jc.UnitEquivalenceBuilder();for(let n=0,o=this.ids.length;n<o;n++){let i=this.ids[n],a=this.parent.unitMap.get(i),A=this.unitMap.get(i).array,s=A.length;if(A.length===a.elements.length){t[t.length]=a,r.add(a.id,a);continue}s>1&&js(A);let c=a.getChild(je.ofSortedArray(A)),l=r.add(c.id,c);c!==l&&(c=l.applyOperator(c.id,c.conformation.operator,!0)),t[t.length]=c}return Ye.create(t,{parent:this.parent})}get isEmpty(){return this.elementCount===0}};function cD(e,t,r,n){return{type:e,key:t,elements:r,getIndex:n}}var kf=typeof process<"u"&&process.versions!=null&&process.versions.node!=null,UK=W6e();function W6e(){if(typeof File>"u"||kf){class e{arrayBuffer(){return this.blob.arrayBuffer()}slice(r,n,o){return this.blob.slice(r,n,o)}stream(){return this.blob.stream()}text(){return this.blob.text()}bytes(){return this.blob.bytes()}constructor(r,n,o){this.blob=new Blob(r,o),this.size=this.blob.size,this.type=this.blob.type,this.name=n,this.lastModified=o?.lastModified??0,this.webkitRelativePath=""}}return e}else return File}function dme(e){return e>>0}function iI(e,t){return e[t]|e[t+1]<<8}function tQ(e,t,r){e[t]=r&255,e[t+1]=r>>8&255}function rQ(e,t){return e[t+3]*(256*256*256)+(e[t+2]<<16|e[t+1]<<8|e[t])}function aI(e,t,r){e[t]=r&255,e[t+1]=r>>8&255,e[t+2]=r>>16&255,e[t+3]=r>>24&255}function X6e(e,t,r){let n="";for(let o=0;o<r;o++)n+=String.fromCharCode(e[t+o]);return n}function Z6e(e){return e.length<2?"0"+e:e}function pme(e,t,r){let n="",o;for(let i=0;i<r;i++)n+="%"+Z6e(e[t+i].toString(16));try{o=decodeURIComponent(n)}catch{return X6e(e,t,r)}return o}function fme(e,t,r){let n=r.length,o=0;for(let i=0;i<n;i++){let a=r.charCodeAt(i);if((a&4294967168)===0)e[t+o]=a,o++;else if((a&4294965248)===0)e[t+o]=192|a>>6,e[t+o+1]=128|a>>0&63,o+=2;else if((a&4294901760)===0)e[t+o]=224|a>>12,e[t+o+1]=128|a>>6&63,e[t+o+2]=128|a>>0&63,o+=3;else if((a&4294967295-(1<<21)+1)===0)e[t+o]=240|a>>18,e[t+o+1]=128|a>>12&63,e[t+o+2]=128|a>>6&63,e[t+o+3]=128|a>>0&63,o+=4;else throw new Error("e")}return o}function LK(e){let t=e.length,r=0;for(let n=0;n<t;n++){let o=e.charCodeAt(n);if((o&4294967168)===0)r++;else if((o&4294965248)===0)r+=2;else if((o&4294901760)===0)r+=3;else if((o&4294967295-(1<<21)+1)===0)r+=4;else throw new Error("e")}return r}var q6e=(function(){let e=new Uint32Array(256);for(let t=0;t<256;t++){let r=t;for(let n=0;n<8;n++)r&1?r=3988292384^r>>>1:r=r>>>1;e[t]=r}return e})();function $6e(e,t,r,n){for(let o=0;o<n;o++)e=q6e[(e^t[r+o])&255]^e>>>8;return e}function TK(e,t,r){return $6e(4294967295,e,t,r)^4294967295}var nN={deflate:void 0,"deflate-raw":void 0,gzip:void 0};function oN(e){if(nN[e]===void 0)try{new CompressionStream(e),nN[e]=!0}catch{nN[e]=!1}return!!nN[e]}var ar=(function(){let e=Uint16Array,t=Uint32Array;return{next_code:new e(16),bl_count:new e(16),ordr:[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15],of0:[3,4,5,6,7,8,9,10,11,13,15,17,19,23,27,31,35,43,51,59,67,83,99,115,131,163,195,227,258,999,999,999],exb:[0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,0,0,0],ldef:new e(32),df0:[1,2,3,4,5,7,9,13,17,25,33,49,65,97,129,193,257,385,513,769,1025,1537,2049,3073,4097,6145,8193,12289,16385,24577,65535,65535],dxb:[0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13,0,0],ddef:new t(32),flmap:new e(512),fltree:[],fdmap:new e(32),fdtree:[],lmap:new e(32768),ltree:[],ttree:[],dmap:new e(32768),dtree:[],imap:new e(512),itree:[],rev15:new e(32768),lhst:new t(286),dhst:new t(30),ihst:new t(19),lits:new t(15e3),strt:new e(65536),prev:new e(32768)}})();(function(){for(let r=0;r<32768;r++){let n=r;n=(n&2863311530)>>>1|(n&1431655765)<<1,n=(n&3435973836)>>>2|(n&858993459)<<2,n=(n&4042322160)>>>4|(n&252645135)<<4,n=(n&4278255360)>>>8|(n&16711935)<<8,ar.rev15[r]=(n>>>16|n<<16)>>>17}function t(r,n,o){for(;n--!==0;)r.push(0,o)}for(let r=0;r<32;r++)ar.ldef[r]=ar.of0[r]<<3|ar.exb[r],ar.ddef[r]=ar.df0[r]<<4|ar.dxb[r];t(ar.fltree,144,8),t(ar.fltree,112,9),t(ar.fltree,24,7),t(ar.fltree,8,8),AI(ar.fltree,9),lD(ar.fltree,9,ar.flmap),uD(ar.fltree,9),t(ar.fdtree,32,5),AI(ar.fdtree,5),lD(ar.fdtree,5,ar.fdmap),uD(ar.fdtree,5),t(ar.itree,19,0),t(ar.ltree,286,0),t(ar.dtree,30,0),t(ar.ttree,320,0)})();function lD(e,t,r){let n=e.length,o=ar.rev15;for(let i=0;i<n;i+=2)if(e[i+1]!==0){let a=i>>1,A=e[i+1],s=a<<4|A,c=t-A,l=e[i]<<c,u=l+(1<<c);for(;l!==u;){let g=o[l]>>>15-t;r[g]=s,l++}}}function AI(e,t){let r=e.length,n=ar.bl_count;for(let a=0;a<=t;a++)n[a]=0;for(let a=1;a<r;a+=2)n[e[a]]++;let o=ar.next_code,i=0;n[0]=0;for(let a=1;a<=t;a++)i=i+n[a-1]<<1,o[a]=i;for(let a=0;a<r;a+=2){let A=e[a+1];A!==0&&(e[a]=o[A],o[A]++)}}function uD(e,t){let r=ar.rev15,n=15-t;for(let o=0;o<e.length;o+=2){let i=e[o]<<t-e[o+1];e[o]=r[i]>>>n}}function eWe(e,t){let r=t===void 0;return t===void 0&&(t=new Uint8Array(e.length>>>2<<3)),{data:e,buf:t,noBuf:r,BFINAL:0,off:0,pos:0}}function tWe(e,t){let{data:r,noBuf:n}=e,{buf:o,BFINAL:i,off:a,pos:A}=e,s=0;for(;i===0&&s<t;){let c,l,u=0,g=0;i=GK(r,A,1),s+=1;let m=GK(r,A+1,2);if(A+=3,m===0){(A&7)!==0&&(A+=8-(A&7));let p=(A>>>3)+4,d=r[p-4]|r[p-3]<<8;n&&(o=PK(o,a+d)),o.set(new Uint8Array(r.buffer,r.byteOffset+p,d),a),A=p+d<<3,a+=d;continue}if(n&&(o=PK(o,a+(1<<17))),m===1)c=ar.flmap,l=ar.fdmap,u=511,g=31;else if(m===2){let p=nQ(r,A,5)+257,d=nQ(r,A+5,5)+1,f=nQ(r,A+10,4)+4;A+=14;for(let Q=0;Q<38;Q+=2)ar.itree[Q]=0,ar.itree[Q+1]=0;let I=1;for(let Q=0;Q<f;Q++){let E=nQ(r,A+Q*3,3);ar.itree[(ar.ordr[Q]<<1)+1]=E,E>I&&(I=E)}A+=3*f,AI(ar.itree,I),lD(ar.itree,I,ar.imap),c=ar.lmap,l=ar.dmap,A=rWe(ar.imap,(1<<I)-1,p+d,r,A,ar.ttree);let C=Bme(ar.ttree,0,p,ar.ltree);u=(1<<C)-1;let y=Bme(ar.ttree,p,d,ar.dtree);g=(1<<y)-1,AI(ar.ltree,C),lD(ar.ltree,C,c),AI(ar.dtree,y),lD(ar.dtree,y,l)}else throw new Error(`unknown BTYPE ${m}`);for(;;){let p=c[NK(r,A)&u];A+=p&15;let d=p>>>4;if(!(d>>>8))o[a++]=d;else{if(d===256)break;{let f=a+d-254;if(d>264){let E=ar.ldef[d-257];f=a+(E>>>3)+nQ(r,A,E&7),A+=E&7}let I=l[NK(r,A)&g];A+=I&15;let C=I>>>4,y=ar.ddef[C],Q=(y>>>4)+GK(r,A,y&15);for(A+=y&15,n&&(o=PK(o,a+(1<<17)));a<f;)o[a]=o[a++-Q],o[a]=o[a++-Q],o[a]=o[a++-Q],o[a]=o[a++-Q];a=f}}}}e.buf=o,e.BFINAL=i,e.off=a,e.pos=A}async function Ime(e,t,r){if(t[0]===3&&t[1]===0)return r||new Uint8Array(0);if(oN("deflate-raw")){let o=new DecompressionStream("deflate-raw"),a=new Blob([t]).stream().pipeThrough(o),A=0,s=[],c=a.getReader(),l=async()=>{let{done:u,value:g}=await c.read();if(!u)return e.shouldUpdate&&await e.update({message:"Inflating blocks...",current:A,max:r?.length}),r?r.set(g,A):s.push(g),A+=g.length,l()};if(await l(),!r){r=new Uint8Array(A);for(let u=0,g=0;u<s.length;u++)r.set(s[u],g),g+=s[u].length}return r}let n=eWe(t,r);for(;n.BFINAL===0;)e.shouldUpdate&&await e.update({message:"Inflating blocks...",current:n.pos,max:t.length}),tWe(n,100);return n.buf.length===n.off?n.buf:n.buf.slice(0,n.off)}function PK(e,t){let r=e.length;if(t<=r)return e;let n=new Uint8Array(Math.max(r<<1,t));return n.set(e,0),n}function rWe(e,t,r,n,o,i){let a=0;for(;a<r;){let A=e[NK(n,o)&t];o+=A&15;let s=A>>>4;if(s<=15)i[a]=s,a++;else{let c=0,l=0;s===16?(l=3+nQ(n,o,2),o+=2,c=i[a-1]):s===17?(l=3+nQ(n,o,3),o+=3):s===18&&(l=11+nQ(n,o,7),o+=7);let u=a+l;for(;a<u;)i[a]=c,a++}}return o}function Bme(e,t,r,n){let o=0,i=0,a=n.length>>>1;for(;i<r;){let A=e[i+t];n[i<<1]=0,n[(i<<1)+1]=A,A>o&&(o=A),i++}for(;i<a;)n[i<<1]=0,n[(i<<1)+1]=0,i++;return o}function nQ(e,t,r){return(e[t>>>3]|e[(t>>>3)+1]<<8)>>>(t&7)&(1<<r)-1}function GK(e,t,r){return(e[t>>>3]|e[(t>>>3)+1]<<8|e[(t>>>3)+2]<<16)>>>(t&7)&(1<<r)-1}function NK(e,t){return(e[t>>>3]|e[(t>>>3)+1]<<8|e[(t>>>3)+2]<<16)>>>(t&7)}function iN(e,t,r){let n=[],o=e.length,i=t.length;for(let p=0;p<i;p+=2)t[p]=0,t[p+1]=0;for(let p=0;p<o;p++)e[p]!==0&&n.push({lit:p,f:e[p],d:void 0});let a=n.length,A=n.slice(0);if(a===0)return 0;if(a===1){let p=n[0].lit,d=p===0?1:0;return t[(p<<1)+1]=1,t[(d<<1)+1]=1,1}n.sort(function(p,d){return p.f-d.f});let s=n[0],c=n[1],l=0,u=1,g=2;for(n[0]={lit:-1,f:s.f+c.f,l:s,r:c,d:0};u!==a-1;)l!==u&&(g===a||n[l].f<n[g].f)?s=n[l++]:s=n[g++],l!==u&&(g===a||n[l].f<n[g].f)?c=n[l++]:c=n[g++],n[u++]={lit:-1,f:s.f+c.f,l:s,r:c,d:void 0};let m=MK(n[u-1],0);m>r&&(nWe(A,r,m),m=r);for(let p=0;p<a;p++)t[(A[p].lit<<1)+1]=A[p].d;return m}function MK(e,t){return e.lit!==-1?(e.d=t,t):Math.max(MK(e.l,t+1),MK(e.r,t+1))}function nWe(e,t,r){let n=0,o=0,i=1<<r-t;for(e.sort(function(a,A){return A.d===a.d?a.f-A.f:A.d-a.d}),n=0;n<e.length&&e[n].d>t;n++){let a=e[n].d;e[n].d=t,o+=i-(1<<r-a)}for(o=o>>>r-t;o>0;){let a=e[n].d;a<t?(e[n].d++,o-=1<<t-a-1):n++}for(;n>=0;n--)e[n].d===t&&o<0&&(e[n].d--,o++);o!==0&&console.log("debt left")}function oWe(e,t,r,n){let{lits:o,strt:i,prev:a}=ar;return{data:e,out:t,opt:aWe[n],i:0,pos:r<<3,cvrd:0,dlen:e.length,li:0,lc:0,bs:0,ebits:0,c:0,nc:0,lits:o,strt:i,prev:a}}function iWe(e,t){let{data:r,dlen:n,out:o,opt:i}=e,{i:a,pos:A,cvrd:s,li:c,lc:l,bs:u,ebits:g,c:m,nc:p}=e,{lits:d,strt:f,prev:I}=ar,C=Math.min(a+t,n);for(;a<C;a++){if(m=p,a+1<n-2){p=kK(r,a+1);let y=a+1&32767;I[y]=f[p],f[p]=y}if(s<=a){(c>14e3||l>26697)&&n-a>100&&(s<a&&(d[c]=a-s,c+=2,s=a),A=Eme(a===n-1||s===n?1:0,d,c,g,r,u,a-u,o,A),c=l=g=0,u=a);let y=0;if(a<n-2&&(y=AWe(r,a,I,m,Math.min(i[2],n-a),i[3])),y!==0){let Q=y>>>16,E=y&65535,b=yme(Q,ar.of0);ar.lhst[257+b]++;let x=yme(E,ar.df0);ar.dhst[x]++,g+=ar.exb[b]+ar.dxb[x],d[c]=Q<<23|a-s,d[c+1]=E<<16|b<<8|x,c+=2,s=a+Q}else ar.lhst[r[a]]++;l++}}e.i=a,e.pos=A,e.cvrd=s,e.li=c,e.lc=l,e.bs=u,e.ebits=g,e.c=m,e.nc=p}var aWe=[[0,0,0,0,0],[4,4,8,4,0],[4,5,16,8,0],[4,6,16,16,0],[4,10,16,32,0],[8,16,32,32,0],[8,16,128,128,0],[8,32,128,256,0],[32,128,258,1024,1],[32,258,258,4096,1]];async function Qme(e,t,r,n,o){if(oN("deflate-raw")){let p=new CompressionStream("deflate-raw"),I=new Blob([t]).stream().pipeThrough(p).getReader(),C=n,y=async()=>{let{done:Q,value:E}=await I.read();if(!Q)return e.shouldUpdate&&await e.update({message:"Deflating...",current:C,max:r.length}),r.set(E,C),C+=E.length,y()};return await y(),C}let i=oWe(t,r,n,o),{dlen:a}=i;if(o===0){let{i:p,pos:d}=i;for(;p<a;){let f=Math.min(65535,a-p);A0(r,d,p+f===a?1:0),d=bme(t,p,f,r,d+8),p+=f}return d>>>3}for(a>2&&(i.nc=kK(t,0),i.strt[i.nc]=0);i.i<a;)e.shouldUpdate&&await e.update({message:"Deflating...",current:i.i,max:a}),iWe(i,1024*1024);let{li:A,cvrd:s,pos:c}=i,{i:l,lits:u,bs:g,ebits:m}=i;for((g!==l||t.length===0)&&(s<l&&(u[A]=l-s,A+=2,s=l),c=Eme(1,u,A,m,t,g,l-g,r,c));(c&7)!==0;)c++;return c>>>3}function AWe(e,t,r,n,o,i){let a=t&32767,A=r[a],s=a-A+32768&32767;if(A===a||n!==kK(e,t-s))return 0;let c=0,l=0,u=Math.min(32767,t);for(;s<=u&&--i!==0&&A!==a;){if(c===0||e[t+c]===e[t+c-s]){let g=sWe(e,t,s);if(g>c){if(c=g,l=s,c>=o)break;s+2<g&&(g=s+2);let m=0;for(let p=0;p<g-2;p++){let d=t-s+p+32768&32767,f=r[d],I=d-f+32768&32767;I>m&&(m=I,A=d)}}}a=A,A=r[a],s+=a-A+32768&32767}return c<<16|l}function sWe(e,t,r){if(e[t]!==e[t-r]||e[t+1]!==e[t+1-r]||e[t+2]!==e[t+2-r])return 0;let n=t,o=Math.min(e.length,t+258);for(t+=3;t<o&&e[t]===e[t-r];)t++;return t-n}function kK(e,t){return(e[t]<<8|e[t+1])+(e[t+2]<<4)&65535}function Eme(e,t,r,n,o,i,a,A,s){ar.lhst[256]++;let[c,l,u,g,m,p,d,f]=cWe(),I=((s+3&7)===0?0:8-(s+3&7))+32+(a<<3),C=n+Q2(ar.fltree,ar.lhst)+Q2(ar.fdtree,ar.dhst),y=n+Q2(ar.ltree,ar.lhst)+Q2(ar.dtree,ar.dhst);y+=14+3*p+Q2(ar.itree,ar.ihst)+(ar.ihst[16]*2+ar.ihst[17]*3+ar.ihst[18]*7);for(let E=0;E<286;E++)ar.lhst[E]=0;for(let E=0;E<30;E++)ar.dhst[E]=0;for(let E=0;E<19;E++)ar.ihst[E]=0;let Q=I<C&&I<y?0:C<y?1:2;if(aN(A,s,e),aN(A,s+1,Q),s+=3,Q===0){for(;(s&7)!==0;)s++;s=bme(o,i,a,A,s)}else{let E,b;if(Q===1)E=ar.fltree,b=ar.fdtree;else if(Q===2){AI(ar.ltree,c),uD(ar.ltree,c),AI(ar.dtree,l),uD(ar.dtree,l),AI(ar.itree,u),uD(ar.itree,u),E=ar.ltree,b=ar.dtree,A0(A,s,g-257),s+=5,A0(A,s,m-1),s+=5,A0(A,s,p-4),s+=4;for(let S=0;S<p;S++)A0(A,s+S*3,ar.itree[(ar.ordr[S]<<1)+1]);s+=3*p,s=Cme(d,ar.itree,A,s),s=Cme(f,ar.itree,A,s)}else Or(Q);let x=i;for(let S=0;S<r;S+=2){let w=t[S],R=w>>>23,T=x+(w&(1<<23)-1);for(;x<T;)s=E2(o[x++],E,A,s);if(R!==0){let L=t[S+1],F=L>>16,v=L>>8&255,U=L&255;s=E2(257+v,E,A,s),A0(A,s,R-ar.of0[v]),s+=ar.exb[v],s=E2(U,b,A,s),aN(A,s,F-ar.df0[U]),s+=ar.dxb[U],x+=R}}s=E2(256,E,A,s)}return s}function bme(e,t,r,n,o){let i=o>>>3;return n[i]=r,n[i+1]=r>>>8,n[i+2]=255-n[i],n[i+3]=255-n[i+1],i+=4,n.set(new Uint8Array(e.buffer,t,r),i),o+(r+4<<3)}function cWe(){let e=iN(ar.lhst,ar.ltree,15),t=iN(ar.dhst,ar.dtree,15),r=[],n=hme(ar.ltree,r),o=[],i=hme(ar.dtree,o);for(let s=0;s<r.length;s+=2)ar.ihst[r[s]]++;for(let s=0;s<o.length;s+=2)ar.ihst[o[s]]++;let a=iN(ar.ihst,ar.itree,7),A=19;for(;A>4&&ar.itree[(ar.ordr[A-1]<<1)+1]===0;)A--;return[e,t,a,n,i,A,r,o]}function Q2(e,t){let r=0;for(let n=0;n<t.length;n++)r+=t[n]*e[(n<<1)+1];return r}function Cme(e,t,r,n){for(let o=0;o<e.length;o+=2){let i=e[o],a=e[o+1];n=E2(i,t,r,n);let A=i===16?2:i===17?3:7;i>15&&(A0(r,n,a),n+=A)}return n}function hme(e,t){let r=e.length;for(;r!==2&&e[r-1]===0;)r-=2;for(let n=0;n<r;n+=2){let o=e[n+1],i=n+3<r?e[n+3]:-1,a=n+5<r?e[n+5]:-1,A=n===0?-1:e[n-1];if(o===0&&i===o&&a===o){let s=n+5;for(;s+2<r&&e[s+2]===o;)s+=2;let c=Math.min(s+1-n>>>1,138);c<11?t.push(17,c-3):t.push(18,c-11),n+=c*2-2}else if(o===A&&i===o&&a===o){let s=n+5;for(;s+2<r&&e[s+2]===o;)s+=2;let c=Math.min(s+1-n>>>1,6);t.push(16,c-3),n+=c*2-2}else t.push(o,0)}return r>>>1}function yme(e,t){let r=0;return t[r|16]<=e&&(r|=16),t[r|8]<=e&&(r|=8),t[r|4]<=e&&(r|=4),t[r|2]<=e&&(r|=2),t[r|1]<=e&&(r|=1),r}function E2(e,t,r,n){return aN(r,n,t[e<<1]),n+t[(e<<1)+1]}function A0(e,t,r){r=r<<(t&7);let n=t>>>3;e[n]|=r,e[n+1]|=r>>>8}function aN(e,t,r){r=r<<(t&7);let n=t>>>3;e[n]|=r,e[n+1]|=r>>>8,e[n+2]|=r>>>16}async function oQ(e,t,r=!1){let n=Object.create(null),o=new Uint8Array(t);if(iI(o,0)!==19280)throw new Error('Invalid ZIP file. A valid ZIP file must start with two magic bytes \\x50\\x4b ("PK" in ASCII).');let i=o.length-4;for(;rQ(o,i)!==101010256;)i--;let a=i;a+=4,a+=4;let A=iI(o,a);a+=2,a+=2,a+=4;let s=rQ(o,a);a+=4,a=s;for(let c=0;c<A;c++){a+=4,a+=4,a+=4,a+=4,a+=4,a+=4,a+=4;let l=iI(o,a),u=iI(o,a+2),g=iI(o,a+4);a+=6,a+=8;let m=rQ(o,a);a+=4,a+=l+u+g,await lWe(e,o,m,n,r)}return n}async function lWe(e,t,r,n,o){r+=4,r+=2,r+=2;let i=iI(t,r);r+=2,r+=4,r+=4;let a=rQ(t,r);r+=4;let A=rQ(t,r);r+=4;let s=iI(t,r);r+=2;let c=iI(t,r);r+=2;let l=pme(t,r,s);if(r+=s,r+=c,o){n[l]={size:A,csize:a};return}let u=new Uint8Array(t.buffer,r,a);if(i===0)n[l]=u;else if(i===8){let g=new Uint8Array(A);await HK(e,u,g),n[l]=g}else throw new Error(`unknown compression method: ${i}`)}async function HK(e,t,r){return Ime(e,t,r)}function gD(e,t,r){return HK(e,new Uint8Array(t.buffer,t.byteOffset+2,t.length-6),r)}async function AN(e,t,r){let n=t[3],o=10;if(n&4){let l=iI(t,o);o+=l}if(n&8){let l=o;for(;t[l]!==0;)++l;o=l+1}if(n&16){let l=o;for(;t[l]!==0;)++l;o=l+1}n&1&&(o+=2);let i=dme(rQ(t,t.length-8)),a=rQ(t,t.length-4);r===void 0&&(r=new Uint8Array(a));let A=new Uint8Array(t.buffer,t.byteOffset+o,t.length-o-8),s=await HK(e,A,r),c=TK(s,0,s.length);return i!==c&&console.error("ungzip: checksums don't match"),s}async function uWe(e,t,r){r===void 0&&(r={level:6});let n=new Uint8Array(50+Math.floor(t.length*1.1)),o=await Qme(e,t,n,0,r.level);return new Uint8Array(n.buffer,0,o)}function sN(e,t=!1){return ve.create("Zip",r=>s0(r,e,t))}async function s0(e,t,r=!1){let n=0,o={};for(let u in t){let g=!gWe(u)&&!r,m=t[u],p=TK(m,0,m.length);o[u]={cpr:g,usize:m.length,crc:p,file:g?await uWe(e,m):m}}for(let u in o)n+=o[u].file.length+30+46+2*LK(u);n+=22;let i=new Uint8Array(n),a=0,A=[];for(let u in o){let g=o[u];A.push(a),a=xme(i,a,u,g,0)}let s=0,c=a;for(let u in o){let g=o[u];A.push(a),a=xme(i,a,u,g,1,A[s++])}let l=a-c;return aI(i,a,101010256),a+=4,a+=4,tQ(i,a,s),a+=2,tQ(i,a,s),a+=2,aI(i,a,l),a+=4,aI(i,a,c),a+=4,a+=2,i.buffer}function gWe(e){let t=e.split(".").pop().toLowerCase();return"png,jpg,jpeg,zip".indexOf(t)!==-1}function xme(e,t,r,n,o,i=0){let a=n.file;aI(e,t,o===0?67324752:33639248),t+=4,o===1&&(t+=2),tQ(e,t,20),t+=2,tQ(e,t,0),t+=2,tQ(e,t,n.cpr?8:0),t+=2,aI(e,t,0),t+=4,aI(e,t,n.crc),t+=4,aI(e,t,a.length),t+=4,aI(e,t,n.usize),t+=4,tQ(e,t,LK(r)),t+=2,tQ(e,t,0),t+=2,o===1&&(t+=2,t+=2,t+=6,aI(e,t,i),t+=4);let A=fme(e,t,r);return t+=A,o===0&&(e.set(a,t),t+=a.length),t}function sI(e,t){return fWe(e,t)}function c0(e){return typeof e=="string"?Dme(e,e,"string"):Dme(e.title,e.url,e.type||"string",e.body,e.headers)}function mWe(e){if(kf)throw new Error("`isDone` should not be used when running in Node.js");if(e instanceof FileReader)return e.readyState===FileReader.DONE;if(e instanceof XMLHttpRequest)return e.readyState===XMLHttpRequest.DONE;throw new Error("unknown data type")}function Sme(e){return e?"Failed to download data. Possible reasons: Resource is not available, or CORS is not allowed on the server.":"Failed to open file."}function Rme(e,t,r){if(kf)throw new Error("`readData` should not be used when running in Node.js");return new Promise((n,o)=>{if(mWe(r)){let{error:a}=r;a!=null?o(a??Sme(r instanceof XMLHttpRequest)):n(r);return}let i=!1;r.onerror=a=>{if(i)return;let{error:A}=a.target;o(A??Sme(r instanceof XMLHttpRequest))},r.onprogress=a=>{if(!(!e.shouldUpdate||i))try{a.lengthComputable?e.update({message:t,isIndeterminate:!1,current:a.loaded,max:a.total}):e.update({message:`${t} ${(a.loaded/1024/1024).toFixed(2)} MB`,isIndeterminate:!0})}catch(A){i=!0,o(A)}},r.onload=a=>{n(r)}})}function Ume(e){return/\.gz$/i.test(e)?1:/\.zip$/i.test(e)?2:0}var dWe=/^(__MACOSX|.DS_Store)/;async function pWe(e,t,r){switch(r){case 0:return t;case 1:return AN(e,t);case 2:let n=await oQ(e,t.buffer),o=Object.keys(n).filter(i=>!dWe.test(i));if(o.length!==1)throw new Error("can only decompress zip files with a single entry");return n[o[0]]}}async function cN(e,t,r,n){if(t===null)throw new Error("no data given");let o=new Uint8Array(t);if(n!==0&&r!=="zip"&&(o=await pWe(e,o,n)),r==="binary")return o;if(r==="zip")return await oQ(e,o.buffer);if(r==="string")return rD(o);if(r==="xml")return new DOMParser().parseFromString(rp(o),"application/xml");if(r==="json")return JSON.parse(rp(o));throw new Error(`could not get requested response data '${r}'`)}function fWe(e,t){if(kf)return BWe(e,t);let r;return ve.create("Read File",async n=>{try{await n.update({message:"Opening file...",canAbort:!0}),r=new FileReader,r.readAsArrayBuffer(e);let i=(await Rme(n,"Reading...",r)).result;return await n.update({message:"Processing file...",canAbort:!1}),await cN(n,i,t,Ume(e.name))}finally{r=void 0}},()=>{r&&r.abort()})}function BWe(e,t){return ve.create("Read File",async r=>{await r.update({message:"Opening file...",canAbort:!1});let n=await e.arrayBuffer();return await r.update({message:"Processing file...",canAbort:!1}),await cN(r,n,t,Ume(e.name))})}var b2=class e{static{this.pool=[]}static{this.poolSize=15}static get(){if(kf)throw new Error("`RequestPool.get` should not be used when running in Node.js");return this.pool.length?this.pool.pop():new XMLHttpRequest}static emptyFunc(){}static deposit(t){this.pool.length<this.poolSize&&(t.onabort=e.emptyFunc,t.onerror=e.emptyFunc,t.onload=e.emptyFunc,t.onprogress=e.emptyFunc,this.pool.push(t))}};function IWe(e,t){if(e.status>=200&&e.status<400){let{response:r}=e;if(b2.deposit(e),(t==="binary"||t==="zip")&&r instanceof ArrayBuffer)return new Uint8Array(r);if(t==="string"&&typeof r=="string")return r;if(t==="xml"&&r instanceof XMLDocument)return r;if(t==="json"&&typeof r=="object")return r;throw new Error(`could not get requested response data '${t}'`)}else throw b2.deposit(e),new Error(`Download failed with status code ${e.status}`)}function CWe(e){switch(e){case"json":return"json";case"xml":return"document";case"string":return"text";case"binary":return"arraybuffer";case"zip":return"arraybuffer"}}function Dme(e,t,r,n,o){if(kf)return t.startsWith("file://")?QWe(e,t,r,n,o):EWe(e,t,r,n,o);let i;return ve.create(e||"Download",async a=>{if(i=b2.get(),i.open(n?"post":"get",t,!0),o)for(let[c,l]of Object.entries(o))i.setRequestHeader(c,l);i.responseType=CWe(r),i.send(n),await a.update({message:"Waiting for server...",canAbort:!0});let A=await Rme(a,"Downloading...",i);return i=void 0,await a.update({message:"Parsing response...",canAbort:!1}),IWe(A,r)},()=>{i&&(i.abort(),i=void 0)})}var vme;function hWe(){if(!vme)throw new Error("When running in Node.js and reading from files, call mol-util/data-source's setFSModule function first.");return vme}function yWe(e){return new Promise((t,r)=>{hWe().readFile(e,(n,o)=>{n?r(n):t(o)})})}function QWe(e,t,r,n,o){if(!kf)throw new Error("This function should only be used when running in Node.js");if(!t.startsWith("file://"))throw new Error("This function is only for URLs with protocol file://");return ve.create(e??"Download",async i=>{let a=t.substring(7);await i.update({message:"Loading file...",canAbort:!1});let A=await yWe(a);return await i.update({message:"Parsing response...",canAbort:!1}),await cN(i,A.buffer,r,0)})}function EWe(e,t,r,n,o){if(!kf)throw new Error("This function should only be used when running in Node.js");let i=new AbortController;return ve.create(e??"Download",async a=>{await a.update({message:"Downloading...",canAbort:!0});let A=await fetch(t,{signal:i.signal,method:n?"POST":"GET",body:n,headers:o});if(!(A.status>=200&&A.status<400))throw new Error(`Download failed with status code ${A.status}`);let s=await A.bytes();return await a.update({message:"Parsing response...",canAbort:!1}),await cN(a,s.buffer,r,0)},()=>{i.abort()})}async function Lme(e,t,r,n){let o=r.length,i=new Array(r.length);await e.update({message:"Downloading...",current:0,max:o});let a=[],A=[],s=0;for(let l=Math.min(o,n);s<l;s++){let u=r[s];a.push(wme(s,u.id,t.resolve(gn.getUrlAsset(t,u.url),u.isBinary?"binary":"string").runAsChild(e))),A.push(s)}let c=0;for(;a.length>0;){let l=await Promise.race(a),u=r[l.index],g=A.indexOf(l.index);if(c++,l.kind==="error"&&!u.canFail)throw new Error(`${u.url}: ${l.error}`);if(e.shouldUpdate&&await e.update({message:"Downloading...",current:c,max:o}),i[l.index]=l,a=a.filter(Fme,g),A=A.filter(Fme,g),s<o){let m=r[s],p=t.resolve(gn.getUrlAsset(t,m.url),m.isBinary?"binary":"string").runAsChild(e);a.push(wme(s,m.id,p)),A.push(s),s++}}return i}function Fme(e,t){return this!==t}async function wme(e,t,r){try{return{kind:"ok",result:await r,index:e,id:t}}catch(n){return{kind:"error",error:n,index:e,id:t}}}var gn;(A=>{function e(s,c){return{kind:"url",id:Hn.create22(),url:s,...c}}A.Url=e;function t(s){return{kind:"file",id:Hn.create22(),name:s.name,file:s}}A.File=t;function r(s){return s?.kind==="url"}A.isUrl=r;function n(s){return s?.kind==="file"}A.isFile=n;function o(s,c,l){return{data:s,dispose:()=>{l.release(c)}}}A.Wrapper=o;function i(s){return typeof s=="string"?s:s.url}A.getUrl=i;function a(s,c,l,u){return typeof c=="string"?s.tryFindUrl(c,l,u)||e(c,{body:l,headers:u}):c}A.getUrlAsset=a})(gn||={});function bWe(e,t){let r=e?Object.keys(e):[],n=t?Object.keys(t):[];if(r.length!==n.length)return!1;for(let o of r)if(e[o]!==t[o])return!1;return!0}var lN=class{constructor(){this._assets=new Map}get assets(){return JS(this._assets.values())}tryFindUrl(t,r,n){let o=this.assets.values();for(;;){let i=o.next();if(i.done)return;let a=i.value.asset;if(gn.isUrl(a)&&a.url===t&&(a.body||"")===(r||"")&&bWe(a.headers,n))return a}}tryFindFilename(t){let r=this._assets.values();for(;;){let{done:n,value:o}=r.next();if(n)break;if(o.file.name===t)return o.asset}}set(t,r,n){this._assets.set(t.id,{asset:t,file:r,refCount:0,tag:n?.tag,isStatic:n?.isStatic})}get(t){return this._assets.get(t.id)}delete(t){return this._assets.delete(t.id)}has(t){return this._assets.has(t.id)}resolve(t,r,n=!0){return gn.isUrl(t)?ve.create(`Download ${t.title||t.url}`,async o=>{if(this._assets.has(t.id)){let A=this._assets.get(t.id);return A.refCount++,gn.Wrapper(await sI(A.file,r).runInContext(o),t,this)}if(!n)return gn.Wrapper(await c0({...t,type:r}).runInContext(o),t,this);let i=await c0({...t,type:"binary"}).runInContext(o),a=new UK([i],"raw-data");return this._assets.set(t.id,{asset:t,file:a,refCount:1}),gn.Wrapper(await sI(a,r).runInContext(o),t,this)}):ve.create(`Read ${t.name}`,async o=>{if(this._assets.has(t.id)){let i=this._assets.get(t.id);return i.refCount++,gn.Wrapper(await sI(i.file,r).runInContext(o),t,this)}if(!(t.file instanceof UK))throw new Error(`Cannot resolve file asset '${t.name}' (${t.id})`);return n&&this._assets.set(t.id,{asset:t,file:t.file,refCount:1}),gn.Wrapper(await sI(t.file,r).runInContext(o),t,this)})}release(t){let r=this._assets.get(t.id);r&&(r.refCount--,r.refCount<=0&&!r.isStatic&&this._assets.delete(t.id))}clearTag(t){let r=Array.from(this._assets.keys());for(let n of r){let o=this._assets.get(n);o&&o.tag===t&&this._assets.delete(n)}}clear(){this._assets.clear()}dispose(){this.clear()}};var h;(Fe=>{Fe.Essential={isEssential:!0};function t(Ae,fe){return fe&&(fe.label&&(Ae.label=fe.label),fe.description&&(Ae.description=fe.description),fe.legend&&(Ae.legend=fe.legend),fe.fieldLabels&&(Ae.fieldLabels=fe.fieldLabels),fe.isHidden&&(Ae.isHidden=fe.isHidden),fe.shortLabel&&(Ae.shortLabel=fe.shortLabel),fe.twoColumns&&(Ae.twoColumns=fe.twoColumns),fe.isEssential&&(Ae.isEssential=fe.isEssential),fe.category&&(Ae.category=fe.category),fe.hideIf&&(Ae.hideIf=fe.hideIf),fe.help&&(Ae.help=fe.help)),Ae}function r(Ae){let fe={...Ae};return fe.isOptional=!0,fe}Fe.Optional=r;function n(Ae,fe){return t({type:"value",defaultValue:Ae},fe)}Fe.Value=n;function o(Ae,fe,Qe){return t({type:"select",defaultValue:Te(Ae,fe),options:fe,cycle:Qe?.cycle},Qe)}Fe.Select=o;function i(Ae,fe,Qe){let Ie=t({type:"multi-select",defaultValue:Ae,options:fe},Qe);return Qe?.emptyValue&&(Ie.emptyValue=Qe.emptyValue),Ie}Fe.MultiSelect=i;function a(Ae,fe){return t({type:"boolean",defaultValue:Ae},fe)}Fe.Boolean=a;function A(Ae="",fe){return t({type:"text",defaultValue:Ae,multiline:fe?.multiline,placeholder:fe?.placeholder,disableInteractiveUpdates:fe?.disableInteractiveUpdates},fe)}Fe.Text=A;function s(Ae,fe){let Qe=t({type:"color",defaultValue:Ae},fe);return fe?.isExpanded&&(Qe.isExpanded=fe.isExpanded),Qe}Fe.Color=s;function c(Ae,fe){let Qe;if(typeof Ae=="string"){let Ie=ns(Ae);Qe={kind:Ie.type!=="qualitative"?"interpolate":"set",colors:Ie.list}}else Qe=Ae;return t({type:"color-list",presetKind:fe?.presetKind||"all",defaultValue:Qe,offsets:!!fe?.offsets},fe)}Fe.ColorList=c;function l(Ae,fe,Qe){return t(d({type:"vec3",defaultValue:Ae},fe),Qe)}Fe.Vec3=l;function u(Ae,fe){return t({type:"mat4",defaultValue:Ae},fe)}Fe.Mat4=u;function g(Ae,fe){let Qe=typeof Ae=="string"?gn.Url(Ae):gn.Url(Ae.url,{body:Ae.body});return t({type:"url",defaultValue:Qe},fe)}Fe.Url=g;function m(Ae){let fe=t({type:"file",defaultValue:null},Ae);return Ae?.accept&&(fe.accept=Ae.accept),fe}Fe.File=m;function p(Ae){let fe=t({type:"file-list",defaultValue:null},Ae);return Ae?.accept&&(fe.accept=Ae.accept),fe}Fe.FileList=p;function d(Ae,fe){return fe&&(typeof fe.min<"u"&&(Ae.min=fe.min),typeof fe.max<"u"&&(Ae.max=fe.max),typeof fe.step<"u"&&(Ae.step=fe.step)),Ae}function f(Ae,fe,Qe){let Ie=t(d({type:"number",defaultValue:Ae},fe),Qe);return Qe?.immediateUpdate&&(Ie.immediateUpdate=!0),Ie}Fe.Numeric=f;function I(Ae,fe,Qe){return t(d({type:"interval",defaultValue:Ae},fe),Qe)}Fe.Interval=I;function C(Ae,fe){let Qe=t({type:"line-graph",defaultValue:Ae},fe);return fe?.getVolume&&(Qe.getVolume=fe.getVolume),fe?.yAxis&&(Qe.yAxis=fe.yAxis),fe?.getPresets&&(Qe.getPresets=fe.getPresets),Qe}Fe.LineGraph=C;function y(Ae,fe){let Qe=t({type:"group",defaultValue:fe?.customDefault||k(Ae),params:Ae},fe);return fe?.presets&&(Qe.presets=fe.presets),fe?.isExpanded&&(Qe.isExpanded=fe.isExpanded),fe?.isFlat&&(Qe.isFlat=fe.isFlat),fe?.pivot&&(Qe.pivot=fe.pivot),Qe}Fe.Group=y;function Q(Ae){return y({},Ae)}Fe.EmptyGroup=Q;function E(Ae,fe,Qe,Ie){let le=Te(Ae,fe);return t({type:"mapped",defaultValue:{name:le,params:Qe(le).defaultValue},select:o(le,fe,Ie),map:Qe},Ie)}Fe.Mapped=E;function b(Ae,fe,Qe){let Ie=Qe?.options?Qe.options:Object.keys(fe).map(Oe=>[Oe,fe[Oe].label||Ra(Oe)]),le=Te(Ae,Ie);return t({type:"mapped",defaultValue:{name:le,params:fe[le].defaultValue},select:o(le,Ie,Qe),map:Oe=>fe[Oe]},Qe)}Fe.MappedStatic=b;function x(Ae,fe,Qe){let Ie=t({type:"object-list",element:Ae,getLabel:fe,ctor:S,defaultValue:Qe?.defaultValue||[]},Qe);return Qe?.presets&&(Ie.presets=Qe.presets),Ie}Fe.ObjectList=x;function S(){return k(this.element)}function w(){throw new Error("getValue not set. Fix runtime.")}function R(Ae=""){return{ref:Ae,getValue:w}}Fe.Ref=R;function T(Ae,fe,Qe){return t({type:"value-ref",defaultValue:R(Qe?.defaultRef),getOptions:Ae,resolveRef:fe},Qe)}Fe.ValueRef=T;function L(Ae){return t({type:"data-ref",defaultValue:R(Ae?.defaultRef)},Ae)}Fe.DataRef=L;function F(Ae){return{ref:Ae,getValue:w}}Fe.asDataRef=F;function v(Ae,fe,Qe){return t({type:"converted",defaultValue:fe(Qe.defaultValue),converted:Qe,fromValue:Ae,toValue:fe},Qe)}Fe.Converted=v;function U(Ae,fe,Qe,Ie,le){let Oe=Object.keys(fe).map(tt=>[tt,tt]);return t({type:"conditioned",select:o(Qe(Ae),Oe,le),defaultValue:Ae,conditionParams:fe,conditionForValue:Qe,conditionedValue:Ie},le)}Fe.Conditioned=U;function G(Ae,fe){return t({type:"script",defaultValue:Ae},fe)}Fe.Script=G;function N(Ae){return 0}Fe.For=N;function k(Ae){let fe={};for(let Qe of Object.keys(Ae))Ae[Qe].isOptional||(fe[Qe]=Ae[Qe].defaultValue);return fe}Fe.getDefaultValues=k;function J(Ae,fe,Qe){return()=>Ae(fe,Qe)}function H(Ae,fe,Qe){if(fe){if(Ae.type==="value-ref"){let Ie=fe;Ie.ref?Ie.getValue=J(Ae.resolveRef,Ie.ref,Qe):Ie.getValue=()=>{throw new Error("Unset ref in ValueRef value.")}}else if(Ae.type==="data-ref"){let Ie=fe;Ie.ref?Ie.getValue=J(Qe,Ie.ref,Qe):Ie.getValue=()=>{throw new Error("Unset ref in ValueRef value.")}}else if(Ae.type==="group")M(Ae.params,fe,Qe);else if(Ae.type==="mapped"){let Ie=fe,le=Ae.map(Ie.name);H(le,Ie.params,Qe)}else if(Ae.type==="object-list"){if(!_(Ae.element))return;for(let Ie of fe)M(Ae.element,Ie,Qe)}}}function z(Ae){if(Ae.type==="value-ref"||Ae.type==="data-ref")return!0;if(Ae.type==="group"){if(_(Ae.params))return!0}else if(Ae.type==="mapped"){for(let[fe]of Ae.select.options)if(z(Ae.map(fe)))return!0}else if(Ae.type==="object-list")return _(Ae.element);return!1}function _(Ae){for(let fe of Object.keys(Ae))if(z(Ae[fe]))return!0;return!1}function M(Ae,fe,Qe){for(let Ie of Object.keys(Ae))H(Ae[Ie],fe?.[Ie],Qe)}Fe.resolveRefs=M;function q(Ae,fe,Qe){if(fe==null)return Qe;if(Ae.type==="value-ref"||Ae.type==="data-ref"){let Ie=fe;Ie&&typeof Ie.ref=="string"&&Ie.ref&&Po(Qe,Ie.ref)}else if(Ae.type==="group")ne(Ae.params,fe,Qe);else if(Ae.type==="mapped"){let Ie=fe;if(!Ie)return Qe;let le=Ae.map(Ie.name);q(le,Ie.params,Qe)}else if(Ae.type==="object-list"){if(!_(Ae.element))return Qe;for(let Ie of fe)ne(Ae.element,Ie,Qe)}return Qe}function ne(Ae,fe,Qe){for(let Ie of Object.keys(Ae))q(Ae[Ie],fe?.[Ie],Qe);return Qe}function oe(Ae,fe,Qe){return!Ae||!fe?Qe:ne(Ae,fe,Qe)}Fe.collectRefs=oe;function ae(Ae,fe){for(let Qe of Object.keys(Ae))Ae[Qe].isOptional||(Ae[Qe].defaultValue=fe[Qe])}Fe.setDefaultValues=ae;function me(Ae){return ii(Ae)}Fe.clone=me;function Se(Ae,fe){}Fe.validate=Se;function ee(Ae,fe,Qe){if(fe===Qe)return!0;if(typeof fe!="object"||typeof Qe!="object")return!1;for(let Ie of Object.keys(Ae))if(!O(Ae[Ie],fe[Ie],Qe[Ie]))return!1;return!0}Fe.areEqual=ee;function O(Ae,fe,Qe){if(fe===Qe)return!0;if(Ae.type==="group")return ee(Ae.params,fe,Qe);if(Ae.type==="mapped"){let Ie=fe,le=Qe;if(Ie.name!==le.name)return!1;let Oe=Ae.map(Ie.name);return O(Oe,Ie.params,le.params)}else if(Ae.type==="multi-select"){let Ie=fe,le=Qe;if(Ie.length!==le.length)return!1;if(Ie.length<10){for(let Oe=0,tt=Ie.length;Oe<tt;Oe++)if(Ie[Oe]!==le[Oe]&&le.indexOf(Ie[Oe])<0)return!1}else{let Oe=new Set(le);for(let tt=0,it=Ie.length;tt<it;tt++)if(Ie[tt]!==le[tt]&&!Oe.has(Ie[tt]))return!1}return!0}else{if(Ae.type==="interval")return fe[0]===Qe[0]&&fe[1]===Qe[1];if(Ae.type==="line-graph"){let Ie=fe,le=Qe;if(Ie.length!==le.length)return!1;for(let Oe=0,tt=Ie.length;Oe<tt;Oe++)if(!Le.areEqual(Ie[Oe],le[Oe]))return!1;return!0}else{if(Ae.type==="vec3")return B.equals(fe,Qe);if(Ae.type==="mat4")return Y.areEqual(fe,Qe,1e-6);if(Ae.type==="script"){let Ie=fe,le=Qe;return Ie.language===le.language&&Ie.expression===le.expression}else if(Ae.type==="object-list"){let Ie=fe,le=Qe,Oe=Ie.length;if(Oe!==le.length)return!1;for(let tt=0;tt<Oe;tt++)if(!ee(Ae.element,Ie[tt],le[tt]))return!1;return!0}else if(typeof fe=="object"&&typeof Qe=="object")return KB(fe,Qe)}}return!1}Fe.isParamEqual=O;function X(Ae,fe,Qe){if(fe===void 0)return{...Qe};if(Qe===void 0)return{...fe};let Ie={};for(let le of Object.keys(Ae))Ie[le]=Ce(Ae[le],fe[le],Qe[le]);return Ie}Fe.merge=X;function Ce(Ae,fe,Qe){if(fe===void 0)return typeof Qe=="object"&&!Array.isArray(Qe)?{...Qe}:Qe;if(Qe===void 0)return typeof fe=="object"&&!Array.isArray(fe)?{...fe}:fe;if(Ae.type==="group")return X(Ae.params,fe,Qe);if(Ae.type==="mapped"){let Ie=fe,le=Qe;if(Ie.name!==le.name)return{...le};let Oe=Ae.map(le.name);return{name:le.name,params:Ce(Oe,Ie.params,le.params)}}else return Ae.type==="value"?Qe:typeof fe=="object"&&typeof Qe=="object"?Array.isArray(Qe)?Qe:{...fe,...Qe}:Qe}Fe.mergeParam=Ce;function Ne(Ae,fe){for(let Qe of Ae.options)if(Qe[0]===fe)return!0;return!1}function $(Ae,fe,Qe){if(fe==null)return Qe?Ae.defaultValue:void 0;if(Ae.type==="value")return fe;if(Ae.type==="group"){let Ie={};for(let le of Object.keys(Ae.params)){let Oe=Ae.params[le];fe[le]===void 0?Qe&&(Ie[le]=Oe.defaultValue):Ie[le]=$(Oe,fe[le],Qe)}return Ie}else if(Ae.type==="mapped"){let Ie=fe;if(typeof Ie.name!="string")return Ae.defaultValue;if(typeof Ie.params>"u")return Qe?Ae.defaultValue:void 0;if(!Ne(Ae.select,Ie.name))return Ae.defaultValue;let le=Ae.map(Ie.name);return{name:Ie.name,params:$(le,Ie.params,Qe)}}else{if(Ae.type==="select")return Ne(Ae,fe)?fe:Ae.defaultValue;if(Ae.type==="multi-select"){if(!Array.isArray(fe))return Ae.defaultValue;let Ie=fe.filter(function(le){return Ne(this,le)},Ae);return fe.length>0&&Ie.length===0?Ae.defaultValue:Ie}else if(Ae.type==="object-list")return Array.isArray(fe)?fe.map(Ie=>pe(Ae.element,Ie,Qe?"all":"skip")):Ae.defaultValue}return fe}function pe(Ae,fe,Qe){if(typeof fe!="object"||fe===null)return Qe?k(Ae):fe;let Ie={};for(let le of Object.keys(Ae)){let Oe=Ae[le];fe[le]===void 0?Qe==="all"&&(Ie[le]=Oe.defaultValue):Ie[le]=$(Oe,fe[le],Qe!=="skip")}return Ie}Fe.normalizeParams=pe;function ye(Ae,fe){let Qe=[];for(let Ie of Object.keys(Ae))if(!fe)typeof Ae[Ie]=="string"?Qe.push([Ie,Ae[Ie]]):Qe.push([Ie,fe===null?Ie:Ra(Ie)]);else{let le=fe(Ie,Ae[Ie]);Qe.push(typeof le=="string"?[Ie,le]:[Ie,le[0],le[1]])}return Qe}Fe.objectToOptions=ye;function Be(Ae,fe){let Qe=[];for(let Ie of Ae)fe?Qe.push([Ie,fe(Ie)]):Qe.push([Ie,fe===null?Ie:Ra(Ie)]);return Qe}Fe.arrayToOptions=Be;function De(Ae,fe){for(let Qe of Ae.options)if(Qe[0]===fe)return Qe[1];return""}Fe.optionLabel=De;function Te(Ae,fe){for(let Qe of fe)if(Qe[0]===Ae)return Ae;return fe.length>0?fe[0][0]:void 0}function be(Ae,fe){let Qe={};for(let Ie of Object.keys(fe)){let le=fe[Ie];!Ae[Ie]||le===null||le===void 0||Ae[Ie].defaultValue===le||(Qe[Ie]={...Ae[Ie],defaultValue:le})}return{...Ae,...Qe}}Fe.withDefaults=be})(h||={});var Tt;(n=>{n.is=hA.has,n.create=hA.create;let r;(C=>(C[C._=0]="_",C[C.H=1]="H",C[C.B=2]="B",C[C.E=4]="E",C[C.G=8]="G",C[C.I=16]="I",C[C.S=32]="S",C[C.T=64]="T",C[C.T3=128]="T3",C[C.T4=256]="T4",C[C.T5=512]="T5",C[C.T3S=1024]="T3S",C[C.T4S=2048]="T4S",C[C.T5S=4096]="T5S"))(r=n.Flag||={})})(Tt||={});var l0=class{constructor(t,r,n){this.partner1=Math.min(t,r),this.partner2=Math.max(t,r),this.type=n}};function Tme(e){let{unit:t,flags:r,proteinInfo:n}=e,o=t.conformation,{traceElementIndex:i}=t.model.atomicHierarchy.derived.residue,{residueIndices:a,nIndices:A}=n,s=a.length,c=(I,C)=>I===-1?B.setNaN(C):o.position(I,C),l=B(),u=B(),g=B(),m=B(),p=B(),d=B(),f=B();e:for(let I=2;I<s-2;I++){for(let w=0;w<4;w++){let R=I+w-2;if(c(i[R],m),c(A[R+1],p),B.squaredDistance(m,p)>6.25)continue e}let C=a[I-2],y=a[I],Q=a[I+2],E=i[C],b=i[y],x=i[Q];c(E,l),c(b,u),c(x,g),B.sub(d,l,u),B.sub(f,u,g);let S=yA(B.angle(d,f));S&&S>70&&(r[I]|=Tt.Flag.S)}}var xWe=9,uN=-27.888,SWe=-.5,Pme=-9.9;function DWe(e,t,r,n){let o=B.distance(e,n),i=B.distance(t,n),a=B.distance(t,r),A=B.distance(e,r),s=uN/o-uN/i,c=uN/a-uN/A,l=s+c;return l<Pme?Pme:l}function Gme(e,t,r){let{residueIndices:n,cIndices:o,hIndices:i,nIndices:a,oIndices:A}=t,{index:s}=e.model.atomicHierarchy,c=e.conformation,{traceElementIndex:l}=e.model.atomicHierarchy.derived.residue,u=n.length,g=[],m=[],p=[],d=B(),f=B(),I=B(),C=B(),y=B(),Q=B(),E=B();for(let b=0,x=n.length;b<x;++b){let S=b,w=n[b],R=A[S],T=o[S],L=l[w];if(R===-1||T===-1||s.findAtomOnResidue(w,"OXT")!==-1)continue;c.invariantPosition(R,d),c.invariantPosition(T,f),c.invariantPosition(L,I);let{indices:F,count:v}=r.find(I[0],I[1],I[2],xWe);for(let U=0;U<v;++U){let G=F[U];if(G===S||G-1===S||G+1===S)continue;let N=a[G];if(N===-1)continue;c.invariantPosition(N,C);let k=i[G];if(k===-1){if(G===0)continue;let H=G-1,z=A[H],_=o[H];if(z===-1||_===-1)continue;c.invariantPosition(z,E),c.invariantPosition(_,Q),B.sub(y,Q,E);let M=B.distance(E,Q);B.scaleAndAdd(y,C,y,1/M)}else c.invariantPosition(k,y);let J=DWe(d,f,C,y);J>SWe||(g[g.length]=S,m[m.length]=G,p[p.length]=J)}}return vWe(u,g,m,p)}function vWe(e,t,r,n){let o=new fa.DirectedEdgeBuilder(e,t,r),i=new Float32Array(o.slotCount);for(let a=0,A=o.edgeCount;a<A;a++)o.addNextEdge(),o.assignProperty(i,n[a]);return o.createGraph({energies:n})}function Nme(e){let{proteinInfo:t,hbonds:r,flags:n}=e,o=[Tt.Flag.T3S,Tt.Flag.T4S,Tt.Flag.T5S,Tt.Flag.T3,Tt.Flag.T4,Tt.Flag.T5];for(let i=0;i<3;i++)for(let a=0,A=t.residueIndices.length-1;a<A;++a)if(r.getDirectedEdgeIndex(a,a+i+3)!==-1)if(n[a]|=o[i+3]|o[i],e.params.oldDefinition)for(let s=1;s<i+3;++s)n[a+s]|=o[i+3]|Tt.Flag.T;else for(let s=0;s<=i+3;++s)n[a+s]|=o[i+3]|Tt.Flag.T}function Mme(e){let{proteinInfo:t,flags:r}=e,n=t.residueIndices.length,o=[Tt.Flag.T3S,Tt.Flag.T4S,Tt.Flag.T5S,Tt.Flag.T3,Tt.Flag.T4,Tt.Flag.T5],i=[0,0,0,Tt.Flag.G,Tt.Flag.H,Tt.Flag.I],a=e.params.oldOrdering?[4,3,5]:[3,4,5];for(let A=0;A<a.length;A++){let s=a[A];for(let c=1,l=n-s;c<l;c++){let u=Tt.create(r[c]),g=Tt.create(r[c-1]),m=Tt.create(r[c+1]);if(e.params.oldOrdering){if(s===3&&(Tt.is(u,Tt.Flag.H)||Tt.is(m,Tt.Flag.H))||s===5&&(Tt.is(u,Tt.Flag.H)||Tt.is(u,Tt.Flag.G)||Tt.is(m,Tt.Flag.H)||Tt.is(m,Tt.Flag.G)))continue}else if(s===4&&(Tt.is(u,Tt.Flag.G)||Tt.is(m,Tt.Flag.G))||s===5&&(Tt.is(u,Tt.Flag.H)||Tt.is(u,Tt.Flag.G)||Tt.is(m,Tt.Flag.H)||Tt.is(m,Tt.Flag.G)))continue;if(Tt.is(u,o[s])&&Tt.is(u,o[s-3])&&Tt.is(g,o[s])&&Tt.is(g,o[s-3]))if(e.params.oldDefinition)for(let p=0;p<s;p++)r[c+p]|=i[s];else for(let p=-1;p<=s;p++)r[c+p]|=i[s]}}}function FWe(e,t){if(t.type!==e.type||t.partner1!==e.firstEnd+1)return!1;if(t.type===0){if(t.partner2===e.secondEnd+1)return!0}else if(t.partner2===e.secondStart-1)return!0;return!1}function wWe(e,t){return e.type===t.type&&t.firstStart-e.firstEnd<6&&e.firstStart<t.firstStart&&t.nextLadder===0?e.type===0?kme(e,t):kme(t,e):!1}function kme(e,t){return t.secondStart-e.secondEnd>0&&(t.secondStart-e.secondEnd<6&&t.firstStart-e.firstEnd<3||t.secondStart-e.secondEnd<3)}function Vme(e){let{bridges:t,ladders:r}=e;for(let n=0;n<t.length;n++){let o=t[n],i=!1;for(let a=0;a<r.length;a++){let A=r[a];FWe(A,o)&&(i=!0,A.firstEnd++,o.type===0?A.secondEnd++:A.secondStart--)}i||(r[r.length]={previousLadder:0,nextLadder:0,firstStart:o.partner1,firstEnd:o.partner1,secondStart:o.partner2,secondEnd:o.partner2,type:o.type})}for(let n=0;n<r.length;n++){let o=r[n];for(let i=n;i<r.length;i++){let a=r[i];wWe(o,a)&&(o.nextLadder=i,a.previousLadder=n)}}}function _me(e){let{proteinInfo:t,hbonds:r,flags:n,bridges:o}=e,{offset:i,b:a}=r,A,s;for(let c=0,l=t.residueIndices.length;c<l;++c)for(let u=i[c],g=i[c+1];u<g;u++){let m=a[u];c>m||(A=c+1,s=m,A!==s&&r.getDirectedEdgeIndex(s,A+1)!==-1&&(n[A]|=Tt.Flag.B,n[s]|=Tt.Flag.B,o[o.length]=new l0(A,s,0)),A=c,s=m-1,A!==s&&r.getDirectedEdgeIndex(s-1,A)!==-1&&(n[A]|=Tt.Flag.B,n[s]|=Tt.Flag.B,o[o.length]=new l0(s,A,0)),A=c,s=m,A!==s&&r.getDirectedEdgeIndex(s,A)!==-1&&(n[A]|=Tt.Flag.B,n[s]|=Tt.Flag.B,o[o.length]=new l0(s,A,1)),A=c+1,s=m-1,A!==s&&r.getDirectedEdgeIndex(s-1,A+1)!==-1&&(n[A]|=Tt.Flag.B,n[s]|=Tt.Flag.B,o[o.length]=new l0(s,A,1)))}o.sort((c,l)=>c.partner1>l.partner1?1:c.partner1<l.partner1?-1:0)}function Yme(e){return Tt.is(e,Tt.Flag.G)||Tt.is(e,Tt.Flag.H)||Tt.is(e,Tt.Flag.I)}function Ome(e){let{ladders:t,flags:r}=e;for(let n=0;n<t.length;n++){let o=t[n];for(let a=o.firstStart;a<=o.firstEnd;a++){let A=o.firstStart-a,s=o.secondStart-A;o.firstStart!==o.firstEnd?(r[a]|=Tt.Flag.E,r[s]|=Tt.Flag.E):(!Yme(r[a])&&Tt.is(r[a],Tt.Flag.E)&&(r[a]|=Tt.Flag.B),!Yme(r[s])&&Tt.is(r[s],Tt.Flag.E)&&(r[s]|=Tt.Flag.B))}if(o.nextLadder===0)continue;let i=t[o.nextLadder];for(let a=o.firstStart;a<=i.firstEnd;a++)r[a]|=Tt.Flag.E;if(o.type===0)for(let a=o.secondStart;a<=i.secondEnd;a++)r[a]|=Tt.Flag.E;else for(let a=i.secondEnd;a<=o.secondStart;a++)r[a]|=Tt.Flag.E}}function Jme(e,t){let{cIndices:r,nIndices:n,residueIndices:o}=t,i=e.conformation,{index:a}=e.model.atomicHierarchy,{traceElementIndex:A}=e.model.atomicHierarchy.derived.residue,s=o.length,c=(E,b)=>E===-1?B.setNaN(b):i.position(E,b),l=B(),u=B(),g=B(),m=B(),p=B(),d=B(),f=B(),I=B(),C=B();if(s===0)return{phi:new Float32Array(0),psi:new Float32Array(0)};let y=new Float32Array(s-1),Q=new Float32Array(s-1);c(-1,l),c(-1,u),c(-1,g),c(r[0],m),c(A[o[0]],p),c(n[0],d),c(r[1],f),c(A[o[1]],I),c(n[1],C);for(let E=0;E<s-1;++E)a.findAtomOnResidue(o[E],"OXT")===-1&&(y[E]=yA(B.dihedralAngle(l,d,p,m)),Q[E]=yA(B.dihedralAngle(d,p,m,C)),l=m,u=p,g=d,m=f,p=I,d=C,c(r[E+1],f),c(A[o[E+1]],I),c(n[E+1],C));return{phi:y,psi:Q}}function zme(e,t){let{x:r,y:n,z:o}=e.model.atomicConformation,{traceElementIndex:i}=e.model.atomicHierarchy.derived.residue,a=new Uint32Array(t.length);for(let s=0,c=t.length;s<c;++s)a[s]=i[t[s]];let A={x:r,y:n,z:o,indices:je.ofSortedArray(a)};return ou(A,rd(A))}function Kme(e){let{index:t}=e.model.atomicHierarchy,{proteinElements:r,residueIndex:n}=e,o=r.length,i=new Uint32Array(o),a=new Int32Array(o),A=new Int32Array(o),s=new Int32Array(o),c=new Int32Array(o);for(let l=0;l<o;++l){let u=n[r[l]];i[l]=u,a[l]=t.findAtomOnResidue(u,"C"),A[l]=t.findAtomOnResidue(u,"H"),s[l]=t.findAtomOnResidue(u,"O"),c[l]=t.findAtomOnResidue(u,"N")}return{residueIndices:je.ofSortedArray(i),cIndices:a,hIndices:A,oIndices:s,nIndices:c}}var VK={oldDefinition:h.Boolean(!0,{description:"Whether to use the old DSSP convention for the annotation of turns and helices, causes them to be two residues shorter"}),oldOrdering:h.Boolean(!0,{description:"Alpha-helices are preferred over 3-10 helices"})},jme=h.getDefaultValues(VK);async function _K(e,t){let r=Kme(e),{residueIndices:n}=r,o=zme(e,n),i=Gme(e,r,o),a=n.length,A=new Uint32Array(a),s=Jme(e,r),c=[],l=[],u=t.oldDefinition?LWe:PWe,g=t.oldOrdering?TWe:GWe,m={params:t,getResidueFlag:u,getFlagName:g,unit:e,proteinInfo:r,flags:A,hbonds:i,torsionAngles:s,ladders:c,bridges:l};Nme(m),Mme(m),Tme(m),_me(m),Vme(m),Ome(m);let p=NWe(A,u),d=new Uint32Array(a),f=[],I=[],C=y=>je.indexOf(n,y);for(let y=0,Q=n.length;y<Q;++y){let E=p[y];d[y]=E;let b=u(A[y]);(I.length===0||b!==I[I.length-1].flags)&&(I[I.length]=RWe(UWe(E),A[y],u)),f[y]=I.length-1}return cD(d,f,I,C)}function RWe(e,t,r){return e==="helix"?{kind:"helix",flags:r(t)}:e==="sheet"?{kind:"sheet",flags:r(t)}:e==="turn"||e==="bend"?{kind:"turn",flags:r(t)}:{kind:"none"}}function UWe(e){return e===vr.SecondaryStructureDssp.H||e===vr.SecondaryStructureDssp.G||e===vr.SecondaryStructureDssp.I?"helix":e===vr.SecondaryStructureDssp.B||e===vr.SecondaryStructureDssp.E?"sheet":e===vr.SecondaryStructureDssp.T?"turn":e===vr.SecondaryStructureDssp.S?"bend":"none"}function LWe(e){return Tt.is(e,Tt.Flag.H)?vr.SecondaryStructureDssp.H:Tt.is(e,Tt.Flag.E)?vr.SecondaryStructureDssp.E:Tt.is(e,Tt.Flag.B)?vr.SecondaryStructureDssp.B:Tt.is(e,Tt.Flag.G)?vr.SecondaryStructureDssp.G:Tt.is(e,Tt.Flag.I)?vr.SecondaryStructureDssp.I:Tt.is(e,Tt.Flag.T)?vr.SecondaryStructureDssp.T:Tt.is(e,Tt.Flag.S)?vr.SecondaryStructureDssp.S:vr.Flag.None}function TWe(e){return Tt.is(e,Tt.Flag.H)?"H":Tt.is(e,Tt.Flag.E)?"E":Tt.is(e,Tt.Flag.B)?"B":Tt.is(e,Tt.Flag.G)?"G":Tt.is(e,Tt.Flag.I)?"I":Tt.is(e,Tt.Flag.T)?"T":Tt.is(e,Tt.Flag.S)?"S":"-"}function PWe(e){return Tt.is(e,Tt.Flag.I)?vr.SecondaryStructureDssp.I:Tt.is(e,Tt.Flag.H)?vr.SecondaryStructureDssp.H:Tt.is(e,Tt.Flag.E)?vr.SecondaryStructureDssp.E:Tt.is(e,Tt.Flag.B)?vr.SecondaryStructureDssp.B:Tt.is(e,Tt.Flag.G)?vr.SecondaryStructureDssp.G:Tt.is(e,Tt.Flag.T)?vr.SecondaryStructureDssp.T:Tt.is(e,Tt.Flag.S)?vr.SecondaryStructureDssp.S:vr.Flag.None}function GWe(e){return Tt.is(e,Tt.Flag.I)?"I":Tt.is(e,Tt.Flag.H)?"H":Tt.is(e,Tt.Flag.E)?"E":Tt.is(e,Tt.Flag.B)?"B":Tt.is(e,Tt.Flag.G)?"G":Tt.is(e,Tt.Flag.T)?"T":Tt.is(e,Tt.Flag.S)?"S":"-"}function NWe(e,t){let r=new Uint32Array(e.length);for(let n=0,o=e.length;n<o;++n){let i=Tt.create(e[n]);r[n]=t(i)}return r}var eA;(r=>{function e(n){let o=n.descriptor.name,i=n.type==="root"?"inheritedPropertyData":"currentPropertyData",a=s=>(o in s[i]||(s[i][o]={props:{...h.getDefaultValues(n.getParams(s))},data:Kd.create(void 0)}),s[i][o]),A=(s,c,l)=>{let u=a(s);s[i][o]={props:c,data:Kd.withValue(u.data,l)}};return{label:n.label,descriptor:n.descriptor,isHidden:n.isHidden,getParams:s=>{let c=h.clone(n.getParams(s));return h.setDefaultValues(c,a(s).props),c},defaultParams:n.defaultParams,isApplicable:n.isApplicable,attach:async(s,c,l={},u)=>{u&&c.customPropertyDescriptors.reference(n.descriptor,!0),n.type==="root"&&(c=c.root);let g=a(c.root).props,m=a(c),p=h.merge(n.defaultParams,g,l);if(m.data.value&&h.areEqual(n.defaultParams,m.props,p))return;let{value:d,assets:f}=await n.obtain(s,c,p);c.customPropertyDescriptors.add(n.descriptor),c.customPropertyDescriptors.assets(n.descriptor,f),A(c,p,d)},ref:(s,c)=>s.customPropertyDescriptors.reference(n.descriptor,c),get:s=>a(s).data,set:(s,c={},l)=>{n.type==="root"&&(s=s.root);let u=a(s),g=h.merge(n.defaultParams,u.props,c);h.areEqual(n.defaultParams,u.props,g)||(A(s,g,l),s.customPropertyDescriptors.assets(n.descriptor))},props:s=>a(s).props}}r.createProvider=e;function t(n,o,i){let a={value:h.Value(i,{isHidden:!0})};return e({label:Ra(n),descriptor:{name:n},isHidden:!0,type:o,defaultParams:a,getParams:()=>({value:h.Value(i,{isHidden:!0})}),isApplicable:()=>!0,obtain:async(A,s,c)=>({...h.getDefaultValues(a),...c})})}r.createSimple=t})(eA||={});var Hf;(n=>{n.Descriptor={name:"model_secondary_structure"},n.Provider=Ws.create(n.Descriptor);function r(o,i,a){let A=new Map,s=[{kind:"none"}],c=MWe(o,i);kWe(o,c,A,s),HWe(i,c,A,o._rowCount,s);let l=a.residues._rowCount,u=m=>m,g={type:new Int32Array(l),key:new Int32Array(l),elements:s};return A.size>0&&_We(a,c,A,g),cD(g.type,g.key,g.elements,u)}n.fromStruct=r})(Hf||={});function MWe(e,t){if(e._rowCount>0){if(e.beg_label_seq_id.valueKind(0)!==K.ValueKinds.Present||e.end_label_seq_id.valueKind(0)!==K.ValueKinds.Present)return"auth"}else if(t&&(t.beg_label_seq_id.valueKind(0)!==K.ValueKinds.Present||t.end_label_seq_id.valueKind(0)!==K.ValueKinds.Present))return"auth";return"label"}function kWe(e,t,r,n){if(!e._rowCount)return;let{beg_label_asym_id:o,beg_label_seq_id:i,beg_auth_seq_id:a,pdbx_beg_PDB_ins_code:A}=e,{end_label_seq_id:s,end_auth_seq_id:c,pdbx_end_PDB_ins_code:l}=e,{pdbx_PDB_helix_class:u,conf_type_id:g,details:m}=e,p=t==="label"?i:a,d=t==="label"?s:c;for(let f=0,I=e._rowCount;f<I;f++){let C=vr.create(u.valueKind(f)===K.ValueKinds.Present?vr.SecondaryStructurePdb[u.value(f)]:g.valueKind(f)===K.ValueKinds.Present?vr.SecondaryStructureMmcif[g.value(f)]:vr.Flag.NA),y={kind:"helix",flags:C,type_id:g.valueKind(f)===K.ValueKinds.Present?g.value(f):"helx_p",helix_class:u.value(f),details:m.valueKind(f)===K.ValueKinds.Present?m.value(f):void 0},Q={startSeqId:p.value(f),startInsCode:A.value(f),endSeqId:d.value(f),endInsCode:l.value(f),type:C,key:n.length};n[n.length]=y;let E=o.value(f);if(r.has(E)){let b=r.get(E);b.has(Q.startSeqId)?b.get(Q.startSeqId).push(Q):b.set(Q.startSeqId,[Q])}else r.set(E,new Map([[Q.startSeqId,[Q]]]))}}function HWe(e,t,r,n,o){if(!e._rowCount)return;let{beg_label_asym_id:i,beg_label_seq_id:a,beg_auth_seq_id:A,pdbx_beg_PDB_ins_code:s}=e,{end_label_seq_id:c,end_auth_seq_id:l,pdbx_end_PDB_ins_code:u}=e,{sheet_id:g}=e,m=t==="label"?a:A,p=t==="label"?c:l,d=new Map,f=n+1;for(let I=0,C=e._rowCount;I<C;I++){let y=g.value(I),Q;d.has(y)?Q=d.get(y):(Q=f++,d.set(y,Q));let E=vr.create(vr.Flag.Beta|vr.Flag.BetaSheet),b={kind:"sheet",flags:E,sheet_id:y,symmetry:void 0},x={startSeqId:m.value(I),startInsCode:s.value(I),endSeqId:p.value(I),endInsCode:u.value(I),type:E,key:o.length};o[o.length]=b;let S=i.value(I);if(r.has(S)){let w=r.get(S);w.has(x.startSeqId)?w.get(x.startSeqId).push(x):w.set(x.startSeqId,[x])}else r.set(S,new Map([[x.startSeqId,[x]]]))}}function VWe(e,t,r,n,o,i){let{auth_seq_id:a,label_seq_id:A,pdbx_PDB_ins_code:s}=e.residues,{endSeqId:c,endInsCode:l,key:u,type:g}=r,m=t==="label"?A:a,p=n;for(;p<o;){let d=m.value(p);if(i.type[p]=g,i.key[p]=u,d>c||d===c&&s.value(p)===l)break;p++}}function _We(e,t,r,n){let{count:o}=e.chainAtomSegments,{label_asym_id:i}=e.chains,{auth_seq_id:a,label_seq_id:A,pdbx_PDB_ins_code:s}=e.residues,c=t==="label"?A:a;for(let l=0;l<o;l++){let u=ed.chainStartResidueIndex(e,l),g=ed.chainEndResidueIndexExcl(e,l),m=i.value(l);if(r.has(m)){let p=r.get(m);for(let d=u;d<g;d++){let f=c.value(d);if(p.has(f)){let I=p.get(f);for(let C of I){let y=s.value(d);C.startInsCode===y&&VWe(e,t,C,d,g,n)}}}}}}var YWe=[5.45,5.18,6.37],OWe=2.1,JWe=[6.1,10.4,13],zWe=1.42,Wme=B(),Xme=B();function Zme(e,t,r,n,o){let i=e.conformation,{traceElementIndex:a}=e.model.atomicHierarchy.derived.residue;for(let A=Math.max(0,r-2);A<=r;++A)for(let s=2;s<5;++s){if(A+s>=t.length)return!1;let c=t[A],l=t[A+s],u=a[c],g=a[l];if(u===-1||g===-1)return!1;i.invariantPosition(u,Wme),i.invariantPosition(g,Xme);let m=B.distance(Wme,Xme);if(Math.abs(m-n[s-2])>=o)return!1}return!0}async function YK(e){let t=e.proteinElements.length,r=new Uint32Array(t),n=[],o=[],{proteinElements:i,residueIndex:a}=e,A=i.length,s=new Uint32Array(A);for(let u=0;u<A;++u){let g=a[i[u]];s[u]=g}let c=je.ofSortedArray(s),l=u=>je.indexOf(c,u);for(let u=0,g=c.length;u<g;++u){let m=vr.Flag.None;Zme(e,c,u,YWe,OWe)?m=vr.Flag.Helix:Zme(e,c,u,JWe,zWe)&&(m=vr.Flag.Beta),r[u]=m,(o.length===0||m!==WWe(o[o.length-1]))&&(o[o.length]=KWe(jWe(m),m)),n[u]=o.length-1}return cD(r,n,o,l)}function KWe(e,t){return e==="helix"?{kind:"helix",flags:t}:e==="sheet"?{kind:"sheet",flags:t}:{kind:"none"}}function jWe(e){return e===vr.Flag.Helix?"helix":e===vr.Flag.Beta?"sheet":"none"}function WWe(e){return e.kind==="helix"||e.kind==="sheet"?e.flags:vr.Flag.None}function $me(e){return{type:h.MappedStatic("auto",{auto:h.EmptyGroup({label:"Automatic"}),model:h.EmptyGroup({label:"Model"}),dssp:h.Group(VK,{label:"DSSP",isFlat:!0}),"zhang-skolnick":h.EmptyGroup({label:"Zhang-Skolnick"})},{options:[["auto","Automatic"],["model","Model"],["dssp","DSSP"],["zhang-skolnick","Zhang-Skolnick"]]})}}var qme=$me(),dc=eA.createProvider({label:"Secondary Structure",descriptor:{name:"molstar_computed_secondary_structure"},type:"root",defaultParams:qme,getParams:$me,isApplicable:e=>!0,obtain:async(e,t,r)=>{let n={...h.getDefaultValues(qme),...r};switch(n.type.name){case"auto":return{value:await XWe(t)};case"dssp":return{value:await ZWe(t,n.type.params)};case"model":return{value:await $We(t)};case"zhang-skolnick":return{value:await qWe(t)}}}});async function XWe(e){let t=new Map;for(let r=0,n=e.unitSymmetryGroups.length;r<n;++r){let o=e.unitSymmetryGroups[r].units[0],i=o.model;if(_t.isFromPdbArchive(i)&&_t.isExperimental(i)&&!_t.isCoarseGrained(i)||_t.hasSecondaryStructure(i)){let a=Hf.Provider.get(i);a&&t.set(o.invariantId,a)}else if(ge.isAtomic(o)&&!_t.isCoarseGrained(i)){let a=await _K(o,jme);t.set(o.invariantId,a)}else if(ge.isAtomic(o)){let a=await YK(o);t.set(o.invariantId,a)}}return t}async function ZWe(e,t){let r=new Map;for(let n=0,o=e.unitSymmetryGroups.length;n<o;++n){let i=e.unitSymmetryGroups[n].units[0];if(ge.isAtomic(i)&&!_t.isCoarseGrained(i.model)){let a=await _K(i,t);r.set(i.invariantId,a)}}return r}async function qWe(e){let t=new Map;for(let r=0,n=e.unitSymmetryGroups.length;r<n;++r){let o=e.unitSymmetryGroups[r].units[0];if(ge.isAtomic(o)){let i=await YK(o);t.set(o.invariantId,i)}}return t}async function $We(e){let t=new Map;for(let r=0,n=e.unitSymmetryGroups.length;r<n;++r){let o=e.unitSymmetryGroups[r].units[0];if(ge.isAtomic(o)){let i=Hf.Provider.get(o.model);i&&t.set(o.invariantId,i)}}return t}var eXe={true:e=>!0,false:e=>!1,zero:e=>0};function sA(){throw new Error("Property only available for atomic models.")}function sh(e){throw e?new Error(`Property only available for coarse models (${e}).`):new Error("Property only available for coarse models.")}var x2={key:e=>e.element,x:e=>e.unit.conformation.x(e.element),y:e=>e.unit.conformation.y(e.element),z:e=>e.unit.conformation.z(e.element),id:e=>ge.isAtomic(e.unit)?e.unit.model.atomicConformation.atomId.value(e.element):sA(),occupancy:e=>ge.isAtomic(e.unit)?e.unit.model.atomicConformation.occupancy.value(e.element):sA(),B_iso_or_equiv:e=>ge.isAtomic(e.unit)?e.unit.model.atomicConformation.B_iso_or_equiv.value(e.element):sA(),sourceIndex:e=>ge.isAtomic(e.unit)?e.unit.model.atomicHierarchy.atomSourceIndex.value(e.element):e.element,type_symbol:e=>ge.isAtomic(e.unit)?e.unit.model.atomicHierarchy.atoms.type_symbol.value(e.element):sA(),label_atom_id:e=>ge.isAtomic(e.unit)?e.unit.model.atomicHierarchy.atoms.label_atom_id.value(e.element):sA(),auth_atom_id:e=>ge.isAtomic(e.unit)?e.unit.model.atomicHierarchy.atoms.auth_atom_id.value(e.element):sA(),label_alt_id:e=>ge.isAtomic(e.unit)?e.unit.model.atomicHierarchy.atoms.label_alt_id.value(e.element):sA(),label_comp_id:S2,auth_comp_id:e=>ge.isAtomic(e.unit)?e.unit.model.atomicHierarchy.atoms.auth_comp_id.value(e.element):sA(),pdbx_formal_charge:e=>ge.isAtomic(e.unit)?e.unit.model.atomicHierarchy.atoms.pdbx_formal_charge.value(e.element):sA(),vdw_radius:e=>ge.isAtomic(e.unit)?rm(e.unit.model.atomicHierarchy.atoms.type_symbol.value(e.element)):sA()};function S2(e){return ge.isAtomic(e.unit)||sA(),e.unit.model.atomicHierarchy.atoms.label_comp_id.value(e.element)}function OK(e){return ge.isAtomic(e.unit)?e.unit.model.atomicHierarchy.residues.label_seq_id.value(e.unit.residueIndex[e.element]):sA()}function tXe(e){ge.isAtomic(e.unit)||sA();let t=e.unit.model.sequence.byEntityKey[Nu(e)];return t&&t.sequence.microHet.has(OK(e))}function ede(e){ge.isAtomic(e.unit)||sA();let t=e.unit.model.sequence.byEntityKey[Nu(e)];return t?t.sequence.microHet.get(OK(e))||[S2(e)]:[S2(e)]}var rXe={key:e=>ge.isAtomic(e.unit)?e.unit.residueIndex[e.element]:sA(),group_PDB:e=>ge.isAtomic(e.unit)?e.unit.model.atomicHierarchy.residues.group_PDB.value(e.unit.residueIndex[e.element]):sA(),label_comp_id:S2,auth_comp_id:e=>ge.isAtomic(e.unit)?e.unit.model.atomicHierarchy.atoms.auth_comp_id.value(e.element):sA(),label_seq_id:OK,auth_seq_id:e=>ge.isAtomic(e.unit)?e.unit.model.atomicHierarchy.residues.auth_seq_id.value(e.unit.residueIndex[e.element]):sA(),pdbx_PDB_ins_code:e=>ge.isAtomic(e.unit)?e.unit.model.atomicHierarchy.residues.pdbx_PDB_ins_code.value(e.unit.residueIndex[e.element]):sA(),isNonStandard:e=>ge.isAtomic(e.unit)?ede(e).some(t=>e.unit.model.properties.chemicalComponentMap.get(t).mon_nstd_flag[0]==="n"):sA(),hasMicroheterogeneity:tXe,microheterogeneityCompIds:ede,secondary_structure_type:e=>{ge.isAtomic(e.unit)||sA();let t=dc.get(e.structure).value?.get(e.unit.invariantId);return t?t.type[t.getIndex(e.unit.residueIndex[e.element])]:vr.Flag.NA},secondary_structure_key:e=>{ge.isAtomic(e.unit)||sA();let t=dc.get(e.structure).value?.get(e.unit.invariantId);return t?t.key[t.getIndex(e.unit.residueIndex[e.element])]:-1},chem_comp_type:e=>ge.isAtomic(e.unit)?e.unit.model.properties.chemicalComponentMap.get(S2(e)).type:sA(),residueSourceIndex:e=>ge.isAtomic(e.unit)?e.unit.model.atomicHierarchy.residueSourceIndex.value(e.unit.residueIndex[e.element]):sA()},nXe={key:e=>ge.isAtomic(e.unit)?e.unit.chainIndex[e.element]:sA(),label_asym_id:e=>ge.isAtomic(e.unit)?e.unit.model.atomicHierarchy.chains.label_asym_id.value(e.unit.chainIndex[e.element]):e.unit.coarseElements.asym_id.value(e.element),auth_asym_id:e=>ge.isAtomic(e.unit)?e.unit.model.atomicHierarchy.chains.auth_asym_id.value(e.unit.chainIndex[e.element]):sA(),label_entity_id:e=>ge.isAtomic(e.unit)?e.unit.model.atomicHierarchy.chains.label_entity_id.value(e.unit.chainIndex[e.element]):e.unit.coarseElements.entity_id.value(e.element)},oXe={key:x2.key,entityKey:e=>ge.isCoarse(e.unit)?e.unit.coarseElements.entityKey[e.element]:sh(),x:x2.x,y:x2.y,z:x2.z,asym_id:e=>ge.isCoarse(e.unit)?e.unit.coarseElements.asym_id.value(e.element):sh(),entity_id:e=>ge.isCoarse(e.unit)?e.unit.coarseElements.entity_id.value(e.element):sh(),seq_id_begin:e=>ge.isCoarse(e.unit)?e.unit.coarseElements.seq_id_begin.value(e.element):sh(),seq_id_end:e=>ge.isCoarse(e.unit)?e.unit.coarseElements.seq_id_end.value(e.element):sh(),sphere_radius:e=>ge.isSpheres(e.unit)?e.unit.coarseConformation.radius[e.element]:sh("spheres"),sphere_rmsf:e=>ge.isSpheres(e.unit)?e.unit.coarseConformation.rmsf[e.element]:sh("spheres"),gaussian_weight:e=>ge.isGaussians(e.unit)?e.unit.coarseConformation.weight[e.element]:sh("gaussians"),gaussian_covariance_matrix:e=>ge.isGaussians(e.unit)?e.unit.coarseConformation.covariance_matrix[e.element]:sh("gaussians")};function Nu(e){switch(e.unit.kind){case ge.Kind.Atomic:return e.unit.model.atomicHierarchy.index.getEntityFromChain(e.unit.chainIndex[e.element]);case ge.Kind.Spheres:return e.unit.model.coarseHierarchy.spheres.entityKey[e.element];case ge.Kind.Gaussians:return e.unit.model.coarseHierarchy.gaussians.entityKey[e.element]}}var iXe={key:Nu,id:e=>e.unit.model.entities.data.id.value(Nu(e)),type:e=>e.unit.model.entities.data.type.value(Nu(e)),src_method:e=>e.unit.model.entities.data.src_method.value(Nu(e)),pdbx_description:e=>e.unit.model.entities.data.pdbx_description.value(Nu(e)),formula_weight:e=>e.unit.model.entities.data.formula_weight.value(Nu(e)),pdbx_number_of_molecules:e=>e.unit.model.entities.data.pdbx_number_of_molecules.value(Nu(e)),details:e=>e.unit.model.entities.data.details.value(Nu(e)),pdbx_mutation:e=>e.unit.model.entities.data.pdbx_mutation.value(Nu(e)),pdbx_fragment:e=>e.unit.model.entities.data.pdbx_fragment.value(Nu(e)),pdbx_ec:e=>e.unit.model.entities.data.pdbx_ec.value(Nu(e)),pdbx_parent_entity_id:e=>e.unit.model.entities.data.pdbx_parent_entity_id.value(Nu(e)),subtype:e=>e.unit.model.entities.subtype.value(Nu(e)),prd_id:e=>e.unit.model.entities.prd_id?.value(Nu(e))??""},aXe=[],AXe={id:e=>e.unit.id,chainGroupId:e=>e.unit.chainGroupId,multiChain:e=>ge.Traits.is(e.unit.traits,ge.Trait.MultiChain),object_primitive:e=>e.unit.objectPrimitive,operator_name:e=>e.unit.conformation.operator.name,instance_id:e=>e.unit.conformation.operator.instanceId,operator_key:e=>e.unit.conformation.operator.key,model_index:e=>e.unit.model.modelNum,model_label:e=>e.unit.model.label,model_entry_id:e=>e.unit.model.entryId,hkl:e=>e.unit.conformation.operator.hkl,spgrOp:e=>e.unit.conformation.operator.spgrOp,model_num:e=>e.unit.model.modelNum,pdbx_struct_assembly_id:e=>e.unit.conformation.operator.assembly?.id||Go.DefaultName,pdbx_struct_oper_list_ids:e=>e.unit.conformation.operator.assembly?.operList||aXe,struct_ncs_oper_id:e=>e.unit.conformation.operator.ncsId},Ke={constant:eXe,atom:x2,residue:rXe,chain:nXe,entity:iXe,unit:AXe,coarse:oXe};var iQ=class{constructor(t){this.index=new Map;this.checkOperator=!1;this._asym_id=Ke.chain.label_asym_id;this._seq_id=Ke.residue.label_seq_id;this._comp_id=Ke.atom.label_comp_id;this._alt_id=Ke.atom.label_alt_id;this._ins_code=Ke.residue.pdbx_PDB_ins_code;this._op_name=Ke.unit.operator_name;this.checkOperator=t?.checkOperator??!1}add(t){let r=this.index.get(t.label_asym_id);r||(r=new Map,this.index.set(t.label_asym_id,r));let n=r.get(t.label_seq_id);return n||(n=[],r.set(t.label_seq_id,n)),this._find(t,n)?!1:(n.push(t),!0)}hasLabelAsymId(t){return this.index.has(t)}has(t){let r=this._asym_id(t);if(!this.index.has(r))return;let n=this.index.get(r),o=this._seq_id(t);if(!n.has(o))return;let i=n.get(o),a=this._comp_id(t),A=this._alt_id(t),s=this._ins_code(t),c=this._op_name(t)??"1_555";for(let l of i)if(!(l.label_comp_id!==a||l.label_alt_id!==A||l.ins_code!==s)&&!(this.checkOperator&&(l.operator_name??"1_555")!==c))return l}static getLabel(t,r=!1){return`${t.label_asym_id} ${t.label_comp_id} ${t.label_seq_id}:${t.ins_code}:${t.label_alt_id}${r?" "+(t.operator_name??"1_555"):""}`}static getEntryFromLocation(t){return{label_asym_id:Ke.chain.label_asym_id(t),label_comp_id:Ke.atom.label_comp_id(t),label_seq_id:Ke.residue.label_seq_id(t),label_alt_id:Ke.atom.label_alt_id(t),ins_code:Ke.residue.pdbx_PDB_ins_code(t),operator_name:Ke.unit.operator_name(t)??"1_555"}}_find(t,r){for(let n of r)if(!(n.label_comp_id!==t.label_comp_id||n.label_alt_id!==t.label_alt_id||n.ins_code!==t.ins_code)&&!(this.checkOperator&&(n.operator_name??"1_555")!==(t.operator_name??"1_555")))return!0;return!1}};function mD(e,t,r){let n=t.subsetBuilder(!0);for(let o of r.units){if(o.kind!==ge.Kind.Atomic){n.setUnit(o.id,o.elements);continue}let{residueAtomSegments:i}=o.model.atomicHierarchy,a=t.unitMap.get(o.id).elements,A=o.elements;n.beginUnit(o.id);let s=sr.transientSegments(i,A);for(;s.hasNext;){let c=s.move().index;for(let l=i.offsets[c],u=i.offsets[c+1];l<u;l++)je.has(a,l)&&n.addElement(l)}n.commitUnit(),e.throwIfTimedOut()}return n.getStructure()}function sXe(e){return function(r){let n=e(r);if(Qt.isSingleton(n))return Qt.Singletons(r.inputStructure,mD(r,r.inputStructure,n.structure));{let o=new sD(r.inputStructure);for(let i of n.structures)o.add(mD(r,r.inputStructure,i));return o.getSelection()}}}function JK(e,t,r,n){let o=new a0(t),i=t.lookup3d,a=n.radius;for(let A of r.units){let s=A.conformation,c=A.elements;for(let l=0,u=c.length;l<u;l++){let g=c[l];i.findIntoBuilder(s.x(g),s.y(g),s.z(g),a,o)}e.throwIfTimedOut()}return n.wholeResidues?mD(e,t,o.getStructure()):o.getStructure()}function tde(e,t,r,n){let o=new a0(t),i=t.lookup3d,{elementRadius:a,elementRadiusClosure:A,sourceMaxRadius:s,radius:c}=n;e.pushCurrentElement(),e.element.structure=r;for(let l of r.units){e.element.unit=l;let u=l.conformation,g=l.elements;for(let m=0,p=g.length;m<p;m++){let d=g[m];e.element.element=d;let f=a(e);i.findIntoBuilderWithRadius(u.x(d),u.y(d),u.z(d),f,s,c,A,o)}e.throwIfTimedOut()}return e.popCurrentElement(),n.wholeResidues?mD(e,t,o.getStructure()):o.getStructure()}function cXe(e,t){return r=>(e.element.structure=r.structure,e.element.unit=r.unit,e.element.element=r.element,t(e))}function lXe(e,t){let r=0;e.element.structure=e.inputStructure;for(let n of e.inputStructure.units){e.element.unit=n;let o=n.elements;for(let i=0,a=o.length;i<a;i++){let A=o[i];e.element.element=A;let s=t(e);s>r&&(r=s)}}return e.throwIfTimedOut(),r}function uXe(e,t){return function(n){let o=e(n);if(t.elementRadius){let i={...t,elementRadius:t.elementRadius,elementRadiusClosure:cXe(n,t.elementRadius),sourceMaxRadius:lXe(n,t.elementRadius)};if(Qt.isSingleton(o)){let a=tde(n,n.inputStructure,o.structure,i);return Qt.Singletons(n.inputStructure,a)}else{let a=new sD(n.inputStructure);for(let A of o.structures)a.add(tde(n,n.inputStructure,A,i));return a.getSelection()}}if(Qt.isSingleton(o)){let i=JK(n,n.inputStructure,o.structure,t);return Qt.Singletons(n.inputStructure,i)}else{let i=new sD(n.inputStructure);for(let a of o.structures)i.add(JK(n,n.inputStructure,a,t));return i.getSelection()}}}function gXe(e,t){return function(n){let o=e(n);if(Qt.structureCount(o)===0)return o;let i=Qt.UniqueBuilder(n.inputStructure),a=A=>i.add(A);return Qt.forEach(o,(A,s)=>{n.pushInputStructure(A),Qt.forEach(t(n),a),n.popInputStructure(),s%10===0&&n.throwIfTimedOut()}),i.getSelection()}}function mXe(e,t){return function(n){let o=e(n);if(Qt.structureCount(o)===0)return o;let i=t(n);if(Qt.structureCount(i)===0)return Qt.Empty(n.inputStructure);let a=Qt.unionStructure(i),A=Qt.UniqueBuilder(n.inputStructure);return Qt.forEach(o,(s,c)=>{let l=qG(a,s);l.elementCount!==0&&A.add(l),c%50===0&&n.throwIfTimedOut()}),A.getSelection()}}function dXe(e,t){return function(n){let o=e(n);if(Qt.structureCount(o)===0)return o;let i=t(n);if(Qt.structureCount(i)===0)return o;let a=Qt.unionStructure(i),A=Qt.UniqueBuilder(n.inputStructure);return Qt.forEach(o,(s,c)=>{let l=aD(s,a);l.elementCount!==0&&A.add(l),c%50===0&&n.throwIfTimedOut()}),A.getSelection()}}function pXe(e){return function(r){let n=Qt.LinearBuilder(r.inputStructure);return n.add(Qt.unionStructure(e(r))),n.getSelection()}}function fXe(e,t){return function(n){let o=e(n),i=new Map,a=[];n.pushCurrentElement(),Qt.forEach(o,(s,c)=>{n.element.structure=s;for(let l of s.units){n.element.unit=l;let u=l.elements;for(let g=0,m=u.length;g<m;g++){n.element.element=u[g];let p=t(n),d;i.has(p)?d=i.get(p):(d=yo.create(),i.set(p,d)),yo.add(d,c,c)}}a[c]=n.inputStructure.subsetBuilder(!0),c%10===0&&n.throwIfTimedOut()}),n.element.structure=n.inputStructure;for(let s of n.inputStructure.units){n.element.unit=s;let c=s.elements;for(let l=0,u=c.length;l<u;l++){n.element.element=c[l];let g=t(n);if(!i.has(g))continue;let m=i.get(g).array;for(let p=0,d=m.length;p<d;p++)a[m[p]].addToUnit(s.id,c[l])}}n.popCurrentElement();let A=Qt.UniqueBuilder(n.inputStructure);for(let s of a)A.add(s.getStructure());return A.getSelection()}}function BXe({query:e,layerCount:t,wholeResidues:r,bondTest:n,fixedPoint:o}){let i=Math.max(t,0);return function(A){let s=Qt.UniqueBuilder(A.inputStructure),c=e(A);return A.pushCurrentBond(),A.atomicBond.setTestFn(n),Qt.forEach(c,(l,u)=>{let g=l;if(o)for(;;){let m=g.elementCount;if(g=rde(A,r,g),g.elementCount===m)break}else for(let m=0;m<i;m++)g=rde(A,r,g);s.add(g),u%10===0&&A.throwIfTimedOut()}),A.popCurrentBond(),s.getSelection()}}function rde(e,t,r){let n=IXe(e,r);return t?mD(e,e.inputStructure,n):n}function IXe(e,t){let r=e.inputStructure,n=r.interUnitBonds,o=new a0(r),i=e.atomicBond;for(let a of t.units){if(a.kind!==ge.Kind.Atomic){o.beginUnit(a.id);for(let m=0,p=a.elements.length;m<p;m++)o.addElement(a.elements[m]);o.commitUnit();continue}let A=r.unitMap.get(a.id),{offset:s,b:c,edgeProps:{flags:l,order:u,key:g}}=A.bonds;i.setStructure(r),i.a.unit=A,i.b.unit=A;for(let m=0,p=a.elements.length;m<p;m++){o.addToUnit(a.id,a.elements[m]);let d=je.indexOf(A.elements,a.elements[m]);for(let f=s[d],I=s[d+1];f<I;f++){let C=c[f],y=A.elements[C];je.has(a.elements,y)||o.has(a.id,y)||(i.aIndex=d,i.a.element=a.elements[m],i.bIndex=C,i.b.element=y,i.type=l[f],i.order=u[f],i.key=g[f],i.test(e,!0)&&o.addToUnit(a.id,y))}}for(let m of n.getConnectedUnits(A.id)){let p=t.unitMap.get(m.unitB),d=r.unitMap.get(m.unitB);for(let f of m.connectedIndices)if(je.has(a.elements,A.elements[f]))for(let I of m.getEdges(f)){let C=d.elements[I.indexB];p&&je.has(p.elements,C)||o.has(m.unitB,C)||(i.a.unit=A,i.aIndex=f,i.a.element=A.elements[f],i.b.unit=d,i.bIndex=I.indexB,i.b.element=C,i.type=I.props.flag,i.order=I.props.order,i.key=I.props.key,i.test(e,!0)&&o.addToUnit(m.unitB,C))}}}return o.getStructure()}function CXe({query:e,radius:t,includeWater:r}){let n=Ke.entity.type;function o(i){return n(i)==="water"}return function(a){let A=Qt.unionStructure(e(a)),s=mD(a,a.inputStructure,JK(a,a.inputStructure,A,{radius:t})),c=hXe(a.inputStructure),l=yXe(a.inputStructure),u=W.Location.create(s),g=new Map,m=new iQ({checkOperator:!0});for(let f of s.units){if(f.kind!==ge.Kind.Atomic)continue;u.unit=f;let{elements:I}=f,C=sr.transientSegments(f.model.atomicHierarchy.chainAtomSegments,I),y=sr.transientSegments(f.model.atomicHierarchy.residueAtomSegments,I);for(;C.hasNext;){let Q=C.move();u.element=I[Q.start];let E=Ke.chain.label_asym_id(u),b=Ke.unit.operator_name(u);if(c.has(E)){g.has(E)?Po(g.get(E),b):g.set(E,[b]);continue}let x=Ke.entity.type(u);if(!(x==="water"||x==="polymer"))for(y.setSegment(Q);y.hasNext;){let S=y.move();u.element=I[S.start],l.addComponent(iQ.getEntryFromLocation(u),m)}}a.throwIfTimedOut()}let p=a.inputStructure.subsetBuilder(!0);for(let f of a.inputStructure.units){if(f.kind!==ge.Kind.Atomic)continue;u.unit=f;let{elements:I}=f,C=sr.transientSegments(f.model.atomicHierarchy.chainAtomSegments,I),y=sr.transientSegments(f.model.atomicHierarchy.residueAtomSegments,I);for(p.beginUnit(f.id);C.hasNext;){let Q=C.move();u.element=I[Q.start];let E=Ke.chain.label_asym_id(u),b=Ke.unit.operator_name(u);if(g.has(E)&&g.get(E).indexOf(b)>=0){p.addElementRange(I,Q.start,Q.end);continue}if(m.hasLabelAsymId(E)&&Ke.entity.type(u)!=="water")for(y.setSegment(Q);y.hasNext;){let x=y.move();u.element=I[x.start],m.has(u)&&p.addElementRange(I,x.start,x.end)}}p.commitUnit(),a.throwIfTimedOut()}let d=Mf(a.inputStructure,[p.getStructure(),A]);if(r){let f=new a0(a.inputStructure),I=a.inputStructure.lookup3d;for(let C of d.units){let y=C.conformation,Q=C.elements;for(let E=0,b=Q.length;E<b;E++){let x=Q[E];I.findIntoBuilderIf(y.x(x),y.y(x),y.z(x),t,f,o),f.addToUnit(C.id,x)}a.throwIfTimedOut()}return Qt.Sequence(a.inputStructure,[f.getStructure()])}else return Qt.Sequence(a.inputStructure,[d])}}function hXe(e){let t=e.models[0],r=new Set;if(t.sourceData?.kind!=="mmCIF")return r;let{_rowCount:n,asym_id:o}=t.sourceData.data.db.pdbx_molecule;for(let i=0;i<n;i++)r.add(o.value(i));return r}function yXe(e){let t=e.models[0],r=new zK;if(t.sourceData?.kind!=="mmCIF")return r;let n=t.sourceData.data.db.struct_conn,{conn_type_id:o}=n,{ptnr1_label_asym_id:i,ptnr1_label_comp_id:a,ptnr1_label_seq_id:A,ptnr1_symmetry:s,pdbx_ptnr1_label_alt_id:c,pdbx_ptnr1_PDB_ins_code:l}=n,{ptnr2_label_asym_id:u,ptnr2_label_comp_id:g,ptnr2_label_seq_id:m,ptnr2_symmetry:p,pdbx_ptnr2_label_alt_id:d,pdbx_ptnr2_PDB_ins_code:f}=n;for(let I=0;I<n._rowCount;I++){let C=o.value(I);if(C!=="covale"&&C!=="metalc")continue;let y={label_asym_id:i.value(I),label_comp_id:a.value(I),label_seq_id:A.value(I),label_alt_id:c.value(I),ins_code:l.value(I),operator_name:s.value(I)??"1_555"},Q={label_asym_id:u.value(I),label_comp_id:g.value(I),label_seq_id:m.value(I),label_alt_id:d.value(I),ins_code:f.value(I),operator_name:p.value(I)??"1_555"};r.addEdge(y,Q)}return r}var zK=class{constructor(){this.vertices=new Map;this.edges=new Map}addVertex(t,r){this.vertices.has(r)||(this.vertices.set(r,t),this.edges.set(r,[]))}addEdge(t,r){let n=iQ.getLabel(t),o=iQ.getLabel(r);this.addVertex(t,n),this.addVertex(r,o),Po(this.edges.get(n),o),Po(this.edges.get(o),n)}addComponent(t,r){let n=iQ.getLabel(t);if(!this.vertices.has(n)){r.add(t);return}let o=new Set,i=new Set,a=[n];for(i.add(n),r.add(t);a.length>0;){let A=a.pop();o.add(A);let s=this.vertices.get(A);for(let c of this.edges.get(A)){if(o.has(c)||(a.push(c),i.has(c)))continue;i.add(c);let l=this.vertices.get(c);s.operator_name===l.operator_name?r.add({...l,operator_name:t.operator_name}):r.add(l)}}}};var XK={};ki(XK,{areIntersectedBy:()=>SXe,first:()=>EXe,getCurrentStructureProperties:()=>D2,isConnectedTo:()=>UXe,pick:()=>QXe,withSameAtomProperties:()=>xXe,within:()=>DXe});function nde(e,t,r,n,o,i){return t.elementCount===0||r.elementCount===0?!0:t.elementCount<=r.elementCount?jK.check(e,t,r,n,o,i):jK.check(e,r,t,n,o,i)}function ode(e,t,r,n,o){return t.elementCount===0||r.elementCount===0?!0:t.elementCount<=r.elementCount?WK.check(e,t,r,n,o):WK.check(e,r,t,n,o)}var jK;(a=>{let e;(l=>(l[l.BelowMin=0]="BelowMin",l[l.WithinMax=1]="WithinMax",l[l.Miss=2]="Miss"))(e||={});let t=B();function r(A,s,c,l,u,g,m){let{elements:p,conformation:d}=s,f=t;A.element.unit=s;let I=!1;for(let C=0,y=p.length;C<y;C++){let Q=p[C];A.element.element=Q;let E=Math.max(0,B.distance(c,d.position(Q,f))-l-m(A));if(E<u)return 0;E<g&&(I=!0)}return I?1:2}function n(A,s,c,l,u,g,m){let{units:p}=s,d=!1;for(let f=0,I=p.length;f<I;f++){let C=r(A,p[f],c,l,u,g,m);if(C===0)return 0;C===1&&(d=!0)}return d?1:2}let o=B();function i(A,s,c,l,u,g){if(s.elementCount===0||c.elementCount===0)return 0;let{units:m}=s,p=!1;A.element.structure=s;for(let d=0,f=m.length;d<f;d++){let I=m[d],{elements:C,conformation:y}=I;A.element.unit=I;for(let Q=0,E=C.length;Q<E;Q++){let b=C[Q];A.element.element=b;let x=n(A,c,y.position(b,o),g(A),l,u,g);if(x===0)return!1;x===1&&(p=!0)}}return p}a.check=i})(jK||={});var WK;(i=>{let e=B();function t(a,A,s,c,l,u){let{elements:g,conformation:m}=A,p=e;a.element.unit=A;for(let d=0,f=g.length;d<f;d++){let I=g[d];if(a.element.element=I,Math.max(0,B.distance(s,m.position(I,p))-c-u(a))<=l)return!0}return!1}function r(a,A,s,c,l,u){let{units:g}=A;for(let m=0,p=g.length;m<p;m++)if(t(a,g[m],s,c,l,u))return!0;return!1}let n=B();function o(a,A,s,c,l){if(A.elementCount===0||s.elementCount===0)return 0;let{units:u}=A;a.element.structure=A;for(let g=0,m=u.length;g<m;g++){let p=u[g];a.element.unit=p;let{elements:d,conformation:f}=p;for(let I=0,C=d.length;I<C;I++){let y=d[I];if(a.element.element=y,r(a,s,f.position(y,n),l(a),c,l))return!0}}return!1}i.check=o})(WK||={});function QXe(e,t){return r=>{let n=e(r),o=Qt.LinearBuilder(r.inputStructure);return r.pushCurrentElement(),Qt.forEach(n,(i,a)=>{r.currentStructure=i,t(r)&&o.add(i),a%100&&r.throwIfTimedOut()}),r.popCurrentStructure(),o.getSelection()}}function EXe(e){return t=>{let r=e(t),n=Qt.LinearBuilder(t.inputStructure);if(r.kind==="singletons"){if(r.structure.elementCount>0){let o=r.structure.units[0],i=Ye.create([o.getChild(je.ofSingleton(o.elements[0]))],{parent:t.inputStructure});n.add(i)}}else r.structures.length>0&&n.add(r.structures[0]);return n.getSelection()}}function D2(e,t,r){let{units:n}=e.currentStructure,o=e.pushCurrentElement();o.structure=e.currentStructure;for(let i of n){o.unit=i;let a=i.elements,A=t;if(A){for(let s=0,c=a.length;s<c;s++)o.element=a[s],r.add(A(e));e.throwIfTimedOut()}}return e.popCurrentElement(),r}function bXe(e,t,r){let n=new Set,o=t(e);return e.pushCurrentElement(),Qt.forEach(o,(i,a)=>{e.currentStructure=i,D2(e,r,n),a%10&&e.throwIfTimedOut()}),e.popCurrentElement(),n}function xXe(e,t,r){return n=>{let o=e(n),i=bXe(n,t,r),a=Qt.LinearBuilder(n.inputStructure);return n.pushCurrentStructure(),Qt.forEach(o,(A,s)=>{n.currentStructure=A;let c=D2(n,r,new Set);lo.isSuperset(i,c)&&a.add(A),s%10&&n.throwIfTimedOut()}),n.popCurrentStructure(),a.getSelection()}}function SXe(e,t){return r=>{let n=Qt.unionStructure(t(r)),o=Qt.LinearBuilder(r.inputStructure);return Qt.forEach(e(r),(i,a)=>{iD(n,i)&&o.add(i),a%10&&r.throwIfTimedOut()}),o.getSelection()}}function DXe(e){return t=>{let r={queryCtx:t,selection:e.query(t),target:e.target(t),maxRadius:e.maxRadius,minRadius:e.minRadius?Math.max(0,e.minRadius):0,elementRadius:e.elementRadius,invert:!!e.invert};return r.minRadius===0&&typeof e.minRadius>"u"?vXe(r):r.minRadius===0?FXe(r):wXe(r)}}function vXe({queryCtx:e,selection:t,target:r,maxRadius:n,invert:o}){let i=Qt.unionStructure(r).lookup3d,a=Qt.LinearBuilder(e.inputStructure),A=B.zero();return Qt.forEach(t,(s,c)=>{let{units:l}=s,u=!1;for(let g=0,m=l.length;g<m;g++){let p=l[g],{elements:d,conformation:f}=p;for(let I=0,C=d.length;I<C;I++){let y=d[I];if(f.position(y,A),i.check(A[0],A[1],A[2],n+f.r(y))){u=!0;break}}if(u)break}o&&(u=!u),u&&a.add(s),c%10===0&&e.throwIfTimedOut()}),a.getSelection()}function FXe({queryCtx:e,selection:t,target:r,maxRadius:n,invert:o,elementRadius:i}){let a=Qt.unionStructure(r),A=Qt.LinearBuilder(e.inputStructure);return e.pushCurrentElement(),Qt.forEach(t,(s,c)=>{let l=ode(e,a,s,n,i);o&&(l=!l),l&&A.add(s),c%10===0&&e.throwIfTimedOut()}),e.popCurrentElement(),A.getSelection()}function wXe({queryCtx:e,selection:t,target:r,minRadius:n,maxRadius:o,invert:i,elementRadius:a}){let A=Qt.unionStructure(r),s=Qt.LinearBuilder(e.inputStructure);return e.pushCurrentElement(),Qt.forEach(t,(c,l)=>{let u=nde(e,A,c,n,o,a);i&&(u=!u),u&&s.add(c),l%10===0&&e.throwIfTimedOut()}),e.popCurrentElement(),s.getSelection()}function RXe(e,t){let{queryCtx:r,input:n,target:o,disjunct:i}=e,a=r.atomicBond,A=n.interUnitBonds;a.setStructure(n);for(let s of t.units){if(!ge.isAtomic(s))continue;let c=n.unitMap.get(s.id),{offset:l,b:u,edgeProps:{flags:g,order:m,key:p}}=c.bonds,d=A.getConnectedUnits(s.id),f=d.length,I=s.elements,C=c.elements;for(let y=0,Q=I.length;y<Q;y++){let E=je.indexOf(C,I[y]);a.a.unit=c,a.b.unit=c;for(let b=l[E],x=l[E+1];b<x;b++)if(a.b.element=c.elements[u[b]],!(i&&je.has(s.elements,a.b.element))&&o.hasElement(a.b)&&(a.aIndex=E,a.a.element=I[y],a.bIndex=u[b],a.type=g[b],a.order=m[b],a.key=p[b],a.test(r,!0)))return!0;for(let b=0;b<f;b++){let x=d[b],S=n.unitMap.get(x.unitB),w=S.elements,R=x.getEdges(E);for(let T=0,L=R.length;T<L;T++){let F=R[T];if(a.b.unit=S,a.b.element=w[F.indexB],!!o.hasElement(a.b)&&!(i&&t.hasElement(a.b))&&(a.a.unit=c,a.aIndex=E,a.a.element=I[y],a.bIndex=F.indexB,a.type=F.props.flag,a.order=F.props.order,a.key=F.props.key,a.test(r,!0)))return!0}}}}return!1}function UXe({query:e,target:t,disjunct:r,invert:n,bondTest:o}){return i=>{let a=t(i);if(Qt.isEmpty(a))return a;let A=e(i);if(Qt.isEmpty(A))return A;let s={queryCtx:i,input:i.inputStructure,disjunct:r,target:Qt.unionStructure(a)},c=Qt.LinearBuilder(i.inputStructure);return i.pushCurrentBond(),i.atomicBond.setTestFn(o),Qt.forEach(A,(l,u)=>{(RXe(s,l)||n)&&c.add(l),u%5===0&&i.throwIfTimedOut()}),i.popCurrentBond(),c.getSelection()}}var ZK={};ki(ZK,{intersect:()=>TXe,merge:()=>LXe});function LXe(e){return e.length===0?rN:e.length===1?e[0]:t=>{let r=Qt.UniqueBuilder(t.inputStructure);for(let n=0;n<e.length;n++)Qt.forEach(e[n](t),(o,i)=>{r.add(o),n%100&&t.throwIfTimedOut()});return r.getSelection()}}function TXe(e){return e.length===0?rN:e.length===1?e[0]:t=>{let r=[];for(let A=0;A<e.length;A++)r.push(e[A](t));let n=0,o=Qt.structureCount(r[0]);for(let A=1;A<r.length;A++){let s=Qt.structureCount(r[A]);s<o&&(n=A,o=s)}t.throwIfTimedOut();let i=ZS(A=>A.hashCode,Ye.areUnitIdsAndIndicesEqual);Qt.forEach(r[n],A=>i.add(A));let a=Qt.UniqueBuilder(t.inputStructure);for(let A=0;A<r.length;A++)A!==n&&(Qt.forEach(r[A],s=>{i.has(s)&&a.add(s)}),t.throwIfTimedOut());return a.getSelection()}}var qK={};ki(qK,{atomCount:()=>PXe,countQuery:()=>GXe,propertySet:()=>NXe});function PXe(e){return e.currentStructure.elementCount}function GXe(e){return t=>{let r=e(t);return Qt.structureCount(r)}}function NXe(e){return t=>D2(t,e,new Set)}var $K;(u=>{function e(g){return!!g&&!!g.has}function t(g,m){return p=>g(p)===m}u.eq=t;function r(g,m){return p=>g(p)<m}u.lt=r;function n(g,m){return p=>g(p)<=m}u.lte=n;function o(g,m){return p=>g(p)>m}u.gt=o;function i(g,m){return p=>g(p)>=m}u.gte=i;function a(g){return!0}function A(g){return!1}function s(g,m){if(e(m))return p=>m.has(g(p));{if(m.length===0)return A;let p=new Set;for(let d=0;d<m.length;d++)p.add(m[d]);return d=>p.has(g(d))}}u.inSet=s;function c(...g){switch(g.length){case 0:return a;case 1:return g[0];case 2:{let m=g[0],p=g[1];return d=>m(d)&&p(d)}case 3:{let m=g[0],p=g[1],d=g[2];return f=>m(f)&&p(f)&&d(f)}case 4:{let m=g[0],p=g[1],d=g[2],f=g[3];return I=>m(I)&&p(I)&&d(I)&&f(I)}case 5:{let m=g[0],p=g[1],d=g[2],f=g[3],I=g[4];return C=>m(C)&&p(C)&&d(C)&&f(C)&&I(C)}case 6:{let m=g[0],p=g[1],d=g[2],f=g[3],I=g[4],C=g[5];return y=>m(y)&&p(y)&&d(y)&&f(y)&&I(y)&&C(y)}default:{let m=g.length;return p=>{for(let d=0;d<m;d++)if(!g[d])return!1;return!0}}}}u.and=c;function l(...g){switch(g.length){case 0:return A;case 1:return g[0];case 2:{let m=g[0],p=g[1];return d=>m(d)||p(d)}case 3:{let m=g[0],p=g[1],d=g[2];return f=>m(f)||p(f)||d(f)}case 4:{let m=g[0],p=g[1],d=g[2],f=g[3];return I=>m(I)||p(I)||d(I)||f(I)}case 5:{let m=g[0],p=g[1],d=g[2],f=g[3],I=g[4];return C=>m(C)||p(C)||d(C)||f(C)||I(C)}case 6:{let m=g[0],p=g[1],d=g[2],f=g[3],I=g[4],C=g[5];return y=>m(y)||p(y)||d(y)||f(y)||I(y)||C(y)}default:{let m=g.length;return p=>{for(let d=0;d<m;d++)if(g[d])return!0;return!1}}}}u.or=l})($K||={});var wo={generators:RK,filters:XK,modifiers:KK,combinators:ZK,pred:$K,internal:FK,atomset:qK};var Jc;(l=>{function e(u,g){return ve.create("Build Assembly",async m=>{let p=u.models;if(p.length!==1)throw new Error("Can only build assemblies from structures based on 1 model.");let d=ah.findAssembly(p[0],g);if(!d)throw new Error(`Assembly '${g}' is not defined.`);let f=Go.create(d.id,Y.identity(),{assembly:{id:d.id,operId:0,operList:[]}}),I=Ye.Builder({coordinateSystem:f,label:u.label,dynamicBonds:u.dynamicBonds}),C=new qo(u);for(let y of d.operatorGroups){let Q=y.selector(C);if(Qt.structureCount(Q)===0)continue;let{units:E}=Qt.unionStructure(Q);for(let b of y.operators)for(let x of E)I.addWithOperator(x,b)}return I.getStructure()})}l.buildAssembly=e;function t(u,g,m){return ve.create("Build Symmetry Assembly",async p=>{let d=u.models;if(d.length!==1)throw new Error("Can only build symmetry assemblies from structures based on 1 model.");let f=B(),I=Ye.Builder({label:u.label,representativeModel:d[0],dynamicBonds:u.dynamicBonds}),C=new qo(u);for(let y of g){let E=MXe(y.asymIds)(C);if(Qt.structureCount(E)===0)continue;let{units:b}=Qt.unionStructure(E);for(let{index:x,shift:[S,w,R]}of y.operators){let T=ide(m,x,S,w,R,f);for(let L of b)for(let F of T)I.addWithOperator(L,F)}}return I.getStructure()})}l.buildSymmetryAssembly=t;function r(u,g){return ve.create("Find Symmetry Mates",m=>_Xe(m,u,g))}l.builderSymmetryMates=r;function n(u,g,m){return ve.create("Build Symmetry",p=>VXe(p,u,g,m))}l.buildSymmetryRange=n;function o(u){return ve.create("Build NCS",g=>HXe(g,u))}l.buildNcs=o;function i(u,g){return u.invariantId===g.invariantId&&u.model.id===g.model.id&&je.areEqual(u.elements,g.elements)}l.areUnitsEquivalent=i;function a(){return mz(ge.hashUnit,i)}l.UnitEquivalenceBuilder=a;function A(u){let g=a();for(let p of u.units)g.add(p.id,p);let m=[];for(let p of g.groups)m.push(ge.SymmetryGroup(p.map(d=>u.unitMap.get(d))));return m}l.computeTransformGroups=A;function s(u){if(!u.child)return A(u);let g=u.child.unitSymmetryGroups,m=new Map;for(let f=0;f<g.length;f++)for(let I of g[f].units)m.set(I.id,f);let p=mz(f=>lc(ge.hashUnit(f),m.get(f.id)??-1),(f,I)=>i(f,I)&&m.get(f.id)===m.get(I.id));for(let f of u.units)p.add(f.id,f);let d=[];for(let f of p.groups)d.push(ge.SymmetryGroup(f.map(I=>u.unitMap.get(I))));return d}l.computeChildAwareTransformGroups=s;function c(u,g){if(u.length!==g.length)return!1;for(let m=0,p=u.length;m<p;++m){let d=u[m].units,f=g[m].units;if(d.length!==f.length||u[m].hashCode!==g[m].hashCode)return!1;for(let I=0,C=d.length;I<C;I++)if(d[I].conformation!==f[I].conformation)return!1;if(!je.areEqual(u[m].elements,g[m].elements))return!1}return!0}l.areTransformGroupsEquivalent=c})(Jc||={});function MXe(e){return wo.generators.atoms({chainTest:wo.pred.and(wo.pred.eq(t=>Ke.unit.operator_name(t.element),Go.DefaultName),wo.pred.inSet(t=>Ke.chain.label_asym_id(t.element),e))})}function ide(e,t,r,n,o,i){let{spacegroup:a,ncsOperators:A}=e,s=[],{toFractional:c}=a.cell,l=B.transformMat4(B(),i,c),u=HA.getSymmetryOperatorRef(a,t,r,n,o,l);if(A&&A.length)for(let g=0,m=A.length;g<m;++g){let p=A[g],d=Y.mul(Y(),u.matrix,p.matrix),f=Go.create(`${u.name} ${p.name}`,d,{assembly:u.assembly,ncsId:p.ncsId,hkl:u.hkl,spgrOp:u.spgrOp});s.push(f)}else s.push(u);return s}function ade(e,t,r,n){let{spacegroup:o,ncsOperators:i}=e,a=i&&i.length||0,A=[];!a&&t[0]<=0&&r[0]>=0&&t[1]<=0&&r[1]>=0&&t[2]<=0&&r[2]>=0&&(A[0]=HA.getSymmetryOperator(o,0,0,0,0));for(let s=0;s<o.operators.length;s++)for(let c=t[0];c<=r[0];c++)for(let l=t[1];l<=r[1];l++)for(let u=t[2];u<=r[2];u++)!a&&s===0&&c===0&&l===0&&u===0||A.push(...ide(e,s,c,l,u,n));return A}function kXe(e,t){return e._operators_333&&B.equals(t,e._operators_333.ref)||(e._operators_333={ref:B.clone(t),operators:ade(e,B.create(-3,-3,-3),B.create(3,3,3),t)}),e._operators_333.operators}function Ade(e,t){let r=Ye.Builder({label:e.label,dynamicBonds:e.dynamicBonds}),{units:n}=e;for(let o of t)for(let i of n)r.addWithOperator(i,o);return r.getStructure()}async function HXe(e,t){let r=t.models;if(r.length!==1)throw new Error("Can only build NCS from structures based on 1 model.");let n=Fo.Provider.get(r[0]);if(!n)return t;let o=n.ncsOperators;return!o||!o.length?t:Ade(t,o)}async function VXe(e,t,r,n){let o=t.models;if(o.length!==1)throw new Error("Can only build symmetries from structures based on 1 model.");let i=Fo.Provider.get(o[0]);if(!i)return t;let{spacegroup:a}=i;if(Ia.isZero(a.cell))return t;let A=_t.getCenter(o[0]),s=ade(i,r,n,A);return Ade(t,s)}async function _Xe(e,t,r){let n=t.models;if(n.length!==1)throw new Error("Can only build symmetries from structures based on 1 model.");let o=Fo.Provider.get(n[0]);if(!o)return t;let{spacegroup:i}=o;if(Ia.isZero(i.cell))return t;e.shouldUpdate&&await e.update("Initialing...");let a=_t.getCenter(n[0]),A=kXe(o,a),s=t.lookup3d,c=new Set;function l(p,d){return`${p.invariantId}|${d.name}`}let u=Ye.Builder({label:t.label,dynamicBonds:t.dynamicBonds}),{units:g}=t,m=B.zero();for(let p of A){for(let d of g){let f=d.lookup3d.boundary.sphere;B.transformMat4(m,f.center,p.matrix);let I=s.findUnitIndices(m[0],m[1],m[2],f.radius+r);for(let C=0,y=I.count;C<y;C++){if(!g[I.indices[C]].lookup3d.check(m[0],m[1],m[2],f.radius+r))continue;let E=l(d,p);c.has(E)||(u.addWithOperator(d,p),c.add(E))}}e.shouldUpdate&&await e.update("Building symmetry...")}return u.getStructure()}var gN=class{constructor(t,r){this.parent=t;this.isSorted=r;this.ids=[];this.unitMap=_c.Mutable();this.parentId=-1;this.currentUnit=[];this.elementCount=0}addToUnit(t,r){let n=this.unitMap.get(t);n?n[n.length]=r:(this.unitMap.set(t,[r]),this.ids[this.ids.length]=t),this.elementCount++}beginUnit(t){this.parentId=t,this.currentUnit=this.currentUnit.length>0?[]:this.currentUnit}addElement(t){this.currentUnit[this.currentUnit.length]=t,this.elementCount++}addElementRange(t,r,n){for(let o=r;o<n;o++)this.currentUnit[this.currentUnit.length]=t[o],this.elementCount++}commitUnit(){this.currentUnit.length!==0&&(this.ids[this.ids.length]=this.parentId,this.unitMap.set(this.parentId,this.currentUnit),this.parentId=-1)}setUnit(t,r){this.ids[this.ids.length]=t,this.unitMap.set(t,r),this.elementCount+=r.length}_getStructure(t){if(this.isEmpty)return Ye.Empty;let r=[];js(this.ids);let n=Jc.UnitEquivalenceBuilder();for(let o=0,i=this.ids.length;o<i;o++){let a=this.ids[o],A=this.parent.unitMap.get(a),s=this.unitMap.get(a),c=!1;t&&(this.isSorted||js(s),s=je.deduplicate(je.ofSortedArray(this.currentUnit)),c=!0);let l=s.length;if(s.length===A.elements.length){r[r.length]=A,n.add(A.id,A);continue}!this.isSorted&&!c&&l>1&&js(s);let u=A.getChild(je.ofSortedArray(s)),g=n.add(u.id,u);u!==g&&(u=g.applyOperator(u.id,u.conformation.operator,!0)),r[r.length]=u}return Ye.create(r,{parent:this.parent})}getStructure(){return this._getStructure(!1)}getStructureDeduplicate(){return this._getStructure(!0)}setSingletonLocation(t){let r=this.ids[0];t.unit=this.parent.unitMap.get(r),t.element=this.unitMap.get(r)[0]}get isEmpty(){return this.elementCount===0}};function sde(e,t){let r=1;for(;t--;)r*=e--;return r}function YXe(e,t){return t>e?0:sde(e,t)/sde(t,t)}function OXe(e){let t=e&-e,r=e+t,o=((r&-r)/t>>1)-1;return r|o}var ej=class{constructor(t,r){this.array=t;this.hasNext=!1;this.index=(1<<r)-1,this.size=YXe(t.length,r),this.maxIndex=1<<t.length,this.value=new Array(r),this.hasNext=r>0&&r<=t.length}move(){if(this.hasNext){let t=0,r=0,n=this.index;for(;n;n>>>=1,t++)n&1&&(this.value[r++]=this.array[t]);this.index=OXe(this.index),this.hasNext=this.index<this.maxIndex}return this.value}};function tj(e,t){let r=[],n=new ej(e,t);for(;n.hasNext;)r.push(n.move().slice());return r}var u0=[],cde={links:u0,terminalLinks:u0,elements:u0,partialElements:u0,getElementIndices:()=>u0,getLinkIndices:()=>u0,getTerminalLinkIndices:()=>u0};var pc=qd("C"),v2=qd("O"),JXe=[Am.elementFingerprint([pc,pc,pc,v2]),Am.elementFingerprint([pc,pc,pc,pc,v2]),Am.elementFingerprint([pc,pc,pc,pc,pc,v2]),Am.elementFingerprint([pc,pc,pc,pc,pc,pc,v2])];function zXe(e,t){let r=-1,n=-1,o=-1,i=-1,{elements:a}=e,{type_symbol:A,label_atom_id:s}=e.model.atomicHierarchy.atoms,{b:c,offset:l}=e.bonds;for(let u=0,g=t.length;u<g;++u){let m=a[t[u]];if(A.value(m)!==pc)continue;let p=0,d=0;for(let f=l[t[u]],I=l[t[u]+1];f<I;++f){let C=a[c[f]],y=A.value(C);y===v2?++p:y===pc&&++d}if(p===2){r=m;break}else p===1&&d===1?n=m:s.value(m).startsWith("C1")?o=m:i=m}return r!==-1?r:n!==-1?n:o!==-1?o:i!==-1?i:a[t[0]]}function KXe(e,t){let{elements:r}=e,{label_alt_id:n}=e.model.atomicHierarchy.atoms;return n.value(r[t])}function jXe(e,t,r,n){let o=t.conformation;return B.normalize(e,B.sub(e,n,o.position(r,e))),e}function lde(e,t){let{elements:r}=e,{label_atom_id:n}=e.model.atomicHierarchy.atoms;return n.value(r[t])}function WXe(e,t){if(!t||!t.length)return;let{unit:r,all:n}=e,o=new Set,i=tj(QA(new Array(t.length)),2);for(let a=0,A=i.length;a<A;++a){let s=i[a],c=n[t[s[0]]],l=n[t[s[1]]];je.areIntersecting(c,l)&&Am.getAltId(r,c)===Am.getAltId(r,l)&&(o.add(t[s[0]]),o.add(t[s[1]]))}if(o.size){let a=[];for(let A=0,s=t.length;A<s;++A)o.has(t[A])||a.push(t[A]);return a}else return t}function XXe(e,t){return t.properties.saccharideComponentMap.get(e)}function ude(e){if(e.models.reduce((g,m)=>g+m.properties.saccharideComponentMap.size,0)===0)return cde;let t=[],r=[],n=[],o=[],i=new Map;function a(g,m,p){return`${g}|${m}|${p}`}function A(g,m){i.has(g)?i.get(g).push(m):i.set(g,[m])}function s(g,m){B.sub(n[g].geometry.direction,n[m].geometry.center,n[g].geometry.center),B.normalize(n[g].geometry.direction,n[g].geometry.direction)}let c=B();function l(g,m,p){let d=p.conformation,f=n[g].geometry;B.sub(f.direction,d.position(p.elements[m],c),f.center),B.normalize(f.direction,f.direction)}for(let g=0,m=e.units.length;g<m;++g){let p=e.units[g];if(!ge.isAtomic(p))continue;let{model:d,rings:f}=p,{chainAtomSegments:I,residueAtomSegments:C,atoms:y}=d.atomicHierarchy,{label_comp_id:Q}=y,E=sr.transientSegments(I,p.elements),b=sr.transientSegments(C,p.elements),x;for(;E.hasNext;)for(b.setSegment(E.move());b.hasNext;){let{index:S}=b.move(),w=XXe(Q.value(C.offsets[S]),d);if(!w)continue;x||(x=oh.byFingerprintAndResidue(f,JXe));let R=WXe(f,x.get(S));if(!R||!R.length){o.push({unit:p,residueIndex:S,component:w});continue}let T=[];for(let F=0,v=R.length;F<v;++F){let U=f.all[R[F]],G=zXe(p,U),N=ru.calculateMomentsAxes(JG(p,U)),k=ru.calculateNormalizedAxes(N),J=B.copy(B(),k.origin),H=B.copy(B(),k.dirC),z=jXe(B(),p,G,J);B.orthogonalize(z,H,z);let _=Am.getAltId(p,U),M=n.length;T.push(M),A(a(S,p.id,_),M),_&&A(a(S,p.id,""),M),n.push({geometry:{center:J,normal:H,direction:z},component:w,ringIndex:R[F],altId:_,unit:p,residueIndex:S})}let L=tj(QA(new Array(R.length)),2);for(let F=0,v=L.length;F<v;++F){let U=L[F],G=f.all[R[U[0]]],N=f.all[R[U[1]]];if(fa.areVertexSetsConnected(p.bonds,G,N,3)){let k=T[U[0]],J=T[U[1]];n[k].altId===n[J].altId&&(s(k,J),s(J,k),t.push({carbohydrateIndexA:k,carbohydrateIndexB:J}),t.push({carbohydrateIndexA:J,carbohydrateIndexB:k}))}}}}function u(g,m){return i.get(a(g.getResidueIndex(m),g.id,KXe(g,m)))||[]}for(let g=0,m=n.length;g<m;++g){let p=n[g],{unit:d}=p;for(let f=g+1;f<m;++f){let I=n[f];if(d!==I.unit||p.residueIndex===I.residueIndex)continue;let C=d.rings.all[p.ringIndex],y=d.rings.all[I.ringIndex];fa.areVertexSetsConnected(d.bonds,C,y,3)&&(s(g,f),s(f,g),t.push({carbohydrateIndexA:g,carbohydrateIndexB:f}),t.push({carbohydrateIndexA:f,carbohydrateIndexB:g}))}}for(let g=0,m=e.units.length;g<m;++g){let p=e.units[g];ge.isAtomic(p)&&e.interUnitBonds.getConnectedUnits(p.id).forEach(d=>{d.connectedIndices.forEach(f=>{d.getEdges(f).forEach(({props:I,indexB:C})=>{if(!It.isCovalent(I.flag))return;let y=e.unitMap.get(d.unitA),Q=e.unitMap.get(d.unitB),E=u(y,f),b=u(Q,C);if(E.length>0&&b.length>0){let x=E.length,S=b.length;for(let w=0,R=Math.max(x,S);w<R;++w){let T=E[Math.min(w,x-1)],L=b[Math.min(w,S-1)],F=lde(y,f);(F.startsWith("O1")||F.startsWith("C1"))&&s(T,L),t.push({carbohydrateIndexA:T,carbohydrateIndexB:L})}}else if(b.length===0)for(let x of E){let S=lde(y,f);(S.startsWith("O1")||S.startsWith("C1"))&&l(x,C,Q),r.push({carbohydrateIndex:x,elementIndex:C,elementUnit:Q,fromCarbohydrate:!0})}else if(E.length===0)for(let x of b)r.push({carbohydrateIndex:x,elementIndex:f,elementUnit:y,fromCarbohydrate:!1})})})})}return{links:t,terminalLinks:r,elements:n,partialElements:o,...ZXe(n,t,r)}}function ZXe(e,t,r){function n(u,g){return ko(u.id,g)}function o(u,g,m){let p=[],d=u.get(n(g,m));if(d!==void 0)for(let f of d)Po(p,f);return p}let i=new Map;for(let u=0,g=e.length;u<g;++u){let{unit:m,ringIndex:p}=e[u],d=m.rings.all[p];for(let f=0,I=d.length;f<I;++f){let C=n(m,m.elements[d[f]]),y=i.get(C);y===void 0?i.set(C,[u]):y.push(u)}}function a(u,g){return o(i,u,g)}let A=new Map;for(let u=0,g=t.length;u<g;++u){let m=t[u],{unit:p,ringIndex:d}=e[m.carbohydrateIndexA],f=p.rings.all[d];for(let I=0,C=f.length;I<C;++I){let y=n(p,p.elements[f[I]]),Q=A.get(y);Q===void 0?A.set(y,[u]):Q.push(u)}}function s(u,g){return o(A,u,g)}let c=new Map;for(let u=0,g=r.length;u<g;++u){let{fromCarbohydrate:m,carbohydrateIndex:p,elementUnit:d,elementIndex:f}=r[u];if(m){let{unit:I,ringIndex:C}=e[p],y=I.rings.all[C];for(let Q=0,E=y.length;Q<E;++Q){let b=n(I,I.elements[y[Q]]),x=c.get(b);x===void 0?c.set(b,[u]):x.push(u)}}else{let I=n(d,d.elements[f]),C=c.get(I);C===void 0?c.set(I,[u]):C.push(u)}}function l(u,g){return o(c,u,g)}return{getElementIndices:a,getLinkIndices:s,getTerminalLinkIndices:l}}var gde={sites:{unitIds:[],indices:[],numbers:[],count:0},getSiteIndex:()=>-1,eachLigand:()=>{}};var qXe=4;function $Xe(e,t,r){let n=0,o=e.interUnitBonds.getEdgeIndices(r,t.id);for(let i=0,a=o.length;i<a;++i){let A=e.interUnitBonds.edges[o[i]];(It.isCovalent(A.props.flag)||It.is(A.props.flag,It.Flag.MetallicCoordination))&&(n+=1)}return n}function eZe(e,t){let r=0,{offset:n,edgeProps:{flags:o}}=e.bonds;for(let i=n[t],a=n[t+1];i<a;++i)(It.isCovalent(o[i])||It.is(o[i],It.Flag.MetallicCoordination))&&(r+=1);return r}function tZe(e,t,r){return $Xe(e,t,r)+eZe(t,r)}var dde=Hb.H;function rZe(e,t,r,n){let o=e.interUnitBonds.getEdgeIndices(r,t.id);for(let i=0,a=o.length;i<a;++i){let A=e.interUnitBonds.edges[o[i]],s=e.unitMap.get(A.unitB);(It.isCovalent(A.props.flag)||It.is(A.props.flag,It.Flag.MetallicCoordination))&&s.model.atomicHierarchy.derived.atom.atomicNumber[s.elements[A.indexB]]!==dde&&n(s,A.indexB)}}function nZe(e,t,r){let{elements:n}=e,{atomicNumber:o}=e.model.atomicHierarchy.derived.atom,{offset:i,b:a,edgeProps:{flags:A}}=e.bonds;for(let s=i[t],c=i[t+1];s<c;++s)(It.isCovalent(A[s])||It.is(A[s],It.Flag.MetallicCoordination))&&o[n[a[s]]]!==dde&&r(e,a[s])}function oZe(e,t,r,n){rZe(e,t,r,n),nZe(t,r,n)}function pde(e){let t=[],r=[],n=[],o=new Map;for(let a=0,A=e.units.length;a<A;++a){let s=e.units[a];if(!ge.isAtomic(s))continue;let{elements:c}=s;for(let l=0,u=c.length;l<u;++l){let g=c[l],m=l,p=tZe(e,s,m);p>=qXe&&(o.set(mde(s.id,g),o.size),t.push(s.id),r.push(m),n.push(p))}}if(o.size===0)return gde;let i=W.Location.create(e);return{sites:{unitIds:t,indices:r,numbers:n,count:o.size},getSiteIndex:(a,A)=>o.get(mde(a.id,A))??-1,eachLigand:(a,A)=>{let s=t[a],c=r[a],l=e.unitMap.get(s);oZe(e,l,c,(u,g)=>{i.unit=u,i.element=u.elements[g],A(i)})}}}function mde(e,t){return ko(e,t)}var mN=we(),iZe=new qi("14"),aZe=new qi("98");function AZe(e){return e>500?iZe:aZe}function fde(e){let{units:t}=e,r=AZe(t.length);r.reset();for(let n=0,o=t.length;n<o;n++){let i=t[n],a=i.boundary,A=i.conformation.operator;A.isIdentity?r.includeSphere(a.sphere):(we.transform(mN,a.sphere,A.matrix),r.includeSphere(mN))}r.finishedIncludeStep();for(let n=0,o=t.length;n<o;n++){let i=t[n],a=i.boundary,A=i.conformation.operator;A.isIdentity?r.radiusSphere(a.sphere):(we.transform(mN,a.sphere,A.matrix),r.radiusSphere(mN))}return{box:r.getBox(),sphere:r.getSphere()}}function Bde(e){let{units:t,elementCount:r,unitIndexMap:n}=e,o=new Uint32Array(t.length),i=new Uint32Array(r),a=new Uint32Array(r);for(let A=0,s=0,c=t.length;A<c;++A){o[A]=s;let{elements:l}=t[A];for(let u=0,g=l.length;u<g;++u){let m=s+u;i[m]=A,a[m]=l[u]}s+=l.length}return{cumulativeUnitElementCount:o,unitIndices:i,elementIndices:a,getSerialIndex:(A,s)=>o[n.get(A.id)]+Ee.indexOf(A.elements,s)}}function Ide(e){let t=0,r=[];for(let s of e.unitSymmetryGroups){r.push(t);let c=s.units[0];ge.isAtomic(c)&&(t+=c.bonds.edgeCount*2*s.units.length)}let n=new Uint32Array(t),o=new Uint32Array(t),i=new Uint32Array(t),a=0,A=0;for(let s of e.unitSymmetryGroups){let c=s.units[0];if(ge.isAtomic(c)){let l=c.bonds.edgeCount*2;for(let u=0,g=s.units.length;u<g;++u)for(let m=0,p=l;m<p;++m)n[a]=A,o[a]=m,i[a]=u,a+=1}A+=1}return{bondCount:t,unitIndex:n,unitEdgeIndex:o,unitGroupIndex:i,unitGroupOffset:r}}var Ye=class e{constructor(t,r,n,o,i){this.units=t;this.unitMap=r;this.unitIndexMap=n;this.state=o;this._child=i?.child,this._target=i?.target,this._proxy=void 0}subsetBuilder(t){return new gN(this,t)}get elementCount(){return this.state.elementCount}get bondCount(){return this.state.bondCount===-1&&(this.state.bondCount=this.interUnitBonds.edgeCount/2+Et.getIntraUnitBondCount(this)),this.state.bondCount}get hasCustomProperties(){return!!this.state.customProps&&this.state.customProps.all.length>0}get customPropertyDescriptors(){return this.state.customProps||(this.state.customProps=new bA),this.state.customProps}get currentPropertyData(){return this.state.propertyData||(this.state.propertyData=Object.create(null)),this.state.propertyData}get inheritedPropertyData(){return this.parent?this.parent.currentPropertyData:this.currentPropertyData}get polymerResidueCount(){return this.state.polymerResidueCount===-1&&(this.state.polymerResidueCount=pZe(this)),this.state.polymerResidueCount}get polymerGapCount(){return this.state.polymerGapCount===-1&&(this.state.polymerGapCount=fZe(this)),this.state.polymerGapCount}get polymerUnitCount(){return this.state.polymerUnitCount===-1&&(this.state.polymerUnitCount=BZe(this)),this.state.polymerUnitCount}get uniqueElementCount(){return this.state.uniqueElementCount===-1&&(this.state.uniqueElementCount=dZe(this)),this.state.uniqueElementCount}get atomicResidueCount(){return this.state.atomicResidueCount===-1&&(this.state.atomicResidueCount=IZe(this)),this.state.atomicResidueCount}get isCoarseGrained(){return this.models.some(t=>_t.isCoarseGrained(t))}get isEmpty(){return this.units.length===0}get hashCode(){return this.state.hashCode!==-1?this.state.hashCode:this.computeHash()}get transformHash(){return this.state.transformHash!==-1?this.state.transformHash:(this.state.transformHash=na(this.units.map(t=>t.id)),this.state.transformHash)}computeHash(){let t=23;for(let r=0,n=this.units.length;r<n;r++){let o=this.units[r];t=31*t+o.id|0,t=31*t+je.hashCode(o.elements)|0}return t=31*t+this.elementCount|0,t=gG(t),t===-1&&(t=0),this.state.hashCode=t,t}elementLocations(){return new e.ElementLocationIterator(this)}get root(){return this.state.parent??this}get parent(){return this.state.parent}get coordinateSystem(){return this.state.coordinateSystem}get label(){return this.state.label}get boundary(){return this.state.boundary?this.state.boundary:(this.state.boundary=fde(this),this.state.boundary)}get lookup3d(){return this.state.lookup3d?this.state.lookup3d:(this.state.lookup3d=new ZG(this),this.state.lookup3d)}get interUnitBonds(){return this.state.interUnitBonds?this.state.interUnitBonds:(this.parent&&this.state.dynamicBonds===this.parent.state.dynamicBonds&&this.parent.state.interUnitBonds&&this.parent.state.interUnitBonds.edgeCount===0?this.state.interUnitBonds=new eI(new Map):this.state.interUnitBonds=Mge(this,{ignoreWater:!this.dynamicBonds,ignoreIon:!this.dynamicBonds,validUnit:this.state.interBondsValidUnit,validUnitPair:this.state.interBondsValidUnitPair}),this.state.interUnitBonds)}get dynamicBonds(){return this.state.dynamicBonds}get interBondsValidUnit(){return this.state.interBondsValidUnit}get interBondsValidUnitPair(){return this.state.interBondsValidUnitPair}get unitSymmetryGroups(){return this.state.unitSymmetryGroups?this.state.unitSymmetryGroups:(this.state.unitSymmetryGroups=Jc.computeTransformGroups(this),this.state.unitSymmetryGroups)}get unitSymmetryGroupsIndexMap(){return this.state.unitSymmetryGroupsIndexMap?this.state.unitSymmetryGroupsIndexMap:(this.state.unitSymmetryGroupsIndexMap=ge.SymmetryGroup.getUnitSymmetryGroupsIndexMap(this.unitSymmetryGroups),this.state.unitSymmetryGroupsIndexMap)}get carbohydrates(){return this.state.carbohydrates?this.state.carbohydrates:(this.state.carbohydrates=ude(this),this.state.carbohydrates)}get coordination(){return this.state.coordination?this.state.coordination:(this.state.coordination=pde(this),this.state.coordination)}get models(){return this.state.models?this.state.models:(this.state.models=cZe(this),this.state.models)}get uniqueResidueNames(){return this.state.uniqueResidueNames||(this.state.uniqueResidueNames=lZe(this))}get uniqueElementSymbols(){return this.state.uniqueElementSymbols||(this.state.uniqueElementSymbols=uZe(this))}get entityIndices(){return this.state.entityIndices||(this.state.entityIndices=gZe(this))}get uniqueAtomicResidueIndices(){return this.state.uniqueAtomicResidueIndices||(this.state.uniqueAtomicResidueIndices=mZe(this))}get isAtomic(){for(let t of this.units)if(!ge.isAtomic(t))return!1;return!0}get hasAtomic(){for(let t of this.units)if(ge.isAtomic(t))return!0;return!1}get isCoarse(){for(let t of this.units)if(!ge.isCoarse(t))return!1;return!0}get hasCoarse(){for(let t of this.units)if(ge.isCoarse(t))return!0;return!1}get serialMapping(){return this.state.serialMapping||(this.state.serialMapping=Bde(this))}get intraUnitBondMapping(){return this.state.intraUnitBondMapping||(this.state.intraUnitBondMapping=Ide(this))}get model(){if(this.state.model)return this.state.model;if(this.state.representativeModel)return this.state.representativeModel;if(this.state.masterModel)return this.state.masterModel;let t=this.models;if(t.length>1)throw new Error("The structure is based on multiple models and has neither a master- nor a representative-model.");return this.state.model=t[0],this.state.model}get masterModel(){return this.state.masterModel}get representativeModel(){return this.state.representativeModel}hasElement(t){return this.unitMap.has(t.unit.id)?je.has(this.unitMap.get(t.unit.id).elements,t.element):!1}getModelIndex(t){return this.models.indexOf(t)}remapModel(t){let{dynamicBonds:r,interUnitBonds:n,parent:o}=this.state,i=[];for(let a of this.unitSymmetryGroups){let A=a.units[0].remapModel(t,r);i.push(A);for(let s=1,c=a.units.length;s<c;++s){let l=a.units[s];i.push(l.remapModel(t,r,A.props))}}return e.create(i,{parent:o?.remapModel(t),label:this.label,interUnitBonds:r?void 0:n,dynamicBonds:r,interBondsValidUnit:this.state.interBondsValidUnit,interBondsValidUnitPair:this.state.interBondsValidUnitPair,coordinateSystem:this.state.coordinateSystem,masterModel:this.state.masterModel,representativeModel:this.state.representativeModel})}asParent(){if(this._proxy)return this._proxy;if(this.parent){let t=this.parent.coordinateSystem.isIdentity?this.parent:e.transform(this.parent,this.parent.coordinateSystem.inverse),r=this.coordinateSystem.isIdentity?t:e.transform(t,this.coordinateSystem.matrix);this._proxy=new e(r.units,r.unitMap,r.unitIndexMap,{...r.state,dynamicBonds:this.dynamicBonds},{child:this,target:this.parent})}else this._proxy=this;return this._proxy}get child(){return this._child}get target(){return this._target??this}};function sZe(e,t,r){return e[t].id-e[r].id}function cZe(e){let{units:t}=e,r=yo.create();for(let n of t)yo.add(r,n.model.id,n.model);return r.array}function lZe(e){let{microheterogeneityCompIds:t}=Ke.residue,r=new Set,n=W.Location.create(e);for(let o of e.unitSymmetryGroups){let i=o.units[0];if(!ge.isAtomic(i))continue;let a=sr.transientSegments(i.model.atomicHierarchy.residueAtomSegments,i.elements);for(n.unit=i;a.hasNext;){let A=a.move();n.element=i.elements[A.start];let s=t(n);for(let c of s)r.add(c)}}return r}function uZe(e){let t=Ke.atom.type_symbol,r=new Set,n=W.Location.create(e);for(let o of e.unitSymmetryGroups){let i=o.units[0];if(ge.isAtomic(i)){n.unit=i;for(let a=0,A=i.elements.length;a<A;++a)n.element=i.elements[a],r.add(t(n))}}return r}function gZe(e){let{units:t}=e,r=W.Location.create(e),n=yo.create();for(let o of t){let i=o.kind===ge.Kind.Atomic?Ke.entity.key:Ke.coarse.entityKey;r.unit=o;let a=o.elements,A=sr.transientSegments(o.model.atomicHierarchy.chainAtomSegments,a);for(;A.hasNext;){let s=A.move();r.element=a[s.start];let c=i(r);yo.add(n,c,c)}}return js(n.array),n.array}function mZe(e){let t=new Map,r=[],n=e.unitSymmetryGroups;for(let i of n){let a=i.units[0];if(!ge.isAtomic(a))continue;let A;t.has(a.model.id)?A=t.get(a.model.id):(A=yo.create(),r.push(a.model.id),t.set(a.model.id,A));let s=sr.transientSegments(a.model.atomicHierarchy.residueAtomSegments,a.elements);for(;s.hasNext;){let c=s.move();yo.add(A,c.index,c.index)}}let o=new Map;for(let i of r){let a=t.get(i).array;js(a),o.set(i,a)}return o}function dZe(e){let{unitSymmetryGroups:t}=e,r=0;for(let n=0,o=t.length;n<o;n++)r+=t[n].elements.length;return r}function pZe(e){let{units:t}=e,r=0;for(let n=0,o=t.length;n<o;n++)r+=t[n].polymerElements.length;return r}function fZe(e){let{units:t}=e,r=0;for(let n=0,o=t.length;n<o;n++)r+=t[n].gapElements.length/2;return r}function BZe(e){let{units:t}=e,r=0;for(let n=0,o=t.length;n<o;n++)t[n].polymerElements.length>0&&(r+=1);return r}function IZe(e){let{units:t}=e,r=0;for(let n=0,o=t.length;n<o;n++){let i=t[n];if(!ge.isAtomic(i))continue;let{elements:a,residueIndex:A}=i,s=-1,c=-1;for(let l=0,u=a.length;l<u;++l)s=A[a[l]],s!==c&&(r+=1,c=s)}return r}(Se=>{Se.Empty=s([]);function t(ee){return{kind:"structure-loci",structure:ee}}Se.Loci=t;function r(ee){let O=[];for(let X of ee.units)O.push({unit:X,indices:Ue.ofBounds(0,X.elements.length)});return W.Loci(ee,O)}Se.toStructureElementLoci=r;function n(ee,O){return Qt.toLociWithSourceUnits(Qt.Singletons(ee,O))}Se.toSubStructureElementLoci=n;function o(ee){return!!ee&&ee.kind==="structure-loci"}Se.isLoci=o;function i(ee,O){return ee.structure===O.structure}Se.areLociEqual=i;function a(ee){return ee.structure.isEmpty}Se.isLociEmpty=a;function A(ee,O){return O===ee.structure?ee:t(O)}Se.remapLoci=A;function s(ee,O={}){let X=_c.Mutable(),Ce=_c.Mutable(),Ne=0,$=!0,pe=ee.length>0?ee[0].id:0;for(let Be=0,De=ee.length;Be<De;Be++){let Te=ee[Be];X.set(Te.id,Te),Ne+=Te.elements.length,Te.id<pe&&($=!1),pe=Te.id}$||kS(ee,0,ee.length,sZe,Lf);for(let Be=0,De=ee.length;Be<De;Be++)Ce.set(ee[Be].id,Be);let ye={hashCode:-1,transformHash:-1,elementCount:Ne,bondCount:-1,uniqueElementCount:-1,atomicResidueCount:-1,polymerResidueCount:-1,polymerGapCount:-1,polymerUnitCount:-1,dynamicBonds:!1,coordinateSystem:Go.Default,label:""};return O.parent&&(ye.parent=O.parent.parent||O.parent),O.interUnitBonds&&(ye.interUnitBonds=O.interUnitBonds),O.interBondsValidUnit?ye.interBondsValidUnit=O.interBondsValidUnit:O.parent&&(ye.interBondsValidUnit=O.parent.interBondsValidUnit),O.interBondsValidUnitPair?ye.interBondsValidUnitPair=O.interBondsValidUnitPair:O.parent&&(ye.interBondsValidUnitPair=O.parent.interBondsValidUnitPair),O.dynamicBonds?ye.dynamicBonds=O.dynamicBonds:O.parent&&(ye.dynamicBonds=O.parent.dynamicBonds),O.coordinateSystem?ye.coordinateSystem=O.coordinateSystem:O.parent&&(ye.coordinateSystem=O.parent.coordinateSystem),O.label?ye.label=O.label:O.parent&&(ye.label=O.parent.label),O.masterModel?ye.masterModel=O.masterModel:O.parent&&(ye.masterModel=O.parent.masterModel),O.representativeModel?ye.representativeModel=O.representativeModel:O.parent&&(ye.representativeModel=O.parent.representativeModel),new Se(ee,X,Ce,ye)}Se.create=s;async function c(ee,O){if(ee.frameCount===0)return Se.Empty;let X=[],Ce,Ne=0;for(let $=0,pe=ee.frameCount;$<pe;++$){let ye=await ve.resolveInContext(ee.getFrameAtIndex($),O);Ce||(Ce=ye);let Be=l(ye);for(let De=0,Te=Be.units.length;De<Te;++De){let be=Be.units[De],Fe=be.invariantId+Ne,Ae=be.chainGroupId+Ne,fe=ge.create(X.length,Fe,Ae,be.traits,be.kind,be.model,be.conformation.operator,be.elements);X.push(fe)}Ne=X.length}return s(X,{representativeModel:Ce,label:Ce.label})}Se.ofTrajectory=c;function l(ee,O={}){let X=ee.atomicHierarchy.chainAtomSegments,{index:Ce}=ee.atomicHierarchy,{auth_asym_id:Ne}=ee.atomicHierarchy.chains,{atomicChainOperatorMappinng:$}=ee,pe=new d({label:ee.label,...O});for(let Be=0;Be<X.count;Be++){let De=$.get(Be)||Go.Default,Te=X.offsets[Be],be=!1,Fe=!1;if(u(ee,Be))for(Fe=!0;Be+1<X.count&&u(ee,Be+1);){let Qe=$.get(Be),Ie=$.get(Be+1);if(Qe!==Ie)break;be=!0,Be++}else for(;Be+1<X.count&&X.offsets[Be+1]-X.offsets[Be]===1&&X.offsets[Be+2]-X.offsets[Be+1]===1;){let Qe=Ce.getEntityFromChain(Be),Ie=Ce.getEntityFromChain(Be+1);if(Qe!==Ie)break;let le=Ne.value(Be),Oe=Ne.value(Be+1);if(le!==Oe)break;let tt=$.get(Be),it=$.get(Be+1);if(tt!==it)break;be=!0,Be++}let Ae=je.ofBounds(Te,X.offsets[Be+1]),fe=ge.Trait.None;be&&(fe|=ge.Trait.MultiChain),Fe&&(fe|=ge.Trait.Water),_t.isCoarseGrained(ee)&&(fe|=ge.Trait.CoarseGrained),pe.addUnit(ge.Kind.Atomic,ee,De,Ae,fe)}let ye=ee.coarseHierarchy;return ye.isDefined&&(ye.spheres.count>0&&g(pe,ee,ee.coarseHierarchy.spheres,ge.Kind.Spheres),ye.gaussians.count>0&&g(pe,ee,ee.coarseHierarchy.gaussians,ge.Kind.Gaussians)),pe.getStructure()}Se.ofModel=l;function u(ee,O){let X=ee.atomicHierarchy.index.getEntityFromChain(O);return ee.entities.data.type.value(X)==="water"}function g(ee,O,X,Ce){let{chainElementSegments:Ne}=X;for(let $=0;$<Ne.count;$++){let pe=je.ofBounds(Ne.offsets[$],Ne.offsets[$+1]);ee.addUnit(Ce,O,Go.Default,pe,ge.Trait.None)}}function m(ee,O){if(Y.isIdentity(O))return ee;if(!Y.isRotationAndTranslation(O,Go.RotationTranslationEpsilon))throw new Error("Only rotation/translation combination can be applied.");let X=[];for(let $ of ee.units){let pe=$.conformation.operator,ye=Go.create(pe.name,O,pe);X.push($.applyOperator($.id,ye))}let Ce=ee.coordinateSystem,Ne=Go.compose(Go.create(Ce.name,O,Ce),Ce);return s(X,{parent:ee,coordinateSystem:Ne})}Se.transform=m;function p(ee,O){for(let Ne of O)if(!Y.isRotationAndTranslation(Ne,Go.RotationTranslationEpsilon))throw new Error("Only rotation/translation combination can be applied.");let X=[],Ce=0;for(let Ne of ee.units){let $=Ne.conformation.operator;for(let pe of O){if(Y.isIdentity(pe)){X.push(Ne);continue}let ye=Go.create($.name,pe,$);X.push(Ne.applyOperator(Ce++,ye))}}return s(X,{parent:ee})}Se.instances=p;class d{constructor(O={}){this.props=O;this.units=[];this.invariantId=ua();this.chainGroupId=-1;this.inChainGroup=!1;this.p=B();this.singleElementUnits=new Map}beginChainGroup(){this.chainGroupId++,this.inChainGroup=!0}endChainGroup(){this.inChainGroup=!1}addUnit(O,X,Ce,Ne,$,pe){pe===void 0&&(pe=this.invariantId());let ye=this.inChainGroup?this.chainGroupId:++this.chainGroupId,Be=ge.create(this.units.length,pe,ye,$,O,X,Ce,Ne);return this.add(Be)}copyUnit(O,X){let Ce=X?.invariantId;Ce===void 0&&(Ce=this.invariantId());let Ne=this.inChainGroup?this.chainGroupId:++this.chainGroupId,$=O.getCopy(this.units.length,Ce,Ne,X);return this.add($)}add(O){if(O.elements.length===1){O.conformation.position(O.elements[0],this.p);let X=[O.invariantId,this.p[0],this.p[1],this.p[2]].join("|");if(this.singleElementUnits.has(X))return this.singleElementUnits.get(X);this.singleElementUnits.set(X,O)}return this.units.push(O),O}addWithOperator(O,X,Ce=!1){return this.add(O.applyOperator(this.units.length,X,Ce))}getStructure(){return s(this.units,this.props)}get isEmpty(){return this.units.length===0}}Se.StructureBuilder=d;function f(ee={}){return new d(ee)}Se.Builder=f;function I(ee){return ee.hashCode}Se.hashCode=I;function C(ee){return Ob(ee.units.map(O=>ge.conformationId(O)).join("|"))}Se.conformationHash=C;function y(ee,O){if(ee===O)return!0;if(ee.elementCount!==O.elementCount)return!1;let X=ee.units.length;if(X!==O.units.length)return!1;for(let Ce=0;Ce<X;Ce++)if(ee.units[Ce].id!==O.units[Ce].id)return!1;return!0}Se.areUnitIdsEqual=y;function Q(ee,O){if(ee===O)return!0;if(!y(ee,O))return!1;for(let X=0,Ce=ee.units.length;X<Ce;X++)if(!je.areEqual(ee.units[X].elements,O.units[X].elements))return!1;return!0}Se.areUnitIdsAndIndicesEqual=Q;function E(ee,O){if(ee.hashCode!==O.hashCode)return!1;let X=ee.models.length;if(X!==O.models.length)return!1;for(let Ce=0;Ce<X;Ce++)if(!_t.areHierarchiesEqual(ee.models[Ce],O.models[Ce]))return!1;return!0}Se.areHierarchiesEqual=E;function b(ee,O){return ee===O||ee.hashCode===O.hashCode&&Jc.areTransformGroupsEquivalent(ee.unitSymmetryGroups,O.unitSymmetryGroups)}Se.areEquivalent=b;function x(ee,O){return b(ee.root,O.root)}Se.areRootsEquivalent=x;function S(ee,O){return ee.root===O.root}Se.areRootsEqual=S;class w{constructor(O){this.structure=O;this.unitIndex=0;this.maxIdx=0;this.idx=-1;this.current=W.Location.create(O),this.hasNext=O.elementCount>0,this.hasNext&&(this.elements=O.units[0].elements,this.maxIdx=this.elements.length-1,this.current.unit=O.units[0])}move(){return this.advance(),this.current.element=this.elements[this.idx],this.current}advance(){if(this.idx<this.maxIdx){this.idx++,this.idx===this.maxIdx&&(this.hasNext=this.unitIndex+1<this.structure.units.length);return}if(this.idx=0,this.unitIndex++,this.unitIndex>=this.structure.units.length){this.hasNext=!1;return}this.current.unit=this.structure.units[this.unitIndex],this.elements=this.current.unit.elements,this.maxIdx=this.elements.length-1,this.maxIdx===0&&(this.hasNext=this.unitIndex+1<this.structure.units.length)}}Se.ElementLocationIterator=w;let R=B();function T(ee,O,X){let{elements:Ce,conformation:Ne}=ee,$=R,pe=Number.MAX_VALUE;for(let ye=0,Be=Ce.length;ye<Be;ye++){let De=Ce[ye],Te=B.distance(O,Ne.position(De,$))-X-Ne.r(De);Te<pe&&(pe=Te)}return pe}function L(ee,O,X){let{units:Ce}=ee,Ne=Number.MAX_VALUE;for(let $=0,pe=Ce.length;$<pe;$++){let ye=Ce[$],Be=T(ye,O,X);Be<Ne&&(Ne=Be)}return Ne}Se.minDistanceToPoint=L;let F=B();function v(ee,O){if(ee.elementCount===0||O.elementCount===0)return 0;let{units:X}=ee,Ce=Number.MAX_VALUE;for(let Ne=0,$=X.length;Ne<$;Ne++){let pe=X[Ne],{elements:ye,conformation:Be}=pe;for(let De=0,Te=ye.length;De<Te;De++){let be=ye[De],Fe=L(O,Be.position(be,F),Be.r(be));Fe<Ce&&(Ce=Fe)}}return Ce}Se.distance=v;function U(ee){return ee.elementCount===1?"1 element":`${ee.elementCount} elements`}Se.elementDescription=U;function G(ee,O,X){return ee.masterModel?O.model===X.model||O.model===ee.masterModel||X.model===ee.masterModel:O.model===X.model}Se.validUnitPair=G;function N(ee,O,X){let{maxRadius:Ce,validUnit:Ne,validUnitPair:$}=X;if(!ee.units.some(Be=>Ne(Be)))return;let pe=ee.lookup3d,ye=B();for(let Be of ee.units){if(!Ne(Be))continue;let De=Be.boundary.sphere;B.transformMat4(ye,De.center,Be.conformation.operator.matrix);let Te=pe.findUnitIndices(ye[0],ye[1],ye[2],De.radius+Ce);for(let be=0;be<Te.count;be++){let Fe=ee.units[Te.indices[be]];Be.id>=Fe.id||!Ne(Fe)||!$(Be,Fe)||(Fe.elements.length>=Be.elements.length?O(Be,Fe):O(Fe,Be))}}}Se.eachUnitPair=N;function k(ee,{chain:O,residue:X,atom:Ce}){let Ne=W.Location.create(ee);for(let $ of ee.units){if($.kind!==ge.Kind.Atomic)continue;Ne.unit=$;let{elements:pe}=$,ye=sr.transientSegments($.model.atomicHierarchy.chainAtomSegments,pe),Be=sr.transientSegments($.model.atomicHierarchy.residueAtomSegments,pe);for(;ye.hasNext;){let De=ye.move();if(O&&(Ne.element=pe[De.start],O(Ne)),!(!X&&!Ce))for(Be.setSegment(De);Be.hasNext;){let Te=Be.move();if(X&&(Ne.element=pe[Te.start],X(Ne)),!!Ce)for(let be=Te.start,Fe=Te.end;be<Fe;be++)Ne.element=pe[be],Ce(Ne)}}}}Se.eachAtomicHierarchyElement=k,Se.DefaultSizeThresholds={smallResidueCount:10,mediumResidueCount:5e3,largeResidueCount:3e4,highSymmetryUnitCount:10,fiberResidueCount:15};function H(ee){return ee.unitSymmetryGroups.filter(O=>O.units[0].polymerElements.length>0)}function z(ee,O){let X=H(ee);return X.length===1&&X[0].units.length>2&&X[0].units[0].polymerElements.length<O.fiberResidueCount}function _(ee,O){let X=H(ee);return X.length>=1&&X[0].units.length>O.highSymmetryUnitCount}let M;($=>($[$.Small=0]="Small",$[$.Medium=1]="Medium",$[$.Large=2]="Large",$[$.Huge=3]="Huge",$[$.Gigantic=4]="Gigantic"))(M=Se.Size||={});function q(ee,O={},X=1){let Ce={...Se.DefaultSizeThresholds,...O};return ee.polymerResidueCount>=Ce.largeResidueCount*X?_(ee,Ce)?3:4:z(ee,Ce)||ee.polymerResidueCount<Ce.smallResidueCount*X?0:ee.polymerResidueCount<Ce.mediumResidueCount*X?1:2}Se.getSize=q,Se.Index=eA.createSimple("index","root"),Se.MaxIndex=eA.createSimple("max_index","root");let ae="__PrincipalAxes__";function me(ee){if(ee.currentPropertyData[ae])return ee.currentPropertyData[ae];let O=W.Loci.getPrincipalAxes(Se.toStructureElementLoci(ee));return ee.currentPropertyData[ae]=O,O}Se.getPrincipalAxes=me})(Ye||={});var rj=class{constructor(){this.addedProps=new Set;this.map=new Map}removeSymbol(t){this.map.delete(t.symbol.id)}addSymbol(t){this.map.has(t.symbol.id)&&console.warn(`Symbol '${t.symbol.id}' already added. Call removeSymbol/removeCustomProps re-adding the symbol.`),this.map.set(t.symbol.id,t)}addCustomProp(t){if(!this.addedProps.has(t.name)&&(this.addedProps.add(t.name),!!t.symbols))for(let r of Object.keys(t.symbols))this.addSymbol(t.symbols[r])}removeCustomProp(t){if(this.addedProps.delete(t.name),!!t.symbols)for(let r of Object.keys(t.symbols))this.removeSymbol(t.symbols[r])}getRuntime(t){return this.map.get(t)}},Zs=new rj,nj=class{constructor(t){this.table=t;this.constQueryContext=new qo(Ye.Empty)}},CZe;(r=>{function e(n){return{kind:"const",value:n}}r.Const=e;function t(n){return{kind:"dynamic",runtime:n}}r.Dynamic=t})(CZe||={});var dD;(r=>{function e(n){return{isConst:!0,fn:function(i){return n}}}r.Const=e;function t(n){return{isConst:!1,fn:n}}r.Dynamic=t})(dD||={});var F2;(t=>{function e(r,n,o,i){if(typeof r.length=="number")for(let a=0,A=r.length;a<A;a++)o(r[a](n),a,i);else{let a=0;for(let A of Object.keys(r))o(r[A](n),a++,i)}return i}t.forEachEval=e})(F2||={});var qs;(r=>{function e(n,o){return new dN(n,o,!0)}r.Const=e;function t(n,o){return new dN(n,o,!1)}r.Dynamic=t})(qs||={});var dN=class{constructor(t,r,n){this.symbol=t;this.fn=r;this.isConst=n}compile(t,r){let n,o=!1;if(!r)n=void 0,o=!0;else if(os.isArgumentsArray(r)){n=[],o=!0;for(let i of r){let a=oj(t,i);o=o&&a.isConst,n.push(a.fn)}}else{n=Object.create(null),o=!0;for(let i of Object.keys(r)){let a=oj(t,r[i]);o=o&&a.isConst,n[i]=a.fn}}return this.isConst?this.isConst&&o?dD.Const(this.fn(t.constQueryContext,n)):dD.Dynamic(Cde(this.fn,n)):dD.Dynamic(Cde(this.fn,n))}};function Cde(e,t){return function(n){return e(n,t)}}function oj(e,t){if(os.isLiteral(t))return dD.Const(t);if(os.isSymbol(t)){let n=e.table.getRuntime(t.name);return n?n.compile(e):dD.Const(t.name)}if(!os.isSymbol(t.head))throw new Error("Can only apply symbols.");let r=e.table.getRuntime(t.head.name);if(!r)throw new Error(`Symbol '${t.head.name}' is not implemented.`);return r.compile(e,t.args)}function au(e){let t=new nj(Zs);return oj(t,e).fn}var hZe=EA.diff;function np(e,t){return{kind:"element-loci",structure:e,elements:t}}(Ne=>{function e($){return!!$&&$.kind==="element-loci"}Ne.is=e;function t($,pe){if($.structure!==pe.structure||$.elements.length!==pe.elements.length)return!1;for(let ye=0,Be=$.elements.length;ye<Be;++ye){let De=$.elements[ye],Te=pe.elements[ye];if(De.unit.id!==Te.unit.id||!Ee.areEqual(De.indices,Te.indices))return!1}return!0}Ne.areEqual=t;function r($){for(let pe of $.elements)if(Ee.size(pe.indices)>0)return!1;return!0}Ne.isEmpty=r;function n($){return o($)===$.structure.elementCount}Ne.isWholeStructure=n;function o($){let pe=0;for(let{indices:ye}of $.elements)typeof ye=="number"?pe+=hZe(ye):pe+=ye.length;return pe}Ne.size=o;function i($){return Ne($,$.units.map(pe=>({unit:pe,indices:Ee.ofBounds(0,pe.elements.length)})))}Ne.all=i;function a($){return Ne($,[])}Ne.none=a;function A($,pe,ye){let Be;typeof pe=="function"?Be=pe(ce):Be=pe;let De=au(Be)(ye??new qo($));return Qt.toLociWithSourceUnits(De)}Ne.fromExpression=A;function s($,pe,ye){let Be=pe(ye??new qo($));return Qt.toLociWithSourceUnits(Be)}Ne.fromQuery=s;function c($,pe,ye){return y2.toLoci($,pe,ye)}Ne.fromSchema=c;function l($,pe){if(r($))return;let ye=$.elements[0].unit,Be=ye.elements[Ee.getAt($.elements[0].indices,0)];return pe?(pe.structure=$.structure,pe.unit=$.elements[0].unit,pe.element=Be,pe):Di.create($.structure,ye,Be)}Ne.getFirstLocation=l;function u($){return r($)?$:Ne($.structure,[{unit:$.elements[0].unit,indices:Ee.ofSingleton(Ee.start($.elements[0].indices))}])}Ne.firstElement=u;function g($){return r($)?$:x(u($))}Ne.firstResidue=g;function m($){return r($)?$:L(u($))}Ne.firstChain=m;function p($){let pe=[];for(let ye of $.elements){let{unit:Be,indices:De}=ye,Te=new Int32Array(Ee.size(De));Ee.forEach(De,(be,Fe)=>Te[Fe]=Be.elements[be]),pe.push(Be.getChild(je.ofSortedArray(Te)))}return Ye.create(pe,{parent:$.structure.parent})}Ne.toStructure=p;function d($,pe,ye){if(Ne.isEmpty($))return;let Be=ye||Di.create($.structure);Be.structure=$.structure;for(let De of $.elements){let{unit:Te,indices:be}=De;Be.unit=Te;let{elements:Fe}=De.unit;for(let Ae=0,fe=Ee.size(be);Ae<fe;Ae++)Be.element=Fe[Ee.getAt(be,Ae)],pe(Be)}}Ne.forEachLocation=d;function f($,pe){if(pe===$.structure)return $;let ye=[];return $.elements.forEach(Be=>{if(!pe.unitMap.has(Be.unit.id))return;let De=pe.unitMap.get(Be.unit.id),Te=Ee.indexedIntersect(Be.indices,Be.unit.elements,De.elements);Ee.size(Te)>0&&ye.push({unit:De,indices:Te})}),Ne(pe,ye)}Ne.remap=f;function I($,pe){if($.elements.length>pe.elements.length)return I(pe,$);if(Ne.isEmpty($))return pe;let ye=new Map;for(let De of $.elements)ye.set(De.unit.id,De.indices);let Be=[];for(let De of pe.elements)ye.has(De.unit.id)?(Be[Be.length]={unit:De.unit,indices:Ee.union(ye.get(De.unit.id),De.indices)},ye.delete(De.unit.id)):Be[Be.length]=De;return ye.forEach((De,Te)=>{Be[Be.length]={unit:$.structure.unitMap.get(Te),indices:De}}),Ne($.structure,Be)}Ne.union=I;function C($,pe){let ye=new Map;for(let De of pe.elements)ye.set(De.unit.id,De.indices);let Be=[];for(let De of $.elements)if(ye.has(De.unit.id)){let Te=Ee.subtract(De.indices,ye.get(De.unit.id));if(Ee.size(Te)===0)continue;Be[Be.length]={unit:De.unit,indices:Te}}else Be[Be.length]=De;return Ne($.structure,Be)}Ne.subtract=C;function y($,pe){let ye=new Map;for(let De of $.elements)ye.set(De.unit.id,De.indices);let Be=[];for(let De of pe.elements){if(!ye.has(De.unit.id))continue;let Te=Ee.intersect(ye.get(De.unit.id),De.indices);Ee.size(Te)!==0&&(Be[Be.length]={unit:De.unit,indices:Te})}return Ne($.structure,Be)}Ne.intersect=y;function Q($,pe){if($.elements.length>pe.elements.length)return Q(pe,$);if(Ne.isEmpty($))return Ne.isEmpty(pe);let ye=new Map;for(let Be of $.elements)ye.set(Be.unit.id,Be.indices);for(let Be of pe.elements)if(ye.has(Be.unit.id)&&Ee.areIntersecting(ye.get(Be.unit.id),Be.indices))return!0;return!1}Ne.areIntersecting=Q;function E($,pe){if(Ne.isEmpty($))return Ne.isEmpty(pe);let ye=new Map;for(let De of $.elements)ye.set(De.unit.id,De.indices);let Be=!1;for(let De of pe.elements){if(!ye.has(De.unit.id))return!1;if(Ee.isSubset(ye.get(De.unit.id),De.indices))Be=!0;else return!1}return Be}Ne.isSubset=E;function b($){return $.length>3&&je.isRange($)?Ue.ofRange($[0],$[$.length-1]):je.ofSortedArray($)}function x($,pe){let ye=[],Be=new Set;for(let De of $.elements){if(w(De)){ye[ye.length]=De;continue}if(De.unit.kind===ge.Kind.Atomic){let Te=De.unit.elements,be=De.unit.model.atomicHierarchy,{label_alt_id:Fe}=De.unit.model.atomicHierarchy.atoms,{index:Ae,offsets:fe}=be.residueAtomSegments,Qe=[],Ie=De.indices,le=Ee.size(Ie),Oe=0;for(;Oe<le;){Be.clear();let tt=Te[Ee.getAt(Ie,Oe)],it=Ae[tt];for(Be.add(Fe.value(tt)),Oe++;Oe<le;){let Mt=Te[Ee.getAt(Ie,Oe)];if(Ae[Mt]!==it)break;Be.add(Fe.value(Mt)),Oe++}let Rt=Be.has("");for(let Mt=fe[it],Bt=fe[it+1];Mt<Bt;Mt++){let Zt=Ee.indexOf(Te,Mt);if(Zt>=0){let Nr=Fe.value(Mt);(!pe||Rt||!Nr||Be.has(Nr))&&(Qe[Qe.length]=Zt)}}}ye[ye.length]={unit:De.unit,indices:b(Qe)}}else ye[ye.length]=De}return Ne($.structure,ye)}Ne.extendToWholeResidues=x;function S($){switch($.kind){case ge.Kind.Atomic:return $.model.atomicHierarchy.chainAtomSegments;case ge.Kind.Spheres:return $.model.coarseHierarchy.spheres.chainElementSegments;case ge.Kind.Gaussians:return $.model.coarseHierarchy.gaussians.chainElementSegments}}function w($){return $.unit.elements.length===Ee.size($.indices)}function R($,pe,ye){let{index:Be}=S($),De=$.elements,Te=0;for(let Fe=0,Ae=De.length;Fe<Ae;Fe++){let fe=De[Fe],Qe=Be[fe];pe.has(Qe)&&Te++}if(Te===$.elements.length){ye[ye.length]={unit:$,indices:Ue.ofBounds(0,Te)};return}let be=new Int32Array(Te);Te=0;for(let Fe=0,Ae=De.length;Fe<Ae;Fe++){let fe=De[Fe],Qe=Be[fe];pe.has(Qe)&&(be[Te++]=Fe)}be.length>0&&(ye[ye.length]={unit:$,indices:b(be)})}function T($,pe,ye,Be,De){let{index:Te}=S($.elements[0].unit),be=new Set;for(let Fe=pe;Fe<ye;Fe++){let Ae=$.elements[Fe],fe=Ae.indices,Qe=Ae.unit.elements;for(let Ie=0,le=Ee.size(fe);Ie<le;Ie++)be.add(Te[Qe[Ee.getAt(fe,Ie)]])}if(Be){let Fe=$.elements[0].unit;for(let Ae of $.structure.units)ge.areSameChainOperatorGroup(Ae,Fe)&&R(Ae,be,De)}else for(let Fe=pe;Fe<ye;Fe++)R($.elements[Fe].unit,be,De)}function L($){let pe=[];for(let ye=0,Be=$.elements.length;ye<Be;ye++){let De=$.elements[ye];if(ge.Traits.is(De.unit.traits,ge.Trait.Partitioned)){let Te=ye;for(;ye<Be&&ge.areSameChainOperatorGroup($.elements[ye].unit,De.unit);)ye++;let be=ye;ye--,T($,Te,be,!0,pe)}else w(De)?pe[pe.length]=De:T($,ye,ye+1,!1,pe)}return Ne($.structure,pe)}Ne.extendToWholeChains=L;function F($){return`${$.unit.model.id}|${Ke.entity.id($)}`}function v($){let pe=[],ye=Di.create($.structure),Be=new Set,{units:De}=$.structure;for(let Te=0,be=$.elements.length;Te<be;Te++){let Fe=$.elements[Te];ye.unit=Fe.unit,ye.element=Fe.unit.elements[0],Be.add(F(ye))}for(let Te=0,be=De.length;Te<be;++Te){let Fe=De[Te];if(ye.unit=Fe,ye.element=Fe.elements[0],Be.has(F(ye))){let Ae=Ee.ofBounds(0,Fe.elements.length);pe[pe.length]={unit:Fe,indices:Ae}}}return Ne($.structure,pe)}Ne.extendToWholeEntities=v;function U($){let pe=[],ye=new Set,{units:Be}=$.structure;for(let De=0,Te=$.elements.length;De<Te;De++){let be=$.elements[De];ye.add(be.unit.model.id)}for(let De=0,Te=Be.length;De<Te;++De){let be=Be[De];if(ye.has(be.model.id)){let Fe=Ee.ofBounds(0,be.elements.length);pe[pe.length]={unit:be,indices:Fe}}}return Ne($.structure,pe)}Ne.extendToWholeModels=U;function G($,pe){let ye=[];for(let Be=0,De=Ee.size(pe);Be<De;++Be)ye.push($[Ee.getAt(pe,Be)]);return je.ofSortedArray(ye)}function N($,pe){return je.isRange($)&&je.areEqual($,pe)?Ue.ofLength($.length):b(je.indicesOf($,pe))}function k($){let pe=[],ye=new Map;for(let Be=0,De=$.elements.length;Be<De;Be++){let Te=$.elements[Be],{model:be}=Te.unit,Fe=G(Te.unit.elements,Te.indices);ye.has(be)?ye.set(be,je.union(Fe,ye.get(be))):ye.set(be,Fe)}for(let Be=0,De=$.structure.units.length;Be<De;++Be){let Te=$.structure.units[Be],be=ye.get(Te.model);if(!be)continue;let Fe=N(Te.elements,be);Ee.size(Fe)&&(pe[pe.length]={unit:Te,indices:Fe})}return Ne($.structure,pe)}Ne.extendToAllInstances=k;function J($){let pe=[],ye=new Set,{units:Be}=$.structure;for(let De=0,Te=$.elements.length;De<Te;De++){let be=$.elements[De];ye.add(be.unit.conformation.operator.name)}for(let De=0,Te=Be.length;De<Te;++De){let be=Be[De];if(ye.has(be.conformation.operator.name)){let Fe=Ee.ofBounds(0,be.elements.length);pe[pe.length]={unit:be,indices:Fe}}}return Ne($.structure,pe)}Ne.extendToWholeOperators=J;function H($,pe){let ye=new Map,Be=$.structure.lookup3d,De=B();d($,be=>{be.unit.conformation.position(be.element,De);let Fe=Be.find(De[0],De[1],De[2],pe);for(let Ae=0,fe=Fe.count;Ae<fe;++Ae){let Qe=Fe.units[Ae],Ie=Fe.indices[Ae],le=ye.get(Qe.id);le||(le=new Set,ye.set(Qe.id,le)),le.add(Ie)}});let Te=[];for(let[be,Fe]of ye.entries()){let Ae=$.structure.unitMap.get(be),fe=Array.from(Fe);js(fe),Te.push({unit:Ae,indices:b(fe)})}return{kind:"element-loci",structure:$.structure,elements:Te}}Ne.extendToRadius=H;let z=new qi("98"),_=B(),M=we();function q($){let{isIdentity:pe,matrix:ye}=$.conformation.operator,{sphere:Be}=$.boundary;return pe?Be:we.transform(M,Be,ye)}function ne($,pe){if(n($))return we.copy(pe||we(),$.structure.boundary.sphere);z.reset();for(let ye of $.elements){if(w(ye)){z.includeSphere(q(ye.unit));continue}let{indices:Be}=ye,{elements:De,conformation:Te}=ye.unit;for(let be=0,Fe=Ee.size(Be);be<Fe;be++){let Ae=De[Ee.getAt(Be,be)];Te.position(Ae,_),z.includePositionRadius(_,Te.r(Ae))}}z.finishedIncludeStep();for(let ye of $.elements){if(w(ye)){z.radiusSphere(q(ye.unit));continue}let{indices:Be}=ye,{elements:De,conformation:Te}=ye.unit;for(let be=0,Fe=Ee.size(Be);be<Fe;be++){let Ae=De[Ee.getAt(Be,be)];Te.position(Ae,_),z.radiusPositionRadius(_,Te.r(Ae))}}return z.getSphere(pe)}Ne.getBoundingSphere=ne;function oe($,pe){let ye=ne($,pe?.sphere),Be=Ct.fromSphere3D(pe?.box||Ct(),ye);return{sphere:ye,box:Be}}Ne.getBoundary=oe;let ae=B();function me($,pe,ye=0){let Be=ye;for(let De of $.elements){let{indices:Te}=De,{elements:be,conformation:Fe}=De.unit,Ae=Ee.size(Te);for(let fe=0;fe<Ae;fe++){let Qe=be[Ee.getAt(Te,fe)];Fe.position(Qe,ae),B.toArray(ae,pe,Be+fe*3)}Be+=Ae*3}return pe}Ne.toPositionsArray=me;function Se($){let pe=o($),ye=me($,new Float32Array(3*pe));return ru.ofPositions(ye)}Ne.getPrincipalAxes=Se;function ee($){let pe=0;$.forEach(De=>{pe+=o(De)});let ye=new Float32Array(3*pe),Be=0;return $.forEach(De=>{me(De,ye,Be),Be+=o(De)*3}),ru.ofPositions(ye)}Ne.getPrincipalAxesMany=ee;function O($,pe){return ge.isAtomic($)?$.model.atomicHierarchy.atomSourceIndex.value(pe):pe}function X($){if(Ne.isEmpty($))return ce.struct.generator.empty();let pe=$.structure.models,ye=new Map;for(let Fe of $.elements){let{indices:Ae}=Fe,{elements:fe}=Fe.unit,Qe=Fe.unit.conformation.operator.name,Ie;ye.has(Qe)?Ie=ye.get(Qe).xs:(Ie=yo.create(),ye.set(Qe,{modelLabel:Fe.unit.model.label,modelIndex:Fe.unit.model.modelNum,xs:Ie}));for(let le=0,Oe=Ee.size(Ae);le<Oe;le++){let tt=O(Fe.unit,fe[Ee.getAt(Ae,le)]);yo.add(Ie,tt,tt)}}let Be=[],De=ye.keys();for(;;){let Fe=De.next();if(Fe.done)break;let Ae=ye.get(Fe.value);Be.push(Ce(Fe.value,Ae.xs.array,pe.length>1,Ae.modelLabel,Ae.modelIndex))}let Te=new Map;for(let Fe=0,Ae=Be.length;Fe<Ae;++Fe){let fe=Be[Fe],Ie=`${lc(na(fe.atom.ranges),na(fe.atom.set))}|${fe.entity?fe.entity.modelLabel+fe.entity.modelIndex:""}`;Te.has(Ie)?Te.get(Ie).chain.opName.push(...fe.chain.opName):Te.set(Ie,fe)}let be=[];return Te.forEach(Fe=>{let{ranges:Ae,set:fe}=Fe.atom,{opName:Qe}=Fe.chain,Ie=ce.struct.atomProperty.core.operatorName(),le=ce.struct.atomProperty.core.sourceIndex(),Oe=[];fe.length>0&&(Oe[Oe.length]=ce.core.set.has([ce.core.type.set(fe),le]));for(let tt=0,it=Ae.length/2;tt<it;tt++)Oe[Oe.length]=ce.core.rel.inRange([le,Ae[2*tt],Ae[2*tt+1]]);if(Fe.entity){let{modelLabel:tt,modelIndex:it}=Fe.entity;be.push(ce.struct.generator.atomGroups({"atom-test":Oe.length>1?ce.core.logic.or(Oe):Oe[0],"chain-test":Qe.length>1?ce.core.set.has([ce.core.type.set(Qe),Ie]):ce.core.rel.eq([Ie,Qe[0]]),"entity-test":ce.core.logic.and([ce.core.rel.eq([ce.struct.atomProperty.core.modelLabel(),tt]),ce.core.rel.eq([ce.struct.atomProperty.core.modelIndex(),it])])}))}else be.push(ce.struct.generator.atomGroups({"atom-test":Oe.length>1?ce.core.logic.or(Oe):Oe[0],"chain-test":Qe.length>1?ce.core.set.has([ce.core.type.set(Qe),Ie]):ce.core.rel.eq([Ie,Qe[0]])}))}),ce.struct.modifier.union([be.length===1?be[0]:ce.struct.combinator.merge(be.map(Fe=>ce.struct.modifier.union([Fe])))])}Ne.toExpression=X;function Ce($,pe,ye,Be,De){js(pe);let Te=[],be=[],Fe=0,Ae=pe.length;for(;Fe<Ae;){let fe=Fe;for(Fe++;Fe<Ae&&pe[Fe-1]+1===pe[Fe];)Fe++;let Qe=Fe;if(Qe-fe>12)Te[Te.length]=pe[fe],Te[Te.length]=pe[Qe-1];else for(let Ie=fe;Ie<Qe;Ie++)be[be.length]=pe[Ie]}return ye?{atom:{set:be,ranges:Te},chain:{opName:[$]},entity:{modelLabel:Be,modelIndex:De}}:{atom:{set:be,ranges:Te},chain:{opName:[$]}}}})(np||={});var hde;(A=>{function e(){return{elementCount:0,conformationCount:0,residueCount:0,chainCount:0,unitCount:0,structureCount:0,firstElementLoc:Di.create(void 0),firstConformationLoc:Di.create(void 0),firstResidueLoc:Di.create(void 0),firstChainLoc:Di.create(void 0),firstUnitLoc:Di.create(void 0),firstStructureLoc:Di.create(void 0)}}A.create=e;function t(s,c,l){let u=s.get(c)||0;s.set(c,u+l)}function r(s,c,l){let{indices:u,unit:g}=l,{elements:m}=g,p=Ee.size(u),d=new Map,f=new Map;if(p>0&&Di.set(s.firstElementLoc,c,g,m[Ee.start(u)]),p===m.length)s.unitCount+=1,s.unitCount===1&&Di.set(s.firstUnitLoc,c,g,m[Ee.start(u)]);else if(p===1){if(ge.Traits.is(g.traits,ge.Trait.MultiChain))return;s.elementCount+=1,s.elementCount===1&&Di.set(s.firstElementLoc,c,g,m[Ee.start(u)])}else if(ge.isAtomic(g)){let{index:I,offsets:C}=g.model.atomicHierarchy.residueAtomSegments,{label_alt_id:y}=g.model.atomicHierarchy.atoms,Q=0;for(;Q<p;){d.clear();let E=0,b=m[Ee.getAt(u,Q)],x=I[b];for(t(d,y.value(b),1),++Q,++E;Q<p;){let S=m[Ee.getAt(u,Q)];if(I[S]!==x)break;t(d,y.value(S),1),++Q,++E}if(C[x+1]-C[x]===E)s.residueCount+=1,s.residueCount===1&&Di.set(s.firstResidueLoc,c,g,C[x]);else{f.clear();for(let S=C[x],w=C[x+1];S<w;++S)t(f,y.value(S),1);f.get("")===d.get("")&&d.forEach((S,w)=>{if(f.get(w)===S){if(w!==""&&(s.conformationCount+=1,s.conformationCount===1)){for(let R=C[x],T=C[x+1];R<T;++R)if(w===y.value(R)){Di.set(s.firstConformationLoc,c,g,R);break}}E-=S}}),s.elementCount+=E}}}else s.elementCount+=p,s.elementCount===1&&Di.set(s.firstElementLoc,c,g,m[Ee.start(u)])}function n(s,c,l){let{indices:u,unit:g}=l,m=Ee.size(u);if(m===0)return;let{elements:p}=g;if(!ge.Traits.is(g.traits,ge.Trait.MultiChain)){m===p.length&&(s.chainCount+=1,s.chainCount===1&&Di.set(s.firstChainLoc,c,g,p[Ee.start(u)]));return}let d=ge.isAtomic(g)?g.model.atomicHierarchy.chainAtomSegments:ge.isSpheres(g)?g.model.coarseHierarchy.spheres.chainElementSegments:ge.isGaussians(g)?g.model.coarseHierarchy.gaussians.chainElementSegments:void 0;if(!d){console.warn("StructureElement loci stats: unknown unit type");return}let{index:f,offsets:I}=d,C=0;for(;C<m;){let y=0,Q=p[Ee.getAt(u,C)],E=f[Q];for(++C,++y;C<m;){let b=p[Ee.getAt(u,C)];if(f[b]!==E)break;++C,++y}I[E+1]-I[E]===y?(s.chainCount+=1,s.chainCount===1&&Di.set(s.firstChainLoc,c,g,I[E])):m===1&&(s.elementCount+=1,s.elementCount===1&&Di.set(s.firstElementLoc,c,g,Q))}}function o(s,c,l,u,g){let m=l[u],p=ge.isAtomic(m.unit)?m.unit.model.atomicHierarchy.chainAtomSegments:ge.isSpheres(m.unit)?m.unit.model.coarseHierarchy.spheres.chainElementSegments:ge.isGaussians(m.unit)?m.unit.model.coarseHierarchy.gaussians.chainElementSegments:void 0;if(!p){console.warn("StructureElement loci stats: unknown unit type");return}let{index:d,offsets:f}=p,I=new Map;for(let y=u;y<g;y++){m=l[y];let{indices:Q,unit:E}=m,b=Ee.size(Q);if(b===0)continue;let{elements:x}=E;if(!ge.Traits.is(E.traits,ge.Trait.MultiChain)){let w=x[Ee.start(Q)];t(I,d[w],x.length);continue}let S=0;for(;S<b;){let w=0,R=x[Ee.getAt(Q,S)],T=d[R];for(++S,++w;S<b;){let L=x[Ee.getAt(Q,S)];if(d[L]!==T)break;++S,++w}t(I,T,w)}}let C=-1;if(I.forEach((y,Q)=>{f[Q+1]-f[Q]===y&&(s.chainCount+=1,s.chainCount===1&&(C=Q))}),!(C<0))for(let y=u;y<g;y++){m=l[y];let{indices:Q,unit:E}=m,b=Ee.size(Q);if(b===0)continue;let{elements:x}=E,S=0;for(;S<b;){let w=x[Ee.getAt(Q,S)];if(d[w]===C){Di.set(s.firstChainLoc,c,E,w);return}}}}function i(s){let c=e();if(np.isEmpty(s))return c;let l=!1;if(np.isWholeStructure(s)){if(c.structureCount+=1,c.structureCount===1){let{unit:u,indices:g}=s.elements[0];Di.set(c.firstStructureLoc,s.structure,u,u.elements[Ee.min(g)])}}else for(let u of s.elements)r(c,s.structure,u),ge.Traits.is(u.unit.traits,ge.Trait.Partitioned)?l=!0:n(c,s.structure,u);if(l)for(let u=0,g=s.elements.length;u<g;u++){let m=s.elements[u];if(!ge.Traits.is(m.unit.traits,ge.Trait.Partitioned))continue;let p=u;for(;u<g&&ge.areSameChainOperatorGroup(s.elements[u].unit,m.unit);)u++;let d=u;u--,d-p===1?n(c,s.structure,m):o(c,s.structure,s.elements,p,d)}return c}A.ofLoci=i;function a(s,c,l){return c.elementCount===1&&l.elementCount===0?Di.copy(s.firstElementLoc,c.firstElementLoc):c.elementCount===0&&l.elementCount===1&&Di.copy(s.firstElementLoc,l.firstElementLoc),c.conformationCount===1&&l.conformationCount===0?Di.copy(s.firstConformationLoc,c.firstConformationLoc):c.conformationCount===0&&l.conformationCount===1&&Di.copy(s.firstConformationLoc,l.firstConformationLoc),c.residueCount===1&&l.residueCount===0?Di.copy(s.firstResidueLoc,c.firstResidueLoc):c.residueCount===0&&l.residueCount===1&&Di.copy(s.firstResidueLoc,l.firstResidueLoc),c.chainCount===1&&l.chainCount===0?Di.copy(s.firstChainLoc,c.firstChainLoc):c.chainCount===0&&l.chainCount===1&&Di.copy(s.firstChainLoc,l.firstChainLoc),c.unitCount===1&&l.unitCount===0?Di.copy(s.firstUnitLoc,c.firstUnitLoc):c.unitCount===0&&l.unitCount===1&&Di.copy(s.firstUnitLoc,l.firstUnitLoc),c.structureCount===1&&l.structureCount===0?Di.copy(s.firstStructureLoc,c.firstStructureLoc):c.structureCount===0&&l.structureCount===1&&Di.copy(s.firstStructureLoc,l.firstStructureLoc),s.elementCount=c.elementCount+l.elementCount,s.conformationCount=c.conformationCount+l.conformationCount,s.residueCount=c.residueCount+l.residueCount,s.chainCount=c.chainCount+l.chainCount,s.unitCount=c.unitCount+l.unitCount,s.structureCount=c.structureCount+l.structureCount,s}A.add=a})(hde||={});function yZe(e){return e}function yde(e){throw new Error(`Property only available for ${e} models.`)}function QZe(e){return t=>ge.isAtomic(t.unit)?e(t):yde("atomic")}function EZe(e){return t=>ge.isCoarse(t.unit)?e(t):yde("coarse")}function bZe(e){return ge.isAtomic(e.unit)?e.unit.residueIndex[e.element]:-1}function xZe(e){return ge.isAtomic(e.unit)?e.unit.chainIndex[e.element]:-1}function SZe(e){return Ke.entity.key(e)}function Pt(e){return{data:e,position:0,length:e.length,lineNumber:1,tokenStart:0,tokenEnd:0}}(C=>{function e(y){return y.data.substring(y.tokenStart,y.tokenEnd)}C.getTokenString=e;function t(y){y.position=0,y.lineNumber=1,y.tokenStart=0,y.tokenEnd=0}C.reset=t;function r(y){let{data:Q}=y;for(;y.position<y.length;)switch(Q.charCodeAt(y.position)){case 10:return y.tokenEnd=y.position,++y.position,++y.lineNumber,!0;case 13:return y.tokenEnd=y.position,++y.position,++y.lineNumber,Q.charCodeAt(y.position)===10&&++y.position,!0;default:++y.position;break}return y.tokenEnd=y.position,y.tokenStart!==y.tokenEnd}C.eatLine=r;function n(y){y.tokenStart=y.position}C.markStart=n;function o(y){return y.tokenStart=y.position,r(y)}C.markLine=o;function i(y){return o(y),e(y)}C.readLine=i;function a(y){o(y);let Q=y.position;return I(y,y.tokenStart,y.tokenEnd),y.position=Q,e(y)}C.readLineTrim=a;function A(y,Q,E){let b=0;for(let x=0;x<Q;x++){if(!o(y))return b;ct.addUnchecked(E,y.tokenStart,y.tokenEnd),b++}return b}function s(y,Q){let E=ct.create(y.data,Q*2);return A(y,Q,E),E}C.markLines=s;function c(y,Q){let E=[];for(let b=0;b<Q;b++)E.push(C.readLine(y));return E}C.readLines=c;async function l(y,Q,E,b=1e5){let x=ct.create(y.data,Q*2),S=0;return await bs(E,b,y,(w,R)=>{let T=Math.min(Q-S,w);return A(R,T,x),S+=T,T},(w,R)=>w.update({message:"Parsing...",current:R.position,max:R.length})),x}C.readLinesAsync=l;function u(y){let Q=C(y),E=ct.create(Q.data,Math.max(y.length/80,2));for(;o(Q);)ct.add(E,Q.tokenStart,Q.tokenEnd);return E}C.readAllLines=u;function g(y,Q,E){let b=0;for(let x=0;x<Q;x++){if(!o(y))return b;ct.add(E,y.tokenStart,y.tokenEnd),b++}return b}async function m(y,Q,E=1e5){let b=C(y),x=ct.create(b.data,Math.max(y.length/80,2));return await bs(Q,E,b,(S,w)=>(g(w,S,x),w.position<w.length?S:0),(S,w)=>S.update({message:"Parsing...",current:w.position,max:w.length})),x}C.readAllLinesAsync=m;function p(y){for(;y.position<y.length;)switch(y.data.charCodeAt(y.position)){case 9:case 10:case 13:case 32:y.tokenEnd=y.position;return;default:++y.position;break}y.tokenEnd=y.position}C.eatValue=p;function d(y){let Q=-1;for(;y.position<y.length;){let E=y.data.charCodeAt(y.position);switch(E){case 9:case 32:Q=E,++y.position;break;case 10:Q!==13&&++y.lineNumber,Q=E,++y.position;break;case 13:Q=E,++y.position,++y.lineNumber;break;default:return Q}}return Q}C.skipWhitespace=d;function f(y){let Q=-1;for(;y.position<y.length;){let E=y.data.charCodeAt(y.position);switch(E){case 9:case 32:Q=E,++y.position;break;default:return Q}}return Q}C.skipStrictWhitespace=f;function I(y,Q,E){let{data:b}=y,x=Q,S=E-1,w=b.charCodeAt(x);for(;(w===9||w===32)&&x<=S;)w=b.charCodeAt(++x);for(w=b.charCodeAt(S);(w===9||w===32)&&S>=x;)w=b.charCodeAt(--S);return y.tokenStart=x,y.tokenEnd=S+1,y.position=E,y}C.trim=I})(Pt||={});function Qde(e,t,r){let n=t,o=r-1,i=e.charCodeAt(n);for(;(i===9||i===32)&&n<=o;)i=e.charCodeAt(++n);for(i=e.charCodeAt(o);(i===9||i===32)&&o>=n;)i=e.charCodeAt(--o);return e.substring(n,o+1)}var ct;(i=>{function e(a){let A=new Uint32Array(1.61*a.indices.length|0);A.set(a.indices),a.indices=A,a.indicesLenMinus2=A.length-2|0}function t(a,A,s){let c=a;c.offset>c.indicesLenMinus2&&e(c),c.indices[c.offset++]=A,c.indices[c.offset++]=s,a.count++}i.add=t;function r(a,A){t(a,A.tokenStart,A.tokenEnd)}i.addToken=r;function n(a,A,s){a.indices[a.offset++]=A,a.indices[a.offset++]=s,a.count++}i.addUnchecked=n;function o(a,A){return A=Math.max(10,A),{data:a,indicesLenMinus2:A-2|0,count:0,offset:0,indices:new Uint32Array(A)}}i.create=o})(ct||={});var An;(o=>{function e(i,a=-1){return new r(i,a)}o.error=e;function t(i,a=[]){return new n(i,a)}o.success=t;class r{constructor(a,A){this.message=a;this.line=A;this.isError=!0}toString(){return this.line>=0?`[Line ${this.line}] ${this.message}`:this.message}}o.Error=r;class n{constructor(a,A){this.result=a;this.warnings=A;this.isError=!1}}o.Success=n})(An||={});function Ede(e){for(;e.position<e.length;)switch(e.data.charCodeAt(e.position)){case 9:case 10:case 13:case 32:e.tokenEnd=e.position;return;default:++e.position;break}e.tokenEnd=e.position}function DZe(e,t){let r,n;for(++e.position;e.position<e.length;)if(n=e.data.charCodeAt(e.position),n===t)switch(r=e.data.charCodeAt(e.position+1),r){case 9:case 10:case 13:case 32:e.tokenStart++,e.tokenEnd=e.position,e.isEscaped=!0,++e.position;return;default:if(!Number.isFinite(r)){e.tokenStart++,e.tokenEnd=e.position,e.isEscaped=!0,++e.position;return}++e.position;break}else{if(n===10||n===13){e.tokenEnd=e.position;return}++e.position}e.tokenEnd=e.position}function vZe(e){for(e.position+=3;e.position<e.length;){if(e.data.charCodeAt(e.position)===39&&Sde(e)){e.tokenStart+=3,e.tokenEnd=e.position,e.isEscaped=!0,e.position+=3;return}++e.position}e.tokenEnd=e.position}function FZe(e){let t=59,r=e.position+1,n;for(;r<e.length;)if(n=e.data.charCodeAt(r),n===59&&(t===10||t===13)){for(e.position=r+1,e.tokenStart++,r--,n=e.data.charCodeAt(r);n===10||n===13;)r--,n=e.data.charCodeAt(r);e.tokenEnd=r+1,e.isEscaped=!0;return}else(n===13||n===10&&t!==13)&&e.lineNumber++,t=n,++r;return e.position=r,t}function wZe(e){for(;e.position<e.length;)if(e.data.charCodeAt(e.position)===93){++e.position,e.tokenEnd=e.position,e.isImportGet=!1;return}else++e.position}function RZe(e){for(;e.position<e.length;){let t=e.data.charCodeAt(e.position);if(t===10||t===13)return;++e.position}}function UZe(e){let t=10;for(;e.position<e.length;){let r=e.data.charCodeAt(e.position);switch(r){case 9:case 32:t=r,++e.position;break;case 10:t!==13&&++e.lineNumber,t=r,++e.position;break;case 13:t=r,++e.position,++e.lineNumber;break;default:return t}}return t}function Sde(e){return!(e.length-e.position<2||e.data.charCodeAt(e.position+1)!==39||e.data.charCodeAt(e.position+2)!==39)}function LZe(e){let t=e.data.charCodeAt(e.tokenStart);return!(t!==68&&t!==100||(t=e.data.charCodeAt(e.tokenStart+1),t!==65&&t!==97)||(t=e.data.charCodeAt(e.tokenStart+2),t!==84&&t!==116)||(t=e.data.charCodeAt(e.tokenStart+3),t!==65&&t!==97))}function TZe(e){let t=e.data.charCodeAt(e.tokenStart);return!(t!==83&&t!==115||(t=e.data.charCodeAt(e.tokenStart+1),t!==65&&t!==97)||(t=e.data.charCodeAt(e.tokenStart+2),t!==86&&t!==118)||(t=e.data.charCodeAt(e.tokenStart+3),t!==69&&t!==101))}function PZe(e){if(e.tokenEnd-e.tokenStart!==5)return!1;let t=e.data.charCodeAt(e.tokenStart);return!(t!==76&&t!==108||(t=e.data.charCodeAt(e.tokenStart+1),t!==79&&t!==111)||(t=e.data.charCodeAt(e.tokenStart+2),t!==79&&t!==111)||(t=e.data.charCodeAt(e.tokenStart+3),t!==80&&t!==112))}function GZe(e){return!(e.tokenEnd-e.tokenStart!==11||e.data.charCodeAt(e.tokenStart+1)!==105||e.data.charCodeAt(e.tokenStart+2)!==109||e.data.charCodeAt(e.tokenStart+3)!==112||e.data.charCodeAt(e.tokenStart+4)!==111||e.data.charCodeAt(e.tokenStart+5)!==114||e.data.charCodeAt(e.tokenStart+6)!==116||e.data.charCodeAt(e.tokenStart+7)!==46||e.data.charCodeAt(e.tokenStart+8)!==103||e.data.charCodeAt(e.tokenStart+9)!==101||e.data.charCodeAt(e.tokenStart+10)!==116)}function NZe(e,t,r){let n,o=r-t,i=e.tokenStart-t,a=e.tokenEnd-e.tokenStart;if(a<o)return!1;for(n=t;n<r;++n)if(e.data.charCodeAt(n)!==e.data.charCodeAt(n+i))return!1;return o===a||e.data.charCodeAt(n+i)===46}function Dde(e){let t;for(t=e.tokenStart;t<e.tokenEnd;++t)if(e.data.charCodeAt(t)===46)return t;return t}function vde(e,t){return e.data.substring(e.tokenStart,t)}function MZe(e){let t;for(t=e.tokenStart;t<e.tokenEnd;++t)if(e.data.charCodeAt(t)===46)return!1;return!0}function ij(e){return e.data.substring(e.tokenStart,e.tokenEnd)}function bde(e){let t=UZe(e);if(e.position>=e.length){e.tokenType=6;return}e.tokenStart=e.position,e.tokenEnd=e.position,e.isEscaped=!1;let r=e.data.charCodeAt(e.position);switch(r){case 35:RZe(e),e.tokenType=5;break;case 39:if(Sde(e)){vZe(e),e.tokenType=3;break}case 34:DZe(e,r),e.tokenType=3;break;case 59:t===10||t===13?FZe(e):Ede(e),e.tokenType=3;break;default:e.isImportGet?wZe(e):Ede(e),e.isEscaped?e.tokenType=3:e.data.charCodeAt(e.tokenStart)===95?(e.inSaveFrame&&GZe(e)&&(e.isImportGet=!0),e.tokenType=4):e.tokenEnd-e.tokenStart>=5&&e.data.charCodeAt(e.tokenStart+4)===95?LZe(e)?e.tokenType=0:TZe(e)?e.tokenType=1:PZe(e)?e.tokenType=2:e.tokenType=3:e.tokenType=3;break}}function aQ(e){for(bde(e);e.tokenType===5;)bde(e)}function kZe(e,t){return{data:e,length:e.length,position:0,tokenStart:0,tokenEnd:0,tokenType:6,lineNumber:1,isEscaped:!1,isImportGet:!1,inSaveFrame:!1,runtimeCtx:t}}function pN(){return{categoryNames:[],categoryData:Object.create(null)}}function Aj(e,t){let r=Object.create(null);for(let n of e){let o=t[n];r[n]=Ua(o.name,o.rowCount,o.fieldNames,o.fields)}return r}function xde(e,t,r){return $b(e.categoryNames,Aj(e.categoryNames,e.categoryData),t,r)}function HZe(e,t){return $b(e.categoryNames,Aj(e.categoryNames,e.categoryData),t)}function aj(e,t,r,n,o){if(t in e.categoryData){let i=e.categoryData[t];i.fieldNames.push(...n),Object.assign(i.fields,o)}else e.categoryData[t]={name:t,rowCount:r,fieldNames:n,fields:o},e.categoryNames.push(t)}function VZe(e,t){let r=e.tokenStart,n=Dde(e),o=vde(e,n),i=Object.create(null),a=[],A=!0;for(;A;){if(e.tokenType!==4||!NZe(e,r,n)){A=!1;break}let s=ij(e).substring(o.length+1);if(aQ(e),e.tokenType!==3)return{hasError:!0,errorLine:e.lineNumber,errorMessage:"Expected value."};i[s]=Lt.ofTokens({data:e.data,indices:[e.tokenStart,e.tokenEnd],count:1}),a[a.length]=s,aQ(e)}return aj(t,o.substr(1),1,a,i),{hasError:!1,errorLine:0,errorMessage:""}}function _Ze(e,t){let{tokenizer:r,tokens:n,fieldCount:o}=t,i=t.tokenCount,a=0;for(;r.tokenType===3&&a<e;)ct.add(n[i++%o],r.tokenStart,r.tokenEnd),aQ(r),a++;return t.tokenCount=i,a}function YZe(e,t){return e.update({message:"Parsing...",current:t.tokenizer.position,max:t.tokenizer.data.length})}async function OZe(e,t){let r=e.lineNumber;aQ(e);let n=vde(e,Dde(e)),o=MZe(e),i=[];for(;e.tokenType===4;)i[i.length]=o?ij(e):ij(e).substring(n.length+1),aQ(e);let a=n==="_atom_site"?e.data.length/100|0:32,A=[],s=i.length;for(let u=0;u<s;u++)A[u]=ct.create(e.data,a);let c={fieldCount:s,tokenCount:0,tokenizer:e,tokens:A};if(await bs(e.runtimeCtx,1e6,c,_Ze,YZe),c.tokenCount%s!==0)return{hasError:!0,errorLine:e.lineNumber,errorMessage:`The number of values for loop starting at line ${r} is not a multiple of the number of columns.`};let l=c.tokenCount/s|0;if(o)for(let u=0;u<s;u++){let g={"":Lt.ofTokens(A[u])};aj(t,i[u].substr(1),l,[""],g)}else{let u=Object.create(null);for(let g=0;g<s;g++)u[i[g]]=Lt.ofTokens(A[g]);aj(t,n.substr(1),l,i,u)}return{hasError:!1,errorLine:0,errorMessage:""}}function pD(e,t){return An.error(t,e)}function JZe(e){return An.success(e)}async function zZe(e,t){let r=[],n=kZe(e,t),o="",i=pN(),a=[],A=pN(),s=jue(A.categoryNames,Aj(A.categoryNames,A.categoryData),""),c="";for(t.update({message:"Parsing...",current:0,max:e.length}),aQ(n);n.tokenType!==6;){let l=n.tokenType;if(l===0){if(n.inSaveFrame)return pD(n.lineNumber,"Unexpected data block inside a save frame.");i.categoryNames.length>0&&r.push(xde(i,o,a)),o=e.substring(n.tokenStart+5,n.tokenEnd),i=pN(),a=[],aQ(n)}else if(l===1){if(n.tokenEnd-n.tokenStart===5)A.categoryNames.length>0&&(a[a.length]=HZe(A,c)),n.inSaveFrame=!1;else{if(n.inSaveFrame)return pD(n.lineNumber,"Save frames cannot be nested.");n.inSaveFrame=!0,c=e.substring(n.tokenStart+5,n.tokenEnd),A=pN()}aQ(n)}else if(l===2){let u=await OZe(n,n.inSaveFrame?A:i);if(u.hasError)return pD(u.errorLine,u.errorMessage)}else if(l===4){let u=VZe(n,n.inSaveFrame?A:i);if(u.hasError)return pD(u.errorLine,u.errorMessage)}else return console.log(n.tokenType,Pt.getTokenString(n)),pD(n.lineNumber,"Unexpected token. Expected data_, loop_, or data name.")}return n.inSaveFrame?pD(n.lineNumber,`Unfinished save frame (${s.header}).`):((i.categoryNames.length>0||a.length>0)&&r.push(xde(i,o,a)),JZe(qb(r)))}function sj(e){return ve.create("Parse CIF",async t=>await zZe(e,t))}function Fde(e){let t=e.mask?eD(e.mask):void 0,r=eD(e.data),n=wa.isTypedArray(r),o=n?t?c=>t[c]===K.ValueKinds.Present?""+r[c]:"":c=>""+r[c]:t?c=>t[c]===K.ValueKinds.Present?r[c]:"":c=>r[c],i=n?c=>r[c]:c=>{let l=r[c];return cl(l,0,l.length)},a=n?c=>r[c]:c=>{let l=r[c];return Xa(l,0,l.length)},A=t?c=>t[c]:c=>K.ValueKinds.Present,s=r.length;return{__array:r,binaryEncoding:e.data.encoding,isDefined:!0,rowCount:s,str:o,int:i,float:a,valueKind:A,areValuesEqual:(c,l)=>r[c]===r[l],toStringArray:c=>wa.createAndFillArray(s,o,c),toIntArray:n?c=>wa.typedArrayWindow(r,c):c=>wa.createAndFillArray(s,i,c),toFloatArray:n?c=>wa.typedArrayWindow(r,c):c=>wa.createAndFillArray(s,a,c)}}function g0(e){return BN({buffer:e,offset:0,dataView:new DataView(e.buffer)})}function cj(e,t){let r={};for(let n=0;n<t;n++){let o=BN(e);r[o]=BN(e)}return r}function lj(e,t){let r=new Uint8Array(t),n=e.offset;for(let o=0;o<t;o++)r[o]=e.buffer[o+n];return e.offset+=t,r}function fN(e,t){let r=rp(e.buffer,e.offset,t);return e.offset+=t,r}function uj(e,t){let r=new Array(t);for(let n=0;n<t;n++)r[n]=BN(e);return r}function BN(e){let t=e.buffer[e.offset],r,n;if((t&128)===0)return e.offset++,t;if((t&240)===128)return n=t&15,e.offset++,cj(e,n);if((t&240)===144)return n=t&15,e.offset++,uj(e,n);if((t&224)===160)return n=t&31,e.offset++,fN(e,n);if((t&224)===224)return r=e.dataView.getInt8(e.offset),e.offset++,r;switch(t){case 192:return e.offset++,null;case 194:return e.offset++,!1;case 195:return e.offset++,!0;case 196:return n=e.dataView.getUint8(e.offset+1),e.offset+=2,lj(e,n);case 197:return n=e.dataView.getUint16(e.offset+1),e.offset+=3,lj(e,n);case 198:return n=e.dataView.getUint32(e.offset+1),e.offset+=5,lj(e,n);case 202:return r=e.dataView.getFloat32(e.offset+1),e.offset+=5,r;case 203:return r=e.dataView.getFloat64(e.offset+1),e.offset+=9,r;case 204:return r=e.buffer[e.offset+1],e.offset+=2,r;case 205:return r=e.dataView.getUint16(e.offset+1),e.offset+=3,r;case 206:return r=e.dataView.getUint32(e.offset+1),e.offset+=5,r;case 208:return r=e.dataView.getInt8(e.offset+1),e.offset+=2,r;case 209:return r=e.dataView.getInt16(e.offset+1),e.offset+=3,r;case 210:return r=e.dataView.getInt32(e.offset+1),e.offset+=5,r;case 217:return n=e.dataView.getUint8(e.offset+1),e.offset+=2,fN(e,n);case 218:return n=e.dataView.getUint16(e.offset+1),e.offset+=3,fN(e,n);case 219:return n=e.dataView.getUint32(e.offset+1),e.offset+=5,fN(e,n);case 220:return n=e.dataView.getUint16(e.offset+1),e.offset+=3,uj(e,n);case 221:return n=e.dataView.getUint32(e.offset+1),e.offset+=5,uj(e,n);case 222:return n=e.dataView.getUint16(e.offset+1),e.offset+=3,cj(e,n);case 223:return n=e.dataView.getUint32(e.offset+1),e.offset+=5,cj(e,n)}throw new Error("Unknown type 0x"+t.toString(16))}function KZe(e,t){for(let r=0;r<2;r++)if(e[r]>t[r])return!1;return!0}function jZe(e){let t=Object.create(null),r=Object.create(null);for(let n of e.columns)t[n.name]=n;return{rowCount:e.rowCount,name:e.name.substring(1),fieldNames:e.columns.map(n=>n.name),getField(n){let o=t[n];if(o)return r[n]||(r[n]=Fde(o)),r[n]}}}function gj(e){return ve.create("Parse BinaryCIF",async t=>{let r=[0,3];try{let n=g0(e);if(!KZe(r,n.version.match(/(\d)\.(\d)\.\d/).slice(1).map(i=>+i)))return An.error(`Unsupported format version. Current ${n.version}, required ${r.join(".")}.`);let o=qb(n.dataBlocks.map(i=>{let a=Object.create(null);for(let A of i.categories)a[A.name.substring(1)]=jZe(A);return $b(i.categories.map(A=>A.name.substring(1)),a,i.header)}));return An.success(o)}catch(n){return An.error(""+n)}})}var m0=K.Schema,aa=m0.str,WZe=m0.float,wde=m0.List,cI=m0.lstr,nd=m0.Aliased,w2=m0.int,fD=m0.coord,Rde={chem_comp:{formula:aa,formula_weight:WZe,id:aa,mon_nstd_parent_comp_id:wde(",",e=>e),name:aa,one_letter_code:aa,three_letter_code:aa,type:nd(cI),pdbx_synonyms:wde(";",e=>e),pdbx_type:aa,pdbx_ambiguous_flag:aa,pdbx_replaced_by:aa,pdbx_replaces:aa,pdbx_formal_charge:w2,pdbx_model_coordinates_details:aa,pdbx_model_coordinates_db_code:aa,pdbx_ideal_coordinates_details:aa,pdbx_ideal_coordinates_missing_flag:nd(cI),pdbx_model_coordinates_missing_flag:nd(cI),pdbx_initial_date:aa,pdbx_modified_date:aa,pdbx_release_status:nd(aa),pdbx_processing_site:nd(aa)},chem_comp_atom:{alt_atom_id:aa,atom_id:aa,charge:w2,model_Cartn_x:fD,model_Cartn_y:fD,model_Cartn_z:fD,comp_id:aa,type_symbol:aa,pdbx_align:w2,pdbx_ordinal:w2,pdbx_model_Cartn_x_ideal:fD,pdbx_model_Cartn_y_ideal:fD,pdbx_model_Cartn_z_ideal:fD,pdbx_stereo_config:nd(cI),pdbx_aromatic_flag:nd(cI),pdbx_leaving_atom_flag:nd(cI)},chem_comp_bond:{atom_id_1:aa,atom_id_2:aa,comp_id:aa,value_order:nd(cI),pdbx_ordinal:w2,pdbx_stereo_config:nd(cI),pdbx_aromatic_flag:nd(cI)},pdbx_chem_comp_descriptor:{comp_id:aa,descriptor:aa,type:nd(cI),program:aa,program_version:aa},pdbx_chem_comp_identifier:{comp_id:aa,identifier:aa,type:nd(aa),program:aa,program_version:aa}};var R2=K.Schema,Tn=R2.str,XZe=R2.float,ch=R2.lstr,Qg=R2.Aliased,op=R2.int,Ude={pdbx_reference_molecule:{prd_id:Tn,formula_weight:XZe,formula:Tn,type:Qg(ch),type_evidence_code:Tn,class:Qg(ch),class_evidence_code:Tn,name:Tn,represent_as:Qg(ch),chem_comp_id:Tn,compound_details:Tn,description:Tn,representative_PDB_id_code:Tn,release_status:Qg(ch),replaces:Tn,replaced_by:Tn},pdbx_reference_entity_list:{prd_id:Tn,ref_entity_id:Tn,type:Qg(ch),details:Tn,component_id:op},pdbx_reference_entity_nonpoly:{prd_id:Tn,ref_entity_id:Tn,name:Tn,chem_comp_id:Tn},pdbx_reference_entity_link:{link_id:op,prd_id:Tn,details:Tn,ref_entity_id_1:Tn,ref_entity_id_2:Tn,entity_seq_num_1:op,entity_seq_num_2:op,comp_id_1:Tn,comp_id_2:Tn,atom_id_1:Tn,atom_id_2:Tn,value_order:Qg(ch),component_1:op,component_2:op,link_class:Qg(Tn)},pdbx_reference_entity_poly_link:{link_id:op,prd_id:Tn,ref_entity_id:Tn,component_id:op,entity_seq_num_1:op,entity_seq_num_2:op,comp_id_1:Tn,comp_id_2:Tn,atom_id_1:Tn,atom_id_2:Tn,value_order:Qg(ch)},pdbx_reference_entity_poly:{prd_id:Tn,ref_entity_id:Tn,type:Qg(Tn),db_code:Tn,db_name:Tn},pdbx_reference_entity_poly_seq:{prd_id:Tn,ref_entity_id:Tn,mon_id:Tn,parent_mon_id:Tn,num:op,observed:Qg(ch),hetero:Qg(ch)},pdbx_reference_entity_sequence:{prd_id:Tn,ref_entity_id:Tn,type:Qg(Tn),NRP_flag:Qg(Tn),one_letter_codes:Tn},pdbx_reference_entity_src_nat:{prd_id:Tn,ref_entity_id:Tn,ordinal:op,organism_scientific:Tn,taxid:Tn,db_code:Tn,db_name:Tn},pdbx_prd_audit:{prd_id:Tn,date:Tn,processing_site:Qg(Tn),action_type:Qg(Tn)}};var Lde=K.Schema,xs=Lde.str,ZZe=Lde.float,qZe={id:xs,description:xs},$Ze={title:xs,datablock_id:xs,version:xs},eqe={version:xs,update:xs,revision:xs},tqe={id:xs,description:xs},rqe={id:xs,parent_id:xs,description:xs},nqe={code:xs,primitive_code:xs,construct:xs,detail:xs},oqe={code:xs,detail:xs},iqe={from_code:xs,to_code:xs,operator:xs,factor:ZZe},Tde={datablock:qZe,dictionary:$Ze,dictionary_history:eqe,sub_category:tqe,category_group_list:rqe,item_type_list:nqe,item_units_list:oqe,item_units_conversion:iqe};var U2=K.Schema,lI=U2.str,IN=U2.int,lh=U2.float,CN=U2.Aliased,AQ=U2.Vector,ktr={density_server_result:{server_version:lI,datetime_utc:lI,guid:lI,is_empty:CN(lI),has_error:CN(lI),error:lI,query_source_id:lI,query_type:CN(lI),query_box_type:CN(lI),query_box_a:AQ(3),query_box_b:AQ(3)}},hN={volume_data_3d_info:{name:lI,axis_order:AQ(3,IN),origin:AQ(3),dimensions:AQ(3),sample_rate:IN,sample_count:AQ(3,IN),spacegroup_number:IN,spacegroup_cell_size:AQ(3),spacegroup_cell_angles:AQ(3),mean_source:lh,mean_sampled:lh,sigma_source:lh,sigma_sampled:lh,min_source:lh,min_sampled:lh,max_source:lh,max_sampled:lh},volume_data_3d:{values:lh}};var yN=K.Schema,xA=yN.float,Vi=yN.str,Pde=yN.int,aqe=yN.Matrix,Gde={cell:{angle_alpha:xA,angle_beta:xA,angle_gamma:xA,formula_units_z:xA,length_a:xA,length_b:xA,length_c:xA,volume:xA},chemical:{melting_point:xA,name_common:Vi,name_systematic:Vi},chemical_formula:{iupac:Vi,moiety:Vi,sum:Vi,weight:xA},space_group:{crystal_system:Vi,it_number:Pde,"name_h-m_alt":Vi,"name_h-m_full":Vi,name_hall:Vi},space_group_symop:{operation_xyz:Vi},geom_bond:{atom_site_label_1:Vi,atom_site_label_2:Vi,distance:xA,publ_flag:Vi,site_symmetry_1:Vi,site_symmetry_2:Vi,valence:xA},audit:{block_doi:Vi},database_code:{cod:Vi,csd:Vi,depnum_ccdc_archive:Vi,depnum_ccdc_fiz:Vi,icsd:Vi,mdf:Vi,nbs:Vi},atom_site:{adp_type:Vi,calc_flag:Vi,disorder_assembly:Vi,disorder_group:Vi,fract_x:xA,fract_y:xA,fract_z:xA,label:Vi,occupancy:xA,refinement_flags:Vi,site_symmetry_multiplicity:Pde,type_symbol:Vi,u_iso_or_equiv:xA},atom_site_aniso:{label:Vi,u_11:xA,u:aqe(3,3),u_12:xA,u_13:xA,u_22:xA,u_23:xA,u_33:xA},atom_type:{description:Vi,symbol:Vi},atom_type_scat:{dispersion_imag:xA,dispersion_real:xA,source:Vi}},Nde={"cell.formula_units_z":["cell_formula_units_Z"],"chemical_formula.iupac":["chemical_formula_IUPAC"],"space_group.it_number":["space_group_IT_number","symmetry_Int_Tables_number"],"space_group.name_h-m_alt":["space_group_name_H-M_alt"],"space_group.name_h-m_full":["symmetry_space_group_name_H-M"],"space_group.name_hall":["space_group_name_Hall","symmetry_space_group_name_Hall"],"space_group_symop.operation_xyz":["symmetry_equiv_pos_as_xyz"],"geom_bond.atom_site_label_1":["geom_bond_atom_site_id_1"],"geom_bond.atom_site_label_2":["geom_bond_atom_site_id_2"],"geom_bond.distance":["geom_bond_dist"],"audit.block_doi":["audit_block_DOI"],"database_code.cod":["database_code_COD"],"database_code.csd":["database_code_CSD"],"database_code.depnum_ccdc_archive":["database_code_depnum_CCDC_archive"],"database_code.depnum_ccdc_fiz":["database_code_depnum_CCDC_fiz"],"database_code.icsd":["database_code_ICSD"],"database_code.mdf":["database_code_MDF"],"database_code.nbs":["database_code_NBS"],"atom_site.adp_type":["atom_site_ADP_type","atom_site_thermal_displace_type"],"atom_site.label":["atom_site_id"],"atom_site.site_symmetry_multiplicity":["atom_site_symmetry_multiplicity"],"atom_site.u_iso_or_equiv":["atom_site_U_iso_or_equiv"],"atom_site_aniso.label":["atom_site_anisotrop_id"],"atom_site_aniso.u_11":["atom_site_aniso_U_11","atom_site_anisotrop_U_11"],"atom_site_aniso.u_12":["atom_site_aniso_U_12","atom_site_anisotrop_U_12"],"atom_site_aniso.u_13":["atom_site_aniso_U_13","atom_site_anisotrop_U_13"],"atom_site_aniso.u_22":["atom_site_aniso_U_22","atom_site_anisotrop_U_22"],"atom_site_aniso.u_23":["atom_site_aniso_U_23","atom_site_anisotrop_U_23"],"atom_site_aniso.u_33":["atom_site_aniso_U_33","atom_site_anisotrop_U_33"]};var Aqe=K.Schema,mj=Aqe.int,Mde={volume_data_3d_info:hN.volume_data_3d_info,segmentation_data_table:{set_id:mj,segment_id:mj},segmentation_data_3d:{values:mj}};var L2=K.Schema,zc=L2.float,Au=L2.str,sm=L2.int,kde=L2.lstr,Hde=L2.Aliased,Vde={cell:{angle_alpha:zc,angle_beta:zc,angle_gamma:zc,entry_id:Au,length_a:zc,length_b:zc,length_c:zc,Z_PDB:sm,pdbx_unique_axis:Au},diffrn:{ambient_temp:zc,crystal_id:Au,crystal_treatment:Au,details:Au,id:Au},diffrn_radiation_wavelength:{id:Au,wavelength:zc},diffrn_reflns:{diffrn_id:Au,limit_h_max:sm,limit_h_min:sm,limit_k_max:sm,limit_k_min:sm,limit_l_max:sm,limit_l_min:sm,number:sm,pdbx_d_res_low:zc,pdbx_d_res_high:zc,pdbx_number_obs:sm},entry:{id:Au},exptl_crystal:{id:Au},refln:{crystal_id:Au,F_meas_au:zc,F_meas_sigma_au:zc,fom:zc,index_h:sm,index_k:sm,index_l:sm,intensity_meas:zc,intensity_sigma:zc,status:Hde(kde),scale_group_code:Au,wavelength_id:Au,pdbx_FWT:zc,pdbx_PHWT:zc,pdbx_DELFWT:zc,pdbx_DELPHWT:zc,pdbx_r_free_flag:sm},reflns_scale:{group_code:Au},symmetry:{entry_id:Au,cell_setting:Hde(kde),Int_Tables_number:sm,space_group_name_Hall:Au,"space_group_name_H-M":Au}};var Kc={parse:e=>am.is(e)?sj(e):gj(e),parseText:sj,parseBinary:gj,toDatabaseCollection:$ue,toDatabase:Oc,schema:{mmCIF:e=>Oc(Nn,e),CCD:e=>Oc(Rde,e),BIRD:e=>Oc(Ude,e),dic:e=>Oc(Tde,e),cifCore:e=>Oc(Gde,e,Nde),densityServer:e=>Oc(hN,e),segmentation:e=>Oc(Mde,e),SF:e=>Oc(Vde,e)}};var sqe={U:Nn.atom_site_anisotrop.U,U_esd:Nn.atom_site_anisotrop.U_esd},cm;(i=>{i.Schema=sqe,i.Descriptor={name:"atom_site_anisotrop",cifExport:{prefix:"",categories:[{name:"atom_site_anisotrop",instance(a){return i.Provider.get(a.firstModel)?sn.is(a.firstModel.sourceData)?eo.Category.ofTable(a.firstModel.sourceData.data.db.atom_site_anisotrop):eo.Category.Empty:eo.Category.Empty}}]}},i.Provider=Ws.create(i.Descriptor);function n(a,A){let s=new Int32Array(a.rowCount);s.fill(-1);for(let l=0,u=a.rowCount;l<u;l++)s[a.value(l)]=l;let c=new Int32Array(a.rowCount);c.fill(-1);for(let l=0,u=A.rowCount;l<u;++l){let g=s[A.value(l)];g!==-1&&(c[g]=l)}return c}i.getElementToAnsiotrop=n;function o(a,A){let s={};for(let l=0,u=a.rowCount;l<u;l++)s[a.value(l)]=l;let c=new Int32Array(a.rowCount);c.fill(-1);for(let l=0,u=A.rowCount;l<u;++l){let g=s[A.value(l)];g!==void 0&&(c[g]=l)}return c}i.getElementToAnsiotropFromLabel=o})(cm||={});var uh;(c=>{let e="molstar_global_model_transform_info";c.Schema={[e]:{matrix:K.Schema.Matrix(4,4,K.Schema.float)}},c.Descriptor={name:e,cifExport:{categories:[{name:e,instance(l){let u=i(l.firstModel);if(!u)return eo.Category.Empty;let g=Jr.ofRows(c.Schema.molstar_global_model_transform_info,[{matrix:u}]);return eo.Category.ofTable(g)}}],prefix:"molstar"}},c.Provider=Ws.create(c.Descriptor);function o(l,u){l.customProperties.has(c.Descriptor)||l.customProperties.add(c.Descriptor),c.Provider.set(l,u)}c.attach=o;function i(l){return c.Provider.get(l)}c.get=i;function a(l){if(!sn.is(l.sourceData))return;let u=l.sourceData.data.frame.categories[e];if(!u)return;let g=om(c.Schema[e],u);if(g._rowCount!==0)return g.matrix.value(0)}c.fromMmCif=a;function A(l){if(!sn.is(l.sourceData))return!1;let u=l.sourceData.data.frame.categories[e];return!!u&&u.rowCount>0}c.hasData=A;function s(l,u){l.writeCategory({name:e,instance(){let g=Jr.ofRows(c.Schema.molstar_global_model_transform_info,[{matrix:u}]);return eo.Category.ofTable(g)}})}c.writeMmCif=s})(uh||={});var _de={label_comp_id:Nn.atom_site.label_comp_id,label_seq_id:Nn.atom_site.label_seq_id,pdbx_PDB_ins_code:Nn.atom_site.pdbx_PDB_ins_code,label_asym_id:Nn.atom_site.label_asym_id,label_entity_id:Nn.atom_site.label_entity_id,auth_comp_id:Nn.atom_site.auth_atom_id,auth_seq_id:Nn.atom_site.auth_seq_id,auth_asym_id:Nn.atom_site.auth_asym_id},Lrr={...Nn.chem_comp_bond,molstar_protonation_variant:K.Schema.Str()},Yde={...Nn.chem_comp,type:K.Schema.Aliased(K.Schema.str)};function Jde(e,t){let{ihm_model_group:r,ihm_model_group_link:n}=t,o=Jr.pickRow(n,i=>n.model_id.value(i)===e);if(o){let i=Jr.pickRow(r,a=>r.id.value(a)===o.group_id);if(i)return i.name}return""}function Ode(e){for(let t=0,r=e.rowCount;t<r;t++)if(e.valueKind(t)===K.ValueKinds.Present)return!0;return!1}function T2(e,t,r){(!e[t].isDefined||!Ode(e[t]))&&(e[t]=e[r]),(!e[r].isDefined||!Ode(e[r]))&&(e[r]=e[t])}function zde(e){let t=Jr.ofColumns(e._schema,e);return T2(t,"label_atom_id","auth_atom_id"),T2(t,"label_comp_id","auth_comp_id"),T2(t,"label_seq_id","auth_seq_id"),T2(t,"label_asym_id","auth_asym_id"),T2(t,"label_entity_id","label_asym_id"),t}var $o={entry:Nn.entry,struct:Nn.struct,struct_asym:Nn.struct_asym,ihm_model_list:Nn.ihm_model_list,ihm_model_group:Nn.ihm_model_group,ihm_model_group_link:Nn.ihm_model_group_link,entity:Nn.entity,entity_poly:Nn.entity_poly,entity_poly_seq:Nn.entity_poly_seq,pdbx_entity_branch:Nn.pdbx_entity_branch,chem_comp:Yde,pdbx_chem_comp_identifier:Nn.pdbx_chem_comp_identifier,atom_site:Nn.atom_site,ihm_sphere_obj_site:Nn.ihm_sphere_obj_site,ihm_gaussian_obj_site:Nn.ihm_gaussian_obj_site,pdbx_unobs_or_zero_occ_residues:Nn.pdbx_unobs_or_zero_occ_residues,pdbx_molecule:Nn.pdbx_molecule};function La(e,t=!1){let r=Object.create(null);for(let n of Object.keys($o))n in e?r[n]=e[n]:r[n]=Jr.ofUndefinedColumns($o[n],0);return t&&(r.atom_site=zde(r.atom_site)),r}var Ca=class{constructor(){this.count=0;this.ids=[];this.types=[];this.descriptions=[];this.compoundsMap=new Map;this.seqresMap=new Map;this.namesMap=new Map;this.heteroMap=new Map;this.chainMap=new Map;this.sequenceMap=new Map;this.polymerCount=0}set(t,r){this.count+=1,this.ids.push(`${this.count}`),this.types.push(t),this.descriptions.push([r])}addPolymer(t,r,n){return t.has(r)||(this.polymerCount+=1,this.set("polymer",n?.customName||`Polymer ${this.polymerCount}`),t.set(r,`${this.count}`)),t.get(r)}addNonPolymer(t,r,n,o){if(!t.has(r)){let i=n===9?"branched":"non-polymer";this.set(i,o?.customName||this.namesMap.get(r)||r),t.set(r,`${this.count}`)}return t.get(r)}getEntityId(t,r,n,o){if(r===2)return this.waterId===void 0&&(this.set("water",o?.customName||"Water"),this.waterId=`${this.count}`),this.waterId;if(rh(r)){if(this.compoundsMap.has(n))return this.compoundsMap.get(n);if(this.seqresMap.has(n)){let{key:i,residues:a}=this.seqresMap.get(n);if(a.has(t))return this.addPolymer(this.sequenceMap,i,o)}return this.addPolymer(this.chainMap,n,o)}else{if(this.seqresMap.has(n)){let{key:i,residues:a}=this.seqresMap.get(n);if(a.has(t))return this.addNonPolymer(this.sequenceMap,i,r,o)}return this.addNonPolymer(this.heteroMap,t,r,o)}}getEntityTable(){return Jr.ofPartialColumns($o.entity,{id:K.ofStringArray(this.ids),type:K.ofStringAliasArray(this.types),pdbx_description:K.ofStringListArray(this.descriptions)},this.count)}setCompounds(t){for(let r=0,n=t.length;r<n;++r){let{chains:o,description:i}=t[r];this.set("polymer",i);for(let a=0,A=o.length;a<A;++a)this.compoundsMap.set(o[a],`${this.count}`)}}setNames(t){t.forEach(r=>this.namesMap.set(r[0],r[1]))}setSeqres(t){for(let[r,n]of t)this.seqresMap.set(r,{key:n.join("-"),residues:new Set(n)})}getEntityIdForChain(t){if(this.compoundsMap.size===0&&this.chainMap.size===0&&this.sequenceMap.size===0)throw new Error("EntityBuilder.getEntityIdForChain called before any atoms were processed. Call getEntityId for all atoms first.");if(this.compoundsMap.has(t))return this.compoundsMap.get(t);if(this.seqresMap.has(t)){let{key:r}=this.seqresMap.get(t);if(this.sequenceMap.has(r))return this.sequenceMap.get(r)}if(this.chainMap.has(t))return this.chainMap.get(t)}};var cqe=[new Set(["CA"]),new Set(["C"]),new Set(["N"])],lqe=[new Set(["P","O3'","O3*"]),new Set(["C4'","C4*"]),new Set(["O2'","O2*","F2'","F2*"])],uqe=[new Set(["P","O3'","O3*"]),new Set(["C3'","C3*"]),new Set(["O2'","O2*","F2'","F2*"])],gqe=new Set(["FMN","NCN","FNS","FMA","ATP","ADP","AMP","GTP","GDP","GMP","LIG"]),Kde=(function(){let e=new Map;return[{id:"HIS",name:"HISTIDINE",type:"l-peptide linking"},{id:"ARG",name:"ARGININE",type:"l-peptide linking"},{id:"LYS",name:"LYSINE",type:"l-peptide linking"},{id:"ILE",name:"ISOLEUCINE",type:"l-peptide linking"},{id:"PHE",name:"PHENYLALANINE",type:"l-peptide linking"},{id:"LEU",name:"LEUCINE",type:"l-peptide linking"},{id:"TRP",name:"TRYPTOPHAN",type:"l-peptide linking"},{id:"ALA",name:"ALANINE",type:"l-peptide linking"},{id:"MET",name:"METHIONINE",type:"l-peptide linking"},{id:"CYS",name:"CYSTEINE",type:"l-peptide linking"},{id:"ASN",name:"ASPARAGINE",type:"l-peptide linking"},{id:"VAL",name:"VALINE",type:"l-peptide linking"},{id:"GLY",name:"GLYCINE",type:"peptide linking"},{id:"SER",name:"SERINE",type:"l-peptide linking"},{id:"GLN",name:"GLUTAMINE",type:"l-peptide linking"},{id:"TYR",name:"TYROSINE",type:"l-peptide linking"},{id:"ASP",name:"ASPARTIC ACID",type:"l-peptide linking"},{id:"GLU",name:"GLUTAMIC ACID",type:"l-peptide linking"},{id:"THR",name:"THREONINE",type:"l-peptide linking"},{id:"PRO",name:"PROLINE",type:"l-peptide linking"},{id:"SEC",name:"SELENOCYSTEINE",type:"l-peptide linking"},{id:"PYL",name:"PYRROLYSINE",type:"l-peptide linking"},{id:"MSE",name:"SELENOMETHIONINE",type:"l-peptide linking"},{id:"SEP",name:"PHOSPHOSERINE",type:"l-peptide linking"},{id:"TPO",name:"PHOSPHOTHREONINE",type:"l-peptide linking"},{id:"PTR",name:"O-PHOSPHOTYROSINE",type:"l-peptide linking"},{id:"PCA",name:"PYROGLUTAMIC ACID",type:"l-peptide linking"},{id:"A",name:"ADENOSINE-5'-MONOPHOSPHATE",type:"rna linking"},{id:"C",name:"CYTIDINE-5'-MONOPHOSPHATE",type:"rna linking"},{id:"T",name:"THYMIDINE-5'-MONOPHOSPHATE",type:"rna linking"},{id:"G",name:"GUANOSINE-5'-MONOPHOSPHATE",type:"rna linking"},{id:"I",name:"INOSINIC ACID",type:"rna linking"},{id:"U",name:"URIDINE-5'-MONOPHOSPHATE",type:"rna linking"},{id:"DA",name:"2'-DEOXYADENOSINE-5'-MONOPHOSPHATE",type:"dna linking"},{id:"DC",name:"2'-DEOXYCYTIDINE-5'-MONOPHOSPHATE",type:"dna linking"},{id:"DT",name:"THYMIDINE-5'-MONOPHOSPHATE",type:"dna linking"},{id:"DG",name:"2'-DEOXYGUANOSINE-5'-MONOPHOSPHATE",type:"dna linking"},{id:"DI",name:"2'-DEOXYINOSINE-5'-MONOPHOSPHATE",type:"dna linking"},{id:"DU",name:"2'-DEOXYURIDINE-5'-MONOPHOSPHATE",type:"dna linking"}].forEach(r=>e.set(r.id,r)),e})(),jde=(function(){let e=new Map;return[{id:"ZN2",name:"ZINC ION",type:"ion"},{id:"SOD",name:"SODIUM ION",type:"ion"},{id:"CES",name:"CESIUM ION",type:"ion"},{id:"CLA",name:"CHLORIDE ION",type:"ion"},{id:"CAL",name:"CALCIUM ION",type:"ion"},{id:"POT",name:"POTASSIUM ION",type:"ion"}].forEach(r=>e.set(r.id,r)),e})(),Ha=class{constructor(t,r){this.seqId=t;this.atomId=r;this.namesMap=new Map;this.comps=new Map;this.ids=[];this.names=[];this.types=[];this.mon_nstd_flags=[]}set(t){this.comps.set(t.id,t),this.ids.push(t.id),this.names.push(t.name),this.types.push(t.type),this.mon_nstd_flags.push($B.has(t.id)?"y":"n")}getAtomIds(t){let r=new Set,n=this.seqId.value(t);for(;t<this.seqId.rowCount;){let o=this.seqId.value(t);if(o!==n)break;r.add(this.atomId.value(t)),n-o,t+=1}return r}hasAtomIds(t,r){for(let n=0,o=r.length;n<o;++n)if(!lo.areIntersecting(t,r[n]))return!1;return!0}getType(t){return this.hasAtomIds(t,cqe)?"peptide linking":this.hasAtomIds(t,lqe)?"rna linking":this.hasAtomIds(t,uqe)?"dna linking":"other"}has(t){return this.comps.has(t)}get(t){return this.comps.get(t)}add(t,r){if(!this.has(t))if(Kde.has(t))this.set(Kde.get(t));else if(Wb.has(t))this.set({id:t,name:"WATER",type:"non-polymer"});else if(gqe.has(t.toUpperCase()))this.set({id:t,name:this.namesMap.get(t)||t,type:"non-polymer"});else if(Zd.has(t.toUpperCase()))this.set({id:t,name:this.namesMap.get(t)||t,type:"saccharide"});else{let n=this.getAtomIds(r);if(n.size===1&&jde.has(t))this.set(jde.get(t));else{let o=this.getType(n);this.set({id:t,name:this.namesMap.get(t)||t,type:o})}}return this.get(t)}getChemCompTable(){return Jr.ofPartialColumns($o.chem_comp,{id:K.ofStringArray(this.ids),name:K.ofStringArray(this.names),type:K.ofStringAliasArray(this.types),mon_nstd_flag:K.ofStringAliasArray(this.mon_nstd_flags)},this.ids.length)}setNames(t){t.forEach(r=>this.namesMap.set(r[0],r[1]))}};function dj(e){let t=pqe(e);if(t.length!==0)return[dqe,t,{ignoreFilter:!0}]}var Xde={molstar_bond_site:{atom_id_1:K.Schema.int,atom_id_2:K.Schema.int,value_order:K.Schema.Aliased(K.Schema.lstr),type_id:K.Schema.Aliased(K.Schema.lstr)}},mqe=eo.fields().int("atom_id_1",(e,t)=>t[e].atom_id_1).int("atom_id_2",(e,t)=>t[e].atom_id_2).str("value_order",(e,t)=>t[e].value_order??"",{valueKind:(e,t)=>t[e].value_order===void 0?K.ValueKinds.NotPresent:K.ValueKinds.Present}).str("type_id",(e,t)=>t[e].type_id??"",{valueKind:(e,t)=>t[e].type_id===void 0?K.ValueKinds.NotPresent:K.ValueKinds.Present}).getFields(),dqe={name:"molstar_bond_site",instance(e){return{fields:mqe,source:[{data:e,rowCount:e.length}]}}};function Wde(e,t,r){r[0]=void 0,r[1]=void 0,e===1?r[0]="sing":e===2?r[0]="doub":e===3?r[0]="trip":e===4&&(r[0]="quad"),It.is(t,It.Flag.Aromatic)&&(r[0]="arom"),It.is(t,It.Flag.Disulfide)?r[1]="disulf":It.is(t,It.Flag.Covalent)?r[1]="covale":It.is(t,It.Flag.MetallicCoordination)?r[1]="metalc":It.is(t,It.Flag.HydrogenBond)&&(r[1]="hydrog")}function pqe(e){let t=[],r=new Set,n=W.Location.create(),{id:o}=Ke.atom,i=[void 0,void 0],a=(A,s)=>{let c=Fu(A,s);r.has(c)||(r.add(c),A>s?t.push({atom_id_1:s,atom_id_2:A,value_order:i[0],type_id:i[1]}):t.push({atom_id_1:A,atom_id_2:s,value_order:i[0],type_id:i[1]}))};for(let A of e.structures){n.structure=A;for(let s of A.units){if(!ge.isAtomic(s))continue;let{elements:c}=s,{a:l,b:u,edgeProps:g}=s.bonds;n.unit=s;for(let m=0;m<l.length;m++){n.element=c[l[m]];let p=o(n);n.element=c[u[m]];let d=o(n);Wde(g.order[m],g.flags[m],i),a(p,d)}}A.interUnitBonds.edges.forEach(s=>{let c=A.unitMap.get(s.unitA);n.unit=c,n.element=c.elements[s.indexA];let l=o(n);c=A.unitMap.get(s.unitB),n.unit=c,n.element=c.elements[s.indexB];let u=o(n);Wde(s.props.order,s.props.flag,i),a(l,u)})}return t.sort((A,s)=>A.atom_id_1!==s.atom_id_1?A.atom_id_1-s.atom_id_1:A.atom_id_2!==s.atom_id_2?A.atom_id_2-s.atom_id_2:0),t}function fqe(e){if(sn.is(e.sourceData))return Fo.fromData(e.sourceData.data.db)}Fo.Provider.formatRegistry.add("mmCIF",fqe);function Bqe(e){if(!sn.is(e.sourceData))return;let{struct_conf:t,struct_sheet_range:r}=e.sourceData.data.db;return Hf.fromStruct(t,r,e.atomicHierarchy)}Hf.Provider.formatRegistry.add("mmCIF",Bqe);function Iqe(e){if(!sn.is(e.sourceData))return;let{atom_site_anisotrop:t}=e.sourceData.data.db,r=Jr.ofColumns(cm.Schema,t),n=cm.getElementToAnsiotrop(e.atomicConformation.atomId,t.id);return{data:r,elementToAnsiotrop:n}}function Cqe(e){return sn.is(e.sourceData)?e.sourceData.data.db.atom_site_anisotrop.U.isDefined:!1}cm.Provider.formatRegistry.add("mmCIF",Iqe,Cqe);function hqe(e){if(!sn.is(e.sourceData))return;let{chem_comp_bond:t}=e.sourceData.data.db;if(t._rowCount!==0)return{data:t,entries:Zy.getEntriesFromChemCompBond(t)}}Zy.Provider.formatRegistry.add("mmCIF",hqe);function yqe(e){if(!sn.is(e.sourceData))return;let{struct_conn:t}=e.sourceData.data.db;if(t._rowCount===0)return;let r=yg.getEntriesFromStructConn(t,e),n=new Set;for(let o of r)o.partnerA.residueIndex!==o.partnerB.residueIndex&&n.add(Fu(o.partnerA.residueIndex,o.partnerB.residueIndex));return{data:t,byAtomIndex:yg.getAtomIndexFromEntries(r),residueCantorPairs:n,entries:r}}yg.Provider.formatRegistry.add("mmCIF",yqe);function Qqe(e){if(!sn.is(e.sourceData))return;let{molstar_bond_site:t}=Oc(Xde,e.sourceData.data.frame);if(t._rowCount===0)return;let r=new Map,{atomId:n}=e.atomicConformation;for(let m=0;m<n.rowCount;m++)r.set(n.value(m),m);let o=[],i=[],a=[],A=[],{atom_id_1:s,atom_id_2:c,value_order:l,type_id:u}=t;for(let m=0;m<t._rowCount;m++){o.push(r.get(s.value(m))),i.push(r.get(c.value(m)));let p=It.Flag.None,d=1;switch(l.value(m)){case"sing":d=1;break;case"doub":d=2;break;case"trip":d=3;break;case"quad":d=4;break;case"arom":d=1,p=It.Flag.Aromatic;break;default:break}switch(u.value(m)){case"covale":p|=It.Flag.Covalent;break;case"disulf":p|=It.Flag.Covalent|It.Flag.Disulfide;break;case"hydrog":p|=It.Flag.HydrogenBond;break;case"metalc":p|=It.Flag.MetallicCoordination;break}a.push(d),A.push(p)}return Hi.fromData({pairs:{indexA:K.ofIntArray(o),indexB:K.ofIntArray(i),order:K.ofIntArray(a),flag:K.ofArray({array:A,schema:K.Schema.int})},count:e.atomicHierarchy.atoms._rowCount},{maxDistance:1/0})}Hi.Provider.formatRegistry.add("mmCIF",Qqe);uh.Provider.formatRegistry.add("mmCIF",uh.fromMmCif,uh.hasData);var sn;(r=>{function e(n){return n?.kind==="mmCIF"}r.is=e;function t(n,o,i,a){return o||(o=Kc.schema.mmCIF(n)),{kind:"mmCIF",name:o._name,data:{db:o,file:a,frame:n,source:i}}}r.fromFrame=t})(sn||={});function QN(e,t){let r=sn.fromFrame(e,void 0,void 0,t),n=La(r.data.db,!0);return ve.create("Create mmCIF Model",o=>SA(n,r,o))}var sQ;(o=>{let e="__CcdCoordinateType__";o.CoordinateType={get(i){return i._staticPropertyData[e]},set(i,a){return i._staticPropertyData[e]=a}};function r(i){return i?.kind==="CCD"}o.is=r;function n(i,a){return a||(a=Kc.schema.CCD(i)),{kind:"CCD",name:a._name,data:{db:a,frame:i}}}o.fromFrame=n})(sQ||={});function qde(e){let t=sQ.fromFrame(e);return ve.create("Create CCD Models",r=>Eqe(t.data.db,sQ.fromFrame(e),r))}async function Eqe(e,t,r){let n=await Zde(e,t,{coordinateType:"ideal",cartn_x:"pdbx_model_Cartn_x_ideal",cartn_y:"pdbx_model_Cartn_y_ideal",cartn_z:"pdbx_model_Cartn_z_ideal"},r),o=await Zde(e,t,{coordinateType:"model",cartn_x:"model_Cartn_x",cartn_y:"model_Cartn_y",cartn_z:"model_Cartn_z"},r),i=[];n&&i.push(n),o&&i.push(o);for(let a=0,A=i.length;a<A;++a)_t.TrajectoryInfo.set(i[a],{index:a,size:i.length});return new fc(i)}async function Zde(e,t,r,n){let{chem_comp:o,chem_comp_atom:i,chem_comp_bond:a}=e,{coordinateType:A,cartn_x:s,cartn_y:c,cartn_z:l}=r,u=o.name.value(0),g=o.id.value(0),{atom_id:m,charge:p,comp_id:d,pdbx_ordinal:f,type_symbol:I}=i,C=i._rowCount,y=[];for(let ne=0;ne<C;ne++)i[s].valueKind(ne)>0||(y[y.length]=ne);let Q=y.length,E=K.ofConst("A",Q,K.Schema.str),b=K.ofConst(1,Q,K.Schema.int),x=K.ofConst("1",Q,K.Schema.str),S=K.ofConst(1,Q,K.Schema.float),w=K.ofConst(1,Q,K.Schema.int),R=K.view(m,y),T=K.view(d,y),L=K.view(i[s],y),F=K.view(i[c],y),v=K.view(i[l],y),U=K.view(f,y),G=K.view(I,y),N=K.view(p,y),k=Jr.ofPartialColumns($o.atom_site,{auth_asym_id:E,auth_atom_id:R,auth_comp_id:T,auth_seq_id:b,Cartn_x:L,Cartn_y:F,Cartn_z:v,id:U,label_asym_id:E,label_atom_id:R,label_comp_id:T,label_seq_id:b,label_entity_id:x,occupancy:S,type_symbol:G,pdbx_PDB_model_num:w,pdbx_formal_charge:N},Q),J=new Ca;J.setNames([[g,`${u} (${A})`]]),J.getEntityId(g,0,"A");let H=new Ha(b,I);H.setNames([[g,`${u} (${A})`]]),H.add(g,0);let z=La({entity:J.getEntityTable(),chem_comp:H.getChemCompTable(),atom_site:k}),_=await SA(z,t,n);if(!_.representative)return;let M=_.representative,q=Zy.getEntriesFromChemCompBond(a);return Zy.Provider.set(M,{data:a,entries:q}),sQ.CoordinateType.set(M,A),_.representative}var DA;(r=>{function e(n){let o=n.descriptor.name,i=n.type==="static"?"_staticPropertyData":"_dynamicPropertyData",a=s=>(o in s[i]||(s[i][o]={props:{...h.getDefaultValues(n.getParams(s))},data:Kd.create(void 0)}),s[i][o]),A=(s,c,l)=>{let u=a(s);s[i][o]={props:c,data:Kd.withValue(u.data,l)}};return{label:n.label,descriptor:n.descriptor,isHidden:n.isHidden,getParams:s=>{let c=h.clone(n.getParams(s));return h.setDefaultValues(c,a(s).props),c},defaultParams:n.defaultParams,isApplicable:n.isApplicable,attach:async(s,c,l={},u)=>{u&&c.customProperties.reference(n.descriptor,!0);let g=a(c),m=h.merge(n.defaultParams,g.props,l);if(g.data.value&&h.areEqual(n.defaultParams,g.props,m))return;let{value:p,assets:d}=await n.obtain(s,c,m);c.customProperties.add(n.descriptor),c.customProperties.assets(n.descriptor,d),A(c,m,p)},ref:(s,c)=>s.customProperties.reference(n.descriptor,c),get:s=>a(s)?.data,set:(s,c={},l)=>{let u=a(s),g=h.merge(n.defaultParams,u.props,c);h.areEqual(n.defaultParams,u.props,g)||(A(s,g,l),s.customProperties.assets(n.descriptor))},props:s=>a(s).props}}r.createProvider=e;function t(n,o,i){let a={value:h.Value(i,{isHidden:!0})};return e({label:Ra(n),descriptor:{name:n},isHidden:!0,type:o,defaultParams:a,getParams:()=>({value:h.Value(i,{isHidden:!0})}),isApplicable:()=>!0,obtain:async(A,s,c)=>({...h.getDefaultValues(a),...c})})}r.createSimple=t})(DA||={});var Mu;(i=>{i.Provider=DA.createProvider({label:"SIFTS Mapping",descriptor:{name:"sifts_sequence_mapping"},type:"static",defaultParams:{},getParams:()=>({}),isApplicable:a=>t(a),obtain:async(a,A)=>({value:o(A)})});function t(a){if(!sn.is(a.sourceData))return!1;let{pdbx_sifts_xref_db_name:A,pdbx_sifts_xref_db_acc:s,pdbx_sifts_xref_db_num:c,pdbx_sifts_xref_db_res:l}=a.sourceData.data.db.atom_site;return A.isDefined&&s.isDefined&&c.isDefined&&l.isDefined}i.isAvailable=t;function r(a){let A=a.unit.model,s=i.Provider.get(A).value;if(!s)return"";let c=A.atomicHierarchy.residueAtomSegments.index[a.element];return s.accession[c]}i.getKey=r;function n(a){let A=a.unit.model,s=i.Provider.get(A).value;if(!s)return;let c=A.atomicHierarchy.residueAtomSegments.index[a.element],l=s.dbName[c];if(l)return`${l} ${s.accession[c]} ${s.num[c]} ${s.residue[c]}`}i.getLabel=n;function o(a){if(!sn.is(a.sourceData))return;let{pdbx_sifts_xref_db_name:A,pdbx_sifts_xref_db_acc:s,pdbx_sifts_xref_db_num:c,pdbx_sifts_xref_db_res:l}=a.sourceData.data.db.atom_site;if(!A.isDefined||!s.isDefined||!c.isDefined||!l.isDefined)return;let{atomSourceIndex:u}=a.atomicHierarchy,{count:g,offsets:m}=a.atomicHierarchy.residueAtomSegments,p=new Array(g),d=new Array(g),f=new Array(g),I=new Array(g);for(let C=0;C<g;C++){let y=u.value(m[C]);if(A.valueKind(y)!==K.ValueKinds.Present){p[C]="",d[C]="",f[C]="",I[C]="";continue}p[C]=A.value(y),d[C]=s.value(y),f[C]=c.value(y),I[C]=l.value(y)}return{dbName:p,accession:d,num:f,residue:I}}})(Mu||={});var Vf=eo.Encodings;function bqe(e){let t=Ke.chain.label_asym_id(e),r=e.unit.conformation.operator.suffix;return r?t+r:t}function xqe(e){let t=Ke.chain.auth_asym_id(e),r=e.unit.conformation.operator.suffix;return r?t+r:t}var $de={shouldInclude(e){return!!e.atom_site?.pdbx_label_index.isDefined},value(e,t){let r=t.sourceIndex.value(e.element);return t.atom_site.pdbx_label_index.value(r)}},ip={shouldInclude(e){return Mu.isAvailable(e.structure.models[0])},pdbx_sifts_xref_db_name:{value(e,t){let r=t.sourceIndex.value(e.element);return t.atom_site.pdbx_sifts_xref_db_name.value(r)},valueKind(e,t){let r=t.sourceIndex.value(e.element);return t.atom_site.pdbx_sifts_xref_db_name.valueKind(r)}},pdbx_sifts_xref_db_acc:{value(e,t){let r=t.sourceIndex.value(e.element);return t.atom_site.pdbx_sifts_xref_db_acc.value(r)},valueKind(e,t){let r=t.sourceIndex.value(e.element);return t.atom_site.pdbx_sifts_xref_db_acc.valueKind(r)}},pdbx_sifts_xref_db_num:{value(e,t){let r=t.sourceIndex.value(e.element);return t.atom_site.pdbx_sifts_xref_db_num.value(r)},valueKind(e,t){let r=t.sourceIndex.value(e.element);return t.atom_site.pdbx_sifts_xref_db_num.valueKind(r)}},pdbx_sifts_xref_db_res:{value(e,t){let r=t.sourceIndex.value(e.element);return t.atom_site.pdbx_sifts_xref_db_res.value(r)},valueKind(e,t){let r=t.sourceIndex.value(e.element);return t.atom_site.pdbx_sifts_xref_db_res.valueKind(r)}}},Sqe=e=>{let t=eo.fields();return t.str("group_PDB",Ke.residue.group_PDB),e?t.int("id",Ke.atom.id):t.index("id"),t.str("type_symbol",Ke.atom.type_symbol).str("label_atom_id",Ke.atom.label_atom_id).str("label_comp_id",Ke.atom.label_comp_id).int("label_seq_id",Ke.residue.label_seq_id,{encoder:Vf.deltaRLE,valueKind:(r,n)=>{let o=r.unit.model;return o.atomicHierarchy.residues.label_seq_id.valueKind(o.atomicHierarchy.residueAtomSegments.index[r.element])}}).str("label_alt_id",Ke.atom.label_alt_id).str("pdbx_PDB_ins_code",Ke.residue.pdbx_PDB_ins_code).str("label_asym_id",bqe).str("label_entity_id",Ke.chain.label_entity_id).float("Cartn_x",Ke.atom.x,{digitCount:3,encoder:Vf.fixedPoint3}).float("Cartn_y",Ke.atom.y,{digitCount:3,encoder:Vf.fixedPoint3}).float("Cartn_z",Ke.atom.z,{digitCount:3,encoder:Vf.fixedPoint3}).float("occupancy",Ke.atom.occupancy,{digitCount:2,encoder:Vf.fixedPoint2}).float("B_iso_or_equiv",Ke.atom.B_iso_or_equiv,{digitCount:2,encoder:Vf.fixedPoint2}).int("pdbx_formal_charge",Ke.atom.pdbx_formal_charge,{encoder:Vf.deltaRLE,valueKind:(r,n)=>r.unit.model.atomicHierarchy.atoms.pdbx_formal_charge.valueKind(r.element)}).str("auth_atom_id",Ke.atom.auth_atom_id).str("auth_comp_id",Ke.atom.auth_comp_id).int("auth_seq_id",Ke.residue.auth_seq_id,{encoder:Vf.deltaRLE}).str("auth_asym_id",xqe).int("pdbx_PDB_model_num",Ke.unit.model_num,{encoder:Vf.deltaRLE}).int("pdbx_label_index",$de.value,{shouldInclude:$de.shouldInclude}).str("pdbx_sifts_xref_db_name",ip.pdbx_sifts_xref_db_name.value,{shouldInclude:ip.shouldInclude,valueKind:ip.pdbx_sifts_xref_db_name.valueKind}).str("pdbx_sifts_xref_db_acc",ip.pdbx_sifts_xref_db_acc.value,{shouldInclude:ip.shouldInclude,valueKind:ip.pdbx_sifts_xref_db_acc.valueKind}).str("pdbx_sifts_xref_db_num",ip.pdbx_sifts_xref_db_num.value,{shouldInclude:ip.shouldInclude,valueKind:ip.pdbx_sifts_xref_db_num.valueKind}).str("pdbx_sifts_xref_db_res",ip.pdbx_sifts_xref_db_res.value,{shouldInclude:ip.shouldInclude,valueKind:ip.pdbx_sifts_xref_db_res.valueKind}),t.getFields()},epe=e=>({name:"atom_site",instance({structures:t}){return{fields:Sqe(e?.keepId),source:t.map(r=>({data:{structure:r,sourceIndex:r.model.atomicHierarchy.atomSourceIndex,atom_site:sn.is(r.model.sourceData)?r.model.sourceData.data.db.atom_site:void 0},rowCount:r.elementCount,keys:()=>r.elementLocations()}))}}});function d0(e,t){return e?`${e}_${t}`:t}function Dqe(e){return e?`pdbx_${e}_PDB_ins_code`:"pdbx_PDB_ins_code"}function gh(e,t){return(r,n)=>t(e(r,n))}function vqe(e,t,r){r&&r.includeModelNum&&e.int("pdbx_PDB_model_num",gh(t,Ke.unit.model_num))}function p0(e,t){let r=t&&t.prefix,n=eo.fields().str(d0(r,"label_comp_id"),gh(e,Ke.atom.label_comp_id)).int(d0(r,"label_seq_id"),gh(e,Ke.residue.label_seq_id),{encoder:Vf.deltaRLE,valueKind:(o,i)=>{let a=e(o,i),A=a.unit.model;return A.atomicHierarchy.residues.label_seq_id.valueKind(A.atomicHierarchy.residueAtomSegments.index[a.element])}}).str(Dqe(r),gh(e,Ke.residue.pdbx_PDB_ins_code)).str(d0(r,"label_asym_id"),gh(e,Ke.chain.label_asym_id)).str(d0(r,"label_entity_id"),gh(e,Ke.chain.label_entity_id)).str(d0(r,"auth_comp_id"),gh(e,Ke.atom.auth_comp_id)).int(d0(r,"auth_seq_id"),gh(e,Ke.residue.auth_seq_id),{encoder:Vf.deltaRLE}).str(d0(r,"auth_asym_id"),gh(e,Ke.chain.auth_asym_id));return vqe(n,e,t),n.getFields()}var cQ=eo.Field,tpe={name:"struct_conf",instance(e){let t=npe(e,"helix");return{fields:wqe(),source:[{data:t,rowCount:t.length}]}}},rpe={name:"struct_sheet_range",instance(e){let t=npe(e,"sheet").sort(Fqe);return{fields:Rqe(),source:[{data:t,rowCount:t.length}]}}};function Fqe(e,t){let r=e.element,n=t.element;return r.sheet_id<n.sheet_id?-1:r.sheet_id===n.sheet_id?e.start.element-t.start.element:1}var wqe=()=>[cQ.str("conf_type_id",(e,t)=>t[e].element.type_id),cQ.str("id",(e,t,r)=>`${t[e].element.type_id}${r+1}`),...p0((e,t)=>t[e].start,{prefix:"beg"}),...p0((e,t)=>t[e].end,{prefix:"end"}),cQ.str("pdbx_PDB_helix_class",(e,t)=>t[e].element.helix_class),cQ.str("details",(e,t)=>t[e].element.details||"",{valueKind:(e,t)=>t[e].element.details?K.ValueKinds.Present:K.ValueKinds.Unknown}),cQ.int("pdbx_PDB_helix_length",(e,t)=>t[e].length)],Rqe=()=>[cQ.str("sheet_id",(e,t)=>t[e].element.sheet_id),cQ.index("id"),...p0((e,t)=>t[e].start,{prefix:"beg"}),...p0((e,t)=>t[e].end,{prefix:"end"}),cQ.str("symmetry",(e,t)=>"",{valueKind:(e,t)=>K.ValueKinds.Unknown})];function npe(e,t){let r=Hf.Provider.get(e.firstModel);if(!r)return[];let{key:n,elements:o}=r,i=[],a=e.structures[0];for(let{units:A}of a.unitSymmetryGroups){let s=A[0];if(!ge.isAtomic(s))continue;let c=s.model.atomicHierarchy.residueAtomSegments,l=sr.transientSegments(c,s.elements),u,g=!0;for(;l.hasNext;){g&&(u=l.move());let m=u.index,p=n[m],d=o[p];if(d.kind!==t){g=!0;continue}let f=m;for(;l.hasNext;)if(f=u.index,u=l.move(),p!==n[u.index]){g=!1,i[i.length]={start:W.Location.create(a,s,c.offsets[m]),end:W.Location.create(a,s,c.offsets[f]),length:f-m+1,element:d};break}}}return i}function f0(e,t){if(sn.is(e.sourceData))return e.sourceData.data.db[t]}function EN(e){return lo.unionMany(...e.map(t=>t.uniqueResidueNames))}function ope(e){if(e.length===0)return new Set;let t=e[0].model.entities.data.id;return new Set(pj(e).map(r=>t.value(r)))}function pj(e){if(e.length===0)return[];if(e.length===1)return e[0].entityIndices;let t=yo.create();for(let r of e)for(let n of r.entityIndices)yo.add(t,n,n);return js(t.array),t.array}function lm(e,t){return{name:e,instance({structures:r}){if(t&&!t(r[0]))return eo.Category.Empty;let n=r[0].model;if(!sn.is(n.sourceData))return eo.Category.Empty;let o=n.sourceData.data.db[e];return!o||!o._rowCount?eo.Category.Empty:eo.Category.ofTable(o)}}}function ipe(e,t,r){if(!sn.is(t.firstModel.sourceData))return;let n=eo.fields();if(e.isBinary)for(let i of r.fieldNames){let a=Uqe(i,r.getField(i));n.add(a)}else for(let i of r.fieldNames){let a=r.getField(i);n.str(i,A=>a.str(A))}let o=n.getFields();return{name:r.name,instance(){return{fields:o,source:[{data:void 0,rowCount:r.rowCount}]}}}}function Uqe(e,t){let r=Zue(t);return r["@type"]==="str"?{name:e,type:eo.Field.Type.Str,value:t.str,valueKind:t.valueKind}:r["@type"]==="float"?eo.Field.float(e,t.float,{valueKind:t.valueKind,typedArray:Float64Array}):eo.Field.int(e,t.int,{valueKind:t.valueKind,typedArray:Int32Array})}var lQ=eo.Category,ape={name:"chem_comp",instance({firstModel:e,structures:t,cache:r}){let n=f0(t[0].model,"chem_comp");if(!n)return lQ.Empty;let{id:o}=n,i=r.uniqueResidueNames||(r.uniqueResidueNames=EN(t)),a=K.indicesOf(o,A=>i.has(A));return lQ.ofTable(n,a)}},Ape={name:"chem_comp_bond",instance({firstModel:e,structures:t,cache:r}){let n=f0(t[0].model,"chem_comp_bond");if(!n)return lQ.Empty;let{comp_id:o}=n,i=r.uniqueResidueNames||(r.uniqueResidueNames=EN(t)),a=K.indicesOf(o,A=>i.has(A));return lQ.ofTable(n,a)}},spe={name:"pdbx_chem_comp_identifier",instance({firstModel:e,structures:t,cache:r}){let n=f0(e,"pdbx_chem_comp_identifier");if(!n)return lQ.Empty;let{comp_id:o}=n,i=r.uniqueResidueNames||(r.uniqueResidueNames=EN(t)),a=K.indicesOf(o,A=>i.has(A));return lQ.ofTable(n,a)}},cpe={name:"pdbx_nonpoly_scheme",instance({firstModel:e,structures:t,cache:r}){let n=f0(e,"pdbx_nonpoly_scheme");return n?lQ.ofTable(n):lQ.Empty}};var lpe=eo.Category,upe=fj("struct_asym"),gpe=fj("entity_poly"),mpe=fj("entity_poly_seq");function fj(e){return{name:e,instance({structures:t,cache:r}){return Lqe(t,e,r)}}}function Lqe(e,t,r){let n=f0(e[0].model,t);if(!n)return lpe.Empty;let{entity_id:o}=n,i=r.uniqueEntityIds||(r.uniqueEntityIds=ope(e)),a=K.indicesOf(o,A=>i.has(A));return lpe.ofTable(n,a)}var Tqe=eo.Category,Cj;(t=>{function e(r){let n=Array.isArray(r)?r:[r];return{structures:n,firstModel:n[0].model,cache:Object.create(null)}}t.create=e})(Cj||={});var Pqe={name:"entity",instance({structures:e}){let t=pj(e);return Tqe.ofTable(e[0].model.entities.data,t)}};function Ij(e){return e.units.every(t=>t.conformation.operator.isIdentity)}function Bj(e){return Ij(e)&&e.units.every(t=>!t.conformation.operator.assembly&&!t.conformation.operator.suffix)}var dpe=e=>[lm("entry"),lm("exptl"),Pqe,lm("cell",Ij),lm("symmetry",Ij),lm("pdbx_struct_assembly",Bj),lm("pdbx_struct_assembly_gen",Bj),lm("pdbx_struct_oper_list",Bj),tpe,rpe,upe,gpe,mpe,lm("pdbx_entity_branch"),lm("pdbx_entity_branch_link"),lm("pdbx_branch_scheme"),lm("struct_conn"),ape,Ape,spe,lm("atom_sites"),cpe,epe({keepId:e?.keepAtomSiteId})],ppe;(t=>t.AtomSitePositionsFieldNames=new Set(["id","Cartn_x","Cartn_y","Cartn_z"]))(ppe||={});var Gqe={onlyPositions:{includeCategory(e){return e==="atom_site"},includeField(e,t){return ppe.AtomSitePositionsFieldNames.has(t)}}};function BD(e,t,r){if(!e.cifExport||e.cifExport.categories.length===0)return[];let n=e.cifExport.prefix,o=e.cifExport.categories,i=t;if(e.cifExport.context){let A=ia.getUUID(e);t.cache[A+"__ctx"]?i=t.cache[A+"__ctx"]:(i=e.cifExport.context(t)||t,t.cache[A+"__ctx"]=i)}let a=[];for(let A of o)if(!r?.skipCategoryNames?.has(A.name)&&!(r?.includedCategoryNames&&!r.includedCategoryNames.has(A.name))){if(A.name.indexOf(n)!==0)throw new Error(`Custom category '${A.name}' name must start with prefix '${n}.'`);a.push([A,i])}return a}function fpe(e,t,r){let o=(Array.isArray(t)?t[0]:t).models;if(o.length!==1)throw new Error("Can't export stucture composed from multiple models.");let i=r?.exportCtx||Cj.create(t);r?.copyAllCategories&&sn.is(o[0].sourceData)?Mqe(e,i,r):Nqe(e,i,r)}function Nqe(e,t,r){let n=new Set;for(let i of dpe({keepAtomSiteId:r?.extensions?.molstar_bond_site||r?.doNotReindexAtomSiteId}))n.has(i.name)||(n.add(i.name),!(r?.skipCategoryNames&&r?.skipCategoryNames.has(i.name))&&(r?.includedCategoryNames&&!r.includedCategoryNames.has(i.name)||e.writeCategory(i,t)));if(!r?.skipCategoryNames?.has("atom_site")&&e.isCategoryIncluded("atom_site")){let i=yj(t);i&&e.writeCategory(i[0],i[1],i[2])}if(r?.extensions?.molstar_bond_site){let i=dj(t);i&&e.writeCategory(i[0],i[1],i[2])}let o=r||{};for(let i of t.firstModel.customProperties.all)for(let[a,A]of BD(i,t,o))n.has(a.name)||(n.add(a.name),e.writeCategory(a,A));if(r?.customProperties)for(let i of r?.customProperties)for(let[a,A]of BD(i,t,o))n.has(a.name)||(n.add(a.name),e.writeCategory(a,A));for(let i of t.structures)if(i.hasCustomProperties)for(let a of i.customPropertyDescriptors.all)for(let[A,s]of BD(a,t,o))n.has(A.name)||(n.add(A.name),e.writeCategory(A,s))}function Mqe(e,t,r){let n=new Map;for(let s of dpe({keepAtomSiteId:r?.extensions?.molstar_bond_site||r?.doNotReindexAtomSiteId}))n.set(s.name,[s,t]);let o=yj(t);o&&n.set(o[0].name,o);let i=r||{};for(let s of t.firstModel.customProperties.all)for(let c of BD(s,t,i))n.set(c[0].name,c);if(r?.customProperties)for(let s of r?.customProperties)for(let c of BD(s,t,i))n.set(c[0].name,c);for(let s of t.structures)if(s.hasCustomProperties)for(let c of s.customPropertyDescriptors.all)for(let l of BD(c,t))n.set(l[0].name,l);let a=new Set,A=t.firstModel.sourceData.data;for(let s of A.frame.categoryNames)if(a.add(s),n.has(s)){let c=n.get(s);e.writeCategory(c[0],c[1],c[2])}else if(A.db[s]){let c=lm(s);e.writeCategory(c,t)}else{let c=ipe(e,t,A.frame.categories[s]);c&&e.writeCategory(c)}if(n.forEach((s,c)=>{a.has(c)||e.writeCategory(s[0],s[1],s[2])}),r?.extensions?.molstar_bond_site){let s=dj(t);s&&e.writeCategory(s[0],s[1],s[2])}}function hj(e,t,r=!1,n){let o=n?.encoder??eo.createEncoder({binary:r});return o.startDataBlock(e),fpe(o,t,n),o.getData()}function yj(e){let t=Vqe(e);if(t.length!==0)return[Hqe,t,{ignoreFilter:!0}]}var Ipe={molstar_atom_site_operator_mapping:{label_asym_id:K.Schema.Str(),auth_asym_id:K.Schema.Str(),operator_name:K.Schema.Str(),suffix:K.Schema.Str(),assembly_id:K.Schema.Str(),assembly_operator_id:K.Schema.Int(),symmetry_operator_index:K.Schema.Int(),symmetry_hkl:K.Schema.Vector(3),ncs_id:K.Schema.Int()}},Bpe=(e,t)=>typeof t[e].operator.assembly>"u"?K.ValueKinds.NotPresent:K.ValueKinds.Present,Qj=(e,t)=>t[e].operator.spgrOp===-1?K.ValueKinds.NotPresent:K.ValueKinds.Present,kqe=eo.fields().str("label_asym_id",(e,t)=>t[e].label_asym_id).str("auth_asym_id",(e,t)=>t[e].auth_asym_id).str("operator_name",(e,t)=>t[e].operator.name).str("suffix",(e,t)=>t[e].operator.suffix).str("assembly_id",(e,t)=>t[e].operator.assembly?.id||"",{valueKind:Bpe}).int("assembly_operator_id",(e,t)=>t[e].operator.assembly?.operId||0,{valueKind:Bpe}).int("symmetry_operator_index",(e,t)=>t[e].operator.spgrOp,{valueKind:Qj}).vec("symmetry_hkl",[(e,t)=>t[e].operator.hkl[0],(e,t)=>t[e].operator.hkl[1],(e,t)=>t[e].operator.hkl[2]],{valueKind:Qj}).int("ncs_id",(e,t)=>t[e].operator.ncsId,{valueKind:Qj}).getFields(),Hqe={name:"molstar_atom_site_operator_mapping",instance(e){return{fields:kqe,source:[{data:e,rowCount:e.length}]}}};function Vqe(e){let t=new Set,r=[];for(let n of e.structures){let o=W.Location.create(n);for(let i of n.units){let a=i.conformation.operator;if(!a.suffix||i.kind!==ge.Kind.Atomic)continue;o.unit=i;let{elements:A}=i,s=sr.transientSegments(i.model.atomicHierarchy.chainAtomSegments,A);for(;s.hasNext;){let c=s.move();o.element=A[c.start];let l=Ke.chain.label_asym_id(o),u=`${l}${a.suffix}`;if(t.has(u))continue;t.add(u);let g=Ke.chain.label_asym_id(o);r.push({label_asym_id:l,auth_asym_id:g,operator:a})}}}return r}function Cpe(e,t,r,n){let{label_comp_id:o,type_symbol:i,_rowCount:a}=e.atoms,{_rowCount:A}=e.residues,{offsets:s}=t.residueAtomSegments,c=new Uint8Array(a);for(let I=0;I<a;++I)c[I]=Gy(i.value(I));let l=new Int32Array(A),u=new Int32Array(A),g=new Int32Array(A),m=new Uint8Array(A),p=new Uint8Array(A),d=new Map,f=new Map;for(let I=0;I<A;++I){let C=o.value(s[I]),y=n,Q,E;if(d.has(C))Q=d.get(C),E=f.get(C);else{let R;y.has(C)?R=y.get(C).type:(td||console.info("chemComp not found",C),R=jS(C)),Q=Yc(R,C),E=eK(R,Q),d.set(C,Q),f.set(C,E)}m[I]=Q,p[I]=E;let b=oI(E,"trace"),x=r.findAtomsOnResidue(I,b);if(x===-1){let R=oI(E,"coarseBackbone");x=r.findAtomsOnResidue(I,R),x===-1&&rh(Q)&&(x=r.findElementOnResidue(I,qd("C")))}l[I]=x;let S=oI(E,"directionFrom");u[I]=r.findAtomsOnResidue(I,S);let w=oI(E,"directionTo");g[I]=r.findAtomsOnResidue(I,w)}return{atom:{atomicNumber:c},residue:{traceElementIndex:l,directionFromElementIndex:u,directionToElementIndex:g,moleculeType:m,polymerType:p}}}function ID(e,t){return t?t.length===1?ko(t.charCodeAt(0),e):t.length===2?ko(t.charCodeAt(0),ko(t.charCodeAt(1),e)):`${e} ${t}`:e}function _qe(e,t,r,n){if(e.has(t)){let o=e.get(t);o.has(r)||o.set(r,n)}else{let o=new Map;e.set(t,o),o.set(r,n)}}function Yqe(e){throw new Error(`Missing entity entry for entity id '${e}'.`)}function Oqe(e,t,r){return{entities:e,segments:r,label_seq_id:je.ofSortedArray(t.residues.label_seq_id.toArray({array:Int32Array})),label_atom_id:t.atoms.label_atom_id,auth_atom_id:t.atoms.auth_atom_id,label_alt_id:t.atoms.label_alt_id,type_symbol:t.atoms.type_symbol,chain_index_entity_index:new Int32Array(t.chains._rowCount),entity_index_label_asym_id:new Map,chain_index_label_seq_id:new Map,auth_asym_id_auth_seq_id:new Map,chain_index_auth_seq_id:new Map,label_asym_id:new Map}}var P2=nz.EmptyResidueKey(),xj=class{constructor(t){this.map=t;this.entityIndex=t.entities.getEntityIndex,this.residueOffsets=this.map.segments.residueAtomSegments.offsets}getEntityFromChain(t){return this.map.chain_index_entity_index[t]}findEntity(t){let r=this.map.label_asym_id.get(t);return r!==void 0?r:-1}findChainLabel(t){let r=this.entityIndex(t.label_entity_id);if(r<0||!this.map.entity_index_label_asym_id.has(r))return-1;let n=this.map.entity_index_label_asym_id.get(r);return n&&n.has(t.label_asym_id)?n.get(t.label_asym_id):-1}findChainAuth(t){if(!this.map.auth_asym_id_auth_seq_id.has(t.auth_asym_id))return-1;let r=this.map.auth_asym_id_auth_seq_id.get(t.auth_asym_id);return r.has(t.auth_seq_id)?r.get(t.auth_seq_id):-1}findResidue(t,r,n,o){let i;arguments.length===1?i=t:(P2.label_entity_id=t,P2.label_asym_id=r,P2.auth_seq_id=n,P2.pdbx_PDB_ins_code=o,i=P2);let a=this.findChainLabel(i);if(a<0)return-1;let A=this.map.chain_index_auth_seq_id.get(a),s=ID(i.auth_seq_id,i.pdbx_PDB_ins_code||"");return A.has(s)?A.get(s):-1}findResidueLabel(t){let r=this.findChainLabel(t);if(r<0)return-1;let n=this.map.chain_index_label_seq_id.get(r),o=ID(t.label_seq_id,t.pdbx_PDB_ins_code||"");return n.has(o)?n.get(o):-1}findResidueAuth(t){let r=this.findChainAuth(t);if(r<0)return-1;let n=this.map.chain_index_auth_seq_id.get(r),o=ID(t.auth_seq_id,t.pdbx_PDB_ins_code||"");return n.has(o)?n.get(o):-1}findResidueInsertion(t){let r=this.findChainLabel(t);if(r<0)return-1;let n=this.map.chain_index_label_seq_id.get(r),o=ID(t.label_seq_id,t.pdbx_PDB_ins_code||"");if(n.has(o))return n.get(o);let i=je.findPredecessorIndex(this.map.label_seq_id,t.label_seq_id),a=ed.chainStartResidueIndex(this.map.segments,r);if(i<a)return a;let A=ed.chainEndResidueIndexExcl(this.map.segments,r)-1;return i>=A?A:i}findAtom(t){let r=this.findResidue(t);return r<0?-1:typeof t.label_alt_id>"u"?Ej(this.residueOffsets[r],this.residueOffsets[r+1],this.map.label_atom_id,t.label_atom_id):bj(this.residueOffsets[r],this.residueOffsets[r+1],this.map.label_atom_id,this.map.label_alt_id,t.label_atom_id,t.label_alt_id)}findAtomAuth(t){let r=this.findResidueAuth(t);return r<0?-1:typeof t.label_alt_id>"u"?Ej(this.residueOffsets[r],this.residueOffsets[r+1],this.map.auth_atom_id,t.auth_atom_id):bj(this.residueOffsets[r],this.residueOffsets[r+1],this.map.auth_atom_id,this.map.label_alt_id,t.auth_atom_id,t.label_alt_id)}findAtomOnResidue(t,r,n){return typeof n>"u"?Ej(this.residueOffsets[t],this.residueOffsets[t+1],this.map.label_atom_id,r):bj(this.residueOffsets[t],this.residueOffsets[t+1],this.map.label_atom_id,this.map.label_alt_id,r,n)}findAtomsOnResidue(t,r){return Jqe(this.residueOffsets[t],this.residueOffsets[t+1],this.map.label_atom_id,r)}findElementOnResidue(t,r){return zqe(this.residueOffsets[t],this.residueOffsets[t+1],this.map.type_symbol,r)}};function Ej(e,t,r,n){for(let o=e;o<t;o++)if(r.value(o)===n)return o;return-1}function Jqe(e,t,r,n){for(let o=e;o<t;o++)if(n.has(r.value(o)))return o;return-1}function bj(e,t,r,n,o,i){for(let a=e;a<t;a++)if(r.value(a)===o&&n.value(a)===i)return a;return-1}function zqe(e,t,r,n){for(let o=e;o<t;o++)if(r.value(o)===n)return o;return-1}function hpe(e,t,r){let n=Oqe(t,e,r),{label_seq_id:o,auth_seq_id:i,pdbx_PDB_ins_code:a}=e.residues,{label_entity_id:A,label_asym_id:s,auth_asym_id:c}=e.chains,l=Ue.ofBounds(0,e.atoms._rowCount),u=sr.transientSegments(r.chainAtomSegments,l);for(;u.hasNext;){let g=u.move(),m=g.index,p=t.getEntityIndex(A.value(m));p<0&&Yqe(A.value(m)),n.chain_index_entity_index[m]=p;let d=c.value(m),f=n.auth_asym_id_auth_seq_id.get(d);f||(f=new Map,n.auth_asym_id_auth_seq_id.set(d,f));let I=s.value(m);n.label_asym_id.has(I)||n.label_asym_id.set(I,p),_qe(n.entity_index_label_asym_id,p,I,m);let C=new Map,y=new Map;n.chain_index_label_seq_id.set(m,C),n.chain_index_auth_seq_id.set(m,y);let Q=sr.transientSegments(r.residueAtomSegments,l,g);for(;Q.hasNext;){let b=Q.move().index,x=i.value(b),S=a.value(b);C.set(ID(o.value(b),S),b),y.set(ID(x,S),b),f.set(x,m)}}return new xj(n)}function Kqe(e){if(e._rowCount===0)return{residues:[],chains:[]};let t=0,r=e._rowCount,n=[t],o=[t],{label_entity_id:i,label_asym_id:a,label_seq_id:A,auth_seq_id:s,pdbx_PDB_ins_code:c}=e;for(let l=t+1;l<r;l++){let u=!i.areValuesEqual(l-1,l)||!a.areValuesEqual(l-1,l);(u||!A.areValuesEqual(l-1,l)||!s.areValuesEqual(l-1,l)||!c.areValuesEqual(l-1,l))&&(n[n.length]=l),u&&(o[o.length]=l)}return{residues:n,chains:o}}function jqe(e,t,r){let n=Jr.ofColumns(Fce,{type_symbol:K.ofArray({array:K.mapToArray(e.type_symbol,qd),schema:K.Schema.Aliased(K.Schema.str)}),label_atom_id:e.label_atom_id,auth_atom_id:e.auth_atom_id,label_alt_id:e.label_alt_id,label_comp_id:e.label_comp_id,auth_comp_id:e.auth_comp_id,pdbx_formal_charge:e.pdbx_formal_charge}),o=Jr.view(e,wce,r.residues),i=Jr.view(e,Rce,r.chains);if(!o.label_seq_id.isDefined){let A=new Int32Array(o.label_seq_id.rowCount),{residues:s,chains:c}=r,l=0,u=0;for(let g=0,m=A.length;g<m;++g)s[g]>=c[l+1]&&(l+=1,u=0),A[g]=++u;o.label_seq_id=K.ofIntArray(A)}Jr.columnToArray(o,"label_seq_id",Int32Array),Jr.columnToArray(o,"auth_seq_id",Int32Array);let a=Wqe(t,r.residues.length,r.residues);return{atoms:n,residues:o,chains:i,atomSourceIndex:t,residueSourceIndex:a}}function Wqe(e,t,r){let n=new Uint32Array(t);for(let i=0;i<t;i++){let a=r[i],A=i+1<t?r[i+1]:e.rowCount,s=e.value(a);for(let c=a+1;c<A;c++){let l=e.value(c);l<s&&(s=l)}n[i]=s}let o=Vc(t).sort((i,a)=>n[i]-n[a]);for(let i=0;i<t;i++)n[o[i]]=i;return K.ofIntArray(n)}function Xqe(e){return{id:Hn.create22(),atomId:e.id,occupancy:e.occupancy.isDefined?e.occupancy:K.ofConst(1,e._rowCount,K.Schema.float),B_iso_or_equiv:e.B_iso_or_equiv,xyzDefined:e.Cartn_x.isDefined&&e.Cartn_y.isDefined&&e.Cartn_z.isDefined,x:e.Cartn_x.toArray({array:Float32Array}),y:e.Cartn_y.toArray({array:Float32Array}),z:e.Cartn_z.toArray({array:Float32Array})}}function Zqe(e,t){return Jr.areEqual(e.chains,t.chains)&&Jr.areEqual(e.residues,t.residues)&&Jr.areEqual(e.atoms,t.atoms)}function qqe(e,t){let r=new Map;if(!sn.is(t))return r;let{molstar_atom_site_operator_mapping:n}=Oc(Ipe,t.data.frame);if(n._rowCount===0)return r;let o=new Map,i=new Map;for(let l=0;l<n._rowCount;l++){let u=n.assembly_operator_id.valueKind(l)===K.ValueKinds.Present?{id:n.assembly_id.value(l),operList:[],operId:n.assembly_operator_id.value(l)}:void 0,g=Go.create(n.operator_name.value(l),Y.identity(),{assembly:u,spgrOp:n.symmetry_operator_index.valueKind(l)===K.ValueKinds.Present?n.symmetry_operator_index.value(l):void 0,hkl:B.ofArray(n.symmetry_hkl.value(l)),ncsId:n.ncs_id.value(l)}),m=n.suffix.value(l),p=n.label_asym_id.value(l);o.set(`${p}${m}`,{name:p,operator:g});let d=n.auth_asym_id.value(l);i.set(`${d}${m}`,d)}let{label_asym_id:a,auth_asym_id:A}=e.chains,s=new Array(a.rowCount),c=new Array(a.rowCount);for(let l=0;l<a.rowCount;l++){let u=a.value(l),g=A.value(l);if(!o.has(u)){s[l]=u,c[l]=g;continue}let{name:m,operator:p}=o.get(u);r.set(l,p),s[l]=m,c[l]=i.get(g)||g}return e.chains.label_asym_id=K.ofArray({array:s,valueKind:e.chains.label_asym_id.valueKind,schema:e.chains.label_asym_id.schema}),e.chains.auth_asym_id=K.ofArray({array:c,valueKind:e.chains.auth_asym_id.valueKind,schema:e.chains.auth_asym_id.schema}),r}function $qe(e,t,r,n,o,i){let a=Kqe(e),A=jqe(e,t,a),s=qqe(A,o);if(i&&Zqe(i.atomicHierarchy,A))return{sameAsPrevious:!0,hierarchy:i.atomicHierarchy,chainOperatorMapping:s};let c={residueAtomSegments:sr.ofOffsets(a.residues,Ue.ofBounds(0,e._rowCount)),chainAtomSegments:sr.ofOffsets(a.chains,Ue.ofBounds(0,e._rowCount))},l=hpe(A,r,c),u=Cpe(A,c,l,n);return{sameAsPrevious:!1,hierarchy:{...A,...c,index:l,derived:u},chainOperatorMapping:s}}function Sj(e,t,r,n,o,i){let{sameAsPrevious:a,hierarchy:A,chainOperatorMapping:s}=$qe(e,t,r,n,o,i),c=Xqe(e);return{sameAsPrevious:a,hierarchy:A,conformation:c,chainOperatorMapping:s}}function Qpe(e){return new vj(e)}var Dj=class{findElement(t,r){return r.kind=void 0,r.index=-1,!1}findSphereElement(t){return-1}findGaussianElement(t){return-1}},Epe=new Dj,vj=class{constructor(t){this.data=t;this._sphereMapping=void 0;this._gaussianMapping=void 0}get sphereMapping(){return this._sphereMapping||(this._sphereMapping=ype(this.data.spheres)),this._sphereMapping}get gaussianMapping(){return this._gaussianMapping||(this._gaussianMapping=ype(this.data.gaussians)),this._gaussianMapping}findSphereElement(t){let n=this.sphereMapping[t.label_entity_id];return!n||(n=n[t.label_asym_id],!n)?-1:n[t.label_seq_id]??-1}findGaussianElement(t){let n=this.gaussianMapping[t.label_entity_id];return!n||(n=n[t.label_asym_id],!n)?-1:n[t.label_seq_id]??-1}findElement(t,r){let n=this.findSphereElement(t);if(n>=0)return r.kind="spheres",r.index=n,!0;let o=this.findGaussianElement(t);return o>=0?(r.kind="gaussians",r.index=o,!0):!1}};function ype({count:e,entity_id:t,asym_id:r,seq_id_begin:n,seq_id_end:o}){let i={};for(let a=0;a<e;a++){let A=t.value(a),s=r.value(a);i[A]||(i[A]={}),i[A][s]||(i[A][s]={});let c=i[A][s],l=n.value(a),u=o.value(a);for(let g=l;g<=u;g++)c[g]=a}return i}var bpe={chainKey:[],entityKey:[],findSequenceKey:()=>-1,findChainKey:()=>-1,getEntityFromChain:()=>-1,count:0,entity_id:K.Undefined(0,K.Schema.str),asym_id:K.Undefined(0,K.Schema.str),seq_id_begin:K.Undefined(0,K.Schema.int),seq_id_end:K.Undefined(0,K.Schema.int),chainElementSegments:sr.create([]),polymerRanges:vo.ofSortedRanges([]),gapRanges:vo.ofSortedRanges([])};var Fj;(t=>t.Empty={isDefined:!1,spheres:bpe,gaussians:bpe,index:Epe})(Fj||={});function e7e(e,t,r){if(e.has(t))return e.get(t);let n=r.index++;return e.set(t,n),n}function t7e(e,t){if(e.has(t))return e.get(t);let r=new Map;return e.set(t,r),r}function r7e(e,t,r){let n=e.getEntityIndex;return{findChainKey:(a,A)=>{let s=n(a);if(s<0)return-1;let c=t.get(s);return c.has(A)?c.get(A):-1},findSequenceKey:(a,A,s)=>{let c=n(a);if(c<0)return-1;let l=t.get(c);if(l===void 0)return-1;let u=l.get(A);if(u===void 0)return-1;let g=r.get(u),{elementIndices:m,seqRanges:p}=g,d=vo.firstIntersectionIndex(p,Ee.ofSingleton(s));return d!==-1?m[d]:-1}}}function n7e(e){throw new Error(`Missing entity entry for entity id '${e}'.`)}function wj(e,t){let{entity_id:r,asym_id:n,seq_id_begin:o,seq_id_end:i,count:a,chainElementSegments:A}=e,s=new Map,c=new Map,l={index:0},u=new Int32Array(a),g=new Int32Array(a),m=new Int32Array(A.count);for(let I=0;I<a;I++)g[I]=t.getEntityIndex(r.value(I)),g[I]<0&&n7e(r.value(I));for(let I=0;I<A.count;I++){let C=A.offsets[I],y=A.offsets[I+1],Q=g[C];m[I]=Q;let E=t7e(c,Q),b=e7e(E,n.value(C),l);for(let R=C;R<y;R++)u[R]=b;let x=[],S=[];for(let R=C;R<y;R++){let T=o.value(R),L=i.value(R);x.push(R),S.push(T,L)}let w={elementIndices:x,seqRanges:vo.ofSortedRanges(S)};s.set(b,w)}let{findChainKey:p,findSequenceKey:d}=r7e(t,c,s);return{chainKey:u,entityKey:g,findSequenceKey:d,findChainKey:p,getEntityFromChain:I=>m[I]}}function Rj(e,t){let r=[],n=[],o=sr.transientSegments(e.chainElementSegments,Ue.ofBounds(0,e.count)),{seq_id_begin:i,seq_id_end:a}=e;for(;o.hasNext;){let{start:A,end:s}=o.move(),c=-1,l=-1;for(let u=A;u<s;++u){let g=a.value(u);u===A?(c=u,l=a.value(u)):i.value(u)-l>1&&(r.push(c,u-1),n.push(u-1,u),c=u),u===s-1&&r.push(c,u),l=g}}return{polymerRanges:vo.ofSortedRanges(r),gapRanges:vo.ofSortedRanges(n)}}var Uj={hierarchy:Fj.Empty,conformation:void 0};function Spe(e,t){let{ihm_sphere_obj_site:r,ihm_gaussian_obj_site:n}=e;if(r._rowCount===0&&n._rowCount===0)return Uj;let o=xpe(r),i=o7e(r),a=wj(o,e.entities),A=Rj(o,t),s=xpe(n),c=i7e(n),l=wj(s,e.entities),u=Rj(s,t);return{hierarchy:{isDefined:!0,spheres:{...o,...a,...A},gaussians:{...s,...l,...u},index:Qpe({spheres:o,gaussians:s})},conformation:{id:Hn.create22(),spheres:i,gaussians:c}}}function o7e(e){return{x:e.Cartn_x.toArray({array:Float32Array}),y:e.Cartn_y.toArray({array:Float32Array}),z:e.Cartn_z.toArray({array:Float32Array}),radius:e.object_radius.toArray({array:Float32Array}),rmsf:e.rmsf.toArray({array:Float32Array})}}function i7e(e){let t=$o.ihm_gaussian_obj_site.covariance_matrix.space,r=[],{covariance_matrix:n}=e;for(let o=0,i=n.rowCount;o<i;o++)r[o]=Fr.toMat3(Ht(),t,n.value(o));return{x:e.mean_Cartn_x.toArray({array:Float32Array}),y:e.mean_Cartn_y.toArray({array:Float32Array}),z:e.mean_Cartn_z.toArray({array:Float32Array}),weight:e.weight.toArray({array:Float32Array}),covariance_matrix:r}}function a7e(e,t,r){let n=[0];for(let o=1,i=e.rowCount;o<i;o++)!e.areValuesEqual(o-1,o)&&(n[n.length]=o);return{chainElementSegments:sr.ofOffsets(n,Ue.ofBounds(0,e.rowCount))}}function xpe(e){let{entity_id:t,seq_id_begin:r,seq_id_end:n,asym_id:o}=e;return{count:t.rowCount,entity_id:t,asym_id:o,seq_id_begin:r,seq_id_end:n,...a7e(o,r,n)}}var A7e={HIS:"H",ARG:"R",LYS:"K",ILE:"I",PHE:"F",LEU:"L",TRP:"W",ALA:"A",MET:"M",PRO:"P",CYS:"C",ASN:"N",VAL:"V",GLY:"G",SER:"S",GLN:"Q",TYR:"Y",ASP:"D",GLU:"E",THR:"T",SEC:"U",PYL:"O",HSD:"H",HSE:"H",HSP:"H",LSN:"K",ASPP:"D",GLUP:"E",HID:"H",HIE:"H",HIP:"H",LYN:"K",ASH:"D",GLH:"E"},s7e={DA:"A",DC:"C",DG:"G",DT:"T",DU:"U"},c7e={A:"A",C:"C",G:"G",T:"T",U:"U"};function Lj(e){return A7e[e]||"X"}function Tj(e){return c7e[e]||"X"}function Pj(e){return s7e[e]||"X"}var CD;(s=>{let e;(m=>(m.Protein="protein",m.RNA="RNA",m.DNA="DNA",m.Generic="generic"))(e=s.Kind||={});function t(c){let l=c.code.toArray();return(l instanceof Array?l:Array.from(l)).join("")}s.getSequenceString=t;function r(c){for(let l=0,u=Math.min(c.rowCount,10);l<u;l++){let g=c.value(l)||"";if(Lj(g)!=="X")return"protein";if(Tj(g)!=="X")return"RNA";if(Pj(g)!=="X")return"DNA"}return"generic"}function n(c,l){let u;switch(c){case"protein":u=Lj;break;case"DNA":u=Pj;break;case"RNA":u=Tj;break;case"generic":u=()=>"X";break;default:Or(c)}return l&&l.size>0?g=>{let m=u(g);return m!=="X"||!l.has(g)?m:u(l.get(g))}:u}function o(c,l){if(l.rowCount===0)throw new Error("cannot be empty");let u=r(c);return new i(u,c,l)}s.ofResidueNames=o;class i{constructor(l,u,g){this.kind=l;this.microHet=new Map;let m=n(l),p=[],d=[],f=[],I=new Map,C=0,y=new Map;for(let E=0,b=g.rowCount;E<b;++E){let x=g.value(E);if(y.has(x))I.has(x)?I.get(x).push(u.value(E)):I.set(x,[d[y.get(x)],u.value(E)]);else{y.set(x,C);let S=u.value(E);d[C]=S,f[C]=x,p[C]=m(S),C+=1}}let Q=[];for(let E=0,b=C;E<b;++E){let x=I.get(f[E]);if(x){let S=x.map(w=>{let R=m(w);return R==="X"?w:R});Q[E]=`(${S.join("|")})`}else Q[E]=p[E]==="X"?d[E]:p[E]}this.length=C,this.code=K.ofStringArray(p),this.compId=K.ofStringArray(d),this.seqId=K.ofIntArray(f),this.label=K.ofStringArray(Q),this.microHet=I,this.indexMap=y}index(l){return this.indexMap.get(l)}}function a(c,l){let u="generic";return new A(u,c,l)}s.ofSequenceRanges=a;class A{constructor(l,u,g){this.kind=l;this.seqIdStart=u;this.seqIdEnd=g;this.microHet=new Map;let m=0,p=Number.MAX_SAFE_INTEGER;for(let f=0,I=this.seqIdStart.rowCount;f<I;f++){let C=this.seqIdStart.value(f),y=this.seqIdEnd.value(f);C<p&&(p=C),m<y&&(m=y)}let d=m-p+1;this.code=K.ofConst("X",d,K.Schema.str),this.label=K.ofConst("",d,K.Schema.str),this.seqId=K.ofLambda({value:f=>f+p+1,rowCount:d,schema:K.Schema.int}),this.compId=K.ofConst("",d,K.Schema.str),this.length=d,this.minSeqId=p}index(l){return l-this.minSeqId}}})(CD||={});var G2;(a=>{let e={byEntityKey:{},sequences:[]};function t(...A){let s=[],c={};for(let l=0,u=A.length;l<u;++l)s.push(...A[l].sequences),Object.assign(c,A[l].byEntityKey);return{sequences:s,byEntityKey:c}}function r(A,s,c){let l=n(A,s),u=c.isDefined?o(A,c):e;return t(l,u)}a.fromHierarchy=r;function n(A,s){let{label_comp_id:c}=s.atoms,{label_seq_id:l}=s.residues,{chainAtomSegments:u,residueAtomSegments:g}=s,{count:m,offsets:p}=u,d={},f=[];if(m===1&&p[0]===0&&p[1]===0)return{byEntityKey:d,sequences:f};for(let I=0,C=s.chains._rowCount;I<C;I++){let y=s.index.getEntityFromChain(I);if(d[y]!==void 0||A.data.type.value(y)!=="polymer")continue;let Q=I;for(I++;I<C&&y===s.index.getEntityFromChain(I)&&A.data.type.value(y)!=="polymer";)I++;I--;let E=g.index[p[Q]],b=g.index[p[I+1]-1]+1,x=K.window(l,E,b),S=[];for(let R=E;R<b;++R)S.push(c.value(g.offsets[R]));let w=K.ofStringArray(S);d[y]={entityId:A.data.id.value(y),sequence:CD.ofResidueNames(w,x)},f.push(d[y])}return{byEntityKey:d,sequences:f}}a.fromAtomicHierarchy=n;function o(A,s){let c=i(A,s.spheres),l=i(A,s.gaussians);return t(c,l)}a.fromCoarseHierarchy=o;function i(A,s){let{chainElementSegments:c,seq_id_begin:l,seq_id_end:u}=s,{count:g,offsets:m}=c,p={},d=[];if(g===1&&m[0]===0&&m[1]===0)return{byEntityKey:p,sequences:d};for(let f=0,I=g;f<I;f++){let C=s.getEntityFromChain(f);if(p[C]!==void 0)continue;let y=f;for(f++;f<I&&C===s.getEntityFromChain(f);)f++;f--;let Q=m[y],E=m[f+1]-1,b=K.window(l,Q,E),x=K.window(u,Q,E);p[C]={entityId:A.data.id.value(C),sequence:CD.ofSequenceRanges(b,x)},d.push(p[C])}return{byEntityKey:p,sequences:d}}a.fromCoarseElements=i})(G2||={});function Gj(e,t,r,n){if(!e.entity_poly_seq||!e.entity_poly_seq._rowCount)return G2.fromHierarchy(t,r,n);let{entity_id:o,num:i,mon_id:a}=e.entity_poly_seq,A={},s=[],c=o.rowCount,l=0;for(;l<c;){let u=l;for(;l<c-1&&o.areValuesEqual(l,l+1);)l++;l++;let g=o.value(u),m=K.window(a,u,l),p=K.window(i,u,l),d=t.getEntityIndex(g);A[d]={entityId:g,sequence:CD.ofResidueNames(m,p)},s.push(A[d])}return{byEntityKey:A,sequences:s}}async function Nj(e,t,r,n){let o=n2(r,n-1),{label_entity_id:i,label_asym_id:a,label_seq_id:A}=t,s=uG(o,i.value);e.shouldUpdate&&await e.update();for(let c=0,l=s.length-1;c<l;c++){let u=uG(o,a.value,{start:s[c],end:s[c+1]});for(let g=0,m=u.length-1;g<m;g++){let p=u[g];A.valueKind(p)===K.ValueKinds.Present&&(uG(o,A.value,{sort:!0,start:p,end:u[g+1]}),e.shouldUpdate&&await e.update())}e.shouldUpdate&&await e.update()}return Nce(o)&&o.length===t._rowCount?{atom_site:t,sourceIndex:K.ofIntArray(o)}:{atom_site:Jr.view(t,t._schema,o),sourceIndex:K.ofIntArray(o)}}function Dpe(e,t,r,n,o){let{polymerType:i,traceElementIndex:a,directionFromElementIndex:A,directionToElementIndex:s}=o.residue,c=i[e],l=i[t];if(c===0||l===0||a[e]===-1||a[t]===-1)return!1;let u=n.findAtomsOnResidue(e,oI(c,"backboneStart")),g=n.findAtomsOnResidue(t,oI(l,"backboneEnd"));(u===-1||g===-1)&&(u=n.findAtomsOnResidue(e,oI(c,"coarseBackbone")),g=n.findAtomsOnResidue(t,oI(l,"coarseBackbone")));let{x:m,y:p,z:d}=r,f=B.create(m[u],p[u],d[u]),I=B.create(m[g],p[g],d[g]),C=A[e]===-1||s[e]===-1||A[t]===-1||s[t]===-1;return B.distance(f,I)<(C?10:3)}function Mj(e,t,r,n){let o=[],i=[],a=new Map,A=sr.transientSegments(e.chainAtomSegments,Ue.ofBounds(0,e.atoms._rowCount)),s=sr.transientSegments(e.residueAtomSegments,Ue.ofBounds(0,e.atoms._rowCount)),{index:c,derived:l}=e,{label_seq_id:u}=e.residues,{label_entity_id:g}=e.chains,{moleculeType:m,traceElementIndex:p}=l.residue,d,f,I,C;for(;A.hasNext;){let y=A.move();s.setSegment(y),d=-1,f=-1,I=-1,C=-1;let Q=t.getEntityIndex(g.value(y.index)),E=n.byEntityKey[Q],b=E?E.sequence.seqId.value(E.sequence.seqId.rowCount-1):-1,x=e.residueAtomSegments.index[y.start],S=e.residueAtomSegments.index[y.end-1],w=u.value(x),R=u.value(S);for(w===1&&R===b&&r.xyzDefined&&Dpe(x,S,r,c,l)&&(a.set(x,S),a.set(S,x));s.hasNext;){let T=s.move(),L=T.index,F=u.value(L);if(rh(m[L])&&p[L]!==-1)if(C!==-1)if(F!==d+1)o.push(C,I-1),i.push(f,T.end-1),C=T.start;else if(!s.hasNext)o.push(C,T.end-1);else{let v=e.residueAtomSegments.index[T.start],U=e.residueAtomSegments.index[I-1];r.xyzDefined&&!Dpe(v,U,r,e.index,l)&&(o.push(C,I-1),i.push(f,T.end-1),C=T.start)}else C=T.start;else C!==-1&&(o.push(C,I-1),C=-1);f=T.start,I=T.end,d=F}}return{polymerRanges:vo.ofSortedRanges(o),gapRanges:vo.ofSortedRanges(i),cyclicPolymerMap:a}}function vpe(e){let t=new Map,r=(o,i,a)=>`${o}|${i}|${a}`,n=e.pdbx_unobs_or_zero_occ_residues;if(n._rowCount>0)for(let o=0,i=n._rowCount;o<i;++o){let a=r(n.PDB_model_num.value(o),n.label_asym_id.value(o),n.label_seq_id.value(o));t.set(a,{polymer_flag:n.polymer_flag.value(o),occupancy_flag:n.occupancy_flag.value(o)})}else e.entity_poly_seq._rowCount>0&&l7e(e,t,r);return{has:(o,i,a)=>t.has(r(o,i,a)),get:(o,i,a)=>t.get(r(o,i,a)),size:t.size}}function l7e(e,t,r){let n=new Map,{id:o,entity_id:i}=e.struct_asym;for(let p=0,d=o.rowCount;p<d;++p){let f=i.value(p),I=o.value(p);n.has(f)?n.get(f).push(I):n.set(f,[I])}let a=new Set,A=new Set,{label_asym_id:s,label_seq_id:c,pdbx_PDB_model_num:l}=e.atom_site;for(let p=0,d=s.rowCount;p<d;++p){if(c.valueKind(p)!==K.ValueKinds.Present)continue;let f=l.value(p);A.add(f),a.add(r(f,s.value(p),c.value(p)))}A.size===0&&A.add(1);let u=Array.from(A),{entity_id:g,num:m}=e.entity_poly_seq;for(let p=0,d=g.rowCount;p<d;++p){let f=n.get(g.value(p));if(!f)continue;let I=m.value(p);for(let C of f)for(let y of u){let Q=r(y,C,I);a.has(Q)||t.set(Q,{polymer_flag:"y",occupancy_flag:1})}}}function Fpe(e){let t=new Map;if(e.chem_comp._rowCount>0){let{id:r,type:n}=e.chem_comp;for(let o=0,i=r.rowCount;o<i;++o){let a=r.value(o),A=Jr.getRow(e.chem_comp,o);n.valueKind(o)!==K.ValueKinds.Present&&(A.type=jS(a)),t.set(a,A)}}else Rpe(e).forEach(n=>{t.set(n,tK(n))});return t}function wpe(e){let t=new Map;if(e.pdbx_chem_comp_identifier._rowCount>0){let{comp_id:r,type:n,identifier:o}=e.pdbx_chem_comp_identifier;for(let i=0,a=r.rowCount;i<a;++i)if(n.value(i)==="SNFG CARBOHYDRATE SYMBOL"||n.value(i)==="SNFG CARB SYMBOL"){let A=o.value(i),s=wue.get(A);s?t.set(r.value(i),s):console.warn(`Unknown SNFG name '${A}'`)}}if(e.chem_comp._rowCount>0){let{id:r,type:n}=e.chem_comp;for(let o=0,i=r.rowCount;o<i;++o){let a=r.value(o);if(t.has(a))continue;let A=n.value(o);Zd.has(a)?t.set(a,Zd.get(a)):Yc(A,a)===9&&t.set(a,yG)}}else{let r=Rpe(e);Zd.forEach((n,o)=>{!t.has(o)&&r.has(o)&&t.set(o,n)})}return t}var Rpe=Tu(e=>{let t=new Set,{label_comp_id:r,auth_comp_id:n}=e.atom_site,o=r.isDefined?r:n;for(let i=0,a=o.rowCount;i<a;++i)t.add(o.value(i));return t});function kj(e,t){let r=new Map,{auth_asym_id:n,label_asym_id:o,label_entity_id:i}=e.chains;for(let a=0,A=e.chains._rowCount;a<A;a++){let s=o.value(a);r.set(s,{id:s,auth_id:n.value(a),entity_id:i.value(a)})}if(t?.struct_asym._rowCount){let{id:a,entity_id:A}=t.struct_asym;for(let s=0,c=a.rowCount;s<c;++s){let l=a.value(s);r.has(l)||r.set(l,{id:l,auth_id:"",entity_id:A.value(s)})}}return r}var Upe=K.Schema.Aliased(K.Schema.Str());function Hj(e){let t;if(e.entity.id.isDefined)t=e.entity;else{let A=new Set,s=[],c=[],{label_entity_id:l,label_comp_id:u}=e.atom_site;for(let p=0,d=e.atom_site._rowCount;p<d;p++){let f=l.value(p);A.has(f)||(s.push(f),c.push(rK(u.value(p))),A.add(f))}let{entity_id:g}=e.ihm_sphere_obj_site;for(let p=0,d=e.ihm_sphere_obj_site._rowCount;p<d;p++){let f=g.value(p);A.has(f)||(s.push(f),c.push("polymer"),A.add(f))}let{entity_id:m}=e.ihm_gaussian_obj_site;for(let p=0,d=e.ihm_gaussian_obj_site._rowCount;p<d;p++){let f=m.value(p);A.has(f)||(s.push(f),c.push("polymer"),A.add(f))}t=Jr.ofPartialColumns($o.entity,{id:K.ofArray({array:s,schema:$o.entity.id}),type:K.ofArray({array:c,schema:$o.entity.type})},s.length)}let r=K.createIndexer(t.id),n=new Array(t._rowCount);n.fill("other");let o=new Set,i=!1;if(e.entity_poly&&e.entity_poly.type.isDefined){let{entity_id:A,type:s,_rowCount:c}=e.entity_poly;for(let l=0;l<c;++l){let u=A.value(l);n[r(u)]=s.value(l),o.add(u)}}else i=!0;if(e.pdbx_entity_branch&&e.pdbx_entity_branch.entity_id.isDefined){let{entity_id:A,type:s,_rowCount:c}=e.pdbx_entity_branch;for(let l=0;l<c;++l){let u=A.value(l);n[r(u)]=s.value(l),o.add(u)}}else i=!0;if(o.size<n.length&&(i=!0),i){let A=new Map;if(e.chem_comp){let{id:s,type:c}=e.chem_comp;for(let l=0,u=e.chem_comp._rowCount;l<u;l++)A.set(s.value(l),c.value(l))}if(e.atom_site){let{label_entity_id:s,label_comp_id:c}=e.atom_site;for(let l=0,u=e.atom_site._rowCount;l<u;l++){let g=s.value(l);if(!o.has(g)){let m=c.value(l),p=A.get(m)||"other";n[r(g)]=nK(m,p),o.add(g)}}}}let a=K.ofArray({array:n,schema:Upe});return{data:t,subtype:a,getEntityIndex:r}}function Vj(e,t,r){if(!e.pdbx_molecule||!e.pdbx_molecule.prd_id.isDefined)return t;let n=new Array(t.data._rowCount);n.fill("");let{asym_id:o,prd_id:i,_rowCount:a}=e.pdbx_molecule;for(let s=0;s<a;++s){let c=o.value(s),l=r.get(c)?.entity_id;l!==void 0&&(n[t.getEntityIndex(l)]=i.value(s))}let A=K.ofArray({array:n,schema:K.Schema.str});return{...t,prd_id:A}}var fc=class{constructor(t){this.frames=t;this.frameCount=t.length,this.representative=t[0],this.duration=t.length}getFrameAtIndex(t){return this.frames[t]}};async function SA(e,t,r){let n=u7e(e,t),o=e.ihm_model_list._rowCount>0?await p7e(r,e,n,t):await d7e(r,e,n,t);for(let i=0;i<o.length;i++)_t.TrajectoryInfo.set(o[i],{index:i,size:o.length});return new fc(o)}function u7e(e,t){return{missingResidues:vpe(e),chemicalComponentMap:Fpe(e),saccharideComponentMap:wpe(e)}}function g7e(e,t,r,n,o,i,a){let A=Sj(t,r,n,o.chemicalComponentMap,i,a),s=t.pdbx_PDB_model_num.value(0);if(a&&A.sameAsPrevious)return{...a,id:Hn.create22(),modelNum:s,atomicConformation:A.conformation,_dynamicPropertyData:Object.create(null)};let c=Uj,l=Gj(e,n,A.hierarchy,c.hierarchy),u=Mj(A.hierarchy,n,A.conformation,l),g=kj(A.hierarchy),m=e.entry.id.valueKind(0)===K.ValueKinds.Present?e.entry.id.value(0):i.name,p=[];return m&&p.push(m),e.struct.title.valueKind(0)===K.ValueKinds.Present&&p.push(e.struct.title.value(0)),{id:Hn.create22(),entryId:m,label:p.join(" | "),entry:m,sourceData:i,modelNum:s,parent:void 0,entities:Vj(e,n,g),sequence:l,atomicHierarchy:A.hierarchy,atomicConformation:A.conformation,atomicRanges:u,atomicChainOperatorMappinng:A.chainOperatorMapping,coarseHierarchy:c.hierarchy,coarseConformation:c.conformation,properties:{...o,structAsymMap:g},customProperties:new bA,_staticPropertyData:Object.create(null),_dynamicPropertyData:Object.create(null)}}function m7e(e,t,r,n){let o=Sj(t.atom_site,t.atom_site_sourceIndex,t.entities,r.chemicalComponentMap,n),i=Spe(t,r.chemicalComponentMap),a=Gj(e,t.entities,o.hierarchy,i.hierarchy),A=Mj(o.hierarchy,t.entities,o.conformation,a),s=e.entry.id.valueKind(0)===K.ValueKinds.Present?e.entry.id.value(0):n.name,c=[];s&&c.push(s),e.struct.title.valueKind(0)===K.ValueKinds.Present&&c.push(e.struct.title.value(0)),t.model_name&&c.push(t.model_name),t.model_group_name&&c.push(t.model_group_name);let l=kj(o.hierarchy,e);return{id:Hn.create22(),entryId:s,label:c.join(" | "),entry:s,sourceData:n,modelNum:t.model_id,parent:void 0,entities:Vj(e,t.entities,l),sequence:a,atomicHierarchy:o.hierarchy,atomicConformation:o.conformation,atomicRanges:A,atomicChainOperatorMappinng:o.chainOperatorMapping,coarseHierarchy:i.hierarchy,coarseConformation:i.conformation,properties:{...r,structAsymMap:l},customProperties:new bA,_staticPropertyData:Object.create(null),_dynamicPropertyData:Object.create(null)}}function Lpe(e,t){let r=e.rowCount;if(!e.isDefined)return r;let n=t+1;for(;n<r&&e.areValuesEqual(t,n);)n++;return n}async function d7e(e,t,r,n){let o=[];if(t.atom_site){let i=t.atom_site.id.rowCount,a=Hj(t),A=0;for(;A<i;){let s=Lpe(t.atom_site.pdbx_PDB_model_num,A),{atom_site:c,sourceIndex:l}=await Nj(e,t.atom_site,A,s),u=g7e(t,c,l,a,r,n,o.length>0?o[o.length-1]:void 0);o.push(u),A=s}}return o}function _j(e,t){let r=new Map,n=e._rowCount,o=0;for(;o<n;){let i=Lpe(t,o),a=t.value(o);r.set(a,{table:Jr.window(e,e._schema,o,i),start:o,end:i}),o=i}return r}async function p7e(e,t,r,n){let o=Hj(t),i=t.atom_site.ihm_model_id.isDefined?t.atom_site.ihm_model_id:t.atom_site.pdbx_PDB_model_num,a=_j(t.atom_site,i),A=_j(t.ihm_sphere_obj_site,t.ihm_sphere_obj_site.model_id),s=_j(t.ihm_gaussian_obj_site,t.ihm_gaussian_obj_site.model_id),c=[];if(t.ihm_model_list){let{model_id:l,model_name:u}=t.ihm_model_list;for(let g=0;g<t.ihm_model_list._rowCount;g++){let m=l.value(g),p,d;if(a.has(m)){let C=a.get(m),{atom_site:y,sourceIndex:Q}=await Nj(e,t.atom_site,C.start,C.end);p=y,d=Q}else p=Jr.window(t.atom_site,t.atom_site._schema,0,0),d=K.ofIntArray([]);let f={model_id:m,model_name:u.value(g),model_group_name:Jde(m,t),entities:o,atom_site:p,atom_site_sourceIndex:d,ihm_sphere_obj_site:A.has(m)?A.get(m).table:Jr.window(t.ihm_sphere_obj_site,t.ihm_sphere_obj_site._schema,0,0),ihm_gaussian_obj_site:s.has(m)?s.get(m).table:Jr.window(t.ihm_gaussian_obj_site,t.ihm_gaussian_obj_site._schema,0,0)},I=m7e(t,f,r,n);c.push(I)}}return c}var _t;(Se=>{function e(ee,O){let X=[],{frames:Ce}=O,Ne=t(ee),$=w(ee),pe=ee.atomicHierarchy.atoms._rowCount;for(let ye=0,Be=Ce.length;ye<Be;++ye){let De=Ce[ye];if(De.elementCount!==pe)throw new Error(`Frame element count mismatch, got ${De.elementCount} but expected ${pe}.`);let Te={...ee,id:Hn.create22(),modelNum:ye,atomicConformation:o(ee,De),_dynamicPropertyData:Object.create(null)};if(De.cell){let be=Fo.fromCell(De.cell.size,De.cell.anglesInRadians);Fo.Provider.set(Te,be)}Se.TrajectoryInfo.set(Te,{index:ye,size:Ce.length}),Se.CoarseGrained.set(Te,$),X.push(Te)}return{trajectory:X,srcIndexArray:Ne}}function t(ee){let O=ee.atomicHierarchy.atomSourceIndex,X;return"__srcIndexArray__"in ee._staticPropertyData?X=ee._staticPropertyData.__srcIndexArray__:(X=K.isIdentity(O)?void 0:O.toArray({array:Int32Array}),ee._staticPropertyData.__srcIndexArray__=X),X}function r(ee,O){return new fc(e(ee,O).trajectory)}Se.trajectoryFromModelAndCoordinates=r;function n(ee,O){return ve.create("Create Trajectory",async X=>{let Ce=await SA(ee.basic,ee.sourceData,X);if(Ce.frameCount===0)throw new Error("found no model");let Ne=Ce.representative,{trajectory:$}=e(Ne,O),pe={pairs:ee.bonds,count:Ne.atomicHierarchy.atoms._rowCount},ye=Hi.fromData(pe),Be=w(Ne),De=0;for(let Te of $)Hi.Provider.set(Te,ye),Se.TrajectoryInfo.set(Te,{index:De++,size:$.length}),Se.CoarseGrained.set(Te,Be);return new fc($)})}Se.trajectoryFromTopologyAndCoordinates=n;function o(ee,O){return tm.getAtomicConformation(O,{atomId:ee.atomicConformation.atomId,occupancy:ee.atomicConformation.occupancy,B_iso_or_equiv:ee.atomicConformation.B_iso_or_equiv},t(ee))}Se.getAtomicConformationFromFrame=o;let i="__Center__";function a(ee){if(ee._dynamicPropertyData[i])return ee._dynamicPropertyData[i];let O=kce(ee.atomicConformation,ee.coarseConformation);return ee._dynamicPropertyData[i]=O,O}Se.getCenter=a;let A="__AtomicRadii__";function s(ee){if(ee._staticPropertyData[A])return ee._staticPropertyData[A];let O=ee.atomicHierarchy.atoms._rowCount,X=ee.atomicHierarchy.atoms.type_symbol.value,Ce=new Float32Array(O);for(let Ne=0;Ne<O;Ne++)Ce[Ne]=rm(X(Ne));return ee._staticPropertyData[A]=Ce,Ce}Se.getAtomicRadii=s;function c(ee){let O=new Int32Array(ee.rowCount),X=!1;for(let Ce=0,Ne=ee.rowCount;Ce<Ne;Ce++){let $=ee.value(Ce);$!==Ce&&(X=!1),O[$]=Ce}return{isIdentity:X,invertedIndex:O}}let l="__InvertedAtomSrcIndex__";function u(ee){if(ee._staticPropertyData[l])return ee._staticPropertyData[l];let O=c(ee.atomicHierarchy.atomSourceIndex);return ee._staticPropertyData[l]=O,O}Se.getInvertedAtomSourceIndex=u;let g="__TrajectoryInfo__";Se.TrajectoryInfo={get(ee){return ee._dynamicPropertyData[g]||{index:0,size:1}},set(ee,O){return ee._dynamicPropertyData[g]=O}};let p="__AsymIdCount__";Se.AsymIdCount={get(ee){if(ee._dynamicPropertyData[p])return ee._dynamicPropertyData[p];let O=Hce(ee);return ee._dynamicPropertyData[p]=O,O}},Se.AsymIdOffset=DA.createSimple("asym_id_offset","static"),Se.Index=DA.createSimple("index","static"),Se.MaxIndex=DA.createSimple("max_index","static");function y(ee){return ee.parent||ee}Se.getRoot=y;function Q(ee,O){return ee.atomicHierarchy===O.atomicHierarchy&&ee.coarseHierarchy===O.coarseHierarchy}Se.areHierarchiesEqual=Q;let E="__CoordinatesHistory__";Se.CoordinatesHistory={get(ee){return ee._staticPropertyData[E]},set(ee,O){return ee._staticPropertyData[E]=O}};let x="__CoarseGrained__";Se.CoarseGrained={get(ee){return ee._staticPropertyData[x]},set(ee,O){return ee._staticPropertyData[x]=O}};function w(ee){let O=Se.CoarseGrained.get(ee);if(O===void 0){let X=0,Ce=0,{polymerType:Ne,directionToElementIndex:$}=ee.atomicHierarchy.derived.residue;for(let be=0;be<Ne.length;++be)Ne[be]!==0&&(X+=1,$[be]!==-1&&(Ce+=1));let pe=!1,ye=!1,Be=!1,{label_atom_id:De,_rowCount:Te}=ee.atomicHierarchy.atoms;for(let be=0;be<Te;++be){let Fe=De.value(be);if(!pe&&Fe==="BB"&&(pe=!0),!ye&&Fe==="SC1"&&(ye=!0),!Be&&Yz.has(Fe)&&(Be=!0),pe&&ye&&Be)break}O=!1,Te>0&&X>0&&(pe&&ye||Te/X<3||Ce===0&&Be)&&(O=!0),Se.CoarseGrained.set(ee,O)}return O}Se.isCoarseGrained=w;function R(ee){return ee.properties.saccharideComponentMap.size>0}Se.hasCarbohydrate=R;function T(ee){let{subtype:O}=ee.entities;for(let X=0,Ce=O.rowCount;X<Ce;++X)if(O.value(X).startsWith("polypeptide"))return!0;return!1}Se.hasProtein=T;function L(ee){let{subtype:O}=ee.entities;for(let X=0,Ce=O.rowCount;X<Ce;++X){let Ne=O.value(X);if(Ne.endsWith("ribonucleotide hybrid")||Ne.endsWith("ribonucleotide"))return!0}return!1}Se.hasNucleic=L;function F(ee){if(!sn.is(ee.sourceData))return!1;let{db:O}=ee.sourceData.data;for(let X=0,Ce=O.database_2.database_id.rowCount;X<Ce;++X)if(O.database_2.database_id.value(X)==="pdb")return!0;return!1}Se.isFromPdbArchive=F;function v(ee){return sn.is(ee.sourceData)?ee.entryId.match(/^[1-9][a-z0-9]{3,3}$/i)!==null||ee.entryId.match(/^pdb_[0-9]{4,4}[1-9][a-z0-9]{3,3}$/i)!==null:!1}Se.hasPdbId=v;function U(ee){if(sn.is(ee.sourceData)){let{db:O}=ee.sourceData.data;return O.struct_conf.id.isDefined||O.struct_sheet_range.id.isDefined}else return Hf.Provider.isApplicable(ee)}Se.hasSecondaryStructure=U;let G=B.create(1.5707963,1.5707963,1.5707963),N=B.create(1,1,1);function k(ee){let O=Fo.Provider.get(ee)?.spacegroup;return!!O&&!(O.num===1&&B.equals(O.cell.anglesInRadians,G)&&B.equals(O.cell.size,N))}Se.hasCrystalSymmetry=k;function J(ee){if(!sn.is(ee.sourceData))return!1;let{db:O}=ee.sourceData.data;for(let X=0;X<O.exptl.method.rowCount;X++)if(O.exptl.method.value(X).toUpperCase().indexOf("DIFFRACTION")>=0)return!0;return!1}Se.isFromXray=J;function H(ee){if(!sn.is(ee.sourceData))return!1;let{db:O}=ee.sourceData.data;for(let X=0;X<O.exptl.method.rowCount;X++)if(O.exptl.method.value(X).toUpperCase().indexOf("MICROSCOPY")>=0)return!0;return!1}Se.isFromEm=H;function z(ee){if(!sn.is(ee.sourceData))return!1;let{db:O}=ee.sourceData.data;for(let X=0;X<O.exptl.method.rowCount;X++)if(O.exptl.method.value(X).toUpperCase().indexOf("NMR")>=0)return!0;return!1}Se.isFromNmr=z;function _(ee){if(!sn.is(ee.sourceData))return!1;let{db:O}=ee.sourceData.data;for(let X=0;X<O.struct.pdbx_structure_determination_methodology.rowCount;X++)if(O.struct.pdbx_structure_determination_methodology.value(X).toLowerCase()==="experimental")return!0;return!1}Se.isExperimental=_;function M(ee){if(!sn.is(ee.sourceData))return!1;let{db:O}=ee.sourceData.data;for(let X=0;X<O.struct.pdbx_structure_determination_methodology.rowCount;X++)if(O.struct.pdbx_structure_determination_methodology.value(X).toLowerCase()==="integrative")return!0;return!1}Se.isIntegrative=M;function q(ee){if(!sn.is(ee.sourceData))return!1;let{db:O}=ee.sourceData.data;for(let X=0;X<O.struct.pdbx_structure_determination_methodology.rowCount;X++)if(O.struct.pdbx_structure_determination_methodology.value(X).toLowerCase()==="computational")return!0;return!1}Se.isComputational=q;function ne(ee){if(!sn.is(ee.sourceData)||!J(ee))return!1;let{db:O}=ee.sourceData.data,{status_code_sf:X}=O.pdbx_database_status;return X.isDefined&&X.value(0)==="REL"}Se.hasXrayMap=ne;function oe(ee){if(!sn.is(ee.sourceData))return!1;let{db:O}=ee.sourceData.data,{db_name:X,content_type:Ce}=O.pdbx_database_related;for(let Ne=0,$=O.pdbx_database_related._rowCount;Ne<$;++Ne)if(X.value(Ne).toUpperCase()==="EMDB"&&Ce.value(Ne)==="associated EM volume")return!0;return!1}Se.hasEmMap=oe;function ae(ee){return sn.is(ee.sourceData)?ne(ee)||oe(ee):!1}Se.hasDensityMap=ae;function me(ee){if(!sn.is(ee.sourceData)||Se.isIntegrative(ee))return!1;let{db:O}=ee.sourceData.data;return ae(ee)||v(ee)&&(!O.exptl.method.isDefined||J(ee)&&(!O.pdbx_database_status.status_code_sf.isDefined||O.pdbx_database_status.status_code_sf.valueKind(0)===K.ValueKinds.Unknown)||H(ee)&&!O.pdbx_database_related.db_name.isDefined)}Se.probablyHasDensityMap=me})(_t||={});var N2;(l=>{function e(u,g,m){if(!g)return{rowCount:0};if(m&&m[g.id])return m[g.id];let p=g.getElements(u),d={data:p,rowCount:p.elements.length};return m&&(m[g.id]=d),d}l.getCifDataSource=e;function t(u){return new bN(u)}l.fromAtomMap=t;function r(u){return new bN(Yj(u))}l.fromAtomArray=r;let n=u=>u.atomicHierarchy.residueAtomSegments;function o(u){return new hD("residue",u,n,ge.Kind.Atomic)}l.fromResidueMap=o;function i(u){return new hD("residue",Yj(u),n,ge.Kind.Atomic)}l.fromResidueArray=i;let a=u=>u.atomicHierarchy.chainAtomSegments;function A(u){return new hD("chain",u,a,ge.Kind.Atomic)}l.fromChainMap=A;function s(u){return new hD("chain",Yj(u),a,ge.Kind.Atomic)}l.fromChainArray=s;function c(u){return new Oj(u)}l.fromEntityMap=c})(N2||={});function Yj(e){let t=new Map;for(let r=0,n=e.length;r<n;r++)t.set(r,e[r]);return t}var hD=class{constructor(t,r,n,o){this.level=t;this.map=r;this.segmentGetter=n;this.id=Hn.create22();this.kind=o}has(t){return this.map.has(t)}get(t){return this.map.get(t)}getStructureElements(t){let r=t.models;if(r.length!==1)throw new Error("Only works on structures with a single model.");let n=new Set,o=t.unitSymmetryGroups,i=[],a=this.segmentGetter(r[0]);for(let A of o){let s=A.units[0];if(s.kind!==this.kind)continue;let c=sr.transientSegments(a,s.elements);for(;c.hasNext;){let l=c.move();!this.has(l.index)||n.has(l.index)||(n.add(l.index),i[i.length]=W.Location.create(t,s,s.elements[l.start]))}}return i.sort((A,s)=>A.element-s.element),i}getElements(t){let r=this.segmentGetter(t.model).index,n=this.getStructureElements(t);return{elements:n,property:o=>this.get(r[n[o].element])}}},bN=class{constructor(t){this.map=t;this.id=Hn.create22();this.level="atom";this.kind=ge.Kind.Atomic}has(t){return this.map.has(t)}get(t){return this.map.get(t)}getStructureElements(t){if(t.models.length!==1)throw new Error("Only works on structures with a single model.");let n=new Set,o=t.unitSymmetryGroups,i=[];for(let a of o){let A=a.units[0];if(A.kind!==this.kind)continue;let s=A.elements;for(let c=0,l=s.length;c<l;c++){let u=s[c];!this.has(u)||n.has(u)||(n.add(s[c]),i[i.length]=W.Location.create(t,A,u))}}return i.sort((a,A)=>a.element-A.element),i}getElements(t){let r=this.getStructureElements(t);return{elements:r,property:n=>this.get(r[n].element)}}},Oj=class{constructor(t){this.map=t;this.id=Hn.create22();this.level="entity";this.kind=ge.Kind.Atomic}has(t){return this.map.has(t)}get(t){return this.map.get(t)}getStructureElements(t){let r=t.models;if(r.length!==1)throw new Error("Only works on structures with a single model.");let n=r[0].atomicHierarchy.index,o=new Set,i=t.unitSymmetryGroups,a=[],A=r[0].atomicHierarchy.chainAtomSegments;for(let s of i){let c=s.units[0];if(c.kind!==this.kind)continue;let l=sr.transientSegments(A,c.elements);for(;l.hasNext;){let u=l.move(),g=n.getEntityFromChain(u.index);!this.has(g)||o.has(g)||(o.add(g),a[a.length]=W.Location.create(t,c,c.elements[u.start]))}}return a.sort((s,c)=>s.element-c.element),a}getElements(t){let r=this.getStructureElements(t),n=t.model.atomicHierarchy.chainAtomSegments.index,o=t.model.atomicHierarchy.index;return{elements:r,property:i=>this.get(o.getEntityFromChain(n[r[i].element]))}}};function f7e(e,t){for(let r=0,n=t*3;r<n;r+=3){let o=e[r],i=e[r+1],a=e[r+2],A=1/Math.sqrt(o*o+i*i+a*a);e[r]=o*A,e[r+1]=i*A,e[r+2]=a*A}return e}var um=B();function Eg(e,t,r,n){for(let o=0,i=n*3;o<i;o+=3)B.fromArray(um,t,r+o),B.transformMat4(um,um,e),B.toArray(um,t,r+o)}function Npe(e,t,r,n){for(let o=0,i=n*3;o<i;o+=3)B.fromArray(um,t,r+o),B.transformMat3(um,um,e),B.toArray(um,t,r+o)}function Mpe(e,t){for(let r=0,n=e.length;r<n;r+=3)B.fromArray(um,e,r),B.normalize(um,um),B.scale(um,um,t),B.toArray(um,e,r)}var Tpe=B(),zj=B(),Ppe=B(),ap=B(),Gpe=B();function xN(e,t,r,n,o){for(let i=0,a=o*3;i<a;i+=3){let A=t[i]*3,s=t[i+1]*3,c=t[i+2]*3;B.fromArray(Tpe,e,A),B.fromArray(zj,e,s),B.fromArray(Ppe,e,c),B.sub(ap,Ppe,zj),B.sub(Gpe,Tpe,zj),B.cross(ap,ap,Gpe),r[A]+=ap[0],r[A+1]+=ap[1],r[A+2]+=ap[2],r[s]+=ap[0],r[s+1]+=ap[1],r[s+2]+=ap[2],r[c]+=ap[0],r[c+1]+=ap[1],r[c+2]+=ap[2]}return f7e(r,n)}function Ap(e,t,r=1){let n=Es(e),o=new Int32Array(n+2),i=new Int32Array(t),a=new Int32Array(t);for(let c=0,l=t*r;c<l;c+=r)++a[e[c]];let A=0;for(let c=0;c<t;c++)o[c]=A,A+=a[c];o[t]=A;let s=new Int32Array(A);for(let c=0,l=t*r;c<l;c+=r){let u=e[c],g=o[u]+i[u];s[g]=c,++i[u]}return{indices:s,offsets:o}}var Kj=B.fromArray,SN=B.transformMat4Offset;function B7e(e,t){e=Math.max(e,2);let r=Math.sqrt(e),n=Math.ceil(r);n=n+(t-n%t)%t;let o=n>0?Math.ceil(e/n):0;return{width:n,height:o,length:n*o*t}}function Mo(e,t,r,n){let{length:o,width:i,height:a}=B7e(e,t);return n=n&&n.length>=o?n:new r(o),{array:n,width:i,height:a}}var sp=B(),I7e=new qi("14"),C7e=new qi("98");function kpe(e){return e>1e5?I7e:C7e}function gm(e,t,r){let n=r*3,o=kpe(t);o.reset();for(let a=0,A=t*3;a<A;a+=n)Kj(sp,e,a),o.includePosition(sp);o.finishedIncludeStep();for(let a=0,A=t*3;a<A;a+=n)Kj(sp,e,a),o.radiusPosition(sp);let i=o.getSphere();if(t<=14){let a=[];for(let A=0,s=t*3;A<s;A+=n)a.push(Kj(B(),e,A));we.setExtrema(i,a)}return i}var jj=Y();function Ta(e,t,r,n){if(r===1){Y.fromArray(jj,t,n);let s=we.clone(e);return Y.isIdentity(jj)?s:we.transform(s,s,jj)}let o=kpe(r);o.reset();let{center:i,radius:a,extrema:A}=e;if(A&&r<=14){for(let s=0,c=r;s<c;++s)for(let l of A)SN(sp,l,t,0,0,s*16+n),o.includePosition(sp);o.finishedIncludeStep();for(let s=0,c=r;s<c;++s)for(let l of A)SN(sp,l,t,0,0,s*16+n),o.radiusPosition(sp)}else{for(let s=0,c=r;s<c;++s)SN(sp,i,t,0,0,s*16+n),o.includePositionRadius(sp,a);o.finishedIncludeStep();for(let s=0,c=r;s<c;++s)SN(sp,i,t,0,0,s*16+n),o.radiusPositionRadius(sp,a)}return o.getSphere()}var su=new Uint8Array(772);su[1]=1;su[2]=1;su[3]=1;su[256]=1;su[512]=1;su[768]=1;su[257]=2;su[513]=2;su[769]=2;su[258]=2;su[514]=2;su[770]=2;su[259]=2;su[515]=2;su[771]=2;function Hpe(e,t){if(t===0)return 0;let r=new Uint32Array(e.buffer,0,e.buffer.byteLength>>2),n=t-4>>2,o=4*n,i=0;if(n<0)for(let a=0;a<t;++a)i+=e[a]&&1;else{for(let a=0;a<n;++a){let A=r[a];i+=su[A&65535]+su[A>>16]}for(let a=o;a<t;++a)i+=e[a]&&1}return i/t}function ei(e,t,r){if(r){let n=Mo(Math.max(1,e),1,Uint8Array,r.tMarker.ref.value.array);return n.array.fill(0,0,e),D.updateIfChanged(r.uMarker,0),D.update(r.tMarker,n),D.update(r.uMarkerTexDim,Le.create(n.width,n.height)),D.updateIfChanged(r.markerAverage,0),D.updateIfChanged(r.markerStatus,0),D.updateIfChanged(r.dMarkerType,t),r}else{let n=Mo(Math.max(1,e),1,Uint8Array);return{uMarker:D.create(0),tMarker:D.create(n),uMarkerTexDim:D.create(Le.create(n.width,n.height)),markerAverage:D.create(0),markerStatus:D.create(0),dMarkerType:D.create(t)}}}var rsr={array:new Uint8Array(1),width:1,height:1};var vA={kind:"null-location"};function _f(e,t,r){return{kind:"data-location",tag:e,data:t,element:r}}function rn(e,t,r,n,o=!1,i=()=>!1,a){if(e%r!==0)throw new Error("incompatible groupCount and stride");let A={location:vA,location2:vA,index:0,groupIndex:0,instanceIndex:0,isSecondary:!1},s=A.groupIndex<e,c=!1,l=0,u=0,g=!1,m=!!a;return{get hasNext(){return s},get isNextNewInstance(){return c},groupCount:e,instanceCount:t,count:e*t,stride:r,nonInstanceable:o,hasLocation2:m,move(){return s&&(A.groupIndex=l,A.instanceIndex=u,A.index=u*e+l,A.location=n(l,g?-1:u),m&&(A.location2=a(l,g?-1:u)),A.isSecondary=i(l,g?-1:u),l+=r,l===e?(++u,c=!0,u<t&&(l=0)):c=!1,s=l<e),A},reset(){A.location=vA,A.location2=vA,A.index=0,A.groupIndex=0,A.instanceIndex=0,A.isSecondary=!1,s=A.groupIndex<e,c=!1,l=0,u=0,g=!1},skipInstance(){s&&A.instanceIndex===u&&(++u,l=0,s=u<t)},voidInstances(){g=!0}}}var uI={get hasNext(){return!1},get isNextNewInstance(){return!1},groupCount:0,instanceCount:0,count:0,stride:0,nonInstanceable:!1,hasLocation2:!1,move(){return{location:vA,location2:vA,index:0,groupIndex:0,instanceIndex:0,isSecondary:!1}},reset(){},skipInstance(){},voidInstances(){}};function is(e,t){return{kind:"position-location",position:e?B.clone(e):B(),normal:t?B.clone(t):B()}}function uQ(e){return!!e&&e.kind==="position-location"}var _pe=ua();function h7e(e,t){switch(t){case e.FRAMEBUFFER_COMPLETE:return"complete";case e.FRAMEBUFFER_INCOMPLETE_ATTACHMENT:return"incomplete attachment";case e.FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT:return"incomplete missing attachment";case e.FRAMEBUFFER_INCOMPLETE_DIMENSIONS:return"incomplete dimensions";case e.FRAMEBUFFER_UNSUPPORTED:return"unsupported"}if(mr(e))switch(t){case e.FRAMEBUFFER_INCOMPLETE_MULTISAMPLE:return"incomplete multisample";case e.RENDERBUFFER_SAMPLES:return"renderbuffer samples"}return"unknown error"}function yD(e,t){let r=e.checkFramebufferStatus(e.FRAMEBUFFER);if(r!==e.FRAMEBUFFER_COMPLETE){let n=h7e(e,r);throw new Error(`Framebuffer status: ${n}${t?` (${t})`:""}`)}}function Vpe(e){let t=e.createFramebuffer();if(t===null)throw new Error("Could not create WebGL framebuffer");return t}function Ype(e){let t=Vpe(e),r=!1;return{id:_pe(),bind:()=>e.bindFramebuffer(e.FRAMEBUFFER,t),reset:()=>{t=Vpe(e)},destroy:()=>{r||(e.deleteFramebuffer(t),r=!0)}}}function Ope(){return{id:_pe(),bind:()=>{},reset:()=>{},destroy:()=>{}}}function Wj(e){let t=zpe(e);if(t===null)throw new Error('Could not find support for "instanced_arrays"');let r=jpe(e);if(r===null)throw new Error('Could not find support for "element_index_uint"');let n=Kpe(e);if(n===null)throw new Error('Could not find support for "standard_derivatives"');let o=Xpe(e);ir&&o===null&&console.log('Could not find support for "texture_float"');let i=Zpe(e);ir&&i===null&&console.log('Could not find support for "texture_float_linear"');let a=qpe(e);ir&&a===null&&console.log('Could not find support for "texture_half_float"');let A=$pe(e);ir&&A===null&&console.log('Could not find support for "texture_half_float_linear"');let s=Afe(e);ir&&s===null&&console.log('Could not find support for "depth_texture"');let c=efe(e);ir&&c===null&&console.log('Could not find support for "blend_minmax"');let l=Wpe(e);ir&&l===null&&console.log('Could not find support for "vertex_array_object"');let u=tfe(e);ir&&u===null&&console.log('Could not find support for "frag_depth"');let g=rfe(e);ir&&g===null&&console.log('Could not find support for "color_buffer_float"');let m=nfe(e);ir&&m===null&&console.log('Could not find support for "color_buffer_half_float"');let p=ofe(e);ir&&p===null&&console.log('Could not find support for "draw_buffers"');let d=ife(e);ir&&d===null&&console.log('Could not find support for "draw_buffers_indexed"');let f=afe(e);ir&&f===null&&console.log('Could not find support for "shader_texture_lod"');let I=sfe(e);ir&&I===null&&console.log('Could not find support for "sRGB"');let C=cfe(e);ir&&C===null&&console.log('Could not find support for "disjoint_timer_query"');let y=lfe(e);ir&&y===null&&console.log('Could not find support for "multi_draw"');let Q=ufe(e);ir&&Q===null&&console.log('Could not find support for "draw_instanced_base_vertex_base_instance"');let E=gfe(e);ir&&E===null&&console.log('Could not find support for "multi_draw_instanced_base_vertex_base_instance"');let b=mfe(e);ir&&b===null&&console.log('Could not find support for "parallel_shader_compile"');let x=dfe(e);ir&&x===null&&console.log('Could not find support for "fbo_render_mipmap"');let S=pfe(e);ir&&S===null&&console.log('Could not find support for "provoking_vertex"');let w=ffe(e);ir&&w===null&&console.log('Could not find support for "clip_cull_distance"');let R=Bfe(e);ir&&R===null&&console.log('Could not find support for "conservative_depth"');let T=Ife(e);ir&&T===null&&console.log('Could not find support for "stencil_texturing"');let L=Cfe(e);ir&&L===null&&console.log('Could not find support for "clip_control"');let F=hfe(e);ir&&F===null&&console.log('Could not find support for "render_snorm"');let v=yfe(e);ir&&v===null&&console.log('Could not find support for "render_shared_exponent"');let U=Qfe(e);ir&&U===null&&console.log('Could not find support for "texture_norm16"');let G=Efe(e);ir&&G===null&&console.log('Could not find support for "depth_clamp"');let N=bfe(e);ir&&N===null&&console.log('Could not find support for "multiview2"');let k=xfe(e);return{instancedArrays:t,standardDerivatives:n,elementIndexUint:r,textureFloat:o,textureFloatLinear:i,textureHalfFloat:a,textureHalfFloatLinear:A,depthTexture:s,blendMinMax:c,vertexArrayObject:l,fragDepth:u,colorBufferFloat:g,colorBufferHalfFloat:m,drawBuffers:p,drawBuffersIndexed:d,shaderTextureLod:f,sRGB:I,disjointTimerQuery:C,multiDraw:y,drawInstancedBaseVertexBaseInstance:Q,multiDrawInstancedBaseVertexBaseInstance:E,parallelShaderCompile:b,fboRenderMipmap:x,provokingVertex:S,clipCullDistance:w,conservativeDepth:R,stencilTexturing:T,clipControl:L,renderSnorm:F,renderSharedExponent:v,textureNorm16:U,depthClamp:G,multiview2:N,noNonInstancedActiveAttribs:k}}function Jpe(e,t){let r=Wj(e);Bi(t,(n,o)=>{o==="noNonInstancedActiveAttribs"?t.noNonInstancedActiveAttribs=r.noNonInstancedActiveAttribs:n!==null&&(r[o]===null?t[o]=null:Object.assign(n,r[o]))})}function Sfe(e,t){let r={},n=e.getParameter(e.FRONT_FACE),o=e.getParameter(e.CULL_FACE_MODE),i=e.getParameter(e.DEPTH_WRITEMASK),a=e.getParameter(e.DEPTH_CLEAR_VALUE),A=e.getParameter(e.DEPTH_FUNC),s=e.getParameter(e.COLOR_WRITEMASK),c=e.getParameter(e.COLOR_CLEAR_VALUE),l=e.getParameter(e.BLEND_SRC_RGB),u=e.getParameter(e.BLEND_DST_RGB),g=e.getParameter(e.BLEND_SRC_ALPHA),m=e.getParameter(e.BLEND_DST_ALPHA),p=e.getParameter(e.BLEND_COLOR),d=e.getParameter(e.BLEND_EQUATION_RGB),f=e.getParameter(e.BLEND_EQUATION_ALPHA),I=e.getParameter(e.STENCIL_FUNC),C=e.getParameter(e.STENCIL_VALUE_MASK),y=e.getParameter(e.STENCIL_REF),Q=e.getParameter(e.STENCIL_BACK_FUNC),E=e.getParameter(e.STENCIL_BACK_VALUE_MASK),b=e.getParameter(e.STENCIL_BACK_REF),x=e.getParameter(e.STENCIL_WRITEMASK),S=e.getParameter(e.STENCIL_BACK_WRITEMASK),w=e.getParameter(e.STENCIL_FAIL),R=e.getParameter(e.STENCIL_PASS_DEPTH_PASS),T=e.getParameter(e.STENCIL_PASS_DEPTH_FAIL),L=e.getParameter(e.STENCIL_BACK_FAIL),F=e.getParameter(e.STENCIL_BACK_PASS_DEPTH_PASS),v=e.getParameter(e.STENCIL_BACK_PASS_DEPTH_FAIL),U=e.getParameter(e.MAX_VERTEX_ATTRIBS),G=[],N=e.getParameter(e.VIEWPORT),k=e.getParameter(e.SCISSOR_BOX),J=t.clipControl?e.getParameter(t.clipControl.CLIP_ORIGIN):-1,H=t.clipControl?e.getParameter(t.clipControl.CLIP_DEPTH_MODE):-1,z=()=>{for(let _=0;_<U;++_)G[_]=0};return z(),{currentProgramId:-1,currentMaterialId:-1,currentRenderItemId:-1,enable:_=>{r[_]!==!0&&(e.enable(_),r[_]=!0)},disable:_=>{r[_]!==!1&&(e.disable(_),r[_]=!1)},frontFace:_=>{_!==n&&(e.frontFace(_),n=_)},cullFace:_=>{_!==o&&(e.cullFace(_),o=_)},depthMask:_=>{_!==i&&(e.depthMask(_),i=_)},clearDepth:_=>{_!==a&&(e.clearDepth(_),a=_)},depthFunc:_=>{_!==A&&(e.depthFunc(_),A=_)},colorMask:(_,M,q,ne)=>{(_!==s[0]||M!==s[1]||q!==s[2]||ne!==s[3])&&(e.colorMask(_,M,q,ne),s[0]=_,s[1]=M,s[2]=q,s[3]=ne)},clearColor:(_,M,q,ne)=>{(_!==c[0]||M!==c[1]||q!==c[2]||ne!==c[3])&&(e.clearColor(_,M,q,ne),c[0]=_,c[1]=M,c[2]=q,c[3]=ne)},blendFunc:(_,M)=>{(_!==l||M!==u||_!==g||M!==m)&&(e.blendFunc(_,M),l=_,u=M,g=_,m=M)},blendFuncSeparate:(_,M,q,ne)=>{(_!==l||M!==u||q!==g||ne!==m)&&(e.blendFuncSeparate(_,M,q,ne),l=_,u=M,g=q,m=ne)},blendEquation:_=>{(_!==d||_!==f)&&(e.blendEquation(_),d=_,f=_)},blendEquationSeparate:(_,M)=>{(_!==d||M!==f)&&(e.blendEquationSeparate(_,M),d=_,f=M)},blendColor:(_,M,q,ne)=>{(_!==p[0]||M!==p[1]||q!==p[2]||ne!==p[3])&&(e.blendColor(_,M,q,ne),p[0]=_,p[1]=M,p[2]=q,p[3]=ne)},stencilFunc:(_,M,q)=>{(_!==I||M!==y||q!==C||_!==Q||M!==b||q!==E)&&(e.stencilFunc(_,M,q),I=_,y=M,C=q,Q=_,b=M,E=q)},stencilFuncSeparate:(_,M,q,ne)=>{_===e.FRONT?(M!==I||q!==y||ne!==C)&&(e.stencilFuncSeparate(_,M,q,ne),I=M,y=q,C=ne):_===e.BACK?(M!==Q||q!==b||ne!==E)&&(e.stencilFuncSeparate(_,M,q,ne),Q=M,b=q,E=ne):_===e.FRONT_AND_BACK&&(M!==I||q!==y||ne!==C||M!==Q||q!==b||ne!==E)&&(e.stencilFuncSeparate(_,M,q,ne),I=M,y=q,C=ne,Q=M,b=q,E=ne)},stencilMask:_=>{(_!==x||_!==S)&&(e.stencilMask(_),x=_,S=_)},stencilMaskSeparate:(_,M)=>{_===e.FRONT?M!==x&&(e.stencilMaskSeparate(_,M),x=M):_===e.BACK?M!==S&&(e.stencilMaskSeparate(_,M),S=M):_===e.FRONT_AND_BACK&&(M!==x||M!==S)&&(e.stencilMaskSeparate(_,M),x=M,S=M)},stencilOp:(_,M,q)=>{(_!==w||M!==T||q!==R||_!==L||M!==v||q!==F)&&(e.stencilOp(_,M,q),w=_,T=M,R=q,L=_,v=M,F=q)},stencilOpSeparate:(_,M,q,ne)=>{_===e.FRONT?(M!==w||q!==T||ne!==R)&&(e.stencilOpSeparate(_,M,q,ne),w=M,T=q,R=ne):_===e.BACK?(M!==L||q!==v||ne!==F)&&(e.stencilOpSeparate(_,M,q,ne),L=M,v=q,F=ne):_===e.FRONT_AND_BACK&&(M!==w||q!==T||ne!==R||M!==L||q!==v||ne!==F)&&(e.stencilOpSeparate(_,M,q,ne),w=M,T=q,R=ne,L=M,v=q,F=ne)},enableVertexAttrib:_=>{e.enableVertexAttribArray(_),G[_]=1},clearVertexAttribsState:z,disableUnusedVertexAttribs:()=>{for(let _=0;_<U;++_)G[_]===0&&e.disableVertexAttribArray(_)},viewport:(_,M,q,ne)=>{(_!==N[0]||M!==N[1]||q!==N[2]||ne!==N[3])&&(e.viewport(_,M,q,ne),N[0]=_,N[1]=M,N[2]=q,N[3]=ne)},scissor:(_,M,q,ne)=>{(_!==k[0]||M!==k[1]||q!==k[2]||ne!==k[3])&&(e.scissor(_,M,q,ne),k[0]=_,k[1]=M,k[2]=q,k[3]=ne)},clipControl:t.clipControl?(_,M)=>{(_!==J||M!==H)&&(t.clipControl.clipControl(_,M),J=_,H=M)}:void 0,reset:()=>{r={},n=e.getParameter(e.FRONT_FACE),o=e.getParameter(e.CULL_FACE_MODE),i=e.getParameter(e.DEPTH_WRITEMASK),a=e.getParameter(e.DEPTH_CLEAR_VALUE),A=e.getParameter(e.DEPTH_FUNC),s=e.getParameter(e.COLOR_WRITEMASK),c=e.getParameter(e.COLOR_CLEAR_VALUE),l=e.getParameter(e.BLEND_SRC_RGB),u=e.getParameter(e.BLEND_DST_RGB),g=e.getParameter(e.BLEND_SRC_ALPHA),m=e.getParameter(e.BLEND_DST_ALPHA),p=e.getParameter(e.BLEND_COLOR),d=e.getParameter(e.BLEND_EQUATION_RGB),f=e.getParameter(e.BLEND_EQUATION_ALPHA),I=e.getParameter(e.STENCIL_FUNC),C=e.getParameter(e.STENCIL_VALUE_MASK),y=e.getParameter(e.STENCIL_REF),Q=e.getParameter(e.STENCIL_BACK_FUNC),E=e.getParameter(e.STENCIL_BACK_VALUE_MASK),b=e.getParameter(e.STENCIL_BACK_REF),x=e.getParameter(e.STENCIL_WRITEMASK),S=e.getParameter(e.STENCIL_BACK_WRITEMASK),w=e.getParameter(e.STENCIL_FAIL),R=e.getParameter(e.STENCIL_PASS_DEPTH_PASS),T=e.getParameter(e.STENCIL_PASS_DEPTH_FAIL),L=e.getParameter(e.STENCIL_BACK_FAIL),F=e.getParameter(e.STENCIL_BACK_PASS_DEPTH_PASS),v=e.getParameter(e.STENCIL_BACK_PASS_DEPTH_FAIL),U=e.getParameter(e.MAX_VERTEX_ATTRIBS),G.length=0;for(let _=0;_<U;++_)G[_]=0;N=e.getParameter(e.VIEWPORT),k=e.getParameter(e.SCISSOR_BOX),J=t.clipControl?e.getParameter(t.clipControl.CLIP_ORIGIN):-1,H=t.clipControl?e.getParameter(t.clipControl.CLIP_DEPTH_MODE):-1}}}var Dfe=`
|
|
float preFogAlpha = gl_FragColor.a;
|
|
if (uFog) {
|
|
float viewZ = depthToViewZ(uIsOrtho, fragmentDepth, uNear, uFar);
|
|
float fogFactor = smoothstep(uFogNear, uFogFar, abs(viewZ));
|
|
float fogAlpha = (1.0 - fogFactor) * gl_FragColor.a;
|
|
if (!uTransparentBackground) {
|
|
if (gl_FragColor.a < 1.0) {
|
|
// transparent objects are blended with background color
|
|
gl_FragColor.a = fogAlpha;
|
|
} else {
|
|
// mix opaque objects with background color
|
|
gl_FragColor.rgb = mix(gl_FragColor.rgb, uFogColor, fogFactor);
|
|
}
|
|
} else {
|
|
#if defined(dRenderVariant_colorDpoit) && !defined(dGeometryType_directVolume)
|
|
if (gl_FragColor.a < 1.0) {
|
|
// transparent objects are blended with background color
|
|
gl_FragColor.a = fogAlpha;
|
|
} else {
|
|
// opaque objects need to be pre-multiplied alpha
|
|
gl_FragColor.rgb *= fogAlpha;
|
|
gl_FragColor.a = fogAlpha;
|
|
}
|
|
#else
|
|
// pre-multiplied alpha expected for transparent background
|
|
gl_FragColor.rgb *= fogAlpha;
|
|
gl_FragColor.a = fogAlpha;
|
|
#endif
|
|
}
|
|
} else if (uTransparentBackground) {
|
|
#if !defined(dRenderVariant_colorDpoit) && !defined(dGeometryType_directVolume)
|
|
// pre-multiplied alpha expected for transparent background
|
|
gl_FragColor.rgb *= gl_FragColor.a;
|
|
#endif
|
|
}
|
|
`;var vfe=`
|
|
if (interior) {
|
|
material.rgb = mix(material.rgb, uInteriorColor.rgb, uInteriorColor.a);
|
|
|
|
float isf = clamp(uInteriorSubstance.a, 0.0, 0.99); // clamp to avoid artifacts
|
|
metalness = mix(metalness, uInteriorSubstance.r, isf);
|
|
roughness = mix(roughness, uInteriorSubstance.g, isf);
|
|
bumpiness = mix(bumpiness, uInteriorSubstance.b, isf);
|
|
|
|
#ifdef dTransparentBackfaces_opaque
|
|
material.a = 1.0;
|
|
#endif
|
|
}
|
|
`;var Ffe=`
|
|
#if defined(dIgnoreLight)
|
|
#ifdef bumpEnabled
|
|
if (uBumpFrequency > 0.0 && uBumpAmplitude > 0.0 && bumpiness > 0.0) {
|
|
material.rgb += fbm(vModelPosition * uBumpFrequency) * uBumpAmplitude * bumpiness;
|
|
material.rgb -= 0.5 * uBumpAmplitude * bumpiness;
|
|
}
|
|
#endif
|
|
|
|
#if defined(dRenderVariant_color) || defined(dRenderVariant_tracing)
|
|
material.rgb += material.rgb * emissive;
|
|
#endif
|
|
|
|
gl_FragColor = material;
|
|
#else
|
|
#ifdef bumpEnabled
|
|
if (uBumpFrequency > 0.0 && uBumpAmplitude > 0.0 && bumpiness > 0.0) {
|
|
normal = perturbNormal(-vViewPosition, normal, fbm(vModelPosition * uBumpFrequency), (uBumpAmplitude * bumpiness) / uBumpFrequency);
|
|
}
|
|
#endif
|
|
|
|
vec4 color = material;
|
|
|
|
#if defined(dCelShaded)
|
|
// clamp to avoid artifacts
|
|
metalness = clamp(metalness, 0.0, 0.99);
|
|
roughness = clamp(roughness, 0.05, 1.0);
|
|
#endif
|
|
|
|
GeometricContext geometry;
|
|
geometry.position = -vViewPosition;
|
|
geometry.normal = normal;
|
|
geometry.viewDir = normalize(vViewPosition);
|
|
|
|
PhysicalMaterial physicalMaterial;
|
|
physicalMaterial.diffuseColor = color.rgb * (1.0 - metalness);
|
|
#ifdef enabledFragDepth
|
|
physicalMaterial.roughness = min(max(roughness, 0.0525), 1.0);
|
|
#else
|
|
vec3 dxy = max(abs(dFdx(normal)), abs(dFdy(normal)));
|
|
float geometryRoughness = max(max(dxy.x, dxy.y), dxy.z);
|
|
physicalMaterial.roughness = min(max(roughness, 0.0525) + geometryRoughness, 1.0);
|
|
#endif
|
|
physicalMaterial.specularColor = mix(vec3(0.04), color.rgb, metalness);
|
|
physicalMaterial.specularF90 = 1.0;
|
|
|
|
IncidentLight directLight;
|
|
|
|
vec3 outgoingLight = vec3(0.0);
|
|
|
|
#if defined(dCelShaded)
|
|
float celDiffuse;
|
|
float celSpecular;
|
|
float celIntensity;
|
|
|
|
#pragma unroll_loop_start
|
|
for (int i = 0; i < dLightCount; ++i) {
|
|
directLight.direction = uLightDirection[i];
|
|
directLight.color = uLightColor[i] * PI; // * PI for punctual light
|
|
|
|
celDiffuse = RECIPROCAL_PI * max(dot(geometry.normal, directLight.direction), 0.0) * (1.0 - metalness);
|
|
celSpecular = luminance(saturate(dot(geometry.normal, directLight.direction)) * BRDF_GGX(directLight.direction, geometry.viewDir, geometry.normal, physicalMaterial.specularColor, physicalMaterial.specularF90, roughness));
|
|
|
|
celIntensity = celDiffuse + celSpecular;
|
|
celIntensity = ceil(celIntensity * uCelSteps) / uCelSteps;
|
|
|
|
outgoingLight += color.rgb * directLight.color * celIntensity;
|
|
}
|
|
#pragma unroll_loop_end
|
|
|
|
outgoingLight += physicalMaterial.diffuseColor * uAmbientColor;
|
|
#else
|
|
ReflectedLight reflectedLight = ReflectedLight(vec3(0.0), vec3(0.0), vec3(0.0), vec3(0.0));
|
|
|
|
#pragma unroll_loop_start
|
|
for (int i = 0; i < dLightCount; ++i) {
|
|
directLight.direction = uLightDirection[i];
|
|
directLight.color = uLightColor[i] * PI; // * PI for punctual light
|
|
RE_Direct_Physical(directLight, geometry, physicalMaterial, reflectedLight);
|
|
}
|
|
#pragma unroll_loop_end
|
|
|
|
vec3 irradiance = uAmbientColor * PI; // * PI for punctual light
|
|
RE_IndirectDiffuse_Physical(irradiance, geometry, physicalMaterial, reflectedLight);
|
|
|
|
// indirect specular only metals
|
|
vec3 radiance = uAmbientColor * metalness;
|
|
vec3 iblIrradiance = uAmbientColor * metalness;
|
|
vec3 clearcoatRadiance = vec3(0.0);
|
|
RE_IndirectSpecular_Physical(radiance, iblIrradiance, clearcoatRadiance, geometry, physicalMaterial, reflectedLight);
|
|
|
|
outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + reflectedLight.directSpecular + reflectedLight.indirectSpecular;
|
|
#endif
|
|
outgoingLight = clamp(outgoingLight, 0.01, 0.99); // prevents black artifacts on specular highlight with transparent background
|
|
|
|
#if defined(dRenderVariant_color) || defined(dRenderVariant_tracing)
|
|
outgoingLight += color.rgb * emissive;
|
|
#endif
|
|
|
|
gl_FragColor = vec4(outgoingLight, color.a);
|
|
#endif
|
|
|
|
gl_FragColor.rgb *= uExposure;
|
|
`;var wfe=`
|
|
|
|
#if defined(dColorMarker)
|
|
if (marker > 0.0) {
|
|
if ((uMarkerPriority == 1 && marker != 2.0) || (uMarkerPriority != 1 && marker == 1.0)) {
|
|
gl_FragColor.rgb = mix(gl_FragColor.rgb, uHighlightColor, uHighlightStrength);
|
|
gl_FragColor.a = max(gl_FragColor.a, uHighlightStrength * 0.002); // for direct-volume rendering
|
|
} else {
|
|
gl_FragColor.rgb = mix(gl_FragColor.rgb, uSelectColor, uSelectStrength);
|
|
gl_FragColor.a = max(gl_FragColor.a, uSelectStrength * 0.002); // for direct-volume rendering
|
|
}
|
|
} else if (uMarkerAverage > 0.0) {
|
|
gl_FragColor.rgb = mix(gl_FragColor.rgb, uDimColor, uDimStrength);
|
|
gl_FragColor.a = max(gl_FragColor.a, uDimStrength * 0.002); // for direct-volume rendering
|
|
}
|
|
#endif
|
|
`;var Rfe=`
|
|
#if dClipObjectCount != 0 && defined(dClipping)
|
|
#if defined(dClippingType_instance)
|
|
vClipping = readFromTexture(tClipping, aInstance, uClippingTexDim).a;
|
|
#elif defined(dMarkerType_groupInstance)
|
|
vClipping = readFromTexture(tClipping, aInstance * float(uGroupCount) + group, uClippingTexDim).a;
|
|
#endif
|
|
#endif
|
|
`;var Ufe=`
|
|
#if defined(dRenderVariant_color) || defined(dRenderVariant_tracing) || defined(dRenderVariant_emissive)
|
|
#if defined(dColorType_attribute)
|
|
vColor.rgb = aColor;
|
|
#elif defined(dColorType_instance)
|
|
vColor.rgb = readFromTexture(tColor, aInstance, uColorTexDim).rgb;
|
|
#elif defined(dColorType_group)
|
|
#if defined(dDualColor)
|
|
vec4 color2;
|
|
if (aColorMode == 2.0) {
|
|
vColor.rgb = readFromTexture(tColor, group, uColorTexDim).rgb;
|
|
} else {
|
|
vColor.rgb = readFromTexture(tColor, group * 2.0, uColorTexDim).rgb;
|
|
color2.rgb = readFromTexture(tColor, group * 2.0 + 1.0, uColorTexDim).rgb;
|
|
}
|
|
#else
|
|
vColor.rgb = readFromTexture(tColor, group, uColorTexDim).rgb;
|
|
#endif
|
|
#elif defined(dColorType_groupInstance)
|
|
#if defined(dDualColor)
|
|
vec4 color2;
|
|
if (aColorMode == 2.0) {
|
|
vColor.rgb = readFromTexture(tColor, aInstance * float(uGroupCount) + group, uColorTexDim).rgb;
|
|
} else {
|
|
vColor.rgb = readFromTexture(tColor, (aInstance * float(uGroupCount) + group) * 2.0, uColorTexDim).rgb;
|
|
color2.rgb = readFromTexture(tColor, (aInstance * float(uGroupCount) + group) * 2.0 + 1.0, uColorTexDim).rgb;
|
|
}
|
|
#else
|
|
vColor.rgb = readFromTexture(tColor, aInstance * float(uGroupCount) + group, uColorTexDim).rgb;
|
|
#endif
|
|
#elif defined(dColorType_vertex)
|
|
vColor.rgb = readFromTexture(tColor, vertexId, uColorTexDim).rgb;
|
|
#elif defined(dColorType_vertexInstance)
|
|
vColor.rgb = readFromTexture(tColor, int(aInstance) * uVertexCount + vertexId, uColorTexDim).rgb;
|
|
#elif defined(dColorType_volume)
|
|
vec3 cgridPos = (uColorGridTransform.w * (position - uColorGridTransform.xyz)) / uColorGridDim;
|
|
vColor.rgb = texture3dFrom2dLinear(tColorGrid, cgridPos, uColorGridDim, uColorTexDim).rgb;
|
|
#elif defined(dColorType_volumeInstance)
|
|
vec3 cgridPos = (uColorGridTransform.w * (vModelPosition / uModelScale - uColorGridTransform.xyz)) / uColorGridDim;
|
|
vColor.rgb = texture3dFrom2dLinear(tColorGrid, cgridPos, uColorGridDim, uColorTexDim).rgb;
|
|
#endif
|
|
|
|
#ifdef dUsePalette
|
|
vPaletteV = ((vColor.r * 256.0 * 256.0 * 255.0 + vColor.g * 256.0 * 255.0 + vColor.b * 255.0) - 1.0) / PALETTE_SCALE;
|
|
#endif
|
|
|
|
#ifdef dOverpaint
|
|
#if defined(dOverpaintType_instance)
|
|
vOverpaint = readFromTexture(tOverpaint, aInstance, uOverpaintTexDim);
|
|
#elif defined(dOverpaintType_groupInstance)
|
|
vOverpaint = readFromTexture(tOverpaint, aInstance * float(uGroupCount) + group, uOverpaintTexDim);
|
|
#elif defined(dOverpaintType_vertexInstance)
|
|
vOverpaint = readFromTexture(tOverpaint, int(aInstance) * uVertexCount + vertexId, uOverpaintTexDim);
|
|
#elif defined(dOverpaintType_volumeInstance)
|
|
vec3 ogridPos = (uOverpaintGridTransform.w * (vModelPosition / uModelScale - uOverpaintGridTransform.xyz)) / uOverpaintGridDim;
|
|
vOverpaint = texture3dFrom2dLinear(tOverpaintGrid, ogridPos, uOverpaintGridDim, uOverpaintTexDim);
|
|
#endif
|
|
|
|
// pre-mix to avoid darkening due to empty overpaint
|
|
#ifdef dColorType_uniform
|
|
vOverpaint.rgb = mix(uColor.rgb, vOverpaint.rgb, vOverpaint.a);
|
|
#else
|
|
vOverpaint.rgb = mix(vColor.rgb, vOverpaint.rgb, vOverpaint.a);
|
|
#endif
|
|
vOverpaint *= uOverpaintStrength;
|
|
#endif
|
|
|
|
#ifdef dEmissive
|
|
#if defined(dEmissiveType_instance)
|
|
vEmissive = readFromTexture(tEmissive, aInstance, uEmissiveTexDim).a;
|
|
#elif defined(dEmissiveType_groupInstance)
|
|
vEmissive = readFromTexture(tEmissive, aInstance * float(uGroupCount) + group, uEmissiveTexDim).a;
|
|
#elif defined(dEmissiveType_vertexInstance)
|
|
vEmissive = readFromTexture(tEmissive, int(aInstance) * uVertexCount + vertexId, uEmissiveTexDim).a;
|
|
#elif defined(dEmissiveType_volumeInstance)
|
|
vec3 egridPos = (uEmissiveGridTransform.w * (vModelPosition / uModelScale - uEmissiveGridTransform.xyz)) / uEmissiveGridDim;
|
|
vEmissive = texture3dFrom2dLinear(tEmissiveGrid, egridPos, uEmissiveGridDim, uEmissiveTexDim).a;
|
|
#endif
|
|
vEmissive *= uEmissiveStrength;
|
|
#endif
|
|
|
|
#ifdef dSubstance
|
|
#if defined(dSubstanceType_instance)
|
|
vSubstance = readFromTexture(tSubstance, aInstance, uSubstanceTexDim);
|
|
#elif defined(dSubstanceType_groupInstance)
|
|
vSubstance = readFromTexture(tSubstance, aInstance * float(uGroupCount) + group, uSubstanceTexDim);
|
|
#elif defined(dSubstanceType_vertexInstance)
|
|
vSubstance = readFromTexture(tSubstance, int(aInstance) * uVertexCount + vertexId, uSubstanceTexDim);
|
|
#elif defined(dSubstanceType_volumeInstance)
|
|
vec3 sgridPos = (uSubstanceGridTransform.w * (vModelPosition / uModelScale - uSubstanceGridTransform.xyz)) / uSubstanceGridDim;
|
|
vSubstance = texture3dFrom2dLinear(tSubstanceGrid, sgridPos, uSubstanceGridDim, uSubstanceTexDim);
|
|
#endif
|
|
|
|
// pre-mix to avoid artifacts due to empty substance
|
|
vSubstance.rgb = mix(vec3(uMetalness, uRoughness, uBumpiness), vSubstance.rgb, vSubstance.a);
|
|
vSubstance *= uSubstanceStrength;
|
|
#endif
|
|
#elif defined(dRenderVariant_emissive)
|
|
#ifdef dEmissive
|
|
#if defined(dEmissiveType_instance)
|
|
vEmissive = readFromTexture(tEmissive, aInstance, uEmissiveTexDim).a;
|
|
#elif defined(dEmissiveType_groupInstance)
|
|
vEmissive = readFromTexture(tEmissive, aInstance * float(uGroupCount) + group, uEmissiveTexDim).a;
|
|
#elif defined(dEmissiveType_vertexInstance)
|
|
vEmissive = readFromTexture(tEmissive, int(aInstance) * uVertexCount + vertexId, uEmissiveTexDim).a;
|
|
#elif defined(dEmissiveType_volumeInstance)
|
|
vec3 egridPos = (uEmissiveGridTransform.w * (vModelPosition / uModelScale - uEmissiveGridTransform.xyz)) / uEmissiveGridDim;
|
|
vEmissive = texture3dFrom2dLinear(tEmissiveGrid, egridPos, uEmissiveGridDim, uEmissiveTexDim).a;
|
|
#endif
|
|
vEmissive *= uEmissiveStrength;
|
|
#endif
|
|
#elif defined(dRenderVariant_pick)
|
|
#ifdef requiredDrawBuffers
|
|
vObject = vec4(packIntToRGB(float(uObjectId)), 1.0);
|
|
vInstance = vec4(packIntToRGB(aInstance), 1.0);
|
|
vGroup = vec4(packIntToRGB(group), 1.0);
|
|
#else
|
|
if (uPickType == 1) {
|
|
vColor = vec4(packIntToRGB(float(uObjectId)), 1.0);
|
|
} else if (uPickType == 2) {
|
|
vColor = vec4(packIntToRGB(aInstance), 1.0);
|
|
} else {
|
|
vColor = vec4(packIntToRGB(group), 1.0);
|
|
}
|
|
#endif
|
|
#endif
|
|
|
|
#ifdef dTransparency
|
|
#if defined(dTransparencyType_instance)
|
|
vTransparency = readFromTexture(tTransparency, aInstance, uTransparencyTexDim).a;
|
|
#elif defined(dTransparencyType_groupInstance)
|
|
vTransparency = readFromTexture(tTransparency, aInstance * float(uGroupCount) + group, uTransparencyTexDim).a;
|
|
#elif defined(dTransparencyType_vertexInstance)
|
|
vTransparency = readFromTexture(tTransparency, int(aInstance) * uVertexCount + vertexId, uTransparencyTexDim).a;
|
|
#elif defined(dTransparencyType_volumeInstance)
|
|
vec3 tgridPos = (uTransparencyGridTransform.w * (vModelPosition / uModelScale - uTransparencyGridTransform.xyz)) / uTransparencyGridDim;
|
|
vTransparency = texture3dFrom2dLinear(tTransparencyGrid, tgridPos, uTransparencyGridDim, uTransparencyTexDim).a;
|
|
#endif
|
|
vTransparency *= uTransparencyStrength;
|
|
#endif
|
|
`;var Lfe=`
|
|
#ifdef dGeometryType_textureMesh
|
|
float group = unpackRGBToInt(readFromTexture(tGroup, vertexId, uGeoTexDim).rgb);
|
|
#else
|
|
float group = aGroup;
|
|
#endif
|
|
`;var Tfe=`
|
|
#if defined(dNeedsMarker)
|
|
#if defined(dMarkerType_instance)
|
|
vMarker = readFromTexture(tMarker, aInstance, uMarkerTexDim).a;
|
|
#elif defined(dMarkerType_groupInstance)
|
|
vMarker = readFromTexture(tMarker, aInstance * float(uGroupCount) + group, uMarkerTexDim).a;
|
|
#endif
|
|
#endif
|
|
`;var Pfe=`
|
|
#if defined(dNeedsMarker)
|
|
float marker = uMarker;
|
|
if (uMarker == -1.0) {
|
|
marker = floor(vMarker * 255.0 + 0.5); // rounding required to work on some cards on win
|
|
}
|
|
#endif
|
|
|
|
// optional per-fragment opacity multiplier; defaults to 1.0
|
|
#ifndef dHasMaterialOpacity
|
|
float materialOpacity = 1.0;
|
|
#endif
|
|
|
|
#if defined(dRenderVariant_color) || defined(dRenderVariant_tracing)
|
|
#if defined(dUsePalette)
|
|
vec4 material = vec4(texture2D(tPalette, vec2(vPaletteV, 0.5)).rgb, uAlpha);
|
|
#elif defined(dColorType_uniform)
|
|
vec4 material = vec4(uColor, uAlpha);
|
|
#elif defined(dColorType_varying)
|
|
vec4 material = vec4(vColor.rgb, uAlpha);
|
|
#endif
|
|
|
|
// mix material with overpaint
|
|
#if defined(dOverpaint)
|
|
material.rgb = mix(material.rgb, vOverpaint.rgb, vOverpaint.a);
|
|
#endif
|
|
|
|
float emissive = uEmissive;
|
|
#ifdef dEmissive
|
|
emissive += vEmissive;
|
|
#endif
|
|
|
|
float metalness = uMetalness;
|
|
float roughness = uRoughness;
|
|
float bumpiness = uBumpiness;
|
|
#ifdef dSubstance
|
|
float sf = clamp(vSubstance.a, 0.0, 0.99); // clamp to avoid artifacts
|
|
metalness = mix(metalness, vSubstance.r, sf);
|
|
roughness = mix(roughness, vSubstance.g, sf);
|
|
bumpiness = mix(bumpiness, vSubstance.b, sf);
|
|
#endif
|
|
|
|
#if defined(dXrayShaded)
|
|
material.a = calcXrayShadedAlpha(material.a, normal);
|
|
#endif
|
|
#elif defined(dRenderVariant_depth)
|
|
if (fragmentDepth > getDepth(gl_FragCoord.xy / uDrawingBufferSize)) {
|
|
discard;
|
|
}
|
|
vec4 material;
|
|
if (uRenderMask == MaskOpaque) {
|
|
#if defined(dXrayShaded)
|
|
discard;
|
|
#endif
|
|
#if defined(dTransparency)
|
|
float dta = 1.0 - vTransparency;
|
|
#if __VERSION__ == 100 || defined(dVaryingGroup)
|
|
if (vTransparency < 0.1) dta = 1.0; // hard cutoff to avoid artifacts
|
|
#endif
|
|
|
|
if (uAlpha * materialOpacity * dta < 1.0) {
|
|
discard;
|
|
}
|
|
#else
|
|
if (uAlpha * materialOpacity < 1.0) {
|
|
discard;
|
|
}
|
|
#endif
|
|
material = packDepthToRGBA(fragmentDepth);
|
|
} else if (uRenderMask == MaskTransparent) {
|
|
float alpha = uAlpha * materialOpacity;
|
|
#if defined(dTransparency)
|
|
float dta = 1.0 - vTransparency;
|
|
alpha *= dta;
|
|
#endif
|
|
|
|
#ifdef dXrayShaded
|
|
alpha = calcXrayShadedAlpha(alpha, normal);
|
|
#else
|
|
if (alpha == 1.0) {
|
|
discard;
|
|
}
|
|
#endif
|
|
material = packDepthWithAlphaToRGBA(fragmentDepth, alpha);
|
|
}
|
|
#elif defined(dRenderVariant_marking)
|
|
vec4 material;
|
|
if(uMarkingType == 1) {
|
|
if (marker > 0.0)
|
|
discard;
|
|
#ifdef enabledFragDepth
|
|
material = packDepthToRGBA(gl_FragDepthEXT);
|
|
#else
|
|
material = packDepthToRGBA(gl_FragCoord.z);
|
|
#endif
|
|
} else {
|
|
if (marker == 0.0)
|
|
discard;
|
|
float depthTest = 1.0;
|
|
if (uMarkingDepthTest) {
|
|
depthTest = (fragmentDepth >= getDepthPacked(gl_FragCoord.xy / uDrawingBufferSize)) ? 1.0 : 0.0;
|
|
}
|
|
bool isHighlight = intMod(marker, 2.0) > 0.1;
|
|
float viewZ = depthToViewZ(uIsOrtho, fragmentDepth, uNear, uFar);
|
|
float fogFactor = smoothstep(uFogNear, uFogFar, abs(viewZ));
|
|
if (fogFactor == 1.0)
|
|
discard;
|
|
material = vec4(0.0, depthTest, isHighlight ? 1.0 : 0.0, 1.0 - fogFactor);
|
|
}
|
|
#elif defined(dRenderVariant_emissive)
|
|
float emissive = uEmissive;
|
|
#ifdef dEmissive
|
|
emissive += vEmissive;
|
|
#endif
|
|
float emissiveAlpha = uAlpha;
|
|
#if defined(dXrayShaded)
|
|
emissiveAlpha = calcXrayShadedAlpha(emissiveAlpha, normal);
|
|
#endif
|
|
// fade emissive bloom with fog so the glow dims into the background like the geometry
|
|
if (uFog) {
|
|
float viewZ = depthToViewZ(uIsOrtho, fragmentDepth, uNear, uFar);
|
|
emissiveAlpha *= 1.0 - smoothstep(uFogNear, uFogFar, abs(viewZ));
|
|
}
|
|
// dim emitters behind a transparent blocker by its coverage (tDepth packs front depth+alpha)
|
|
vec2 emissiveBlocker = unpackRGBAToDepthWithAlpha(texture2D(tDepth, gl_FragCoord.xy / uDrawingBufferSize));
|
|
if (fragmentDepth > emissiveBlocker.x + 0.0001) {
|
|
emissiveAlpha *= 1.0 - emissiveBlocker.y;
|
|
}
|
|
// glow with the object's own color so emissive isn't double-counted via the lit buffer
|
|
#if defined(dUsePalette)
|
|
vec3 emissiveColor = texture2D(tPalette, vec2(vPaletteV, 0.5)).rgb;
|
|
#elif defined(dColorType_uniform)
|
|
vec3 emissiveColor = uColor;
|
|
#elif defined(dColorType_varying)
|
|
vec3 emissiveColor = vColor.rgb;
|
|
#else
|
|
vec3 emissiveColor = vec3(1.0);
|
|
#endif
|
|
#ifdef dOverpaint
|
|
emissiveColor = mix(emissiveColor, vOverpaint.rgb, vOverpaint.a);
|
|
#endif
|
|
float e = emissive * emissiveAlpha;
|
|
vec4 material = vec4(emissiveColor * e, e);
|
|
#endif
|
|
|
|
// apply per-group transparency
|
|
#if defined(dTransparency) && (defined(dRenderVariant_pick) || defined(dRenderVariant_color) || defined(dRenderVariant_emissive) || defined(dRenderVariant_tracing))
|
|
float ta = 1.0 - vTransparency;
|
|
if (vTransparency < 0.09) ta = 1.0; // hard cutoff looks better
|
|
|
|
#if defined(dRenderVariant_pick)
|
|
if (ta * uAlpha < uPickingAlphaThreshold)
|
|
discard; // ignore so the element below can be picked
|
|
#elif defined(dRenderVariant_emissive)
|
|
material *= ta;
|
|
#elif defined(dRenderVariant_color) || defined(dRenderVariant_tracing)
|
|
material.a *= ta;
|
|
#endif
|
|
#endif
|
|
`;var Gfe=`
|
|
#ifdef dGeometryType_image
|
|
mat4 transform = aTransform;
|
|
#else
|
|
mat4 transform = applyTumble(aTransform, aInstance, float(uObjectId));
|
|
#endif
|
|
mat4 model = uModel * transform;
|
|
mat4 modelView = uView * model;
|
|
#ifdef dGeometryType_textureMesh
|
|
vec3 position = readFromTexture(tPosition, vertexId, uGeoTexDim).xyz;
|
|
#else
|
|
vec3 position = aPosition;
|
|
#endif
|
|
#ifndef dGeometryType_image
|
|
position = applyWiggle(position, group, aInstance);
|
|
#endif
|
|
vec4 position4 = vec4(position, 1.0);
|
|
// for accessing tColorGrid in vert shader and for clipping in frag shader
|
|
vModelPosition = (model * position4).xyz;
|
|
vec4 mvPosition = modelView * position4;
|
|
vViewPosition = mvPosition.xyz;
|
|
gl_Position = uProjection * mvPosition;
|
|
`;var Nfe=`
|
|
#if defined(dSizeType_uniform)
|
|
float size = uSize;
|
|
#elif defined(dSizeType_attribute)
|
|
float size = aSize;
|
|
#elif defined(dSizeType_instance)
|
|
float size = unpackRGBToInt(readFromTexture(tSize, aInstance, uSizeTexDim).rgb);
|
|
#elif defined(dSizeType_group)
|
|
float size = unpackRGBToInt(readFromTexture(tSize, group, uSizeTexDim).rgb);
|
|
#elif defined(dSizeType_groupInstance)
|
|
float size = unpackRGBToInt(readFromTexture(tSize, aInstance * float(uGroupCount) + group, uSizeTexDim).rgb);
|
|
#elif defined(dSizeType_vertex)
|
|
float size = unpackRGBToInt(readFromTexture(tSize, vertexId, uSizeTexDim).rgb);
|
|
#elif defined(dSizeType_vertexInstance)
|
|
float size = unpackRGBToInt(readFromTexture(tSize, int(aInstance) * uVertexCount + vertexId, uSizeTexDim).rgb);
|
|
#endif
|
|
|
|
#if defined(dSizeType_instance) || defined(dSizeType_group) || defined(dSizeType_groupInstance) || defined(dSizeType_vertex) || defined(dSizeType_vertexInstance)
|
|
size /= 100.0; // NOTE factor also set in TypeScript
|
|
#endif
|
|
|
|
size *= uSizeFactor;
|
|
`;var Mfe=`
|
|
float viewZ = depthToViewZ(uIsOrtho, fragmentDepth, uNear, uFar);
|
|
float fogFactor = smoothstep(uFogNear, uFogFar, abs(viewZ));
|
|
float fogAlpha = (1.0 - fogFactor) * uAlpha;
|
|
float alpha = uAlpha;
|
|
#ifdef dXrayShaded
|
|
// add bias to make picking xray shaded elements easier
|
|
alpha = calcXrayShadedAlpha(alpha, normal) + (0.3 * uPickingAlphaThreshold);
|
|
#endif
|
|
// if not opaque enough ignore so the element below can be picked
|
|
if (alpha < uPickingAlphaThreshold || fogAlpha < 0.1) {
|
|
#ifdef dTransparentBackfaces_opaque
|
|
if (!interior) discard;
|
|
#else
|
|
discard;
|
|
#endif
|
|
}
|
|
`;var kfe=`
|
|
#if defined(dRenderVariant_color) || defined(dRenderVariant_tracing)
|
|
#if defined(dTransparentBackfaces_off)
|
|
if (interior && material.a < 1.0) discard;
|
|
#elif defined(dTransparentBackfaces_opaque)
|
|
if (interior) material.a = 1.0;
|
|
#endif
|
|
|
|
#if !defined(dXrayShaded)
|
|
if ((uRenderMask == MaskOpaque && material.a < 1.0) ||
|
|
(uRenderMask == MaskTransparent && material.a == 1.0)
|
|
) {
|
|
discard;
|
|
}
|
|
#endif
|
|
#endif
|
|
|
|
#if defined(dRenderVariant_depth)
|
|
#if defined(dTransparentBackfaces_off)
|
|
if (interior) discard;
|
|
#endif
|
|
#endif
|
|
`;var Hfe=`
|
|
#if defined(dClipVariant_instance) && dClipObjectCount != 0
|
|
vec3 mCenter = (uModel * aTransform * vec4(uInvariantBoundingSphere.xyz, 1.0)).xyz;
|
|
if (clipTest(mCenter / uModelScale)) {
|
|
// move out of [ -w, +w ] to 'discard' in vert shader
|
|
gl_Position.z = 2.0 * gl_Position.w;
|
|
}
|
|
#endif
|
|
`;var Vfe=`
|
|
#if defined(dClipVariant_pixel) && dClipObjectCount != 0
|
|
if (clipTest(vModelPosition / uModelScale))
|
|
discard;
|
|
#endif
|
|
`;var _fe=`
|
|
uniform float uMetalness;
|
|
uniform float uRoughness;
|
|
uniform float uBumpiness;
|
|
#ifdef bumpEnabled
|
|
uniform float uBumpFrequency;
|
|
uniform float uBumpAmplitude;
|
|
#endif
|
|
uniform float uEmissive;
|
|
|
|
// Density value to estimate object thickness
|
|
uniform float uDensity;
|
|
|
|
#if defined(dRenderVariant_color) || defined(dRenderVariant_tracing) || defined(dRenderVariant_emissive)
|
|
#if defined(dColorType_uniform)
|
|
uniform vec3 uColor;
|
|
#elif defined(dColorType_varying)
|
|
varying vec4 vColor;
|
|
#endif
|
|
|
|
#ifdef dUsePalette
|
|
uniform sampler2D tPalette;
|
|
varying float vPaletteV;
|
|
#endif
|
|
|
|
#ifdef dOverpaint
|
|
varying vec4 vOverpaint;
|
|
#endif
|
|
|
|
#ifdef dEmissive
|
|
varying float vEmissive;
|
|
#endif
|
|
|
|
#ifdef dSubstance
|
|
varying vec4 vSubstance;
|
|
#endif
|
|
#elif defined(dRenderVariant_emissive)
|
|
#ifdef dEmissive
|
|
varying float vEmissive;
|
|
#endif
|
|
#elif defined(dRenderVariant_pick)
|
|
#if __VERSION__ == 100 || !defined(dVaryingGroup)
|
|
#ifdef requiredDrawBuffers
|
|
varying vec4 vObject;
|
|
varying vec4 vInstance;
|
|
varying vec4 vGroup;
|
|
#else
|
|
varying vec4 vColor;
|
|
#endif
|
|
#else
|
|
#ifdef requiredDrawBuffers
|
|
flat in vec4 vObject;
|
|
flat in vec4 vInstance;
|
|
flat in vec4 vGroup;
|
|
#else
|
|
flat in vec4 vColor;
|
|
#endif
|
|
#endif
|
|
#endif
|
|
|
|
#ifdef dTransparency
|
|
varying float vTransparency;
|
|
#endif
|
|
`;var Yfe=`
|
|
uniform float uMetalness;
|
|
uniform float uRoughness;
|
|
uniform float uBumpiness;
|
|
|
|
#if defined(dRenderVariant_color) || defined(dRenderVariant_tracing) || defined(dRenderVariant_emissive)
|
|
#if defined(dColorType_uniform)
|
|
uniform vec3 uColor;
|
|
#elif defined(dColorType_attribute)
|
|
varying vec4 vColor;
|
|
attribute vec3 aColor;
|
|
#elif defined(dColorType_texture)
|
|
varying vec4 vColor;
|
|
uniform vec2 uColorTexDim;
|
|
uniform sampler2D tColor;
|
|
#elif defined(dColorType_grid)
|
|
varying vec4 vColor;
|
|
uniform vec2 uColorTexDim;
|
|
uniform vec3 uColorGridDim;
|
|
uniform vec4 uColorGridTransform;
|
|
uniform sampler2D tColorGrid;
|
|
#elif defined(dColorType_direct)
|
|
varying vec4 vColor;
|
|
#endif
|
|
|
|
#ifdef dUsePalette
|
|
varying float vPaletteV;
|
|
#endif
|
|
|
|
#ifdef dOverpaint
|
|
#if defined(dOverpaintType_instance) || defined(dOverpaintType_groupInstance) || defined(dOverpaintType_vertexInstance)
|
|
varying vec4 vOverpaint;
|
|
uniform vec2 uOverpaintTexDim;
|
|
uniform sampler2D tOverpaint;
|
|
#elif defined(dOverpaintType_volumeInstance)
|
|
varying vec4 vOverpaint;
|
|
uniform vec2 uOverpaintTexDim;
|
|
uniform vec3 uOverpaintGridDim;
|
|
uniform vec4 uOverpaintGridTransform;
|
|
uniform sampler2D tOverpaintGrid;
|
|
#endif
|
|
uniform float uOverpaintStrength;
|
|
#endif
|
|
|
|
#ifdef dEmissive
|
|
#if defined(dEmissiveType_instance) || defined(dEmissiveType_groupInstance) || defined(dEmissiveType_vertexInstance)
|
|
varying float vEmissive;
|
|
uniform vec2 uEmissiveTexDim;
|
|
uniform sampler2D tEmissive;
|
|
#elif defined(dEmissiveType_volumeInstance)
|
|
varying float vEmissive;
|
|
uniform vec2 uEmissiveTexDim;
|
|
uniform vec3 uEmissiveGridDim;
|
|
uniform vec4 uEmissiveGridTransform;
|
|
uniform sampler2D tEmissiveGrid;
|
|
#endif
|
|
uniform float uEmissiveStrength;
|
|
#endif
|
|
|
|
#ifdef dSubstance
|
|
#if defined(dSubstanceType_instance) || defined(dSubstanceType_groupInstance) || defined(dSubstanceType_vertexInstance)
|
|
varying vec4 vSubstance;
|
|
uniform vec2 uSubstanceTexDim;
|
|
uniform sampler2D tSubstance;
|
|
#elif defined(dSubstanceType_volumeInstance)
|
|
varying vec4 vSubstance;
|
|
uniform vec2 uSubstanceTexDim;
|
|
uniform vec3 uSubstanceGridDim;
|
|
uniform vec4 uSubstanceGridTransform;
|
|
uniform sampler2D tSubstanceGrid;
|
|
#endif
|
|
uniform float uSubstanceStrength;
|
|
#endif
|
|
#elif defined(dRenderVariant_emissive)
|
|
#ifdef dEmissive
|
|
#if defined(dEmissiveType_instance) || defined(dEmissiveType_groupInstance) || defined(dEmissiveType_vertexInstance)
|
|
varying float vEmissive;
|
|
uniform vec2 uEmissiveTexDim;
|
|
uniform sampler2D tEmissive;
|
|
#elif defined(dEmissiveType_volumeInstance)
|
|
varying float vEmissive;
|
|
uniform vec2 uEmissiveTexDim;
|
|
uniform vec3 uEmissiveGridDim;
|
|
uniform vec4 uEmissiveGridTransform;
|
|
uniform sampler2D tEmissiveGrid;
|
|
#endif
|
|
uniform float uEmissiveStrength;
|
|
#endif
|
|
#elif defined(dRenderVariant_pick)
|
|
#if __VERSION__ == 100 || !defined(dVaryingGroup)
|
|
#ifdef requiredDrawBuffers
|
|
varying vec4 vObject;
|
|
varying vec4 vInstance;
|
|
varying vec4 vGroup;
|
|
#else
|
|
varying vec4 vColor;
|
|
#endif
|
|
#else
|
|
#ifdef requiredDrawBuffers
|
|
flat out vec4 vObject;
|
|
flat out vec4 vInstance;
|
|
flat out vec4 vGroup;
|
|
#else
|
|
flat out vec4 vColor;
|
|
#endif
|
|
#endif
|
|
#endif
|
|
|
|
#ifdef dTransparency
|
|
#if defined(dTransparencyType_instance) || defined(dTransparencyType_groupInstance) || defined(dTransparencyType_vertexInstance)
|
|
varying float vTransparency;
|
|
uniform vec2 uTransparencyTexDim;
|
|
uniform sampler2D tTransparency;
|
|
#elif defined(dTransparencyType_volumeInstance)
|
|
varying float vTransparency;
|
|
uniform vec2 uTransparencyTexDim;
|
|
uniform vec3 uTransparencyGridDim;
|
|
uniform vec4 uTransparencyGridTransform;
|
|
uniform sampler2D tTransparencyGrid;
|
|
#endif
|
|
uniform float uTransparencyStrength;
|
|
#endif
|
|
`;var Ofe=`
|
|
uniform float uWiggleSpeed;
|
|
uniform float uWiggleAmplitude;
|
|
uniform float uWiggleFrequency;
|
|
uniform int uWiggleMode;
|
|
uniform float uTumbleSpeed;
|
|
uniform float uTumbleAmplitude;
|
|
uniform float uTumbleFrequency;
|
|
|
|
#ifdef dWiggle
|
|
uniform vec2 uWiggleTexDim;
|
|
uniform sampler2D tWiggle;
|
|
uniform float uWiggleStrength;
|
|
#endif
|
|
|
|
vec3 applyWiggle(vec3 pos, float groupId, float instanceId) {
|
|
if (!uEnableAnimation) return pos;
|
|
float amplitude = uWiggleAmplitude;
|
|
#ifdef dWiggle
|
|
#if defined(dWiggleType_instance)
|
|
amplitude += readFromTexture(tWiggle, instanceId, uWiggleTexDim).a * uWiggleStrength;
|
|
#elif defined(dWiggleType_groupInstance)
|
|
amplitude += readFromTexture(tWiggle, instanceId * float(uGroupCount) + groupId, uWiggleTexDim).a * uWiggleStrength;
|
|
#endif
|
|
#endif
|
|
if (amplitude > 0.0 && uWiggleSpeed > 0.0 && uWiggleFrequency > 0.0) {
|
|
float t = uTime * uWiggleSpeed;
|
|
vec3 s;
|
|
if (uWiggleMode == 0) {
|
|
// Position mode: spatial position correlates nearby atoms
|
|
s = pos;
|
|
} else {
|
|
// Group mode: per-group independent noise
|
|
// Hash groupId into a well-distributed 3D seed to avoid repetition
|
|
s = vec3(
|
|
fract(sin(groupId * 127.1) * 43758.5453) * 1000.0,
|
|
fract(sin(groupId * 269.5) * 21639.7182) * 1000.0,
|
|
fract(sin(groupId * 419.2) * 32517.3926) * 1000.0
|
|
);
|
|
}
|
|
s *= uWiggleFrequency;
|
|
pos.x += (fbm(vec3(s.x, s.y + t, s.z)) / 0.4375 - 1.0) * amplitude;
|
|
pos.y += (fbm(vec3(s.x + 37.0, s.y, s.z + t)) / 0.4375 - 1.0) * amplitude;
|
|
pos.z += (fbm(vec3(s.x + t, s.y + 73.0, s.z)) / 0.4375 - 1.0) * amplitude;
|
|
}
|
|
return pos;
|
|
}
|
|
|
|
mat4 applyTumble(mat4 transform, float instanceIndex, float objectId) {
|
|
if (!uEnableAnimation) return transform;
|
|
if (uTumbleAmplitude > 0.0 && uTumbleSpeed > 0.0 && uTumbleFrequency > 0.0) {
|
|
// Scale amplitude inversely with bounding-sphere radius (Stokes-Einstein: D ~ 1/r)
|
|
float amplitude = uTumbleAmplitude / max(uInvariantBoundingSphere.w, 1.0);
|
|
float t = uTime * uTumbleSpeed;
|
|
float seed = (instanceIndex * 127.1 + objectId * 311.7) * uTumbleFrequency;
|
|
|
|
// Per-instance rotation angles from layered noise (Brownian-like)
|
|
float angleX = (fbm(vec3(seed, t, 0.0)) / 0.4375 - 1.0) * amplitude;
|
|
float angleY = (fbm(vec3(seed, 0.0, t)) / 0.4375 - 1.0) * amplitude;
|
|
float angleZ = (fbm(vec3(0.0, seed, t)) / 0.4375 - 1.0) * amplitude;
|
|
|
|
float cx = cos(angleX); float sx = sin(angleX);
|
|
float cy = cos(angleY); float sy = sin(angleY);
|
|
float cz = cos(angleZ); float sz = sin(angleZ);
|
|
|
|
// Combined rotation matrix (Rz * Ry * Rx)
|
|
mat3 rot = mat3(
|
|
cy * cz, cx * sz + sx * sy * cz, sx * sz - cx * sy * cz,
|
|
-cy * sz, cx * cz - sx * sy * sz, sx * cz + cx * sy * sz,
|
|
sy, -sx * cy, cx * cy
|
|
);
|
|
|
|
// Per-instance translation offset from layered noise (Brownian-like)
|
|
vec3 offset = vec3(
|
|
(fbm(vec3(seed + 31.7, t, 0.0)) / 0.4375 - 1.0),
|
|
(fbm(vec3(seed + 31.7, 0.0, t)) / 0.4375 - 1.0),
|
|
(fbm(vec3(0.0, seed + 31.7, t)) / 0.4375 - 1.0)
|
|
) * amplitude;
|
|
|
|
// Bounding-sphere center transformed by the linear part only (no translation)
|
|
vec3 localCenter = mat3(transform) * uInvariantBoundingSphere.xyz;
|
|
|
|
// Rotate basis vectors
|
|
mat4 result = transform;
|
|
result[0].xyz = rot * transform[0].xyz;
|
|
result[1].xyz = rot * transform[1].xyz;
|
|
result[2].xyz = rot * transform[2].xyz;
|
|
|
|
// Adjust translation so rotation pivots around the transformed center
|
|
result[3].xyz = transform[3].xyz + localCenter - rot * localCenter + offset;
|
|
|
|
return result;
|
|
}
|
|
return transform;
|
|
}
|
|
`;var Jfe=`
|
|
vec3 quaternionTransform(const in vec4 q, const in vec3 v) {
|
|
vec3 t = 2.0 * cross(q.xyz, v);
|
|
return v + q.w * t + cross(q.xyz, t);
|
|
}
|
|
|
|
vec4 computePlane(const in vec3 normal, const in vec3 inPoint) {
|
|
return vec4(normalize(normal), -dot(normal, inPoint));
|
|
}
|
|
|
|
float planeSD(const in vec4 plane, const in vec3 center) {
|
|
return -dot(plane.xyz, center - plane.xyz * -plane.w);
|
|
}
|
|
|
|
float sphereSD(const in vec3 position, const in vec4 rotation, const in vec3 size, const in vec3 center) {
|
|
return (
|
|
length(quaternionTransform(vec4(-rotation.x, -rotation.y, -rotation.z, rotation.w), center - position) / size) - 1.0
|
|
) * min(min(size.x, size.y), size.z);
|
|
}
|
|
|
|
float cubeSD(const in vec3 position, const in vec4 rotation, const in vec3 size, const in vec3 center) {
|
|
vec3 d = abs(quaternionTransform(vec4(-rotation.x, -rotation.y, -rotation.z, rotation.w), center - position)) - size;
|
|
return min(max(d.x, max(d.y, d.z)), 0.0) + length(max(d, 0.0));
|
|
}
|
|
|
|
float cylinderSD(const in vec3 position, const in vec4 rotation, const in vec3 size, const in vec3 center) {
|
|
vec3 t = quaternionTransform(vec4(-rotation.x, -rotation.y, -rotation.z, rotation.w), center - position);
|
|
|
|
vec2 d = abs(vec2(length(t.xz), t.y)) - size.xy;
|
|
return min(max(d.x, d.y), 0.0) + length(max(d, 0.0));
|
|
}
|
|
|
|
float infiniteConeSD(const in vec3 position, const in vec4 rotation, const in vec3 size, const in vec3 center) {
|
|
vec3 t = quaternionTransform(vec4(-rotation.x, -rotation.y, -rotation.z, rotation.w), center - position);
|
|
|
|
float q = length(t.xy);
|
|
return dot(size.xy, vec2(q, t.z));
|
|
}
|
|
|
|
float getSignedDistance(const in vec3 center, const in int type, const in vec3 position, const in vec4 rotation, const in vec3 scale, const in mat4 transform) {
|
|
vec3 c = (transform * vec4(center, 1.0)).xyz;
|
|
if (type == 1) {
|
|
vec3 normal = quaternionTransform(rotation, vec3(0.0, 1.0, 0.0));
|
|
vec4 plane = computePlane(normal, position);
|
|
return planeSD(plane, c);
|
|
} else if (type == 2) {
|
|
return sphereSD(position, rotation, scale * 0.5, c);
|
|
} else if (type == 3) {
|
|
return cubeSD(position, rotation, scale * 0.5, c);
|
|
} else if (type == 4) {
|
|
return cylinderSD(position, rotation, scale * 0.5, c);
|
|
} else if (type == 5) {
|
|
return infiniteConeSD(position, rotation, scale * 0.5, c);
|
|
} else {
|
|
return 0.1;
|
|
}
|
|
}
|
|
|
|
#if __VERSION__ == 100
|
|
// 8-bit
|
|
int bitwiseAnd(in int a, in int b) {
|
|
int d = 128;
|
|
int result = 0;
|
|
for (int i = 0; i < 8; ++i) {
|
|
if (d <= 0) break;
|
|
if (a >= d && b >= d) result += d;
|
|
if (a >= d) a -= d;
|
|
if (b >= d) b -= d;
|
|
d /= 2;
|
|
}
|
|
return result;
|
|
}
|
|
|
|
bool hasBit(const in int mask, const in int bit) {
|
|
return bitwiseAnd(mask, bit) == 0;
|
|
}
|
|
#else
|
|
bool hasBit(const in int mask, const in int bit) {
|
|
return (mask & bit) == 0;
|
|
}
|
|
#endif
|
|
|
|
#if dClipObjectCount != 0
|
|
bool clipTest(const in vec3 center) {
|
|
// flag is a bit-flag for clip-objects to ignore (note, object ids start at 1 not 0)
|
|
#if defined(dClipping)
|
|
int flag = int(floor(vClipping * 255.0 + 0.5));
|
|
#else
|
|
int flag = 0;
|
|
#endif
|
|
|
|
#pragma unroll_loop_start
|
|
for (int i = 0; i < dClipObjectCount; ++i) {
|
|
if (flag == 0 || hasBit(flag, UNROLLED_LOOP_INDEX + 1)) {
|
|
bool test = getSignedDistance(center, uClipObjectType[i], uClipObjectPosition[i], uClipObjectRotation[i], uClipObjectScale[i], uClipObjectTransform[i]) <= 0.0;
|
|
if ((!uClipObjectInvert[i] && test) || (uClipObjectInvert[i] && !test)) {
|
|
return true;
|
|
}
|
|
}
|
|
}
|
|
#pragma unroll_loop_end
|
|
return false;
|
|
}
|
|
#endif
|
|
`;var zfe=`
|
|
uniform int uObjectId;
|
|
uniform int uInstanceCount;
|
|
uniform int uGroupCount;
|
|
|
|
uniform int uPickType;
|
|
uniform int uMarkingType;
|
|
|
|
uniform vec4 uCameraPlane;
|
|
uniform vec4 uLod;
|
|
|
|
#if dClipObjectCount != 0
|
|
uniform int uClipObjectType[dClipObjectCount];
|
|
uniform bool uClipObjectInvert[dClipObjectCount];
|
|
uniform vec3 uClipObjectPosition[dClipObjectCount];
|
|
uniform vec4 uClipObjectRotation[dClipObjectCount];
|
|
uniform vec3 uClipObjectScale[dClipObjectCount];
|
|
uniform mat4 uClipObjectTransform[dClipObjectCount];
|
|
|
|
#if defined(dClipping)
|
|
#if __VERSION__ == 100 || defined(dClippingType_instance) || !defined(dVaryingGroup)
|
|
varying float vClipping;
|
|
#else
|
|
flat in float vClipping;
|
|
#endif
|
|
#endif
|
|
#endif
|
|
|
|
#if defined(dColorMarker)
|
|
uniform vec3 uHighlightColor;
|
|
uniform vec3 uSelectColor;
|
|
uniform vec3 uDimColor;
|
|
uniform float uHighlightStrength;
|
|
uniform float uSelectStrength;
|
|
uniform float uDimStrength;
|
|
uniform int uMarkerPriority;
|
|
uniform float uMarkerAverage;
|
|
#endif
|
|
|
|
#if defined(dNeedsMarker)
|
|
uniform float uMarker;
|
|
#if __VERSION__ == 100 || defined(dMarkerType_instance) || !defined(dVaryingGroup)
|
|
varying float vMarker;
|
|
#else
|
|
flat in float vMarker;
|
|
#endif
|
|
#endif
|
|
|
|
#if defined(dRenderVariant_colorDpoit)
|
|
#define MAX_DPOIT_DEPTH 99999.0 // NOTE constant also set in TypeScript
|
|
uniform sampler2D tDpoitDepth;
|
|
uniform sampler2D tDpoitFrontColor;
|
|
#endif
|
|
|
|
varying vec3 vModelPosition;
|
|
varying vec3 vViewPosition;
|
|
|
|
uniform vec2 uViewOffset;
|
|
uniform float uModelScale;
|
|
|
|
uniform float uNear;
|
|
uniform float uFar;
|
|
uniform float uIsOrtho;
|
|
|
|
uniform bool uFog;
|
|
uniform float uFogNear;
|
|
uniform float uFogFar;
|
|
uniform vec3 uFogColor;
|
|
|
|
uniform float uAlpha;
|
|
uniform float uPickingAlphaThreshold;
|
|
uniform bool uTransparentBackground;
|
|
|
|
uniform bool uDoubleSided;
|
|
bool interior;
|
|
|
|
uniform float uXrayEdgeFalloff;
|
|
uniform float uCelSteps;
|
|
uniform float uExposure;
|
|
|
|
uniform mat4 uProjection;
|
|
|
|
uniform int uRenderMask;
|
|
uniform bool uMarkingDepthTest;
|
|
|
|
uniform sampler2D tDepth;
|
|
uniform vec2 uDrawingBufferSize;
|
|
|
|
float getDepthPacked(const in vec2 coords) {
|
|
return unpackRGBAToDepth(texture2D(tDepth, coords));
|
|
}
|
|
|
|
float getDepth(const in vec2 coords) {
|
|
#ifdef depthTextureSupport
|
|
return texture2D(tDepth, coords).r;
|
|
#else
|
|
return unpackRGBAToDepth(texture2D(tDepth, coords));
|
|
#endif
|
|
}
|
|
|
|
float calcDepth(const in vec3 pos) {
|
|
vec2 clipZW = pos.z * uProjection[2].zw + uProjection[3].zw;
|
|
return 0.5 + 0.5 * clipZW.x / clipZW.y;
|
|
}
|
|
|
|
// "Bump Mapping Unparametrized Surfaces on the GPU" Morten S. Mikkelsen
|
|
// https://mmikk.github.io/papers3d/mm_sfgrad_bump.pdf
|
|
vec3 perturbNormal(in vec3 position, in vec3 normal, in float height, in float scale) {
|
|
vec3 sigmaS = dFdx(position);
|
|
vec3 sigmaT = dFdy(position);
|
|
|
|
vec3 r1 = cross(sigmaT, normal);
|
|
vec3 r2 = cross(normal, sigmaS);
|
|
float det = dot(sigmaS, r1);
|
|
if (det == 0.0) return normal;
|
|
|
|
float bs = dFdx(height);
|
|
float bt = dFdy(height);
|
|
|
|
vec3 surfGrad = sign(det) * (bs * r1 + bt * r2);
|
|
return normalize(abs(det) * normal - scale * surfGrad);
|
|
}
|
|
|
|
#ifdef dXrayShaded
|
|
float calcXrayShadedAlpha(in float alpha, const in vec3 normal) {
|
|
#if defined(dXrayShaded_on)
|
|
alpha *= 1.0 - pow(abs(dot(normal, vec3(0.0, 0.0, 1.0))), uXrayEdgeFalloff);
|
|
#elif defined(dXrayShaded_inverted)
|
|
alpha *= pow(abs(dot(normal, vec3(0.0, 0.0, 1.0))), uXrayEdgeFalloff);
|
|
#endif
|
|
return clamp(alpha, 0.001, 0.999);
|
|
}
|
|
#endif
|
|
`;var Kfe=`
|
|
uniform mat4 uProjection, uModel, uView;
|
|
uniform vec3 uCameraPosition;
|
|
uniform vec4 uCameraPlane;
|
|
|
|
uniform int uObjectId;
|
|
uniform int uVertexCount;
|
|
uniform int uInstanceCount;
|
|
uniform int uGroupCount;
|
|
uniform vec4 uInvariantBoundingSphere;
|
|
uniform vec4 uLod;
|
|
|
|
uniform bool uDoubleSided;
|
|
uniform int uPickType;
|
|
uniform float uTime;
|
|
uniform bool uEnableAnimation;
|
|
|
|
#if dClipObjectCount != 0
|
|
uniform int uClipObjectType[dClipObjectCount];
|
|
uniform bool uClipObjectInvert[dClipObjectCount];
|
|
uniform vec3 uClipObjectPosition[dClipObjectCount];
|
|
uniform vec4 uClipObjectRotation[dClipObjectCount];
|
|
uniform vec3 uClipObjectScale[dClipObjectCount];
|
|
uniform mat4 uClipObjectTransform[dClipObjectCount];
|
|
|
|
#if defined(dClipping)
|
|
uniform vec2 uClippingTexDim;
|
|
uniform sampler2D tClipping;
|
|
#if __VERSION__ == 100 || defined(dClippingType_instance) || !defined(dVaryingGroup)
|
|
varying float vClipping;
|
|
#else
|
|
flat out float vClipping;
|
|
#endif
|
|
#endif
|
|
#endif
|
|
|
|
#if defined(dNeedsMarker)
|
|
uniform float uMarker;
|
|
uniform vec2 uMarkerTexDim;
|
|
uniform sampler2D tMarker;
|
|
#if __VERSION__ == 100 || defined(dMarkerType_instance) || !defined(dVaryingGroup)
|
|
varying float vMarker;
|
|
#else
|
|
flat out float vMarker;
|
|
#endif
|
|
#endif
|
|
|
|
varying vec3 vModelPosition;
|
|
varying vec3 vViewPosition;
|
|
|
|
uniform float uModelScale;
|
|
|
|
#if defined(noNonInstancedActiveAttribs)
|
|
// int() is needed for some Safari versions
|
|
// see https://bugs.webkit.org/show_bug.cgi?id=244152
|
|
#define VertexID int(gl_VertexID)
|
|
#else
|
|
attribute float aVertex;
|
|
#define VertexID int(aVertex)
|
|
#endif
|
|
|
|
#if defined(enabledMultiDraw)
|
|
#define DrawID gl_DrawID
|
|
#else
|
|
#define DrawID uDrawId
|
|
#endif
|
|
`;var jfe=`
|
|
// TODO find a better place for these convenience defines
|
|
|
|
#if defined(dRenderVariant_colorBlended) || defined(dRenderVariant_colorWboit) || defined(dRenderVariant_colorDpoit)
|
|
#define dRenderVariant_color
|
|
#endif
|
|
|
|
#if defined(dColorType_instance) || defined(dColorType_group) || defined(dColorType_groupInstance) || defined(dColorType_vertex) || defined(dColorType_vertexInstance)
|
|
#define dColorType_texture
|
|
#endif
|
|
|
|
#if defined(dColorType_volume) || defined(dColorType_volumeInstance)
|
|
#define dColorType_grid
|
|
#endif
|
|
|
|
#if defined(dColorType_attribute) || defined(dColorType_texture) || defined(dColorType_grid)
|
|
#define dColorType_varying
|
|
#endif
|
|
|
|
#if ((defined(dRenderVariant_color) || defined(dRenderVariant_tracing)) && defined(dColorMarker)) || defined(dRenderVariant_marking)
|
|
#define dNeedsMarker
|
|
#endif
|
|
|
|
#if defined(dXrayShaded_on) || defined(dXrayShaded_inverted)
|
|
#define dXrayShaded
|
|
#endif
|
|
|
|
#if defined(dRenderVariant_color) || defined(dRenderVariant_tracing) || ((defined(dRenderVariant_depth) || defined(dRenderVariant_pick)) && defined(dXrayShaded))
|
|
#define dNeedsNormal
|
|
#endif
|
|
|
|
#define MaskAll 0
|
|
#define MaskOpaque 1
|
|
#define MaskTransparent 2
|
|
|
|
//
|
|
|
|
#define PI 3.14159265
|
|
#define RECIPROCAL_PI 0.31830988618
|
|
#define EPSILON 1e-6
|
|
#define ONE_MINUS_EPSILON 1.0 - EPSILON
|
|
#define TWO_PI 6.2831853
|
|
#define HALF_PI 1.570796325
|
|
|
|
#define PALETTE_SCALE 16777214.0 // (1 << 24) - 2
|
|
|
|
#define saturate(a) clamp(a, 0.0, 1.0)
|
|
|
|
#if __VERSION__ == 100
|
|
#define round(x) floor((x) + 0.5)
|
|
#endif
|
|
|
|
float intDiv(const in float a, const in float b) { return float(int(a) / int(b)); }
|
|
vec2 ivec2Div(const in vec2 a, const in vec2 b) { return vec2(ivec2(a) / ivec2(b)); }
|
|
float intMod(const in float a, const in float b) { return a - b * float(int(a) / int(b)); }
|
|
int imod(const in int a, const in int b) { return a - b * (a / b); }
|
|
|
|
float pow2(const in float x) { return x * x; }
|
|
|
|
vec3 packIntToRGB(in float value) {
|
|
value = clamp(round(value), 0.0, 16777216.0 - 1.0) + 1.0;
|
|
vec3 c = vec3(0.0);
|
|
c.b = mod(value, 256.0);
|
|
value = floor(value / 256.0);
|
|
c.g = mod(value, 256.0);
|
|
value = floor(value / 256.0);
|
|
c.r = mod(value, 256.0);
|
|
return c / 255.0;
|
|
}
|
|
float unpackRGBToInt(const in vec3 rgb) {
|
|
return (floor(rgb.r * 255.0 + 0.5) * 256.0 * 256.0 + floor(rgb.g * 255.0 + 0.5) * 256.0 + floor(rgb.b * 255.0 + 0.5)) - 1.0;
|
|
}
|
|
|
|
vec2 packUnitIntervalToRG(const in float v) {
|
|
vec2 enc;
|
|
enc.xy = vec2(fract(v * 256.0), v);
|
|
enc.y -= enc.x * (1.0 / 256.0);
|
|
enc.xy *= 256.0 / 255.0;
|
|
|
|
return enc;
|
|
}
|
|
|
|
float unpackRGToUnitInterval(const in vec2 enc) {
|
|
return dot(enc, vec2(255.0 / (256.0 * 256.0), 255.0 / 256.0));
|
|
}
|
|
|
|
float pack2x4(vec2 v) {
|
|
vec2 clamped_v = clamp(v, 0.0, 1.0);
|
|
vec2 scaled_v = floor(clamped_v * 15.0 + 0.5); // round to 0\u201315
|
|
float c = scaled_v.x + scaled_v.y * 16.0;
|
|
return c / 255.0;
|
|
}
|
|
|
|
vec2 unpack2x4(float f) {
|
|
float c = floor(f * 255.0 + 0.5);
|
|
float lo = mod(c, 16.0);
|
|
float hi = floor(c / 16.0);
|
|
return vec2(lo, hi) / 15.0;
|
|
}
|
|
|
|
vec3 screenSpaceToViewSpace(const in vec3 ssPos, const in mat4 invProjection) {
|
|
vec4 p = vec4(ssPos * 2.0 - 1.0, 1.0);
|
|
p = invProjection * p;
|
|
return p.xyz / p.w;
|
|
}
|
|
|
|
const float PackUpscale = 256.0 / 255.0; // fraction -> 0..1 (including 1)
|
|
const float UnpackDownscale = 255.0 / 256.0; // 0..1 -> fraction (excluding 1)
|
|
const vec3 PackFactors = vec3(256.0 * 256.0 * 256.0, 256.0 * 256.0, 256.0);
|
|
const vec4 UnpackFactors = UnpackDownscale / vec4(PackFactors, 1.0);
|
|
const float ShiftRight8 = 1.0 / 256.0;
|
|
|
|
vec4 packDepthToRGBA(const in float v) {
|
|
vec4 r = vec4(fract(v * PackFactors), v);
|
|
r.yzw -= r.xyz * ShiftRight8; // tidy overflow
|
|
return r * PackUpscale;
|
|
}
|
|
float unpackRGBAToDepth(const in vec4 v) {
|
|
return dot(v, UnpackFactors);
|
|
}
|
|
|
|
vec4 packDepthWithAlphaToRGBA(const in float depth, const in float alpha){
|
|
vec3 r = vec3(fract(depth * PackFactors.yz), depth);
|
|
r.yz -= r.xy * ShiftRight8; // tidy overflow
|
|
return vec4(r * PackUpscale, alpha);
|
|
}
|
|
vec2 unpackRGBAToDepthWithAlpha(const in vec4 v) {
|
|
return vec2(dot(v.xyz, UnpackFactors.yzw), v.w);
|
|
}
|
|
|
|
vec4 sRGBToLinear(const in vec4 c) {
|
|
return vec4(mix(pow(c.rgb * 0.9478672986 + vec3(0.0521327014), vec3(2.4)), c.rgb * 0.0773993808, vec3(lessThanEqual(c.rgb, vec3(0.04045)))), c.a);
|
|
}
|
|
vec4 linearTosRGB(const in vec4 c) {
|
|
return vec4(mix(pow(c.rgb, vec3(0.41666)) * 1.055 - vec3(0.055), c.rgb * 12.92, vec3(lessThanEqual(c.rgb, vec3(0.0031308)))), c.a);
|
|
}
|
|
|
|
float luminance(vec3 c) {
|
|
// https://www.w3.org/TR/WCAG21/#dfn-relative-luminance
|
|
const vec3 W = vec3(0.2125, 0.7154, 0.0721);
|
|
return dot(c, W);
|
|
}
|
|
|
|
float linearizeDepth(const in float depth, const in float near, const in float far) {
|
|
return (2.0 * near) / (far + near - depth * (far - near));
|
|
}
|
|
|
|
float perspectiveDepthToViewZ(const in float invClipZ, const in float near, const in float far) {
|
|
return (near * far) / ((far - near) * invClipZ - far);
|
|
}
|
|
|
|
float orthographicDepthToViewZ(const in float linearClipZ, const in float near, const in float far) {
|
|
return linearClipZ * (near - far) - near;
|
|
}
|
|
|
|
float depthToViewZ(const in float isOrtho, const in float linearClipZ, const in float near, const in float far) {
|
|
return isOrtho == 1.0 ? orthographicDepthToViewZ(linearClipZ, near, far) : perspectiveDepthToViewZ(linearClipZ, near, far);
|
|
}
|
|
|
|
// see https://github.com/graphitemaster/normals_revisited and https://www.shadertoy.com/view/3s33zj
|
|
mat3 adjoint(const in mat4 m) {
|
|
return mat3(
|
|
cross(m[1].xyz, m[2].xyz),
|
|
cross(m[2].xyz, m[0].xyz),
|
|
cross(m[0].xyz, m[1].xyz)
|
|
);
|
|
}
|
|
|
|
#if __VERSION__ == 100
|
|
// transpose
|
|
|
|
float transpose(const in float m) {
|
|
return m;
|
|
}
|
|
|
|
mat2 transpose2(const in mat2 m) {
|
|
return mat2(
|
|
m[0][0], m[1][0],
|
|
m[0][1], m[1][1]
|
|
);
|
|
}
|
|
|
|
mat3 transpose3(const in mat3 m) {
|
|
return mat3(
|
|
m[0][0], m[1][0], m[2][0],
|
|
m[0][1], m[1][1], m[2][1],
|
|
m[0][2], m[1][2], m[2][2]
|
|
);
|
|
}
|
|
|
|
mat4 transpose4(const in mat4 m) {
|
|
return mat4(
|
|
m[0][0], m[1][0], m[2][0], m[3][0],
|
|
m[0][1], m[1][1], m[2][1], m[3][1],
|
|
m[0][2], m[1][2], m[2][2], m[3][2],
|
|
m[0][3], m[1][3], m[2][3], m[3][3]
|
|
);
|
|
}
|
|
|
|
// inverse
|
|
|
|
float inverse(const in float m) {
|
|
return 1.0 / m;
|
|
}
|
|
|
|
mat2 inverse2(const in mat2 m) {
|
|
return mat2(m[1][1],-m[0][1],
|
|
-m[1][0], m[0][0]) / (m[0][0]*m[1][1] - m[0][1]*m[1][0]);
|
|
}
|
|
|
|
mat3 inverse3(const in mat3 m) {
|
|
float a00 = m[0][0], a01 = m[0][1], a02 = m[0][2];
|
|
float a10 = m[1][0], a11 = m[1][1], a12 = m[1][2];
|
|
float a20 = m[2][0], a21 = m[2][1], a22 = m[2][2];
|
|
|
|
float b01 = a22 * a11 - a12 * a21;
|
|
float b11 = -a22 * a10 + a12 * a20;
|
|
float b21 = a21 * a10 - a11 * a20;
|
|
|
|
float det = a00 * b01 + a01 * b11 + a02 * b21;
|
|
|
|
return mat3(b01, (-a22 * a01 + a02 * a21), (a12 * a01 - a02 * a11),
|
|
b11, (a22 * a00 - a02 * a20), (-a12 * a00 + a02 * a10),
|
|
b21, (-a21 * a00 + a01 * a20), (a11 * a00 - a01 * a10)) / det;
|
|
}
|
|
|
|
mat4 inverse4(const in mat4 m) {
|
|
float
|
|
a00 = m[0][0], a01 = m[0][1], a02 = m[0][2], a03 = m[0][3],
|
|
a10 = m[1][0], a11 = m[1][1], a12 = m[1][2], a13 = m[1][3],
|
|
a20 = m[2][0], a21 = m[2][1], a22 = m[2][2], a23 = m[2][3],
|
|
a30 = m[3][0], a31 = m[3][1], a32 = m[3][2], a33 = m[3][3],
|
|
|
|
b00 = a00 * a11 - a01 * a10,
|
|
b01 = a00 * a12 - a02 * a10,
|
|
b02 = a00 * a13 - a03 * a10,
|
|
b03 = a01 * a12 - a02 * a11,
|
|
b04 = a01 * a13 - a03 * a11,
|
|
b05 = a02 * a13 - a03 * a12,
|
|
b06 = a20 * a31 - a21 * a30,
|
|
b07 = a20 * a32 - a22 * a30,
|
|
b08 = a20 * a33 - a23 * a30,
|
|
b09 = a21 * a32 - a22 * a31,
|
|
b10 = a21 * a33 - a23 * a31,
|
|
b11 = a22 * a33 - a23 * a32,
|
|
|
|
det = b00 * b11 - b01 * b10 + b02 * b09 + b03 * b08 - b04 * b07 + b05 * b06;
|
|
|
|
return mat4(
|
|
a11 * b11 - a12 * b10 + a13 * b09,
|
|
a02 * b10 - a01 * b11 - a03 * b09,
|
|
a31 * b05 - a32 * b04 + a33 * b03,
|
|
a22 * b04 - a21 * b05 - a23 * b03,
|
|
a12 * b08 - a10 * b11 - a13 * b07,
|
|
a00 * b11 - a02 * b08 + a03 * b07,
|
|
a32 * b02 - a30 * b05 - a33 * b01,
|
|
a20 * b05 - a22 * b02 + a23 * b01,
|
|
a10 * b10 - a11 * b08 + a13 * b06,
|
|
a01 * b08 - a00 * b10 - a03 * b06,
|
|
a30 * b04 - a31 * b02 + a33 * b00,
|
|
a21 * b02 - a20 * b04 - a23 * b00,
|
|
a11 * b07 - a10 * b09 - a12 * b06,
|
|
a00 * b09 - a01 * b07 + a02 * b06,
|
|
a31 * b01 - a30 * b03 - a32 * b00,
|
|
a20 * b03 - a21 * b01 + a22 * b00) / det;
|
|
}
|
|
|
|
#define isNaN(x) ((x) != (x))
|
|
#define isInf(x) ((x) == (x) + 1.0)
|
|
#else
|
|
#define transpose2(m) transpose(m)
|
|
#define transpose3(m) transpose(m)
|
|
#define transpose4(m) transpose(m)
|
|
|
|
#define inverse2(m) inverse(m)
|
|
#define inverse3(m) inverse(m)
|
|
#define inverse4(m) inverse(m)
|
|
|
|
#define isNaN isnan
|
|
#define isInf isinf
|
|
#endif
|
|
|
|
float hash(in float h) {
|
|
return fract(sin(h) * 43758.5453123);
|
|
}
|
|
|
|
float noise(in vec3 x) {
|
|
vec3 p = floor(x);
|
|
vec3 f = fract(x);
|
|
f = f * f * (3.0 - 2.0 * f);
|
|
|
|
float n = p.x + p.y * 157.0 + 113.0 * p.z;
|
|
return mix(
|
|
mix(mix(hash(n + 0.0), hash(n + 1.0), f.x),
|
|
mix(hash(n + 157.0), hash(n + 158.0), f.x), f.y),
|
|
mix(mix(hash(n + 113.0), hash(n + 114.0), f.x),
|
|
mix(hash(n + 270.0), hash(n + 271.0), f.x), f.y), f.z);
|
|
}
|
|
|
|
float fbm(in vec3 p) {
|
|
float f = 0.0;
|
|
f += 0.5 * noise(p);
|
|
p *= 2.01;
|
|
f += 0.25 * noise(p);
|
|
p *= 2.02;
|
|
f += 0.125 * noise(p);
|
|
|
|
return f;
|
|
}
|
|
`;var Wfe=`
|
|
if (uLod.w == 0.0 && (uLod.x != 0.0 || uLod.y != 0.0)) {
|
|
float d = (dot(uCameraPlane.xyz, vModelPosition) + uCameraPlane.w) / uModelScale;
|
|
float ta = min(
|
|
smoothstep(uLod.x, uLod.x + uLod.z, d),
|
|
1.0 - smoothstep(uLod.y - uLod.z, uLod.y, d)
|
|
);
|
|
|
|
#if defined(dRenderVariant_color) || defined(dRenderVariant_tracing)
|
|
float at = 0.0;
|
|
|
|
// shift by view-offset during multi-sample rendering to allow for blending
|
|
vec2 coord = gl_FragCoord.xy + uViewOffset * 0.25;
|
|
|
|
const mat4 thresholdMatrix = mat4(
|
|
1.0 / 17.0, 9.0 / 17.0, 3.0 / 17.0, 11.0 / 17.0,
|
|
13.0 / 17.0, 5.0 / 17.0, 15.0 / 17.0, 7.0 / 17.0,
|
|
4.0 / 17.0, 12.0 / 17.0, 2.0 / 17.0, 10.0 / 17.0,
|
|
16.0 / 17.0, 8.0 / 17.0, 14.0 / 17.0, 6.0 / 17.0
|
|
);
|
|
int ci = int(intMod(coord.x, 4.0));
|
|
int ri = int(intMod(coord.y, 4.0));
|
|
#if __VERSION__ == 100
|
|
vec4 i = vec4(float(ci * 4 + ri));
|
|
vec4 v = thresholdMatrix[0] * vec4(equal(i, vec4(0.0, 1.0, 2.0, 3.0))) +
|
|
thresholdMatrix[1] * vec4(equal(i, vec4(4.0, 5.0, 6.0, 7.0))) +
|
|
thresholdMatrix[2] * vec4(equal(i, vec4(8.0, 9.0, 10.0, 11.0))) +
|
|
thresholdMatrix[3] * vec4(equal(i, vec4(12.0, 13.0, 14.0, 15.0)));
|
|
at = v.x + v.y + v.z + v.w;
|
|
#else
|
|
at = thresholdMatrix[ci][ri];
|
|
#endif
|
|
|
|
if (ta < 0.99 && (ta < 0.01 || ta < at)) {
|
|
discard;
|
|
}
|
|
#else
|
|
if (ta < uPickingAlphaThreshold) {
|
|
discard;
|
|
}
|
|
#endif
|
|
}
|
|
`;var Xfe=`
|
|
// floatToRgba adapted from https://github.com/equinor/glsl-float-to-rgba
|
|
// MIT License, Copyright (c) 2020 Equinor
|
|
|
|
float shiftRight (float v, float amt) {
|
|
v = floor(v) + 0.5;
|
|
return floor(v / exp2(amt));
|
|
}
|
|
float shiftLeft (float v, float amt) {
|
|
return floor(v * exp2(amt) + 0.5);
|
|
}
|
|
float maskLast (float v, float bits) {
|
|
return mod(v, shiftLeft(1.0, bits));
|
|
}
|
|
float extractBits (float num, float from, float to) {
|
|
from = floor(from + 0.5); to = floor(to + 0.5);
|
|
return maskLast(shiftRight(num, from), to - from);
|
|
}
|
|
|
|
vec4 floatToRgba(float texelFloat, bool littleEndian) {
|
|
if (texelFloat == 0.0) return vec4(0.0, 0.0, 0.0, 0.0);
|
|
float sign = texelFloat > 0.0 ? 0.0 : 1.0;
|
|
texelFloat = abs(texelFloat);
|
|
float exponent = floor(log2(texelFloat));
|
|
float biased_exponent = exponent + 127.0;
|
|
float fraction = ((texelFloat / exp2(exponent)) - 1.0) * 8388608.0;
|
|
float t = biased_exponent / 2.0;
|
|
float last_bit_of_biased_exponent = fract(t) * 2.0;
|
|
float remaining_bits_of_biased_exponent = floor(t);
|
|
float byte4 = extractBits(fraction, 0.0, 8.0) / 255.0;
|
|
float byte3 = extractBits(fraction, 8.0, 16.0) / 255.0;
|
|
float byte2 = (last_bit_of_biased_exponent * 128.0 + extractBits(fraction, 16.0, 23.0)) / 255.0;
|
|
float byte1 = (sign * 128.0 + remaining_bits_of_biased_exponent) / 255.0;
|
|
return (
|
|
littleEndian
|
|
? vec4(byte4, byte3, byte2, byte1)
|
|
: vec4(byte1, byte2, byte3, byte4)
|
|
);
|
|
}
|
|
`;var Zfe=`
|
|
#if dLightCount != 0
|
|
uniform vec3 uLightDirection[dLightCount];
|
|
uniform vec3 uLightColor[dLightCount];
|
|
#endif
|
|
uniform vec3 uAmbientColor;
|
|
|
|
struct PhysicalMaterial {
|
|
vec3 diffuseColor;
|
|
float roughness;
|
|
vec3 specularColor;
|
|
float specularF90;
|
|
};
|
|
|
|
struct IncidentLight {
|
|
vec3 color;
|
|
vec3 direction;
|
|
};
|
|
|
|
struct ReflectedLight {
|
|
vec3 directDiffuse;
|
|
vec3 directSpecular;
|
|
vec3 indirectDiffuse;
|
|
vec3 indirectSpecular;
|
|
};
|
|
|
|
struct GeometricContext {
|
|
vec3 position;
|
|
vec3 normal;
|
|
vec3 viewDir;
|
|
};
|
|
|
|
vec3 BRDF_Lambert(const in vec3 diffuseColor) {
|
|
return RECIPROCAL_PI * diffuseColor;
|
|
}
|
|
|
|
vec3 F_Schlick(const in vec3 f0, const in float f90, const in float dotVH) {
|
|
// Original approximation by Christophe Schlick '94
|
|
// float fresnel = pow( 1.0 - dotVH, 5.0 );
|
|
// Optimized variant (presented by Epic at SIGGRAPH '13)
|
|
// https://cdn2.unrealengine.com/Resources/files/2013SiggraphPresentationsNotes-26915738.pdf
|
|
float fresnel = exp2((-5.55473 * dotVH - 6.98316) * dotVH);
|
|
return f0 * (1.0 - fresnel) + (f90 * fresnel);
|
|
}
|
|
|
|
// Moving Frostbite to Physically Based Rendering 3.0 - page 12, listing 2
|
|
// https://seblagarde.files.wordpress.com/2015/07/course_notes_moving_frostbite_to_pbr_v32.pdf
|
|
float V_GGX_SmithCorrelated(const in float alpha, const in float dotNL, const in float dotNV) {
|
|
float a2 = pow2(alpha);
|
|
float gv = dotNL * sqrt(a2 + (1.0 - a2) * pow2(dotNV));
|
|
float gl = dotNV * sqrt(a2 + (1.0 - a2) * pow2(dotNL));
|
|
return 0.5 / max(gv + gl, EPSILON);
|
|
}
|
|
|
|
// Microfacet Models for Refraction through Rough Surfaces - equation (33)
|
|
// http://graphicrants.blogspot.com/2013/08/specular-brdf-reference.html
|
|
// alpha is "roughness squared" in Disney\u2019s reparameterization
|
|
float D_GGX(const in float alpha, const in float dotNH) {
|
|
float a2 = pow2(alpha);
|
|
float denom = pow2(dotNH) * (a2 - 1.0) + 1.0; // avoid alpha = 0 with dotNH = 1
|
|
return RECIPROCAL_PI * a2 / pow2(denom);
|
|
}
|
|
|
|
// GGX Distribution, Schlick Fresnel, GGX_SmithCorrelated Visibility
|
|
vec3 BRDF_GGX(const in vec3 lightDir, const in vec3 viewDir, const in vec3 normal, const in vec3 f0, const in float f90, const in float roughness) {
|
|
float alpha = pow2(roughness); // UE4's roughness
|
|
vec3 halfDir = normalize( lightDir + viewDir);
|
|
float dotNL = saturate(dot(normal, lightDir));
|
|
float dotNV = saturate(dot(normal, viewDir));
|
|
float dotNH = saturate(dot(normal, halfDir));
|
|
float dotVH = saturate(dot(viewDir, halfDir));
|
|
vec3 F = F_Schlick(f0, f90, dotVH);
|
|
float V = V_GGX_SmithCorrelated(alpha, dotNL, dotNV);
|
|
float D = D_GGX(alpha, dotNH);
|
|
return F * (V * D);
|
|
}
|
|
|
|
// Analytical approximation of the DFG LUT, one half of the
|
|
// split-sum approximation used in indirect specular lighting.
|
|
// via 'environmentBRDF' from "Physically Based Shading on Mobile"
|
|
// https://www.unrealengine.com/blog/physically-based-shading-on-mobile
|
|
vec2 DFGApprox(const in vec3 normal, const in vec3 viewDir, const in float roughness) {
|
|
float dotNV = saturate(dot(normal, viewDir));
|
|
const vec4 c0 = vec4(-1, -0.0275, -0.572, 0.022);
|
|
const vec4 c1 = vec4(1, 0.0425, 1.04, -0.04);
|
|
vec4 r = roughness * c0 + c1;
|
|
float a004 = min(r.x * r.x, exp2(-9.28 * dotNV)) * r.x + r.y;
|
|
vec2 fab = vec2(-1.04, 1.04) * a004 + r.zw;
|
|
return fab;
|
|
}
|
|
|
|
// Fdez-Ag\xFCera's "Multiple-Scattering Microfacet Model for Real-Time Image Based Lighting"
|
|
// Approximates multiscattering in order to preserve energy.
|
|
// http://www.jcgt.org/published/0008/01/03/
|
|
void computeMultiscattering(const in vec3 normal, const in vec3 viewDir, const in vec3 specularColor, const in float specularF90, const in float roughness, inout vec3 singleScatter, inout vec3 multiScatter) {
|
|
vec2 fab = DFGApprox(normal, viewDir, roughness);
|
|
vec3 FssEss = specularColor * fab.x + specularF90 * fab.y;
|
|
float Ess = fab.x + fab.y;
|
|
float Ems = 1.0 - Ess;
|
|
vec3 Favg = specularColor + (1.0 - specularColor) * 0.047619; // 1/21
|
|
vec3 Fms = FssEss * Favg / (1.0 - Ems * Favg);
|
|
singleScatter += FssEss;
|
|
multiScatter += Fms * Ems;
|
|
}
|
|
|
|
void RE_Direct_Physical(const in IncidentLight directLight, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight) {
|
|
float dotNL = saturate(dot(geometry.normal, directLight.direction));
|
|
vec3 irradiance = dotNL * directLight.color;
|
|
reflectedLight.directSpecular += irradiance * BRDF_GGX(directLight.direction, geometry.viewDir, geometry.normal, material.specularColor, material.specularF90, material.roughness);
|
|
reflectedLight.directDiffuse += irradiance * BRDF_Lambert(material.diffuseColor);
|
|
}
|
|
|
|
void RE_IndirectDiffuse_Physical(const in vec3 irradiance, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight) {
|
|
reflectedLight.indirectDiffuse += irradiance * BRDF_Lambert(material.diffuseColor);
|
|
}
|
|
|
|
void RE_IndirectSpecular_Physical( const in vec3 radiance, const in vec3 irradiance, const in vec3 clearcoatRadiance, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight) {
|
|
// Both indirect specular and indirect diffuse light accumulate here
|
|
vec3 singleScattering = vec3(0.0);
|
|
vec3 multiScattering = vec3(0.0);
|
|
vec3 cosineWeightedIrradiance = irradiance * RECIPROCAL_PI;
|
|
computeMultiscattering(geometry.normal, geometry.viewDir, material.specularColor, material.specularF90, material.roughness, singleScattering, multiScattering);
|
|
vec3 diffuse = material.diffuseColor * (1.0 - ( singleScattering + multiScattering));
|
|
reflectedLight.indirectSpecular += radiance * singleScattering;
|
|
reflectedLight.indirectSpecular += multiScattering * cosineWeightedIrradiance;
|
|
reflectedLight.indirectDiffuse += diffuse * cosineWeightedIrradiance;
|
|
}
|
|
`;var qfe=`
|
|
varying vec3 vNormal;
|
|
`;var $fe=`
|
|
vec4 readFromTexture(const in sampler2D tex, const in float i, const in vec2 dim) {
|
|
float x = intMod(i, dim.x);
|
|
float y = floor(intDiv(i, dim.x));
|
|
vec2 uv = (vec2(x, y) + 0.5) / dim;
|
|
return texture2D(tex, uv);
|
|
}
|
|
|
|
vec4 readFromTexture(const in sampler2D tex, const in int i, const in vec2 dim) {
|
|
int x = imod(i, int(dim.x));
|
|
int y = i / int(dim.x);
|
|
vec2 uv = (vec2(x, y) + 0.5) / dim;
|
|
return texture2D(tex, uv);
|
|
}
|
|
`;var eBe=`
|
|
// rgbaToFloat adapted from https://github.com/ihmeuw/glsl-rgba-to-float
|
|
// BSD 3-Clause License
|
|
//
|
|
// Copyright (c) 2019, Institute for Health Metrics and Evaluation All rights reserved.
|
|
// Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
|
|
// - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
|
|
// - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
|
|
// - Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.
|
|
//
|
|
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
|
|
// INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
|
// IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
|
|
// OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
|
|
// OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
|
// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
|
|
// OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
|
|
ivec4 floatsToBytes(vec4 inputFloats, bool littleEndian) {
|
|
ivec4 bytes = ivec4(inputFloats * 255.0);
|
|
return (
|
|
littleEndian
|
|
? bytes.abgr
|
|
: bytes
|
|
);
|
|
}
|
|
|
|
// Break the four bytes down into an array of 32 bits.
|
|
void bytesToBits(const in ivec4 bytes, out bool bits[32]) {
|
|
for (int channelIndex = 0; channelIndex < 4; ++channelIndex) {
|
|
float acc = float(bytes[channelIndex]);
|
|
for (int indexInByte = 7; indexInByte >= 0; --indexInByte) {
|
|
float powerOfTwo = exp2(float(indexInByte));
|
|
bool bit = acc >= powerOfTwo;
|
|
bits[channelIndex * 8 + (7 - indexInByte)] = bit;
|
|
acc = mod(acc, powerOfTwo);
|
|
}
|
|
}
|
|
}
|
|
|
|
// Compute the exponent of the 32-bit float.
|
|
float getExponent(bool bits[32]) {
|
|
const int startIndex = 1;
|
|
const int bitStringLength = 8;
|
|
const int endBeforeIndex = startIndex + bitStringLength;
|
|
float acc = 0.0;
|
|
int pow2 = bitStringLength - 1;
|
|
for (int bitIndex = startIndex; bitIndex < endBeforeIndex; ++bitIndex) {
|
|
acc += float(bits[bitIndex]) * exp2(float(pow2--));
|
|
}
|
|
return acc;
|
|
}
|
|
|
|
// Compute the mantissa of the 32-bit float.
|
|
float getMantissa(bool bits[32], bool subnormal) {
|
|
const int startIndex = 9;
|
|
const int bitStringLength = 23;
|
|
const int endBeforeIndex = startIndex + bitStringLength;
|
|
// Leading/implicit/hidden bit convention:
|
|
// If the number is not subnormal (with exponent 0), we add a leading 1 digit.
|
|
float acc = float(!subnormal) * exp2(float(bitStringLength));
|
|
int pow2 = bitStringLength - 1;
|
|
for (int bitIndex = startIndex; bitIndex < endBeforeIndex; ++bitIndex) {
|
|
acc += float(bits[bitIndex]) * exp2(float(pow2--));
|
|
}
|
|
return acc;
|
|
}
|
|
|
|
// Parse the float from its 32 bits.
|
|
float bitsToFloat(bool bits[32]) {
|
|
float signBit = float(bits[0]) * -2.0 + 1.0;
|
|
float exponent = getExponent(bits);
|
|
bool subnormal = abs(exponent - 0.0) < 0.01;
|
|
float mantissa = getMantissa(bits, subnormal);
|
|
float exponentBias = 127.0;
|
|
return signBit * mantissa * exp2(exponent - exponentBias - 23.0);
|
|
}
|
|
|
|
float rgbaToFloat(vec4 texelRGBA, bool littleEndian) {
|
|
ivec4 rgbaBytes = floatsToBytes(texelRGBA, littleEndian);
|
|
bool bits[32];
|
|
bytesToBits(rgbaBytes, bits);
|
|
return bitsToFloat(bits);
|
|
}
|
|
`;var tBe=`
|
|
#if defined(dSizeType_uniform)
|
|
uniform float uSize;
|
|
#elif defined(dSizeType_attribute)
|
|
attribute float aSize;
|
|
#elif defined(dSizeType_instance) || defined(dSizeType_group) || defined(dSizeType_groupInstance) || defined(dSizeType_vertex) || defined(dSizeType_vertexInstance)
|
|
uniform vec2 uSizeTexDim;
|
|
uniform sampler2D tSize;
|
|
#endif
|
|
|
|
uniform float uSizeFactor;
|
|
`;var rBe=`
|
|
vec4 texture3dFrom1dTrilinear(const in sampler2D tex, const in vec3 pos, const in vec3 gridDim, const in vec2 texDim, const in float offset) {
|
|
float gdYZ = gridDim.z * gridDim.y;
|
|
float gdZ = gridDim.z;
|
|
vec3 p0 = floor(pos * gridDim);
|
|
vec3 p1 = ceil(pos * gridDim);
|
|
vec3 pd = (pos * gridDim - p0) / (p1 - p0);
|
|
vec4 s000 = readFromTexture(tex, offset + p0.z + p0.y * gdZ + p0.x * gdYZ, texDim);
|
|
vec4 s100 = readFromTexture(tex, offset + p0.z + p0.y * gdZ + p1.x * gdYZ, texDim);
|
|
vec4 s001 = readFromTexture(tex, offset + p1.z + p0.y * gdZ + p0.x * gdYZ, texDim);
|
|
vec4 s101 = readFromTexture(tex, offset + p1.z + p0.y * gdZ + p1.x * gdYZ, texDim);
|
|
vec4 s010 = readFromTexture(tex, offset + p0.z + p1.y * gdZ + p0.x * gdYZ, texDim);
|
|
vec4 s110 = readFromTexture(tex, offset + p0.z + p1.y * gdZ + p1.x * gdYZ, texDim);
|
|
vec4 s011 = readFromTexture(tex, offset + p1.z + p1.y * gdZ + p0.x * gdYZ, texDim);
|
|
vec4 s111 = readFromTexture(tex, offset + p1.z + p1.y * gdZ + p1.x * gdYZ, texDim);
|
|
vec4 s00 = mix(s000, s100, pd.x);
|
|
vec4 s01 = mix(s001, s101, pd.x);
|
|
vec4 s10 = mix(s010, s110, pd.x);
|
|
vec4 s11 = mix(s011, s111, pd.x);
|
|
vec4 s0 = mix(s00, s10, pd.y);
|
|
vec4 s1 = mix(s01, s11, pd.y);
|
|
return mix(s0, s1, pd.z);
|
|
}
|
|
`;var nBe=`
|
|
vec4 texture3dFrom2dLinear(sampler2D tex, vec3 pos, vec3 gridDim, vec2 texDim) {
|
|
float zSlice0 = floor(pos.z * gridDim.z);
|
|
float column0 = intMod(zSlice0 * gridDim.x, texDim.x) / gridDim.x;
|
|
float row0 = floor(intDiv(zSlice0 * gridDim.x, texDim.x));
|
|
vec2 coord0 = (vec2(column0 * gridDim.x, row0 * gridDim.y) + (pos.xy * gridDim.xy)) / texDim;
|
|
vec4 color0 = texture2D(tex, coord0);
|
|
|
|
float zSlice1 = zSlice0 + 1.0;
|
|
float column1 = intMod(zSlice1 * gridDim.x, texDim.x) / gridDim.x;
|
|
float row1 = floor(intDiv(zSlice1 * gridDim.x, texDim.x));
|
|
vec2 coord1 = (vec2(column1 * gridDim.x, row1 * gridDim.y) + (pos.xy * gridDim.xy)) / texDim;
|
|
vec4 color1 = texture2D(tex, coord1);
|
|
|
|
float delta0 = abs((pos.z * gridDim.z) - zSlice0);
|
|
return mix(color0, color1, delta0);
|
|
}
|
|
`;var oBe=`
|
|
vec4 texture3dFrom2dNearest(sampler2D tex, vec3 pos, vec3 gridDim, vec2 texDim) {
|
|
float zSlice = floor(pos.z * gridDim.z + 0.5); // round to nearest z-slice
|
|
float column = intMod(zSlice * gridDim.x, texDim.x) / gridDim.x;
|
|
float row = floor(intDiv(zSlice * gridDim.x, texDim.x));
|
|
vec2 coord = (vec2(column * gridDim.x, row * gridDim.y) + (pos.xy * gridDim.xy)) / texDim;
|
|
return texture2D(tex, coord);
|
|
}
|
|
`;var iBe=`
|
|
#if defined(dRenderVariant_colorWboit)
|
|
if (uRenderMask == MaskOpaque) {
|
|
if (preFogAlpha < 1.0) {
|
|
discard;
|
|
}
|
|
} else if (uRenderMask == MaskTransparent) {
|
|
if (preFogAlpha != 1.0 && fragmentDepth < getDepth(gl_FragCoord.xy / uDrawingBufferSize)) {
|
|
#ifdef dTransparentBackfaces_off
|
|
if (interior) discard;
|
|
#endif
|
|
float alpha = gl_FragColor.a;
|
|
float wboitWeight = alpha * clamp(pow(1.0 - fragmentDepth, 2.0), 0.01, 1.0);
|
|
gl_FragColor = vec4(gl_FragColor.rgb * alpha * wboitWeight, alpha);
|
|
// extra alpha is to handle pre-multiplied alpha
|
|
#ifndef dGeometryType_directVolume
|
|
gl_FragData[1] = vec4((uTransparentBackground ? alpha : 1.0) * alpha * wboitWeight);
|
|
#else
|
|
gl_FragData[1] = vec4(alpha * alpha * wboitWeight);
|
|
#endif
|
|
} else {
|
|
discard;
|
|
}
|
|
}
|
|
#endif
|
|
`;var aBe=`
|
|
#if defined(dRenderVariant_colorDpoit)
|
|
if (uRenderMask == MaskOpaque) {
|
|
if (preFogAlpha < 1.0) {
|
|
discard;
|
|
}
|
|
} else if (uRenderMask == MaskTransparent) {
|
|
vec2 coords = gl_FragCoord.xy / uDrawingBufferSize;
|
|
if (preFogAlpha != 1.0 && fragmentDepth < getDepth(coords)) {
|
|
#ifdef dTransparentBackfaces_off
|
|
if (interior) discard;
|
|
#endif
|
|
|
|
// adapted from https://github.com/tsherif/webgl2examples
|
|
// The MIT License, Copyright 2017 Tarek Sherif, Shuai Shao
|
|
|
|
vec2 lastDepth = texture2D(tDpoitDepth, coords).rg;
|
|
vec4 lastFrontColor = texture2D(tDpoitFrontColor, coords);
|
|
|
|
vec4 fragColor = gl_FragColor;
|
|
|
|
// depth value always increases
|
|
// so we can use MAX blend equation
|
|
gl_FragData[2].rg = vec2(-MAX_DPOIT_DEPTH);
|
|
|
|
// front color always increases
|
|
// so we can use MAX blend equation
|
|
gl_FragColor = lastFrontColor;
|
|
|
|
// back color is separately blend afterwards each pass
|
|
gl_FragData[1] = vec4(0.0);
|
|
|
|
float nearestDepth = -lastDepth.x;
|
|
float furthestDepth = lastDepth.y;
|
|
float alphaMultiplier = 1.0 - lastFrontColor.a;
|
|
|
|
if (fragmentDepth < nearestDepth || fragmentDepth > furthestDepth) {
|
|
// Skip this depth since it's been peeled.
|
|
return;
|
|
}
|
|
|
|
if (fragmentDepth > nearestDepth && fragmentDepth < furthestDepth) {
|
|
// This needs to be peeled.
|
|
// The ones remaining after MAX blended for
|
|
// all need-to-peel will be peeled next pass.
|
|
gl_FragData[2].rg = vec2(-fragmentDepth, fragmentDepth);
|
|
return;
|
|
}
|
|
|
|
// write to back and front color buffer
|
|
if (fragmentDepth == nearestDepth) {
|
|
gl_FragColor.rgb += fragColor.rgb * fragColor.a * alphaMultiplier;
|
|
gl_FragColor.a = 1.0 - alphaMultiplier * (1.0 - fragColor.a);
|
|
} else {
|
|
gl_FragData[1] += fragColor;
|
|
}
|
|
|
|
} else {
|
|
discard;
|
|
}
|
|
}
|
|
#endif
|
|
`;var ABe=`
|
|
precision highp float;
|
|
precision highp int;
|
|
|
|
#include common
|
|
#include read_from_texture
|
|
#include common_vert_params
|
|
#include color_vert_params
|
|
#include size_vert_params
|
|
#include common_clip
|
|
#include common_animation
|
|
|
|
uniform float uPixelRatio;
|
|
uniform vec4 uViewport;
|
|
|
|
attribute vec3 aPosition;
|
|
attribute mat4 aTransform;
|
|
attribute float aInstance;
|
|
attribute float aGroup;
|
|
|
|
void main(){
|
|
int vertexId = VertexID;
|
|
|
|
#include assign_group
|
|
#include assign_color_varying
|
|
#include assign_marker_varying
|
|
#include assign_clipping_varying
|
|
#include assign_position
|
|
#include assign_size
|
|
|
|
#ifdef dPointSizeAttenuation
|
|
gl_PointSize = size * uPixelRatio * ((uViewport.w / 2.0) / -mvPosition.z) * 5.0;
|
|
#else
|
|
gl_PointSize = size * uPixelRatio;
|
|
#endif
|
|
gl_PointSize = max(1.0, gl_PointSize);
|
|
|
|
gl_Position = uProjection * mvPosition;
|
|
|
|
#include clip_instance
|
|
}
|
|
`;var sBe=`
|
|
precision highp float;
|
|
precision highp int;
|
|
|
|
#include common
|
|
#include common_frag_params
|
|
#include color_frag_params
|
|
#include common_clip
|
|
|
|
const vec2 center = vec2(0.5);
|
|
const float radius = 0.5;
|
|
|
|
void main(){
|
|
#include fade_lod
|
|
#include clip_pixel
|
|
|
|
float fragmentDepth = gl_FragCoord.z;
|
|
#include assign_material_color
|
|
|
|
#if defined(dPointStyle_circle)
|
|
float dist = distance(gl_PointCoord, center);
|
|
if (dist > radius) discard;
|
|
#elif defined(dPointStyle_fuzzy)
|
|
float dist = distance(gl_PointCoord, center);
|
|
float fuzzyAlpha = 1.0 - smoothstep(0.0, radius, dist);
|
|
if (fuzzyAlpha < 0.0001) discard;
|
|
#endif
|
|
|
|
#if defined(dPointStyle_fuzzy) && (defined(dRenderVariant_color) || defined(dRenderVariant_tracing))
|
|
material.a *= fuzzyAlpha;
|
|
#endif
|
|
|
|
#include check_transparency
|
|
|
|
#if defined(dRenderVariant_pick)
|
|
#include check_picking_alpha
|
|
#ifdef requiredDrawBuffers
|
|
gl_FragColor = vObject;
|
|
gl_FragData[1] = vInstance;
|
|
gl_FragData[2] = vGroup;
|
|
gl_FragData[3] = packDepthToRGBA(fragmentDepth);
|
|
#else
|
|
gl_FragColor = vColor;
|
|
#endif
|
|
#elif defined(dRenderVariant_depth)
|
|
gl_FragColor = material;
|
|
#elif defined(dRenderVariant_marking)
|
|
gl_FragColor = material;
|
|
#elif defined(dRenderVariant_emissive)
|
|
gl_FragColor = material;
|
|
#elif defined(dRenderVariant_color) || defined(dRenderVariant_tracing)
|
|
gl_FragColor = material;
|
|
#include apply_marker_color
|
|
|
|
#if defined(dRenderVariant_color)
|
|
#include apply_fog
|
|
#include wboit_write
|
|
#include dpoit_write
|
|
#elif defined(dRenderVariant_tracing)
|
|
gl_FragData[1] = vec4(normalize(vViewPosition), emissive);
|
|
gl_FragData[2] = vec4(material.rgb, uDensity);
|
|
#endif
|
|
#endif
|
|
}
|
|
`;var cBe=`
|
|
precision highp float;
|
|
precision highp int;
|
|
|
|
#include common
|
|
#include read_from_texture
|
|
#include common_vert_params
|
|
#include color_vert_params
|
|
#include size_vert_params
|
|
#include common_clip
|
|
#include common_animation
|
|
|
|
uniform mat4 uModelView;
|
|
uniform mat4 uInvProjection;
|
|
uniform float uIsOrtho;
|
|
uniform bool uIsAsymmetricProjection;
|
|
|
|
uniform vec2 uTexDim;
|
|
uniform sampler2D tPositionGroup;
|
|
|
|
attribute mat4 aTransform;
|
|
attribute float aInstance;
|
|
|
|
varying float vRadius;
|
|
varying vec3 vPoint;
|
|
varying vec3 vPointViewPosition;
|
|
|
|
/**
|
|
* Bounding rectangle of a clipped, perspective-projected 3D Sphere.
|
|
* Michael Mara, Morgan McGuire. 2013
|
|
*
|
|
* Specialization by Arseny Kapoulkine, MIT License Copyright (c) 2018
|
|
* https://github.com/zeux/niagara
|
|
*
|
|
* Only works for for symmetric projections.
|
|
*/
|
|
void sphereProjection(const in vec3 p, const in float r, const in vec2 mapping) {
|
|
vec3 pr = p * r;
|
|
float pzr2 = p.z * p.z - r * r;
|
|
|
|
float vx = sqrt(p.x * p.x + pzr2);
|
|
float minx = ((vx * p.x - pr.z) / (vx * p.z + pr.x)) * uProjection[0][0];
|
|
float maxx = ((vx * p.x + pr.z) / (vx * p.z - pr.x)) * uProjection[0][0];
|
|
|
|
float vy = sqrt(p.y * p.y + pzr2);
|
|
float miny = ((vy * p.y - pr.z) / (vy * p.z + pr.y)) * uProjection[1][1];
|
|
float maxy = ((vy * p.y + pr.z) / (vy * p.z - pr.y)) * uProjection[1][1];
|
|
|
|
gl_Position.xy = vec2(maxx + minx, maxy + miny) * -0.5;
|
|
gl_Position.xy -= mapping * vec2(maxx - minx, maxy - miny) * 0.5;
|
|
gl_Position.xy *= gl_Position.w;
|
|
}
|
|
|
|
const mat4 D = mat4(
|
|
1.0, 0.0, 0.0, 0.0,
|
|
0.0, 1.0, 0.0, 0.0,
|
|
0.0, 0.0, 1.0, 0.0,
|
|
0.0, 0.0, 0.0, -1.0
|
|
);
|
|
|
|
/**
|
|
* Compute point size and center using the technique described in:
|
|
* "GPU-Based Ray-Casting of Quadratic Surfaces" http://dl.acm.org/citation.cfm?id=2386396
|
|
* by Christian Sigg, Tim Weyrich, Mario Botsch, Markus Gross.
|
|
*/
|
|
void quadraticProjection(const in vec3 position, const in float radius, const in vec2 mapping, const in mat4 transform) {
|
|
vec2 xbc, ybc;
|
|
|
|
mat4 T = mat4(
|
|
radius, 0.0, 0.0, 0.0,
|
|
0.0, radius, 0.0, 0.0,
|
|
0.0, 0.0, radius, 0.0,
|
|
position.x, position.y, position.z, 1.0
|
|
);
|
|
|
|
mat4 R = transpose4(uProjection * uModelView * transform * T);
|
|
float A = dot(R[3], D * R[3]);
|
|
float B = -2.0 * dot(R[0], D * R[3]);
|
|
float C = dot(R[0], D * R[0]);
|
|
xbc[0] = (-B - sqrt(B * B - 4.0 * A * C)) / (2.0 * A);
|
|
xbc[1] = (-B + sqrt(B * B - 4.0 * A * C)) / (2.0 * A);
|
|
float sx = abs(xbc[0] - xbc[1]) * 0.5;
|
|
|
|
A = dot(R[3], D * R[3]);
|
|
B = -2.0 * dot(R[1], D * R[3]);
|
|
C = dot(R[1], D * R[1]);
|
|
ybc[0] = (-B - sqrt(B * B - 4.0 * A * C)) / (2.0 * A);
|
|
ybc[1] = (-B + sqrt(B * B - 4.0 * A * C)) / (2.0 * A);
|
|
float sy = abs(ybc[0] - ybc[1]) * 0.5;
|
|
|
|
gl_Position.xy = vec2(0.5 * (xbc.x + xbc.y), 0.5 * (ybc.x + ybc.y));
|
|
gl_Position.xy -= mapping * vec2(sx, sy);
|
|
gl_Position.xy *= gl_Position.w;
|
|
}
|
|
|
|
void main(void){
|
|
vec2 mapping = vec2(1.0, 1.0); // vertices 2 and 5
|
|
#if __VERSION__ == 100
|
|
int m = imod(VertexID, 6);
|
|
#else
|
|
int m = VertexID % 6;
|
|
#endif
|
|
if (m == 0) {
|
|
mapping = vec2(-1.0, 1.0);
|
|
} else if (m == 1 || m == 3) {
|
|
mapping = vec2(-1.0, -1.0);
|
|
} else if (m == 4) {
|
|
mapping = vec2(1.0, -1.0);
|
|
}
|
|
|
|
int vertexId = VertexID / 6;
|
|
|
|
vec4 positionGroup = readFromTexture(tPositionGroup, vertexId, uTexDim);
|
|
vec3 position = positionGroup.rgb;
|
|
float group = positionGroup.a;
|
|
|
|
position = applyWiggle(position, group, aInstance);
|
|
mat4 transform = applyTumble(aTransform, aInstance, float(uObjectId));
|
|
|
|
#include assign_color_varying
|
|
#include assign_marker_varying
|
|
#include assign_clipping_varying
|
|
#include assign_size
|
|
|
|
vRadius = size * uModelScale;
|
|
|
|
vec4 position4 = vec4(position, 1.0);
|
|
vModelPosition = (uModel * transform * position4).xyz; // for clipping in frag shader
|
|
|
|
float d;
|
|
if (uLod.w != 0.0 && (uLod.x != 0.0 || uLod.y != 0.0)) {
|
|
if (uModelScale != 1.0) {
|
|
vRadius *= uLod.w;
|
|
} else {
|
|
d = (dot(uCameraPlane.xyz, vModelPosition) + uCameraPlane.w) / uModelScale;
|
|
float f = min(
|
|
smoothstep(uLod.x, uLod.x + uLod.z, d),
|
|
1.0 - smoothstep(uLod.y - uLod.z, uLod.y, d)
|
|
) * uLod.w;
|
|
vRadius *= f;
|
|
}
|
|
}
|
|
|
|
vec4 mvPosition = uModelView * transform * position4;
|
|
|
|
#ifdef dApproximate
|
|
vec4 mvCorner = vec4(mvPosition.xyz, 1.0);
|
|
mvCorner.xy += mapping * vRadius;
|
|
gl_Position = uProjection * mvCorner;
|
|
#else
|
|
if (uIsOrtho == 1.0) {
|
|
vec4 mvCorner = vec4(mvPosition.xyz, 1.0);
|
|
mvCorner.xy += mapping * vRadius;
|
|
gl_Position = uProjection * mvCorner;
|
|
} else if (uIsAsymmetricProjection) {
|
|
gl_Position = uProjection * vec4(mvPosition.xyz, 1.0);
|
|
quadraticProjection(position, vRadius / uModelScale, mapping, transform);
|
|
} else {
|
|
gl_Position = uProjection * vec4(mvPosition.xyz, 1.0);
|
|
sphereProjection(mvPosition.xyz, vRadius, mapping);
|
|
}
|
|
#endif
|
|
|
|
vec4 vPoint4 = uInvProjection * gl_Position;
|
|
vPoint = vPoint4.xyz / vPoint4.w;
|
|
vPointViewPosition = -mvPosition.xyz / mvPosition.w;
|
|
|
|
if (gl_Position.z < -gl_Position.w) {
|
|
mvPosition.z -= 2.0 * vRadius; // avoid clipping
|
|
gl_Position.z = (uProjection * vec4(mvPosition.xyz, 1.0)).z;
|
|
}
|
|
|
|
if (uModelScale == 1.0) {
|
|
if (uLod.w != 0.0 && (uLod.x != 0.0 || uLod.y != 0.0)) {
|
|
if (d < uLod.x || d > uLod.y) {
|
|
// move out of [ -w, +w ] to 'discard' in vert shader
|
|
gl_Position.z = 2.0 * gl_Position.w;
|
|
}
|
|
}
|
|
}
|
|
|
|
#if defined(dClipPrimitive) && !defined(dClipVariant_instance) && dClipObjectCount != 0
|
|
if (clipTest(vModelPosition / uModelScale)) {
|
|
// move out of [ -w, +w ] to 'discard' in vert shader
|
|
gl_Position.z = 2.0 * gl_Position.w;
|
|
}
|
|
#else
|
|
#include clip_instance
|
|
#endif
|
|
}
|
|
`;var lBe=`
|
|
precision highp float;
|
|
precision highp int;
|
|
|
|
#define bumpEnabled
|
|
|
|
#include common
|
|
#include common_frag_params
|
|
#include color_frag_params
|
|
#include light_frag_params
|
|
#include common_clip
|
|
|
|
uniform mat4 uInvView;
|
|
uniform float uAlphaThickness;
|
|
|
|
uniform vec4 uInteriorColor;
|
|
uniform vec4 uInteriorSubstance;
|
|
|
|
varying float vRadius;
|
|
varying vec3 vPoint;
|
|
varying vec3 vPointViewPosition;
|
|
|
|
#ifdef dSolidInterior
|
|
const bool solidInterior = true;
|
|
#else
|
|
const bool solidInterior = false;
|
|
#endif
|
|
|
|
bool SphereImpostor(out vec3 modelPos, out vec3 cameraPos, out vec3 cameraNormal, out bool interior, out float fragmentDepth){
|
|
vec3 cameraSpherePos = -vPointViewPosition;
|
|
|
|
vec3 rayOrigin = mix(vec3(0.0, 0.0, 0.0), vPoint, uIsOrtho);
|
|
vec3 rayDirection = mix(normalize(vPoint), vec3(0.0, 0.0, 1.0), uIsOrtho);
|
|
vec3 cameraSphereDir = mix(cameraSpherePos, rayOrigin - cameraSpherePos, uIsOrtho);
|
|
|
|
float B = dot(rayDirection, cameraSphereDir);
|
|
float det = B * B + vRadius * vRadius - dot(cameraSphereDir, cameraSphereDir);
|
|
|
|
if (det < 0.0) return false;
|
|
|
|
float sqrtDet = sqrt(det);
|
|
float posT = mix(B + sqrtDet, B - sqrtDet, uIsOrtho);
|
|
float negT = mix(B - sqrtDet, B + sqrtDet, uIsOrtho);
|
|
|
|
cameraPos = rayDirection * negT + rayOrigin;
|
|
modelPos = (uInvView * vec4(cameraPos, 1.0)).xyz;
|
|
fragmentDepth = calcDepth(cameraPos);
|
|
|
|
bool objectClipped = false;
|
|
|
|
#if !defined(dClipPrimitive) && defined(dClipVariant_pixel) && dClipObjectCount != 0
|
|
if (clipTest(modelPos)) {
|
|
objectClipped = true;
|
|
fragmentDepth = -1.0;
|
|
}
|
|
#endif
|
|
|
|
if (fragmentDepth > 0.0) {
|
|
cameraNormal = normalize(cameraPos - cameraSpherePos);
|
|
interior = false;
|
|
return true;
|
|
} else if (uDoubleSided || solidInterior) {
|
|
cameraPos = rayDirection * posT + rayOrigin;
|
|
modelPos = (uInvView * vec4(cameraPos, 1.0)).xyz;
|
|
fragmentDepth = calcDepth(cameraPos);
|
|
cameraNormal = -normalize(cameraPos - cameraSpherePos);
|
|
interior = true;
|
|
if (fragmentDepth > 0.0) {
|
|
#ifdef dSolidInterior
|
|
if (!objectClipped) {
|
|
fragmentDepth = 0.0 + (0.0000001 / vRadius);
|
|
cameraNormal = -mix(normalize(vPoint), vec3(0.0, 0.0, -1.0), uIsOrtho);
|
|
|
|
// intersection of ray with near plane
|
|
float nearT = - (uNear + dot(rayOrigin, vec3(0.0, 0.0, 1.0))) / dot(rayDirection, vec3(0.0, 0.0, 1.0));
|
|
cameraPos = rayDirection * nearT + rayOrigin;
|
|
modelPos = (uInvView * vec4(cameraPos, 1.0)).xyz;
|
|
}
|
|
#endif
|
|
return true;
|
|
}
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
void main(void){
|
|
vec3 cameraNormal;
|
|
float fragmentDepth;
|
|
|
|
#ifdef dApproximate
|
|
vec3 pointDir = -vPointViewPosition - vPoint;
|
|
if (dot(pointDir, pointDir) > vRadius * vRadius) discard;
|
|
vec3 vViewPosition = -vPointViewPosition;
|
|
fragmentDepth = gl_FragCoord.z;
|
|
#if !defined(dIgnoreLight) || defined(dXrayShaded) || defined(dRenderVariant_tracing)
|
|
pointDir.z -= cos(length(pointDir)) * vRadius * 0.5;
|
|
cameraNormal = -normalize(pointDir);
|
|
#endif
|
|
interior = false;
|
|
#else
|
|
vec3 modelPos;
|
|
vec3 cameraPos;
|
|
bool hit = SphereImpostor(modelPos, cameraPos, cameraNormal, interior, fragmentDepth);
|
|
if (!hit) discard;
|
|
|
|
if (fragmentDepth < 0.0) discard;
|
|
if (fragmentDepth > 1.0) discard;
|
|
|
|
gl_FragDepthEXT = fragmentDepth;
|
|
|
|
vec3 vModelPosition = modelPos;
|
|
vec3 vViewPosition = cameraPos;
|
|
#endif
|
|
|
|
#include fade_lod
|
|
#if !defined(dClipPrimitive) && defined(dClipVariant_pixel) && dClipObjectCount != 0
|
|
#include clip_pixel
|
|
#endif
|
|
|
|
#ifdef dNeedsNormal
|
|
vec3 normal = -cameraNormal;
|
|
#endif
|
|
|
|
#include assign_material_color
|
|
|
|
#if defined(dRenderVariant_color) || defined(dRenderVariant_tracing)
|
|
if (uRenderMask == MaskTransparent && uAlphaThickness > 0.0) {
|
|
material.a *= min(1.0, vRadius / (uAlphaThickness * uModelScale));
|
|
}
|
|
#endif
|
|
|
|
#include check_transparency
|
|
|
|
#if defined(dRenderVariant_pick)
|
|
#include check_picking_alpha
|
|
#ifdef requiredDrawBuffers
|
|
gl_FragColor = vObject;
|
|
gl_FragData[1] = vInstance;
|
|
gl_FragData[2] = vGroup;
|
|
gl_FragData[3] = packDepthToRGBA(fragmentDepth);
|
|
#else
|
|
gl_FragColor = vColor;
|
|
#endif
|
|
#elif defined(dRenderVariant_depth)
|
|
gl_FragColor = material;
|
|
#elif defined(dRenderVariant_marking)
|
|
gl_FragColor = material;
|
|
#elif defined(dRenderVariant_emissive)
|
|
gl_FragColor = material;
|
|
#elif defined(dRenderVariant_color) || defined(dRenderVariant_tracing)
|
|
#include apply_interior_color
|
|
#include apply_light_color
|
|
#include apply_marker_color
|
|
|
|
#if defined(dRenderVariant_color)
|
|
#include apply_fog
|
|
#include wboit_write
|
|
#include dpoit_write
|
|
#elif defined(dRenderVariant_tracing)
|
|
gl_FragData[1] = vec4(normal, emissive);
|
|
gl_FragData[2] = vec4(material.rgb, uDensity);
|
|
#endif
|
|
#endif
|
|
}
|
|
`;var uBe=`
|
|
precision highp float;
|
|
precision highp int;
|
|
|
|
#include common
|
|
#include read_from_texture
|
|
#include common_vert_params
|
|
#include color_vert_params
|
|
#include size_vert_params
|
|
#include common_clip
|
|
#include common_animation
|
|
|
|
uniform mat4 uModelView;
|
|
|
|
attribute mat4 aTransform;
|
|
attribute float aInstance;
|
|
attribute float aGroup;
|
|
|
|
attribute vec3 aMapping;
|
|
attribute vec3 aStart;
|
|
attribute vec3 aEnd;
|
|
attribute float aScale;
|
|
attribute float aCap;
|
|
attribute float aColorMode;
|
|
|
|
varying mat4 vTransform;
|
|
varying vec3 vStart;
|
|
varying vec3 vEnd;
|
|
varying float vSize;
|
|
varying float vCap;
|
|
|
|
uniform float uIsOrtho;
|
|
uniform vec3 uCameraDir;
|
|
|
|
void main() {
|
|
int vertexId = VertexID;
|
|
|
|
#include assign_group
|
|
#include assign_color_varying
|
|
#include assign_marker_varying
|
|
#include assign_clipping_varying
|
|
#include assign_size
|
|
|
|
mat4 transform = applyTumble(aTransform, aInstance, float(uObjectId));
|
|
vec3 wigStart = applyWiggle(aStart, aGroup, aInstance);
|
|
vec3 wigEnd = applyWiggle(aEnd, aGroup, aInstance);
|
|
mat4 modelTransform = uModel * transform;
|
|
|
|
vTransform = modelTransform;
|
|
vStart = (modelTransform * vec4(wigStart, 1.0)).xyz;
|
|
vEnd = (modelTransform * vec4(wigEnd, 1.0)).xyz;
|
|
vSize = size * aScale * uModelScale;
|
|
vCap = aCap;
|
|
|
|
vModelPosition = (vStart + vEnd) * 0.5;
|
|
vec3 camDir = -mix(normalize(vModelPosition - uCameraPosition), uCameraDir, uIsOrtho);
|
|
vec3 dir = vEnd - vStart;
|
|
float f = aMapping.x > 0.0 ? 1.0 : 0.0;
|
|
// ensure cylinder 'dir' is pointing towards the camera
|
|
if(dot(camDir, dir) < 0.0) {
|
|
dir = -dir;
|
|
f = 1.0 - f;
|
|
}
|
|
|
|
vec3 left = cross(camDir, dir);
|
|
vec3 up = cross(left, dir);
|
|
left = vSize * normalize(left);
|
|
up = vSize * normalize(up);
|
|
|
|
// move vertex in object-space from center to corner
|
|
vModelPosition += aMapping.x * dir + aMapping.y * left + aMapping.z * up;
|
|
|
|
vec4 mvPosition = uView * vec4(vModelPosition, 1.0);
|
|
vViewPosition = mvPosition.xyz;
|
|
gl_Position = uProjection * mvPosition;
|
|
|
|
if (gl_Position.z < -gl_Position.w) {
|
|
mvPosition.z -= 2.0 * (length(vEnd - vStart) + vSize); // avoid clipping
|
|
gl_Position.z = (uProjection * mvPosition).z;
|
|
}
|
|
|
|
#if defined(dDualColor) && defined(dRenderVariant_color) && (defined(dColorType_group) || defined(dColorType_groupInstance))
|
|
// dual-color mixing
|
|
// - for aColorMode between 0 and 1 use aColorMode to interpolate
|
|
// - for aColorMode == 2 do nothing, i.e., use vColor
|
|
// - for aColorMode == 3 use position on cylinder axis to interpolate
|
|
if (aColorMode <= 1.0){
|
|
vColor.rgb = mix(vColor.rgb, color2.rgb, aColorMode);
|
|
} else if (aColorMode == 3.0) {
|
|
vColor.rgb = mix(vColor.rgb, color2.rgb, mix(-0.25, 1.25, f / 1.5));
|
|
}
|
|
#endif
|
|
|
|
#include clip_instance
|
|
}
|
|
`;var gBe=`
|
|
precision highp float;
|
|
precision highp int;
|
|
|
|
#define bumpEnabled
|
|
|
|
uniform mat4 uView;
|
|
|
|
varying mat4 vTransform;
|
|
varying vec3 vStart;
|
|
varying vec3 vEnd;
|
|
varying float vSize;
|
|
varying float vCap;
|
|
|
|
uniform vec3 uCameraDir;
|
|
uniform vec3 uCameraPosition;
|
|
uniform mat4 uInvView;
|
|
|
|
uniform vec4 uInteriorColor;
|
|
uniform vec4 uInteriorSubstance;
|
|
|
|
#include common
|
|
#include common_frag_params
|
|
#include color_frag_params
|
|
#include light_frag_params
|
|
#include common_clip
|
|
|
|
#ifdef dSolidInterior
|
|
const bool solidInterior = true;
|
|
#else
|
|
const bool solidInterior = false;
|
|
#endif
|
|
|
|
// adapted from https://www.shadertoy.com/view/4lcSRn
|
|
// The MIT License, Copyright 2016 Inigo Quilez
|
|
bool CylinderImpostor(
|
|
in vec3 rayOrigin, in vec3 rayDir,
|
|
in vec3 start, in vec3 end, in float radius,
|
|
out vec3 cameraNormal, out bool interior,
|
|
out vec3 modelPosition, out vec3 viewPosition, out float fragmentDepth
|
|
){
|
|
vec3 ba = end - start;
|
|
vec3 oc = rayOrigin - start;
|
|
|
|
float baba = dot(ba, ba);
|
|
float bard = dot(ba, rayDir);
|
|
float baoc = dot(ba, oc);
|
|
|
|
float k2 = baba - bard * bard;
|
|
float k1 = baba * dot(oc, rayDir) - baoc * bard;
|
|
float k0 = baba * dot(oc, oc) - baoc * baoc - radius * radius * baba;
|
|
|
|
float h = k1 * k1 - k2 * k0;
|
|
if (h < 0.0) return false;
|
|
|
|
bool topCap = (vCap > 0.9 && vCap < 1.1) || vCap >= 2.9;
|
|
bool bottomCap = (vCap > 1.9 && vCap < 2.1) || vCap >= 2.9;
|
|
|
|
#ifdef dSolidInterior
|
|
bool topInterior = !topCap;
|
|
bool bottomInterior = !bottomCap;
|
|
topCap = true;
|
|
bottomCap = true;
|
|
#else
|
|
bool topInterior = false;
|
|
bool bottomInterior = false;
|
|
#endif
|
|
|
|
bool clipped = false;
|
|
bool objectClipped = false;
|
|
|
|
// body outside
|
|
h = sqrt(h);
|
|
float t = (-k1 - h) / k2;
|
|
float y = baoc + t * bard;
|
|
if (y > 0.0 && y < baba) {
|
|
interior = false;
|
|
cameraNormal = (oc + t * rayDir - ba * y / baba) / radius;
|
|
modelPosition = rayOrigin + t * rayDir;
|
|
viewPosition = (uView * vec4(modelPosition, 1.0)).xyz;
|
|
fragmentDepth = calcDepth(viewPosition);
|
|
#if defined(dClipVariant_pixel) && dClipObjectCount != 0
|
|
if (clipTest(modelPosition)) {
|
|
objectClipped = true;
|
|
fragmentDepth = -1.0;
|
|
#ifdef dSolidInterior
|
|
topCap = !topInterior;
|
|
bottomCap = !bottomInterior;
|
|
#endif
|
|
}
|
|
#endif
|
|
if (fragmentDepth > 0.0) return true;
|
|
clipped = true;
|
|
}
|
|
|
|
if (!clipped) {
|
|
if (topCap && y < 0.0) {
|
|
// top cap
|
|
t = -baoc / bard;
|
|
if (abs(k1 + k2 * t) < h) {
|
|
interior = topInterior;
|
|
cameraNormal = -ba / baba;
|
|
modelPosition = rayOrigin + t * rayDir;
|
|
viewPosition = (uView * vec4(modelPosition, 1.0)).xyz;
|
|
fragmentDepth = calcDepth(viewPosition);
|
|
#if defined(dClipVariant_pixel) && dClipObjectCount != 0
|
|
if (clipTest(modelPosition)) {
|
|
objectClipped = true;
|
|
fragmentDepth = -1.0;
|
|
#ifdef dSolidInterior
|
|
topCap = !topInterior;
|
|
bottomCap = !bottomInterior;
|
|
#endif
|
|
}
|
|
#endif
|
|
if (fragmentDepth > 0.0) {
|
|
#ifdef dSolidInterior
|
|
if (interior) cameraNormal = -rayDir;
|
|
#endif
|
|
#if defined(dClipVariant_pixel) && dClipObjectCount != 0
|
|
return true;
|
|
#else
|
|
return !interior;
|
|
#endif
|
|
}
|
|
}
|
|
} else if (bottomCap && y >= 0.0) {
|
|
// bottom cap
|
|
t = (baba - baoc) / bard;
|
|
if (abs(k1 + k2 * t) < h) {
|
|
interior = bottomInterior;
|
|
cameraNormal = ba / baba;
|
|
modelPosition = rayOrigin + t * rayDir;
|
|
viewPosition = (uView * vec4(modelPosition, 1.0)).xyz;
|
|
fragmentDepth = calcDepth(viewPosition);
|
|
#if defined(dClipVariant_pixel) && dClipObjectCount != 0
|
|
if (clipTest(modelPosition)) {
|
|
objectClipped = true;
|
|
fragmentDepth = -1.0;
|
|
#ifdef dSolidInterior
|
|
topCap = !topInterior;
|
|
bottomCap = !bottomInterior;
|
|
#endif
|
|
}
|
|
#endif
|
|
if (fragmentDepth > 0.0) {
|
|
#ifdef dSolidInterior
|
|
if (interior) cameraNormal = -rayDir;
|
|
#endif
|
|
#if defined(dClipVariant_pixel) && dClipObjectCount != 0
|
|
return true;
|
|
#else
|
|
return !interior;
|
|
#endif
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
if (uDoubleSided || solidInterior) {
|
|
// body inside
|
|
h = -h;
|
|
t = (-k1 - h) / k2;
|
|
y = baoc + t * bard;
|
|
if (y > 0.0 && y < baba) {
|
|
interior = true;
|
|
cameraNormal = -(oc + t * rayDir - ba * y / baba) / radius;
|
|
modelPosition = rayOrigin + t * rayDir;
|
|
viewPosition = (uView * vec4(modelPosition, 1.0)).xyz;
|
|
fragmentDepth = calcDepth(viewPosition);
|
|
if (fragmentDepth > 0.0) {
|
|
#ifdef dSolidInterior
|
|
if (!objectClipped) {
|
|
fragmentDepth = 0.0 + (0.0000002 / vSize);
|
|
cameraNormal = -rayDir;
|
|
|
|
// intersection of ray in model space with near plane in camera space
|
|
vec3 cameraRayOrigin = (uView * vec4(rayOrigin, 1.0)).xyz;
|
|
vec3 cameraRayDir = (uView * vec4(rayDir, 0.0)).xyz;
|
|
float nearT = - (uNear + cameraRayOrigin.z) / cameraRayDir.z;
|
|
viewPosition = cameraRayOrigin + nearT * cameraRayDir;
|
|
modelPosition = (uInvView * vec4(viewPosition, 1.0)).xyz;
|
|
}
|
|
#endif
|
|
return true;
|
|
}
|
|
}
|
|
|
|
if (topCap && y < 0.0) {
|
|
// top cap
|
|
t = -baoc / bard;
|
|
if (abs(k1 + k2 * t) < -h) {
|
|
interior = true;
|
|
cameraNormal = ba / baba;
|
|
modelPosition = rayOrigin + t * rayDir;
|
|
viewPosition = (uView * vec4(modelPosition, 1.0)).xyz;
|
|
fragmentDepth = calcDepth(viewPosition);
|
|
if (fragmentDepth > 0.0) {
|
|
#ifdef dSolidInterior
|
|
if (!objectClipped) {
|
|
fragmentDepth = 0.0 + (0.0000002 / vSize);
|
|
cameraNormal = -rayDir;
|
|
|
|
// intersection of ray in model space with near plane in camera space
|
|
vec3 cameraRayOrigin = (uView * vec4(rayOrigin, 1.0)).xyz;
|
|
vec3 cameraRayDir = (uView * vec4(rayDir, 0.0)).xyz;
|
|
float nearT = - (uNear + cameraRayOrigin.z) / cameraRayDir.z;
|
|
viewPosition = cameraRayOrigin + nearT * cameraRayDir;
|
|
modelPosition = (uInvView * vec4(viewPosition, 1.0)).xyz;
|
|
}
|
|
#endif
|
|
return true;
|
|
}
|
|
}
|
|
} else if (bottomCap && y >= 0.0) {
|
|
// bottom cap
|
|
t = (baba - baoc) / bard;
|
|
if (abs(k1 + k2 * t) < -h) {
|
|
interior = true;
|
|
cameraNormal = -ba / baba;
|
|
modelPosition = rayOrigin + t * rayDir;
|
|
viewPosition = (uView * vec4(modelPosition, 1.0)).xyz;
|
|
fragmentDepth = calcDepth(viewPosition);
|
|
if (fragmentDepth > 0.0) {
|
|
#ifdef dSolidInterior
|
|
if (!objectClipped) {
|
|
fragmentDepth = 0.0 + (0.0000002 / vSize);
|
|
cameraNormal = -rayDir;
|
|
|
|
// intersection of ray in model space with near plane in camera space
|
|
vec3 cameraRayOrigin = (uView * vec4(rayOrigin, 1.0)).xyz;
|
|
vec3 cameraRayDir = (uView * vec4(rayDir, 0.0)).xyz;
|
|
float nearT = - (uNear + cameraRayOrigin.z) / cameraRayDir.z;
|
|
viewPosition = cameraRayOrigin + nearT * cameraRayDir;
|
|
modelPosition = (uInvView * vec4(viewPosition, 1.0)).xyz;
|
|
}
|
|
#endif
|
|
return true;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
void main() {
|
|
vec3 rayOrigin = vModelPosition;
|
|
vec3 rayDir = mix(normalize(vModelPosition - uCameraPosition), uCameraDir, uIsOrtho);
|
|
|
|
vec3 cameraNormal;
|
|
vec3 modelPosition;
|
|
vec3 viewPosition;
|
|
float fragmentDepth;
|
|
bool hit = CylinderImpostor(rayOrigin, rayDir, vStart, vEnd, vSize, cameraNormal, interior, modelPosition, viewPosition, fragmentDepth);
|
|
if (!hit) discard;
|
|
|
|
if (fragmentDepth < 0.0) discard;
|
|
if (fragmentDepth > 1.0) discard;
|
|
|
|
gl_FragDepthEXT = fragmentDepth;
|
|
|
|
vec3 vViewPosition = viewPosition;
|
|
vec3 vModelPosition = modelPosition;
|
|
|
|
#include fade_lod
|
|
#include clip_pixel
|
|
|
|
#ifdef dNeedsNormal
|
|
mat3 normalMatrix = adjoint(uView);
|
|
vec3 normal = normalize(normalMatrix * -normalize(cameraNormal));
|
|
#endif
|
|
|
|
#include assign_material_color
|
|
#include check_transparency
|
|
|
|
#if defined(dRenderVariant_pick)
|
|
#include check_picking_alpha
|
|
#ifdef requiredDrawBuffers
|
|
gl_FragColor = vObject;
|
|
gl_FragData[1] = vInstance;
|
|
gl_FragData[2] = vGroup;
|
|
gl_FragData[3] = packDepthToRGBA(fragmentDepth);
|
|
#else
|
|
gl_FragColor = vColor;
|
|
#endif
|
|
#elif defined(dRenderVariant_depth)
|
|
gl_FragColor = material;
|
|
#elif defined(dRenderVariant_marking)
|
|
gl_FragColor = material;
|
|
#elif defined(dRenderVariant_emissive)
|
|
gl_FragColor = material;
|
|
#elif defined(dRenderVariant_color) || defined(dRenderVariant_tracing)
|
|
#include apply_interior_color
|
|
#include apply_light_color
|
|
#include apply_marker_color
|
|
|
|
#if defined(dRenderVariant_color)
|
|
#include apply_fog
|
|
#include wboit_write
|
|
#include dpoit_write
|
|
#elif defined(dRenderVariant_tracing)
|
|
gl_FragData[1] = vec4(normal, emissive);
|
|
gl_FragData[2] = vec4(material.rgb, uDensity);
|
|
#endif
|
|
#endif
|
|
}
|
|
`;var mBe=`
|
|
precision highp float;
|
|
precision highp int;
|
|
|
|
#include common
|
|
#include read_from_texture
|
|
#include common_vert_params
|
|
#include color_vert_params
|
|
#include size_vert_params
|
|
#include common_clip
|
|
|
|
uniform mat4 uModelView;
|
|
|
|
attribute vec3 aPosition;
|
|
attribute vec2 aMapping;
|
|
attribute float aDepth;
|
|
attribute vec2 aTexCoord;
|
|
attribute mat4 aTransform;
|
|
attribute float aInstance;
|
|
attribute float aGroup;
|
|
|
|
uniform float uOffsetX;
|
|
uniform float uOffsetY;
|
|
uniform float uOffsetZ;
|
|
|
|
uniform float uIsOrtho;
|
|
uniform float uPixelRatio;
|
|
uniform vec4 uViewport;
|
|
uniform mat4 uInvHeadRotation;
|
|
uniform bool uHasHeadRotation;
|
|
uniform mat4 uModelViewEye;
|
|
uniform mat4 uInvModelViewEye;
|
|
uniform bool uHasEyeCamera;
|
|
|
|
varying vec2 vTexCoord;
|
|
|
|
void main(void){
|
|
int vertexId = VertexID;
|
|
|
|
#include assign_group
|
|
#include assign_color_varying
|
|
#include assign_marker_varying
|
|
#include assign_clipping_varying
|
|
#include assign_size
|
|
|
|
vTexCoord = aTexCoord;
|
|
|
|
float scale = uModelScale;
|
|
|
|
float offsetX = uOffsetX * scale;
|
|
float offsetY = uOffsetY * scale;
|
|
float offsetZ = (uOffsetZ + aDepth * 0.95) * scale;
|
|
|
|
vec4 position4 = vec4(aPosition, 1.0);
|
|
vec4 mvPosition = uHasEyeCamera
|
|
? uModelViewEye * aTransform * position4
|
|
: uModelView * aTransform * position4;
|
|
|
|
vModelPosition = (uModel * aTransform * position4).xyz; // for clipping in frag shader
|
|
|
|
// TODO
|
|
// #ifdef FIXED_SIZE
|
|
// if (ortho) {
|
|
// scale /= pixelRatio * ((uViewport.w / 2.0) / -uCameraPosition.z) * 0.1;
|
|
// } else {
|
|
// scale /= pixelRatio * ((uViewport.w / 2.0) / -mvPosition.z) * 0.1;
|
|
// }
|
|
// #endif
|
|
|
|
vec4 mvCenter = vec4(mvPosition.xyz, 1.0);
|
|
|
|
if (vTexCoord.x == 10.0) { // indicates background plane
|
|
// move a bit to the back, taking distance to camera into account to avoid z-fighting
|
|
offsetZ -= 0.001 * distance(uCameraPosition, (uProjection * mvCenter).xyz);
|
|
}
|
|
|
|
// apply Z offset in view space
|
|
if (!uHasEyeCamera) {
|
|
if (uIsOrtho == 1.0) {
|
|
mvCenter.z += offsetZ;
|
|
} else {
|
|
mvCenter.xyz += normalize(-mvCenter.xyz) * offsetZ;
|
|
}
|
|
}
|
|
|
|
if (uHasEyeCamera) {
|
|
mvCenter = uModelView * uInvModelViewEye * mvCenter;
|
|
}
|
|
|
|
// project center to clip space
|
|
vec4 clip = uProjection * mvCenter;
|
|
|
|
// compute corner offset in screen-space units
|
|
vec2 cornerOffset = aMapping * size * scale;
|
|
cornerOffset.x += offsetX;
|
|
cornerOffset.y += offsetY;
|
|
|
|
if (uHasHeadRotation) {
|
|
vec3 rotatedOffset = (uInvHeadRotation * vec4(cornerOffset, 0.0, 0.0)).xyz;
|
|
clip += uProjection * vec4(rotatedOffset, 0.0);
|
|
} else {
|
|
// apply offset in clip space to avoid perspective distortion on the quad
|
|
clip.xy += vec2(uProjection[0][0], uProjection[1][1]) * cornerOffset;
|
|
}
|
|
|
|
gl_Position = clip;
|
|
|
|
vViewPosition = -mvCenter.xyz;
|
|
|
|
#include clip_instance
|
|
}
|
|
`;var dBe=`
|
|
precision highp float;
|
|
precision highp int;
|
|
|
|
#include common
|
|
#include common_frag_params
|
|
#include color_frag_params
|
|
#include common_clip
|
|
|
|
uniform sampler2D tFont;
|
|
|
|
uniform vec3 uBorderColor;
|
|
uniform float uBorderWidth;
|
|
uniform vec3 uBackgroundColor;
|
|
uniform float uBackgroundOpacity;
|
|
|
|
varying vec2 vTexCoord;
|
|
|
|
void main(){
|
|
#include fade_lod
|
|
#include clip_pixel
|
|
|
|
float fragmentDepth = gl_FragCoord.z;
|
|
|
|
// determine if this is a background or glyph fragment
|
|
bool isBackground = vTexCoord.x > 1.0;
|
|
|
|
// discard background for pick/marking/emissive, but keep it in depth
|
|
#if !defined(dRenderVariant_color) && !defined(dRenderVariant_tracing) && !defined(dRenderVariant_depth)
|
|
if (isBackground) discard;
|
|
#endif
|
|
|
|
// SDF test for glyph fragments \u2014 discard pixels outside glyph+border
|
|
float rawSdf = 0.0;
|
|
if (!isBackground) {
|
|
rawSdf = texture2D(tFont, vTexCoord).a;
|
|
float sdf = rawSdf + min(uBorderWidth, 0.49); // clamp to avoid exceeding max SDF range
|
|
if (sdf < 0.5) discard;
|
|
}
|
|
|
|
#ifdef enabledFragDepth
|
|
gl_FragDepthEXT = fragmentDepth;
|
|
#endif
|
|
|
|
// background writes its own opacity into depth alpha; glyphs stay opaque
|
|
#define dHasMaterialOpacity
|
|
float materialOpacity = isBackground ? uBackgroundOpacity : 1.0;
|
|
#include assign_material_color
|
|
|
|
if (isBackground) {
|
|
#if defined(dRenderVariant_color) || defined(dRenderVariant_tracing)
|
|
material = vec4(uBackgroundColor, uBackgroundOpacity * material.a);
|
|
#endif
|
|
} else {
|
|
#if defined(dRenderVariant_color) || defined(dRenderVariant_tracing)
|
|
if (uBorderWidth > 0.0 && rawSdf < 0.5) {
|
|
material.xyz = uBorderColor;
|
|
} else {
|
|
// push text fragments forward in depth so they render in front of border
|
|
#ifdef enabledFragDepth
|
|
gl_FragDepthEXT = fragmentDepth - 0.0001;
|
|
#endif
|
|
}
|
|
#endif
|
|
}
|
|
|
|
#include check_transparency
|
|
|
|
#if defined(dRenderVariant_pick)
|
|
#include check_picking_alpha
|
|
#ifdef requiredDrawBuffers
|
|
gl_FragColor = vObject;
|
|
gl_FragData[1] = vInstance;
|
|
gl_FragData[2] = vGroup;
|
|
gl_FragData[3] = packDepthToRGBA(fragmentDepth);
|
|
#else
|
|
gl_FragColor = vColor;
|
|
#endif
|
|
#elif defined(dRenderVariant_depth)
|
|
gl_FragColor = material;
|
|
#elif defined(dRenderVariant_marking)
|
|
gl_FragColor = material;
|
|
#elif defined(dRenderVariant_emissive)
|
|
gl_FragColor = material;
|
|
#elif defined(dRenderVariant_color) || defined(dRenderVariant_tracing)
|
|
gl_FragColor = material;
|
|
#include apply_marker_color
|
|
|
|
#if defined(dRenderVariant_color)
|
|
#include apply_fog
|
|
#include wboit_write
|
|
#include dpoit_write
|
|
#elif defined(dRenderVariant_tracing)
|
|
gl_FragData[1] = vec4(-normalize(vViewPosition), emissive);
|
|
gl_FragData[2] = vec4(material.rgb, uDensity);
|
|
#endif
|
|
#endif
|
|
}
|
|
`;var pBe=`
|
|
precision highp float;
|
|
precision highp int;
|
|
|
|
#include common
|
|
#include read_from_texture
|
|
#include common_vert_params
|
|
#include color_vert_params
|
|
#include size_vert_params
|
|
#include common_clip
|
|
#include common_animation
|
|
|
|
uniform float uPixelRatio;
|
|
uniform vec4 uViewport;
|
|
|
|
attribute mat4 aTransform;
|
|
attribute float aInstance;
|
|
attribute float aGroup;
|
|
|
|
attribute vec2 aMapping;
|
|
attribute vec3 aStart;
|
|
attribute vec3 aEnd;
|
|
|
|
void trimSegment(const in vec4 start, inout vec4 end) {
|
|
// trim end segment so it terminates between the camera plane and the near plane
|
|
// conservative estimate of the near plane
|
|
float a = uProjection[2][2]; // 3rd entry in 3rd column
|
|
float b = uProjection[3][2]; // 3rd entry in 4th column
|
|
float nearEstimate = -0.5 * b / a;
|
|
float alpha = (nearEstimate - start.z) / (end.z - start.z);
|
|
end.xyz = mix(start.xyz, end.xyz, alpha);
|
|
}
|
|
|
|
void main(){
|
|
float aspect = uViewport.z / uViewport.w;
|
|
int vertexId = VertexID;
|
|
|
|
#include assign_group
|
|
#include assign_color_varying
|
|
#include assign_marker_varying
|
|
#include assign_clipping_varying
|
|
#include assign_size
|
|
|
|
mat4 transform = applyTumble(aTransform, aInstance, float(uObjectId));
|
|
vec3 wigStart = applyWiggle(aStart, group, aInstance);
|
|
vec3 wigEnd = applyWiggle(aEnd, group, aInstance);
|
|
mat4 modelView = uView * uModel * transform;
|
|
|
|
// camera space
|
|
vec4 start = modelView * vec4(wigStart, 1.0);
|
|
vec4 end = modelView * vec4(wigEnd, 1.0);
|
|
|
|
// assign position
|
|
vec4 position4 = vec4((aMapping.y < 0.5) ? wigStart : wigEnd, 1.0);
|
|
vViewPosition = (aMapping.y < 0.5) ? start.xyz : end.xyz;
|
|
|
|
vModelPosition = (uModel * transform * position4).xyz; // for clipping in frag shader
|
|
|
|
// special case for perspective projection, and segments that terminate either in, or behind, the camera plane
|
|
// clearly the gpu firmware has a way of addressing this issue when projecting into ndc space
|
|
// but we need to perform ndc-space calculations in the shader, so we must address this issue directly
|
|
// perhaps there is a more elegant solution -- WestLangley
|
|
bool perspective = (uProjection[2][3] == -1.0); // 4th entry in the 3rd column
|
|
if (perspective) {
|
|
if (start.z < 0.0 && end.z >= 0.0) {
|
|
trimSegment(start, end);
|
|
} else if (end.z < 0.0 && start.z >= 0.0) {
|
|
trimSegment(end, start);
|
|
}
|
|
}
|
|
|
|
// clip space
|
|
vec4 clipStart = uProjection * start;
|
|
vec4 clipEnd = uProjection * end;
|
|
|
|
// ndc space
|
|
vec2 ndcStart = clipStart.xy / clipStart.w;
|
|
vec2 ndcEnd = clipEnd.xy / clipEnd.w;
|
|
|
|
// direction
|
|
vec2 dir = ndcEnd - ndcStart;
|
|
|
|
// account for clip-space aspect ratio
|
|
dir.x *= aspect;
|
|
dir = normalize(dir);
|
|
|
|
// perpendicular to dir
|
|
vec2 offset = vec2(dir.y, - dir.x);
|
|
|
|
// undo aspect ratio adjustment
|
|
dir.x /= aspect;
|
|
offset.x /= aspect;
|
|
|
|
// sign flip
|
|
if (aMapping.x < 0.0) offset *= -1.0;
|
|
|
|
// calculate linewidth
|
|
float linewidth;
|
|
#ifdef dLineSizeAttenuation
|
|
linewidth = size * uPixelRatio * ((uViewport.w / 2.0) / -start.z) * 5.0;
|
|
#else
|
|
linewidth = size * uPixelRatio;
|
|
#endif
|
|
linewidth = max(1.0, linewidth);
|
|
|
|
// adjust for linewidth
|
|
offset *= linewidth;
|
|
|
|
// adjust for clip-space to screen-space conversion
|
|
offset /= uViewport.w;
|
|
|
|
// select end
|
|
vec4 clip = (aMapping.y < 0.5) ? clipStart : clipEnd;
|
|
|
|
// back to clip space
|
|
offset *= clip.w;
|
|
clip.xy += offset;
|
|
gl_Position = clip;
|
|
|
|
#include clip_instance
|
|
}
|
|
`;var fBe=`
|
|
precision highp float;
|
|
precision highp int;
|
|
|
|
#include common
|
|
#include common_frag_params
|
|
#include color_frag_params
|
|
#include common_clip
|
|
|
|
void main(){
|
|
#include fade_lod
|
|
#include clip_pixel
|
|
|
|
float fragmentDepth = gl_FragCoord.z;
|
|
#include assign_material_color
|
|
#include check_transparency
|
|
|
|
#if defined(dRenderVariant_pick)
|
|
#include check_picking_alpha
|
|
#ifdef requiredDrawBuffers
|
|
gl_FragColor = vObject;
|
|
gl_FragData[1] = vInstance;
|
|
gl_FragData[2] = vGroup;
|
|
gl_FragData[3] = packDepthToRGBA(fragmentDepth);
|
|
#else
|
|
gl_FragColor = vColor;
|
|
#endif
|
|
#elif defined(dRenderVariant_depth)
|
|
gl_FragColor = material;
|
|
#elif defined(dRenderVariant_marking)
|
|
gl_FragColor = material;
|
|
#elif defined(dRenderVariant_emissive)
|
|
gl_FragColor = material;
|
|
#elif defined(dRenderVariant_color) || defined(dRenderVariant_tracing)
|
|
gl_FragColor = material;
|
|
#include apply_marker_color
|
|
|
|
#if defined(dRenderVariant_color)
|
|
#include apply_fog
|
|
#include wboit_write
|
|
#include dpoit_write
|
|
#elif defined(dRenderVariant_tracing)
|
|
gl_FragData[1] = vec4(normalize(vViewPosition), emissive);
|
|
gl_FragData[2] = vec4(material.rgb, uDensity);
|
|
#endif
|
|
#endif
|
|
}
|
|
`;var BBe=`
|
|
precision highp float;
|
|
precision highp int;
|
|
precision highp sampler2D;
|
|
|
|
#include common
|
|
#include read_from_texture
|
|
#include common_vert_params
|
|
#include color_vert_params
|
|
#include common_clip
|
|
#include common_animation
|
|
#include texture3d_from_2d_linear
|
|
|
|
#ifdef dGeometryType_textureMesh
|
|
uniform vec2 uGeoTexDim;
|
|
uniform sampler2D tPosition;
|
|
uniform sampler2D tGroup;
|
|
uniform sampler2D tNormal;
|
|
#else
|
|
attribute vec3 aPosition;
|
|
attribute float aGroup;
|
|
attribute vec3 aNormal;
|
|
#endif
|
|
attribute mat4 aTransform;
|
|
attribute float aInstance;
|
|
|
|
varying vec3 vNormal;
|
|
|
|
void main(){
|
|
int vertexId = VertexID;
|
|
|
|
#include assign_group
|
|
#include assign_marker_varying
|
|
#include assign_clipping_varying
|
|
#include assign_position
|
|
#include assign_color_varying
|
|
#include clip_instance
|
|
|
|
#ifdef dGeometryType_textureMesh
|
|
vec3 normal = readFromTexture(tNormal, vertexId, uGeoTexDim).xyz;
|
|
#else
|
|
vec3 normal = aNormal;
|
|
#endif
|
|
mat3 normalMatrix = adjoint(modelView);
|
|
vec3 transformedNormal = normalize(normalMatrix * normalize(normal));
|
|
#if defined(dFlipSided)
|
|
if (!uDoubleSided) { // TODO checking uDoubleSided should not be required, ASR
|
|
transformedNormal = -transformedNormal;
|
|
}
|
|
#endif
|
|
vNormal = transformedNormal;
|
|
}
|
|
`;var IBe=`
|
|
precision highp float;
|
|
precision highp int;
|
|
|
|
#define bumpEnabled
|
|
|
|
#include common
|
|
#include common_frag_params
|
|
#include color_frag_params
|
|
#include light_frag_params
|
|
#include normal_frag_params
|
|
#include common_clip
|
|
|
|
uniform vec4 uInteriorColor;
|
|
uniform vec4 uInteriorSubstance;
|
|
|
|
void main() {
|
|
#include fade_lod
|
|
#include clip_pixel
|
|
|
|
interior = !gl_FrontFacing;
|
|
|
|
float fragmentDepth = gl_FragCoord.z;
|
|
|
|
#ifdef dNeedsNormal
|
|
#if defined(dFlatShaded)
|
|
vec3 fdx = dFdx(vViewPosition);
|
|
vec3 fdy = dFdy(vViewPosition);
|
|
vec3 normal = -normalize(cross(fdx,fdy));
|
|
#else
|
|
vec3 normal = -normalize(vNormal);
|
|
if (uDoubleSided) normal *= float(gl_FrontFacing) * 2.0 - 1.0;
|
|
#endif
|
|
|
|
#if defined(dFlipSided)
|
|
normal *= -1.0;
|
|
#endif
|
|
#endif
|
|
|
|
#include assign_material_color
|
|
#include check_transparency
|
|
|
|
#if defined(dRenderVariant_pick)
|
|
#include check_picking_alpha
|
|
#ifdef requiredDrawBuffers
|
|
gl_FragColor = vObject;
|
|
gl_FragData[1] = vInstance;
|
|
gl_FragData[2] = vGroup;
|
|
gl_FragData[3] = packDepthToRGBA(fragmentDepth);
|
|
#else
|
|
gl_FragColor = vColor;
|
|
#endif
|
|
#elif defined(dRenderVariant_depth)
|
|
gl_FragColor = material;
|
|
#elif defined(dRenderVariant_marking)
|
|
gl_FragColor = material;
|
|
#elif defined(dRenderVariant_emissive)
|
|
gl_FragColor = material;
|
|
#elif defined(dRenderVariant_color) || defined(dRenderVariant_tracing)
|
|
#include apply_interior_color
|
|
#include apply_light_color
|
|
#include apply_marker_color
|
|
|
|
#if defined(dRenderVariant_color)
|
|
#include apply_fog
|
|
#include wboit_write
|
|
#include dpoit_write
|
|
#elif defined(dRenderVariant_tracing)
|
|
gl_FragData[1] = vec4(normal, emissive);
|
|
gl_FragData[2] = vec4(material.rgb, uDensity);
|
|
#endif
|
|
#endif
|
|
}
|
|
`;var CBe=`
|
|
precision highp float;
|
|
|
|
attribute vec3 aPosition;
|
|
attribute mat4 aTransform;
|
|
attribute float aInstance;
|
|
|
|
uniform mat4 uModel;
|
|
uniform mat4 uModelView;
|
|
uniform mat4 uProjection;
|
|
uniform vec4 uInvariantBoundingSphere;
|
|
uniform float uModelScale;
|
|
|
|
varying vec3 vModelPosition;
|
|
varying float vInstance;
|
|
varying vec4 vBoundingSphere;
|
|
varying mat4 vTransform;
|
|
|
|
uniform vec3 uBboxSize;
|
|
uniform vec3 uBboxMin;
|
|
uniform vec3 uBboxMax;
|
|
uniform vec3 uGridDim;
|
|
uniform mat4 uTransform;
|
|
|
|
uniform mat4 uUnitToCartn;
|
|
|
|
void main() {
|
|
vec4 unitCoord = vec4(aPosition + vec3(0.5), 1.0);
|
|
vec4 mvPosition = uModelView * aTransform * uUnitToCartn * unitCoord;
|
|
|
|
vModelPosition = (uModel * aTransform * uUnitToCartn * unitCoord).xyz;
|
|
vInstance = aInstance;
|
|
vBoundingSphere = vec4(
|
|
(uModel * aTransform * vec4(uInvariantBoundingSphere.xyz, 1.0)).xyz,
|
|
uModelScale * uInvariantBoundingSphere.w
|
|
);
|
|
vTransform = aTransform;
|
|
|
|
gl_Position = uProjection * mvPosition;
|
|
|
|
// move z position to near clip plane (but not too close to get precision issues)
|
|
gl_Position.z = gl_Position.w - 0.01;
|
|
}
|
|
`;var hBe=`
|
|
precision highp float;
|
|
precision highp int;
|
|
|
|
#include common
|
|
#include light_frag_params
|
|
|
|
#if dClipObjectCount != 0
|
|
uniform int uClipObjectType[dClipObjectCount];
|
|
uniform bool uClipObjectInvert[dClipObjectCount];
|
|
uniform vec3 uClipObjectPosition[dClipObjectCount];
|
|
uniform vec4 uClipObjectRotation[dClipObjectCount];
|
|
uniform vec3 uClipObjectScale[dClipObjectCount];
|
|
uniform mat4 uClipObjectTransform[dClipObjectCount];
|
|
#endif
|
|
#include common_clip
|
|
|
|
#include read_from_texture
|
|
#include texture3d_from_1d_trilinear
|
|
#include texture3d_from_2d_nearest
|
|
#include texture3d_from_2d_linear
|
|
|
|
uniform mat4 uProjection, uTransform, uModelView, uModel, uView;
|
|
uniform vec3 uCameraDir;
|
|
uniform float uModelScale;
|
|
|
|
uniform sampler2D tDepth;
|
|
uniform vec2 uDrawingBufferSize;
|
|
|
|
varying vec3 vModelPosition;
|
|
varying float vInstance;
|
|
varying vec4 vBoundingSphere;
|
|
varying mat4 vTransform;
|
|
|
|
uniform mat4 uInvView;
|
|
uniform vec3 uGridDim;
|
|
uniform vec3 uBboxSize;
|
|
uniform sampler2D tTransferTex;
|
|
uniform float uTransferScale;
|
|
uniform float uStepScale;
|
|
uniform float uJumpLength;
|
|
|
|
uniform int uObjectId;
|
|
uniform int uVertexCount;
|
|
uniform int uInstanceCount;
|
|
uniform int uGroupCount;
|
|
|
|
#if defined(dColorMarker)
|
|
uniform vec3 uHighlightColor;
|
|
uniform vec3 uSelectColor;
|
|
uniform vec3 uDimColor;
|
|
uniform float uHighlightStrength;
|
|
uniform float uSelectStrength;
|
|
uniform float uDimStrength;
|
|
uniform int uMarkerPriority;
|
|
uniform float uMarkerAverage;
|
|
|
|
uniform float uMarker;
|
|
uniform vec2 uMarkerTexDim;
|
|
uniform sampler2D tMarker;
|
|
#endif
|
|
|
|
uniform float uMetalness;
|
|
uniform float uRoughness;
|
|
uniform float uEmissive;
|
|
|
|
// Density value to estimate object thickness
|
|
uniform float uDensity;
|
|
|
|
uniform bool uFog;
|
|
uniform float uFogNear;
|
|
uniform float uFogFar;
|
|
uniform vec3 uFogColor;
|
|
|
|
uniform float uAlpha;
|
|
uniform bool uTransparentBackground;
|
|
uniform float uXrayEdgeFalloff;
|
|
uniform float uCelSteps;
|
|
uniform float uExposure;
|
|
|
|
uniform int uRenderMask;
|
|
|
|
uniform float uNear;
|
|
uniform float uFar;
|
|
uniform float uIsOrtho;
|
|
|
|
uniform vec3 uCellDim;
|
|
uniform vec3 uCameraPosition;
|
|
uniform mat4 uCartnToUnit;
|
|
|
|
#if __VERSION__ != 100
|
|
// for webgl1 this is given as a 'define'
|
|
uniform int uMaxSteps;
|
|
#endif
|
|
|
|
#if defined(dGridTexType_2d)
|
|
precision highp sampler2D;
|
|
uniform sampler2D tGridTex;
|
|
uniform vec3 uGridTexDim;
|
|
#elif defined(dGridTexType_3d)
|
|
precision highp sampler3D;
|
|
uniform sampler3D tGridTex;
|
|
#endif
|
|
|
|
#if defined(dColorType_uniform)
|
|
uniform vec3 uColor;
|
|
#elif defined(dColorType_texture)
|
|
uniform vec2 uColorTexDim;
|
|
uniform sampler2D tColor;
|
|
#endif
|
|
|
|
#ifdef dOverpaint
|
|
#if defined(dOverpaintType_groupInstance) || defined(dOverpaintType_vertexInstance)
|
|
uniform vec2 uOverpaintTexDim;
|
|
uniform sampler2D tOverpaint;
|
|
#endif
|
|
#endif
|
|
|
|
#ifdef dUsePalette
|
|
uniform vec2 uPaletteDomain;
|
|
uniform sampler2D tPalette;
|
|
#endif
|
|
|
|
#if defined(dGridTexType_2d)
|
|
vec4 textureVal(vec3 pos) {
|
|
return texture3dFrom2dLinear(tGridTex, pos + (vec3(0.5, 0.5, 0.0) / uGridDim), uGridDim, uGridTexDim.xy);
|
|
}
|
|
vec4 textureGroup(vec3 pos) {
|
|
return texture3dFrom2dNearest(tGridTex, pos + (vec3(0.5, 0.5, 0.0) / uGridDim), uGridDim, uGridTexDim.xy);
|
|
}
|
|
#elif defined(dGridTexType_3d)
|
|
vec4 textureVal(vec3 pos) {
|
|
return texture(tGridTex, pos + (vec3(0.5) / uGridDim));
|
|
}
|
|
vec4 textureGroup(vec3 pos) {
|
|
return texelFetch(tGridTex, ivec3(pos * uGridDim), 0);
|
|
}
|
|
#endif
|
|
|
|
float calcDepth(const in vec3 pos) {
|
|
vec2 clipZW = pos.z * uProjection[2].zw + uProjection[3].zw;
|
|
return 0.5 + 0.5 * clipZW.x / clipZW.y;
|
|
}
|
|
|
|
float transferFunction(float value) {
|
|
return texture2D(tTransferTex, vec2(value, 0.0)).a;
|
|
}
|
|
|
|
float getDepth(const in vec2 coords) {
|
|
#ifdef depthTextureSupport
|
|
return texture2D(tDepth, coords).r;
|
|
#else
|
|
return unpackRGBAToDepth(texture2D(tDepth, coords));
|
|
#endif
|
|
}
|
|
|
|
const float gradOffset = 0.5;
|
|
|
|
vec3 v3m4(vec3 p, mat4 m) {
|
|
return (m * vec4(p, 1.0)).xyz;
|
|
}
|
|
|
|
float preFogAlphaBlended = 0.0;
|
|
|
|
vec4 raymarch(vec3 startLoc, vec3 step, vec3 rayDir) {
|
|
mat3 normalMatrix = adjoint(uModelView * vTransform);
|
|
mat4 cartnToUnit = uCartnToUnit * inverse4(vTransform);
|
|
#if defined(dClipVariant_pixel) && dClipObjectCount != 0
|
|
mat4 modelTransform = uModel * vTransform * uTransform;
|
|
#endif
|
|
mat4 modelViewTransform = uModelView * vTransform * uTransform;
|
|
|
|
vec3 scaleVol = vec3(1.0) / uGridDim;
|
|
vec3 pos = startLoc;
|
|
vec4 cell;
|
|
float prevValue = -1.0;
|
|
float value = 0.0;
|
|
vec4 src = vec4(0.0);
|
|
vec4 dst = vec4(0.0);
|
|
float fragmentDepth;
|
|
|
|
vec3 posMin = vec3(0.0);
|
|
vec3 posMax = vec3(1.0) - vec3(1.0) / uGridDim;
|
|
|
|
vec3 unitPos;
|
|
|
|
vec3 nextPos;
|
|
float nextValue;
|
|
|
|
vec4 material;
|
|
vec4 overpaint;
|
|
float metalness = uMetalness;
|
|
float roughness = uRoughness;
|
|
float emissive = uEmissive;
|
|
|
|
vec3 gradient = vec3(1.0);
|
|
vec3 dx = vec3(gradOffset * scaleVol.x, 0.0, 0.0);
|
|
vec3 dy = vec3(0.0, gradOffset * scaleVol.y, 0.0);
|
|
vec3 dz = vec3(0.0, 0.0, gradOffset * scaleVol.z);
|
|
|
|
float maxDist = min(vBoundingSphere.w * 2.0, uFar - uNear);
|
|
float maxDistSq = maxDist * maxDist;
|
|
|
|
for (int i = 0; i < uMaxSteps; ++i) {
|
|
// break when beyond bounding-sphere or far-plane
|
|
vec3 distVec = startLoc - pos;
|
|
if (dot(distVec, distVec) > maxDistSq) break;
|
|
|
|
unitPos = v3m4(pos / uModelScale, cartnToUnit);
|
|
|
|
// continue when outside of grid
|
|
if (unitPos.x > posMax.x || unitPos.y > posMax.y || unitPos.z > posMax.z ||
|
|
unitPos.x < posMin.x || unitPos.y < posMin.y || unitPos.z < posMin.z
|
|
) {
|
|
prevValue = value;
|
|
pos += step;
|
|
continue;
|
|
}
|
|
|
|
cell = textureVal(unitPos);
|
|
value = cell.a; // current voxel value
|
|
|
|
if (uJumpLength > 0.0 && value < 0.01) {
|
|
nextPos = pos + rayDir * uJumpLength;
|
|
nextValue = textureVal(v3m4(nextPos / uModelScale, cartnToUnit)).a;
|
|
if (nextValue < 0.01) {
|
|
prevValue = nextValue;
|
|
pos = nextPos;
|
|
continue;
|
|
}
|
|
}
|
|
|
|
vec4 mvPosition = modelViewTransform * vec4(unitPos * uGridDim, 1.0);
|
|
if (calcDepth(mvPosition.xyz) > getDepth(gl_FragCoord.xy / uDrawingBufferSize))
|
|
break;
|
|
|
|
#if defined(dClipVariant_pixel) && dClipObjectCount != 0
|
|
vec3 modelPosition = v3m4(unitPos * uGridDim, modelTransform);
|
|
if (clipTest(modelPosition)) {
|
|
prevValue = value;
|
|
pos += step;
|
|
continue;
|
|
}
|
|
#endif
|
|
|
|
vec3 vViewPosition = mvPosition.xyz;
|
|
material.a = transferFunction(value);
|
|
|
|
#ifdef dPackedGroup
|
|
float group = unpackRGBToInt(textureGroup(floor(unitPos * uGridDim + 0.5) / uGridDim).rgb);
|
|
#else
|
|
vec3 g = floor(unitPos * uGridDim + 0.5);
|
|
// note that we swap x and z because the texture is flipped around y
|
|
#if defined(dAxisOrder_012)
|
|
float group = g.z + g.y * uGridDim.z + g.x * uGridDim.z * uGridDim.y; // 210
|
|
#elif defined(dAxisOrder_021)
|
|
float group = g.y + g.z * uGridDim.y + g.x * uGridDim.y * uGridDim.z; // 120
|
|
#elif defined(dAxisOrder_102)
|
|
float group = g.z + g.x * uGridDim.z + g.y * uGridDim.z * uGridDim.x; // 201
|
|
#elif defined(dAxisOrder_120)
|
|
float group = g.x + g.z * uGridDim.x + g.y * uGridDim.x * uGridDim.z; // 021
|
|
#elif defined(dAxisOrder_201)
|
|
float group = g.y + g.x * uGridDim.y + g.z * uGridDim.y * uGridDim.x; // 102
|
|
#elif defined(dAxisOrder_210)
|
|
float group = g.x + g.y * uGridDim.x + g.z * uGridDim.x * uGridDim.y; // 012
|
|
#endif
|
|
#endif
|
|
|
|
#if defined(dColorType_direct) && defined(dUsePalette)
|
|
float paletteValue = (value - uPaletteDomain[0]) / (uPaletteDomain[1] - uPaletteDomain[0]);
|
|
material.rgb = texture2D(tPalette, vec2(clamp(paletteValue, 0.0, 1.0), 0.0)).rgb;
|
|
#elif defined(dColorType_uniform)
|
|
material.rgb = uColor;
|
|
#elif defined(dColorType_instance)
|
|
material.rgb = readFromTexture(tColor, vInstance, uColorTexDim).rgb;
|
|
#elif defined(dColorType_group)
|
|
material.rgb = readFromTexture(tColor, group, uColorTexDim).rgb;
|
|
#elif defined(dColorType_groupInstance)
|
|
material.rgb = readFromTexture(tColor, vInstance * float(uGroupCount) + group, uColorTexDim).rgb;
|
|
#elif defined(dColorType_vertex)
|
|
material.rgb = texture3dFrom1dTrilinear(tColor, unitPos, uGridDim, uColorTexDim, 0.0).rgb;
|
|
#elif defined(dColorType_vertexInstance)
|
|
material.rgb = texture3dFrom1dTrilinear(tColor, unitPos, uGridDim, uColorTexDim, vInstance * float(uVertexCount)).rgb;
|
|
#endif
|
|
|
|
#ifdef dOverpaint
|
|
#if defined(dOverpaintType_groupInstance)
|
|
overpaint = readFromTexture(tOverpaint, vInstance * float(uGroupCount) + group, uOverpaintTexDim);
|
|
#elif defined(dOverpaintType_vertexInstance)
|
|
overpaint = texture3dFrom1dTrilinear(tOverpaint, unitPos, uGridDim, uOverpaintTexDim, vInstance * float(uVertexCount));
|
|
#endif
|
|
|
|
material.rgb = mix(material.rgb, overpaint.rgb, overpaint.a);
|
|
#endif
|
|
|
|
#if defined(dIgnoreLight)
|
|
gl_FragColor.rgb = material.rgb;
|
|
#else
|
|
if (material.a >= 0.01) {
|
|
#ifdef dPackedGroup
|
|
// compute gradient by central differences
|
|
gradient.x = textureVal(unitPos - dx).a - textureVal(unitPos + dx).a;
|
|
gradient.y = textureVal(unitPos - dy).a - textureVal(unitPos + dy).a;
|
|
gradient.z = textureVal(unitPos - dz).a - textureVal(unitPos + dz).a;
|
|
#else
|
|
gradient = cell.xyz * 2.0 - 1.0;
|
|
#endif
|
|
vec3 normal = -normalize(normalMatrix * normalize(gradient));
|
|
#include apply_light_color
|
|
} else {
|
|
gl_FragColor.rgb = material.rgb;
|
|
}
|
|
#endif
|
|
|
|
gl_FragColor.a = material.a * uAlpha * uTransferScale;
|
|
|
|
#if defined(dColorMarker)
|
|
float marker = uMarker;
|
|
if (uMarker == -1.0) {
|
|
marker = readFromTexture(tMarker, vInstance * float(uGroupCount) + group, uMarkerTexDim).a;
|
|
marker = floor(marker * 255.0 + 0.5); // rounding required to work on some cards on win
|
|
}
|
|
#endif
|
|
#include apply_marker_color
|
|
|
|
preFogAlphaBlended = (1.0 - preFogAlphaBlended) * gl_FragColor.a + preFogAlphaBlended;
|
|
fragmentDepth = calcDepth(mvPosition.xyz);
|
|
#include apply_fog
|
|
|
|
src = gl_FragColor;
|
|
|
|
if (!uTransparentBackground || !uFog) {
|
|
// done in 'apply_fog' otherwise
|
|
src.rgb *= src.a;
|
|
}
|
|
dst = (1.0 - dst.a) * src + dst; // standard blending
|
|
|
|
// break if the color is opaque enough
|
|
if (dst.a > 0.95)
|
|
break;
|
|
|
|
pos += step;
|
|
}
|
|
|
|
return dst;
|
|
}
|
|
|
|
// TODO: support float texture for higher precision values???
|
|
// TODO: support clipping exclusion texture support
|
|
|
|
void main() {
|
|
#if defined(dRenderVariant_tracing) || defined(dRenderVariant_emissive)
|
|
discard;
|
|
#else
|
|
if (gl_FrontFacing)
|
|
discard;
|
|
|
|
vec3 rayDir = mix(normalize(vModelPosition - uCameraPosition), uCameraDir, uIsOrtho);
|
|
vec3 step = rayDir * uStepScale * uModelScale;
|
|
|
|
float boundingSphereNear = distance(vBoundingSphere.xyz, uCameraPosition) - vBoundingSphere.w;
|
|
float d = max(uNear, boundingSphereNear) - mix(0.0, distance(vModelPosition, uCameraPosition), uIsOrtho);
|
|
vec3 start = mix(uCameraPosition, vModelPosition, uIsOrtho) + (d * rayDir);
|
|
gl_FragColor = raymarch(start, step, rayDir);
|
|
|
|
float fragmentDepth = calcDepth((uView * vec4(start, 1.0)).xyz);
|
|
float preFogAlpha = clamp(preFogAlphaBlended, 0.0, 1.0);
|
|
#include wboit_write
|
|
#endif
|
|
}
|
|
`;var yBe=`
|
|
precision highp float;
|
|
precision highp int;
|
|
|
|
#include common
|
|
#include common_vert_params
|
|
|
|
attribute vec3 aPosition;
|
|
attribute vec2 aUv;
|
|
attribute mat4 aTransform;
|
|
attribute float aInstance;
|
|
|
|
varying vec2 vUv;
|
|
varying float vInstance;
|
|
varying vec3 vPosition;
|
|
|
|
void main() {
|
|
int vertexId = VertexID;
|
|
|
|
#include assign_position
|
|
|
|
vUv = aUv;
|
|
vInstance = aInstance;
|
|
vPosition = aPosition;
|
|
}
|
|
`;var QBe=`
|
|
precision highp float;
|
|
precision highp int;
|
|
|
|
#include common
|
|
#include read_from_texture
|
|
#include common_frag_params
|
|
#include common_clip
|
|
|
|
uniform float uEmissive;
|
|
|
|
// Density value to estimate object thickness
|
|
uniform float uDensity;
|
|
|
|
#if defined(dRenderVariant_color) || defined(dRenderVariant_tracing)
|
|
#ifdef dOverpaint
|
|
#if defined(dOverpaintType_instance) || defined(dOverpaintType_groupInstance)
|
|
varying vec4 vOverpaint;
|
|
uniform vec2 uOverpaintTexDim;
|
|
uniform sampler2D tOverpaint;
|
|
#endif
|
|
uniform float uOverpaintStrength;
|
|
#endif
|
|
#endif
|
|
|
|
#if defined(dRenderVariant_color) || defined(dRenderVariant_tracing) || defined(dRenderVariant_emissive)
|
|
#ifdef dEmissive
|
|
#if defined(dEmissiveType_instance) || defined(dEmissiveType_groupInstance)
|
|
varying float vEmissive;
|
|
uniform vec2 uEmissiveTexDim;
|
|
uniform sampler2D tEmissive;
|
|
#endif
|
|
uniform float uEmissiveStrength;
|
|
#endif
|
|
#endif
|
|
|
|
#ifdef dTransparency
|
|
#if defined(dTransparencyType_instance) || defined(dTransparencyType_groupInstance)
|
|
varying float vTransparency;
|
|
uniform vec2 uTransparencyTexDim;
|
|
uniform sampler2D tTransparency;
|
|
#endif
|
|
uniform float uTransparencyStrength;
|
|
#endif
|
|
|
|
uniform vec2 uImageTexDim;
|
|
uniform sampler2D tImageTex;
|
|
uniform sampler2D tGroupTex;
|
|
uniform sampler2D tValueTex;
|
|
|
|
uniform vec2 uMarkerTexDim;
|
|
uniform sampler2D tMarker;
|
|
|
|
varying vec2 vUv;
|
|
varying float vInstance;
|
|
varying vec3 vPosition;
|
|
|
|
#ifdef dUsePalette
|
|
uniform sampler2D tPalette;
|
|
uniform vec3 uPaletteDefault;
|
|
#endif
|
|
|
|
uniform int uTrimType;
|
|
uniform vec3 uTrimCenter;
|
|
uniform vec4 uTrimRotation;
|
|
uniform vec3 uTrimScale;
|
|
uniform mat4 uTrimTransform;
|
|
|
|
uniform float uIsoLevel;
|
|
|
|
#if defined(dInterpolation_catmulrom) || defined(dInterpolation_mitchell) || defined(dInterpolation_bspline)
|
|
#define dInterpolation_cubic
|
|
#endif
|
|
|
|
#if defined(dInterpolation_cubic)
|
|
#if defined(dInterpolation_catmulrom) || defined(dInterpolation_mitchell)
|
|
#if defined(dInterpolation_catmulrom)
|
|
const float B = 0.0;
|
|
const float C = 0.5;
|
|
#elif defined(dInterpolation_mitchell)
|
|
const float B = 0.333;
|
|
const float C = 0.333;
|
|
#endif
|
|
|
|
float cubicFilter(float x){
|
|
float f = x;
|
|
if (f < 0.0) {
|
|
f = -f;
|
|
}
|
|
if (f < 1.0) {
|
|
return ((12.0 - 9.0 * B - 6.0 * C) * (f * f * f) +
|
|
(-18.0 + 12.0 * B + 6.0 * C) * (f * f) +
|
|
(6.0 - 2.0 * B)) / 6.0;
|
|
}else if (f >= 1.0 && f < 2.0){
|
|
return ((-B - 6.0 * C) * ( f * f * f)
|
|
+ (6.0 * B + 30.0 * C) * (f * f) +
|
|
(-(12.0 * B) - 48.0 * C) * f +
|
|
8.0 * B + 24.0 * C) / 6.0;
|
|
}else{
|
|
return 0.0;
|
|
}
|
|
}
|
|
#elif defined(dInterpolation_bspline)
|
|
float cubicFilter(float x) {
|
|
float f = x;
|
|
if (f < 0.0) {
|
|
f = -f;
|
|
}
|
|
if (f >= 0.0 && f <= 1.0){
|
|
return (2.0 / 3.0) + (0.5) * (f * f * f) - (f * f);
|
|
} else if (f > 1.0 && f <= 2.0) {
|
|
return 1.0 / 6.0 * pow((2.0 - f), 3.0);
|
|
}
|
|
return 1.0;
|
|
}
|
|
#endif
|
|
|
|
vec4 biCubic(sampler2D tex, vec2 texCoord) {
|
|
vec2 texelSize = 1.0 / uImageTexDim;
|
|
texCoord -= texelSize / 2.0;
|
|
vec4 nSum = vec4(0.0);
|
|
float nDenom = 0.0;
|
|
vec2 cell = fract(texCoord * uImageTexDim);
|
|
for (float m = -1.0; m <= 2.0; ++m) {
|
|
for (float n = -1.0; n <= 2.0; ++n) {
|
|
vec4 vecData = texture2D(tex, texCoord + texelSize * vec2(m, n));
|
|
float c = abs(cubicFilter(m - cell.x) * cubicFilter(-n + cell.y));
|
|
nSum += vecData * c;
|
|
nDenom += c;
|
|
}
|
|
}
|
|
return nSum / nDenom;
|
|
}
|
|
#endif
|
|
|
|
void main() {
|
|
if (uTrimType != 0 && getSignedDistance(vPosition, uTrimType, uTrimCenter, uTrimRotation, uTrimScale, uTrimTransform) > 0.0) discard;
|
|
|
|
#include fade_lod
|
|
#include clip_pixel
|
|
|
|
#if defined(dInterpolation_cubic)
|
|
#ifdef dUsePalette
|
|
vec4 material = texture2D(tImageTex, vUv);
|
|
if (material.rgb != vec3(1.0)) {
|
|
material = biCubic(tImageTex, vUv);
|
|
}
|
|
#else
|
|
vec4 material = biCubic(tImageTex, vUv);
|
|
#endif
|
|
#else
|
|
vec4 material = texture2D(tImageTex, vUv);
|
|
#endif
|
|
|
|
if (uIsoLevel >= 0.0) {
|
|
if (texture2D(tValueTex, vUv).r < uIsoLevel) discard;
|
|
|
|
material.a = uAlpha;
|
|
} else {
|
|
if (material.a == 0.0) discard;
|
|
|
|
material.a *= uAlpha;
|
|
}
|
|
|
|
float fragmentDepth = gl_FragCoord.z;
|
|
|
|
vec3 packedGroup = texture2D(tGroupTex, vUv).rgb;
|
|
float group = packedGroup == vec3(0.0) ? -1.0 : unpackRGBToInt(packedGroup);
|
|
|
|
// apply per-group transparency
|
|
#if defined(dTransparency) && (defined(dRenderVariant_pick) || defined(dRenderVariant_color) || defined(dRenderVariant_emissive) || defined(dRenderVariant_tracing))
|
|
float transparency = 0.0;
|
|
#if defined(dTransparencyType_instance)
|
|
transparency = readFromTexture(tTransparency, vInstance, uTransparencyTexDim).a;
|
|
#elif defined(dTransparencyType_groupInstance)
|
|
transparency = readFromTexture(tTransparency, vInstance * float(uGroupCount) + group, uTransparencyTexDim).a;
|
|
#endif
|
|
transparency *= uTransparencyStrength;
|
|
|
|
float ta = 1.0 - transparency;
|
|
if (transparency < 0.09) ta = 1.0; // hard cutoff looks better
|
|
|
|
#if defined(dRenderVariant_pick)
|
|
if (ta * uAlpha < uPickingAlphaThreshold)
|
|
discard; // ignore so the element below can be picked
|
|
#elif defined(dRenderVariant_emissive)
|
|
if (ta < 1.0)
|
|
discard; // emissive not supported with transparency
|
|
#elif defined(dRenderVariant_color) || defined(dRenderVariant_tracing)
|
|
material.a *= ta;
|
|
#endif
|
|
#endif
|
|
|
|
if ((uRenderMask == MaskOpaque && material.a < 1.0) ||
|
|
(uRenderMask == MaskTransparent && material.a == 1.0)
|
|
) {
|
|
discard;
|
|
}
|
|
|
|
#if defined(dNeedsMarker)
|
|
float marker = uMarker;
|
|
if (group == -1.0) {
|
|
marker = 0.0;
|
|
} else if (uMarker == -1.0) {
|
|
marker = readFromTexture(tMarker, vInstance * float(uGroupCount) + group, uMarkerTexDim).a;
|
|
marker = floor(marker * 255.0 + 0.5); // rounding required to work on some cards on win
|
|
}
|
|
#endif
|
|
|
|
#if defined(dRenderVariant_color) || defined(dRenderVariant_tracing) || defined(dRenderVariant_emissive)
|
|
float emissive = uEmissive;
|
|
if (group == -1.0) {
|
|
emissive = 0.0;
|
|
} else {
|
|
#ifdef dEmissive
|
|
#if defined(dEmissiveType_instance)
|
|
emissive += readFromTexture(tEmissive, vInstance, uEmissiveTexDim).a * uEmissiveStrength;
|
|
#elif defined(dEmissiveType_groupInstance)
|
|
emissive += readFromTexture(tEmissive, vInstance * float(uGroupCount) + group, uEmissiveTexDim).a * uEmissiveStrength;
|
|
#endif
|
|
#endif
|
|
}
|
|
#endif
|
|
|
|
#if defined(dRenderVariant_pick)
|
|
if (group == -1.0) discard;
|
|
|
|
#include check_picking_alpha
|
|
#ifdef requiredDrawBuffers
|
|
gl_FragColor = vec4(packIntToRGB(float(uObjectId)), 1.0);
|
|
gl_FragData[1] = vec4(packIntToRGB(vInstance), 1.0);
|
|
gl_FragData[2] = vec4(packIntToRGB(group), 1.0);
|
|
gl_FragData[3] = packDepthToRGBA(fragmentDepth);
|
|
#else
|
|
gl_FragColor = vColor;
|
|
if (uPickType == 1) {
|
|
gl_FragColor = vec4(packIntToRGB(float(uObjectId)), 1.0);
|
|
} else if (uPickType == 2) {
|
|
gl_FragColor = vec4(packIntToRGB(vInstance), 1.0);
|
|
} else {
|
|
gl_FragColor = vec4(packIntToRGB(group), 1.0);
|
|
}
|
|
#endif
|
|
#elif defined(dRenderVariant_depth)
|
|
if (uRenderMask == MaskOpaque) {
|
|
gl_FragColor = packDepthToRGBA(fragmentDepth);
|
|
} else if (uRenderMask == MaskTransparent) {
|
|
gl_FragColor = packDepthWithAlphaToRGBA(fragmentDepth, material.a);
|
|
}
|
|
#elif defined(dRenderVariant_marking)
|
|
if (uMarkingType == 1) {
|
|
if (marker > 0.0)
|
|
discard;
|
|
gl_FragColor = packDepthToRGBA(fragmentDepth);
|
|
} else {
|
|
if (marker == 0.0)
|
|
discard;
|
|
float depthTest = 1.0;
|
|
if (uMarkingDepthTest) {
|
|
depthTest = (fragmentDepth >= getDepthPacked(gl_FragCoord.xy / uDrawingBufferSize)) ? 1.0 : 0.0;
|
|
}
|
|
bool isHighlight = intMod(marker, 2.0) > 0.1;
|
|
float viewZ = depthToViewZ(uIsOrtho, fragmentDepth, uNear, uFar);
|
|
float fogFactor = smoothstep(uFogNear, uFogFar, abs(viewZ));
|
|
if (fogFactor == 1.0)
|
|
discard;
|
|
gl_FragColor = vec4(0.0, depthTest, isHighlight ? 1.0 : 0.0, 1.0 - fogFactor);
|
|
}
|
|
#elif defined(dRenderVariant_emissive)
|
|
gl_FragColor = vec4(emissive);
|
|
#elif defined(dRenderVariant_color) || defined(dRenderVariant_tracing)
|
|
#ifdef dUsePalette
|
|
if (material.rgb == vec3(1.0)) {
|
|
material.rgb = uPaletteDefault;
|
|
} else {
|
|
float v = ((material.r * 256.0 * 256.0 * 255.0 + material.g * 256.0 * 255.0 + material.b * 255.0) - 1.0) / PALETTE_SCALE;
|
|
material.rgb = texture2D(tPalette, vec2(v, 0.0)).rgb;
|
|
}
|
|
#endif
|
|
|
|
// mix material with overpaint
|
|
#if defined(dOverpaint)
|
|
vec4 overpaint = vec4(0.0);
|
|
if (group != -1.0) {
|
|
#if defined(dOverpaintType_instance)
|
|
overpaint = readFromTexture(tOverpaint, vInstance, uOverpaintTexDim);
|
|
#elif defined(dOverpaintType_groupInstance)
|
|
overpaint = readFromTexture(tOverpaint, vInstance * float(uGroupCount) + group, uOverpaintTexDim);
|
|
#endif
|
|
overpaint *= uOverpaintStrength;
|
|
}
|
|
material.rgb = mix(material.rgb, overpaint.rgb, overpaint.a);
|
|
#endif
|
|
|
|
gl_FragColor = material;
|
|
#include apply_marker_color
|
|
|
|
#if defined(dRenderVariant_color)
|
|
#include apply_fog
|
|
#include wboit_write
|
|
#include dpoit_write
|
|
#elif defined(dRenderVariant_tracing)
|
|
gl_FragData[1] = vec4(normalize(vViewPosition), emissive);
|
|
gl_FragData[2] = vec4(material.rgb, uDensity);
|
|
#endif
|
|
#endif
|
|
}
|
|
`;var SBe=ua(),y7e={apply_fog:Dfe,apply_interior_color:vfe,apply_light_color:Ffe,apply_marker_color:wfe,assign_clipping_varying:Rfe,assign_color_varying:Ufe,assign_group:Lfe,assign_marker_varying:Tfe,assign_material_color:Pfe,assign_position:Gfe,assign_size:Nfe,check_picking_alpha:Mfe,check_transparency:kfe,clip_instance:Hfe,clip_pixel:Vfe,color_frag_params:_fe,color_vert_params:Yfe,common_animation:Ofe,common_clip:Jfe,common_frag_params:zfe,common_vert_params:Kfe,common:jfe,fade_lod:Wfe,float_to_rgba:Xfe,light_frag_params:Zfe,normal_frag_params:qfe,read_from_texture:$fe,rgba_to_float:eBe,size_vert_params:tBe,texture3d_from_1d_trilinear:rBe,texture3d_from_2d_linear:nBe,texture3d_from_2d_nearest:oBe,wboit_write:iBe,dpoit_write:aBe},Q7e=/^(?!\/\/)\s*#include\s+(\S+)/gm,E7e=/#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,b7e=/[ \t]*\/\/.*\n/g,x7e=/[ \t]*\/\*[\s\S]*?\*\//g,S7e=/\n{2,}/g;function EBe(e){return e.replace(Q7e,(t,r)=>{let n=y7e[r];if(!n)throw new Error(`empty chunk, '${r}'`);return n}).trim().replace(b7e,`
|
|
`).replace(x7e,`
|
|
`).replace(S7e,`
|
|
`)}function D7e(e){return e.replace(E7e,v7e)}function v7e(e,t,r,n){let o="";for(let i=parseInt(t);i<parseInt(r);++i)o+=n.replace(/\[\s*i\s*\]/g,`[${i}]`).replace(/UNROLLED_LOOP_INDEX/g,`${i}`);return o}function F7e(e,t){return t.dLightCount&&(e=e.replace(/dLightCount/g,`${t.dLightCount.ref.value}`)),t.dClipObjectCount&&(e=e.replace(/dClipObjectCount/g,`${t.dClipObjectCount.ref.value}`)),e}function bBe(e,t){return D7e(F7e(e,t))}function Cn(e,t,r,n={},o={},i){return{id:SBe(),name:e,vert:EBe(t),frag:EBe(r),extensions:n,outTypes:o,ignoreDefine:i}}function M2(e,t,r){if(t.startsWith("color")||t==="tracing"){if(e==="dLightCount")return!!r.dIgnoreLight?.ref.value}else{let n=["dSubstanceType","dSubstance","dColorMarker","dCelShaded","dLightCount"];return t!=="depth"&&!t.startsWith("pick")&&n.push("dXrayShaded"),t!=="emissive"&&n.push("dColorType","dUsePalette","dOverpaintType","dOverpaint","dEmissiveType","dEmissive"),n.includes(e)}return!1}function DN(e,t,r){return e==="dLightCount"?!0:M2(e,t,r)}var DBe=Cn("points",ABe,sBe,{drawBuffers:"optional"},{},DN),vBe=Cn("spheres",cBe,lBe,{fragDepth:"required",drawBuffers:"optional"},{},M2),FBe=Cn("cylinders",uBe,gBe,{fragDepth:"required",drawBuffers:"optional"},{},M2),wBe=Cn("text",mBe,dBe,{fragDepth:"optional",drawBuffers:"optional"},{},DN),RBe=Cn("lines",pBe,fBe,{drawBuffers:"optional"},{},DN),vN=Cn("mesh",BBe,IBe,{drawBuffers:"optional"},{},M2),UBe=Cn("direct-volume",CBe,hBe,{fragDepth:"optional",drawBuffers:"optional"},{},M2),LBe=Cn("image",yBe,QBe,{drawBuffers:"optional"},{},DN);function xBe(e,t){if(e===void 0)return"";let r=e.dRenderVariant?.ref.value||"",n=[];for(let o in e){if(t?.(o,r,e))continue;let a=e[o].ref.value;a!==void 0&&(typeof a=="string"?n.push(`#define ${o}_${a}`):typeof a=="number"?n.push(`#define ${o} ${a}`):typeof a=="boolean"?a&&n.push(`#define ${o}`):Or(a))}return n.join(`
|
|
`)+`
|
|
`}function w7e(e,t){let r=[];if(t.drawBuffers){if(e.drawBuffers)r.push("#define requiredDrawBuffers");else if(t.drawBuffers==="required")throw new Error("required 'GL_EXT_draw_buffers' extension not available")}if(t.multiDraw){if(e.multiDraw)r.push("#extension GL_ANGLE_multi_draw : require"),r.push("#define enabledMultiDraw");else if(t.multiDraw==="required")throw new Error("required 'GL_ANGLE_multi_draw' extension not available")}return r.join(`
|
|
`)+`
|
|
`}function R7e(e,t){let r=["#extension GL_OES_standard_derivatives : enable"];if(t.fragDepth){if(e.fragDepth)r.push("#extension GL_EXT_frag_depth : enable"),r.push("#define enabledFragDepth");else if(t.fragDepth==="required")throw new Error("required 'GL_EXT_frag_depth' extension not available")}if(t.drawBuffers){if(e.drawBuffers)r.push("#extension GL_EXT_draw_buffers : require"),r.push("#define requiredDrawBuffers"),r.push("#define gl_FragColor gl_FragData[0]");else if(t.drawBuffers==="required")throw new Error("required 'GL_EXT_draw_buffers' extension not available")}if(t.shaderTextureLod){if(e.shaderTextureLod)r.push("#extension GL_EXT_shader_texture_lod : enable"),r.push("#define enabledShaderTextureLod");else if(t.shaderTextureLod==="required")throw new Error("required 'GL_EXT_shader_texture_lod' extension not available")}return e.depthTexture&&r.push("#define depthTextureSupport"),r.join(`
|
|
`)+`
|
|
`}var U7e=`
|
|
#define attribute in
|
|
#define varying out
|
|
#define texture2D texture
|
|
`,L7e=`
|
|
#define varying in
|
|
#define texture2D texture
|
|
#define textureCube texture
|
|
#define texture2DLodEXT textureLod
|
|
#define textureCubeLodEXT textureLod
|
|
|
|
#define gl_FragColor out_FragData0
|
|
#define gl_FragDepthEXT gl_FragDepth
|
|
`;function T7e(e,t){let r=["#version 300 es"];if(t.drawBuffers&&e.drawBuffers&&r.push("#define requiredDrawBuffers"),t.multiDraw){if(e.multiDraw)r.push("#extension GL_ANGLE_multi_draw : require"),r.push("#define enabledMultiDraw");else if(t.multiDraw==="required")throw new Error("required 'GL_ANGLE_multi_draw' extension not available")}if(t.clipCullDistance){if(e.clipCullDistance)r.push("#extension GL_ANGLE_clip_cull_distance : enable"),r.push("#define enabledClipCullDistance");else if(t.clipCullDistance==="required")throw new Error("required 'GL_ANGLE_clip_cull_distance' extension not available")}if(t.conservativeDepth){if(e.conservativeDepth)r.push("#extension GL_EXT_conservative_depth : enable"),r.push("#define enabledConservativeDepth");else if(t.conservativeDepth==="required")throw new Error("required 'GL_EXT_conservative_depth' extension not available")}if(t.multiview2){if(e.multiview2)r.push("#extension GL_OVR_multiview2 : require"),r.push("#define enabledMultiview2");else if(t.multiview2==="required")throw new Error("required 'GL_OVR_multiview2' extension not available")}return e.noNonInstancedActiveAttribs&&r.push("#define noNonInstancedActiveAttribs"),r.push(U7e),r.join(`
|
|
`)+`
|
|
`}function P7e(e,t,r,n){let o=["#version 300 es",`layout(location = 0) out highp ${n[0]||"vec4"} out_FragData0;`];if(r.fragDepth&&e.fragDepth&&o.push("#define enabledFragDepth"),r.drawBuffers&&e.drawBuffers){o.push("#define requiredDrawBuffers");for(let i=1,a=t.maxDrawBuffers;i<a;++i)o.push(`layout(location = ${i}) out highp ${n[i]||"vec4"} out_FragData${i};`)}return r.shaderTextureLod&&e.shaderTextureLod&&o.push("#define enabledShaderTextureLod"),e.depthTexture&&o.push("#define depthTextureSupport"),o.push(L7e),o.join(`
|
|
`)+`
|
|
`}function G7e(e){return e.replace(/gl_FragData\[([0-9]+)\]/g,"out_FragData$1")}function TBe(e,t,r,n,o){let i=xBe(n,o.ignoreDefine),a=xBe(n,o.ignoreDefine),A=mr(e)?T7e(t,o.extensions):w7e(t,o.extensions),s=mr(e)?P7e(t,r,o.extensions,o.outTypes):R7e(t,o.extensions),c=mr(e)?G7e(o.frag):o.frag;return{id:SBe(),name:o.name,vert:`${A}${i}${bBe(o.vert,n)}`,frag:`${s}${a}${bBe(c,n)}`,extensions:o.extensions,outTypes:o.outTypes}}function NBe(e,t){switch(t){case"b":case"b[]":return e.BOOL;case"f":case"f[]":return e.FLOAT;case"i":case"i[]":return e.INT;case"v2":case"v2[]":return e.FLOAT_VEC2;case"v3":case"v3[]":return e.FLOAT_VEC3;case"v4":case"v4[]":return e.FLOAT_VEC4;case"q":case"q[]":return e.FLOAT_VEC4;case"iv2":case"iv2[]":return e.INT_VEC2;case"iv3":case"iv3[]":return e.INT_VEC3;case"iv4":case"iv4[]":return e.INT_VEC4;case"m3":case"m3[]":return e.FLOAT_MAT3;case"m4":case"m4[]":return e.FLOAT_MAT4;default:console.error(`unknown uniform kind '${t}'`)}}function MBe(e){return e.endsWith("[]")}function N7e(e,t,r){e.uniform1f(t,r)}function M7e(e,t,r){e.uniform1fv(t,r)}function k7e(e,t,r){e.uniform1i(t,r)}function H7e(e,t,r){e.uniform1iv(t,r)}function V7e(e,t,r){e.uniform2fv(t,r)}function _7e(e,t,r){e.uniform3fv(t,r)}function PBe(e,t,r){e.uniform4fv(t,r)}function Y7e(e,t,r){e.uniform2iv(t,r)}function O7e(e,t,r){e.uniform3iv(t,r)}function J7e(e,t,r){e.uniform4iv(t,r)}function z7e(e,t,r){e.uniformMatrix3fv(t,!1,r)}function K7e(e,t,r){e.uniformMatrix4fv(t,!1,r)}function GBe(e){switch(e){case"f":return N7e;case"f[]":return M7e;case"i":case"t":case"b":return k7e;case"i[]":case"t[]":case"b[]":return H7e;case"v2":case"v2[]":return V7e;case"v3":case"v3[]":return _7e;case"v4":case"v4[]":return PBe;case"q":case"q[]":return PBe;case"iv2":case"iv2[]":return Y7e;case"iv3":case"iv3[]":return O7e;case"iv4":case"iv4[]":return J7e;case"m3":case"m3[]":return z7e;case"m4":case"m4[]":return K7e}}function kBe(e){let t={};return Object.keys(e).forEach(r=>{let n=e[r];n.type==="uniform"?t[r]=GBe(n.kind):n.type==="texture"&&(t[r]=GBe("t"))}),t}function HBe(e){let t={};return Object.keys(e).forEach(r=>{t[r]=D.create(ii(e[r].ref.value))}),t}var VBe=ua();function j7e(e,t){switch(t){case"static":return e.STATIC_DRAW;case"dynamic":return e.DYNAMIC_DRAW;case"stream":return e.STREAM_DRAW;default:Or(t)}}function W7e(e,t){if(t instanceof Uint8Array)return e.UNSIGNED_BYTE;if(t instanceof Int8Array)return e.BYTE;if(t instanceof Uint16Array)return e.UNSIGNED_SHORT;if(t instanceof Int16Array)return e.SHORT;if(t instanceof Uint32Array)return e.UNSIGNED_INT;if(t instanceof Int32Array)return e.INT;if(t instanceof Float32Array)return e.FLOAT;Or(t)}function X7e(e,t){switch(t){case"attribute":return e.ARRAY_BUFFER;case"elements":return e.ELEMENT_ARRAY_BUFFER;case"uniform":if(mr(e))return e.UNIFORM_BUFFER;throw new Error("WebGL2 is required for uniform buffers");case"pixel-pack":if(mr(e))return e.PIXEL_PACK_BUFFER;throw new Error("WebGL2 is required for pixel-pack buffers")}}function FN(e){let t=e.createBuffer();if(t===null)throw new Error("Could not create WebGL buffer");return t}function _Be(e,t,r,n){let o=FN(e),i=j7e(e,r),a=X7e(e,n),A=W7e(e,t),s=t.BYTES_PER_ELEMENT,c=t.length;function l(g){e.bindBuffer(a,o),e.bufferData(a,g,i)}l(t);let u=!1;return{id:VBe(),_usageHint:i,_bufferType:a,_dataType:A,_bpe:s,length:c,getByteCount:()=>s*c,getBuffer:()=>o,updateData:l,updateSubData:(g,m,p)=>{e.bindBuffer(a,o),p-m===g.length?e.bufferSubData(a,0,g):e.bufferSubData(a,m*s,g.subarray(m,m+p))},reset:()=>{o=FN(e),l(t)},destroy:()=>{u||(e.deleteBuffer(o),u=!0)}}}function YBe(e,t,r){switch(t){case"float32":switch(r){case 1:return e.FLOAT;case 2:return e.FLOAT_VEC2;case 3:return e.FLOAT_VEC3;case 4:return e.FLOAT_VEC4;case 16:return e.FLOAT_MAT4}default:Or(t)}}function OBe(e,t,r,n,o,i,a="static"){let{instancedArrays:A}=r,s=_Be(e,n,a,"attribute"),{_bufferType:c,_dataType:l,_bpe:u}=s;return{...s,divisor:i,bind:g=>{if(e.bindBuffer(c,s.getBuffer()),o===16)for(let m=0;m<4;++m)t.enableVertexAttrib(g+m),e.vertexAttribPointer(g+m,4,l,!1,16*u,m*4*u),A.vertexAttribDivisor(g+m,i);else t.enableVertexAttrib(g),e.vertexAttribPointer(g,o,l,!1,0,0),A.vertexAttribDivisor(g,i)},changeOffset:(g,m)=>{let p=m*u*o;if(e.bindBuffer(c,s.getBuffer()),o===16)for(let d=0;d<4;++d)e.vertexAttribPointer(g+d,4,l,!1,16*u,d*4*u+p);else e.vertexAttribPointer(g,o,l,!1,0,p)}}}function JBe(e,t,r){let n=[];return Object.keys(t).forEach(o=>{let i=t[o];i.type==="attribute"&&(n[n.length]=[o,e.resources.attribute(r[o].ref.value,i.itemSize,i.divisor)])}),n}function zBe(e,t,r="static"){let n=_Be(e,t,r,"elements");return{...n,bind:()=>{e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,n.getBuffer())}}}function KBe(e,t,r,n){let o=FN(e),i=Zj(e,t,n),a=wN(e,r,n),A=Xj(r,n),s=0,c=0;function l(m,p,d,f){s=d,c=f,e.bindBuffer(e.PIXEL_PACK_BUFFER,o),e.bufferData(e.PIXEL_PACK_BUFFER,d*f*A,e.STREAM_READ),e.readPixels(m,p,d,f,a,i,0),e.bindBuffer(e.PIXEL_PACK_BUFFER,null)}function u(m){e.bindBuffer(e.PIXEL_PACK_BUFFER,o),e.getBufferSubData(e.PIXEL_PACK_BUFFER,0,m),e.bindBuffer(e.PIXEL_PACK_BUFFER,null)}let g=!1;return{id:VBe(),_type:i,_format:a,_bpe:A,getByteCount:()=>A*s*c,read:l,getSubData:u,reset:()=>{o=FN(e)},destroy:()=>{g||(e.deleteBuffer(o),g=!0)}}}var Z7e=ua();function q7e(e,t,r){let n={};return Object.keys(r).forEach(o=>{let i=r[o];if(i.type==="attribute"){let a=e.getAttribLocation(t,o);n[o]=a}else if(i.type==="uniform"){let a=e.getUniformLocation(t,o);a===null&&MBe(i.kind)&&(a=e.getUniformLocation(t,o+"[0]")),n[o]=a}else if(i.type==="texture"){let a=e.getUniformLocation(t,o);n[o]=a}}),n}function $7e(e,t,r){let n=e.getProgramParameter(t,e.ACTIVE_ATTRIBUTES);for(let o=0;o<n;++o){let i=e.getActiveAttrib(t,o);if(i){let{name:a,type:A}=i;if(a.startsWith("__activeAttribute")||a==="gl_InstanceID"||a==="gl_VertexID"||a==="gl_DrawID"||a==="gl_ViewID_OVR")continue;let s=r[a];if(s===void 0)throw new Error(`missing 'uniform' or 'texture' with name '${a}' in schema`);if(s.type!=="attribute")throw new Error(`'${a}' must be of type 'attribute' but is '${s.type}'`);let c=YBe(e,s.kind,s.itemSize);if(c!==A)throw new Error(`unexpected attribute type '${c}' for ${a}, expected '${A}'`)}}}function e$e(e,t,r){let n=e.getProgramParameter(t,e.ACTIVE_UNIFORMS);for(let o=0;o<n;++o){let i=e.getActiveUniform(t,o);if(i){let{name:a,type:A}=i;if(a.startsWith("__activeUniform")||a==="gl_InstanceID"||a==="gl_VertexID"||a==="gl_DrawID"||a==="gl_ViewID_OVR")continue;let s=a.replace(/[[0-9]+\]$/,""),c=r[s];if(c===void 0)throw new Error(`missing 'uniform' or 'texture' with name '${a}' in schema`);if(c.type==="uniform"){if(NBe(e,c.kind)!==A)throw new Error(`unexpected uniform type for ${a}`)}else if(c.type==="texture"){if(c.kind==="image-float32"||c.kind==="image-uint8"){if(A!==e.SAMPLER_2D)throw new Error(`unexpected sampler type for '${a}'`)}else if(c.kind==="volume-float32"||c.kind==="volume-uint8")if(mr(e)){if(A!==e.SAMPLER_3D)throw new Error(`unexpected sampler type for '${a}'`)}else throw new Error("WebGL2 is required to use SAMPLER_3D")}else throw new Error(`'${a}' must be of type 'uniform' or 'texture' but is '${c.type}'`)}}}function t$e(e,t){if(!e.getProgramParameter(t,e.LINK_STATUS))throw new Error(`Could not compile WebGL program.
|
|
|
|
${e.getProgramInfoLog(t)}`)}function RN(e){let t=e.createProgram();if(t===null)throw new Error("Could not create WebGL program");return t}function r$e(e){if(typeof e!="string")throw new Error(`unknown program variant: ${e}`);return e.startsWith("color")?"color":e.startsWith("pick")?"pick":e}function jBe(e,t,r,n,o,i){let{defineValues:a,shaderCode:A,schema:s}=i,c=RN(e),l=Z7e(),u=r$e(a.dRenderVariant.ref.value),g=TBe(e,r,n,a,A),m=o("vert",g.vert),p=o("frag",g.frag),d,f,I=!1,C=!1,y=!1;function Q(){m.attach(c),p.attach(c),e.linkProgram(c),ir&&t$e(e,c),I=!0}u==="compute"&&Q();function E(){d=q7e(e,c,s),f=kBe(s),ir&&($7e(e,c,s),e$e(e,c,s)),C=!0}return{id:l,variant:u,isReady:()=>C,link:()=>{I||Q()},finalize(b){return I||Q(),!C&&(b||!r.parallelShaderCompile||e.getProgramParameter(c,r.parallelShaderCompile.COMPLETION_STATUS))&&E(),C},use:()=>{if(ir&&!C)throw new Error(`program not finalized: ${u}`);t.currentProgramId=l,e.useProgram(c)},setUniforms:b=>{for(let x=0,S=b.length;x<S;++x){let[w,R]=b[x];if(R){let T=d[w];T!==null&&f[w](e,T,R.ref.value)}}},uniform:(b,x)=>{let S=d[b];S!==null&&f[b](e,S,x)},bindAttributes:b=>{t.clearVertexAttribsState();for(let x=0,S=b.length;x<S;++x){let[w,R]=b[x],T=d[w];T!==-1&&R.bind(T)}t.disableUnusedVertexAttribs()},offsetAttributes:(b,x)=>{for(let S=0,w=b.length;S<w;++S){let[R,T]=b[S],L=d[R];L!==-1&&T.changeOffset(L,x)}},bindTextures:(b,x)=>{for(let S=0,w=b.length;S<w;++S){let[R,T]=b[S],L=d[R];L!=null&&(T.bind(S+x),f[R](e,L,S+x))}},reset:()=>{c=RN(e),I&&Q(),C&&E()},destroy:()=>{y||(m.destroy(),p.destroy(),e.deleteProgram(c),y=!0)}}}var n$e=ua();function o$e(e){let t=e.split(`
|
|
`);for(let r=0;r<t.length;++r)t[r]=r+1+": "+t[r];return t.join(`
|
|
`)}function k2(e,t){let{type:r,source:n}=t,o=e.createShader(r==="vert"?e.VERTEX_SHADER:e.FRAGMENT_SHADER);if(o===null)throw new Error(`Error creating ${r} shader`);if(e.shaderSource(o,n),e.compileShader(o),ir&&e.getShaderParameter(o,e.COMPILE_STATUS)===!1)throw console.warn(`'${r}' shader info log '${e.getShaderInfoLog(o)}'
|
|
${o$e(n)}`),new Error(`Error compiling ${r} shader`);return o}function WBe(e,t){let r=k2(e,t);return{id:n$e(),attach:n=>{e.attachShader(n,r)},reset:()=>{r=k2(e,t)},destroy:()=>{e.deleteShader(r)}}}function i$e(e,t=0){return{value:e,usageCount:t}}function a$e(e){return{free:()=>{e.usageCount-=1},value:e.value}}function qj(e,t,r){let n=new Map,o=[];return{get:i=>{let a=e(i),A=n.get(a);return A||(A=i$e(t(i)),n.set(a,A),o.push(A.value)),A.usageCount+=1,a$e(A)},clear:()=>{n.forEach((i,a)=>{i.usageCount<=0&&(i.usageCount<0&&console.warn("Reference usageCount below zero."),r(i.value),n.delete(a),Tf(o,i.value))})},get count(){return n.size},values:o,dispose:()=>{n.forEach(i=>r(i.value)),n.clear(),o.length=0}}}var A$e=ua();function s$e(e,t){switch(t){case"depth16":return e.DEPTH_COMPONENT16;case"stencil8":return e.STENCIL_INDEX8;case"rgba4":return e.RGBA4;case"depth-stencil":return e.DEPTH_STENCIL;case"depth24":if(mr(e))return e.DEPTH_COMPONENT24;throw new Error("WebGL2 needed for `depth24` renderbuffer format");case"depth32f":if(mr(e))return e.DEPTH_COMPONENT32F;throw new Error("WebGL2 needed for `depth32f` renderbuffer format");case"depth24-stencil8":if(mr(e))return e.DEPTH24_STENCIL8;throw new Error("WebGL2 needed for `depth24-stencil8` renderbuffer format");case"depth32f-stencil8":if(mr(e))return e.DEPTH32F_STENCIL8;throw new Error("WebGL2 needed for `depth32f-stencil8` renderbuffer format")}}function c$e(e){switch(e){case"depth16":return 4;case"stencil8":return 2;case"rgba4":return 4;case"depth-stencil":return 4;case"depth24":return 3;case"depth32f":return 4;case"depth24-stencil8":return 4;case"depth32f-stencil8":return 5}}function l$e(e,t){switch(t){case"depth":return e.DEPTH_ATTACHMENT;case"stencil":return e.STENCIL_ATTACHMENT;case"depth-stencil":return e.DEPTH_STENCIL_ATTACHMENT;case"color0":return e.COLOR_ATTACHMENT0}}function XBe(e){let t=e.createRenderbuffer();if(t===null)throw new Error("Could not create WebGL renderbuffer");return t}function ZBe(e,t,r,n,o){let i=XBe(e),a=()=>e.bindRenderbuffer(e.RENDERBUFFER,i),A=s$e(e,t),s=l$e(e,r);function c(){a(),e.renderbufferStorage(e.RENDERBUFFER,A,n,o)}c();let l=!1;return{id:A$e(),getByteCount:()=>c$e(t)*n*o,bind:a,attachFramebuffer:u=>{u.bind(),a(),e.framebufferRenderbuffer(e.FRAMEBUFFER,s,e.RENDERBUFFER,i),ir&&yD(e)},detachFramebuffer:u=>{u.bind(),a(),e.framebufferRenderbuffer(e.FRAMEBUFFER,s,e.RENDERBUFFER,null),ir&&yD(e)},setSize:(u,g)=>{n=u,o=g,c()},reset:()=>{i=XBe(e),c()},destroy:()=>{l||(e.deleteRenderbuffer(i),l=!0)}}}var u$e=ua();function qBe(e){let{vertexArrayObject:t}=e;if(!t)throw new Error("VertexArrayObject not supported");let r=t.createVertexArray();if(!r)throw new Error("Could not create WebGL vertex array");return r}function $Be(e){let{vertexArrayObject:t}=e;if(t===null)throw new Error("VertexArrayObject not supported");return t}function eIe(e,t,r,n,o){let i=u$e(),a=qBe(t),A=$Be(t);function s(){A.bindVertexArray(a),o&&o.bind(),r.bindAttributes(n),A.bindVertexArray(null),c=!0}let c=!1,l=!1;return{id:i,bind:()=>{c||s(),A.bindVertexArray(a)},update:s,reset:()=>{a=qBe(t),A=$Be(t),c=!1},destroy:()=>{l||(o&&(A.bindVertexArray(a),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,null)),A.deleteVertexArray(a),l=!0)}}}function g$e(e){return typeof e=="boolean"?e?1:0:typeof e=="number"?e*1e4:Ob(e)}function tIe(e){return{...e.value,destroy:()=>{e.free()}}}function rIe(e,t,r,n,o){let i={attribute:new Set,elements:new Set,pixelPack:new Set,framebuffer:new Set,program:new Set,renderbuffer:new Set,shader:new Set,texture:new Set,cubeTexture:new Set,vertexArray:new Set};function a(u,g){return i[u].add(g),r.resourceCounts[u]+=1,{...g,destroy:()=>{g.destroy(),i[u].delete(g),r.resourceCounts[u]-=1}}}let A=qj(u=>JSON.stringify(u),u=>a("shader",WBe(e,u)),u=>{u.destroy()});function s(u,g){return tIe(A.get({type:u,source:g}))}let c=new Set,l=qj(u=>{let g=[u.shaderCode.id],m=u.defineValues.dRenderVariant?.ref.value||"";return Object.keys(u.defineValues).forEach(p=>{u.shaderCode.ignoreDefine?.(p,m,u.defineValues)||g.push(Ob(p),g$e(u.defineValues[p].ref.value))}),na(g).toString()},u=>{let g=jBe(e,t,n,o,s,u);return g.variant!=="compute"&&c.add(g),a("program",g)},u=>{c.delete(u),u.destroy()});return{attribute:(u,g,m,p)=>a("attribute",OBe(e,t,n,u,g,m,p)),elements:(u,g)=>a("elements",zBe(e,u,g)),pixelPack:(u,g)=>{if(!mr(e))throw new Error("WebGL2 is required for pixel-pack buffers");return a("pixelPack",KBe(e,n,u,g))},framebuffer:()=>a("framebuffer",Ype(e)),program:(u,g,m)=>tIe(l.get({defineValues:u,shaderCode:g,schema:m})),renderbuffer:(u,g,m,p)=>a("renderbuffer",ZBe(e,u,g,m,p)),shader:s,texture:(u,g,m,p)=>a("texture",nIe(e,n,u,g,m,p)),cubeTexture:(u,g,m)=>a("cubeTexture",oIe(e,u,g,m)),vertexArray:(u,g,m)=>a("vertexArray",eIe(e,n,u,g,m)),getByteCounts:()=>{let u=0;i.texture.forEach(I=>{u+=I.getByteCount()});let g=0;i.cubeTexture.forEach(I=>{g+=I.getByteCount()});let m=0;i.attribute.forEach(I=>{m+=I.getByteCount()});let p=0;i.elements.forEach(I=>{p+=I.getByteCount()});let d=0;i.pixelPack.forEach(I=>{d+=I.getByteCount()});let f=0;return i.renderbuffer.forEach(I=>{f+=I.getByteCount()}),{texture:u,cubeTexture:g,attribute:m,elements:p,pixelPack:d,renderbuffer:f}},linkPrograms:u=>{for(let g of c)u&&!u.includes(g.variant)||g.link()},finalizePrograms:(u,g)=>{let m=!0,p=0;for(let C of c)C.isReady()&&c.delete(C),(!u||u.includes(C.variant))&&(m=!1,p+=1);if(m)return!0;let d=!0,f=0,I=co();for(let C of c)if(!(u&&!u.includes(C.variant))&&(C.finalize(g)?(c.delete(C),f+=1):d=!1,!g&&co()-I>16)){d=!1;break}return at&&console.log(`Finalized ${f} of ${p} programs (${u?u.join(", "):"all"}) in ${(co()-I).toFixed(2)} ms`),d},reset:()=>{i.attribute.forEach(u=>u.reset()),i.elements.forEach(u=>u.reset()),i.pixelPack.forEach(u=>u.reset()),i.framebuffer.forEach(u=>u.reset()),i.renderbuffer.forEach(u=>u.reset()),i.shader.forEach(u=>u.reset()),i.program.forEach(u=>u.reset()),i.vertexArray.forEach(u=>u.reset()),i.texture.forEach(u=>u.reset()),i.cubeTexture.forEach(u=>u.reset())},destroy:()=>{i.attribute.forEach(u=>u.destroy()),i.elements.forEach(u=>u.destroy()),i.pixelPack.forEach(u=>u.destroy()),i.framebuffer.forEach(u=>u.destroy()),i.renderbuffer.forEach(u=>u.destroy()),i.shader.forEach(u=>u.destroy()),i.program.forEach(u=>u.destroy()),i.vertexArray.forEach(u=>u.destroy()),i.texture.forEach(u=>u.destroy()),i.cubeTexture.forEach(u=>u.destroy()),A.clear(),l.clear(),c.clear()}}}var m$e=ua();function iIe(e,t,r,n,o=!0,i="uint8",a="nearest",A="rgba"){if(A==="alpha"&&!mr(e))throw new Error("cannot render to alpha format in webgl1");let s=t.framebuffer(),c=i==="fp16"?t.texture("image-float16",A,"fp16",a):i==="float32"?t.texture("image-float32",A,"float",a):t.texture("image-uint8",A,"ubyte",a),l=o?mr(e)?t.renderbuffer("depth32f","depth",r,n):t.renderbuffer("depth16","depth",r,n):null;function u(){c.define(r,n),c.attachFramebuffer(s,"color0"),l&&l.attachFramebuffer(s)}u();let g=!1;return{id:m$e(),texture:c,framebuffer:s,depthRenderbuffer:l,getByteCount:()=>c.getByteCount()+(l?l.getByteCount():0),getWidth:()=>r,getHeight:()=>n,bind:()=>{s.bind()},setSize:(m,p)=>{r===m&&n===p||(r=m,n=p,c.define(r,n),l&&l.setSize(r,n))},reset:()=>{u()},destroy:()=>{g||(c.destroy(),s.destroy(),l&&l.destroy(),g=!0)}}}var $j=function(e,t){return $j=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(r,n){r.__proto__=n}||function(r,n){for(var o in n)Object.prototype.hasOwnProperty.call(n,o)&&(r[o]=n[o])},$j(e,t)};function ku(e,t){if(typeof t!="function"&&t!==null)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");$j(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}function aIe(e,t,r,n){function o(i){return i instanceof r?i:new r(function(a){a(i)})}return new(r||(r=Promise))(function(i,a){function A(l){try{c(n.next(l))}catch(u){a(u)}}function s(l){try{c(n.throw(l))}catch(u){a(u)}}function c(l){l.done?i(l.value):o(l.value).then(A,s)}c((n=n.apply(e,t||[])).next())})}function UN(e,t){var r={label:0,sent:function(){if(i[0]&1)throw i[1];return i[1]},trys:[],ops:[]},n,o,i,a=Object.create((typeof Iterator=="function"?Iterator:Object).prototype);return a.next=A(0),a.throw=A(1),a.return=A(2),typeof Symbol=="function"&&(a[Symbol.iterator]=function(){return this}),a;function A(c){return function(l){return s([c,l])}}function s(c){if(n)throw new TypeError("Generator is already executing.");for(;a&&(a=0,c[0]&&(r=0)),r;)try{if(n=1,o&&(i=c[0]&2?o.return:c[0]?o.throw||((i=o.return)&&i.call(o),0):o.next)&&!(i=i.call(o,c[1])).done)return i;switch(o=0,i&&(c=[c[0]&2,i.value]),c[0]){case 0:case 1:i=c;break;case 4:return r.label++,{value:c[1],done:!1};case 5:r.label++,o=c[1],c=[0];continue;case 7:c=r.ops.pop(),r.trys.pop();continue;default:if(i=r.trys,!(i=i.length>0&&i[i.length-1])&&(c[0]===6||c[0]===2)){r=0;continue}if(c[0]===3&&(!i||c[1]>i[0]&&c[1]<i[3])){r.label=c[1];break}if(c[0]===6&&r.label<i[1]){r.label=i[1],i=c;break}if(i&&r.label<i[2]){r.label=i[2],r.ops.push(c);break}i[2]&&r.ops.pop(),r.trys.pop();continue}c=t.call(e,r)}catch(l){c=[6,l],o=0}finally{n=i=0}if(c[0]&5)throw c[1];return{value:c[0]?c[1]:void 0,done:!0}}}function mh(e){var t=typeof Symbol=="function"&&Symbol.iterator,r=t&&e[t],n=0;if(r)return r.call(e);if(e&&typeof e.length=="number")return{next:function(){return e&&n>=e.length&&(e=void 0),{value:e&&e[n++],done:!e}}};throw new TypeError(t?"Object is not iterable.":"Symbol.iterator is not defined.")}function Yf(e,t){var r=typeof Symbol=="function"&&e[Symbol.iterator];if(!r)return e;var n=r.call(e),o,i=[],a;try{for(;(t===void 0||t-- >0)&&!(o=n.next()).done;)i.push(o.value)}catch(A){a={error:A}}finally{try{o&&!o.done&&(r=n.return)&&r.call(n)}finally{if(a)throw a.error}}return i}function Of(e,t,r){if(r||arguments.length===2)for(var n=0,o=t.length,i;n<o;n++)(i||!(n in t))&&(i||(i=Array.prototype.slice.call(t,0,n)),i[n]=t[n]);return e.concat(i||Array.prototype.slice.call(t))}function B0(e){return this instanceof B0?(this.v=e,this):new B0(e)}function AIe(e,t,r){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var n=r.apply(e,t||[]),o,i=[];return o=Object.create((typeof AsyncIterator=="function"?AsyncIterator:Object).prototype),A("next"),A("throw"),A("return",a),o[Symbol.asyncIterator]=function(){return this},o;function a(m){return function(p){return Promise.resolve(p).then(m,u)}}function A(m,p){n[m]&&(o[m]=function(d){return new Promise(function(f,I){i.push([m,d,f,I])>1||s(m,d)})},p&&(o[m]=p(o[m])))}function s(m,p){try{c(n[m](p))}catch(d){g(i[0][3],d)}}function c(m){m.value instanceof B0?Promise.resolve(m.value.v).then(l,u):g(i[0][2],m)}function l(m){s("next",m)}function u(m){s("throw",m)}function g(m,p){m(p),i.shift(),i.length&&s(i[0][0],i[0][1])}}function sIe(e){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var t=e[Symbol.asyncIterator],r;return t?t.call(e):(e=typeof mh=="function"?mh(e):e[Symbol.iterator](),r={},n("next"),n("throw"),n("return"),r[Symbol.asyncIterator]=function(){return this},r);function n(i){r[i]=e[i]&&function(a){return new Promise(function(A,s){a=e[i](a),o(A,s,a.done,a.value)})}}function o(i,a,A,s){Promise.resolve(s).then(function(c){i({value:c,done:A})},a)}}function _i(e){return typeof e=="function"}function LN(e){var t=function(n){Error.call(n),n.stack=new Error().stack},r=e(t);return r.prototype=Object.create(Error.prototype),r.prototype.constructor=r,r}var TN=LN(function(e){return function(r){e(this),this.message=r?r.length+` errors occurred during unsubscription:
|
|
`+r.map(function(n,o){return o+1+") "+n.toString()}).join(`
|
|
`):"",this.name="UnsubscriptionError",this.errors=r}});function I0(e,t){if(e){var r=e.indexOf(t);0<=r&&e.splice(r,1)}}var gQ=(function(){function e(t){this.initialTeardown=t,this.closed=!1,this._parentage=null,this._finalizers=null}return e.prototype.unsubscribe=function(){var t,r,n,o,i;if(!this.closed){this.closed=!0;var a=this._parentage;if(a)if(this._parentage=null,Array.isArray(a))try{for(var A=mh(a),s=A.next();!s.done;s=A.next()){var c=s.value;c.remove(this)}}catch(d){t={error:d}}finally{try{s&&!s.done&&(r=A.return)&&r.call(A)}finally{if(t)throw t.error}}else a.remove(this);var l=this.initialTeardown;if(_i(l))try{l()}catch(d){i=d instanceof TN?d.errors:[d]}var u=this._finalizers;if(u){this._finalizers=null;try{for(var g=mh(u),m=g.next();!m.done;m=g.next()){var p=m.value;try{cIe(p)}catch(d){i=i??[],d instanceof TN?i=Of(Of([],Yf(i)),Yf(d.errors)):i.push(d)}}}catch(d){n={error:d}}finally{try{m&&!m.done&&(o=g.return)&&o.call(g)}finally{if(n)throw n.error}}}if(i)throw new TN(i)}},e.prototype.add=function(t){var r;if(t&&t!==this)if(this.closed)cIe(t);else{if(t instanceof e){if(t.closed||t._hasParent(this))return;t._addParent(this)}(this._finalizers=(r=this._finalizers)!==null&&r!==void 0?r:[]).push(t)}},e.prototype._hasParent=function(t){var r=this._parentage;return r===t||Array.isArray(r)&&r.includes(t)},e.prototype._addParent=function(t){var r=this._parentage;this._parentage=Array.isArray(r)?(r.push(t),r):r?[r,t]:t},e.prototype._removeParent=function(t){var r=this._parentage;r===t?this._parentage=null:Array.isArray(r)&&I0(r,t)},e.prototype.remove=function(t){var r=this._finalizers;r&&I0(r,t),t instanceof e&&t._removeParent(this)},e.EMPTY=(function(){var t=new e;return t.closed=!0,t})(),e})();var e9=gQ.EMPTY;function PN(e){return e instanceof gQ||e&&"closed"in e&&_i(e.remove)&&_i(e.add)&&_i(e.unsubscribe)}function cIe(e){_i(e)?e():e.unsubscribe()}var Jf={onUnhandledError:null,onStoppedNotification:null,Promise:void 0,useDeprecatedSynchronousErrorHandling:!1,useDeprecatedNextContext:!1};var QD={setTimeout:function(e,t){for(var r=[],n=2;n<arguments.length;n++)r[n-2]=arguments[n];var o=QD.delegate;return o?.setTimeout?o.setTimeout.apply(o,Of([e,t],Yf(r))):setTimeout.apply(void 0,Of([e,t],Yf(r)))},clearTimeout:function(e){var t=QD.delegate;return(t?.clearTimeout||clearTimeout)(e)},delegate:void 0};function GN(e){QD.setTimeout(function(){var t=Jf.onUnhandledError;if(t)t(e);else throw e})}function t9(){}var lIe=(function(){return r9("C",void 0,void 0)})();function uIe(e){return r9("E",void 0,e)}function gIe(e){return r9("N",e,void 0)}function r9(e,t,r){return{kind:e,value:t,error:r}}var C0=null;function ED(e){if(Jf.useDeprecatedSynchronousErrorHandling){var t=!C0;if(t&&(C0={errorThrown:!1,error:null}),e(),t){var r=C0,n=r.errorThrown,o=r.error;if(C0=null,n)throw o}}else e()}function mIe(e){Jf.useDeprecatedSynchronousErrorHandling&&C0&&(C0.errorThrown=!0,C0.error=e)}var H2=(function(e){ku(t,e);function t(r){var n=e.call(this)||this;return n.isStopped=!1,r?(n.destination=r,PN(r)&&r.add(n)):n.destination=B$e,n}return t.create=function(r,n,o){return new MN(r,n,o)},t.prototype.next=function(r){this.isStopped?o9(gIe(r),this):this._next(r)},t.prototype.error=function(r){this.isStopped?o9(uIe(r),this):(this.isStopped=!0,this._error(r))},t.prototype.complete=function(){this.isStopped?o9(lIe,this):(this.isStopped=!0,this._complete())},t.prototype.unsubscribe=function(){this.closed||(this.isStopped=!0,e.prototype.unsubscribe.call(this),this.destination=null)},t.prototype._next=function(r){this.destination.next(r)},t.prototype._error=function(r){try{this.destination.error(r)}finally{this.unsubscribe()}},t.prototype._complete=function(){try{this.destination.complete()}finally{this.unsubscribe()}},t})(gQ);var d$e=Function.prototype.bind;function n9(e,t){return d$e.call(e,t)}var p$e=(function(){function e(t){this.partialObserver=t}return e.prototype.next=function(t){var r=this.partialObserver;if(r.next)try{r.next(t)}catch(n){NN(n)}},e.prototype.error=function(t){var r=this.partialObserver;if(r.error)try{r.error(t)}catch(n){NN(n)}else NN(t)},e.prototype.complete=function(){var t=this.partialObserver;if(t.complete)try{t.complete()}catch(r){NN(r)}},e})(),MN=(function(e){ku(t,e);function t(r,n,o){var i=e.call(this)||this,a;if(_i(r)||!r)a={next:r??void 0,error:n??void 0,complete:o??void 0};else{var A;i&&Jf.useDeprecatedNextContext?(A=Object.create(r),A.unsubscribe=function(){return i.unsubscribe()},a={next:r.next&&n9(r.next,A),error:r.error&&n9(r.error,A),complete:r.complete&&n9(r.complete,A)}):a=r}return i.destination=new p$e(a),i}return t})(H2);function NN(e){Jf.useDeprecatedSynchronousErrorHandling?mIe(e):GN(e)}function f$e(e){throw e}function o9(e,t){var r=Jf.onStoppedNotification;r&&QD.setTimeout(function(){return r(e,t)})}var B$e={closed:!0,next:t9,error:f$e,complete:t9};var bD=(function(){return typeof Symbol=="function"&&Symbol.observable||"@@observable"})();function dh(e){return e}function dIe(e){return e.length===0?dh:e.length===1?e[0]:function(r){return e.reduce(function(n,o){return o(n)},r)}}var Ss=(function(){function e(t){t&&(this._subscribe=t)}return e.prototype.lift=function(t){var r=new e;return r.source=this,r.operator=t,r},e.prototype.subscribe=function(t,r,n){var o=this,i=C$e(t)?t:new MN(t,r,n);return ED(function(){var a=o,A=a.operator,s=a.source;i.add(A?A.call(i,s):s?o._subscribe(i):o._trySubscribe(i))}),i},e.prototype._trySubscribe=function(t){try{return this._subscribe(t)}catch(r){t.error(r)}},e.prototype.forEach=function(t,r){var n=this;return r=pIe(r),new r(function(o,i){var a=new MN({next:function(A){try{t(A)}catch(s){i(s),a.unsubscribe()}},error:i,complete:o});n.subscribe(a)})},e.prototype._subscribe=function(t){var r;return(r=this.source)===null||r===void 0?void 0:r.subscribe(t)},e.prototype[bD]=function(){return this},e.prototype.pipe=function(){for(var t=[],r=0;r<arguments.length;r++)t[r]=arguments[r];return dIe(t)(this)},e.prototype.toPromise=function(t){var r=this;return t=pIe(t),new t(function(n,o){var i;r.subscribe(function(a){return i=a},function(a){return o(a)},function(){return n(i)})})},e.create=function(t){return new e(t)},e})();function pIe(e){var t;return(t=e??Jf.Promise)!==null&&t!==void 0?t:Promise}function I$e(e){return e&&_i(e.next)&&_i(e.error)&&_i(e.complete)}function C$e(e){return e&&e instanceof H2||I$e(e)&&PN(e)}function h$e(e){return _i(e?.lift)}function gl(e){return function(t){if(h$e(t))return t.lift(function(r){try{return e(r,this)}catch(n){this.error(n)}});throw new TypeError("Unable to lift unknown Observable type")}}function Bc(e,t,r,n,o){return new y$e(e,t,r,n,o)}var y$e=(function(e){ku(t,e);function t(r,n,o,i,a,A){var s=e.call(this,r)||this;return s.onFinalize=a,s.shouldUnsubscribe=A,s._next=n?function(c){try{n(c)}catch(l){r.error(l)}}:e.prototype._next,s._error=i?function(c){try{i(c)}catch(l){r.error(l)}finally{this.unsubscribe()}}:e.prototype._error,s._complete=o?function(){try{o()}catch(c){r.error(c)}finally{this.unsubscribe()}}:e.prototype._complete,s}return t.prototype.unsubscribe=function(){var r;if(!this.shouldUnsubscribe||this.shouldUnsubscribe()){var n=this.closed;e.prototype.unsubscribe.call(this),!n&&((r=this.onFinalize)===null||r===void 0||r.call(this))}},t})(H2);var fIe=LN(function(e){return function(){e(this),this.name="ObjectUnsubscribedError",this.message="object unsubscribed"}});var Jn=(function(e){ku(t,e);function t(){var r=e.call(this)||this;return r.closed=!1,r.currentObservers=null,r.observers=[],r.isStopped=!1,r.hasError=!1,r.thrownError=null,r}return t.prototype.lift=function(r){var n=new BIe(this,this);return n.operator=r,n},t.prototype._throwIfClosed=function(){if(this.closed)throw new fIe},t.prototype.next=function(r){var n=this;ED(function(){var o,i;if(n._throwIfClosed(),!n.isStopped){n.currentObservers||(n.currentObservers=Array.from(n.observers));try{for(var a=mh(n.currentObservers),A=a.next();!A.done;A=a.next()){var s=A.value;s.next(r)}}catch(c){o={error:c}}finally{try{A&&!A.done&&(i=a.return)&&i.call(a)}finally{if(o)throw o.error}}}})},t.prototype.error=function(r){var n=this;ED(function(){if(n._throwIfClosed(),!n.isStopped){n.hasError=n.isStopped=!0,n.thrownError=r;for(var o=n.observers;o.length;)o.shift().error(r)}})},t.prototype.complete=function(){var r=this;ED(function(){if(r._throwIfClosed(),!r.isStopped){r.isStopped=!0;for(var n=r.observers;n.length;)n.shift().complete()}})},t.prototype.unsubscribe=function(){this.isStopped=this.closed=!0,this.observers=this.currentObservers=null},Object.defineProperty(t.prototype,"observed",{get:function(){var r;return((r=this.observers)===null||r===void 0?void 0:r.length)>0},enumerable:!1,configurable:!0}),t.prototype._trySubscribe=function(r){return this._throwIfClosed(),e.prototype._trySubscribe.call(this,r)},t.prototype._subscribe=function(r){return this._throwIfClosed(),this._checkFinalizedStatuses(r),this._innerSubscribe(r)},t.prototype._innerSubscribe=function(r){var n=this,o=this,i=o.hasError,a=o.isStopped,A=o.observers;return i||a?e9:(this.currentObservers=null,A.push(r),new gQ(function(){n.currentObservers=null,I0(A,r)}))},t.prototype._checkFinalizedStatuses=function(r){var n=this,o=n.hasError,i=n.thrownError,a=n.isStopped;o?r.error(i):a&&r.complete()},t.prototype.asObservable=function(){var r=new Ss;return r.source=this,r},t.create=function(r,n){return new BIe(r,n)},t})(Ss);var BIe=(function(e){ku(t,e);function t(r,n){var o=e.call(this)||this;return o.destination=r,o.source=n,o}return t.prototype.next=function(r){var n,o;(o=(n=this.destination)===null||n===void 0?void 0:n.next)===null||o===void 0||o.call(n,r)},t.prototype.error=function(r){var n,o;(o=(n=this.destination)===null||n===void 0?void 0:n.error)===null||o===void 0||o.call(n,r)},t.prototype.complete=function(){var r,n;(n=(r=this.destination)===null||r===void 0?void 0:r.complete)===null||n===void 0||n.call(r)},t.prototype._subscribe=function(r){var n,o;return(o=(n=this.source)===null||n===void 0?void 0:n.subscribe(r))!==null&&o!==void 0?o:e9},t})(Jn);var _A=(function(e){ku(t,e);function t(r){var n=e.call(this)||this;return n._value=r,n}return Object.defineProperty(t.prototype,"value",{get:function(){return this.getValue()},enumerable:!1,configurable:!0}),t.prototype._subscribe=function(r){var n=e.prototype._subscribe.call(this,r);return!n.closed&&r.next(this._value),n},t.prototype.getValue=function(){var r=this,n=r.hasError,o=r.thrownError,i=r._value;if(n)throw o;return this._throwIfClosed(),i},t.prototype.next=function(r){e.prototype.next.call(this,this._value=r)},t})(Jn);var i9={now:function(){return(i9.delegate||Date).now()},delegate:void 0};var IIe=(function(e){ku(t,e);function t(r,n){return e.call(this)||this}return t.prototype.schedule=function(r,n){return n===void 0&&(n=0),this},t})(gQ);var V2={setInterval:function(e,t){for(var r=[],n=2;n<arguments.length;n++)r[n-2]=arguments[n];var o=V2.delegate;return o?.setInterval?o.setInterval.apply(o,Of([e,t],Yf(r))):setInterval.apply(void 0,Of([e,t],Yf(r)))},clearInterval:function(e){var t=V2.delegate;return(t?.clearInterval||clearInterval)(e)},delegate:void 0};var CIe=(function(e){ku(t,e);function t(r,n){var o=e.call(this,r,n)||this;return o.scheduler=r,o.work=n,o.pending=!1,o}return t.prototype.schedule=function(r,n){var o;if(n===void 0&&(n=0),this.closed)return this;this.state=r;var i=this.id,a=this.scheduler;return i!=null&&(this.id=this.recycleAsyncId(a,i,n)),this.pending=!0,this.delay=n,this.id=(o=this.id)!==null&&o!==void 0?o:this.requestAsyncId(a,this.id,n),this},t.prototype.requestAsyncId=function(r,n,o){return o===void 0&&(o=0),V2.setInterval(r.flush.bind(r,this),o)},t.prototype.recycleAsyncId=function(r,n,o){if(o===void 0&&(o=0),o!=null&&this.delay===o&&this.pending===!1)return n;n!=null&&V2.clearInterval(n)},t.prototype.execute=function(r,n){if(this.closed)return new Error("executing a cancelled action");this.pending=!1;var o=this._execute(r,n);if(o)return o;this.pending===!1&&this.id!=null&&(this.id=this.recycleAsyncId(this.scheduler,this.id,null))},t.prototype._execute=function(r,n){var o=!1,i;try{this.work(r)}catch(a){o=!0,i=a||new Error("Scheduled action threw falsy error")}if(o)return this.unsubscribe(),i},t.prototype.unsubscribe=function(){if(!this.closed){var r=this,n=r.id,o=r.scheduler,i=o.actions;this.work=this.state=this.scheduler=null,this.pending=!1,I0(i,this),n!=null&&(this.id=this.recycleAsyncId(o,n,null)),this.delay=null,e.prototype.unsubscribe.call(this)}},t})(IIe);var a9=(function(){function e(t,r){r===void 0&&(r=e.now),this.schedulerActionCtor=t,this.now=r}return e.prototype.schedule=function(t,r,n){return r===void 0&&(r=0),new this.schedulerActionCtor(this,t).schedule(n,r)},e.now=i9.now,e})();var hIe=(function(e){ku(t,e);function t(r,n){n===void 0&&(n=a9.now);var o=e.call(this,r,n)||this;return o.actions=[],o._active=!1,o}return t.prototype.flush=function(r){var n=this.actions;if(this._active){n.push(r);return}var o;this._active=!0;do if(o=r.execute(r.state,r.delay))break;while(r=n.shift());if(this._active=!1,o){for(;r=n.shift();)r.unsubscribe();throw o}},t})(a9);var _2=new hIe(CIe),yIe=_2;var kN=new Ss(function(e){return e.complete()});function HN(e){return e&&_i(e.schedule)}function A9(e){return e[e.length-1]}function QIe(e){return _i(A9(e))?e.pop():void 0}function VN(e){return HN(A9(e))?e.pop():void 0}function EIe(e,t){return typeof A9(e)=="number"?e.pop():t}var _N=(function(e){return e&&typeof e.length=="number"&&typeof e!="function"});function YN(e){return _i(e?.then)}function ON(e){return _i(e[bD])}function JN(e){return Symbol.asyncIterator&&_i(e?.[Symbol.asyncIterator])}function zN(e){return new TypeError("You provided "+(e!==null&&typeof e=="object"?"an invalid object":"'"+e+"'")+" where a stream was expected. You can provide an Observable, Promise, ReadableStream, Array, AsyncIterable, or Iterable.")}function Q$e(){return typeof Symbol!="function"||!Symbol.iterator?"@@iterator":Symbol.iterator}var KN=Q$e();function jN(e){return _i(e?.[KN])}function WN(e){return AIe(this,arguments,function(){var r,n,o,i;return UN(this,function(a){switch(a.label){case 0:r=e.getReader(),a.label=1;case 1:a.trys.push([1,,9,10]),a.label=2;case 2:return[4,B0(r.read())];case 3:return n=a.sent(),o=n.value,i=n.done,i?[4,B0(void 0)]:[3,5];case 4:return[2,a.sent()];case 5:return[4,B0(o)];case 6:return[4,a.sent()];case 7:return a.sent(),[3,2];case 8:return[3,10];case 9:return r.releaseLock(),[7];case 10:return[2]}})})}function XN(e){return _i(e?.getReader)}function mm(e){if(e instanceof Ss)return e;if(e!=null){if(ON(e))return E$e(e);if(_N(e))return b$e(e);if(YN(e))return x$e(e);if(JN(e))return bIe(e);if(jN(e))return S$e(e);if(XN(e))return D$e(e)}throw zN(e)}function E$e(e){return new Ss(function(t){var r=e[bD]();if(_i(r.subscribe))return r.subscribe(t);throw new TypeError("Provided object does not correctly implement Symbol.observable")})}function b$e(e){return new Ss(function(t){for(var r=0;r<e.length&&!t.closed;r++)t.next(e[r]);t.complete()})}function x$e(e){return new Ss(function(t){e.then(function(r){t.closed||(t.next(r),t.complete())},function(r){return t.error(r)}).then(null,GN)})}function S$e(e){return new Ss(function(t){var r,n;try{for(var o=mh(e),i=o.next();!i.done;i=o.next()){var a=i.value;if(t.next(a),t.closed)return}}catch(A){r={error:A}}finally{try{i&&!i.done&&(n=o.return)&&n.call(o)}finally{if(r)throw r.error}}t.complete()})}function bIe(e){return new Ss(function(t){v$e(e,t).catch(function(r){return t.error(r)})})}function D$e(e){return bIe(WN(e))}function v$e(e,t){var r,n,o,i;return aIe(this,void 0,void 0,function(){var a,A;return UN(this,function(s){switch(s.label){case 0:s.trys.push([0,5,6,11]),r=sIe(e),s.label=1;case 1:return[4,r.next()];case 2:if(n=s.sent(),!!n.done)return[3,4];if(a=n.value,t.next(a),t.closed)return[2];s.label=3;case 3:return[3,1];case 4:return[3,11];case 5:return A=s.sent(),o={error:A},[3,11];case 6:return s.trys.push([6,,9,10]),n&&!n.done&&(i=r.return)?[4,i.call(r)]:[3,8];case 7:s.sent(),s.label=8;case 8:return[3,10];case 9:if(o)throw o.error;return[7];case 10:return[7];case 11:return t.complete(),[2]}})})}function dm(e,t,r,n,o){n===void 0&&(n=0),o===void 0&&(o=!1);var i=t.schedule(function(){r(),o?e.add(this.schedule(null,n)):this.unsubscribe()},n);if(e.add(i),!o)return i}function ZN(e,t){return t===void 0&&(t=0),gl(function(r,n){r.subscribe(Bc(n,function(o){return dm(n,e,function(){return n.next(o)},t)},function(){return dm(n,e,function(){return n.complete()},t)},function(o){return dm(n,e,function(){return n.error(o)},t)}))})}function qN(e,t){return t===void 0&&(t=0),gl(function(r,n){n.add(e.schedule(function(){return r.subscribe(n)},t))})}function xIe(e,t){return mm(e).pipe(qN(t),ZN(t))}function SIe(e,t){return mm(e).pipe(qN(t),ZN(t))}function DIe(e,t){return new Ss(function(r){var n=0;return t.schedule(function(){n===e.length?r.complete():(r.next(e[n++]),r.closed||this.schedule())})})}function vIe(e,t){return new Ss(function(r){var n;return dm(r,t,function(){n=e[KN](),dm(r,t,function(){var o,i,a;try{o=n.next(),i=o.value,a=o.done}catch(A){r.error(A);return}a?r.complete():r.next(i)},0,!0)}),function(){return _i(n?.return)&&n.return()}})}function $N(e,t){if(!e)throw new Error("Iterable cannot be null");return new Ss(function(r){dm(r,t,function(){var n=e[Symbol.asyncIterator]();dm(r,t,function(){n.next().then(function(o){o.done?r.complete():r.next(o.value)})},0,!0)})})}function FIe(e,t){return $N(WN(e),t)}function wIe(e,t){if(e!=null){if(ON(e))return xIe(e,t);if(_N(e))return DIe(e,t);if(YN(e))return SIe(e,t);if(JN(e))return $N(e,t);if(jN(e))return vIe(e,t);if(XN(e))return FIe(e,t)}throw zN(e)}function Y2(e,t){return t?wIe(e,t):mm(e)}function RIe(e){return e instanceof Date&&!isNaN(e)}function h0(e,t){return gl(function(r,n){var o=0;r.subscribe(Bc(n,function(i){n.next(e.call(t,i,o++))}))})}var F$e=Array.isArray;function w$e(e,t){return F$e(t)?e.apply(void 0,Of([],Yf(t))):e(t)}function UIe(e){return h0(function(t){return w$e(e,t)})}var R$e=Array.isArray,U$e=Object.getPrototypeOf,L$e=Object.prototype,T$e=Object.keys;function LIe(e){if(e.length===1){var t=e[0];if(R$e(t))return{args:t,keys:null};if(P$e(t)){var r=T$e(t);return{args:r.map(function(n){return t[n]}),keys:r}}}return{args:e,keys:null}}function P$e(e){return e&&typeof e=="object"&&U$e(e)===L$e}function TIe(e,t){return e.reduce(function(r,n,o){return r[n]=t[o],r},{})}function s9(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];var r=VN(e),n=QIe(e),o=LIe(e),i=o.args,a=o.keys;if(i.length===0)return Y2([],r);var A=new Ss(G$e(i,r,a?function(s){return TIe(a,s)}:dh));return n?A.pipe(UIe(n)):A}function G$e(e,t,r){return r===void 0&&(r=dh),function(n){PIe(t,function(){for(var o=e.length,i=new Array(o),a=o,A=o,s=function(l){PIe(t,function(){var u=Y2(e[l],t),g=!1;u.subscribe(Bc(n,function(m){i[l]=m,g||(g=!0,A--),A||n.next(r(i.slice()))},function(){--a||n.complete()}))},n)},c=0;c<o;c++)s(c)},n)}}function PIe(e,t,r){e?dm(r,e,t):t()}function GIe(e,t,r,n,o,i,a,A){var s=[],c=0,l=0,u=!1,g=function(){u&&!s.length&&!c&&t.complete()},m=function(d){return c<n?p(d):s.push(d)},p=function(d){i&&t.next(d),c++;var f=!1;mm(r(d,l++)).subscribe(Bc(t,function(I){o?.(I),i?m(I):t.next(I)},function(){f=!0},void 0,function(){if(f)try{c--;for(var I=function(){var C=s.shift();a?dm(t,a,function(){return p(C)}):p(C)};s.length&&c<n;)I();g()}catch(C){t.error(C)}}))};return e.subscribe(Bc(t,m,function(){u=!0,g()})),function(){A?.()}}function c9(e,t,r){return r===void 0&&(r=1/0),_i(t)?c9(function(n,o){return h0(function(i,a){return t(n,i,o,a)})(mm(e(n,o)))},r):(typeof t=="number"&&(r=t),gl(function(n,o){return GIe(n,o,e,r)}))}function NIe(e){return e===void 0&&(e=1/0),c9(dh,e)}function MIe(e,t,r){e===void 0&&(e=0),r===void 0&&(r=yIe);var n=-1;return t!=null&&(HN(t)?r=t:n=t),new Ss(function(o){var i=RIe(e)?+e-r.now():e;i<0&&(i=0);var a=0;return r.schedule(function(){o.closed||(o.next(a++),0<=n?this.schedule(void 0,n):o.complete())},i)})}function ml(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];var r=VN(e),n=EIe(e,1/0),o=e;return o.length?o.length===1?mm(o[0]):NIe(n)(Y2(o,r)):kN}function gI(e,t){return gl(function(r,n){var o=0;r.subscribe(Bc(n,function(i){return e.call(t,i,o++)&&n.next(i)}))})}function cp(e,t){return t===void 0&&(t=_2),gl(function(r,n){var o=null,i=null,a=null,A=function(){if(o){o.unsubscribe(),o=null;var c=i;i=null,n.next(c)}};function s(){var c=a+e,l=t.now();if(l<c){o=this.schedule(void 0,c-l),n.add(o);return}A()}r.subscribe(Bc(n,function(c){i=c,a=t.now(),o||(o=t.schedule(s,e),n.add(o))},function(){A(),n.complete()},void 0,function(){i=o=null}))})}function l9(e){return e<=0?function(){return kN}:gl(function(t,r){var n=0;t.subscribe(Bc(r,function(o){++n<=e&&(r.next(o),e<=n&&r.complete())}))})}function xD(e,t){return t===void 0&&(t=dh),e=e??N$e,gl(function(r,n){var o,i=!0;r.subscribe(Bc(n,function(a){var A=t(a);(i||!e(o,A))&&(i=!1,o=A,n.next(a))}))})}function N$e(e,t){return e===t}function O2(e){return gI(function(t,r){return e<=r})}function kIe(e,t){return gl(function(r,n){var o=t??{},i=o.leading,a=i===void 0?!0:i,A=o.trailing,s=A===void 0?!1:A,c=!1,l=null,u=null,g=!1,m=function(){u?.unsubscribe(),u=null,s&&(f(),g&&n.complete())},p=function(){u=null,g&&n.complete()},d=function(I){return u=mm(e(I)).subscribe(Bc(n,m,p))},f=function(){if(c){c=!1;var I=l;l=null,n.next(I),!g&&d(I)}};r.subscribe(Bc(n,function(I){c=!0,l=I,!(u&&!u.closed)&&(a?f():d(I))},function(){g=!0,!(s&&c&&u&&!u.closed)&&n.complete()}))})}function jc(e,t,r){t===void 0&&(t=_2);var n=MIe(e,t);return kIe(function(){return n},r)}function M$e(e,t,r){return e-=e/r,e+=t/r,e}var eM=class{constructor(t){this.count=t;this.avgs=new Map}add(t,r){let n=this.avgs.get(t)||r;return n=M$e(n,r,this.count),this.avgs.set(t,n),n}get(t){return this.avgs.get(t)}stats(){return Object.fromEntries(this.avgs.entries())}clear(){this.avgs.clear()}};function k$e(e){e.calls.drawInstanced=0,e.calls.drawInstancedBase=0,e.calls.multiDrawInstancedBase=0,e.calls.counts=0,e.culled.lod=0,e.culled.frustum=0,e.culled.occlusion=0}function H$e(e){return e.disjointTimerQuery?e.disjointTimerQuery.createQuery():null}function HIe(e,t,r,n){let o=t.disjointTimerQuery,i=n?.avgCount??30,a=new Map,A=new Map,s=[],c=new eM(i),l=new eM(i),u=[],g=null,m=!1,p=()=>{A.clear(),s.length=0,c.clear(),l.clear(),u=[],g=null,m=!1,o&&a.forEach((f,I)=>{o.deleteQuery(I)}),a.clear()},d=()=>{if(!o)return;let f=H$e(t);f&&(o.beginQuery(o.TIME_ELAPSED,f),A.forEach((I,C)=>{I.queries.push(f)}),a.set(f,{refCount:A.size}),g=f)};return{resolve:()=>{let f=[];if(!o||!u.length||m)return f;a.forEach((C,y)=>{if(C.timeElapsed!==void 0)return;let Q=o.getQueryParameter(y,o.QUERY_RESULT_AVAILABLE),E=e.getParameter(o.GPU_DISJOINT);if(Q&&!E){let b=o.getQueryParameter(y,o.QUERY_RESULT);C.timeElapsed=b}(Q||E)&&o.deleteQuery(y)});let I=[];for(let C of u)if(C.queries.every(y=>a.get(y)?.timeElapsed!==void 0)){let y=0;for(let Q of C.queries){let E=a.get(Q);y+=E.timeElapsed,E.refCount-=1}if(C.timeElapsed=y,C.root){let Q=[],E=(x,S)=>{for(let w of x){let R=w.timeElapsed,T=w.cpu.end-w.cpu.start,L={label:w.label,gpuElapsed:R,gpuAvg:c.add(w.label,R),cpuElapsed:T,cpuAvg:l.add(w.label,T),children:[],calls:w.calls,note:w.note};S.push(L),E(w.children,L.children)}};E(C.children,Q);let b=C.cpu.end-C.cpu.start;f.push({label:C.label,gpuElapsed:y,gpuAvg:c.add(C.label,y),cpuElapsed:b,cpuAvg:l.add(C.label,b),children:Q,calls:C.calls,note:C.note})}}else I.push(C);return u=I,a.forEach((C,y)=>{C.refCount===0&&a.delete(y)}),f},mark:(f,I)=>{if(!o)return;if(A.has(f))throw new Error(`Timer mark for '${f}' already exists`);let C=I?.captureStats??!1;g!==null&&o.endQuery(o.TIME_ELAPSED);let y={label:f,queries:[],children:[],root:g===null,cpu:{start:co(),end:-1},captureStats:C};if(I?.note&&(y.note=I.note),A.set(f,y),s.length&&s[s.length-1].children.push(y),s.push(y),C){if(m)throw new Error("Already capturing stats");k$e(r),m=!0}d()},markEnd:f=>{if(!o)return;let I=A.get(f);if(!I)throw new Error(`Timer mark for '${f}' does not exist`);if(s.pop()?.label!==f)throw new Error(`Timer mark for '${f}' has pending nested mark`);o.endQuery(o.TIME_ELAPSED),A.delete(f),I.cpu.end=co(),I.captureStats&&(I.calls={...r.calls},m=!1),u.push(I),A.size>0?d():g=null},stats:()=>({gpu:c.stats(),cpu:l.stats()}),formatedStats:()=>{let f={},I=c.stats(),C=l.stats();for(let y of Object.keys(I)){let Q=`${(I[y]/1e3/1e3).toFixed(2)}`,E=`${C[y].toFixed(2)}`;f[y]=`${Q} ms | CPU: ${E} ms`}return f},clear:p,destroy:()=>{p()}}}function V$e(e){let t=`${(e.gpuElapsed/1e3/1e3).toFixed(2)}`,r=`${(e.gpuAvg/1e3/1e3).toFixed(2)}`,n=`${e.cpuElapsed.toFixed(2)}`,o=`${e.cpuAvg.toFixed(2)}`;return`${e.label} ${t} ms (avg. ${r} ms) | CPU: ${n} ms (avg. ${o} ms)`}function J2(e){e.map(t=>{let r=V$e(t);t.children.length||t.calls||t.note?(console.groupCollapsed(r),t.calls&&console.log(t.calls),t.note&&console.log(t.note),J2(t.children),console.groupEnd()):console.log(r)})}function YIe(e,t){function r(o){try{return e.getContext(o,t)}catch{return null}}let n=(t?.preferWebGl1?null:r("webgl2"))||r("webgl")||r("experimental-webgl");return ir&&console.log(`isWebgl2: ${mr(n)}`),n}function g9(e,t){switch(t){case e.NO_ERROR:return"no error";case e.INVALID_ENUM:return"invalid enum";case e.INVALID_VALUE:return"invalid value";case e.INVALID_OPERATION:return"invalid operation";case e.INVALID_FRAMEBUFFER_OPERATION:return"invalid framebuffer operation";case e.OUT_OF_MEMORY:return"out of memory";case e.CONTEXT_LOST_WEBGL:return"context lost"}return"unknown error"}function OIe(e,t){let r=e.getError();r!==e.NO_ERROR&&console.log(`WebGL error: '${g9(e,r)}'${t?` (${t})`:""}`)}function _$e(e){let t=e.getParameter(e.MAX_TEXTURE_IMAGE_UNITS);for(let o=0;o<t;++o)e.activeTexture(e.TEXTURE0+o),e.bindTexture(e.TEXTURE_2D,null),e.bindTexture(e.TEXTURE_CUBE_MAP,null),mr(e)&&(e.bindTexture(e.TEXTURE_2D_ARRAY,null),e.bindTexture(e.TEXTURE_3D,null));let r=e.createBuffer();e.bindBuffer(e.ARRAY_BUFFER,r);let n=e.getParameter(e.MAX_VERTEX_ATTRIBS);for(let o=0;o<n;++o)e.vertexAttribPointer(o,1,e.FLOAT,!1,0,0);e.bindBuffer(e.ARRAY_BUFFER,null),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,null),e.bindRenderbuffer(e.RENDERBUFFER,null),e.bindFramebuffer(e.FRAMEBUFFER,null),mr(e)&&(e.bindBuffer(e.UNIFORM_BUFFER,null),e.bindBuffer(e.PIXEL_PACK_BUFFER,null))}var JIe=new Uint8Array(4);function zIe(e,t,r){e.getSyncParameter(t,e.SYNC_STATUS)===e.SIGNALED?(e.deleteSync(t),r()):Pf.setImmediate(zIe,e,t,r)}function Y$e(e,t){let r=e.fenceSync(e.SYNC_GPU_COMMANDS_COMPLETE,0);r?Pf.setImmediate(zIe,e,r,t):(console.warn("Could not create a WebGLSync object"),e.readPixels(0,0,1,1,e.RGBA,e.UNSIGNED_BYTE,JIe),t())}var VIe=!1;function O$e(e){return new Promise(t=>{mr(e)?Y$e(e,t):(VIe||(console.info("Sync object not supported in WebGL"),VIe=!0),KIe(e),t())})}function KIe(e){e.bindFramebuffer(e.FRAMEBUFFER,null),e.readPixels(0,0,1,1,e.RGBA,e.UNSIGNED_BYTE,JIe)}function J$e(e,t,r,n,o,i){if(ir&&yD(e),i instanceof Uint8Array)e.readPixels(t,r,n,o,e.RGBA,e.UNSIGNED_BYTE,i);else if(i instanceof Float32Array)e.readPixels(t,r,n,o,e.RGBA,e.FLOAT,i);else if(i instanceof Int32Array&&mr(e))e.readPixels(t,r,n,o,e.RGBA_INTEGER,e.INT,i);else throw new Error("unsupported readPixels buffer type");ir&&OIe(e)}function u9(e,t){t?e.bindFramebuffer(e.FRAMEBUFFER,t.framebuffer):e.bindFramebuffer(e.FRAMEBUFFER,null)}function tM(e,t,r){let n=t?.framebufferWidth??e.drawingBufferWidth;r==="screen-space"&&(n*=2);let o=t?.framebufferHeight??e.drawingBufferHeight;return{width:n,height:o}}function SD(e,t,r,n){let o=t==="vertex"?e.VERTEX_SHADER:e.FRAGMENT_SHADER,i=e[`${r.toUpperCase()}_${n.toUpperCase()}`];return e.getShaderPrecisionFormat(o,i)}function _Ie(e,t){return{lowFloat:SD(e,t,"low","float"),mediumFloat:SD(e,t,"medium","float"),highFloat:SD(e,t,"high","float"),lowInt:SD(e,t,"low","int"),mediumInt:SD(e,t,"medium","int"),highInt:SD(e,t,"high","int")}}function z$e(){return{resourceCounts:{attribute:0,elements:0,pixelPack:0,framebuffer:0,program:0,renderbuffer:0,shader:0,texture:0,cubeTexture:0,vertexArray:0},drawCount:0,instanceCount:0,instancedDrawCount:0,calls:{drawInstanced:0,drawInstancedBase:0,multiDrawInstancedBase:0,counts:0},culled:{lod:0,frustum:0,occlusion:0}}}function K$e(e,t){return{maxTextureSize:e.getParameter(e.MAX_TEXTURE_SIZE),max3dTextureSize:mr(e)?e.getParameter(e.MAX_3D_TEXTURE_SIZE):0,maxRenderbufferSize:e.getParameter(e.MAX_RENDERBUFFER_SIZE),maxDrawBuffers:t.drawBuffers?e.getParameter(t.drawBuffers.MAX_DRAW_BUFFERS):0,maxTextureImageUnits:e.getParameter(e.MAX_TEXTURE_IMAGE_UNITS),maxVertexTextureImageUnits:e.getParameter(e.MAX_VERTEX_TEXTURE_IMAGE_UNITS)}}function jIe(e,t={}){let r=Wj(e),n=Sfe(e,r),o=z$e(),i=K$e(e,r),a=rIe(e,n,o,r,i),A=HIe(e,r,o);if(i.maxVertexTextureImageUnits<8)throw new Error('Need "MAX_VERTEX_TEXTURE_IMAGE_UNITS" >= 8');let s={vertex:_Ie(e,"vertex"),fragment:_Ie(e,"fragment")};ir&&console.log({parameters:i,shaderPrecisionFormats:s});let c=r.provokingVertex;c?.provokingVertex(c.FIRST_VERTEX_CONVENTION);let l=!1,u=new Jn,g=t.pixelScale||1,m={session:void 0,layer:void 0,changed:new Jn,clear:()=>{m.layer=void 0,m.session=void 0,m.changed.next()}},p=new Set;return{gl:e,isWebGL2:mr(e),get pixelRatio(){return(typeof window<"u"&&window.devicePixelRatio||1)*(g||1)},extensions:r,state:n,stats:o,resources:a,timer:A,get maxTextureSize(){return i.maxTextureSize},get max3dTextureSize(){return i.max3dTextureSize},get maxRenderbufferSize(){return i.maxRenderbufferSize},get maxDrawBuffers(){return i.maxDrawBuffers},get maxTextureImageUnits(){return i.maxTextureImageUnits},get shaderPrecisionFormats(){return s},namedComputeRenderables:Object.create(null),namedFramebuffers:Object.create(null),namedTextures:Object.create(null),get isContextLost(){return l||e.isContextLost()},contextRestored:u,setContextLost:()=>{l=!0,A.clear()},handleContextRestored:d=>{Jpe(e,r),n.reset(),n.currentMaterialId=-1,n.currentProgramId=-1,n.currentRenderItemId=-1,a.reset(),p.forEach(f=>f.reset()),d?.(),l=!1,u.next(co())},xr:{get session(){return m.session},changed:m.changed,set:async(d,f)=>{if(m.session!==d&&(await m.session?.end(),d!==void 0))try{await e.makeXRCompatible(),m.session=d,m.layer=new XRWebGLLayer(m.session,e,{antialias:!0,alpha:!0,depth:!0,framebufferScaleFactor:g*(f?.resolutionScale??1)}),await m.session.updateRenderState({baseLayer:m.layer}),m.session.addEventListener("end",m.clear),m.changed.next()}catch(I){throw d?await d.end():(m.layer=void 0,m.session=void 0),I}},end:async()=>m.session?.end()},setPixelScale:d=>{g=d},createRenderTarget:(d,f,I,C,y,Q)=>{let E=iIe(e,a,d,f,I,C,y,Q);return p.add(E),{...E,destroy:()=>{E.destroy(),p.delete(E)}}},createDrawTarget:()=>({id:-1,texture:Ti(e),framebuffer:Ope(),depthRenderbuffer:null,getByteCount:()=>0,getWidth:()=>tM(e,m.layer,m.session?.interactionMode).width,getHeight:()=>tM(e,m.layer,m.session?.interactionMode).height,bind:()=>{u9(e,m.layer)},setSize:()=>{},reset:()=>{},destroy:()=>{}}),bindDrawingBuffer:()=>u9(e,m.layer),getDrawingBufferSize:()=>tM(e,m.layer,m.session?.interactionMode),readPixels:(d,f,I,C,y)=>{J$e(e,d,f,I,C,y)},waitForGpuCommandsComplete:()=>O$e(e),waitForGpuCommandsCompleteSync:()=>KIe(e),getFenceSync:()=>mr(e)?e.fenceSync(e.SYNC_GPU_COMMANDS_COMPLETE,0):null,checkSyncStatus:d=>mr(e)?e.getSyncParameter(d,e.SYNC_STATUS)===e.SIGNALED?(e.deleteSync(d),!0):!1:!0,deleteSync:d=>{mr(e)&&e.deleteSync(d)},clear:(d,f,I,C)=>{let y=tM(e,m.layer);u9(e,m.layer),n.enable(e.SCISSOR_TEST),n.depthMask(!0),n.colorMask(!0,!0,!0,!0),n.clearColor(d,f,I,C),n.viewport(0,0,y.width,y.height),n.scissor(0,0,y.width,y.height),e.clear(e.COLOR_BUFFER_BIT|e.DEPTH_BUFFER_BIT)},checkError:d=>{OIe(e,d)},checkFramebufferStatus:d=>{yD(e,d)},destroy:d=>{a.destroy(),_$e(e),m.session?.removeEventListener("end",m.clear),m.session?.end(),u.complete(),m.changed.complete(),d?.doNotForceWebGLContextLoss||(e.getExtension("WEBGL_lose_context")?.loseContext(),e.getExtension("STACKGL_destroy_context")?.destroy())}}}function mr(e){return typeof WebGL2RenderingContext<"u"&&e instanceof WebGL2RenderingContext}function zpe(e){if(mr(e))return{drawArraysInstanced:e.drawArraysInstanced.bind(e),drawElementsInstanced:e.drawElementsInstanced.bind(e),vertexAttribDivisor:e.vertexAttribDivisor.bind(e),VERTEX_ATTRIB_ARRAY_DIVISOR:e.VERTEX_ATTRIB_ARRAY_DIVISOR};{let t=e.getExtension("ANGLE_instanced_arrays");return t===null?null:{drawArraysInstanced:t.drawArraysInstancedANGLE.bind(t),drawElementsInstanced:t.drawElementsInstancedANGLE.bind(t),vertexAttribDivisor:t.vertexAttribDivisorANGLE.bind(t),VERTEX_ATTRIB_ARRAY_DIVISOR:t.VERTEX_ATTRIB_ARRAY_DIVISOR_ANGLE}}}function Kpe(e){if(mr(e))return{FRAGMENT_SHADER_DERIVATIVE_HINT:e.FRAGMENT_SHADER_DERIVATIVE_HINT};{let t=e.getExtension("OES_standard_derivatives");return t===null?null:{FRAGMENT_SHADER_DERIVATIVE_HINT:t.FRAGMENT_SHADER_DERIVATIVE_HINT_OES}}}function jpe(e){return mr(e)?{}:e.getExtension("OES_element_index_uint")}function Wpe(e){if(mr(e))return{VERTEX_ARRAY_BINDING:e.VERTEX_ARRAY_BINDING,bindVertexArray:e.bindVertexArray.bind(e),createVertexArray:e.createVertexArray.bind(e),deleteVertexArray:e.deleteVertexArray.bind(e),isVertexArray:e.isVertexArray.bind(e)};{let t=e.getExtension("OES_vertex_array_object");return t===null?null:{VERTEX_ARRAY_BINDING:t.VERTEX_ARRAY_BINDING_OES,bindVertexArray:t.bindVertexArrayOES.bind(t),createVertexArray:t.createVertexArrayOES.bind(t),deleteVertexArray:t.deleteVertexArrayOES.bind(t),isVertexArray:t.isVertexArrayOES.bind(t)}}}function Xpe(e){return mr(e)?{}:e.getExtension("OES_texture_float")}function Zpe(e){return e.getExtension("OES_texture_float_linear")}function qpe(e){if(mr(e))return{HALF_FLOAT:e.HALF_FLOAT};{let t=e.getExtension("OES_texture_half_float");return t===null?null:{HALF_FLOAT:t.HALF_FLOAT_OES}}}function $pe(e){return e.getExtension("OES_texture_half_float_linear")}function efe(e){if(mr(e))return{MIN:e.MIN,MAX:e.MAX};{let t=e.getExtension("EXT_blend_minmax");return t===null?null:{MIN:t.MIN_EXT,MAX:t.MAX_EXT}}}function tfe(e){return mr(e)?{}:e.getExtension("EXT_frag_depth")}function rfe(e){if(mr(e))return e.getExtension("EXT_color_buffer_float")===null?null:(e.getExtension("EXT_float_blend"),{RGBA32F:e.RGBA32F});{let t=e.getExtension("WEBGL_color_buffer_float");return t===null?(e.getExtension("OES_texture_float"),WIe(e,e.FLOAT)?{RGBA32F:34836}:null):(e.getExtension("EXT_float_blend"),{RGBA32F:t.RGBA32F_EXT})}}function nfe(e){if(mr(e))return e.getExtension("EXT_color_buffer_half_float")===null?null:(e.getExtension("EXT_float_blend"),{RGBA16F:e.RGBA16F});{let t=e.getExtension("EXT_color_buffer_half_float");return t===null?(e.getExtension("OES_texture_half_float"),WIe(e,36193)?{RGBA16F:34842}:null):(e.getExtension("EXT_float_blend"),{RGBA16F:t.RGBA16F_EXT})}}function ofe(e){if(mr(e))return{drawBuffers:e.drawBuffers.bind(e),COLOR_ATTACHMENT0:e.COLOR_ATTACHMENT0,COLOR_ATTACHMENT1:e.COLOR_ATTACHMENT1,COLOR_ATTACHMENT2:e.COLOR_ATTACHMENT2,COLOR_ATTACHMENT3:e.COLOR_ATTACHMENT3,COLOR_ATTACHMENT4:e.COLOR_ATTACHMENT4,COLOR_ATTACHMENT5:e.COLOR_ATTACHMENT5,COLOR_ATTACHMENT6:e.COLOR_ATTACHMENT6,COLOR_ATTACHMENT7:e.COLOR_ATTACHMENT7,DRAW_BUFFER0:e.DRAW_BUFFER0,DRAW_BUFFER1:e.DRAW_BUFFER1,DRAW_BUFFER2:e.DRAW_BUFFER2,DRAW_BUFFER3:e.DRAW_BUFFER3,DRAW_BUFFER4:e.DRAW_BUFFER4,DRAW_BUFFER5:e.DRAW_BUFFER5,DRAW_BUFFER6:e.DRAW_BUFFER6,DRAW_BUFFER7:e.DRAW_BUFFER7,MAX_COLOR_ATTACHMENTS:e.MAX_COLOR_ATTACHMENTS,MAX_DRAW_BUFFERS:e.MAX_DRAW_BUFFERS};{let t=e.getExtension("WEBGL_draw_buffers");return t===null?null:{drawBuffers:t.drawBuffersWEBGL.bind(t),COLOR_ATTACHMENT0:t.COLOR_ATTACHMENT0_WEBGL,COLOR_ATTACHMENT1:t.COLOR_ATTACHMENT1_WEBGL,COLOR_ATTACHMENT2:t.COLOR_ATTACHMENT2_WEBGL,COLOR_ATTACHMENT3:t.COLOR_ATTACHMENT3_WEBGL,COLOR_ATTACHMENT4:t.COLOR_ATTACHMENT4_WEBGL,COLOR_ATTACHMENT5:t.COLOR_ATTACHMENT5_WEBGL,COLOR_ATTACHMENT6:t.COLOR_ATTACHMENT6_WEBGL,COLOR_ATTACHMENT7:t.COLOR_ATTACHMENT7_WEBGL,DRAW_BUFFER0:t.DRAW_BUFFER0_WEBGL,DRAW_BUFFER1:t.DRAW_BUFFER1_WEBGL,DRAW_BUFFER2:t.DRAW_BUFFER2_WEBGL,DRAW_BUFFER3:t.DRAW_BUFFER3_WEBGL,DRAW_BUFFER4:t.DRAW_BUFFER4_WEBGL,DRAW_BUFFER5:t.DRAW_BUFFER5_WEBGL,DRAW_BUFFER6:t.DRAW_BUFFER6_WEBGL,DRAW_BUFFER7:t.DRAW_BUFFER7_WEBGL,MAX_COLOR_ATTACHMENTS:t.MAX_COLOR_ATTACHMENTS_WEBGL,MAX_DRAW_BUFFERS:t.MAX_DRAW_BUFFERS_WEBGL}}}function ife(e){let t=e.getExtension("OES_draw_buffers_indexed");return t===null?null:{enablei:t.enableiOES.bind(t),disablei:t.disableiOES.bind(t),blendEquationi:t.blendEquationiOES.bind(t),blendEquationSeparatei:t.blendEquationSeparateiOES.bind(t),blendFunci:t.blendFunciOES.bind(t),blendFuncSeparatei:t.blendFuncSeparateiOES.bind(t),colorMaski:t.colorMaskiOES.bind(t)}}function afe(e){return mr(e)?{}:e.getExtension("EXT_shader_texture_lod")}function Afe(e){if(mr(e))return{UNSIGNED_INT_24_8:e.UNSIGNED_INT_24_8};{let t=e.getExtension("WEBGL_depth_texture");return t===null?null:{UNSIGNED_INT_24_8:t.UNSIGNED_INT_24_8_WEBGL}}}function sfe(e){if(mr(e))return{FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING:e.FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING,SRGB8_ALPHA8:e.SRGB8_ALPHA8,SRGB8:e.SRGB8,SRGB:e.SRGB};{let t=e.getExtension("EXT_sRGB");return t===null?null:{FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING:t.FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING_EXT,SRGB8_ALPHA8:t.SRGB8_ALPHA8_EXT,SRGB8:t.SRGB_ALPHA_EXT,SRGB:t.SRGB_EXT}}}function cfe(e){if(mr(e)){let t=e.getExtension("EXT_disjoint_timer_query_webgl2")||e.getExtension("EXT_disjoint_timer_query");return t===null?null:{QUERY_COUNTER_BITS:t.QUERY_COUNTER_BITS_EXT,CURRENT_QUERY:e.CURRENT_QUERY,QUERY_RESULT:e.QUERY_RESULT,QUERY_RESULT_AVAILABLE:e.QUERY_RESULT_AVAILABLE,TIME_ELAPSED:t.TIME_ELAPSED_EXT,TIMESTAMP:t.TIMESTAMP_EXT,GPU_DISJOINT:t.GPU_DISJOINT_EXT,createQuery:e.createQuery.bind(e),deleteQuery:e.deleteQuery.bind(e),isQuery:e.isQuery.bind(e),beginQuery:e.beginQuery.bind(e),endQuery:e.endQuery.bind(e),queryCounter:t.queryCounterEXT.bind(t),getQuery:e.getQuery.bind(e),getQueryParameter:e.getQueryParameter.bind(e)}}else{let t=e.getExtension("EXT_disjoint_timer_query");return t===null?null:{QUERY_COUNTER_BITS:t.QUERY_COUNTER_BITS_EXT,CURRENT_QUERY:t.CURRENT_QUERY_EXT,QUERY_RESULT:t.QUERY_RESULT_EXT,QUERY_RESULT_AVAILABLE:t.QUERY_RESULT_AVAILABLE_EXT,TIME_ELAPSED:t.TIME_ELAPSED_EXT,TIMESTAMP:t.TIMESTAMP_EXT,GPU_DISJOINT:t.GPU_DISJOINT_EXT,createQuery:t.createQueryEXT.bind(t),deleteQuery:t.deleteQueryEXT.bind(t),isQuery:t.isQueryEXT.bind(t),beginQuery:t.beginQueryEXT.bind(t),endQuery:t.endQueryEXT.bind(t),queryCounter:t.queryCounterEXT.bind(t),getQuery:t.getQueryEXT.bind(t),getQueryParameter:t.getQueryObjectEXT.bind(t)}}}function lfe(e){let t=e.getExtension("WEBGL_multi_draw");return t?{multiDrawArrays:t.multiDrawArraysWEBGL.bind(t),multiDrawElements:t.multiDrawElementsWEBGL.bind(t),multiDrawArraysInstanced:t.multiDrawArraysInstancedWEBGL.bind(t),multiDrawElementsInstanced:t.multiDrawElementsInstancedWEBGL.bind(t)}:null}function ufe(e){let t=e.getExtension("WEBGL_draw_instanced_base_vertex_base_instance");return t?{drawArraysInstancedBaseInstance:t.drawArraysInstancedBaseInstanceWEBGL.bind(t),drawElementsInstancedBaseVertexBaseInstance:t.drawElementsInstancedBaseVertexBaseInstanceWEBGL.bind(t)}:null}function gfe(e){let t=e.getExtension("WEBGL_multi_draw_instanced_base_vertex_base_instance");return t?{multiDrawArraysInstancedBaseInstance:t.multiDrawArraysInstancedBaseInstanceWEBGL.bind(t),multiDrawElementsInstancedBaseVertexBaseInstance:t.multiDrawElementsInstancedBaseVertexBaseInstanceWEBGL.bind(t)}:null}function mfe(e){let t=e.getExtension("KHR_parallel_shader_compile");return t===null?null:{COMPLETION_STATUS:t.COMPLETION_STATUS_KHR}}function dfe(e){return mr(e)?{}:e.getExtension("OES_fbo_render_mipmap")}function pfe(e){if(mr(e)){let t=e.getExtension("WEBGL_provoking_vertex");if(t)return{FIRST_VERTEX_CONVENTION:t.FIRST_VERTEX_CONVENTION_WEBGL,LAST_VERTEX_CONVENTION:t.LAST_VERTEX_CONVENTION_WEBGL,PROVOKING_VERTEX:t.PROVOKING_VERTEX_WEBGL,provokingVertex:t.provokingVertexWEBGL.bind(t)}}return null}function ffe(e){if(mr(e)){let t=e.getExtension("WEBGL_clip_cull_distance");if(t)return{MAX_CLIP_DISTANCES:t.MAX_CLIP_DISTANCES_WEBGL,MAX_CULL_DISTANCES:t.MAX_CULL_DISTANCES_WEBGL,MAX_COMBINED_CLIP_AND_CULL_DISTANCES:t.MAX_COMBINED_CLIP_AND_CULL_DISTANCES_WEBGL,CLIP_DISTANCE0:t.CLIP_DISTANCE0_WEBGL,CLIP_DISTANCE1:t.CLIP_DISTANCE1_WEBGL,CLIP_DISTANCE2:t.CLIP_DISTANCE2_WEBGL,CLIP_DISTANCE3:t.CLIP_DISTANCE3_WEBGL,CLIP_DISTANCE4:t.CLIP_DISTANCE4_WEBGL,CLIP_DISTANCE5:t.CLIP_DISTANCE5_WEBGL,CLIP_DISTANCE6:t.CLIP_DISTANCE6_WEBGL,CLIP_DISTANCE7:t.CLIP_DISTANCE7_WEBGL}}return null}function Bfe(e){return mr(e)&&e.getExtension("EXT_conservative_depth")?{}:null}function Ife(e){if(mr(e)){let t=e.getExtension("WEBGL_stencil_texturing");if(t)return{DEPTH_STENCIL_TEXTURE_MODE:t.DEPTH_STENCIL_TEXTURE_MODE_WEBGL,STENCIL_INDEX:t.STENCIL_INDEX_WEBGL}}return null}function Cfe(e){let t=e.getExtension("EXT_clip_control");return t?{LOWER_LEFT:t.LOWER_LEFT_EXT,UPPER_LEFT:t.UPPER_LEFT_EXT,NEGATIVE_ONE_TO_ONE:t.NEGATIVE_ONE_TO_ONE_EXT,ZERO_TO_ONE:t.ZERO_TO_ONE_EXT,CLIP_ORIGIN:t.CLIP_ORIGIN_EXT,CLIP_DEPTH_MODE:t.CLIP_DEPTH_MODE_EXT,clipControl:t.clipControlEXT.bind(t)}:null}function hfe(e){return mr(e)&&e.getExtension("EXT_render_snorm")?{}:null}function yfe(e){return mr(e)&&e.getExtension("WEBGL_render_shared_exponent")?{}:null}function Qfe(e){let t=e.getExtension("EXT_texture_norm16");return t?{R16:t.R16_EXT,RG16:t.RG16_EXT,RGB16:t.RGB16_EXT,RGBA16:t.RGBA16_EXT,R16_SNORM:t.R16_SNORM_EXT,RG16_SNORM:t.RG16_SNORM_EXT,RGB16_SNORM:t.RGB16_SNORM_EXT,RGBA16_SNORM:t.RGBA16_SNORM_EXT}:null}function Efe(e){let t=e.getExtension("EXT_depth_clamp");return t?{DEPTH_CLAMP:t.DEPTH_CLAMP_EXT}:null}function bfe(e){if(mr(e)){let t=e.getExtension("OVR_multiview2");if(t)return{FRAMEBUFFER_ATTACHMENT_TEXTURE_NUM_VIEWS:t.FRAMEBUFFER_ATTACHMENT_TEXTURE_NUM_VIEWS_OVR,FRAMEBUFFER_ATTACHMENT_TEXTURE_BASE_VIEW_INDEX:t.FRAMEBUFFER_ATTACHMENT_TEXTURE_BASE_VIEW_INDEX_OVR,MAX_VIEWS:t.MAX_VIEWS_OVR,FRAMEBUFFER_INCOMPLETE_VIEW_TARGETS:t.FRAMEBUFFER_INCOMPLETE_VIEW_TARGETS_OVR,framebufferTextureMultiview:t.framebufferTextureMultiviewOVR.bind(t)}}return null}function xfe(e){if(!mr(e))return!1;if(typeof navigator<"u"){let t=window.navigator.userAgent.match(/Firefox\/([0-9]+)\./);return t?parseInt(t[1])>=85:!0}return!1}var j$e=`
|
|
attribute vec4 aPosition;
|
|
|
|
void main() {
|
|
gl_Position = aPosition;
|
|
}`,W$e=`
|
|
precision mediump float;
|
|
uniform vec4 uColor;
|
|
uniform sampler2D uTexture;
|
|
|
|
void main() {
|
|
gl_FragColor = texture2D(uTexture, vec2(0.5, 0.5)) * uColor;
|
|
}`,X$e=new Float32Array([-1,-1,1,-1,-1,1,-1,1,1,-1,1,1]);function WIe(e,t){let r=k2(e,{type:"vert",source:j$e}),n=k2(e,{type:"frag",source:W$e});if(!r||!n)return!1;let o=RN(e);e.attachShader(o,r),e.attachShader(o,n),e.linkProgram(o),e.useProgram(o);let i=e.getAttribLocation(o,"aPosition"),a=e.getUniformLocation(o,"uColor");if(!a)return ir&&console.log("error getting 'uColor' uniform location"),!1;let A=e.createBuffer();e.bindBuffer(e.ARRAY_BUFFER,A),e.bufferData(e.ARRAY_BUFFER,X$e,e.STATIC_DRAW),e.enableVertexAttribArray(i),e.vertexAttribPointer(i,2,e.FLOAT,!1,0,0);let s=e.createTexture(),c=new Uint8Array([255,255,255,255]);e.bindTexture(e.TEXTURE_2D,s),e.texImage2D(e.TEXTURE_2D,0,e.RGBA,1,1,0,e.RGBA,e.UNSIGNED_BYTE,c);let l=e.createTexture();e.bindTexture(e.TEXTURE_2D,l),e.texImage2D(e.TEXTURE_2D,0,e.RGBA,1,1,0,e.RGBA,t,null),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,e.NEAREST),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,e.NEAREST);let u=e.createFramebuffer();if(e.bindFramebuffer(e.FRAMEBUFFER,u),e.framebufferTexture2D(e.FRAMEBUFFER,e.COLOR_ATTACHMENT0,e.TEXTURE_2D,l,0),e.checkFramebufferStatus(e.FRAMEBUFFER)!==e.FRAMEBUFFER_COMPLETE)return ir&&console.log(`error creating framebuffer for '${t}'`),!1;e.bindTexture(e.TEXTURE_2D,s),e.uniform4fv(a,[0,10,20,1]),e.drawArrays(e.TRIANGLES,0,6),e.bindTexture(e.TEXTURE_2D,l),e.bindFramebuffer(e.FRAMEBUFFER,null),e.clearColor(1,0,0,1),e.clear(e.COLOR_BUFFER_BIT),e.uniform4fv(a,[0,1/10,1/20,1]),e.drawArrays(e.TRIANGLES,0,6);let m=new Uint8Array(4);if(e.readPixels(0,0,1,1,e.RGBA,e.UNSIGNED_BYTE,m),m[0]!==0||m[1]<248||m[2]<248||m[3]<254)return ir&&console.log(`not able to actually render to '${t}' texture`),!1;if(t===e.FLOAT){e.bindFramebuffer(e.FRAMEBUFFER,u);let p=new Float32Array(4);e.readPixels(0,0,1,1,e.RGBA,e.FLOAT,p);let d=e.getError();if(d)return ir&&console.log(`error reading float pixels: '${g9(e,d)}'`),!1}return!0}var d9=ua();function Z$e(e,t){switch(t){case"image-uint8":return e.TEXTURE_2D;case"image-float32":return e.TEXTURE_2D;case"image-float16":return e.TEXTURE_2D;case"image-depth":return e.TEXTURE_2D}if(mr(e))switch(t){case"image-int32":return e.TEXTURE_2D;case"volume-uint8":return e.TEXTURE_3D;case"volume-float32":return e.TEXTURE_3D;case"volume-float16":return e.TEXTURE_3D}throw new Error(`unknown texture kind '${t}'`)}function wN(e,t,r){switch(t){case"alpha":return mr(e)&&(r==="float"||r==="fp16")?e.RED:mr(e)&&r==="int"?e.RED_INTEGER:e.ALPHA;case"rgb":return mr(e)&&r==="int"?e.RGB_INTEGER:e.RGB;case"rg":if(mr(e)&&(r==="float"||r==="fp16"))return e.RG;if(mr(e)&&r==="int")return e.RG_INTEGER;throw new Error('texture format "rg" requires webgl2 and type "float" or int"');case"rgba":return mr(e)&&r==="int"?e.RGBA_INTEGER:e.RGBA;case"depth":return e.DEPTH_COMPONENT}}function q$e(e,t,r){if(mr(e))switch(t){case"alpha":switch(r){case"ubyte":return e.ALPHA;case"float":return e.R32F;case"fp16":return e.R16F;case"int":return e.R32I}case"rg":switch(r){case"ubyte":return e.RG;case"float":return e.RG32F;case"fp16":return e.RG16F;case"int":return e.RG32I}case"rgb":switch(r){case"ubyte":return e.RGB;case"float":return e.RGB32F;case"fp16":return e.RGB16F;case"int":return e.RGB32I}case"rgba":switch(r){case"ubyte":return e.RGBA;case"float":return e.RGBA32F;case"fp16":return e.RGBA16F;case"int":return e.RGBA32I}case"depth":switch(r){case"ushort":return e.DEPTH_COMPONENT16;case"float":return e.DEPTH_COMPONENT32F}}return wN(e,t,r)}function $Ie(e,t,r,n,o){return Xj(e,t)*r*n*(o||1)}function Xj(e,t){return $$e(e)*eet(t)}function $$e(e){switch(e){case"alpha":return 1;case"rg":return 2;case"rgb":return 3;case"rgba":return 4;case"depth":return 4}}function eet(e){switch(e){case"ubyte":return 1;case"ushort":return 2;case"float":return 4;case"fp16":return 2;case"int":return 4}}function Zj(e,t,r){switch(r){case"ubyte":return e.UNSIGNED_BYTE;case"ushort":return e.UNSIGNED_SHORT;case"float":return e.FLOAT;case"fp16":if(t.textureHalfFloat)return t.textureHalfFloat.HALF_FLOAT;throw new Error('extension "texture_half_float" unavailable');case"int":if(mr(e))return e.INT;throw new Error('texture type "int" requires webgl2')}}function XIe(e,t){switch(t){case"nearest":return e.NEAREST;case"linear":return e.LINEAR}}function rM(e,t,r){switch(r){case"depth":return e.DEPTH_ATTACHMENT;case"stencil":return e.STENCIL_ATTACHMENT;case"color0":case 0:return e.COLOR_ATTACHMENT0}if(t.drawBuffers)switch(r){case"color1":case 1:return t.drawBuffers.COLOR_ATTACHMENT1;case"color2":case 2:return t.drawBuffers.COLOR_ATTACHMENT2;case"color3":case 3:return t.drawBuffers.COLOR_ATTACHMENT3;case"color4":case 4:return t.drawBuffers.COLOR_ATTACHMENT4;case"color5":case 5:return t.drawBuffers.COLOR_ATTACHMENT5;case"color6":case 6:return t.drawBuffers.COLOR_ATTACHMENT6;case"color7":case 7:return t.drawBuffers.COLOR_ATTACHMENT7}throw new Error("unknown texture attachment")}function ZIe(e){return typeof HTMLImageElement<"u"&&e instanceof HTMLImageElement}function tet(e,t,r){return t===r.TEXTURE_2D}function qIe(e,t,r){return t===r.TEXTURE_3D}function m9(e){let t=e.createTexture();if(t===null)throw new Error("Could not create WebGL texture");return t}function nIe(e,t,r,n,o,i){let a=d9(),A=m9(e);if(r.endsWith("float32")&&o!=="float"||r.endsWith("float16")&&o!=="fp16"||r.endsWith("uint8")&&o!=="ubyte"||r.endsWith("int32")&&o!=="int"||r.endsWith("depth")&&o!=="ushort"&&o!=="float")throw new Error(`texture kind '${r}' and type '${o}' are incompatible`);if(!t.depthTexture&&n==="depth")throw new Error("extension 'WEBGL_depth_texture' needed for 'depth' texture format");let s=Z$e(e,r),c=XIe(e,i),l=wN(e,n,o),u=q$e(e,n,o),g=Zj(e,t,o);function m(){e.bindTexture(s,A),e.texParameteri(s,e.TEXTURE_MAG_FILTER,c),e.texParameteri(s,e.TEXTURE_MIN_FILTER,c),e.texParameteri(s,e.TEXTURE_WRAP_S,e.CLAMP_TO_EDGE),e.texParameteri(s,e.TEXTURE_WRAP_T,e.CLAMP_TO_EDGE),e.bindTexture(s,null)}m();let p=0,d=0,f=0,I,C=!1,y=!1;function Q(S,w,R){if(S===0||w===0||mr(e)&&s===e.TEXTURE_3D&&R===0)throw new Error("empty textures are not allowed");if(!(p===S&&d===w&&f===(R||0)))if(p=S,d=w,f=R||0,e.bindTexture(s,A),s===e.TEXTURE_2D)e.texImage2D(s,0,u,p,d,0,l,g,null);else if(mr(e)&&s===e.TEXTURE_3D&&f!==void 0)e.texImage3D(s,0,u,p,d,f,0,l,g,null);else throw new Error("unknown texture target")}Q(1,1,mr(e)&&s===e.TEXTURE_3D?1:0);function E(S,w=!1){if(S.width===0||S.height===0||!ZIe(S)&&mr(e)&&qIe(S,s,e)&&S.depth===0)throw new Error("empty textures are not allowed");if(e.bindTexture(s,A),e.pixelStorei(e.UNPACK_ALIGNMENT,1),e.pixelStorei(e.UNPACK_COLORSPACE_CONVERSION_WEBGL,e.NONE),e.pixelStorei(e.UNPACK_PREMULTIPLY_ALPHA_WEBGL,0),ZIe(S))p=S.width,d=S.height,e.pixelStorei(e.UNPACK_FLIP_Y_WEBGL,!1),e.bindTexture(e.TEXTURE_2D,A),e.texImage2D(e.TEXTURE_2D,0,u,l,g,S);else if(tet(S,s,e)){let R=S.filter?XIe(e,S.filter):c;e.texParameteri(s,e.TEXTURE_MAG_FILTER,R),e.texParameteri(s,e.TEXTURE_MIN_FILTER,R),e.pixelStorei(e.UNPACK_FLIP_Y_WEBGL,!!S.flipY),w?e.texSubImage2D(s,0,0,0,S.width,S.height,l,g,S.array):(p=S.width,d=S.height,e.texImage2D(s,0,u,p,d,0,l,g,S.array))}else if(mr(e)&&qIe(S,s,e))e.pixelStorei(e.UNPACK_FLIP_Y_WEBGL,!1),w?e.texSubImage3D(s,0,0,0,0,S.width,S.height,S.depth,l,g,S.array):(p=S.width,d=S.height,f=S.depth,e.texImage3D(s,0,u,p,d,f,0,l,g,S.array));else throw new Error("unknown texture target");e.bindTexture(s,null),I=S}function b(){if(s!==e.TEXTURE_2D)throw new Error("mipmap only supported for 2d textures");if(mr(e)||Ly(p)&&Ly(d))e.bindTexture(s,A),e.texParameteri(s,e.TEXTURE_MIN_FILTER,e.LINEAR_MIPMAP_LINEAR),e.generateMipmap(s),e.bindTexture(s,null),C=!0;else throw new Error("mipmap unsupported for non-power-of-two textures and webgl1")}function x(S,w,R){if(S.bind(),s===e.TEXTURE_2D)e.framebufferTexture2D(e.FRAMEBUFFER,rM(e,t,w),e.TEXTURE_2D,A,0);else if(mr(e)&&s===e.TEXTURE_3D){if(R===void 0)throw new Error("need `layer` to attach 3D texture");e.framebufferTextureLayer(e.FRAMEBUFFER,rM(e,t,w),A,0,R)}else throw new Error("unknown/unsupported texture target")}return{id:a,target:s,format:l,internalFormat:u,type:g,filter:c,getWidth:()=>p,getHeight:()=>d,getDepth:()=>f,getByteCount:()=>$Ie(n,o,p,d,f),define:Q,load:E,mipmap:b,bind:S=>{e.activeTexture(e.TEXTURE0+S),e.bindTexture(s,A)},unbind:S=>{e.activeTexture(e.TEXTURE0+S),e.bindTexture(s,null)},attachFramebuffer:x,detachFramebuffer:(S,w)=>{if(S.bind(),s===e.TEXTURE_2D)e.framebufferTexture2D(e.FRAMEBUFFER,rM(e,t,w),e.TEXTURE_2D,null,0);else if(mr(e)&&s===e.TEXTURE_3D)e.framebufferTextureLayer(e.FRAMEBUFFER,rM(e,t,w),null,0,0);else throw new Error("unknown texture target")},reset:()=>{A=m9(e),m();let[S,w,R]=[p,d,f];p=0,d=0,f=0,Q(S,w,R),I&&E(I),C&&b()},destroy:()=>{y||(e.deleteTexture(A),y=!0)}}}function p9(e,t,r){let{resources:n}=e,o=[];return Object.keys(t).forEach(i=>{let a=t[i];if(a.type==="texture"){let A=r[i];if(A)if(a.kind==="texture")o[o.length]=[i,A.ref.value];else{let s=n.texture(a.kind,a.format,a.dataType,a.filter);s.load(A.ref.value),o[o.length]=[i,s]}}}),o}function f9(e,t,r){let n=new Image;n.onload=function(){r.load(n),D.update(t,r)},n.src=e}function ret(e,t){switch(t){case"nx":return e.TEXTURE_CUBE_MAP_NEGATIVE_X;case"ny":return e.TEXTURE_CUBE_MAP_NEGATIVE_Y;case"nz":return e.TEXTURE_CUBE_MAP_NEGATIVE_Z;case"px":return e.TEXTURE_CUBE_MAP_POSITIVE_X;case"py":return e.TEXTURE_CUBE_MAP_POSITIVE_Y;case"pz":return e.TEXTURE_CUBE_MAP_POSITIVE_Z}}function oIe(e,t,r,n){let o=e.TEXTURE_CUBE_MAP,i=e.LINEAR,a=e.RGBA,A=e.RGBA,s=e.UNSIGNED_BYTE,c=0,l=e.createTexture();e.bindTexture(o,l);function u(d,f,I,C){c===0&&(c=I.width),e.bindTexture(o,l),e.texImage2D(d,f,a,c,c,0,A,s,null),e.pixelStorei(e.UNPACK_ALIGNMENT,4),e.pixelStorei(e.UNPACK_COLORSPACE_CONVERSION_WEBGL,e.NONE),e.pixelStorei(e.UNPACK_PREMULTIPLY_ALPHA_WEBGL,0),e.pixelStorei(e.UNPACK_FLIP_Y_WEBGL,!1),e.bindTexture(o,l),e.texImage2D(d,f,a,A,s,I),m+=1,m===6&&(p||(r?(e.texParameteri(o,e.TEXTURE_MIN_FILTER,e.LINEAR_MIPMAP_LINEAR),e.generateMipmap(o)):e.texParameteri(o,e.TEXTURE_MIN_FILTER,i),e.texParameteri(o,e.TEXTURE_MAG_FILTER,i)),C||n?.(p))}let g=[],m=0;Bi(t,(d,f)=>{if(!d)return;let I=0,C=ret(e,f),y=new Image;d instanceof File?y.src=URL.createObjectURL(d):Uy(d)?d.then(Q=>{y.src=URL.createObjectURL(Q)}):y.src=d,g.push({cubeTarget:C,level:I,image:y}),y.addEventListener("load",()=>{u(C,I,y,!1)}),y.addEventListener("error",()=>{n?.(!0)})});let p=!1;return{id:d9(),target:o,format:A,internalFormat:a,type:s,filter:i,getWidth:()=>c,getHeight:()=>c,getDepth:()=>0,getByteCount:()=>$Ie("rgba","ubyte",c,c,0)*6*(r?2:1),define:()=>{},load:()=>{},mipmap:()=>{},bind:d=>{e.activeTexture(e.TEXTURE0+d),e.bindTexture(o,l)},unbind:d=>{e.activeTexture(e.TEXTURE0+d),e.bindTexture(o,null)},attachFramebuffer:()=>{},detachFramebuffer:()=>{},reset:()=>{l=m9(e),e.bindTexture(o,l),m=0;for(let{cubeTarget:d,level:f,image:I}of g)u(d,f,I,!0)},destroy:()=>{p||(e.deleteTexture(l),p=!0)}}}var eCe=-1;function tCe(e){return e.format===eCe}function Ti(e){let t=e?.TEXTURE_2D??3553;return{id:d9(),target:t,format:eCe,internalFormat:0,type:0,filter:0,getWidth:()=>0,getHeight:()=>0,getDepth:()=>0,getByteCount:()=>0,define:()=>{},load:()=>{},mipmap:()=>{},bind:r=>{e&&(e.activeTexture(e.TEXTURE0+r),e.bindTexture(t,null))},unbind:r=>{e&&(e.activeTexture(e.TEXTURE0+r),e.bindTexture(t,null))},attachFramebuffer:()=>{throw new Error("cannot attach null-texture to a framebuffer")},detachFramebuffer:()=>{throw new Error("cannot detach null-texture from a framebuffer")},reset:()=>{},destroy:()=>{}}}function cA(e,t,r,n){let o=net(e,t,r,n);if(r.palette){D.updateIfChanged(o.dUsePalette,!0);let[i,a]=r.palette.domain||[0,1];D.update(o.uPaletteDomain,Le.set(o.uPaletteDomain.ref.value,i,a)),D.update(o.uPaletteDefault,ke.toVec3Normalized(o.uPaletteDefault.ref.value,r.palette.defaultColor??13421772)),oet(r.palette,o.tPalette)}else D.updateIfChanged(o.dUsePalette,!1);return o}function net(e,t,r,n){switch(r.granularity){case"uniform":return aet(e,r.color,n);case"instance":return e.nonInstanceable?rCe(e,r.color,n):Aet(e,r.color,n);case"group":return rCe(e,r.color,n);case"groupInstance":return set(e,r.color,n);case"vertex":return cet(t,r.color,n);case"vertexInstance":return uet(t,r.color,n);case"volume":return nCe(r.grid,"volume",n);case"volumeInstance":return nCe(r.grid,"volumeInstance",n);case"direct":return get(n)}}function oet(e,t){let r=!0,n=t.ref.value;if(e.colors.length!==n.width||n.filter!==e.filter)r=!1;else{let a=n.array,A=0;for(let s of e.colors){let[c,l,u]=ke.toRgb(s);if(a[A++]!==c||a[A++]!==l||a[A++]!==u){r=!1;break}}}if(r)return;let o=new Uint8Array(e.colors.length*3),i=0;for(let a of e.colors){let[A,s,c]=ke.toRgb(a);o[i++]=A,o[i++]=s,o[i++]=c}D.update(t,{array:o,height:1,width:e.colors.length,filter:e.filter})}function iet(e,t){return t?(D.update(t.uColor,ke.toVec3Normalized(t.uColor.ref.value,e)),D.updateIfChanged(t.dColorType,"uniform"),t):{uColor:D.create(ke.toVec3Normalized(B(),e)),tColor:D.create({array:new Uint8Array(3),width:1,height:1}),tColorGrid:D.create(Ti()),uPaletteDomain:D.create(Le.create(0,1)),uPaletteDefault:D.create(B()),tPalette:D.create({array:new Uint8Array(3),width:1,height:1}),uColorTexDim:D.create(Le.create(1,1)),uColorGridDim:D.create(B.create(1,1,1)),uColorGridTransform:D.create(lr.create(0,0,0,1)),dColorType:D.create("uniform"),dUsePalette:D.create(!1)}}function aet(e,t,r){e.reset();let n=e.hasNext?e.move():{location:vA,isSecondary:!1};return iet(t(n.location,n.isSecondary),r)}function z2(e,t,r){return r?(D.update(r.tColor,e),D.update(r.uColorTexDim,Le.create(e.width,e.height)),D.updateIfChanged(r.dColorType,t),r):{uColor:D.create(B()),tColor:D.create(e),tColorGrid:D.create(Ti()),uPaletteDomain:D.create(Le.create(0,1)),uPaletteDefault:D.create(B()),tPalette:D.create({array:new Uint8Array(3),width:1,height:1}),uColorTexDim:D.create(Le.create(e.width,e.height)),uColorGridDim:D.create(B.create(1,1,1)),uColorGridTransform:D.create(lr.create(0,0,0,1)),dColorType:D.create(t),dUsePalette:D.create(!1)}}function Aet(e,t,r){let{instanceCount:n}=e,o=Mo(Math.max(1,n),3,Uint8Array,r&&r.tColor.ref.value.array);for(e.reset();e.hasNext;){let{location:i,isSecondary:a,instanceIndex:A}=e.move();ke.toArray(t(i,a),o.array,A*3),e.skipInstance()}return z2(o,"instance",r)}function rCe(e,t,r){let{groupCount:n,hasLocation2:o}=e,i=Mo(Math.max(1,n*(o?2:1)),3,Uint8Array,r&&r.tColor.ref.value.array);e.reset();let a=o?6:3;for(;e.hasNext&&!e.isNextNewInstance;){let{location:A,location2:s,isSecondary:c,groupIndex:l}=e.move();ke.toArray(t(A,c),i.array,l*a),o&&ke.toArray(t(s,c),i.array,l*a+3)}return z2(i,"group",r)}function set(e,t,r){let{groupCount:n,instanceCount:o,hasLocation2:i}=e,a=o*n*(i?2:1),A=Mo(Math.max(1,a),3,Uint8Array,r&&r.tColor.ref.value.array);e.reset();let s=i?6:3;for(;e.hasNext;){let{location:c,location2:l,isSecondary:u,index:g}=e.move();ke.toArray(t(c,u),A.array,g*s),i&&ke.toArray(t(l,u),A.array,g*s+3)}return z2(A,"groupInstance",r)}function cet(e,t,r){let{groupCount:n,stride:o}=e,i=Mo(Math.max(1,n),3,Uint8Array,r&&r.tColor.ref.value.array);for(e.reset(),e.voidInstances();e.hasNext&&!e.isNextNewInstance;){let{location:a,isSecondary:A,groupIndex:s}=e.move(),c=t(a,A);for(let l=0;l<o;++l)ke.toArray(c,i.array,(s+l)*3)}return z2(i,"vertex",r)}function uet(e,t,r){let{groupCount:n,instanceCount:o,stride:i}=e,a=o*n,A=Mo(Math.max(1,a),3,Uint8Array,r&&r.tColor.ref.value.array);for(e.reset();e.hasNext;){let{location:s,isSecondary:c,index:l}=e.move(),u=t(s,c);for(let g=0;g<i;++g)ke.toArray(u,A.array,(l+g)*3)}return z2(A,"vertexInstance",r)}function nCe(e,t,r){let{colors:n,dimension:o,transform:i}=e,a=n.getWidth(),A=n.getHeight();return r?(D.update(r.tColorGrid,n),D.update(r.uColorTexDim,Le.create(a,A)),D.update(r.uColorGridDim,B.clone(o)),D.update(r.uColorGridTransform,lr.clone(i)),D.updateIfChanged(r.dColorType,t),r):{uColor:D.create(B()),tColor:D.create({array:new Uint8Array(3),width:1,height:1}),tColorGrid:D.create(n),uPaletteDomain:D.create(Le.create(0,1)),uPaletteDefault:D.create(B()),tPalette:D.create({array:new Uint8Array(3),width:1,height:1}),uColorTexDim:D.create(Le.create(a,A)),uColorGridDim:D.create(B.clone(o)),uColorGridTransform:D.create(lr.clone(i)),dColorType:D.create(t),dUsePalette:D.create(!1)}}function get(e){return e?(D.updateIfChanged(e.dColorType,"direct"),e):{uColor:D.create(B()),tColor:D.create({array:new Uint8Array(3),width:1,height:1}),tColorGrid:D.create(Ti()),uPaletteDomain:D.create(Le.create(0,1)),uPaletteDefault:D.create(B()),tPalette:D.create({array:new Uint8Array(3),width:1,height:1}),uColorTexDim:D.create(Le.create(1,1)),uColorGridDim:D.create(B.create(1,1,1)),uColorGridTransform:D.create(lr.create(0,0,0,1)),dColorType:D.create("direct"),dUsePalette:D.create(!1)}}var B9=B.transformMat4Offset,met=B.fromArray,nM=Ct.add;function oCe(){return{cellSize:0,cellCount:0,cellOffsets:new Uint32Array,cellSpheres:new Float32Array,cellTransform:new Float32Array,cellInstance:new Float32Array,batchSize:0,batchCount:0,batchOffsets:new Uint32Array,batchSpheres:new Float32Array,batchCell:new Uint32Array}}function iCe(e,t,r){let n=det(e,t),o=pet(n,r),i=new Uint32Array(n.cellOffsets.length),a=new Float32Array(n.cellSpheres.length),A=new Float32Array(n.cellInstance.length),s=0;for(let l=0,u=o.batchCell.length;l<u;++l){let g=o.batchCell[l],m=n.cellOffsets[g],d=n.cellOffsets[g+1]-m;i[l+1]=i[l]+d;for(let f=0;f<4;++f)a[l*4+f]=n.cellSpheres[g*4+f];for(let f=0;f<d;++f){let I=m+f,C=n.cellInstance[I];for(let y=0;y<16;++y)n.cellTransform[s*16+y]=e.transform[C*16+y];A[s]=C,s+=1}}return{cellSize:n.cellSize,cellCount:n.cellCount,cellOffsets:i,cellSpheres:a,cellTransform:n.cellTransform,cellInstance:A,batchSize:o.batchSize,batchCount:o.batchCount,batchOffsets:o.batchOffsets,batchSpheres:o.batchSpheres,batchCell:QA(o.batchCell)}}function det(e,t){let{instanceCount:r,instance:n,transform:o,invariantBoundingSphere:i}=e,a=new Float32Array(r),A=new Float32Array(r),s=new Float32Array(r),c=Ee.ofBounds(0,r),l=Ct.setEmpty(Ct()),{center:u,radius:g}=i,m=B.create(g,g,g),p=B();for(let F=0;F<r;++F)B9(p,u,o,0,0,F*16),a[F]=p[0],A[F]=p[1],s[F]=p[2],nM(l,p);Ct.expand(l,l,m);let d={x:a,y:A,z:s,indices:c},f={box:l,sphere:we.fromBox3D(we(),l)},I=ou(d,f,B.create(t,t,t)),{array:C,offset:y,count:Q}=I.buckets,E=y.length,b=new Uint32Array(E+1),x=new Float32Array(E*4),S=new Float32Array(r*16),w=new Float32Array(r),R=Ct(),T=we(),L=0;for(let F=0;F<E;++F){let v=y[F],U=Q[F];b[F]=v;let G=L;for(let N=v,k=v+U;N<k;++N){let J=C[N];w[L]=n[J];for(let H=0;H<16;++H)S[L*16+H]=o[J*16+H];L+=1}if(U===1)B9(x,u,S,F*4,0,G*16),x[F*4+3]=g;else{Ct.setEmpty(R);let N=G*16;for(let k=0;k<U;++k)B9(p,u,S,0,0,k*16+N),nM(R,p);Ct.expand(R,R,m),we.fromBox3D(T,R),we.toArray(T,x,F*4)}}return b[E]=y[E-1]+Q[E-1],{cellSize:t,cellCount:E,cellOffsets:b,cellSpheres:x,cellTransform:S,cellInstance:w}}function pet(e,t){let{cellCount:r,cellSpheres:n}=e,o=new Float32Array(r),i=new Float32Array(r),a=new Float32Array(r),A=Ee.ofBounds(0,r),s=Ct.setEmpty(Ct()),c=B(),l=0;for(let w=0;w<r;++w){let R=w*4;met(c,n,R),o[w]=c[0],i[w]=c[1],a[w]=c[2],nM(s,c),l=Math.max(l,n[R+3])}let u=B.create(l,l,l);Ct.expand(s,s,u);let g={x:o,y:i,z:a,indices:A},m={box:s,sphere:we.fromBox3D(we(),s)},p=ou(g,m,B.create(t,t,t)),{array:d,offset:f,count:I}=p.buckets,C=f.length,y=new Uint32Array(C+1),Q=new Float32Array(C*4),E=new Uint32Array(r),b=Ct(),x=we(),S=0;for(let w=0;w<C;++w){let R=f[w],T=I[w];y[w]=R;for(let L=R,F=R+T;L<F;++L)E[S]=d[L],S+=1;if(T===1){let L=d[R];Q[w*4]=n[L*4],Q[w*4+1]=n[L*4+1],Q[w*4+2]=n[L*4+2],Q[w*4+3]=n[L*4+3]}else{Ct.setEmpty(b),l=0;for(let L=R,F=R+T;L<F;++L){let v=d[L];c[0]=n[v*4],c[1]=n[v*4+1],c[2]=n[v*4+2],nM(b,c),l=Math.max(l,n[v*4+3])}B.set(u,l,l,l),Ct.expand(b,b,u),we.fromBox3D(x,b),we.toArray(x,Q,w*4)}}return y[C]=f[C-1]+I[C-1],{batchSize:t,batchCount:C,batchOffsets:y,batchSpheres:Q,batchCell:E}}var aCe=Ht(),fet=Y();function Bet(e,t){for(let r=0;r<t;r++)if(Ht.fromMat4(aCe,Y.fromArray(fet,e,r*16)),Ht.determinant(aCe)<0)return!0;return!1}function y0(e,t,r,n,o,i){let a=Bet(e,t);if(i){D.update(i.matrix,i.matrix.ref.value);let A=i.transform.ref.value.length>=t*16?i.transform.ref.value:new Float32Array(t*16);A.set(e),D.update(i.transform,A),D.updateIfChanged(i.uInstanceCount,t),D.updateIfChanged(i.instanceCount,t);let s=i.aTransform.ref.value.length>=t*16?i.aTransform.ref.value:new Float32Array(t*16);D.update(i.aTransform,s);let c=i.extraTransform.ref.value.length>=t*16?i.extraTransform.ref.value:new Float32Array(t*16);D.update(i.extraTransform,c),D.updateIfChanged(i.hasExtraTransform,!1);let l=i.aInstance.ref.value.length>=t?i.aInstance.ref.value:new Float32Array(t);D.update(i.aInstance,QA(l,t)),D.update(i.hasReflection,a)}else i={aTransform:D.create(new Float32Array(t*16)),matrix:D.create(Y.identity()),transform:D.create(new Float32Array(e)),extraTransform:D.create(new Float32Array(t*16)),hasExtraTransform:D.create(!1),uInstanceCount:D.create(t),instanceCount:D.create(t),aInstance:D.create(QA(new Float32Array(t))),hasReflection:D.create(a),instanceGrid:D.create(oCe())};return C9(i,r,n,o),i}var I9=new Float32Array(16);Y.toArray(Y.identity(),I9,0);function DD(e){return y0(new Float32Array(I9),1,void 0,0,0,e)}function ACe(e,t){for(let r=0;r<t;r++)e.set(I9,r*16);return e}function C9(e,t,r,n){let o=e.aTransform.ref.value,i=e.aInstance.ref.value,a=e.instanceCount.ref.value,A=e.matrix.ref.value,s=e.transform.ref.value,c=e.extraTransform.ref.value,l=e.hasExtraTransform.ref.value,u=Y.isIdentity(A);if(!l&&u)for(let g=0,m=a*16;g<m;g++)o[g]=s[g];else if(!l&&!u)for(let g=0;g<a;g++){let m=g*16;Y.mulOffset(o,A,s,m,0,m)}else if(l&&u)for(let g=0;g<a;g++){let m=g*16;Y.mulOffset(o,c,s,m,m,m)}else for(let g=0;g<a;g++){let m=g*16;Y.mulOffset(o,c,s,m,m,m),Y.mulOffset(o,A,o,m,0,m)}for(let g=0;g<a;g++)i[g]=g;if(t&&a>0){let g=iCe({instanceCount:a,instance:i,transform:o,invariantBoundingSphere:t},r,n);D.update(e.instanceGrid,g),D.update(e.aInstance,g.cellInstance),D.update(e.aTransform,g.cellTransform)}else D.update(e.aInstance,i),D.update(e.aTransform,o)}var xt={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,cornflower:6591981,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,laserlemon:16777044,lavender:15132410,lavenderblush:16773365,lawngreen:8190976,lemonchiffon:16775885,lightblue:11393254,lightcoral:15761536,lightcyan:14745599,lightgoldenrod:16448210,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,maroon2:8323072,maroon3:11546720,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,purple2:8323199,purple3:10494192,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},rIr=(function(){let e=new Map;return Object.keys(xt).forEach(t=>{e.set(xt[t],t)}),e})();var Br={Atom:"Atom Property",Chain:"Chain Property",Residue:"Residue Property",Symmetry:"Symmetry",Validation:"Validation",Misc:"Miscellaneous"};var sCe=13421772,Iet="Gives everything the same, uniform color.",ph={value:h.Color(sCe),saturation:h.Numeric(0,{min:-6,max:6,step:.1}),lightness:h.Numeric(0,{min:-6,max:6,step:.1})};function Cet(e){return ph}function zf(e,t){let r=AA(t.value,sCe);return r=ke.saturate(r,t.saturation),r=ke.lighten(r,t.lightness),{factory:zf,granularity:"uniform",color:()=>r,props:t,description:Iet,legend:Ba([["uniform",r]])}}var cCe={name:"uniform",label:"Uniform",category:Br.Misc,factory:zf,getParams:Cet,defaultValues:h.getDefaultValues(ph),isApplicable:e=>!0};var het="Gives everything the same, uniform size.",lCe={value:h.Numeric(1,{min:0,max:20,step:.1})};function yet(e){return lCe}function oM(e,t){let r=t.value;return{factory:oM,granularity:"uniform",size:()=>r,props:t,description:het}}var uCe={name:"uniform",label:"Uniform",category:"",factory:oM,getParams:yet,defaultValues:h.getDefaultValues(lCe),isApplicable:e=>!0};function Va(e){return{...Va.Zero,...e}}(a=>{a.Zero={metalness:0,roughness:0,bumpiness:0};function t(A,s,c){return s[c]=A.metalness*255,s[c+1]=A.roughness*255,s[c+2]=A.bumpiness*255,s}a.toArray=t;function r(A,s,c){return s[c]=A.metalness,s[c+1]=A.roughness,s[c+2]=A.bumpiness,s}a.toArrayNormalized=r;function n(A,s){return A.metalness===s.metalness&&A.roughness===s.roughness&&A.bumpiness===s.bumpiness}a.areEqual=n;function o({metalness:A,roughness:s,bumpiness:c}){return`M ${A.toFixed(2)} | R ${s.toFixed(2)} | B ${c.toFixed(2)}`}a.toString=o;function i(A){return h.Group({metalness:h.Numeric(0,{min:0,max:1,step:.01}),roughness:h.Numeric(1,{min:0,max:1,step:.01}),bumpiness:h.Numeric(0,{min:0,max:1,step:.01})},{...A,presets:[[{metalness:0,roughness:1,bumpiness:0},"Matte"],[{metalness:0,roughness:.2,bumpiness:0},"Plastic"],[{metalness:0,roughness:.6,bumpiness:0},"Glossy"],[{metalness:1,roughness:.6,bumpiness:0},"Metallic"]]})}a.getParam=i})(Va||={});function ha(){}(u=>{u.Type={none:0,plane:1,sphere:2,cube:3,cylinder:4,infiniteCone:5},u.Params={variant:h.Select("pixel",h.arrayToOptions(["instance","pixel"])),objects:h.ObjectList({type:h.Select("plane",h.objectToOptions(u.Type,g=>Ra(g))),invert:h.Boolean(!1),position:h.Vec3(B()),rotation:h.Group({axis:h.Vec3(B.create(1,0,0)),angle:h.Numeric(0,{min:-180,max:180,step:1},{description:"Angle in Degrees"})},{isExpanded:!0}),scale:h.Vec3(B.create(1,1,1)),transform:h.Mat4(Y.identity())},g=>Ra(g.type))};function r(g){return{count:0,type:new Array(g).fill(1),invert:new Array(g).fill(!1),position:new Array(g*3).fill(0),rotation:new Array(g*4).fill(0),scale:new Array(g*3).fill(1),transform:new Array(g*16).fill(0)}}let n=gr(),o=gr(),i=B(),a=B(),A=Y(),s=Y();function c(g,m){let p=g.objects.length,{type:d,invert:f,position:I,rotation:C,scale:y,transform:Q}=m?.objects||r(p);for(let E=0;E<p;++E){let b=g.objects[E];d[E]=u.Type[b.type],f[E]=b.invert,B.toArray(b.position,I,E*3),B.normalize(i,b.rotation.axis),gr.toArray(gr.setAxisAngle(n,i,kr(b.rotation.angle)),C,E*4),B.toArray(b.scale,y,E*3),Y.toArray(b.transform,Q,E*16)}return{variant:g.variant,objects:{count:p,type:d,invert:f,position:I,rotation:C,scale:y,transform:Q}}}u.getClip=c;function l(g,m){if(g.variant!==m.variant||g.objects.count!==m.objects.count)return!1;let p=g.objects,d=m.objects;for(let f=0,I=p.count;f<I;++f)if(p.invert[f]!==d.invert[f]||p.type[f]!==d.type[f]||(B.fromArray(i,p.position,f*3),B.fromArray(a,d.position,f*3),!B.equals(i,a))||(B.fromArray(i,p.scale,f*3),B.fromArray(a,d.scale,f*3),!B.equals(i,a))||(gr.fromArray(n,p.rotation,f*4),gr.fromArray(o,d.rotation,f*4),!gr.equals(n,o))||(Y.fromArray(A,p.transform,f*16),Y.fromArray(s,d.transform,f*16),!Y.areEqual(A,s,1e-6)))return!1;return!0}u.areEqual=l})(ha||={});var Qet={custom:{},auto:{},highest:{},higher:{},high:{},medium:{},low:{},lower:{},lowest:{}},Eet=Object.keys(Qet),K2=h.arrayToOptions(Eet),iM={smoothColors:h.MappedStatic("auto",{auto:h.Group({}),on:h.Group({resolutionFactor:h.Numeric(2,{min:.5,max:6,step:.1}),sampleStride:h.Numeric(3,{min:1,max:12,step:1})}),off:h.Group({})})};function pm(e){return!!e.smoothColors}function cu(e,t,r){if((e.name==="on"||e.name==="auto"&&t)&&r&&r<3){let n=3;return e.name==="on"?(r*=e.params.resolutionFactor,n=e.params.sampleStride):(r*=2-MS(0,1.1,r),r=Math.max(.5,r),r>1.2&&(n=2)),{resolution:r,stride:n}}}var bet=[[!0,"On"],[!1,"Off"],["auto","Auto"]],xet=5e7;function vi(e,t,r){return e==="auto"?t*r>xet:e}var ot;(l=>{l.MaterialCategory={category:"Material"},l.ShadingCategory={category:"Shading"},l.CullingLodCategory={category:"Culling & LOD"},l.CustomQualityParamInfo={category:"Custom Quality",hideIf:u=>typeof u.quality<"u"&&u.quality!=="custom"},l.Params={alpha:h.Numeric(1,{min:0,max:1,step:.01},{label:"Opacity",isEssential:!0,description:"How opaque/transparent the representation is rendered."}),quality:h.Select("auto",K2,{isEssential:!0,description:"Visual/rendering quality of the representation."}),material:Va.getParam(),clip:h.Group(ha.Params),emissive:h.Numeric(0,{min:0,max:1,step:.01}),density:h.Numeric(.2,{min:0,max:1,step:.01},{description:"Density value to estimate object thickness."}),instanceGranularity:h.Select("auto",bet,{description:"Use instance granularity for marker, transparency, clipping, overpaint, substance data to save memory. When set to `auto`, granularity is enabled if `groupCount * instanceCount` exceeds `AutoInstanceGranularityThreshold`."}),lod:h.Vec3(B(),void 0,{...l.CullingLodCategory,description:"Level of detail.",fieldLabels:{x:"Min Distance",y:"Max Distance",z:"Overlap (Shader)"}}),cellSize:h.Numeric(200,{min:0,max:5e3,step:100},{...l.CullingLodCategory,description:"Instance grid cell size."}),batchSize:h.Numeric(2e3,{min:0,max:5e4,step:500},{...l.CullingLodCategory,description:"Instance grid batch size."})};function i(u=xt.grey,g=1,m){m||(m=DD());let p=rn(1,m.instanceCount.ref.value,1,()=>vA,!1,()=>!1),d={color:zf({},{value:u,lightness:0,saturation:0}),size:oM({},{value:g})};return{transform:m,locationIterator:p,theme:d}}l.createSimple=i;function a(u,g){let m=ha.getClip(u.clip);return{alpha:D.create(u.alpha),uAlpha:D.create(u.alpha),uVertexCount:D.create(g.vertexCount),uGroupCount:D.create(g.groupCount),drawCount:D.create(g.drawCount),uMetalness:D.create(u.material.metalness),uRoughness:D.create(u.material.roughness),uBumpiness:D.create(u.material.bumpiness),uEmissive:D.create(u.emissive),uDensity:D.create(u.density),dClipObjectCount:D.create(m.objects.count),dClipVariant:D.create(m.variant),uClipObjectType:D.create(m.objects.type),uClipObjectInvert:D.create(m.objects.invert),uClipObjectPosition:D.create(m.objects.position),uClipObjectRotation:D.create(m.objects.rotation),uClipObjectScale:D.create(m.objects.scale),uClipObjectTransform:D.create(m.objects.transform),instanceGranularity:D.create(vi(u.instanceGranularity,g.groupCount,g.instanceCount)),uLod:D.create(lr.create(u.lod[0],u.lod[1],u.lod[2],0))}}l.createValues=a;function A(u,g){D.updateIfChanged(u.alpha,g.alpha),D.updateIfChanged(u.uMetalness,g.material.metalness),D.updateIfChanged(u.uRoughness,g.material.roughness),D.updateIfChanged(u.uBumpiness,g.material.bumpiness),D.updateIfChanged(u.uEmissive,g.emissive),D.updateIfChanged(u.uDensity,g.density);let m=ha.getClip(g.clip);D.updateIfChanged(u.dClipObjectCount,m.objects.count),D.updateIfChanged(u.dClipVariant,m.variant),D.update(u.uClipObjectType,m.objects.type),D.update(u.uClipObjectInvert,m.objects.invert),D.update(u.uClipObjectPosition,m.objects.position),D.update(u.uClipObjectRotation,m.objects.rotation),D.update(u.uClipObjectScale,m.objects.scale),D.update(u.uClipObjectTransform,m.objects.transform),D.updateIfChanged(u.instanceGranularity,vi(g.instanceGranularity,u.uGroupCount.ref.value,u.instanceCount.ref.value)),D.update(u.uLod,lr.set(u.uLod.ref.value,g.lod[0],g.lod[1],g.lod[2],0))}l.updateValues=A;function s(u={}){let g=u.alpha===void 0?!0:u.alpha===1;return{disposed:!1,visible:!0,alphaFactor:1,pickable:!0,colorOnly:!1,opaque:g,writeDepth:g}}l.createRenderableState=s;function c(u,g){u.opaque=g.alpha*u.alphaFactor>=1,u.writeDepth=u.opaque}l.updateRenderableState=c})(ot||={});function mCe(e,t,r,n){for(let o=t;o<r;++o)ke.toArray(n,e,o*4),e[o*4+3]=255;return!0}function h9(e,t,r){return e.fill(0,t*4,r*4),!0}function dCe(e,t,r){let n=Mo(Math.max(1,e),4,Uint8Array,r&&r.tOverpaint.ref.value.array);return r?(D.update(r.tOverpaint,n),D.update(r.uOverpaintTexDim,Le.create(n.width,n.height)),D.updateIfChanged(r.dOverpaint,e>0),D.updateIfChanged(r.dOverpaintType,t),r):{tOverpaint:D.create(n),uOverpaintTexDim:D.create(Le.create(n.width,n.height)),dOverpaint:D.create(e>0),tOverpaintGrid:D.create(Ti()),uOverpaintGridDim:D.create(B.create(1,1,1)),uOverpaintGridTransform:D.create(lr.create(0,0,0,1)),dOverpaintType:D.create(t),uOverpaintStrength:D.create(1)}}var gCe={array:new Uint8Array(4),width:1,height:1};function dl(e){return e?(D.update(e.tOverpaint,gCe),D.update(e.uOverpaintTexDim,Le.create(1,1)),e):{tOverpaint:D.create(gCe),uOverpaintTexDim:D.create(Le.create(1,1)),dOverpaint:D.create(!1),tOverpaintGrid:D.create(Ti()),uOverpaintGridDim:D.create(B.create(1,1,1)),uOverpaintGridTransform:D.create(lr.create(0,0,0,1)),dOverpaintType:D.create("groupInstance"),uOverpaintStrength:D.create(1)}}function fCe(e,t,r,n){for(let o=t;o<r;++o)e[o]=n*255;return!0}function y9(e,t){if(t===0||e.length<t)return 0;let r=0;for(let n=0;n<t;++n)r+=e[n];return r/(255*t)}function Q9(e,t){if(t===0||e.length<t)return 1;let r=255;for(let n=0;n<t;++n)e[n]>0&&e[n]<r&&(r=e[n]);return r/255}function BCe(e,t,r){e.fill(0,t,r)}function ICe(e,t,r){let n=Mo(Math.max(1,e),1,Uint8Array,r&&r.tTransparency.ref.value.array);return r?(D.update(r.tTransparency,n),D.update(r.uTransparencyTexDim,Le.create(n.width,n.height)),D.updateIfChanged(r.dTransparency,e>0),D.updateIfChanged(r.transparencyAverage,y9(n.array,e)),D.updateIfChanged(r.transparencyMin,Q9(n.array,e)),D.updateIfChanged(r.dTransparencyType,t),r):{tTransparency:D.create(n),uTransparencyTexDim:D.create(Le.create(n.width,n.height)),dTransparency:D.create(e>0),transparencyAverage:D.create(0),transparencyMin:D.create(1),tTransparencyGrid:D.create(Ti()),uTransparencyGridDim:D.create(B.create(1,1,1)),uTransparencyGridTransform:D.create(lr.create(0,0,0,1)),dTransparencyType:D.create(t),uTransparencyStrength:D.create(1)}}var pCe={array:new Uint8Array(1),width:1,height:1};function pl(e){return e?(D.update(e.tTransparency,pCe),D.update(e.uTransparencyTexDim,Le.create(1,1)),e):{tTransparency:D.create(pCe),uTransparencyTexDim:D.create(Le.create(1,1)),dTransparency:D.create(!1),transparencyAverage:D.create(0),transparencyMin:D.create(1),tTransparencyGrid:D.create(Ti()),uTransparencyGridDim:D.create(B.create(1,1,1)),uTransparencyGridTransform:D.create(lr.create(0,0,0,1)),dTransparencyType:D.create("groupInstance"),uTransparencyStrength:D.create(1)}}function hCe(e,t,r,n){return e.fill(n,t,r),!0}function yCe(e,t,r){e.fill(0,t,r)}function QCe(e,t,r){let n=Mo(Math.max(1,e),1,Uint8Array,r&&r.tClipping.ref.value.array);return r?(D.update(r.tClipping,n),D.update(r.uClippingTexDim,Le.create(n.width,n.height)),D.updateIfChanged(r.dClipping,e>0),D.updateIfChanged(r.dClippingType,t),r):{tClipping:D.create(n),uClippingTexDim:D.create(Le.create(n.width,n.height)),dClipping:D.create(e>0),dClippingType:D.create(t)}}var CCe={array:new Uint8Array(1),width:1,height:1};function fl(e){return e?(D.update(e.tClipping,CCe),D.update(e.uClippingTexDim,Le.create(1,1)),D.updateIfChanged(e.dClipping,!1),e):{tClipping:D.create(CCe),uClippingTexDim:D.create(Le.create(1,1)),dClipping:D.create(!1),dClippingType:D.create("groupInstance")}}function bCe(e,t,r,n){for(let o=t;o<r;++o)Va.toArray(n,e,o*4),e[o*4+3]=255;return!0}function E9(e,t,r){return e.fill(0,t*4,r*4),!0}function xCe(e,t,r){let n=Mo(Math.max(1,e),4,Uint8Array,r&&r.tSubstance.ref.value.array);return r?(D.update(r.tSubstance,n),D.update(r.uSubstanceTexDim,Le.create(n.width,n.height)),D.updateIfChanged(r.dSubstance,e>0),D.updateIfChanged(r.dSubstanceType,t),r):{tSubstance:D.create(n),uSubstanceTexDim:D.create(Le.create(n.width,n.height)),dSubstance:D.create(e>0),tSubstanceGrid:D.create(Ti()),uSubstanceGridDim:D.create(B.create(1,1,1)),uSubstanceGridTransform:D.create(lr.create(0,0,0,1)),dSubstanceType:D.create(t),uSubstanceStrength:D.create(1)}}var ECe={array:new Uint8Array(4),width:1,height:1};function Bl(e){return e?(D.update(e.tSubstance,ECe),D.update(e.uSubstanceTexDim,Le.create(1,1)),e):{tSubstance:D.create(ECe),uSubstanceTexDim:D.create(Le.create(1,1)),dSubstance:D.create(!1),tSubstanceGrid:D.create(Ti()),uSubstanceGridDim:D.create(B.create(1,1,1)),uSubstanceGridTransform:D.create(lr.create(0,0,0,1)),dSubstanceType:D.create("groupInstance"),uSubstanceStrength:D.create(1)}}function DCe(e,t,r,n){for(let o=t;o<r;++o)e[o]=n*255;return!0}function b9(e,t){if(t===0||e.length<t)return 0;let r=0;for(let n=0;n<t;++n)r+=e[n];return r/(255*t)}function vCe(e,t,r){e.fill(0,t,r)}function FCe(e,t,r){let n=Mo(Math.max(1,e),1,Uint8Array,r&&r.tEmissive.ref.value.array);return r?(D.update(r.tEmissive,n),D.update(r.uEmissiveTexDim,Le.create(n.width,n.height)),D.updateIfChanged(r.dEmissive,e>0),D.updateIfChanged(r.emissiveAverage,b9(n.array,e)),D.updateIfChanged(r.dEmissiveType,t),r):{tEmissive:D.create(n),uEmissiveTexDim:D.create(Le.create(n.width,n.height)),dEmissive:D.create(e>0),emissiveAverage:D.create(0),tEmissiveGrid:D.create(Ti()),uEmissiveGridDim:D.create(B.create(1,1,1)),uEmissiveGridTransform:D.create(lr.create(0,0,0,1)),dEmissiveType:D.create(t),uEmissiveStrength:D.create(1)}}var SCe={array:new Uint8Array(1),width:1,height:1};function Il(e){return e?(D.update(e.tEmissive,SCe),D.update(e.uEmissiveTexDim,Le.create(1,1)),e):{tEmissive:D.create(SCe),uEmissiveTexDim:D.create(Le.create(1,1)),dEmissive:D.create(!1),emissiveAverage:D.create(0),tEmissiveGrid:D.create(Ti()),uEmissiveGridDim:D.create(B.create(1,1,1)),uEmissiveGridTransform:D.create(lr.create(0,0,0,1)),dEmissiveType:D.create("groupInstance"),uEmissiveStrength:D.create(1)}}function RCe(e,t,r,n){for(let o=t;o<r;++o)e[o]=n*255;return!0}function x9(e,t){if(t===0||e.length<t)return 0;let r=0;for(let n=0;n<t;++n)r+=e[n];return r/(255*t)}function UCe(e,t,r){e.fill(0,t,r)}function LCe(e,t,r){let n=Mo(Math.max(1,e),1,Uint8Array,r&&r.tWiggle.ref.value.array);return r?(D.update(r.tWiggle,n),D.update(r.uWiggleTexDim,Le.create(n.width,n.height)),D.updateIfChanged(r.dWiggle,e>0),D.updateIfChanged(r.wiggleAverage,x9(n.array,e)),D.updateIfChanged(r.dWiggleType,t),r):{tWiggle:D.create(n),uWiggleTexDim:D.create(Le.create(n.width,n.height)),dWiggle:D.create(e>0),wiggleAverage:D.create(0),dWiggleType:D.create(t),uWiggleStrength:D.create(1)}}var wCe={array:new Uint8Array(1),width:1,height:1};function Cl(e){return e?(D.update(e.tWiggle,wCe),D.update(e.uWiggleTexDim,Le.create(1,1)),e):{tWiggle:D.create(wCe),uWiggleTexDim:D.create(Le.create(1,1)),dWiggle:D.create(!1),wiggleAverage:D.create(0),dWiggleType:D.create("groupInstance"),uWiggleStrength:D.create(1)}}function lp(){return h.Group({color:h.Color(ke.fromRgb(76,76,76)),colorStrength:h.Numeric(1,{min:0,max:1,step:.01}),substance:Va.getParam(),substanceStrength:h.Numeric(1,{min:0,max:1,step:.01})})}function TCe(e,t){return e.color===t.color&&e.colorStrength===t.colorStrength&&Va.areEqual(e.substance,t.substance)&&e.substanceStrength===t.substanceStrength}function PCe(e,t){return ke.toArrayNormalized(e.color,t,0),t[3]=e.colorStrength,t}function GCe(e,t){return Va.toArrayNormalized(e.substance,t,0),t[3]=e.substanceStrength,t}function mQ(e){return{uInteriorColor:D.create(PCe(e,lr())),uInteriorSubstance:D.create(GCe(e,lr()))}}function dQ(e,t){D.update(e.uInteriorColor,PCe(t,e.uInteriorColor.ref.value)),D.update(e.uInteriorSubstance,GCe(t,e.uInteriorSubstance.ref.value))}function Hu(){return h.Group({wiggleMode:h.Select("position",[["position","Position"],["group","Group"]],{description:"Noise seeding mode. Position: spatially correlated (nearby atoms move together). Group: per-group independent noise."}),wiggleSpeed:h.Numeric(7,{min:0,max:10,step:.1},{description:"Speed of vertex wiggle animation."}),wiggleAmplitude:h.Numeric(0,{min:0,max:5,step:.01},{description:"Amplitude of vertex wiggle animation."}),wiggleFrequency:h.Numeric(.2,{min:.01,max:2,step:.01},{description:"Spatial frequency of vertex wiggle noise (position mode). Lower values correlate nearby atoms more."}),tumbleSpeed:h.Numeric(1,{min:0,max:10,step:.1},{description:"Speed of instance tumble animation."}),tumbleAmplitude:h.Numeric(0,{min:0,max:10,step:.1},{description:"Amplitude of instance tumble animation. In \xC5ngstr\xF6ms of implied surface displacement."}),tumbleFrequency:h.Numeric(.2,{min:0,max:2,step:.01},{description:"Spatial frequency multiplier for tumble noise."})})}function NCe(e,t){return e.wiggleMode===t.wiggleMode&&e.wiggleSpeed===t.wiggleSpeed&&e.wiggleAmplitude===t.wiggleAmplitude&&e.wiggleFrequency===t.wiggleFrequency&&e.tumbleSpeed===t.tumbleSpeed&&e.tumbleAmplitude===t.tumbleAmplitude&&e.tumbleFrequency===t.tumbleFrequency}function up(e){return{uWiggleSpeed:D.create(e.wiggleSpeed),uWiggleAmplitude:D.create(e.wiggleAmplitude),uWiggleFrequency:D.create(e.wiggleFrequency),uWiggleMode:D.create(e.wiggleMode==="position"?0:1),uTumbleSpeed:D.create(e.tumbleSpeed),uTumbleAmplitude:D.create(e.tumbleAmplitude),uTumbleFrequency:D.create(e.tumbleFrequency)}}function gp(e,t){D.updateIfChanged(e.uWiggleSpeed,t.wiggleSpeed),D.updateIfChanged(e.uWiggleAmplitude,t.wiggleAmplitude),D.updateIfChanged(e.uWiggleFrequency,t.wiggleFrequency),D.updateIfChanged(e.uWiggleMode,t.wiggleMode==="position"?0:1),D.updateIfChanged(e.uTumbleSpeed,t.tumbleSpeed),D.updateIfChanged(e.uTumbleAmplitude,t.tumbleAmplitude),D.updateIfChanged(e.uTumbleFrequency,t.tumbleFrequency)}var At;(L=>{function e(F,v,U,G,N,k,J){return J?o(F,v,U,G,N,k,J):n(F,v,U,G,N,k)}L.create=e;function t(F){let v=F?F.vertexBuffer.ref.value:new Float32Array(0),U=F?F.indexBuffer.ref.value:new Uint32Array(0),G=F?F.normalBuffer.ref.value:new Float32Array(0),N=F?F.groupBuffer.ref.value:new Float32Array(0);return e(v,U,G,N,0,0,F)}L.createEmpty=t;function r(F){return na([F.vertexCount,F.triangleCount,F.vertexBuffer.ref.version,F.indexBuffer.ref.version,F.normalBuffer.ref.version,F.groupBuffer.ref.version])}function n(F,v,U,G,N,k){let J=we(),H,z=-1,_=-1,M={kind:"mesh",vertexCount:N,triangleCount:k,vertexBuffer:D.create(F),indexBuffer:D.create(v),normalBuffer:D.create(U),groupBuffer:D.create(G),varyingGroup:D.create(!1),get boundingSphere(){let q=r(M);if(q!==z){let ne=gm(M.vertexBuffer.ref.value,M.vertexCount,1);we.copy(J,ne),z=q}return J},get groupMapping(){return M.groupBuffer.ref.version!==_&&(H=Ap(M.groupBuffer.ref.value,M.vertexCount),_=M.groupBuffer.ref.version),H},setBoundingSphere(q){we.copy(J,q),z=r(M)},hasBoundingSphere(){return z===r(M)},meta:{}};return M}function o(F,v,U,G,N,k,J){return J.vertexCount=N,J.triangleCount=k,D.update(J.vertexBuffer,F),D.update(J.indexBuffer,v),D.update(J.normalBuffer,U),D.update(J.groupBuffer,G),J}function i(F){let{vertexCount:v,triangleCount:U}=F,G=F.vertexBuffer.ref.value,N=F.indexBuffer.ref.value,k=F.normalBuffer.ref.value.length>=v*3?F.normalBuffer.ref.value:new Float32Array(v*3);k===F.normalBuffer.ref.value&&k.fill(0,0,v*3),xN(G,N,k,v,U),D.update(F.normalBuffer,k)}L.computeNormals=i;function a(F,v=3){let U=F.vertexBuffer.ref.value,G=new Map,N=(H,z)=>`${H[0].toFixed(z)}|${H[1].toFixed(z)}|${H[2].toFixed(z)}`,k=0,J=B();for(let H=0,z=F.vertexCount;H<z;++H){B.fromArray(J,U,H*3);let _=N(J,v),M=G.get(_);M!==void 0?(k+=1,G.set(_,M+1)):G.set(_,1)}return k}L.checkForDuplicateVertices=a;let A=Ht();function s(F,v){let U=F.vertexBuffer.ref.value;if(Eg(v,U,0,F.vertexCount),!Y.isTranslationAndUniformScaling(v)){let G=Ht.directionTransform(A,v);Npe(G,F.normalBuffer.ref.value,0,F.vertexCount)}D.update(F.vertexBuffer,U)}L.transform=s;function c(F){let{originalData:v}="kind"in F?F.meta:F.meta.ref.value;return v}L.getOriginalData=c;function l(F,v=!0){let{indexBuffer:U,vertexBuffer:G,groupBuffer:N,normalBuffer:k,triangleCount:J,vertexCount:H}=F,z=U.ref.value,_=G.ref.value,M=N.ref.value,q=k.ref.value,ne=qe.create(Uint32Array,3,1024,J),oe=qe.create(Float32Array,3,1024,_);oe.currentIndex=H*3,oe.elementCount=H;let ae=qe.create(Float32Array,3,1024,q);ae.currentIndex=H*3,ae.elementCount=H;let me=qe.create(Float32Array,1,1024,M);me.currentIndex=H,me.elementCount=H;let Se=B(),ee=B(),O=B(),X=B(),Ce=B(),Ne=B();function $(Qe){B.fromArray(Se,_,Qe*3),B.fromArray(X,q,Qe*3),qe.add3(oe,Se[0],Se[1],Se[2]),qe.add3(ae,X[0],X[1],X[2])}function pe(Qe,Ie){B.fromArray(Se,_,Qe*3),B.fromArray(ee,_,Ie*3),B.scale(Se,B.add(Se,Se,ee),.5),B.fromArray(X,q,Qe*3),B.fromArray(Ce,q,Ie*3),B.scale(X,B.add(X,X,Ce),.5),qe.add3(oe,Se[0],Se[1],Se[2]),qe.add3(ae,X[0],X[1],X[2])}function ye(Qe,Ie,le){B.fromArray(Se,_,Qe*3),B.fromArray(ee,_,Ie*3),B.fromArray(O,_,le*3),B.scale(Se,B.add(Se,B.add(Se,Se,ee),O),1/3),B.fromArray(X,q,Qe*3),B.fromArray(Ce,q,Ie*3),B.fromArray(Ne,q,le*3),B.scale(X,B.add(X,B.add(X,X,Ce),Ne),1/3),qe.add3(oe,Se[0],Se[1],Se[2]),qe.add3(ae,X[0],X[1],X[2])}function Be(Qe,Ie,le,Oe,tt){++Te,$(Qe),pe(Qe,Ie),pe(Qe,le),qe.add3(ne,De,De+1,De+2);for(let it=0;it<3;++it)qe.add(me,Oe);De+=3,Te+=2,$(Ie),$(le),pe(Qe,Ie),pe(Qe,le),qe.add3(ne,De,De+1,De+3),qe.add3(ne,De,De+3,De+2);for(let it=0;it<4;++it)qe.add(me,tt);De+=4}let De=H,Te=0;if(v)for(let Qe=0,Ie=J;Qe<Ie;++Qe){let le=z[Qe*3],Oe=z[Qe*3+1],tt=z[Qe*3+2],it=M[le],Rt=M[Oe],Mt=M[tt];if(it===Rt&&it===Mt)++Te,qe.add3(ne,le,Oe,tt);else if(it===Rt)Be(tt,le,Oe,Mt,it);else if(it===Mt)Be(Oe,tt,le,Rt,Mt);else if(Rt===Mt)Be(le,Oe,tt,it,Rt);else{Te+=2,$(le),pe(le,Oe),pe(le,tt),ye(le,Oe,tt),qe.add3(ne,De,De+1,De+3),qe.add3(ne,De,De+3,De+2);for(let Bt=0;Bt<4;++Bt)qe.add(me,it);De+=4,Te+=2,$(Oe),pe(Oe,tt),pe(Oe,le),ye(le,Oe,tt),qe.add3(ne,De,De+1,De+3),qe.add3(ne,De,De+3,De+2);for(let Bt=0;Bt<4;++Bt)qe.add(me,Rt);De+=4,Te+=2,$(tt),pe(tt,Oe),pe(tt,le),ye(le,Oe,tt),qe.add3(ne,De+3,De+1,De),qe.add3(ne,De+2,De+3,De);for(let Bt=0;Bt<4;++Bt)qe.add(me,Mt);De+=4}}else for(let Qe=0,Ie=J;Qe<Ie;++Qe){let le=z[Qe*3],Oe=z[Qe*3+1],tt=z[Qe*3+2],it=M[le],Rt=M[Oe],Mt=M[tt];if(it!==Rt||it!==Mt){++Te,$(le),$(Oe),$(tt),qe.add3(ne,De,De+1,De+2);let Bt=Rt===Mt?Rt:it;for(let Zt=0;Zt<3;++Zt)qe.add(me,Bt);De+=3}else++Te,qe.add3(ne,le,Oe,tt)}let be=qe.compact(ne),Fe=qe.compact(oe),Ae=qe.compact(ae),fe=qe.compact(me);return F.vertexCount=De,F.triangleCount=Te,D.update(G,Fe),D.update(N,fe),D.update(U,be),D.update(k,Ae),F.meta.originalData={indexBuffer:z,vertexCount:H,triangleCount:J},F}L.uniformTriangleGroup=l;function u(F){let{vertexCount:v,triangleCount:U}=F,G=F.indexBuffer.ref.value,N=[];for(let k=0;k<v;++k)N[k]=[];for(let k=0;k<U;++k){let J=G[k*3],H=G[k*3+1],z=G[k*3+2];Po(N[J],H),Po(N[J],z),Po(N[H],J),Po(N[H],z),Po(N[z],J),Po(N[z],H)}return N}function g(F){let{triangleCount:v}=F,U=F.indexBuffer.ref.value,G=new Map,N=(k,J)=>{let H=Fu(k,J),z=G.get(H)||0;G.set(H,z+1)};for(let k=0;k<v;++k){let J=U[k*3],H=U[k*3+1],z=U[k*3+2];N(J,H),N(J,z),N(H,z)}return G}function m(F){let v=new Set,U=[0,0];return F.forEach((G,N)=>{G===1&&(YS(U,N),v.add(U[0]),v.add(U[1]))}),v}function p(F,v,U){let G=new Map,N=(k,J)=>{G.has(k)?Po(G.get(k),J):G.set(k,[J])};return v.forEach(k=>{let J=F[k];for(let H of J)v.has(H)&&U.get(Fu(k,H))===1&&N(k,H)}),G}function d(F,v){let{indexBuffer:U,triangleCount:G}=F,N=U.ref.value,k=qe.create(Uint32Array,3,1024,G),J=0;for(let z=0;z<G;++z){let _=N[z*3],M=N[z*3+1],q=N[z*3+2];v[_].length===2||v[M].length===2||v[q].length===2||(qe.add3(k,_,M,q),J+=1)}let H=qe.compact(k);return F.triangleCount=J,D.update(U,H),F}function f(F,v,U,G){let{vertexBuffer:N,indexBuffer:k,normalBuffer:J,triangleCount:H}=F,z=N.ref.value,_=k.ref.value,M=J.ref.value,q=qe.create(Uint32Array,3,1024,H),ne=0;for(let Te=0;Te<H;++Te)qe.add3(q,_[Te*3],_[Te*3+1],_[Te*3+2]),ne+=1;let oe=B(),ae=B(),me=B(),Se=B(),ee=B(),O=B(),X=B(),Ce=B(),Ne=B(),$=B(),pe=kr(120),ye=new Set,Be=Array.from(U.keys()).filter(Te=>U.get(Te).length<2).map(Te=>{let be=U.get(Te);return B.fromArray(oe,z,Te*3),B.fromArray(ae,z,be[0]*3),B.fromArray(me,z,be[1]*3),B.sub(ee,ae,oe),B.sub(O,me,oe),[Te,B.angle(ee,O)]});Be.sort(([,Te],[,be])=>Te-be);for(let[Te,be]of Be){if(ye.has(Te)||be>pe)continue;let Fe=U.get(Te);if(v[Fe[0]].includes(Fe[1])&&!U.get(Fe[0])?.includes(Fe[1])||(B.fromArray(oe,z,Te*3),B.fromArray(ae,z,Fe[0]*3),B.fromArray(me,z,Fe[1]*3),B.sub(ee,ae,oe),B.sub(O,me,oe),B.add(Ce,ee,O),B.squaredDistance(oe,ae)>=G))continue;let Ae=!1;for(let fe of v[Te])if(!Fe.includes(fe)&&(B.fromArray(Se,z,fe*3),B.sub(X,Se,oe),B.dot(Ce,X)<0)){Ae=!0;break}Ae&&(B.fromArray(Ne,M,Te*3),B.triangleNormal($,oe,ae,me),B.dot($,Ne)>0?qe.add3(q,Te,Fe[0],Fe[1]):qe.add3(q,Fe[1],Fe[0],Te),ye.add(Te),ye.add(Fe[0]),ye.add(Fe[1]),ne+=1)}let De=qe.compact(q);return F.triangleCount=ne,D.update(k,De),F}function I(F,v,U){let{iterations:G,lambda:N}=U,k=B(),J=B(),H=B(),z=B(),_=-N,M=new Float32Array(F.vertexBuffer.ref.value.length),q=ne=>{let oe=F.vertexBuffer.ref.value;M.set(oe),v.forEach((me,Se)=>{if(me.length!==2)return;B.fromArray(k,oe,Se*3),B.fromArray(J,oe,me[0]*3),B.fromArray(H,oe,me[1]*3);let ee=1/B.distance(k,J),O=1/B.distance(k,H);B.scale(J,J,ee),B.scale(H,H,O),B.add(z,J,H),B.scale(z,z,1/(ee+O)),B.sub(z,z,k),B.scale(z,z,ne),B.add(z,k,z),B.toArray(z,M,Se*3)});let ae=F.vertexBuffer.ref.value;D.update(F.vertexBuffer,M),M=ae};for(let ne=0;ne<G;++ne)q(N),q(_)}function C(F,v){d(F,u(F));for(let J=0;J<10;++J){let H=F.triangleCount,z=g(F),_=u(F),M=m(z),q=p(_,M,z);if(f(F,_,q,v.maxNewEdgeLength*v.maxNewEdgeLength),F.triangleCount===H)break}let U=g(F),G=u(F),N=m(U),k=p(G,N,U);return I(F,k,{iterations:v.iterations,lambda:.5}),F}L.smoothEdges=C,L.Params={...ot.Params,doubleSided:h.Boolean(!1,ot.CustomQualityParamInfo),flipSided:h.Boolean(!1,ot.ShadingCategory),flatShaded:h.Boolean(!1,ot.ShadingCategory),ignoreLight:h.Boolean(!1,ot.ShadingCategory),celShaded:h.Boolean(!1,ot.ShadingCategory),xrayShaded:h.Select(!1,[[!1,"Off"],[!0,"On"],["inverted","Inverted"]],ot.ShadingCategory),transparentBackfaces:h.Select("off",h.arrayToOptions(["off","on","opaque"]),ot.ShadingCategory),bumpFrequency:h.Numeric(0,{min:0,max:10,step:.1},ot.ShadingCategory),bumpAmplitude:h.Numeric(1,{min:0,max:5,step:.1},ot.ShadingCategory),interior:lp(),animation:Hu()},L.Utils={Params:L.Params,createEmpty:t,createValues:b,createValuesSimple:x,updateValues:S,updateBoundingSphere:w,createRenderableState:R,updateRenderableState:T,createPositionIterator:E};function E(F,v){let U=F.vertexCount,G=v.instanceCount.ref.value,N=is(),k=N.position,J=N.normal,H=F.vertexBuffer.ref.value,z=F.normalBuffer.ref.value,_=v.aTransform.ref.value;return rn(U,G,1,(q,ne)=>(ne<0?(B.fromArray(k,H,q*3),B.fromArray(J,z,q*3)):(B.transformMat4Offset(k,H,_,0,q*3,ne*16),B.transformDirectionOffset(J,z,_,0,q*3,ne*16)),N))}function b(F,v,U,G,N){let{instanceCount:k,groupCount:J}=U,H=E(F,v),z=cA(U,H,G.color),_=vi(N.instanceGranularity,J,k)?ei(k,"instance"):ei(k*J,"groupInstance"),M=dl(),q=pl(),ne=Il(),oe=Bl(),ae=fl(),me=Cl(),Se={drawCount:F.triangleCount*3,vertexCount:F.vertexCount,groupCount:J,instanceCount:k},ee=we.clone(F.boundingSphere),O=Ta(ee,v.aTransform.ref.value,k,0);return{dGeometryType:D.create("mesh"),aPosition:F.vertexBuffer,aNormal:F.normalBuffer,aGroup:F.groupBuffer,elements:F.indexBuffer,dVaryingGroup:F.varyingGroup,boundingSphere:D.create(O),invariantBoundingSphere:D.create(ee),uInvariantBoundingSphere:D.create(lr.ofSphere(ee)),...z,..._,...M,...q,...ne,...oe,...ae,...me,...v,...ot.createValues(N,Se),uDoubleSided:D.create(N.doubleSided),dFlatShaded:D.create(N.flatShaded),dFlipSided:D.create(N.flipSided),dIgnoreLight:D.create(N.ignoreLight),dCelShaded:D.create(N.celShaded),dXrayShaded:D.create(N.xrayShaded==="inverted"?"inverted":N.xrayShaded===!0?"on":"off"),dTransparentBackfaces:D.create(N.transparentBackfaces),uBumpFrequency:D.create(N.bumpFrequency),uBumpAmplitude:D.create(N.bumpAmplitude),meta:D.create(F.meta),...mQ(N.interior),...up(N.animation)}}function x(F,v,U,G,N){let k=ot.createSimple(U,G,N),J={...h.getDefaultValues(L.Params),...v};return b(F,k.transform,k.locationIterator,k.theme,J)}function S(F,v){ot.updateValues(F,v),D.updateIfChanged(F.uDoubleSided,v.doubleSided),D.updateIfChanged(F.dFlatShaded,v.flatShaded),D.updateIfChanged(F.dFlipSided,v.flipSided),D.updateIfChanged(F.dIgnoreLight,v.ignoreLight),D.updateIfChanged(F.dCelShaded,v.celShaded),D.updateIfChanged(F.dXrayShaded,v.xrayShaded==="inverted"?"inverted":v.xrayShaded===!0?"on":"off"),D.updateIfChanged(F.dTransparentBackfaces,v.transparentBackfaces),D.updateIfChanged(F.uBumpFrequency,v.bumpFrequency),D.updateIfChanged(F.uBumpAmplitude,v.bumpAmplitude),dQ(F,v.interior),gp(F,v.animation)}function w(F,v){let U=we.clone(v.boundingSphere),G=Ta(U,F.aTransform.ref.value,F.instanceCount.ref.value,0);we.equals(G,F.boundingSphere.ref.value)||D.update(F.boundingSphere,G),we.equals(U,F.invariantBoundingSphere.ref.value)||(D.update(F.invariantBoundingSphere,U),D.update(F.uInvariantBoundingSphere,lr.fromSphere(F.uInvariantBoundingSphere.ref.value,U)))}function R(F){let v=ot.createRenderableState(F);return T(v,F),v}function T(F,v){ot.updateRenderableState(F,v),F.opaque=F.opaque&&!v.xrayShaded,F.writeDepth=F.opaque}})(At||={});function od(e,t,r){return e=$t(Math.round(e),0,16777215)+1,t[r+2]=e%256,e=Math.floor(e/256),t[r+1]=e%256,e=Math.floor(e/256),t[r]=e%256,t}function mp(e,t,r){return Math.floor(e)*256*256+Math.floor(t)*256+Math.floor(r)-1}var aM=255/256,S9=B.create(256*256*256,256*256,256),Det=lr.create(aM/S9[0],aM/S9[1],aM/S9[2],aM/1),MCe=lr();function kCe(e,t,r,n){return lr.set(MCe,e/255,t/255,r/255,n/255),lr.dot(MCe,Det)}function HCe(e,t){let r=-1/0;for(let n=0,o=e.length;n<o;n+=t){let i=mp(e[n],e[n+1],e[n+2]);i>r&&(r=i)}return r}function hl(e,t,r,n){switch(lA.getGranularity(e,r.granularity)){case"uniform":return Ret(e,r.size,n);case"instance":return Uet(e,r.size,n);case"group":return Let(e,r.size,n);case"groupInstance":return Tet(e,r.size,n);case"vertex":return Pet(t,r.size,n);case"vertexInstance":return Get(t,r.size,n)}}var pQ=100;function fQ(e){switch(e.dSizeType.ref.value){case"uniform":return e.uSize.ref.value;case"instance":case"group":case"groupInstance":case"vertex":case"vertexInstance":let r=0,n=e.tSize.ref.value.array;for(let o=0,i=n.length;o<i;o+=3){let a=mp(n[o],n[o+1],n[o+2]);r<a&&(r=a)}return r/pQ}}var vet={array:new Uint8Array(3),width:1,height:1};function Fet(){return{tSize:D.create(vet),uSizeTexDim:D.create(Le.create(1,1))}}function wet(e,t){return t?(D.update(t.uSize,e),D.updateIfChanged(t.dSizeType,"uniform"),t):{uSize:D.create(e),...Fet(),dSizeType:D.create("uniform")}}function Ret(e,t,r){e.reset();let n=e.hasNext?e.move().location:vA;return wet(t(n),r)}function j2(e,t,r){return r?(D.update(r.tSize,e),D.update(r.uSizeTexDim,Le.create(e.width,e.height)),D.updateIfChanged(r.dSizeType,t),r):{uSize:D.create(0),tSize:D.create(e),uSizeTexDim:D.create(Le.create(e.width,e.height)),dSizeType:D.create(t)}}function Uet(e,t,r){let{instanceCount:n}=e,o=Mo(Math.max(1,n),3,Uint8Array,r&&r.tSize.ref.value.array);for(e.reset();e.hasNext&&!e.isNextNewInstance;){let i=e.move();od(t(i.location)*pQ,o.array,i.instanceIndex*3),e.skipInstance()}return j2(o,"instance",r)}function Let(e,t,r){let{groupCount:n}=e,o=Mo(Math.max(1,n),3,Uint8Array,r&&r.tSize.ref.value.array);for(e.reset();e.hasNext&&!e.isNextNewInstance;){let i=e.move();od(t(i.location)*pQ,o.array,i.groupIndex*3)}return j2(o,"group",r)}function Tet(e,t,r){let{groupCount:n,instanceCount:o}=e,i=o*n,a=Mo(Math.max(1,i),3,Uint8Array,r&&r.tSize.ref.value.array);for(e.reset();e.hasNext;){let A=e.move();od(t(A.location)*pQ,a.array,A.index*3)}return j2(a,"groupInstance",r)}function Pet(e,t,r){let{groupCount:n}=e,o=Mo(Math.max(1,n),3,Uint8Array,r&&r.tSize.ref.value.array);for(e.reset();e.hasNext;){let i=e.move();od(t(i.location)*pQ,o.array,i.index*3)}return j2(o,"vertex",r)}function Get(e,t,r){let{groupCount:n,instanceCount:o}=e,i=o*n,a=Mo(Math.max(1,i),3,Uint8Array,r&&r.tSize.ref.value.array);for(e.reset();e.hasNext;){let A=e.move();od(t(A.location)*pQ,a.array,A.index*3)}return j2(a,"vertexInstance",r)}var Ds;(I=>{function e(C,y,Q,E){return E?o(C,y,Q,E):n(C,y,Q)}I.create=e;function t(C){let y=C?C.centerBuffer.ref.value:new Float32Array(0),Q=C?C.groupBuffer.ref.value:new Float32Array(0);return e(y,Q,0,C)}I.createEmpty=t;function r(C){return na([C.pointCount,C.centerBuffer.ref.version,C.groupBuffer.ref.version])}function n(C,y,Q){let E=we(),b,x=-1,S=-1,w={kind:"points",pointCount:Q,centerBuffer:D.create(C),groupBuffer:D.create(y),get boundingSphere(){let R=r(w);if(R!==x){let T=gm(w.centerBuffer.ref.value,w.pointCount,1);we.copy(E,T),x=R}return E},get groupMapping(){return w.groupBuffer.ref.version!==S&&(b=Ap(w.groupBuffer.ref.value,w.pointCount),S=w.groupBuffer.ref.version),b},setBoundingSphere(R){we.copy(E,R),x=r(w)},hasBoundingSphere(){return x===r(w)}};return w}function o(C,y,Q,E){return E.pointCount=Q,D.update(E.centerBuffer,C),D.update(E.groupBuffer,y),E}function i(C,y){let Q=C.centerBuffer.ref.value;Eg(y,Q,0,C.pointCount),D.update(C.centerBuffer,Q)}I.transform=i,I.StyleTypes={square:"Square",circle:"Circle",fuzzy:"Fuzzy"},I.StyleTypeNames=Object.keys(I.StyleTypes),I.Params={...ot.Params,sizeFactor:h.Numeric(3,{min:0,max:10,step:.1}),pointSizeAttenuation:h.Boolean(!1),pointStyle:h.Select("square",h.objectToOptions(I.StyleTypes)),animation:Hu()},I.Utils={Params:I.Params,createEmpty:t,createValues:u,createValuesSimple:g,updateValues:m,updateBoundingSphere:p,createRenderableState:d,updateRenderableState:f,createPositionIterator:l};function l(C,y){let Q=C.pointCount,E=y.instanceCount.ref.value,b=is(),x=b.position,S=C.centerBuffer.ref.value,w=y.aTransform.ref.value;return rn(Q,E,1,(T,L)=>(L<0?B.fromArray(x,S,T*3):B.transformMat4Offset(x,S,w,0,T*3,L*16),b))}function u(C,y,Q,E,b){let{instanceCount:x,groupCount:S}=Q,w=l(C,y),R=cA(Q,w,E.color),T=hl(Q,w,E.size),L=vi(b.instanceGranularity,S,x)?ei(x,"instance"):ei(x*S,"groupInstance"),F=dl(),v=pl(),U=Il(),G=Bl(),N=fl(),k=Cl(),J={drawCount:C.pointCount,vertexCount:C.pointCount,groupCount:S,instanceCount:x},H=we.clone(C.boundingSphere),z=Ta(H,y.aTransform.ref.value,x,0);return{dGeometryType:D.create("points"),aPosition:C.centerBuffer,aGroup:C.groupBuffer,boundingSphere:D.create(z),invariantBoundingSphere:D.create(H),uInvariantBoundingSphere:D.create(lr.ofSphere(H)),...R,...T,...L,...F,...v,...U,...G,...N,...k,...y,...ot.createValues(b,J),uSizeFactor:D.create(b.sizeFactor),dPointSizeAttenuation:D.create(b.pointSizeAttenuation),dPointStyle:D.create(b.pointStyle),...up(b.animation)}}function g(C,y,Q,E,b){let x=ot.createSimple(Q,E,b),S={...h.getDefaultValues(I.Params),...y};return u(C,x.transform,x.locationIterator,x.theme,S)}function m(C,y){ot.updateValues(C,y),D.updateIfChanged(C.uSizeFactor,y.sizeFactor),D.updateIfChanged(C.dPointSizeAttenuation,y.pointSizeAttenuation),D.updateIfChanged(C.dPointStyle,y.pointStyle),gp(C,y.animation)}function p(C,y){let Q=we.clone(y.boundingSphere),E=Ta(Q,C.aTransform.ref.value,C.instanceCount.ref.value,0);we.equals(E,C.boundingSphere.ref.value)||D.update(C.boundingSphere,E),we.equals(Q,C.invariantBoundingSphere.ref.value)||(D.update(C.invariantBoundingSphere,Q),D.update(C.uInvariantBoundingSphere,lr.fromSphere(C.uInvariantBoundingSphere.ref.value,Q)))}function d(C){let y=ot.createRenderableState(C);return f(y,C),y}function f(C,y){ot.updateRenderableState(C,y),C.opaque=C.opaque&&y.pointStyle!=="fuzzy",C.writeDepth=C.opaque}})(Ds||={});function D9(e,t,r,n,o,i,a){for(let A=0;A<t;A++){for(let s=0;s<r;s++)n[s]=e[s*t+A];VCe(n,o,i,a,r);for(let s=0;s<r;s++)e[s*t+A]=o[s]}for(let A=0;A<r;A++){for(let s=0;s<t;s++)n[s]=e[A*t+s];VCe(n,o,i,a,t);for(let s=0;s<t;s++)e[A*t+s]=Math.sqrt(o[s])}}function VCe(e,t,r,n,o){r[0]=0,n[0]=Number.MIN_SAFE_INTEGER,n[1]=Number.MAX_SAFE_INTEGER;for(let i=1,a=0;i<o;i++){let A=(e[i]+i*i-(e[r[a]]+r[a]*r[a]))/(2*i-2*r[a]);for(;A<=n[a];)a--,A=(e[i]+i*i-(e[r[a]]+r[a]*r[a]))/(2*i-2*r[a]);a++,r[a]=i,n[a]=A,n[a+1]=Number.MAX_SAFE_INTEGER}for(let i=0,a=0;i<o;i++){for(;n[a+1]<i;)a++;t[i]=(i-r[a])*(i-r[a])+e[r[a]]}}var v9={};function YCe(e){let t=JSON.stringify(e);return v9[t]===void 0&&(v9[t]=new F9(e)),v9[t]}var w9={fontFamily:h.Select("sans-serif",[["sans-serif","Sans Serif"],["monospace","Monospace"],["serif","Serif"],["cursive","Cursive"]]),fontQuality:h.Select(3,[[0,"lower"],[1,"low"],[2,"medium"],[3,"high"],[4,"higher"]]),fontStyle:h.Select("normal",[["normal","Normal"],["italic","Italic"],["oblique","Oblique"]]),fontVariant:h.Select("normal",[["normal","Normal"],["small-caps","Small Caps"]]),fontWeight:h.Select("normal",[["normal","Normal"],["bold","Bold"]])},F9=class{constructor(t={}){this.mapped={};this.scratchW=0;this.scratchH=0;this.currentX=0;this.currentY=0;this.cutoff=.5;let r={...h.getDefaultValues(w9),...t};this.props=r;let n=64*(r.fontQuality+1);this.buffer=n/8,this.radius=n/3,this.lineHeight=Math.round(n+2*this.buffer+this.radius),this.maxWidth=Math.round(this.lineHeight*.75),this.texture=Mo(350*this.lineHeight*this.maxWidth,1,Uint8Array),this.scratchContext=Met(this.maxWidth,this.lineHeight,{willReadFrequently:!0}),this.scratchContext.font=`${r.fontStyle} ${r.fontVariant} ${r.fontWeight} ${n}px ${r.fontFamily}`,this.scratchContext.fillStyle="black",this.scratchContext.textBaseline="middle",this.scratchData=new Uint8Array(this.lineHeight*this.maxWidth),this.gridOuter=new Float64Array(this.lineHeight*this.maxWidth),this.gridInner=new Float64Array(this.lineHeight*this.maxWidth),this.f=new Float64Array(Math.max(this.lineHeight,this.maxWidth)),this.d=new Float64Array(Math.max(this.lineHeight,this.maxWidth)),this.z=new Float64Array(Math.max(this.lineHeight,this.maxWidth)+1),this.v=new Int16Array(Math.max(this.lineHeight,this.maxWidth)),this.middle=Math.ceil(this.lineHeight/2),this.placeholder=this.get("\uFFFD")}get(t){if(this.mapped[t]===void 0){this.draw(t);let{array:r,width:n,height:o}=this.texture,i=this.scratchData;if(this.currentX+this.scratchW>n&&(this.currentX=0,this.currentY+=this.scratchH),this.currentY+this.scratchH>o)return console.warn("canvas to small"),this.placeholder;this.mapped[t]={x:this.currentX,y:this.currentY,w:this.scratchW,h:this.scratchH,nw:this.scratchW/this.lineHeight,nh:this.scratchH/this.lineHeight};for(let a=0;a<this.scratchH;++a)for(let A=0;A<this.scratchW;++A)r[n*(this.currentY+a)+this.currentX+A]=i[a*this.scratchW+A];this.currentX+=this.scratchW}return this.mapped[t]}draw(t){let r=this.lineHeight,n=this.scratchContext,o=this.scratchData,i=n.measureText(t),a=Math.min(this.maxWidth,Math.ceil(i.width+2*this.buffer)),A=a*r;n.clearRect(0,0,a,r),n.fillText(t,this.buffer,this.middle);let s=n.getImageData(0,0,a,r);for(let c=0;c<A;c++){let l=s.data[c*4+3]/255;this.gridOuter[c]=l===1?0:l===0?Number.MAX_SAFE_INTEGER:Math.pow(Math.max(0,.5-l),2),this.gridInner[c]=l===1?Number.MAX_SAFE_INTEGER:l===0?0:Math.pow(Math.max(0,l-.5),2)}D9(this.gridOuter,a,r,this.f,this.d,this.v,this.z),D9(this.gridInner,a,r,this.f,this.d,this.v,this.z);for(let c=0;c<A;c++){let l=this.gridOuter[c]-this.gridInner[c];o[c]=Math.max(0,Math.min(255,Math.round(255-255*(l/this.radius+this.cutoff))))}this.scratchW=a,this.scratchH=r}},_Ce;function Net(){if(!_Ce)throw new Error("When running in Node.js and wanting to use Canvas API, call mol-util/data-source's setCanvasModule function first and pass imported `canvas` module to it.");return _Ce}function Met(e,t,r){if(kf)return Net().createCanvas(e,t).getContext("2d",r);{let n=document.createElement("canvas");return n.width=e,n.height=t,n.getContext("2d",r)}}var tA;(p=>{function e(d,f,I,C,y,Q,E,b,x){return x?o(d,f,I,C,y,Q,E,b,x):n(d,f,I,C,y,Q,E,b)}p.create=e;function t(d){let f=d?d.fontTexture.ref.value:Mo(0,1,Uint8Array),I=d?d.centerBuffer.ref.value:new Float32Array(0),C=d?d.mappingBuffer.ref.value:new Float32Array(0),y=d?d.depthBuffer.ref.value:new Float32Array(0),Q=d?d.indexBuffer.ref.value:new Uint32Array(0),E=d?d.groupBuffer.ref.value:new Float32Array(0),b=d?d.tcoordBuffer.ref.value:new Float32Array(0);return e(f,I,C,y,Q,E,b,0,d)}p.createEmpty=t;function r(d){return na([d.charCount,d.fontTexture.ref.version,d.centerBuffer.ref.version,d.mappingBuffer.ref.version,d.depthBuffer.ref.version,d.indexBuffer.ref.version,d.groupBuffer.ref.version,d.tcoordBuffer.ref.version])}function n(d,f,I,C,y,Q,E,b){let x=we(),S,w=-1,R=-1,T={kind:"text",charCount:b,fontTexture:D.create(d),centerBuffer:D.create(f),mappingBuffer:D.create(I),depthBuffer:D.create(C),indexBuffer:D.create(y),groupBuffer:D.create(Q),tcoordBuffer:D.create(E),get boundingSphere(){let L=r(T);if(L!==w){let F=gm(T.centerBuffer.ref.value,T.charCount*4,4);we.copy(x,F),w=L}return x},get groupMapping(){return T.groupBuffer.ref.version!==R&&(S=Ap(T.groupBuffer.ref.value,T.charCount,4),R=T.groupBuffer.ref.version),S},setBoundingSphere(L){we.copy(x,L),w=r(T)},hasBoundingSphere(){return w===r(T)}};return T}function o(d,f,I,C,y,Q,E,b,x){return x.charCount=b,D.update(x.fontTexture,d),D.update(x.centerBuffer,f),D.update(x.mappingBuffer,I),D.update(x.depthBuffer,C),D.update(x.indexBuffer,y),D.update(x.groupBuffer,Q),D.update(x.tcoordBuffer,E),x}p.Params={...ot.Params,...w9,sizeFactor:h.Numeric(1,{min:0,max:10,step:.1}),borderWidth:h.Numeric(0,{min:0,max:.5,step:.01}),borderColor:h.Color(xt.grey),offsetX:h.Numeric(0,{min:0,max:10,step:.1}),offsetY:h.Numeric(0,{min:0,max:10,step:.1}),offsetZ:h.Numeric(0,{min:0,max:10,step:.1}),background:h.Boolean(!1),backgroundMargin:h.Numeric(.2,{min:0,max:1,step:.01}),backgroundColor:h.Color(xt.grey),backgroundOpacity:h.Numeric(1,{min:0,max:1,step:.01}),tether:h.Boolean(!1),tetherLength:h.Numeric(1,{min:0,max:5,step:.1}),tetherBaseWidth:h.Numeric(.3,{min:0,max:1,step:.01}),attachment:h.Select("middle-center",[["bottom-left","bottom-left"],["bottom-center","bottom-center"],["bottom-right","bottom-right"],["middle-left","middle-left"],["middle-center","middle-center"],["middle-right","middle-right"],["top-left","top-left"],["top-center","top-center"],["top-right","top-right"]])},p.Utils={Params:p.Params,createEmpty:t,createValues:s,createValuesSimple:c,updateValues:l,updateBoundingSphere:u,createRenderableState:g,updateRenderableState:m,createPositionIterator:A};function A(d,f){let I=d.charCount*4,C=f.instanceCount.ref.value,y=is(),Q=y.position,E=d.centerBuffer.ref.value,b=f.aTransform.ref.value;return rn(I,C,4,(S,w)=>(w<0?B.fromArray(Q,E,S*3):B.transformMat4Offset(Q,E,b,0,S*3,w*16),y))}function s(d,f,I,C,y){let{instanceCount:Q,groupCount:E}=I,b=A(d,f),x=cA(I,b,C.color),S=hl(I,b,C.size),w=vi(y.instanceGranularity,E,Q)?ei(Q,"instance"):ei(Q*E,"groupInstance"),R=dl(),T=pl(),L=Il(),F=Bl(),v=fl(),U=Cl(),G={drawCount:d.charCount*2*3,vertexCount:d.charCount*4,groupCount:E,instanceCount:Q},N=fQ(S)*y.sizeFactor,k=OCe(d.mappingBuffer.ref.value,d.depthBuffer.ref.value,d.charCount,N),J=we.expand(we(),d.boundingSphere,k),H=Ta(J,f.aTransform.ref.value,Q,0);return{dGeometryType:D.create("text"),aPosition:d.centerBuffer,aMapping:d.mappingBuffer,aDepth:d.depthBuffer,aGroup:d.groupBuffer,elements:d.indexBuffer,boundingSphere:D.create(H),invariantBoundingSphere:D.create(J),uInvariantBoundingSphere:D.create(lr.ofSphere(J)),...x,...S,...w,...R,...T,...L,...F,...v,...U,...f,aTexCoord:d.tcoordBuffer,tFont:d.fontTexture,padding:D.create(k),...ot.createValues(y,G),uSizeFactor:D.create(y.sizeFactor),uBorderWidth:D.create($t(y.borderWidth,0,.5)),uBorderColor:D.create(ke.toArrayNormalized(y.borderColor,B.zero(),0)),uOffsetX:D.create(y.offsetX),uOffsetY:D.create(y.offsetY),uOffsetZ:D.create(y.offsetZ),uBackgroundColor:D.create(ke.toArrayNormalized(y.backgroundColor,B.zero(),0)),uBackgroundOpacity:D.create(y.backgroundOpacity)}}function c(d,f,I,C,y){let Q=ot.createSimple(I,C,y),E={...h.getDefaultValues(p.Params),...f};return s(d,Q.transform,Q.locationIterator,Q.theme,E)}function l(d,f){ot.updateValues(d,f),D.updateIfChanged(d.uSizeFactor,f.sizeFactor),D.updateIfChanged(d.uBorderWidth,f.borderWidth),ke.fromNormalizedArray(d.uBorderColor.ref.value,0)!==f.borderColor&&(ke.toArrayNormalized(f.borderColor,d.uBorderColor.ref.value,0),D.update(d.uBorderColor,d.uBorderColor.ref.value)),D.updateIfChanged(d.uOffsetX,f.offsetX),D.updateIfChanged(d.uOffsetY,f.offsetY),D.updateIfChanged(d.uOffsetZ,f.offsetZ),ke.fromNormalizedArray(d.uBackgroundColor.ref.value,0)!==f.backgroundColor&&(ke.toArrayNormalized(f.backgroundColor,d.uBackgroundColor.ref.value,0),D.update(d.uBackgroundColor,d.uBackgroundColor.ref.value)),D.updateIfChanged(d.uBackgroundOpacity,f.backgroundOpacity)}function u(d,f){let I=fQ(d)*d.uSizeFactor.ref.value,C=OCe(d.aMapping.ref.value,d.aDepth.ref.value,f.charCount,I),y=we.expand(we(),f.boundingSphere,C),Q=Ta(y,d.aTransform.ref.value,d.instanceCount.ref.value,0);we.equals(Q,d.boundingSphere.ref.value)||D.update(d.boundingSphere,Q),we.equals(y,d.invariantBoundingSphere.ref.value)||(D.update(d.invariantBoundingSphere,y),D.update(d.uInvariantBoundingSphere,lr.fromSphere(d.uInvariantBoundingSphere.ref.value,y))),D.update(d.padding,C)}function g(d){let f=ot.createRenderableState(d);return m(f,d),f}function m(d,f){ot.updateRenderableState(d,f),d.pickable=!1,d.opaque=!1,d.writeDepth=!0}})(tA||={});function OCe(e,t,r,n){let o=0,i=0,a=0;for(let A=0,s=r*4;A<s;++A){let c=2*A,l=Math.abs(e[c]);l>o&&(o=l);let u=Math.abs(e[c+1]);u>i&&(i=u);let g=Math.abs(t[A]);g>a&&(a=g)}return Math.max(a,n*Math.sqrt(o*o+i*i))}var BQ=qe.add,AM=qe.add2,fm=qe.add3,bg=B(),Kf=B(),W2=B(),Ii;(t=>{function e(r=2048,n=1024,o){let i=qe.create(Float32Array,1,n,o?o.groupBuffer.ref.value:r),a=qe.create(Float32Array,3,n,o?o.startBuffer.ref.value:r),A=qe.create(Float32Array,3,n,o?o.endBuffer.ref.value:r),s=(u,g,m,p,d,f,I)=>{for(let C=0;C<4;++C)fm(a,u,g,m),fm(A,p,d,f),BQ(i,I)},c=(u,g,m)=>{for(let p=0;p<4;++p)fm(a,u[0],u[1],u[2]),fm(A,g[0],g[1],g[2]),BQ(i,m)},l=(u,g,m,p)=>{let d=B.distance(u,g),f=m%2!==0,I=Math.floor((m+1)/2),C=d/(m+.5);B.setMagnitude(W2,B.sub(W2,g,u),C),B.copy(bg,u);for(let y=0;y<I;++y)B.add(bg,bg,W2),f&&y===I-1?B.copy(Kf,g):B.add(Kf,bg,W2),s(bg[0],bg[1],bg[2],Kf[0],Kf[1],Kf[2],p),B.add(bg,bg,W2)};return{add:s,addVec:c,addFixedCountDashes:l,addFixedLengthDashes:(u,g,m,p)=>{let d=B.distance(u,g);l(u,g,d/m,p)},addCage:(u,g,m)=>{let{vertices:p,edges:d}=g;for(let f=0,I=d.length;f<I;f+=2)B.fromArray(bg,p,d[f]*3),B.fromArray(Kf,p,d[f+1]*3),B.transformMat4(bg,bg,u),B.transformMat4(Kf,Kf,u),s(bg[0],bg[1],bg[2],Kf[0],Kf[1],Kf[2],m)},getLines:()=>{let u=i.elementCount/4,g=i.elementCount,m=qe.compact(i,!0),p=qe.compact(a,!0),d=qe.compact(A,!0),f=o&&u<=o.lineCount&&o.stripCount.ref.value===0?o.mappingBuffer.ref.value:new Float32Array(u*8),I=o&&u<=o.lineCount&&o.stripCount.ref.value===0?o.indexBuffer.ref.value:new Uint32Array(u*6),C=o?o.stripBuffer.ref.value:new Uint32Array(0);return(!o||u>o.lineCount||o.stripCount.ref.value>0)&&ket(u,f,I),Zr.create(f,I,m,p,d,C,u,g,0,o)}}}t.create=e})(Ii||={});function ket(e,t,r){for(let n=0;n<e;++n){let o=n*8;t[o]=-1,t[o+1]=-1,t[o+2]=1,t[o+3]=-1,t[o+4]=-1,t[o+5]=1,t[o+6]=1,t[o+7]=1}for(let n=0;n<e;++n){let o=n*4,i=n*6;r[i]=o,r[i+1]=o+1,r[i+2]=o+2,r[i+3]=o+1,r[i+4]=o+3,r[i+5]=o+2}}var R9;(t=>{function e(r=2048,n=1024,o){let i=qe.create(Float32Array,1,n,o?o.groupBuffer.ref.value:r),a=qe.create(Float32Array,3,n,o?o.startBuffer.ref.value:r),A=qe.create(Float32Array,3,n,o?o.endBuffer.ref.value:r),s=qe.create(Float32Array,2,n,o?o.mappingBuffer.ref.value:r),c=qe.create(Uint32Array,3,n,o?o.indexBuffer.ref.value:r),l=qe.create(Uint32Array,1,n,o?o.stripBuffer.ref.value:r),u=0,g=0,m=0,p=0,d=0,f=0,I=(C,y,Q)=>{if(g===0){m=i.elementCount,p=C,d=y,f=Q,g=1;return}let E=i.elementCount;g===1&&(fm(a,p,d,f),fm(A,C,y,Q),BQ(i,u),AM(s,-1,-1),fm(a,p,d,f),fm(A,C,y,Q),BQ(i,u),AM(s,1,-1)),fm(a,p,d,f),fm(A,C,y,Q),BQ(i,u),AM(s,-1,1),fm(a,p,d,f),fm(A,C,y,Q),BQ(i,u),AM(s,1,1);let b=g===1?m:E-2,x=g===1?E+2:E;fm(c,b,b+1,x),fm(c,b+1,x+1,x),p=C,d=y,f=Q,g++};return{start:C=>{u=C,g=0,l.elementCount===0&&BQ(l,0)},add:(C,y,Q)=>{I(C,y,Q)},addVec:C=>{I(C[0],C[1],C[2])},end:()=>{g=0,BQ(l,i.elementCount)},getLines:()=>{let C=c.elementCount/2,y=i.elementCount,Q=l.elementCount-1,E=qe.compact(i,!0),b=qe.compact(a,!0),x=qe.compact(A,!0),S=qe.compact(s,!0),w=qe.compact(c,!0),R=qe.compact(l,!0);return Zr.create(S,w,E,b,x,R,C,y,Q,o)}}}t.create=e})(R9||={});var Zr;(p=>{function e(d,f,I,C,y,Q,E,b,x,S){return S?i(d,f,I,C,y,Q,E,b,x,S):o(d,f,I,C,y,Q,E,b,x)}p.create=e;function t(d){let f=d?d.mappingBuffer.ref.value:new Float32Array(0),I=d?d.indexBuffer.ref.value:new Uint32Array(0),C=d?d.groupBuffer.ref.value:new Float32Array(0),y=d?d.startBuffer.ref.value:new Float32Array(0),Q=d?d.endBuffer.ref.value:new Float32Array(0),E=d?d.stripBuffer.ref.value:new Uint32Array(0);return e(f,I,C,y,Q,E,0,0,0,d)}p.createEmpty=t;function r(d,f){let I=d.vertexBuffer.ref.value,C=d.indexBuffer.ref.value,y=d.groupBuffer.ref.value,Q=Ii.create(d.triangleCount*3,d.triangleCount/10,f);for(let E=0,b=d.triangleCount*3;E<b;E+=3){let x=C[E],S=C[E+1],w=C[E+2],R=I[x*3],T=I[x*3+1],L=I[x*3+2],F=I[S*3],v=I[S*3+1],U=I[S*3+2],G=I[w*3],N=I[w*3+1],k=I[w*3+2];Q.add(R,T,L,F,v,U,y[x]),Q.add(R,T,L,G,N,k,y[x]),Q.add(F,v,U,G,N,k,y[S])}return Q.getLines()}p.fromMesh=r;function n(d){return na([d.lineCount,d.vertexCount,d.mappingBuffer.ref.version,d.indexBuffer.ref.version,d.groupBuffer.ref.version,d.startBuffer.ref.version,d.endBuffer.ref.version,d.stripCount.ref.version,d.stripBuffer.ref.version])}function o(d,f,I,C,y,Q,E,b,x){let S=we(),w,R=-1,T=-1,L={kind:"lines",lineCount:E,vertexCount:b,mappingBuffer:D.create(d),indexBuffer:D.create(f),groupBuffer:D.create(I),startBuffer:D.create(C),endBuffer:D.create(y),stripCount:D.create(x),stripBuffer:D.create(Q),get boundingSphere(){let F=n(L);if(F!==R){let v=gm(L.startBuffer.ref.value,L.lineCount*4,4),U=gm(L.endBuffer.ref.value,L.lineCount*4,4);we.expandBySphere(S,v,U),R=F}return S},get groupMapping(){return L.groupBuffer.ref.version!==T&&(w=Ap(L.groupBuffer.ref.value,L.lineCount,4),T=L.groupBuffer.ref.version),w},setBoundingSphere(F){we.copy(S,F),R=n(L)},hasBoundingSphere(){return R===n(L)}};return L}function i(d,f,I,C,y,Q,E,b,x,S){return(E>S.lineCount||x!==S.stripCount.ref.value||x>0)&&(D.update(S.mappingBuffer,d),D.update(S.indexBuffer,f)),S.lineCount=E,S.vertexCount=b,D.update(S.groupBuffer,I),D.update(S.startBuffer,C),D.update(S.endBuffer,y),D.updateIfChanged(S.stripCount,x),D.update(S.stripBuffer,Q),S}function a(d,f){let I=d.startBuffer.ref.value;Eg(f,I,0,d.vertexCount),D.update(d.startBuffer,I);let C=d.endBuffer.ref.value;Eg(f,C,0,d.vertexCount),D.update(d.endBuffer,C)}p.transform=a,p.Params={...ot.Params,sizeFactor:h.Numeric(2,{min:0,max:10,step:.1}),lineSizeAttenuation:h.Boolean(!1),animation:Hu()},p.Utils={Params:p.Params,createEmpty:t,createValues:l,createValuesSimple:u,updateValues:g,updateBoundingSphere:m,createRenderableState:ot.createRenderableState,updateRenderableState:ot.updateRenderableState,createPositionIterator:c};function c(d,f){let I=d.lineCount*4,C=f.instanceCount.ref.value,y=is(),Q=y.position,E=d.startBuffer.ref.value,b=d.endBuffer.ref.value,x=f.aTransform.ref.value;return rn(I,C,2,(w,R)=>{let T=w%4===0?E:b;return R<0?B.fromArray(Q,T,w*3):B.transformMat4Offset(Q,T,x,0,w*3,R*16),y})}function l(d,f,I,C,y){let{instanceCount:Q,groupCount:E}=I,b=c(d,f),x=cA(I,b,C.color),S=hl(I,b,C.size),w=vi(y.instanceGranularity,E,Q)?ei(Q,"instance"):ei(Q*E,"groupInstance"),R=dl(),T=pl(),L=Il(),F=Bl(),v=fl(),U=Cl(),G={drawCount:d.lineCount*2*3,vertexCount:d.vertexCount,groupCount:E,instanceCount:Q},N=we.clone(d.boundingSphere),k=Ta(N,f.aTransform.ref.value,Q,0);return{dGeometryType:D.create("lines"),aMapping:d.mappingBuffer,aGroup:d.groupBuffer,aStart:d.startBuffer,aEnd:d.endBuffer,elements:d.indexBuffer,boundingSphere:D.create(k),invariantBoundingSphere:D.create(N),uInvariantBoundingSphere:D.create(lr.ofSphere(N)),...x,...S,...w,...R,...T,...L,...F,...v,...U,...f,...ot.createValues(y,G),uSizeFactor:D.create(y.sizeFactor),dLineSizeAttenuation:D.create(y.lineSizeAttenuation),uDoubleSided:D.create(!0),dFlipSided:D.create(!1),...up(y.animation),stripCount:d.stripCount,stripOffsets:d.stripBuffer}}function u(d,f,I,C,y){let Q=ot.createSimple(I,C,y),E={...h.getDefaultValues(p.Params),...f};return l(d,Q.transform,Q.locationIterator,Q.theme,E)}function g(d,f){ot.updateValues(d,f),D.updateIfChanged(d.uSizeFactor,f.sizeFactor),D.updateIfChanged(d.dLineSizeAttenuation,f.lineSizeAttenuation),gp(d,f.animation)}function m(d,f){let I=we.clone(f.boundingSphere),C=Ta(I,d.aTransform.ref.value,d.instanceCount.ref.value,0);we.equals(C,d.boundingSphere.ref.value)||D.update(d.boundingSphere,C),we.equals(I,d.invariantBoundingSphere.ref.value)||(D.update(d.invariantBoundingSphere,I),D.update(d.uInvariantBoundingSphere,lr.fromSphere(d.uInvariantBoundingSphere.ref.value,I)))}})(Zr||={});var JCe=B(),zCe=B(),KCe=B();function IQ(e,t){let r=t.length,n=Bm(r/3);for(let o=0;o<r;o+=3)B.fromArray(JCe,e,t[o]*3),B.fromArray(zCe,e,t[o+1]*3),B.fromArray(KCe,e,t[o+2]*3),n.add(JCe,zCe,KCe);return n.getPrimitive()}var sM=B();function Bm(e,t){t===void 0&&(t=e*3);let r=new Float32Array(t*3),n=new Float32Array(t*3),o=new Uint32Array(e*3),i=0,a=0;return{add:(A,s,c)=>{B.toArray(A,r,i),B.toArray(s,r,i+3),B.toArray(c,r,i+6),B.triangleNormal(sM,A,s,c);for(let l=0;l<3;++l)B.toArray(sM,n,i+3*l),o[a+l]=i/3+l;i+=9,a+=3},addQuad:(A,s,c,l)=>{B.toArray(A,r,i),B.toArray(s,r,i+3),B.toArray(c,r,i+6),B.toArray(l,r,i+9),B.triangleNormal(sM,A,s,c);for(let g=0;g<4;++g)B.toArray(sM,n,i+3*g);let u=i/3;o[a]=u,o[a+1]=u+1,o[a+2]=u+2,o[a+3]=u+2,o[a+4]=u+3,o[a+5]=u,i+=12,a+=6},getPrimitive:()=>({vertices:r,normals:n,indices:o})}}var vD=B(),Het=Ht();function mI(e,t){let{vertices:r,normals:n}=e,o=Ht.directionTransform(Het,t);for(let i=0,a=r.length;i<a;i+=3)B.transformMat4(vD,B.fromArray(vD,r,i),t),B.toArray(vD,r,i),B.transformMat3(vD,B.fromArray(vD,n,i),o),B.toArray(vD,n,i);return e}function vs(e,t,r=-1){let n=new Float32Array(e*3),o=r===-1?e<=4?Math.sqrt(2)/2:.6:r,i=t?1:0;for(let a=0,A=e;a<A;++a){let s=(a*2+i)/e*Math.PI;n[a*3]=Math.cos(s)*o,n[a*3+1]=Math.sin(s)*o,n[a*3+2]=0}return n}function dp(e,t){return{vertices:e,edges:t}}function FD(e){return{vertices:new Float32Array(e.vertices),edges:new Uint32Array(e.edges)}}var U9=B.zero();function wD(e,t){let{vertices:r}=e;for(let n=0,o=r.length;n<o;n+=3)B.transformMat4(U9,B.fromArray(U9,r,n),t),B.toArray(U9,r,n);return e}var fh=B(),Bh=B(),Ih=B(),RD=B(),YA=vs(4,!0);function jCe(e){let n=Bm(12,e?36:24);for(let o=0;o<4;++o){let i=(o+1)%4;B.set(fh,YA[o*3],YA[o*3+1],-.5),B.set(Bh,YA[i*3],YA[i*3+1],-.5),B.set(Ih,YA[i*3],YA[i*3+1],.5),B.set(RD,YA[o*3],YA[o*3+1],.5),e?n.add(fh,Bh,Ih):n.addQuad(fh,Bh,Ih,RD)}return B.set(fh,YA[0],YA[1],-.5),B.set(Bh,YA[3],YA[4],-.5),B.set(Ih,YA[6],YA[7],-.5),B.set(RD,YA[9],YA[10],-.5),e?n.add(Ih,Bh,fh):n.addQuad(RD,Ih,Bh,fh),B.set(fh,YA[0],YA[1],.5),B.set(Bh,YA[3],YA[4],.5),B.set(Ih,YA[6],YA[7],.5),B.set(RD,YA[9],YA[10],.5),e?n.add(fh,Bh,Ih):n.addQuad(fh,Bh,Ih,RD),n.getPrimitive()}var L9;function dI(){return L9||(L9=jCe(!1)),L9}var T9;function WCe(){return T9||(T9=jCe(!0)),T9}var P9;function Q0(){return P9||(P9=dp([.5,.5,-.5,-.5,.5,-.5,-.5,-.5,-.5,.5,-.5,-.5,.5,.5,.5,-.5,.5,.5,-.5,-.5,.5,.5,-.5,.5],[0,4,1,5,2,6,3,7,0,1,1,2,2,3,3,0,4,5,5,6,6,7,7,4])),P9}function G9(e){return e.map(t=>({x:t[0],alpha:t[1]}))}var UD=256;function Vet(e,t){let r=[{x:0,alpha:0},{x:0,alpha:0},...e,{x:1,alpha:0},{x:1,alpha:0}],n=t??new Uint8Array(UD);t&&n.fill(0);let o=0,i,a,A,s,c,l,u=e.length+1;for(let g=0;g<u;++g){i=r[g+1].x,a=r[g+2].x,A=r[g].alpha,s=r[g+1].alpha,c=r[g+2].alpha,l=r[g+3].alpha;let m=Math.round((a-i)*UD);for(let p=0;p<m;++p){let d=p/m;o<UD&&(n[o]=Math.max(0,jd(A,s,c,l,d,.5)*255),++o)}}return n}function N9(e,t){let n=t&&t.ref.value.height===1&&t.ref.value.array.length===UD?t.ref.value.array:new Uint8Array(UD);Vet(e,n);let o={array:n,width:UD,height:1};return t?(D.update(t,o),t):D.create(o)}function ZCe(e,t,r){if(r)return XCe(e,t,r.min,r.max);{let[n,o]=ul(e);return XCe(e,t,n,o)}}function XCe(e,t,r,n){let o=(n-r)/t;o===0&&(o=1);let i=new Int32Array(t);for(let a=0,A=e.length;a<A;a++){let s=Math.floor((e[a]-r)/o);s>=t?s=t-1:s<0&&(s=0),i[s]++}return{min:r,max:n,binWidth:o,counts:i}}function cM(e,t,r){let{counts:n,min:o,binWidth:i}=e,a=n.length;if(a===0)return o;let A=0;for(let l=0;l<a;++l)l!==r&&(A+=n[l]);if(A===0)return o;let s=Math.max(0,Math.min(1,t))*A,c=0;for(let l=0;l<a;++l){if(l===r)continue;let u=n[l];if(u===0)continue;let g=c+u;if(g>=s){let m=u>0?(s-c)/u:0;return o+(l+m)*i}c=g}return o+a*i}function qCe(e,t){let{counts:r,min:n,binWidth:o}=e,i=r.length,a;t?.ignoreZero&&o>0&&Math.floor((0-n)/o)===0&&(a=0);let A=0,s=0,c=0,l=-1,u=-1;for(let I=0;I<i;++I){if(I===a)continue;let C=r[I];if(C===0)continue;let y=n+(I+.5)*o;A+=C,s+=C*y,c+=C*y*y,l<0&&(l=I),u=I}if(A===0)return{count:0,min:n,max:n,mean:n,sigma:0,p1:n,p50:n,p95:n,p99:n};let g=s/A,m=Math.max(0,c/A-g*g),p=Math.sqrt(m),d=n+l*o,f=n+(u+1)*o;return{count:A,min:d,max:f,mean:g,sigma:p,p1:cM(e,.01,a),p50:cM(e,.5,a),p95:cM(e,.95,a),p99:cM(e,.99,a)}}function $Ce(e,t){let r=e.counts.length;if(t<=0||t>=r)return e;let n=new Int32Array(t);for(let i=0;i<r;++i){let a=Math.floor(i*t/r);a>=t&&(a=t-1),n[a]+=e.counts[i]}let o=(e.max-e.min)/t||1;return{min:e.min,max:e.max,binWidth:o,counts:n}}var _et=B.transformMat4,E0=B.lerp,jr;(R=>{R.One={transform:{kind:"matrix",matrix:Y.identity()},cells:Fr.create(Fr.Space([1,1,1],[0,1,2]),Fr.Data1([0])),stats:{min:0,max:0,mean:0,sigma:0}};let t=Y(),r=Y();function n(T){if(T.transform.kind==="matrix")return Y.copy(Y(),T.transform.matrix);if(T.transform.kind==="spacegroup"){let{cells:{space:L}}=T,F=Y.fromScaling(t,B.div(B(),Ct.size(B(),T.transform.fractionalBox),B.ofArray(L.dimensions))),v=Y.fromTranslation(r,T.transform.fractionalBox.min);return Y.mul3(Y(),T.transform.cell.fromFractional,v,F)}return Y.identity()}R.getGridToCartesianTransform=n;function o(T,L){return T===L}R.areEquivalent=o;function i(T){return T.cells.data.length===0}R.isEmpty=i;function a(T,L){L||(L=we());let F=T.cells.space.dimensions,v=R.getGridToCartesianTransform(T);return we.fromDimensionsAndTransform(L,F,v)}R.getBoundingSphere=a;let A=Ct();function s(T,L,F){let v=L<0,U=[0,0,0],G=T.cells.space.getCoords,N=T.cells.data,[k,J,H]=T.cells.space.dimensions,z=k-1,_=J-1,M=H-1,q=0,ne=0,oe=0;for(let me=0,Se=N.length;me<Se;++me)(v&&N[me]<=L||!v&&N[me]>=L)&&(G(me,U),U[0]<z&&(z=U[0]),U[1]<_&&(_=U[1]),U[2]<M&&(M=U[2]),U[0]>q&&(q=U[0]),U[1]>ne&&(ne=U[1]),U[2]>oe&&(oe=U[2]));B.set(A.min,z-1,_-1,M-1),B.set(A.max,q+1,ne+1,oe+1);let ae=R.getGridToCartesianTransform(T);return Ct.transform(A,A,ae),we.fromBox3D(F||we(),A)}R.getIsosurfaceBoundingSphere=s;function c(T,L){let F=T._histograms;return F||(F=T._histograms={}),F[L]||(F[L]=ZCe(T.cells.data,L,{min:T.stats.min,max:T.stats.max})),F[L]}R.getHistogram=c,R.RobustStatsBinCount=1024;function u(T,L){let F=L?.binCount??R.RobustStatsBinCount,v=!!L?.ignoreZero,U=`${F}|${v?1:0}`,G=T._robustStats;return G||(G=T._robustStats={}),G[U]||(G[U]=qCe(c(T,F),{ignoreZero:v})),G[U]}R.getRobustStats=u;function g(T,L){let F=R.getGridToCartesianTransform(T);Y.invert(F,F);let v=B(),{stats:U}=T,{dimensions:G,get:N}=T.cells.space,k=T.cells.data,[J,H,z]=G,_=(q,ne,oe)=>N(k,q,ne,oe),M=T.periodicity==="xyz";return function(ne){_et(v,ne,F);let oe=m(v,J,H,z,M,_);return Number.isNaN(oe)?oe:L==="relative"?(oe-U.mean)/U.sigma:oe}}R.makeGetTrilinearlyInterpolated=g;function m(T,L,F,v,U,G){let N=Math.trunc(T[0]),k=Math.trunc(T[1]),J=Math.trunc(T[2]);if(!U&&(N<0||N>=L||k<0||k>=F||J<0||J>=v))return Number.NaN;let H=T[0]-N,z=T[1]-k,_=T[2]-J,M=Math.min(N+1,L-1),q=Math.min(k+1,F-1),ne=Math.min(J+1,v-1),oe=G(N,k,J),ae=G(M,k,J),me=G(N,q,J),Se=G(M,q,J),ee=ho(ho(oe,ae,H),ho(me,Se,H),z);oe=G(N,k,ne),ae=G(M,k,ne),me=G(N,q,ne),Se=G(M,q,ne);let O=ho(ho(oe,ae,H),ho(me,Se,H),z);return ho(ee,O,_)}R.trilinearlyInterpolate=m;let p=B(),d=B(),f=B(),I=B(),C=B(),y=B(),Q=B(),E=B();function b(T,L,F,v,U,G){let N=Math.trunc(T[0]),k=Math.trunc(T[1]),J=Math.trunc(T[2]);if(N<0||N>=L||k<0||k>=F||J<0||J>=v)return!1;let H=T[0]-N,z=T[1]-k,_=T[2]-J,M=Math.min(N+1,L-1),q=Math.min(k+1,F-1),ne=Math.min(J+1,v-1);return U(N,k,J,p),U(M,k,J,d),U(N,q,J,f),U(M,q,J,I),E0(C,p,d,H),E0(y,f,I,H),E0(Q,C,y,z),U(N,k,ne,p),U(M,k,ne,d),U(N,q,ne,f),U(M,q,ne,I),E0(C,p,d,H),E0(y,f,I,H),E0(E,C,y,z),E0(G,Q,E,_),!0}R.trilinearlyInterpolateVec3=b;function x(T){if(T._gradients)return T._gradients;let L=S(T);return T._gradients=L,L}R.getGradients=x;function S(T){let{dimensions:L,get:F,dataOffset:v}=T.cells.space,U=T.cells.data,[G,N,k]=L,J=G*N*k,H=new Float32Array(J*3),z=1/0,_=-1/0,M=0,q=0;for(let ae=0;ae<k;++ae)for(let me=0;me<N;++me)for(let Se=0;Se<G;++Se){let ee=v(Se,me,ae)*3,O=Math.max(0,Se-1),X=Math.min(G-1,Se+1),Ce=Math.max(0,me-1),Ne=Math.min(N-1,me+1),$=Math.max(0,ae-1),pe=Math.min(k-1,ae+1),ye=(F(U,X,me,ae)-F(U,O,me,ae))/(X-O||1),Be=(F(U,Se,Ne,ae)-F(U,Se,Ce,ae))/(Ne-Ce||1),De=(F(U,Se,me,pe)-F(U,Se,me,$))/(pe-$||1);H[ee]=ye,H[ee+1]=Be,H[ee+2]=De;let Te=ye*ye+Be*Be+De*De;Te<z&&(z=Te),Te>_&&(_=Te),M+=Te,q+=Te*Te}z===1/0&&(z=0),_===-1/0&&(_=1),z=Math.sqrt(z),_=Math.sqrt(_);let ne=M/J,oe=Math.sqrt(q/J);return{values:H,magnitude:{min:z,max:_,mean:ne,sigma:oe}}}function w(T){let{values:L}=x(T),{dimensions:F,dataOffset:v}=T.cells.space,[U,G,N]=F,k=(J,H,z,_)=>{let M=v(J,H,z)*3;_[0]=L[M],_[1]=L[M+1],_[2]=L[M+2]};return function(H,z){return b(H,U,G,N,k,z)}}R.makeGetInterpolatedGradient=w})(jr||={});function ehe(e,t){return ve.create("Create Volume",async()=>{let{header:r,values:n}=e,o=Fr.Space(r.dim,[0,1,2],Float64Array),i;if(r.dataSetIds.length===0)i=n;else{let[c,l,u]=r.dim,g=(t?.dataIndex||0)+1,m=0,p=0;i=new Float64Array(c*l*u);for(let d=0;d<c;d++)for(let f=0;f<l;f++)for(let I=0;I<u;I++)i[m++]=n[p],p+=g}let a=Fr.create(o,Fr.Data1(i)),A=Y.fromTranslation(Y(),r.origin),s=Y.fromBasis(Y(),r.basisX,r.basisY,r.basisZ);return Y.mul(A,A,s),{label:t?.label,entryId:t?.entryId,grid:{transform:{kind:"matrix",matrix:A},cells:a,stats:{min:My(i),max:Es(i),mean:ky(i),sigma:Hy(i)}},instances:[{transform:Y.identity()}],sourceData:lM.create(e),customProperties:new bA,_propertyData:Object.create(null),_localPropertyData:Object.create(null)}})}var lM;(r=>{function e(n){return n?.kind==="cube"}r.is=e;function t(n){return{kind:"cube",name:n.name,data:n}}r.create=t})(lM||={});function X2(e,t){return ve.create("Create Volume",async r=>{let{volume_data_3d_info:n,volume_data_3d:o}=e,i=Ia.create(n.spacegroup_number.value(0)||"P 1",B.ofArray(n.spacegroup_cell_size.value(0)),B.scale(B.zero(),B.ofArray(n.spacegroup_cell_angles.value(0)),Math.PI/180)),a=n.axis_order.value(0),A=Fr.convertToCanonicalAxisIndicesFastToSlow(a),s=A(n.sample_count.value(0)),c=Fr.Space(s,Fr.invertAxisOrder(a),Float32Array),l=Fr.create(c,Fr.Data1(o.values.toArray({array:Float32Array}))),u=B.ofArray(A(n.origin.value(0))),g=B.ofArray(A(n.dimensions.value(0)));return{label:t?.label,entryId:t?.entryId,grid:{transform:{kind:"spacegroup",cell:i,fractionalBox:Ct.create(u,B.add(B.zero(),u,g))},cells:l,stats:{min:n.min_sampled.value(0),max:n.max_sampled.value(0),mean:n.mean_sampled.value(0),sigma:n.sigma_sampled.value(0)},periodicity:B.isInteger(g)?"xyz":"none"},instances:[{transform:Y.identity()}],sourceData:uM.create(e),customProperties:new bA,_propertyData:Object.create(null),_localPropertyData:Object.create(null)}})}var uM;(r=>{function e(n){return n?.kind==="dscif"}r.is=e;function t(n){return{kind:"dscif",name:n._name,data:n}}r.create=t})(uM||={});var Ze;(w=>{function e(R){return R?.grid?.cells?.space?.dimensions?.length&&R?.instances&&R?.sourceData&&R?.customProperties&&R?._propertyData&&R?._localPropertyData}w.is=e;let t;(k=>{function R(J,H,z){return So(U(J,z).absoluteValue,U(H,z).absoluteValue,z.sigma/100)}k.areSame=R;function T(J){return{kind:"absolute",absoluteValue:J}}k.absolute=T;function L(J){return{kind:"relative",relativeValue:J}}k.relative=L;function F(J,H){return H*J.sigma+J.mean}k.calcAbsolute=F;function v(J,H){return J.sigma===0?0:(H-J.mean)/J.sigma}k.calcRelative=v;function U(J,H){return J.kind==="absolute"?J:{kind:"absolute",absoluteValue:k.calcAbsolute(H,J.relativeValue)}}k.toAbsolute=U;function G(J,H){return J.kind==="relative"?J:{kind:"relative",relativeValue:k.calcRelative(H,J.absoluteValue)}}k.toRelative=G;function N(J){return J.kind==="relative"?`${J.relativeValue.toFixed(2)} \u03C3`:`${J.absoluteValue.toPrecision(4)}`}k.toString=N})(t=w.IsoValue||={});function r(R,T,L){if(L==="relative")return t.relative(T);let F=t.absolute(T);if(uM.is(R.sourceData)){let v={min:R.sourceData.data.volume_data_3d_info.min_source.value(0),max:R.sourceData.data.volume_data_3d_info.max_source.value(0),mean:R.sourceData.data.volume_data_3d_info.mean_source.value(0),sigma:R.sourceData.data.volume_data_3d_info.sigma_source.value(0)};return w.IsoValue.toRelative(F,v)}return F}w.adjustedIsoValue=r;let n={min:-1,max:1,mean:0,sigma:.1};function o(R,T){let L=T||n,{min:F,max:v,mean:U,sigma:G}=L,N=(F-U)/G,k=(v-U)/G,J=R;return R.kind==="absolute"?R.absoluteValue<F?J=w.IsoValue.absolute(F):R.absoluteValue>v&&(J=w.IsoValue.absolute(v)):R.relativeValue<N?J=w.IsoValue.relative(N):R.relativeValue>k&&(J=w.IsoValue.relative(k)),h.Conditioned(J,{absolute:h.Converted(H=>w.IsoValue.toAbsolute(H,jr.One.stats).absoluteValue,H=>w.IsoValue.absolute(H),h.Numeric(U,{min:F,max:v,step:f2(G/100,2)},{immediateUpdate:!0})),relative:h.Converted(H=>w.IsoValue.toRelative(H,jr.One.stats).relativeValue,H=>w.IsoValue.relative(H),h.Numeric(Math.min(1,k),{min:N,max:k,step:f2(Math.round((v-F)/G)/100,2)},{immediateUpdate:!0}))},H=>H.kind==="absolute"?"absolute":"relative",(H,z)=>z==="absolute"?w.IsoValue.toAbsolute(H,L):w.IsoValue.toRelative(H,L),{isEssential:!0})}w.createIsoValueParam=o,w.IsoValueParam=o(w.IsoValue.relative(2)),w.One={label:"",grid:jr.One,instances:[],sourceData:{kind:"",name:"",data:{}},customProperties:new bA,_propertyData:Object.create(null),_localPropertyData:Object.create(null)};function A(R,T){return jr.areEquivalent(R.grid,T.grid)&&s(R,T)}w.areEquivalent=A;function s(R,T){if(R.instances.length!==T.instances.length)return!1;for(let L=0,F=R.instances.length;L<F;++L)if(!Y.areEqual(R.instances[L].transform,T.instances[L].transform,1e-6))return!1;return!0}w.areInstanceTransformsEqual=s;function c(R){return jr.isEmpty(R.grid)||R.instances.length===0}w.isEmpty=c;function l(R){return lM.is(R.sourceData)?R.sourceData.data.header.orbitals:!1}w.isOrbitals=l;function u(R,T){return{kind:"volume-loci",volume:R,instances:T}}w.Loci=u;function g(R){return!!R&&R.kind==="volume-loci"}w.isLoci=g;function m(R,T){return R.volume===T.volume&&Ee.areEqual(R.instances,T.instances)}w.areLociEqual=m;function p(R){return c(R.volume)||Ee.isEmpty(R.instances)}w.isLociEmpty=p;let d=new qi("98");function f(R,T,L){let F=jr.getBoundingSphere(R.grid);if(L||(L=we()),Ee.isEmpty(T))return we.copy(L,F);let v=[];for(let U=0,G=Ee.size(T);U<G;++U){let{transform:N}=R.instances[Ee.getAt(T,U)];v.push(we.transform(we(),F,N))}d.reset();for(let U of v)d.includeSphere(U);d.finishedIncludeStep();for(let U of v)d.radiusSphere(U);return d.getSphere(L)}w.getBoundingSphere=f;let I;(G=>{function R(N,k,J){return{kind:"isosurface-loci",volume:N,isoValue:k,instances:J}}G.Loci=R;function T(N){return!!N&&N.kind==="isosurface-loci"}G.isLoci=T;function L(N,k){return N.volume===k.volume&&w.IsoValue.areSame(N.isoValue,k.isoValue,N.volume.grid.stats)&&Ee.areEqual(N.instances,k.instances)}G.areLociEqual=L;function F(N){return c(N.volume)||Ee.isEmpty(N.instances)}G.isLociEmpty=F;let v=new qi("98");function U(N,k,J,H){let z=w.IsoValue.toAbsolute(k,N.grid.stats).absoluteValue,_=jr.getIsosurfaceBoundingSphere(N.grid,z);if(Ee.isEmpty(J))return we.copy(H||we(),_);let M=[];for(let q=0,ne=Ee.size(J);q<ne;++q)M.push(we.transform(we(),_,N.instances[Ee.getAt(J,q)].transform));v.reset();for(let q of M)v.includeSphere(q);v.finishedIncludeStep();for(let q of M)v.radiusSphere(q);return v.getSphere(H)}G.getBoundingSphere=U})(I=w.Isosurface||={});let C;(z=>{function R(_,M){return{kind:"cell-loci",volume:_,elements:M}}z.Loci=R;function T(_){return!!_&&_.kind==="cell-loci"}z.isLoci=T;function L(_,M){if(_.volume!==M.volume||_.elements.length!==M.elements.length)return!1;for(let q=0,ne=_.elements.length;q<ne;++q){let oe=_.elements[q],ae=M.elements[q];if(!Ee.areEqual(oe.instances,ae.instances)||!Ee.areEqual(oe.indices,ae.indices))return!1}return!0}z.areLociEqual=L;function F(_){for(let{indices:M,instances:q}of _.elements)if(!Ee.isEmpty(q)||!Ee.isEmpty(M))return!1;return!0}z.isLociEmpty=F;function v(_){let M=0;for(let{indices:q,instances:ne}of _.elements)M+=Ee.size(q)*Ee.size(ne);return M}z.getLociSize=v;function U(_,M,q){return{kind:"cell-location",volume:_,cell:M,instance:q}}z.Location=U;function G(_){return!!_&&_.kind==="cell-location"}z.isLocation=G;let N=new qi("98"),k=B(),J=B();function H(_,M,q){N.reset();let ne=jr.getGridToCartesianTransform(_.grid),{getCoords:oe}=_.grid.cells.space;for(let{indices:me,instances:Se}of M)for(let ee=0,O=Ee.size(me);ee<O;ee++){let X=Ee.getAt(me,ee);oe(X,k),B.transformMat4(k,k,ne);for(let Ce=0,Ne=Ee.size(Se);Ce<Ne;Ce++){let $=_.instances[Ee.getAt(Se,Ce)];B.transformMat4(J,k,$.transform),N.includePosition(J)}}N.finishedIncludeStep();for(let{indices:me,instances:Se}of M)for(let ee=0,O=Ee.size(me);ee<O;ee++){let X=Ee.getAt(me,ee);oe(X,k),B.transformMat4(k,k,ne);for(let Ce=0,Ne=Ee.size(Se);Ce<Ne;Ce++){let $=_.instances[Ee.getAt(Se,Ce)];B.transformMat4(J,k,$.transform),N.radiusPosition(J)}}let ae=N.getSphere(q);return we.expand(ae,ae,Y.getMaxScaleOnAxis(ne)*10)}z.getBoundingSphere=H})(C=w.Cell||={});let y;(z=>{function R(_,M){return{kind:"segment-loci",volume:_,elements:M}}z.Loci=R;function T(_){return!!_&&_.kind==="segment-loci"}z.isLoci=T;function L(_,M){if(_.volume!==M.volume||_.elements.length!==M.elements.length)return!1;for(let q=0,ne=_.elements.length;q<ne;++q){let oe=_.elements[q],ae=M.elements[q];if(!Ee.areEqual(oe.instances,ae.instances)||!Ee.areEqual(oe.segments,ae.segments))return!1}return!0}z.areLociEqual=L;function F(_){for(let{segments:M,instances:q}of _.elements)if(!Ee.isEmpty(q)||!Ee.isEmpty(M))return!1;return!0}z.isLociEmpty=F;function v(_){let M=0;for(let{segments:q,instances:ne}of _.elements)M+=Ee.size(q)*Ee.size(ne);return M}z.getLociSize=v;let U=Ct(),G=Ct(),N=Ct();function k(_,M,q){let ne=w.Segmentation.get(_);if(ne){Ct.setEmpty(U);let oe=jr.getGridToCartesianTransform(_.grid);for(let{segments:ae,instances:me}of M){Ct.setEmpty(G);for(let Se=0,ee=Ee.size(ae);Se<ee;Se++){let O=Ee.getAt(ae,Se),X=ne.bounds[O];Ct.add(G,X.min),Ct.add(G,X.max)}Ct.transform(G,G,oe);for(let Se=0,ee=Ee.size(me);Se<ee;Se++){let O=_.instances[Ee.getAt(me,Se)];Ct.transform(N,G,O.transform),Ct.addBox3D(U,N)}}return we.fromBox3D(q||we(),U)}else return w.getBoundingSphere(_,Ue.ofLength(_.instances.length),q)}z.getBoundingSphere=k;function J(_,M,q){return{kind:"segment-location",volume:_,segment:M,instance:q}}z.Location=J;function H(_){return!!_&&_.kind==="segment-location"}z.isLocation=H})(y=w.Segment||={}),w.PickingGranularity={set(R,T){R._propertyData.__picking_granularity__=T},get(R){return R._propertyData.__picking_granularity__??"voxel"}},w.Segmentation={set(R,T){R._propertyData.__segmentation__=T},get(R){return R._propertyData.__segmentation__}};function b(R){if(!S(R))return;let T=R.parent||R;if(!T._localPropertyData.__periodicRange__){let L=B.fromArray(B(),T.grid.cells.space.dimensions,0),F=jr.getGridToCartesianTransform(T.grid);B.transformMat4(L,L,F);let v=B.create(1/0,1/0,1/0),U=B.create(-1/0,-1/0,-1/0),G=B();for(let{transform:N}of T.instances)Y.getTranslation(G,N),B.div(G,G,L),B.round(G,G),B.min(v,v,G),B.max(U,U,G);B.addScalar(U,U,1),T._localPropertyData.__periodicRange__={min:v,max:U}}return T._localPropertyData.__periodicRange__}w.getPeriodicRange=b;function x(R){if(!S(R))return;let T=R.parent||R;if(!T._localPropertyData.__periodicInstanceMapping__){let L=new Map,F=B.fromArray(B(),T.grid.cells.space.dimensions,0),v=jr.getGridToCartesianTransform(T.grid);B.transformMat4(F,F,v);let{min:U}=b(T),G=B();for(let k=0,J=T.instances.length;k<J;k++){let{transform:H}=T.instances[k];Y.getTranslation(G,H),B.div(G,G,F),B.round(G,G),B.sub(G,G,U),L.set(fz(G[0],G[1],G[2]),k)}let N=B.fromArray(B(),T.grid.cells.space.dimensions,0);T._localPropertyData.__periodicInstanceMapping__={get(k,J,H){B.set(G,k,J,H),B.div(G,G,N),B.floor(G,G);let z=L.get(fz(G[0],G[1],G[2]));if(z===void 0)return;B.set(G,k,J,H),B.mod(G,G,N);let _=T.grid.cells.space.dataOffset(G[0],G[1],G[2]);return{instance:z,cell:_}}}}return T._localPropertyData.__periodicInstanceMapping__}w.getPeriodicMapping=x;function S(R){return R.grid.periodicity==="xyz"}w.isPeriodic=S})(Ze||={});var M9=dI(),yl;(I=>{function e(C,y,Q,E,b,x,S,w,R,T,L){return L?n(C,y,Q,E,b,x,S,w,R,T,L):r(C,y,Q,E,b,x,S,w,R,T)}I.create=e;function t(C){return na([C.bboxSize.ref.version,C.gridDimension.ref.version,C.gridTexture.ref.version,C.transform.ref.version,C.gridStats.ref.version])}function r(C,y,Q,E,b,x,S,w,R,T){let L=we(),F=-1,v=x.getWidth(),U=x.getHeight(),G=x.getDepth(),N={kind:"direct-volume",gridDimension:D.create(y),gridTexture:D.create(x),gridTextureDim:D.create(B.create(v,U,G)),gridStats:D.create(lr.create(S.min,S.max,S.mean,S.sigma)),bboxMin:D.create(C.min),bboxMax:D.create(C.max),bboxSize:D.create(B.sub(B(),C.max,C.min)),transform:D.create(Q),cellDim:D.create(b),unitToCartn:D.create(E),cartnToUnit:D.create(Y.invert(Y(),E)),get boundingSphere(){let k=t(N);if(k!==F){let J=Yet(N.gridDimension.ref.value,N.transform.ref.value);we.copy(L,J),F=k}return L},packedGroup:D.create(w),axisOrder:D.create(R),dataType:D.create(T),setBoundingSphere(k){we.copy(L,k),F=t(N)},hasBoundingSphere(){return F===t(N)},meta:{}};return N}function n(C,y,Q,E,b,x,S,w,R,T,L){let F=x.getWidth(),v=x.getHeight(),U=x.getDepth();return D.update(L.gridDimension,y),D.update(L.gridTexture,x),D.update(L.gridTextureDim,B.set(L.gridTextureDim.ref.value,F,v,U)),D.update(L.gridStats,lr.set(L.gridStats.ref.value,S.min,S.max,S.mean,S.sigma)),D.update(L.bboxMin,C.min),D.update(L.bboxMax,C.max),D.update(L.bboxSize,B.sub(L.bboxSize.ref.value,C.max,C.min)),D.update(L.transform,Q),D.update(L.cellDim,b),D.update(L.unitToCartn,E),D.update(L.cartnToUnit,Y.invert(Y(),E)),D.updateIfChanged(L.packedGroup,w),D.updateIfChanged(L.axisOrder,B.fromArray(L.axisOrder.ref.value,R,0)),D.updateIfChanged(L.dataType,T),L}function o(C){let y=Ct(),Q=B(),E=Y.identity(),b=Y.identity(),x=B(),S=Ti(),w=jr.One.stats,R=!1,T=B.create(0,1,2);return e(y,Q,E,b,x,S,w,R,T,"byte",C)}I.createEmpty=o,I.Params={...ot.Params,ignoreLight:h.Boolean(!1,ot.ShadingCategory),celShaded:h.Boolean(!1,ot.ShadingCategory),xrayShaded:h.Select(!1,[[!1,"Off"],[!0,"On"],["inverted","Inverted"]],ot.ShadingCategory),controlPoints:h.LineGraph([Le.create(.19,0),Le.create(.2,.05),Le.create(.25,.05),Le.create(.26,0),Le.create(.79,0),Le.create(.8,.05),Le.create(.85,.05),Le.create(.86,0)],{isEssential:!0,yAxis:{scale:"log"}}),stepsPerCell:h.Numeric(3,{min:1,max:10,step:1}),jumpLength:h.Numeric(0,{min:0,max:20,step:.1})},I.Utils={Params:I.Params,createEmpty:o,createValues:u,createValuesSimple:g,updateValues:m,updateBoundingSphere:p,createRenderableState:d,updateRenderableState:f,createPositionIterator:A};function A(C,y){let Q=C.transform.ref.value,[E,b,x]=C.gridDimension.ref.value,S=E*b*x,w=y.instanceCount.ref.value,R=is(),T=R.position,L=y.aTransform.ref.value;return rn(S,w,1,(v,U)=>{let G=Math.floor(v/x);return T[0]=Math.floor(G/b),T[1]=G%b,T[2]=v%x,B.transformMat4(T,T,Q),U>=0&&B.transformMat4Offset(T,T,L,0,0,U*16),R})}function s(C,y){return Math.ceil(B.magnitude(C)*y)}function c(C,y){return Math.min(...C)*(1/y)}function l(C){return 1/C}function u(C,y,Q,E,b){let{gridTexture:x,gridTextureDim:S,gridStats:w}=C,{bboxSize:R,bboxMin:T,bboxMax:L,gridDimension:F,transform:v}=C,{instanceCount:U,groupCount:G}=Q,N=A(C,y),k=cA(Q,N,E.color),J=vi(b.instanceGranularity,G,U)?ei(U,"instance"):ei(U*G,"groupInstance"),H=dl(),z=pl(),_=Il(),M=Bl(),q=fl(),ne=Cl(),[oe,ae,me]=F.ref.value,Se={drawCount:M9.indices.length,vertexCount:oe*ae*me,groupCount:G,instanceCount:U},ee=we.clone(C.boundingSphere),O=Ta(ee,y.aTransform.ref.value,U,0),X=G9(b.controlPoints),Ce=N9(X);return{dGeometryType:D.create("directVolume"),...k,...J,...H,...z,..._,...M,...q,...ne,...y,...ot.createValues(b,Se),aPosition:D.create(M9.vertices),elements:D.create(M9.indices),boundingSphere:D.create(O),invariantBoundingSphere:D.create(ee),uInvariantBoundingSphere:D.create(lr.ofSphere(ee)),uBboxMin:T,uBboxMax:L,uBboxSize:R,uMaxSteps:D.create(s(F.ref.value,b.stepsPerCell)),uStepScale:D.create(c(C.cellDim.ref.value,b.stepsPerCell)),uJumpLength:D.create(b.jumpLength),uTransform:v,uGridDim:F,tTransferTex:Ce,uTransferScale:D.create(l(b.stepsPerCell)),dGridTexType:D.create(x.ref.value.getDepth()>0?"3d":"2d"),uGridTexDim:S,tGridTex:x,uGridStats:w,uCellDim:C.cellDim,uCartnToUnit:C.cartnToUnit,uUnitToCartn:C.unitToCartn,dPackedGroup:C.packedGroup,dAxisOrder:D.create(C.axisOrder.ref.value.join("")),dIgnoreLight:D.create(b.ignoreLight),dCelShaded:D.create(b.celShaded),dXrayShaded:D.create(b.xrayShaded==="inverted"?"inverted":b.xrayShaded===!0?"on":"off"),meta:D.create(C.meta)}}function g(C,y,Q,E,b){let x=ot.createSimple(Q,E,b),S={...h.getDefaultValues(I.Params),...y};return u(C,x.transform,x.locationIterator,x.theme,S)}function m(C,y){ot.updateValues(C,y),D.updateIfChanged(C.dIgnoreLight,y.ignoreLight),D.updateIfChanged(C.dCelShaded,y.celShaded),D.updateIfChanged(C.dXrayShaded,y.xrayShaded==="inverted"?"inverted":y.xrayShaded===!0?"on":"off");let Q=G9(y.controlPoints);N9(Q,C.tTransferTex),D.updateIfChanged(C.uMaxSteps,s(C.uGridDim.ref.value,y.stepsPerCell)),D.updateIfChanged(C.uStepScale,c(C.uCellDim.ref.value,y.stepsPerCell)),D.updateIfChanged(C.uTransferScale,l(y.stepsPerCell)),D.updateIfChanged(C.uJumpLength,y.jumpLength)}function p(C,y){let Q=we.clone(y.boundingSphere),E=Ta(Q,C.aTransform.ref.value,C.instanceCount.ref.value,0);we.equals(E,C.boundingSphere.ref.value)||D.update(C.boundingSphere,E),we.equals(Q,C.invariantBoundingSphere.ref.value)||(D.update(C.invariantBoundingSphere,Q),D.update(C.uInvariantBoundingSphere,lr.fromSphere(C.uInvariantBoundingSphere.ref.value,Q)))}function d(C){let y=ot.createRenderableState(C);return y.opaque=!1,y.writeDepth=!1,y}function f(C,y){ot.updateRenderableState(C,y),C.opaque=!1,C.writeDepth=!1}})(yl||={});function Yet(e,t){return we.fromDimensionsAndTransform(we(),e,t)}var rA;(E=>{function e(b,x,S,w){return w?o(b,x,S,w):n(b,x,S)}E.create=e;function t(b){let x=b?b.centerBuffer.ref.value:new Float32Array(0),S=b?b.groupBuffer.ref.value:new Float32Array(0);return e(x,S,0,b)}E.createEmpty=t;function r(b){return na([b.sphereCount,b.centerBuffer.ref.version,b.groupBuffer.ref.version])}function n(b,x,S){let w=we(),R,T=-1,L=-1,F=D.create(Mo(1,4,Float32Array)),v=D.create(Le.create(0,0)),U=D.create([]),G=D.create(0),N={kind:"spheres",sphereCount:S,centerBuffer:D.create(b),groupBuffer:D.create(x),get boundingSphere(){let k=r(N);if(k!==T){let J=gm(N.centerBuffer.ref.value,N.sphereCount,1);we.copy(w,J),T=k}return w},get groupMapping(){return N.groupBuffer.ref.version!==L&&(R=Ap(N.groupBuffer.ref.value,N.sphereCount),L=N.groupBuffer.ref.version),R},setBoundingSphere(k){we.copy(w,k),T=r(N)},hasBoundingSphere(){return T===r(N)},shaderData:{positionGroup:F,texDim:v,lodLevels:U,sizeFactor:G,update(k){let J=k?.lodLevels??s(U.ref.value),H=k?.sizeFactor??G.ref.value,z=l(J,H),_=Mo(N.sphereCount,4,Float32Array,F.ref.value.array),M=i(_,N.centerBuffer.ref.value,N.groupBuffer.ref.value,N.sphereCount,z),q=M?A(J,H,M,N.sphereCount):[];D.update(F,_),D.update(v,Le.set(v.ref.value,_.width,_.height)),D.update(U,q),D.update(G,H)}}};return N.shaderData.update(),N}function o(b,x,S,w){return w.sphereCount=S,D.update(w.centerBuffer,b),D.update(w.groupBuffer,x),w.shaderData.update(),w}function i(b,x,S,w,R){let{array:T}=b;if(R.length===0){for(let v=0;v<w;++v)T[v*4+0]=x[v*3+0],T[v*4+1]=x[v*3+1],T[v*4+2]=x[v*3+2],T[v*4+3]=S[v];return}let L=[0],F=0;for(let v=0,U=R.length;v<U;++v){let G=R[v];for(let N=0;N<w;++N){let k=!1;for(let J=0;J<v;++J)if(N%R[J]===0){k=!0;break}!k&&N%G===0&&(T[F*4+0]=x[N*3+0],T[F*4+1]=x[N*3+1],T[F*4+2]=x[N*3+2],T[F*4+3]=S[N],F+=1)}L.push(F*6)}return L}function a(b,x){if(b.length!==x.length)return!1;for(let S=0,w=b.length;S<w;++S)if(b[S].maxDistance!==x[S].maxDistance||b[S].minDistance!==x[S].minDistance||b[S].overlap!==x[S].overlap||b[S].stride!==x[S].stride||b[S].scaleBias!==x[S].scaleBias)return!1;return!0}function A(b,x,S,w){return b.map((R,T)=>{let L=c(R,x);return[R.minDistance,R.maxDistance,R.overlap,S[S.length-1-T],Math.pow(Math.min(w,L),1/R.scaleBias),R.stride,R.scaleBias]})}function s(b){return b.map(x=>({minDistance:x[0],maxDistance:x[1],overlap:x[2],stride:x[5],scaleBias:x[6]}))}function c(b,x){return Math.max(1,Math.round(b.stride/Math.pow(x,b.scaleBias)))}function l(b,x){return b.map(S=>c(S,x)).reverse()}E.LodLevelsPresets={performance:[{minDistance:1,maxDistance:300,overlap:0,stride:1,scaleBias:1},{minDistance:300,maxDistance:2e3,overlap:0,stride:40,scaleBias:3},{minDistance:2e3,maxDistance:6e3,overlap:0,stride:150,scaleBias:3},{minDistance:6e3,maxDistance:1e7,overlap:0,stride:300,scaleBias:2.5}],balanced:[{minDistance:1,maxDistance:500,overlap:0,stride:1,scaleBias:1},{minDistance:500,maxDistance:2e3,overlap:0,stride:15,scaleBias:3},{minDistance:2e3,maxDistance:6e3,overlap:0,stride:70,scaleBias:2.7},{minDistance:6e3,maxDistance:1e7,overlap:0,stride:200,scaleBias:2.5}],quality:[{minDistance:1,maxDistance:1e3,overlap:0,stride:1,scaleBias:1},{minDistance:1e3,maxDistance:4e3,overlap:0,stride:10,scaleBias:3},{minDistance:4e3,maxDistance:1e4,overlap:0,stride:50,scaleBias:2.7},{minDistance:1e4,maxDistance:1e7,overlap:0,stride:200,scaleBias:2.3}],ultra:[{minDistance:1,maxDistance:5e3,overlap:0,stride:1,scaleBias:1},{minDistance:5e3,maxDistance:1e4,overlap:0,stride:10,scaleBias:3},{minDistance:1e4,maxDistance:3e4,overlap:0,stride:50,scaleBias:2.5},{minDistance:3e4,maxDistance:1e7,overlap:0,stride:200,scaleBias:2}]},E.Params={...ot.Params,sizeFactor:h.Numeric(1,{min:0,max:10,step:.1}),doubleSided:h.Boolean(!1,ot.CustomQualityParamInfo),ignoreLight:h.Boolean(!1,ot.ShadingCategory),celShaded:h.Boolean(!1,ot.ShadingCategory),xrayShaded:h.Select(!1,[[!1,"Off"],[!0,"On"],["inverted","Inverted"]],ot.ShadingCategory),transparentBackfaces:h.Select("off",h.arrayToOptions(["off","on","opaque"]),ot.ShadingCategory),solidInterior:h.Boolean(!0,ot.ShadingCategory),clipPrimitive:h.Boolean(!1,{...ot.ShadingCategory,description:"Clip whole sphere instead of cutting it."}),approximate:h.Boolean(!1,{...ot.ShadingCategory,description:"Faster rendering, but has artifacts."}),alphaThickness:h.Numeric(0,{min:0,max:20,step:1},{...ot.ShadingCategory,description:"If not zero, adjusts alpha for radius."}),bumpFrequency:h.Numeric(0,{min:0,max:10,step:.1},ot.ShadingCategory),bumpAmplitude:h.Numeric(1,{min:0,max:5,step:.1},ot.ShadingCategory),interior:lp(),animation:Hu(),lodLevels:h.ObjectList({minDistance:h.Numeric(0),maxDistance:h.Numeric(0),overlap:h.Numeric(0),stride:h.Numeric(0),scaleBias:h.Numeric(3,{min:.1,max:10,step:.1})},b=>`${b.stride}`,{...ot.CullingLodCategory,defaultValue:[],presets:Object.entries(E.LodLevelsPresets).map(([b,x])=>[x,b])})},E.Utils={Params:E.Params,createEmpty:t,createValues:d,createValuesSimple:f,updateValues:I,updateBoundingSphere:C,createRenderableState:y,updateRenderableState:Q,createPositionIterator:p};function p(b,x){let S=b.sphereCount,w=x.instanceCount.ref.value,R=is(),T=R.position,L=b.centerBuffer.ref.value,F=x.aTransform.ref.value;return rn(S,w,1,(U,G)=>(G<0?B.fromArray(T,L,U*3):B.transformMat4Offset(T,L,F,0,U*3,G*16),R))}function d(b,x,S,w,R){let{instanceCount:T,groupCount:L}=S,F=p(b,x),v=cA(S,F,w.color),U=hl(S,F,w.size),G=vi(R.instanceGranularity,L,T)?ei(T,"instance"):ei(T*L,"groupInstance"),N=dl(),k=pl(),J=Il(),H=Bl(),z=fl(),_=Cl(),M={drawCount:b.sphereCount*2*3,vertexCount:b.sphereCount*6,groupCount:L,instanceCount:T},q=b.boundingSphere.radius?fQ(U)*R.sizeFactor:0,ne=we.expand(we(),b.boundingSphere,q),oe=Ta(ne,x.aTransform.ref.value,T,0);return b.shaderData.update({lodLevels:R.lodLevels,sizeFactor:R.sizeFactor}),{dGeometryType:D.create("spheres"),uTexDim:b.shaderData.texDim,tPositionGroup:b.shaderData.positionGroup,boundingSphere:D.create(oe),invariantBoundingSphere:D.create(ne),uInvariantBoundingSphere:D.create(lr.ofSphere(ne)),...v,...U,...G,...N,...k,...J,...H,...z,..._,...x,padding:D.create(q),...ot.createValues(R,M),uSizeFactor:b.shaderData.sizeFactor,uDoubleSided:D.create(R.doubleSided),dIgnoreLight:D.create(R.ignoreLight),dCelShaded:D.create(R.celShaded),dXrayShaded:D.create(R.xrayShaded==="inverted"?"inverted":R.xrayShaded===!0?"on":"off"),dTransparentBackfaces:D.create(R.transparentBackfaces),dSolidInterior:D.create(R.solidInterior),dClipPrimitive:D.create(R.clipPrimitive),dApproximate:D.create(R.approximate),uAlphaThickness:D.create(R.alphaThickness),uBumpFrequency:D.create(R.bumpFrequency),uBumpAmplitude:D.create(R.bumpAmplitude),lodLevels:b.shaderData.lodLevels,centerBuffer:b.centerBuffer,groupBuffer:b.groupBuffer,...mQ(R.interior),...up(R.animation)}}function f(b,x,S,w,R){let T=ot.createSimple(S,w,R),L={...h.getDefaultValues(E.Params),...x};return d(b,T.transform,T.locationIterator,T.theme,L)}function I(b,x){let S=b.uSizeFactor.ref.value;ot.updateValues(b,x),D.updateIfChanged(b.uSizeFactor,x.sizeFactor),D.updateIfChanged(b.uDoubleSided,x.doubleSided),D.updateIfChanged(b.dIgnoreLight,x.ignoreLight),D.updateIfChanged(b.dCelShaded,x.celShaded),D.updateIfChanged(b.dXrayShaded,x.xrayShaded==="inverted"?"inverted":x.xrayShaded===!0?"on":"off"),D.updateIfChanged(b.dTransparentBackfaces,x.transparentBackfaces),D.updateIfChanged(b.dSolidInterior,x.solidInterior),D.updateIfChanged(b.dClipPrimitive,x.clipPrimitive),D.updateIfChanged(b.dApproximate,x.approximate),D.updateIfChanged(b.uAlphaThickness,x.alphaThickness),D.updateIfChanged(b.uBumpFrequency,x.bumpFrequency),D.updateIfChanged(b.uBumpAmplitude,x.bumpAmplitude),dQ(b,x.interior),gp(b,x.animation);let w=s(b.lodLevels.ref.value);if(!a(x.lodLevels,w)||x.sizeFactor!==S){let R=b.uVertexCount.ref.value/6,T=l(x.lodLevels,x.sizeFactor),L=i(b.tPositionGroup.ref.value,b.centerBuffer.ref.value,b.groupBuffer.ref.value,R,T),F=L?A(x.lodLevels,x.sizeFactor,L,R):[];D.update(b.tPositionGroup,b.tPositionGroup.ref.value),D.update(b.lodLevels,F)}}function C(b,x){let S=x.boundingSphere.radius?fQ(b)*b.uSizeFactor.ref.value:0,w=we.expand(we(),x.boundingSphere,S),R=Ta(w,b.aTransform.ref.value,b.instanceCount.ref.value,0);we.equals(R,b.boundingSphere.ref.value)||D.update(b.boundingSphere,R),we.equals(w,b.invariantBoundingSphere.ref.value)||(D.update(b.invariantBoundingSphere,w),D.update(b.uInvariantBoundingSphere,lr.fromSphere(b.uInvariantBoundingSphere.ref.value,w))),D.update(b.padding,S)}function y(b){let x=ot.createRenderableState(b);return Q(x,b),x}function Q(b,x){ot.updateRenderableState(b,x),b.opaque=b.opaque&&!x.xrayShaded,b.writeDepth=b.opaque}})(rA||={});var Fs;(m=>{class e{constructor(){this.index=0;this.textures=[]}get(){return this.textures[this.index]}set(d,f,I){this.textures[this.index]=Object.assign(this.textures[this.index]||{},{vertex:d,group:f,normal:I}),this.index=(this.index+1)%2}destroy(){for(let d of this.textures)d.vertex.destroy(),d.group.destroy(),d.normal.destroy()}}m.DoubleBuffer=e;function t(p,d,f,I,C,y,Q){let E=f.getWidth(),b=f.getHeight();return Q?(Q.vertexCount=p,Q.groupCount=d,D.update(Q.geoTextureDim,Le.set(Q.geoTextureDim.ref.value,E,b)),D.update(Q.vertexTexture,f),D.update(Q.groupTexture,I),D.update(Q.normalTexture,C),Q.doubleBuffer.set(f,I,C),we.copy(Q.boundingSphere,y),Q):{kind:"texture-mesh",vertexCount:p,groupCount:d,geoTextureDim:D.create(Le.create(E,b)),vertexTexture:D.create(f),groupTexture:D.create(I),normalTexture:D.create(C),varyingGroup:D.create(!1),doubleBuffer:new e,boundingSphere:we.clone(y),meta:{}}}m.create=t;function r(p){let d=p?p.vertexTexture.ref.value:Ti(),f=p?p.groupTexture.ref.value:Ti(),I=p?p.normalTexture.ref.value:Ti(),C=p?p.boundingSphere:we();return t(0,0,d,f,I,C,p)}m.createEmpty=r,m.Params={...ot.Params,doubleSided:h.Boolean(!1,ot.CustomQualityParamInfo),flipSided:h.Boolean(!1,ot.ShadingCategory),flatShaded:h.Boolean(!1,ot.ShadingCategory),ignoreLight:h.Boolean(!1,ot.ShadingCategory),celShaded:h.Boolean(!1,ot.ShadingCategory),xrayShaded:h.Select(!1,[[!1,"Off"],[!0,"On"],["inverted","Inverted"]],ot.ShadingCategory),transparentBackfaces:h.Select("off",h.arrayToOptions(["off","on","opaque"]),ot.ShadingCategory),bumpFrequency:h.Numeric(0,{min:0,max:10,step:.1},ot.ShadingCategory),bumpAmplitude:h.Numeric(1,{min:0,max:5,step:.1},ot.ShadingCategory),interior:lp(),animation:Hu()},m.Utils={Params:m.Params,createEmpty:r,createValues:A,createValuesSimple:s,updateValues:c,updateBoundingSphere:l,createRenderableState:u,updateRenderableState:g,createPositionIterator:a};let i="texture-mesh";function a(p,d){let f=p.meta.webgl;if(!f)return rn(1,1,1,()=>vA);f.namedFramebuffers[i]||(f.namedFramebuffers[i]=f.resources.framebuffer());let I=f.namedFramebuffers[i],[C,y]=p.geoTextureDim.ref.value,Q,E=()=>{if(!Q){let F=new Float32Array(C*y*4);I.bind(),p.vertexTexture.ref.value.attachFramebuffer(I,0),f.readPixels(0,0,C,y,F);let v=new Float32Array(C*y*4);I.bind(),p.normalTexture.ref.value.attachFramebuffer(I,0),f.readPixels(0,0,C,y,v),Q={vertices:F,normals:v}}return Q},b=p.vertexCount,x=d.instanceCount.ref.value,S=is(),w=S.position,R=S.normal,T=d.aTransform.ref.value;return rn(b,x,1,(F,v)=>{let{vertices:U,normals:G}=E();return v<0?(B.fromArray(w,U,F*4),B.fromArray(R,G,F*4)):(B.transformMat4Offset(w,U,T,0,F*4,v*16),B.transformDirectionOffset(R,G,T,0,F*4,v*16)),S})}function A(p,d,f,I,C){let{instanceCount:y,groupCount:Q}=f,E=m.Utils.createPositionIterator(p,d),b=cA(f,E,I.color),x=vi(C.instanceGranularity,Q,y)?ei(y,"instance"):ei(y*Q,"groupInstance"),S=dl(),w=pl(),R=Il(),T=Bl(),L=fl(),F=Cl(),v={drawCount:p.vertexCount,vertexCount:p.vertexCount,groupCount:Q,instanceCount:y},U=we.clone(p.boundingSphere),G=Ta(U,d.aTransform.ref.value,y,0);return{dGeometryType:D.create("textureMesh"),uGeoTexDim:p.geoTextureDim,tPosition:p.vertexTexture,tGroup:p.groupTexture,tNormal:p.normalTexture,dVaryingGroup:p.varyingGroup,boundingSphere:D.create(G),invariantBoundingSphere:D.create(U),uInvariantBoundingSphere:D.create(lr.ofSphere(U)),...b,...x,...S,...w,...R,...T,...L,...F,...d,...ot.createValues(C,v),uDoubleSided:D.create(C.doubleSided),dFlatShaded:D.create(C.flatShaded),dFlipSided:D.create(C.flipSided),dIgnoreLight:D.create(C.ignoreLight),dCelShaded:D.create(C.celShaded),dXrayShaded:D.create(C.xrayShaded==="inverted"?"inverted":C.xrayShaded===!0?"on":"off"),dTransparentBackfaces:D.create(C.transparentBackfaces),uBumpFrequency:D.create(C.bumpFrequency),uBumpAmplitude:D.create(C.bumpAmplitude),meta:D.create(p.meta),...mQ(C.interior),...up(C.animation)}}function s(p,d,f,I,C){let y=ot.createSimple(f,I,C),Q={...h.getDefaultValues(m.Params),...d};return A(p,y.transform,y.locationIterator,y.theme,Q)}function c(p,d){ot.updateValues(p,d),D.updateIfChanged(p.uDoubleSided,d.doubleSided),D.updateIfChanged(p.dFlatShaded,d.flatShaded),D.updateIfChanged(p.dFlipSided,d.flipSided),D.updateIfChanged(p.dIgnoreLight,d.ignoreLight),D.updateIfChanged(p.dCelShaded,d.celShaded),D.updateIfChanged(p.dXrayShaded,d.xrayShaded==="inverted"?"inverted":d.xrayShaded===!0?"on":"off"),D.updateIfChanged(p.dTransparentBackfaces,d.transparentBackfaces),D.updateIfChanged(p.uBumpFrequency,d.bumpFrequency),D.updateIfChanged(p.uBumpAmplitude,d.bumpAmplitude),dQ(p,d.interior),gp(p,d.animation)}function l(p,d){let f=we.clone(d.boundingSphere),I=Ta(f,p.aTransform.ref.value,p.instanceCount.ref.value,0);we.equals(I,p.boundingSphere.ref.value)||D.update(p.boundingSphere,I),we.equals(f,p.invariantBoundingSphere.ref.value)||(D.update(p.invariantBoundingSphere,f),D.update(p.uInvariantBoundingSphere,lr.fromSphere(p.uInvariantBoundingSphere.ref.value,f)))}function u(p){let d=ot.createRenderableState(p);return g(d,p),d}function g(p,d){ot.updateRenderableState(p,d),p.opaque=p.opaque&&!d.xrayShaded,p.writeDepth=p.opaque}})(Fs||={});function the(e,t){let r={},n={},o={},i={},a={},A={},s={};return Object.keys(e).forEach(c=>{let l=e[c];l.type==="attribute"&&(r[c]=t[c]),l.type==="define"&&(n[c]=t[c]),l.type==="texture"&&t[c]!==void 0&&(l.variant==="material"?i[c]=t[c]:o[c]=t[c]),l.type==="uniform"&&t[c]!==void 0&&(l.variant==="material"?A[c]=t[c]:l.variant==="buffered"?s[c]=t[c]:a[c]=t[c])}),{attributeValues:r,defineValues:n,textureValues:o,materialTextureValues:i,uniformValues:a,materialUniformValues:A,bufferedUniformValues:s}}function rhe(e){let t={};return Object.keys(e).forEach(r=>{t[r]=e[r].ref.version}),t}function Bo(e,t,r){return{type:"attribute",kind:e,itemSize:t,divisor:r}}function Re(e,t){return{type:"uniform",kind:e,variant:t}}function Ft(e,t,r,n,o){return{type:"texture",kind:e,format:t,dataType:r,filter:n,variant:o}}function pp(e){return{type:"elements",kind:e}}function bt(e,t){return{type:"define",kind:e,options:t}}function go(e){return{type:"value",kind:e}}var Ql={uDrawId:Re("i"),uModel:Re("m4"),uView:Re("m4"),uInvView:Re("m4"),uModelView:Re("m4"),uInvModelView:Re("m4"),uProjection:Re("m4"),uInvProjection:Re("m4"),uModelViewProjection:Re("m4"),uInvModelViewProjection:Re("m4"),uHasHeadRotation:Re("b"),uInvHeadRotation:Re("m4"),uIsAsymmetricProjection:Re("b"),uHasEyeCamera:Re("b"),uModelViewEye:Re("m4"),uInvModelViewEye:Re("m4"),uIsOrtho:Re("f"),uPixelRatio:Re("f"),uViewport:Re("v4"),uViewOffset:Re("v2"),uModelScale:Re("f"),uDrawingBufferSize:Re("v2"),uCameraPosition:Re("v3"),uCameraDir:Re("v3"),uCameraPlane:Re("v4"),uNear:Re("f"),uFar:Re("f"),uFog:Re("b"),uFogNear:Re("f"),uFogFar:Re("f"),uFogColor:Re("v3"),uTransparentBackground:Re("b"),uLightDirection:Re("v3[]"),uLightColor:Re("v3[]"),uAmbientColor:Re("v3"),uPickingAlphaThreshold:Re("f"),uHighlightColor:Re("v3"),uSelectColor:Re("v3"),uDimColor:Re("v3"),uHighlightStrength:Re("f"),uSelectStrength:Re("f"),uDimStrength:Re("f"),uMarkerPriority:Re("i"),uMarkerAverage:Re("f"),uXrayEdgeFalloff:Re("f"),uCelSteps:Re("f"),uExposure:Re("f"),uRenderMask:Re("i"),uMarkingDepthTest:Re("b"),uMarkingType:Re("i"),uPickType:Re("i"),uTime:Re("f"),uEnableAnimation:Re("b")},El={tDepth:Ft("texture","depth","ushort","nearest"),tDpoitDepth:Ft("texture","rg","float","nearest"),tDpoitFrontColor:Ft("texture","rgba","float","nearest"),tDpoitBackColor:Ft("texture","rgba","float","nearest")},bl={dLightCount:bt("number"),dColorMarker:bt("boolean")},xl={uObjectId:Re("i")},Oet={uColor:Re("v3","material"),uColorTexDim:Re("v2"),uColorGridDim:Re("v3"),uColorGridTransform:Re("v4"),uPaletteDomain:Re("v2"),uPaletteDefault:Re("v3"),tColor:Ft("image-uint8","rgb","ubyte","nearest"),tPalette:Ft("image-uint8","rgb","ubyte","nearest"),tColorGrid:Ft("texture","rgb","ubyte","linear"),dColorType:bt("string",["uniform","attribute","instance","group","groupInstance","vertex","vertexInstance","volume","volumeInstance","direct"]),dUsePalette:bt("boolean")},pI={uSize:Re("f","material"),uSizeTexDim:Re("v2"),tSize:Ft("image-uint8","rgb","ubyte","nearest"),dSizeType:bt("string",["uniform","attribute","instance","group","groupInstance"]),uSizeFactor:Re("f","material")},Jet={uMarker:Re("f"),uMarkerTexDim:Re("v2"),tMarker:Ft("image-uint8","alpha","ubyte","nearest"),markerAverage:go("number"),markerStatus:go("number"),dMarkerType:bt("string",["instance","groupInstance"])},zet={uOverpaintTexDim:Re("v2"),tOverpaint:Ft("image-uint8","rgba","ubyte","nearest"),dOverpaint:bt("boolean"),uOverpaintGridDim:Re("v3"),uOverpaintGridTransform:Re("v4"),tOverpaintGrid:Ft("texture","rgba","ubyte","linear"),dOverpaintType:bt("string",["instance","groupInstance","volumeInstance"]),uOverpaintStrength:Re("f","material")},Ket={uTransparencyTexDim:Re("v2"),tTransparency:Ft("image-uint8","alpha","ubyte","nearest"),dTransparency:bt("boolean"),transparencyAverage:go("number"),transparencyMin:go("number"),uTransparencyGridDim:Re("v3"),uTransparencyGridTransform:Re("v4"),tTransparencyGrid:Ft("texture","alpha","ubyte","linear"),dTransparencyType:bt("string",["instance","groupInstance","volumeInstance"]),uTransparencyStrength:Re("f","material")},jet={uEmissiveTexDim:Re("v2"),tEmissive:Ft("image-uint8","alpha","ubyte","nearest"),dEmissive:bt("boolean"),emissiveAverage:go("number"),uEmissiveGridDim:Re("v3"),uEmissiveGridTransform:Re("v4"),tEmissiveGrid:Ft("texture","alpha","ubyte","linear"),dEmissiveType:bt("string",["instance","groupInstance","volumeInstance"]),uEmissiveStrength:Re("f","material")},Wet={uSubstanceTexDim:Re("v2"),tSubstance:Ft("image-uint8","rgba","ubyte","nearest"),dSubstance:bt("boolean"),uSubstanceGridDim:Re("v3"),uSubstanceGridTransform:Re("v4"),tSubstanceGrid:Ft("texture","rgba","ubyte","linear"),dSubstanceType:bt("string",["instance","groupInstance","volumeInstance"]),uSubstanceStrength:Re("f","material")},Xet={uClippingTexDim:Re("v2"),tClipping:Ft("image-uint8","alpha","ubyte","nearest"),dClipping:bt("boolean"),dClippingType:bt("string",["instance","groupInstance"])},Zet={uWiggleTexDim:Re("v2"),tWiggle:Ft("image-uint8","alpha","ubyte","nearest"),dWiggle:bt("boolean"),wiggleAverage:go("number"),dWiggleType:bt("string",["instance","groupInstance"]),uWiggleStrength:Re("f","material")},Sl={dGeometryType:bt("string",["cylinders","directVolume","image","lines","mesh","points","spheres","text","textureMesh"]),...Oet,...Jet,...zet,...Ket,...jet,...Wet,...Xet,...Zet,dClipObjectCount:bt("number"),dClipVariant:bt("string",["instance","pixel"]),uClipObjectType:Re("i[]","material"),uClipObjectInvert:Re("b[]","material"),uClipObjectPosition:Re("v3[]","material"),uClipObjectRotation:Re("v4[]","material"),uClipObjectScale:Re("v3[]","material"),uClipObjectTransform:Re("m4[]","material"),aInstance:Bo("float32",1,1),aTransform:Bo("float32",16,1),uAlpha:Re("f","material"),uMetalness:Re("f","material"),uRoughness:Re("f","material"),uBumpiness:Re("f","material"),uEmissive:Re("f","material"),uDensity:Re("f","material"),uVertexCount:Re("i"),uInstanceCount:Re("i"),uGroupCount:Re("i"),uInvariantBoundingSphere:Re("v4"),uLod:Re("v4"),drawCount:go("number"),instanceCount:go("number"),alpha:go("number"),matrix:go("m4"),transform:go("float32"),extraTransform:go("float32"),hasExtraTransform:go("boolean"),hasReflection:go("boolean"),instanceGranularity:go("boolean"),boundingSphere:go("sphere"),invariantBoundingSphere:go("sphere"),instanceGrid:go("instanceGrid")},CQ={uInteriorColor:Re("v4"),uInteriorSubstance:Re("v4")},fp={uWiggleSpeed:Re("f","material"),uWiggleAmplitude:Re("f","material"),uWiggleFrequency:Re("f","material"),uWiggleMode:Re("i","material"),uTumbleSpeed:Re("f","material"),uTumbleAmplitude:Re("f","material"),uTumbleFrequency:Re("f","material")};var nhe=`
|
|
precision highp float;
|
|
precision highp sampler2D;
|
|
|
|
uniform sampler2D tColor;
|
|
uniform vec2 uTexSize;
|
|
|
|
void main() {
|
|
vec2 coords = gl_FragCoord.xy / uTexSize;
|
|
gl_FragColor = texture2D(tColor, coords);
|
|
}
|
|
`;var mo=`
|
|
precision highp float;
|
|
|
|
attribute vec2 aPosition;
|
|
uniform vec2 uQuadScale;
|
|
|
|
void main(void) {
|
|
vec2 position = aPosition * uQuadScale - vec2(1.0, 1.0) + uQuadScale;
|
|
gl_Position = vec4(position, 0.0, 1.0);
|
|
}
|
|
`;var qet=3e7,$et=ua();function ett(e,t){let{gl:r}=e;switch(t){case"points":return r.POINTS;case"lines":return r.LINES;case"line-strip":return r.LINE_STRIP;case"line-loop":return r.LINE_LOOP;case"triangles":return r.TRIANGLES;case"triangle-strip":return r.TRIANGLE_STRIP;case"triangle-fan":return r.TRIANGLE_FAN}}var ttt={color:"",pick:"",depth:"",marking:"",emissive:"",tracing:""},rtt=Object.keys(ttt),ntt={compute:""},ott=Object.keys(ntt);function k9(e,t,r,n,o){return r={...r,dRenderVariant:D.create(t)},o.dRenderVariant===void 0&&Object.defineProperty(o,"dRenderVariant",{value:bt("string")}),e.resources.program(r,n,o)}function itt(){return{attributes:!1,defines:!1,elements:!1,textures:!1}}function att(e){e.attributes=!1,e.defines=!1,e.elements=!1,e.textures=!1}function H9(e,t){if(e==="color")switch(t){case"blended":return"colorBlended";case"wboit":return"colorWboit";case"dpoit":return"colorDpoit"}return e}function Dl(e,t,r,n,o,i,a){return ohe(e,t,r,n,o,i,rtt,a)}function Un(e,t,r,n,o,i=-1){return ohe(e,t,r,n,o,i,ott,void 0)}function ohe(e,t,r,n,o,i,a,A){let s=$et(),{stats:c,state:l,resources:u}=e,{instancedArrays:g,vertexArrayObject:m,multiDrawInstancedBaseVertexBaseInstance:p,drawInstancedBaseVertexBaseInstance:d}=e.extensions;if(a=a.filter(ae=>ae==="tracing"?!!e.extensions.drawBuffers:!0),o.uVertexCount&&!e.extensions.noNonInstancedActiveAttribs){let ae=o.uVertexCount.ref.value;o.aVertex=D.create(QA(new Float32Array(ae))),n.aVertex=Bo("float32",1,0)}let{attributeValues:f,defineValues:I,textureValues:C,materialTextureValues:y,uniformValues:Q,materialUniformValues:E,bufferedUniformValues:b}=the(n,o),x=Object.entries(Q),S=Object.entries(E),w=Object.entries(b),R=Object.entries(HBe(b)),T=Object.entries(I),L=rhe(o),F=ett(e,t),v={};for(let ae of a)v[ae]=k9(e,H9(ae,A),I,r,n);let U=p9(e,n,C),G=p9(e,n,y),N=JBe(e,n,f),k=[];for(let ae=0,me=N.length;ae<me;++ae){let Se=N[ae];Se[1].divisor===1&&k.push(Se)}let J,H=o.elements;H&&H.ref.value&&(J=u.elements(H.ref.value));let z={};for(let ae of a)z[ae]=m?u.vertexArray(v[ae],N,J):null;let _=o.drawCount.ref.value,M=o.instanceCount.ref.value;c.drawCount+=_,c.instanceCount+=M,c.instancedDrawCount+=M*_;let q=itt(),ne=!1,oe=-1;return{id:s,materialId:i,getByteCount(){let ae=0;for(let me=0,Se=N.length;me<Se;++me)ae+=N[me][1].getByteCount();J&&(ae+=J.getByteCount());for(let me=0,Se=U.length;me<Se;++me)ae+=U[me][1].getByteCount();for(let me=0,Se=G.length;me<Se;++me)ae+=G[me][1].getByteCount();return ae},getProgram:ae=>v[ae],setTransparency:ae=>{if(ae!==A){A=ae;for(let me of a)v[me].destroy(),v[me]=k9(e,H9(me,A),I,r,n)}},render:(ae,me,Se)=>{if(_===0||M===0)return;let ee=v[ae];if(ee.id===oe&&l.currentRenderItemId===s)ee.setUniforms(x),ee.bindTextures(U,me);else{let O=z[ae];(ee.id!==l.currentProgramId||ee.id!==oe||i===-1||i!==l.currentMaterialId)&&(ee.id!==l.currentProgramId&&ee.use(),ee.setUniforms(S),ee.bindTextures(G,me+U.length),l.currentMaterialId=i,oe=ee.id),ee.setUniforms(x),ee.setUniforms(R),ee.bindTextures(U,me),O?(O.bind(),J&&J.bind()):(J&&J.bind(),ee.bindAttributes(N)),l.currentRenderItemId=s}if(ir&&e.checkFramebufferStatus(`Framebuffer error rendering item id ${s}`),Se){for(let O of Se)if(O.count!==0){if(ee.setUniforms(O.uniforms),p)J?p.multiDrawElementsInstancedBaseVertexBaseInstance(F,O.counts,0,J._dataType,O.offsets,0,O.instanceCounts,0,O.baseVertices,0,O.baseInstances,0,O.count):p.multiDrawArraysInstancedBaseInstance(F,O.firsts,0,O.counts,0,O.instanceCounts,0,O.baseInstances,0,O.count);else if(d)if(J)for(let X=0;X<O.count;++X)O.counts[X]>0&&(ee.uniform("uDrawId",X),d.drawElementsInstancedBaseVertexBaseInstance(F,O.counts[X],J._dataType,O.offsets[X],O.instanceCounts[X],O.baseVertices[X],O.baseInstances[X]));else for(let X=0;X<O.count;++X)O.counts[X]>0&&(ee.uniform("uDrawId",X),d.drawArraysInstancedBaseInstance(F,O.firsts[X],O.counts[X],O.instanceCounts[X],O.baseInstances[X]));else if(J)for(let X=0;X<O.count;++X)O.counts[X]>0&&(ee.uniform("uDrawId",X),ee.offsetAttributes(k,O.baseInstances[X]),g.drawElementsInstanced(F,O.counts[X],J._dataType,O.offsets[X],O.instanceCounts[X]));else for(let X=0;X<O.count;++X)O.counts[X]>0&&(ee.uniform("uDrawId",X),ee.offsetAttributes(k,O.baseInstances[X]),g.drawArraysInstanced(F,0,O.counts[X],O.instanceCounts[X]));if(at){p?c.calls.multiDrawInstancedBase+=1:d?c.calls.drawInstancedBase+=O.count:c.calls.drawInstanced+=O.count;for(let X=0;X<O.count;++X)c.calls.counts+=O.instanceCounts[X]}}}else{let O=0;for(;;){let X=Math.min(_-O,qet);if(J?g.drawElementsInstanced(F,X,J._dataType,O*J._bpe,M):g.drawArraysInstanced(F,O,X,M),O+=X,O>=_)break}at&&(c.calls.drawInstanced+=1,c.calls.counts+=M)}ir&&e.checkError(`Draw error rendering item id ${s}`)},update:()=>{if(att(q),o.aVertex){let ae=o.uVertexCount.ref.value;o.aVertex.ref.value.length<ae&&D.update(o.aVertex,QA(new Float32Array(ae)))}for(let ae=0,me=T.length;ae<me;++ae){let[Se,ee]=T[ae];ee.ref.version!==L[Se]&&(q.defines=!0,L[Se]=ee.ref.version)}if(q.defines)for(let ae of a)v[ae].destroy(),v[ae]=k9(e,H9(ae,A),I,r,n);o.drawCount.ref.version!==L.drawCount&&(c.drawCount+=o.drawCount.ref.value-_,c.instancedDrawCount+=M*o.drawCount.ref.value-M*_,_=o.drawCount.ref.value,L.drawCount=o.drawCount.ref.version),o.instanceCount.ref.version!==L.instanceCount&&(c.instanceCount+=o.instanceCount.ref.value-M,c.instancedDrawCount+=o.instanceCount.ref.value*_-M*_,M=o.instanceCount.ref.value,L.instanceCount=o.instanceCount.ref.version);for(let ae=0,me=N.length;ae<me;++ae){let[Se,ee]=N[ae],O=f[Se];if(O.ref.version!==L[Se]){if(ee.length>=O.ref.value.length)ee.updateSubData(O.ref.value,0,ee.length);else{ee.destroy();let{itemSize:X,divisor:Ce}=n[Se];N[ae][1]=u.attribute(O.ref.value,X,Ce),q.attributes=!0}L[Se]=O.ref.version}}if(J&&o.elements.ref.version!==L.elements&&(J.length>=o.elements.ref.value.length?J.updateSubData(o.elements.ref.value,0,J.length):(J.destroy(),J=u.elements(o.elements.ref.value),q.elements=!0),L.elements=o.elements.ref.version),q.attributes||q.defines||q.elements)for(let ae of a){let me=z[ae];me&&me.destroy(),z[ae]=m?u.vertexArray(v[ae],N,J):null}for(let ae=0,me=U.length;ae<me;++ae){let[Se,ee]=U[ae],O=C[Se];O.ref.version!==L[Se]&&(n[Se].kind!=="texture"?(ee.load(O.ref.value),q.textures=!0):U[ae][1]=O.ref.value,L[Se]=O.ref.version)}for(let ae=0,me=G.length;ae<me;++ae){let[Se,ee]=G[ae],O=y[Se];O.ref.version!==L[Se]&&(n[Se].kind!=="texture"?(ee.load(O.ref.value),q.textures=!0):G[ae][1]=O.ref.value,L[Se]=O.ref.version)}for(let ae=0,me=w.length;ae<me;++ae){let[Se,ee]=w[ae];ee.ref.version!==L[Se]&&(D.update(R[ae][1],ii(ee.ref.value)),L[Se]=ee.ref.version)}},destroy:()=>{if(!ne){for(let ae of a){v[ae].destroy();let me=z[ae];me&&me.destroy()}U.forEach(([ae,me])=>{n[ae].kind!=="texture"&&me.destroy()}),G.forEach(([ae,me])=>{n[ae].kind!=="texture"&&me.destroy()}),N.forEach(([ae,me])=>me.destroy()),J&&J.destroy(),c.drawCount-=_,c.instanceCount-=M,c.instancedDrawCount-=M*_,ne=!0}}}}function ai(){return ai.create(B.create(1,0,0),0)}(d=>{function e(f,I){return{normal:f,constant:I}}d.create=e;function t(f,I){return B.copy(f.normal,I.normal),f.constant=I.constant,f}d.copy=t;function r(f){return t(d(),f)}d.clone=r;function n(f,I){let C=1/B.magnitude(I.normal);return B.scale(f.normal,I.normal,C),f.constant=I.constant*C,f}d.normalize=n;function o(f,I){return B.negate(f.normal,I.normal),f.constant=-I.constant,f}d.negate=o;function i(f,I,C){return B.toArray(f.normal,I,C),I[C+3]=f.constant,I}d.toArray=i;function a(f,I,C){return B.fromArray(f.normal,I,C),f.constant=I[C+3],f}d.fromArray=a;function A(f,I,C){return B.copy(f.normal,I),f.constant=-B.dot(f.normal,C),f}d.fromNormalAndCoplanarPoint=A;function s(f,I,C,y){let Q=B.triangleNormal(B(),I,C,y);return A(f,Q,I),f}d.fromCoplanarPoints=s;let c=B();function l(f,I,C,y,Q){B.set(c,I,C,y);let E=1/B.magnitude(c);return B.scale(f.normal,c,E),f.constant=Q*E,f}d.setUnnormalized=l;function u(f,I){return B.dot(f.normal,I)+f.constant}d.distanceToPoint=u;function g(f,I){return u(f,I.center)-I.radius}d.distanceToSphere3D=g;function m(f,I,C){return B.scaleAndAdd(f,C,I.normal,-u(I,C))}d.projectPoint=m;function p(f,I,C){let y=B.dot(I.normal,C.direction);if(y===0)return!1;let Q=-(B.dot(I.normal,C.origin)+I.constant)/y;return Q<0?!1:(B.scaleAndAdd(f,C.origin,C.direction,Q),!0)}d.intersectRay3D=p})(ai||={});function fI(){return fI.create(ai(),ai(),ai(),ai(),ai(),ai())}(c=>{let e;(f=>(f[f.Right=0]="Right",f[f.Left=1]="Left",f[f.Bottom=2]="Bottom",f[f.Top=3]="Top",f[f.Far=4]="Far",f[f.Near=5]="Near"))(e=c.PlaneIndex||={});function t(l,u,g,m,p,d){return[l,u,g,m,p,d]}c.create=t;function r(l,u){for(let g=0;g<6;++g)ai.copy(l[g],u[g]);return l}c.copy=r;function n(l){return r(c(),l)}c.clone=n;function o(l,u){let g=u[0],m=u[1],p=u[2],d=u[3],f=u[4],I=u[5],C=u[6],y=u[7],Q=u[8],E=u[9],b=u[10],x=u[11],S=u[12],w=u[13],R=u[14],T=u[15];return ai.setUnnormalized(l[0],d-g,y-f,x-Q,T-S),ai.setUnnormalized(l[1],d+g,y+f,x+Q,T+S),ai.setUnnormalized(l[2],d+m,y+I,x+E,T+w),ai.setUnnormalized(l[3],d-m,y-I,x-E,T-w),ai.setUnnormalized(l[4],d-p,y-C,x-b,T-R),ai.setUnnormalized(l[5],d+p,y+C,x+b,T+R),l}c.fromProjectionMatrix=o;function i(l,u){let g=u.center,m=-u.radius;for(let p=0;p<6;++p)if(ai.distanceToPoint(l[p],g)<m)return!1;return!0}c.intersectsSphere3D=i;let a=B();function A(l,u){for(let g=0;g<6;++g){let m=l[g];if(a[0]=m.normal[0]>0?u.max[0]:u.min[0],a[1]=m.normal[1]>0?u.max[1]:u.min[1],a[2]=m.normal[2]>0?u.max[2]:u.min[2],ai.distanceToPoint(m,a)<0)return!1}return!0}c.intersectsBox3D=A;function s(l,u){for(let g=0;g<6;++g)if(ai.distanceToPoint(l[g],u)<0)return!1;return!0}c.containsPoint=s})(fI||={});var gM=ai.distanceToPoint,mM=fI.intersectsSphere3D,dM=we.fromArray,ihe=ua();function V9(e,t){return t&&t.instanceCounts.length>=e?t:{firsts:new Int32Array(e),counts:new Int32Array(e),offsets:new Int32Array(e),instanceCounts:new Int32Array(e),baseVertices:new Int32Array(e),baseInstances:new Uint32Array(e),count:0,uniforms:[]}}function vl(e,t,r){let n=ihe(),o=V9(0),i=[],a=!1,A=-1,s=we(),c=()=>{let l=t.lodLevels?.ref.value;if(l&&l.length>0){let{cellCount:u}=t.instanceGrid.ref.value;i.length=l.length;for(let g=0,m=l.length;g<m;++g)i[g]=V9(u,i[g]),i[g].count=0;if(t.lodLevels.ref.version!==A){for(let g=0,m=l.length;g<m;++g)i[g].uniforms.length!==1&&(i[g].uniforms.length=1,i[g].uniforms[0]=["uLod",D.create(lr())]),D.update(i[g].uniforms[0][1],lr.set(i[g].uniforms[0][1].ref.value,l[g][0],l[g][1],l[g][2],l[g][4]));A=t.lodLevels.ref.version}}};return c(),{id:n,materialId:e.materialId,values:t,state:r,cull:(l,u,g,m)=>{if(a=!1,t.drawCount.ref.value===0||t.instanceCount.ref.value===0||t.instanceGrid.ref.value.cellSize<=1)return;let{cellOffsets:p,cellSpheres:d,cellCount:f,batchOffsets:I,batchSpheres:C,batchCount:y,batchCell:Q,batchSize:E}=t.instanceGrid.ref.value,[b,x]=t.uLod.ref.value,S=b!==0||x!==0,w=2*E,R=t.lodLevels?.ref.value;if(R&&R.length>0){if(t.lodLevels?.ref.version!==A)c();else for(let T=0,L=R.length;T<L;++T)i[T].count=0;for(let T=0;T<y;++T){let L=I[T],F=I[T+1];if(F-L===0)continue;dM(s,C,T*4);let U=gM(l,s.center);if(S&&(U+s.radius<b||U-s.radius>x)){at&&(m.culled.lod+=p[Q[F-1]+1]-p[Q[L]]);continue}if(!mM(u,s)){at&&(m.culled.frustum+=p[Q[F-1]+1]-p[Q[L]]);continue}if(g!==null&&g(s)){at&&(m.culled.occlusion+=p[Q[F-1]+1]-p[Q[L]]);continue}for(let G=L;G<F;++G){let N=Q[G],k=p[N],H=p[N+1]-k;if(H===0)continue;dM(s,d,N*4);let z=gM(l,s.center);if(S&&(z+s.radius<b||z-s.radius>x)){at&&(m.culled.lod+=H);continue}if(!mM(u,s)){at&&(m.culled.frustum+=H);continue}if(g!==null&&z-s.radius<w&&g(s)){at&&(m.culled.occlusion+=H);continue}for(let _=0,M=R.length;_<M;++_){if(z+s.radius<R[_][0]||z-s.radius>R[_][1])continue;let q=i[_],ne=q.count;ne>0&&q.baseInstances[ne-1]+q.instanceCounts[ne-1]===k&&q.counts[ne-1]===R[_][3]?q.instanceCounts[ne-1]+=H:(q.counts[ne]=R[_][3],q.instanceCounts[ne]=H,q.baseInstances[ne]=k,q.count+=1)}}}}else{o=V9(f,o);let{baseInstances:T,instanceCounts:L,counts:F}=o,v=0;for(let U=0;U<y;++U){let G=I[U],N=I[U+1];if(N-G!==0){if(dM(s,C,U*4),S){let J=gM(l,s.center);if(J+s.radius<b||J-s.radius>x){at&&(m.culled.lod+=p[Q[N-1]+1]-p[Q[G]]);continue}}if(!mM(u,s)){at&&(m.culled.frustum+=p[Q[N-1]+1]-p[Q[G]]);continue}if(g!==null&&g(s)){at&&(m.culled.occlusion+=p[Q[N-1]+1]-p[Q[G]]);continue}for(let J=G;J<N;++J){let H=Q[J],z=p[H],M=p[H+1]-z;if(M===0)continue;dM(s,d,H*4);let q=gM(l,s.center);if(S&&(q+s.radius<b||q-s.radius>x)){at&&(m.culled.lod+=M);continue}if(!mM(u,s)){at&&(m.culled.frustum+=M);continue}if(g!==null&&q-s.radius<w&&g(s)){at&&(m.culled.occlusion+=M);continue}v>0&&T[v-1]+L[v-1]===z?L[v-1]+=M:(F[v]=t.drawCount.ref.value,L[v]=M,T[v]=z,v+=1)}}}o.count=v,i.length=1,i[0]=o,i[0].uniforms.length=0}a=!0},uncull:()=>{a=!1},cullSimple:(l,u,g)=>{let m=t.lodLevels?.ref.value;if(!(!m||m.length===0)){if(t.lodLevels?.ref.version!==A)c();else for(let p=0,d=m.length;p<d;++p)i[p].count=0;for(let p=0,d=m.length;p<d;++p)if(l+u<m[p][1]*g){let f=i[p],I=f.count;f.counts[I]=m[p][3],f.instanceCounts[I]=t.instanceCount.ref.value,f.baseInstances[I]=0,f.count+=1;break}a=!0}},render:(l,u)=>{t.uAlpha&&t.alpha&&D.updateIfChanged(t.uAlpha,$t(t.alpha.ref.value*r.alphaFactor,0,1)),e.render(l,u,a?i:void 0)},getByteCount:()=>e.getByteCount(),getProgram:l=>e.getProgram(l),setTransparency:l=>e.setTransparency(l),update:()=>{e.update(),c()},dispose:()=>e.destroy()}}function Ln(e,t){return{id:ihe(),values:t,render:()=>{e.getProgram("compute").finalize(!0),e.render("compute",0)},update:()=>e.update(),dispose:()=>e.destroy()}}var Z2=new Float32Array([1,1,-1,1,-1,-1,-1,-1,1,-1,1,1]),Wn={drawCount:go("number"),instanceCount:go("number"),aPosition:Bo("float32",2,0),uQuadScale:Re("v2")},Xn={drawCount:D.create(6),instanceCount:D.create(1),aPosition:D.create(Z2),uQuadScale:D.create(Le.create(1,1))},Att={...Wn,tColor:Ft("texture","rgba","ubyte","nearest"),uTexSize:Re("v2")},stt=Cn("copy",mo,nhe);function id(e,t){let r={...Xn,tColor:D.create(t),uTexSize:D.create(Le.create(t.getWidth(),t.getHeight()))},n={...Att},o=Un(e,"triangles",stt,n,r);return Ln(o,r)}var _9="shared-copy";function ctt(e,t){e.namedComputeRenderables[_9]||(e.namedComputeRenderables[_9]=id(e,Ti()));let r=e.namedComputeRenderables[_9];return D.update(r.values.tColor,t),D.update(r.values.uTexSize,Le.set(r.values.uTexSize.ref.value,t.getWidth(),t.getHeight())),r.update(),r}var Y9="read-texture",LD="read-alpha-texture";function O9(e,t,r){let{gl:n,resources:o}=e;if(!r&&t.type!==n.UNSIGNED_BYTE)throw new Error("unsupported texture type");e.namedFramebuffers[Y9]||(e.namedFramebuffers[Y9]=o.framebuffer());let i=e.namedFramebuffers[Y9],a=t.getWidth(),A=t.getHeight();return r||(r=new Uint8Array(a*A*4)),i.bind(),t.attachFramebuffer(i,0),e.readPixels(0,0,a,A,r),{array:r,width:a,height:A}}function ahe(e,t){let{gl:r,state:n,resources:o}=e;if(t.type!==r.UNSIGNED_BYTE)throw new Error("unsupported texture type");let i=t.getWidth(),a=t.getHeight(),A=ctt(e,t);n.currentRenderItemId=-1,e.namedFramebuffers[LD]||(e.namedFramebuffers[LD]=o.framebuffer());let s=e.namedFramebuffers[LD];s.bind(),e.namedTextures[LD]||(e.namedTextures[LD]=o.texture("image-uint8","rgba","ubyte","linear"));let c=e.namedTextures[LD];c.define(i,a),c.attachFramebuffer(s,0),n.disable(r.CULL_FACE),n.enable(r.BLEND),n.disable(r.DEPTH_TEST),n.enable(r.SCISSOR_TEST),n.depthMask(!1),n.clearColor(0,0,0,0),n.blendFunc(r.ONE,r.ONE),n.blendEquation(r.FUNC_ADD),n.viewport(0,0,i,a),n.scissor(0,0,i,a),r.clear(r.COLOR_BUFFER_BIT),A.render();let l=new Uint8Array(i*a*4);return e.readPixels(0,0,i,a,l),{array:l,width:i,height:a}}var Ahe=new Uint32Array([0,1,2,1,3,2]),ltt=new Float32Array([0,1,0,0,1,1,1,0]),pM={nearest:"Nearest",catmulrom:"Catmulrom (Cubic)",mitchell:"Mitchell (Cubic)",bspline:"B-Spline (Cubic)"},m0r=Object.keys(pM);var lu;(d=>{function e(){return{type:0,center:B(),rotation:gr(),scale:B(),transform:Y()}}d.createEmptyTrim=e;function t(f,I,C,y,Q,E,b){return b?o(f,I,C,y,Q,E,b):n(f,I,C,y,Q,E)}d.create=t;function r(f){return na([f.cornerBuffer.ref.version])}function n(f,I,C,y,Q,E){let b=we(),x=-1,S=f.width,w=f.height,R={kind:"image",imageTexture:D.create(f),imageTextureDim:D.create(Le.create(S,w)),cornerBuffer:D.create(I),groupTexture:D.create(C),valueTexture:D.create(y),trimType:D.create(Q.type),trimCenter:D.create(Q.center),trimRotation:D.create(Q.rotation),trimScale:D.create(Q.scale),trimTransform:D.create(Q.transform),isoLevel:D.create(E),get boundingSphere(){let T=r(R);if(T!==x){let L=utt(R.cornerBuffer.ref.value);we.copy(b,L),x=T}return b},setBoundingSphere(T){we.copy(b,T),x=r(R)},hasBoundingSphere(){return x===r(R)},meta:{}};return R}function o(f,I,C,y,Q,E,b){let x=f.width,S=f.height;return D.update(b.imageTexture,f),D.update(b.imageTextureDim,Le.set(b.imageTextureDim.ref.value,x,S)),D.update(b.cornerBuffer,I),D.update(b.groupTexture,C),D.update(b.valueTexture,y),D.updateIfChanged(b.trimType,Q.type),D.update(b.trimCenter,B.copy(b.trimCenter.ref.value,Q.center)),D.update(b.trimRotation,gr.copy(b.trimRotation.ref.value,Q.rotation)),D.update(b.trimScale,B.copy(b.trimScale.ref.value,Q.scale)),D.update(b.trimTransform,Y.copy(b.trimTransform.ref.value,Q.transform)),D.updateIfChanged(b.isoLevel,E),b}function i(f){let I=Mo(0,4,Uint8Array),C=f?f.cornerBuffer.ref.value:new Float32Array(24),y=Mo(0,4,Uint8Array),Q=Mo(0,1,Float32Array),E=e();return t(I,C,y,Q,E,-1,f)}d.createEmpty=i,d.Params={...ot.Params,interpolation:h.Select("bspline",h.objectToOptions(pM))},d.Utils={Params:d.Params,createEmpty:i,createValues:c,createValuesSimple:l,updateValues:u,updateBoundingSphere:g,createRenderableState:m,updateRenderableState:p,createPositionIterator:s};function s(f,I){return rn(1,1,1,()=>vA)}function c(f,I,C,y,Q){let{instanceCount:E,groupCount:b}=C,x=s(f,I),S=cA(C,x,y.color),w=vi(Q.instanceGranularity,b,E)?ei(E,"instance"):ei(E*b,"groupInstance"),R=dl(),T=pl(),L=Il(),F=Bl(),v=fl(),U=Cl(),G={drawCount:Ahe.length,vertexCount:Z2.length/3,groupCount:b,instanceCount:E},N=we.clone(f.boundingSphere),k=Ta(N,I.aTransform.ref.value,E,0);return{dGeometryType:D.create("image"),...S,...w,...R,...T,...L,...F,...v,...U,...I,...ot.createValues(Q,G),aPosition:f.cornerBuffer,aUv:D.create(ltt),elements:D.create(Ahe),aGroup:D.create(QA(new Float32Array(4))),boundingSphere:D.create(k),invariantBoundingSphere:D.create(N),uInvariantBoundingSphere:D.create(lr.ofSphere(N)),dInterpolation:D.create(Q.interpolation),uImageTexDim:f.imageTextureDim,tImageTex:f.imageTexture,tGroupTex:f.groupTexture,tValueTex:f.valueTexture,uTrimType:f.trimType,uTrimCenter:f.trimCenter,uTrimRotation:f.trimRotation,uTrimScale:f.trimScale,uTrimTransform:f.trimTransform,uIsoLevel:f.isoLevel}}function l(f,I,C,y,Q){let E=ot.createSimple(C,y,Q),b={...h.getDefaultValues(d.Params),...I};return c(f,E.transform,E.locationIterator,E.theme,b)}function u(f,I){ot.updateValues(f,I),D.updateIfChanged(f.dInterpolation,I.interpolation)}function g(f,I){let C=we.clone(I.boundingSphere),y=Ta(C,f.aTransform.ref.value,f.instanceCount.ref.value,0);we.equals(y,f.boundingSphere.ref.value)||D.update(f.boundingSphere,y),we.equals(C,f.invariantBoundingSphere.ref.value)||(D.update(f.invariantBoundingSphere,C),D.update(f.uInvariantBoundingSphere,lr.fromSphere(f.uInvariantBoundingSphere.ref.value,C)))}function m(f){let I=ot.createRenderableState(f);return I.opaque=!1,I}function p(f,I){ot.updateRenderableState(f,I),f.opaque=!1}})(lu||={});function utt(e){let t=B(),r=[];for(let i=0,a=e.length;i<a;i+=3){let A=B.fromArray(B(),e,i);r.push(A),B.add(t,t,A)}B.scale(t,t,1/(e.length/3));let n=0;for(let i of r){let a=B.distance(t,i);a>n&&(n=a)}let o=we.create(t,n);return we.setExtrema(o,r),o}var _a;(d=>{function e(f,I,C,y,Q,E,b,x,S,w){return w?o(f,I,C,y,Q,E,b,x,S,w):n(f,I,C,y,Q,E,b,x,S)}d.create=e;function t(f){let I=f?f.mappingBuffer.ref.value:new Float32Array(0),C=f?f.indexBuffer.ref.value:new Uint32Array(0),y=f?f.groupBuffer.ref.value:new Float32Array(0),Q=f?f.startBuffer.ref.value:new Float32Array(0),E=f?f.endBuffer.ref.value:new Float32Array(0),b=f?f.scaleBuffer.ref.value:new Float32Array(0),x=f?f.capBuffer.ref.value:new Float32Array(0),S=f?f.colorModeBuffer.ref.value:new Float32Array(0);return e(I,C,y,Q,E,b,x,S,0,f)}d.createEmpty=t;function r(f){return na([f.cylinderCount,f.mappingBuffer.ref.version,f.indexBuffer.ref.version,f.groupBuffer.ref.version,f.startBuffer.ref.version,f.endBuffer.ref.version,f.scaleBuffer.ref.version,f.capBuffer.ref.version,f.colorModeBuffer.ref.version])}function n(f,I,C,y,Q,E,b,x,S){let w=we(),R,T=-1,L=-1,F={kind:"cylinders",cylinderCount:S,mappingBuffer:D.create(f),indexBuffer:D.create(I),groupBuffer:D.create(C),startBuffer:D.create(y),endBuffer:D.create(Q),scaleBuffer:D.create(E),capBuffer:D.create(b),colorModeBuffer:D.create(x),get boundingSphere(){let v=r(F);if(v!==T){let U=gm(F.startBuffer.ref.value,F.cylinderCount*6,6),G=gm(F.endBuffer.ref.value,F.cylinderCount*6,6);we.expandBySphere(w,U,G),T=v}return w},get groupMapping(){return F.groupBuffer.ref.version!==L&&(R=Ap(F.groupBuffer.ref.value,F.cylinderCount,6),L=F.groupBuffer.ref.version),R},setBoundingSphere(v){we.copy(w,v),T=r(F)},hasBoundingSphere(){return T===r(F)}};return F}function o(f,I,C,y,Q,E,b,x,S,w){return S>w.cylinderCount&&(D.update(w.mappingBuffer,f),D.update(w.indexBuffer,I)),w.cylinderCount=S,D.update(w.groupBuffer,C),D.update(w.startBuffer,y),D.update(w.endBuffer,Q),D.update(w.scaleBuffer,E),D.update(w.capBuffer,b),D.update(w.colorModeBuffer,x),w}function i(f,I){let C=f.startBuffer.ref.value;Eg(I,C,0,f.cylinderCount*6),D.update(f.startBuffer,C);let y=f.endBuffer.ref.value;Eg(I,y,0,f.cylinderCount*6),D.update(f.endBuffer,y)}d.transform=i,d.Params={...ot.Params,sizeFactor:h.Numeric(1,{min:0,max:10,step:.1}),sizeAspectRatio:h.Numeric(1,{min:0,max:3,step:.01}),doubleSided:h.Boolean(!1,ot.CustomQualityParamInfo),ignoreLight:h.Boolean(!1,ot.ShadingCategory),celShaded:h.Boolean(!1,ot.ShadingCategory),xrayShaded:h.Select(!1,[[!1,"Off"],[!0,"On"],["inverted","Inverted"]],ot.ShadingCategory),transparentBackfaces:h.Select("off",h.arrayToOptions(["off","on","opaque"]),ot.ShadingCategory),solidInterior:h.Boolean(!0,ot.ShadingCategory),bumpFrequency:h.Numeric(0,{min:0,max:10,step:.1},ot.ShadingCategory),bumpAmplitude:h.Numeric(1,{min:0,max:5,step:.1},ot.ShadingCategory),interior:lp(),animation:Hu(),colorMode:h.Select("default",h.arrayToOptions(["default","interpolate"]),ot.ShadingCategory)},d.Utils={Params:d.Params,createEmpty:t,createValues:c,createValuesSimple:l,updateValues:u,updateBoundingSphere:g,createRenderableState:m,updateRenderableState:p,createPositionIterator:s};function s(f,I){let C=f.cylinderCount*6,y=I.instanceCount.ref.value,Q=is(),E=Q.position,b=f.startBuffer.ref.value,x=f.endBuffer.ref.value,S=I.aTransform.ref.value;return rn(C,y,2,(R,T)=>{let L=R%6===0?b:x;return T<0?B.fromArray(E,L,R*3):B.transformMat4Offset(E,L,S,0,R*3,T*16),Q})}function c(f,I,C,y,Q){let{instanceCount:E,groupCount:b}=C,x=s(f,I),S=cA(C,x,y.color),w=hl(C,x,y.size),R=vi(Q.instanceGranularity,b,E)?ei(E,"instance"):ei(E*b,"groupInstance"),T=dl(),L=pl(),F=Il(),v=Bl(),U=fl(),G=Cl(),N={drawCount:f.cylinderCount*4*3,vertexCount:f.cylinderCount*6,groupCount:b,instanceCount:E},k=fQ(w)*Q.sizeFactor,J=we.clone(f.boundingSphere),H=Ta(J,I.aTransform.ref.value,E,0);return{dGeometryType:D.create("cylinders"),aMapping:f.mappingBuffer,aGroup:f.groupBuffer,aStart:f.startBuffer,aEnd:f.endBuffer,aScale:f.scaleBuffer,aCap:f.capBuffer,aColorMode:f.colorModeBuffer,elements:f.indexBuffer,boundingSphere:D.create(H),invariantBoundingSphere:D.create(J),uInvariantBoundingSphere:D.create(lr.ofSphere(J)),...S,...w,...R,...T,...L,...F,...v,...U,...G,...I,padding:D.create(k),...ot.createValues(Q,N),uSizeFactor:D.create(Q.sizeFactor*Q.sizeAspectRatio),uDoubleSided:D.create(Q.doubleSided),dIgnoreLight:D.create(Q.ignoreLight),dCelShaded:D.create(Q.celShaded),dXrayShaded:D.create(Q.xrayShaded==="inverted"?"inverted":Q.xrayShaded===!0?"on":"off"),dTransparentBackfaces:D.create(Q.transparentBackfaces),dSolidInterior:D.create(Q.solidInterior),uBumpFrequency:D.create(Q.bumpFrequency),uBumpAmplitude:D.create(Q.bumpAmplitude),dDualColor:D.create(Q.colorMode==="interpolate"),...mQ(Q.interior),...up(Q.animation)}}function l(f,I,C,y,Q){let E=ot.createSimple(C,y,Q),b={...h.getDefaultValues(d.Params),...I};return c(f,E.transform,E.locationIterator,E.theme,b)}function u(f,I){ot.updateValues(f,I),D.updateIfChanged(f.uSizeFactor,I.sizeFactor*I.sizeAspectRatio),D.updateIfChanged(f.uDoubleSided,I.doubleSided),D.updateIfChanged(f.dIgnoreLight,I.ignoreLight),D.updateIfChanged(f.dCelShaded,I.celShaded),D.updateIfChanged(f.dXrayShaded,I.xrayShaded==="inverted"?"inverted":I.xrayShaded===!0?"on":"off"),D.updateIfChanged(f.dTransparentBackfaces,I.transparentBackfaces),D.updateIfChanged(f.dSolidInterior,I.solidInterior),D.updateIfChanged(f.uBumpFrequency,I.bumpFrequency),D.updateIfChanged(f.uBumpAmplitude,I.bumpAmplitude),D.updateIfChanged(f.dDualColor,I.colorMode==="interpolate"),dQ(f,I.interior),gp(f,I.animation)}function g(f,I){let C=we.clone(I.boundingSphere),y=Ta(C,f.aTransform.ref.value,f.instanceCount.ref.value,0);we.equals(y,f.boundingSphere.ref.value)||D.update(f.boundingSphere,y),we.equals(C,f.invariantBoundingSphere.ref.value)||(D.update(f.invariantBoundingSphere,C),D.update(f.uInvariantBoundingSphere,lr.fromSphere(f.uInvariantBoundingSphere.ref.value,C)))}function m(f){let I=ot.createRenderableState(f);return p(I,f),I}function p(f,I){ot.updateRenderableState(f,I),f.opaque=f.opaque&&!I.xrayShaded,f.writeDepth=f.opaque}})(_a||={});var lA;(i=>{function e(a){switch(a.kind){case"mesh":return a.triangleCount*3;case"points":return a.pointCount;case"spheres":return a.sphereCount*2*3;case"cylinders":return a.cylinderCount*4*3;case"text":return a.charCount*2*3;case"lines":return a.lineCount*2*3;case"direct-volume":return 36;case"image":return 6;case"texture-mesh":return a.vertexCount}}i.getDrawCount=e;function t(a){switch(a.kind){case"mesh":return a.vertexCount;case"points":return a.pointCount;case"spheres":return a.sphereCount*6;case"cylinders":return a.cylinderCount*6;case"text":return a.charCount*4;case"lines":return a.vertexCount;case"direct-volume":let[A,s,c]=a.gridDimension.ref.value;return A*s*c;case"image":return 4;case"texture-mesh":return a.vertexCount}}i.getVertexCount=t;function r(a){switch(a.kind){case"mesh":case"points":case"spheres":case"cylinders":case"text":case"lines":return e(a)===0?0:Es(a.groupBuffer.ref.value)+1;case"direct-volume":return 1;case"image":return HCe(a.groupTexture.ref.value.array,4)+1;case"texture-mesh":return a.groupCount}}i.getGroupCount=r;function n(a){switch(a.kind){case"mesh":return At.Utils;case"points":return Ds.Utils;case"spheres":return rA.Utils;case"cylinders":return _a.Utils;case"text":return tA.Utils;case"lines":return Zr.Utils;case"direct-volume":return yl.Utils;case"image":return lu.Utils;case"texture-mesh":return Fs.Utils}}i.getUtils=n;function o(a,A){return A==="instance"&&a.nonInstanceable?"group":A}i.getGranularity=o})(lA||={});var gtt=1,mtt="Assigns sizes as defined by the shape object.",she={};function dtt(e){return she}function fM(e,t){return{factory:fM,granularity:"groupInstance",size:r=>OA.isLocation(r)?r.shape.getSize(r.group,r.instance):gtt,props:t,description:mtt}}var che={name:"shape-group",label:"Shape Group",category:"",factory:fM,getParams:dtt,defaultValues:h.getDefaultValues(she),isApplicable:e=>!!e.shape};var ptt=13421772,ftt="Assigns colors as defined by the shape object.",lhe={};function Btt(e){return lhe}function BM(e,t){return{factory:BM,granularity:"groupInstance",color:r=>OA.isLocation(r)?r.shape.getColor(r.group,r.instance):ptt,props:t,description:ftt}}var uhe={name:"shape-group",label:"Shape Group",category:Br.Misc,factory:BM,getParams:Btt,defaultValues:h.getDefaultValues(lhe),isApplicable:e=>!!e.shape};var Itt={...Sl,aPosition:Bo("float32",3,0),elements:pp("uint32"),uBboxMin:Re("v3"),uBboxMax:Re("v3"),uBboxSize:Re("v3"),uMaxSteps:Re("i"),uStepScale:Re("f"),uJumpLength:Re("f"),uTransform:Re("m4"),uGridDim:Re("v3"),tTransferTex:Ft("image-uint8","alpha","ubyte","linear"),uTransferScale:Re("f","material"),dGridTexType:bt("string",["2d","3d"]),uGridTexDim:Re("v3"),tGridTex:Ft("texture","rgba","ubyte","linear"),uGridStats:Re("v4"),uCellDim:Re("v3"),uCartnToUnit:Re("m4"),uUnitToCartn:Re("m4"),dPackedGroup:bt("boolean"),dAxisOrder:bt("string",["012","021","102","120","201","210"]),dIgnoreLight:bt("boolean"),dCelShaded:bt("boolean"),dXrayShaded:bt("string",["off","on","inverted"]),meta:go("unknown")};function ghe(e,t,r,n,o,i,a){let A={...Ql,...El,...bl,...xl,...Itt};e.isWebGL2||(A.uMaxSteps=bt("number"));let s={...r,uObjectId:D.create(t),dLightCount:D.create(a.dLightCount),dColorMarker:D.create(a.dColorMarker)},l=Dl(e,"triangles",UBe,A,s,o,i);return vl(l,s,n)}var Ctt={...Sl,aGroup:Bo("float32",1,0),aPosition:Bo("float32",3,0),aNormal:Bo("float32",3,0),elements:pp("uint32"),dVaryingGroup:bt("boolean"),dFlatShaded:bt("boolean"),uDoubleSided:Re("b","material"),dFlipSided:bt("boolean"),dIgnoreLight:bt("boolean"),dCelShaded:bt("boolean"),dXrayShaded:bt("string",["off","on","inverted"]),dTransparentBackfaces:bt("string",["off","on","opaque"]),uBumpFrequency:Re("f","material"),uBumpAmplitude:Re("f","material"),meta:go("unknown"),...CQ,...fp};function mhe(e,t,r,n,o,i,a){let A={...Ql,...El,...bl,...xl,...Ctt},s={...r,uObjectId:D.create(t),dLightCount:D.create(a.dLightCount),dColorMarker:D.create(a.dColorMarker)},l=Dl(e,"triangles",vN,A,s,o,i);return vl(l,s,n)}var htt={...Sl,...pI,aGroup:Bo("float32",1,0),aPosition:Bo("float32",3,0),dPointSizeAttenuation:bt("boolean"),dPointStyle:bt("string",["square","circle","fuzzy"]),...fp};function dhe(e,t,r,n,o,i,a){let A={...Ql,...El,...bl,...xl,...htt},s={...r,uObjectId:D.create(t),dLightCount:D.create(a.dLightCount),dColorMarker:D.create(a.dColorMarker)},l=Dl(e,"points",DBe,A,s,o,i);return vl(l,s,n)}var ytt={...Sl,...pI,aGroup:Bo("float32",1,0),aMapping:Bo("float32",2,0),aStart:Bo("float32",3,0),aEnd:Bo("float32",3,0),elements:pp("uint32"),dLineSizeAttenuation:bt("boolean"),uDoubleSided:Re("b","material"),dFlipSided:bt("boolean"),stripCount:go("number"),stripOffsets:go("uint32"),...fp};function phe(e,t,r,n,o,i,a){let A={...Ql,...El,...bl,...xl,...ytt},s={...r,uObjectId:D.create(t),dLightCount:D.create(a.dLightCount),dColorMarker:D.create(a.dColorMarker)},l=Dl(e,"triangles",RBe,A,s,o,i);return vl(l,s,n)}var Qtt={...Sl,...pI,uTexDim:Re("v2"),tPositionGroup:Ft("image-float32","rgba","float","nearest"),padding:go("number"),uDoubleSided:Re("b","material"),dIgnoreLight:bt("boolean"),dCelShaded:bt("boolean"),dXrayShaded:bt("string",["off","on","inverted"]),dTransparentBackfaces:bt("string",["off","on","opaque"]),dSolidInterior:bt("boolean"),dClipPrimitive:bt("boolean"),dApproximate:bt("boolean"),uAlphaThickness:Re("f"),uBumpFrequency:Re("f","material"),uBumpAmplitude:Re("f","material"),lodLevels:go("unknown"),centerBuffer:go("float32"),groupBuffer:go("float32"),...CQ,...fp};function fhe(e,t,r,n,o,i,a){let A={...Ql,...El,...bl,...xl,...Qtt},s={...r,uObjectId:D.create(t),dLightCount:D.create(a.dLightCount),dColorMarker:D.create(a.dColorMarker)},l=Dl(e,"triangles",vBe,A,s,o,i);return vl(l,s,n)}var Ett={...Sl,...pI,aGroup:Bo("float32",1,0),aPosition:Bo("float32",3,0),aMapping:Bo("float32",2,0),aDepth:Bo("float32",1,0),elements:pp("uint32"),aTexCoord:Bo("float32",2,0),tFont:Ft("image-uint8","alpha","ubyte","linear"),padding:go("number"),uBorderWidth:Re("f","material"),uBorderColor:Re("v3","material"),uOffsetX:Re("f","material"),uOffsetY:Re("f","material"),uOffsetZ:Re("f","material"),uBackgroundColor:Re("v3","material"),uBackgroundOpacity:Re("f","material")};function Bhe(e,t,r,n,o,i,a){let A={...Ql,...El,...bl,...xl,...Ett},s={...r,uObjectId:D.create(t),dLightCount:D.create(a.dLightCount),dColorMarker:D.create(a.dColorMarker)},l=Dl(e,"triangles",wBe,A,s,o,i);return vl(l,s,n)}var btt={...Sl,uGeoTexDim:Re("v2","buffered"),tPosition:Ft("texture","rgb","float","nearest"),tGroup:Ft("texture","alpha","float","nearest"),tNormal:Ft("texture","rgb","float","nearest"),dVaryingGroup:bt("boolean"),dFlatShaded:bt("boolean"),uDoubleSided:Re("b","material"),dFlipSided:bt("boolean"),dIgnoreLight:bt("boolean"),dCelShaded:bt("boolean"),dXrayShaded:bt("string",["off","on","inverted"]),dTransparentBackfaces:bt("string",["off","on","opaque"]),uBumpFrequency:Re("f","material"),uBumpAmplitude:Re("f","material"),meta:go("unknown"),...CQ,...fp};function Ihe(e,t,r,n,o,i,a){let A={...Ql,...El,...bl,...xl,...btt},s={...r,uObjectId:D.create(t),dLightCount:D.create(a.dLightCount),dColorMarker:D.create(a.dColorMarker)},l=Dl(e,"triangles",vN,A,s,o,i);return vl(l,s,n)}var xtt={...Sl,aGroup:Bo("float32",1,0),aPosition:Bo("float32",3,0),aUv:Bo("float32",2,0),elements:pp("uint32"),uImageTexDim:Re("v2"),tImageTex:Ft("image-uint8","rgba","ubyte","nearest"),tGroupTex:Ft("image-uint8","rgba","ubyte","nearest"),tValueTex:Ft("image-float32","alpha","float","linear"),uTrimType:Re("i"),uTrimCenter:Re("v3"),uTrimRotation:Re("q"),uTrimScale:Re("v3"),uTrimTransform:Re("m4"),uIsoLevel:Re("f"),dInterpolation:bt("string",["nearest","catmulrom","mitchell","bspline"])};function Che(e,t,r,n,o,i,a){let A={...Ql,...El,...bl,...xl,...xtt},s={...r,uObjectId:D.create(t),dLightCount:D.create(a.dLightCount),dColorMarker:D.create(a.dColorMarker)},l=Dl(e,"triangles",LBe,A,s,o,i);return vl(l,s,n)}var Stt={...Sl,...pI,aGroup:Bo("float32",1,0),aStart:Bo("float32",3,0),aEnd:Bo("float32",3,0),aMapping:Bo("float32",3,0),aScale:Bo("float32",1,0),aCap:Bo("float32",1,0),aColorMode:Bo("float32",1,0),elements:pp("uint32"),padding:go("number"),uDoubleSided:Re("b","material"),dIgnoreLight:bt("boolean"),dCelShaded:bt("boolean"),dXrayShaded:bt("string",["off","on","inverted"]),dTransparentBackfaces:bt("string",["off","on","opaque"]),dSolidInterior:bt("boolean"),uBumpFrequency:Re("f","material"),uBumpAmplitude:Re("f","material"),dDualColor:bt("boolean"),...CQ,...fp};function hhe(e,t,r,n,o,i,a){let A={...Ql,...El,...bl,...xl,...Stt},s={...r,uObjectId:D.create(t),dLightCount:D.create(a.dLightCount),dColorMarker:D.create(a.dColorMarker)},l=Dl(e,"triangles",FBe,A,s,o,i);return vl(l,s,n)}var Dtt=ua(0,2147483647),FA=ua(0,2147483647);function $s(e,t,r,n){return{id:Dtt(),type:e,values:t,state:r,materialId:n}}function yhe(e,t,r,n){switch(t.type){case"mesh":return mhe(e,t.id,t.values,t.state,t.materialId,r,n);case"points":return dhe(e,t.id,t.values,t.state,t.materialId,r,n);case"spheres":return fhe(e,t.id,t.values,t.state,t.materialId,r,n);case"cylinders":return hhe(e,t.id,t.values,t.state,t.materialId,r,n);case"text":return Bhe(e,t.id,t.values,t.state,t.materialId,r,n);case"lines":return phe(e,t.id,t.values,t.state,t.materialId,r,n);case"direct-volume":return ghe(e,t.id,t.values,t.state,t.materialId,r,n);case"image":return Che(e,t.id,t.values,t.state,t.materialId,r,n);case"texture-mesh":return Ihe(e,t.id,t.values,t.state,t.materialId,r,n)}Or(t.type)}var Mr;(c=>{function e(l,u,g,m,p,d,f,I){return{id:Hn.create22(),name:l,sourceData:u,geometry:g,transforms:f||[Y.identity()],get groupCount(){return I??lA.getGroupCount(g)},getColor:m,getSize:p,getLabel:d}}c.create=e;function t(l){return{color:BM({shape:l},{}),size:fM({shape:l},{})}}c.getTheme=t;function r(l){let u=l.transforms.length,g=OA.Location(l),m=(p,d)=>(g.group=p,g.instance=d,g);return rn(l.groupCount,u,1,m)}c.groupIterator=r;function n(l,u,g,m,p){let d=p&&p.aTransform.ref.value.length>=l.length*16?p.aTransform.ref.value:new Float32Array(l.length*16);for(let f=0,I=l.length;f<I;++f)Y.toArray(l[f],d,f*16);return y0(d,l.length,u,g,m,p)}c.createTransform=n;function o(l,u){let g=t(l),m=lA.getUtils(l.geometry),p=FA(),d=r(l),f=n(l.transforms,l.geometry.boundingSphere,u.cellSize,u.batchSize),I=m.createValues(l.geometry,f,d,g,u),C=m.createRenderableState(u);return $s(l.geometry.kind,I,C,p)}c.createRenderObject=o;function i(l){return{kind:"shape-loci",shape:l}}c.Loci=i;function a(l){return!!l&&l.kind==="shape-loci"}c.isLoci=a;function A(l,u){return l.shape===u.shape}c.areLociEqual=A;function s(l){return l.shape.groupCount===0}c.isLociEmpty=s})(Mr||={});var OA;(g=>{function e(m,p=0,d=0){return{kind:"group-location",shape:m,group:p,instance:d}}g.Location=e;function t(m){return!!m&&m.kind==="group-location"}g.isLocation=t;function r(m,p){return{kind:"group-loci",shape:m,groups:p}}g.Loci=r;function n(m){return!!m&&m.kind==="group-loci"}g.isLoci=n;function o(m,p){if(m.shape!==p.shape||m.groups.length!==p.groups.length)return!1;for(let d=0,f=m.groups.length;d<f;++d){let{ids:I,instance:C}=m.groups[d],{ids:y,instance:Q}=p.groups[d];if(C!==Q||!Ee.areEqual(I,y))return!1}return!0}g.areLociEqual=o;function i(m){return a(m)===0}g.isLociEmpty=i;function a(m){let p=0;for(let d of m.groups)p+=Ee.size(d.ids);return p}g.size=a;let A=new gc,s=B.zero();function c(m,p,d,f){let{indices:I,offsets:C}=p;for(let{ids:y,instance:Q}of m)Ee.forEach(y,E=>{for(let b=C[E],x=C[E+1];b<x;++b)B.fromArray(s,d,I[b]*3),B.transformMat4(s,s,f[Q]),A.includeStep(s)})}function l(m,p,d,f){let{indices:I,offsets:C}=p;for(let{ids:y,instance:Q}of m)Ee.forEach(y,E=>{for(let b=C[E],x=C[E+1];b<x;++b)B.fromArray(s,d,I[b]*3),B.transformMat4(s,s,f[Q]),A.radiusStep(s)})}function u(m,p){p||(p=we()),A.reset();let d=0,{geometry:f,transforms:I}=m.shape;if(f.kind==="mesh"||f.kind==="points"){let C=f.kind==="mesh"?f.vertexBuffer.ref.value:f.centerBuffer.ref.value;c(m.groups,f.groupMapping,C,I),A.finishedIncludeStep(),l(m.groups,f.groupMapping,C,I)}else if(f.kind==="lines"){let C=f.startBuffer.ref.value,y=f.endBuffer.ref.value;c(m.groups,f.groupMapping,C,I),c(m.groups,f.groupMapping,y,I),A.finishedIncludeStep(),l(m.groups,f.groupMapping,C,I),l(m.groups,f.groupMapping,y,I)}else if(f.kind==="spheres"||f.kind==="text"){let C=f.centerBuffer.ref.value;c(m.groups,f.groupMapping,C,I),A.finishedIncludeStep(),l(m.groups,f.groupMapping,C,I);for(let{ids:y,instance:Q}of m.groups)Ee.forEach(y,E=>{let b=m.shape.getSize(E,Q);d<b&&(d=b)})}else return we.copy(p,f.boundingSphere);return B.copy(p.center,A.center),p.radius=Math.sqrt(A.radiusSq),we.expand(p,p,d),p}g.getBoundingSphere=u})(OA||={});var Bp={kind:"every-loci"};function uA(e){return!!e&&e.kind==="every-loci"}var Ir={kind:"empty-loci"};function ga(e){return!!e&&e.kind==="empty-loci"}function b0(e){return!!e&&e.kind==="data-loci"}function vtt(e,t){if(!Gb(e.data,t.data)||e.tag!==t.tag||e.elements.length!==t.elements.length)return!1;for(let r=0,n=e.elements.length;r<n;++r)if(!Gb(e.elements[r],t.elements[r]))return!1;return!0}function Ftt(e){return e.elements.length===0}function ec(e,t,r,n,o){return{kind:"data-loci",tag:e,data:t,elements:r,getBoundingSphere:n,getLabel:o}}var pr;(d=>{let e=new qi("98");function t(f){let I=f.loci.map(C=>a(C)).filter(C=>!!C);e.reset();for(let C of I)e.includePositionRadius(C.center,C.radius);e.finishedIncludeStep();for(let C of I)e.radiusPositionRadius(C.center,C.radius);return e.getSphere()}d.getBundleBoundingSphere=t;function r(f,I){return uA(f)&&uA(I)||ga(f)&&ga(I)?!0:b0(f)&&b0(I)?vtt(f,I):Ye.isLoci(f)&&Ye.isLoci(I)?Ye.areLociEqual(f,I):W.Loci.is(f)&&W.Loci.is(I)?W.Loci.areEqual(f,I):Et.isLoci(f)&&Et.isLoci(I)?Et.areLociEqual(f,I):Mr.isLoci(f)&&Mr.isLoci(I)?Mr.areLociEqual(f,I):OA.isLoci(f)&&OA.isLoci(I)?OA.areLociEqual(f,I):Ze.isLoci(f)&&Ze.isLoci(I)?Ze.areLociEqual(f,I):Ze.Isosurface.isLoci(f)&&Ze.Isosurface.isLoci(I)?Ze.Isosurface.areLociEqual(f,I):Ze.Cell.isLoci(f)&&Ze.Cell.isLoci(I)?Ze.Cell.areLociEqual(f,I):Ze.Segment.isLoci(f)&&Ze.Segment.isLoci(I)?Ze.Segment.areLociEqual(f,I):!1}d.areEqual=r;function n(f){return!!f&&f.kind==="every-loci"}d.isEvery=n;function o(f){return uA(f)?!1:ga(f)?!0:b0(f)?Ftt(f):Ye.isLoci(f)?Ye.isLociEmpty(f):W.Loci.is(f)?W.Loci.isEmpty(f):Et.isLoci(f)?Et.isLociEmpty(f):Mr.isLoci(f)?Mr.isLociEmpty(f):OA.isLoci(f)?OA.isLociEmpty(f):Ze.isLoci(f)?Ze.isLociEmpty(f):Ze.Isosurface.isLoci(f)?Ze.Isosurface.isLociEmpty(f):Ze.Cell.isLoci(f)?Ze.Cell.isLociEmpty(f):Ze.Segment.isLoci(f)?Ze.Segment.isLociEmpty(f):!1}d.isEmpty=o;function i(f,I){return I instanceof Ye&&(W.Loci.is(f)?f=W.Loci.remap(f,I):Ye.isLoci(f)?f=Ye.remapLoci(f,I):Et.isLoci(f)&&(f=Et.remapLoci(f,I))),f}d.remap=i;function a(f,I){if(!(f.kind==="every-loci"||f.kind==="empty-loci")){if(I||(I=we()),f.kind==="structure-loci")return we.copy(I,f.structure.boundary.sphere);if(f.kind==="element-loci")return W.Loci.getBoundingSphere(f,I);if(f.kind==="bond-loci")return Et.getBoundingSphere(f,I);if(f.kind==="shape-loci")return we.copy(I,f.shape.geometry.boundingSphere);if(f.kind==="group-loci")return OA.getBoundingSphere(f,I);if(f.kind==="data-loci")return f.getBoundingSphere?.(I);if(f.kind==="volume-loci")return Ze.getBoundingSphere(f.volume,f.instances,I);if(f.kind==="isosurface-loci")return Ze.Isosurface.getBoundingSphere(f.volume,f.isoValue,f.instances,I);if(f.kind==="cell-loci")return Ze.Cell.getBoundingSphere(f.volume,f.elements,I);if(f.kind==="segment-loci")return Ze.Segment.getBoundingSphere(f.volume,f.elements,I)}}d.getBoundingSphere=a;let A=we.zero();function s(f,I){let C=a(f,A);return C?B.copy(I||B(),C.center):void 0}d.getCenter=s;function c(f){if(!(f.kind==="every-loci"||f.kind==="empty-loci")){if(f.kind==="structure-loci")return W.Loci.getPrincipalAxes(Ye.toStructureElementLoci(f.structure));if(f.kind==="element-loci")return W.Loci.getPrincipalAxes(f);if(f.kind==="bond-loci")return;if(f.kind==="shape-loci")return;if(f.kind==="group-loci")return;if(f.kind==="data-loci")return;if(f.kind==="volume-loci")return;if(f.kind==="isosurface-loci")return;if(f.kind==="cell-loci")return;if(f.kind==="segment-loci")return}}d.getPrincipalAxes=c;let l={element:f=>f,residue:f=>W.Loci.is(f)?W.Loci.extendToWholeResidues(f,!0):f,chain:f=>W.Loci.is(f)?W.Loci.extendToWholeChains(f):f,entity:f=>W.Loci.is(f)?W.Loci.extendToWholeEntities(f):f,model:f=>W.Loci.is(f)?W.Loci.extendToWholeModels(f):f,operator:f=>W.Loci.is(f)?W.Loci.extendToWholeOperators(f):f,structure:f=>W.Loci.is(f)?Ye.toStructureElementLoci(f.structure):OA.isLoci(f)?Mr.Loci(f.shape):Ze.Cell.isLoci(f)?Ze.Loci(f.volume,Ue.ofLength(f.volume.instances.length)):Ze.Isosurface.isLoci(f)?Ze.Loci(f.volume,Ue.ofLength(f.volume.instances.length)):f,elementInstances:f=>W.Loci.is(f)?W.Loci.extendToAllInstances(f):f,residueInstances:f=>W.Loci.is(f)?W.Loci.extendToAllInstances(W.Loci.extendToWholeResidues(f,!0)):f,chainInstances:f=>W.Loci.is(f)?W.Loci.extendToAllInstances(W.Loci.extendToWholeChains(f)):f};d.GranularityOptions=h.objectToOptions(l,f=>{switch(f){case"element":return"Atom/Coarse Element";case"elementInstances":return["Atom/Coarse Element Instances","With Symmetry"];case"structure":return"Structure/Shape";default:return f.indexOf("Instances")?[Ra(f),"With Symmetry"]:Ra(f)}});function g(f){return f.replace("Instances","")}d.simpleGranularity=g;function m(f,I){return l[I](f)}d.applyGranularity=m;function p(f,I,C=!1){return(I!=="element"||C)&&Et.isLoci(f)&&(f=Et.toStructureElementLoci(f)),Ye.isLoci(f)&&(f=Ye.toStructureElementLoci(f.structure)),W.Loci.is(f)&&(f=W.Loci.remap(f,f.structure.root)),I&&(f=m(f,I)),f}d.normalize=p})(pr||={});var a8=kt(Ghe());function Wc(e,t){return typeof e=="object"&&!("prototype"in e)?(0,a8.create)({...e},t):(0,a8.create)(e,t)}var vM="@@__IMMUTABLE_INDEXED__@@";function hp(e){return!!(e&&e[vM])}var FM="@@__IMMUTABLE_KEYED__@@";function JA(e){return!!(e&&e[FM])}function Q8(e){return JA(e)||hp(e)}var sye="@@__IMMUTABLE_ITERABLE__@@";function ld(e){return!!(e&&e[sye])}var Vu=function(t){return ld(t)?t:ym(t)},yp=(function(e){function t(r){return JA(r)?r:SQ(r)}return e&&(t.__proto__=e),t.prototype=Object.create(e&&e.prototype),t.prototype.constructor=t,t})(Vu),D0=(function(e){function t(r){return hp(r)?r:jf(r)}return e&&(t.__proto__=e),t.prototype=Object.create(e&&e.prototype),t.prototype.constructor=t,t})(Vu),YD=(function(e){function t(r){return ld(r)&&!Q8(r)?r:zD(r)}return e&&(t.__proto__=e),t.prototype=Object.create(e&&e.prototype),t.prototype.constructor=t,t})(Vu);Vu.Keyed=yp;Vu.Indexed=D0;Vu.Set=YD;var OD=0,ud=1,gd=2,m8=typeof Symbol=="function"&&Symbol.iterator,cye="@@iterator",UM=m8||cye,$i=function(t){this.next=t};$i.prototype.toString=function(){return"[Iterator]"};$i.KEYS=OD;$i.VALUES=ud;$i.ENTRIES=gd;$i.prototype.inspect=$i.prototype.toSource=function(){return this.toString()};$i.prototype[UM]=function(){return this};function zA(e,t,r,n){var o=e===OD?t:e===ud?r:[t,r];return n?n.value=o:n={value:o,done:!1},n}function Dg(){return{value:void 0,done:!0}}function lye(e){return Array.isArray(e)?!0:!!LM(e)}function Nhe(e){return!!(e&&typeof e.next=="function")}function d8(e){var t=LM(e);return t&&t.call(e)}function LM(e){var t=e&&(m8&&e[m8]||e[cye]);if(typeof t=="function")return t}function Gtt(e){var t=LM(e);return t&&t===e.entries}function Ntt(e){var t=LM(e);return t&&t===e.keys}var mR="delete",oA=5,sd=1<<oA,Sg=sd-1,hi={};function p8(){return{value:!1}}function Cp(e){e&&(e.value=!0)}function E8(){}function GD(e){return e.size===void 0&&(e.size=e.__iterate(uye)),e.size}function QQ(e,t){if(typeof t!="number"){var r=t>>>0;if(""+r!==t||r===4294967295)return NaN;t=r}return t<0?GD(e)+t:t}function uye(){return!0}function TM(e,t,r){return(e===0&&!mye(e)||r!==void 0&&e<=-r)&&(t===void 0||r!==void 0&&t>=r)}function dR(e,t){return gye(e,t,0)}function PM(e,t){return gye(e,t,t)}function gye(e,t,r){return e===void 0?r:mye(e)?t===1/0?t:Math.max(0,t+e)|0:t===void 0||t===e?e:Math.min(t,e)|0}function mye(e){return e<0||e===0&&1/e===-1/0}var dye="@@__IMMUTABLE_RECORD__@@";function v0(e){return!!(e&&e[dye])}function EI(e){return ld(e)||v0(e)}var EQ="@@__IMMUTABLE_ORDERED__@@";function QI(e){return!!(e&&e[EQ])}var pye="@@__IMMUTABLE_SEQ__@@";function b8(e){return!!(e&&e[pye])}var JD=Object.prototype.hasOwnProperty;function fye(e){return Array.isArray(e)||typeof e=="string"?!0:e&&typeof e=="object"&&Number.isInteger(e.length)&&e.length>=0&&(e.length===0?Object.keys(e).length===1:e.hasOwnProperty(e.length-1))}var ym=(function(e){function t(r){return r==null?S8():EI(r)?r.toSeq():ktt(r)}return e&&(t.__proto__=e),t.prototype=Object.create(e&&e.prototype),t.prototype.constructor=t,t.prototype.toSeq=function(){return this},t.prototype.toString=function(){return this.__toString("Seq {","}")},t.prototype.cacheResult=function(){return!this._cache&&this.__iterateUncached&&(this._cache=this.entrySeq().toArray(),this.size=this._cache.length),this},t.prototype.__iterate=function(n,o){var i=this._cache;if(i){for(var a=i.length,A=0;A!==a;){var s=i[o?a-++A:A++];if(n(s[1],s[0],this)===!1)break}return A}return this.__iterateUncached(n,o)},t.prototype.__iterator=function(n,o){var i=this._cache;if(i){var a=i.length,A=0;return new $i(function(){if(A===a)return Dg();var s=i[o?a-++A:A++];return zA(n,s[0],s[1])})}return this.__iteratorUncached(n,o)},t})(Vu),SQ=(function(e){function t(r){return r==null?S8().toKeyedSeq():ld(r)?JA(r)?r.toSeq():r.fromEntrySeq():v0(r)?r.toSeq():D8(r)}return e&&(t.__proto__=e),t.prototype=Object.create(e&&e.prototype),t.prototype.constructor=t,t.prototype.toKeyedSeq=function(){return this},t})(ym),jf=(function(e){function t(r){return r==null?S8():ld(r)?JA(r)?r.entrySeq():r.toIndexedSeq():v0(r)?r.toSeq().entrySeq():Bye(r)}return e&&(t.__proto__=e),t.prototype=Object.create(e&&e.prototype),t.prototype.constructor=t,t.of=function(){return t(arguments)},t.prototype.toIndexedSeq=function(){return this},t.prototype.toString=function(){return this.__toString("Seq [","]")},t})(ym),zD=(function(e){function t(r){return(ld(r)&&!Q8(r)?r:jf(r)).toSetSeq()}return e&&(t.__proto__=e),t.prototype=Object.create(e&&e.prototype),t.prototype.constructor=t,t.of=function(){return t(arguments)},t.prototype.toSetSeq=function(){return this},t})(ym);ym.isSeq=b8;ym.Keyed=SQ;ym.Set=zD;ym.Indexed=jf;ym.prototype[pye]=!0;var ND=(function(e){function t(r){this._array=r,this.size=r.length}return e&&(t.__proto__=e),t.prototype=Object.create(e&&e.prototype),t.prototype.constructor=t,t.prototype.get=function(n,o){return this.has(n)?this._array[QQ(this,n)]:o},t.prototype.__iterate=function(n,o){for(var i=this._array,a=i.length,A=0;A!==a;){var s=o?a-++A:A++;if(n(i[s],s,this)===!1)break}return A},t.prototype.__iterator=function(n,o){var i=this._array,a=i.length,A=0;return new $i(function(){if(A===a)return Dg();var s=o?a-++A:A++;return zA(n,s,i[s])})},t})(jf),x8=(function(e){function t(r){var n=Object.keys(r).concat(Object.getOwnPropertySymbols?Object.getOwnPropertySymbols(r):[]);this._object=r,this._keys=n,this.size=n.length}return e&&(t.__proto__=e),t.prototype=Object.create(e&&e.prototype),t.prototype.constructor=t,t.prototype.get=function(n,o){return o!==void 0&&!this.has(n)?o:this._object[n]},t.prototype.has=function(n){return JD.call(this._object,n)},t.prototype.__iterate=function(n,o){for(var i=this._object,a=this._keys,A=a.length,s=0;s!==A;){var c=a[o?A-++s:s++];if(n(i[c],c,this)===!1)break}return s},t.prototype.__iterator=function(n,o){var i=this._object,a=this._keys,A=a.length,s=0;return new $i(function(){if(s===A)return Dg();var c=a[o?A-++s:s++];return zA(n,c,i[c])})},t})(SQ);x8.prototype[EQ]=!0;var Mtt=(function(e){function t(r){this._collection=r,this.size=r.length||r.size}return e&&(t.__proto__=e),t.prototype=Object.create(e&&e.prototype),t.prototype.constructor=t,t.prototype.__iterateUncached=function(n,o){if(o)return this.cacheResult().__iterate(n,o);var i=this._collection,a=d8(i),A=0;if(Nhe(a))for(var s;!(s=a.next()).done&&n(s.value,A++,this)!==!1;);return A},t.prototype.__iteratorUncached=function(n,o){if(o)return this.cacheResult().__iterator(n,o);var i=this._collection,a=d8(i);if(!Nhe(a))return new $i(Dg);var A=0;return new $i(function(){var s=a.next();return s.done?s:zA(n,A++,s.value)})},t})(jf),Mhe;function S8(){return Mhe||(Mhe=new ND([]))}function D8(e){var t=v8(e);if(t)return t.fromEntrySeq();if(typeof e=="object")return new x8(e);throw new TypeError("Expected Array or collection object of [k, v] entries, or keyed object: "+e)}function Bye(e){var t=v8(e);if(t)return t;throw new TypeError("Expected Array or collection object of values: "+e)}function ktt(e){var t=v8(e);if(t)return Gtt(e)?t.fromEntrySeq():Ntt(e)?t.toSetSeq():t;if(typeof e=="object")return new x8(e);throw new TypeError("Expected Array or collection object of values, or keyed object: "+e)}function v8(e){return fye(e)?new ND(e):lye(e)?new Mtt(e):void 0}function pR(){return this.__ensureOwner()}function fR(){return this.__ownerID?this:this.__ensureOwner(new E8)}var rR=typeof Math.imul=="function"&&Math.imul(4294967295,2)===-2?Math.imul:function(t,r){t|=0,r|=0;var n=t&65535,o=r&65535;return n*o+((t>>>16)*o+n*(r>>>16)<<16>>>0)|0};function GM(e){return e>>>1&1073741824|e&3221225471}var Htt=Object.prototype.valueOf;function hm(e){if(e==null)return khe(e);if(typeof e.hashCode=="function")return GM(e.hashCode(e));var t=Ktt(e);if(t==null)return khe(t);switch(typeof t){case"boolean":return t?1108378657:1108378656;case"number":return Vtt(t);case"string":return t.length>jtt?_tt(t):f8(t);case"object":case"function":return Jtt(t);case"symbol":return Ott(t);default:if(typeof t.toString=="function")return f8(t.toString());throw new Error("Value type "+typeof t+" cannot be hashed.")}}function khe(e){return e===null?1108378658:1108378659}function Vtt(e){if(e!==e||e===1/0)return 0;var t=e|0;for(t!==e&&(t^=e*4294967295);e>4294967295;)e/=4294967295,t^=e;return GM(t)}function _tt(e){var t=c8[e];return t===void 0&&(t=f8(e),s8===Wtt&&(s8=0,c8={}),s8++,c8[e]=t),t}function f8(e){for(var t=0,r=0;r<e.length;r++)t=31*t+e.charCodeAt(r)|0;return GM(t)}var Ytt=(Math.random()*1048576|1)%1048576||40503;function F8(e){if(typeof e!="string")return hm(e);for(var t=0,r=0;r<e.length;r++)t=Ytt*t+e.charCodeAt(r)|0;return t}function Ott(e){var t=_he[e];return t!==void 0||(t=Iye(),_he[e]=t),t}function Jtt(e){var t;if(B8&&(t=I8.get(e),t!==void 0)||(t=e[S0],t!==void 0)||!Vhe&&(t=e.propertyIsEnumerable&&e.propertyIsEnumerable[S0],t!==void 0||(t=ztt(e),t!==void 0)))return t;if(t=Iye(),B8)I8.set(e,t);else{if(Hhe!==void 0&&Hhe(e)===!1)throw new Error("Non-extensible objects are not allowed as keys.");if(Vhe)Object.defineProperty(e,S0,{enumerable:!1,configurable:!1,writable:!1,value:t});else if(e.propertyIsEnumerable!==void 0&&e.propertyIsEnumerable===e.constructor.prototype.propertyIsEnumerable)e.propertyIsEnumerable=function(){return this.constructor.prototype.propertyIsEnumerable.apply(this,arguments)},e.propertyIsEnumerable[S0]=t;else if(e.nodeType!==void 0)e[S0]=t;else throw new Error("Unable to set a non-enumerable property on object.")}return t}var Hhe=Object.isExtensible,Vhe=(function(){try{return Object.defineProperty({},"@",{}),!0}catch{return!1}})();function ztt(e){if(e&&e.nodeType>0)switch(e.nodeType){case 1:return e.uniqueID;case 9:return e.documentElement&&e.documentElement.uniqueID}}function Ktt(e){return e.valueOf!==Htt&&typeof e.valueOf=="function"?e.valueOf(e):e}function Iye(){var e=++A8;return A8&1073741824&&(A8=0),e}var B8=typeof WeakMap=="function",I8;B8&&(I8=new WeakMap);var _he=Object.create(null),A8=0,S0="__immutablehash__";typeof Symbol=="function"&&(S0=Symbol(S0));var jtt=16,Wtt=255,s8=0,c8={},NM=(function(e){function t(r,n){this._iter=r,this._useKeys=n,this.size=r.size}return e&&(t.__proto__=e),t.prototype=Object.create(e&&e.prototype),t.prototype.constructor=t,t.prototype.get=function(n,o){return this._iter.get(n,o)},t.prototype.has=function(n){return this._iter.has(n)},t.prototype.valueSeq=function(){return this._iter.valueSeq()},t.prototype.reverse=function(){var n=this,o=w8(this,!0);return this._useKeys||(o.valueSeq=function(){return n._iter.toSeq().reverse()}),o},t.prototype.map=function(n,o){var i=this,a=Eye(this,n,o);return this._useKeys||(a.valueSeq=function(){return i._iter.toSeq().map(n,o)}),a},t.prototype.__iterate=function(n,o){var i=this;return this._iter.__iterate(function(a,A){return n(a,A,i)},o)},t.prototype.__iterator=function(n,o){return this._iter.__iterator(n,o)},t})(SQ);NM.prototype[EQ]=!0;var Cye=(function(e){function t(r){this._iter=r,this.size=r.size}return e&&(t.__proto__=e),t.prototype=Object.create(e&&e.prototype),t.prototype.constructor=t,t.prototype.includes=function(n){return this._iter.includes(n)},t.prototype.__iterate=function(n,o){var i=this,a=0;return o&&GD(this),this._iter.__iterate(function(A){return n(A,o?i.size-++a:a++,i)},o)},t.prototype.__iterator=function(n,o){var i=this,a=this._iter.__iterator(ud,o),A=0;return o&&GD(this),new $i(function(){var s=a.next();return s.done?s:zA(n,o?i.size-++A:A++,s.value,s)})},t})(jf),hye=(function(e){function t(r){this._iter=r,this.size=r.size}return e&&(t.__proto__=e),t.prototype=Object.create(e&&e.prototype),t.prototype.constructor=t,t.prototype.has=function(n){return this._iter.includes(n)},t.prototype.__iterate=function(n,o){var i=this;return this._iter.__iterate(function(a){return n(a,a,i)},o)},t.prototype.__iterator=function(n,o){var i=this._iter.__iterator(ud,o);return new $i(function(){var a=i.next();return a.done?a:zA(n,a.value,a.value,a)})},t})(zD),yye=(function(e){function t(r){this._iter=r,this.size=r.size}return e&&(t.__proto__=e),t.prototype=Object.create(e&&e.prototype),t.prototype.constructor=t,t.prototype.entrySeq=function(){return this._iter.toSeq()},t.prototype.__iterate=function(n,o){var i=this;return this._iter.__iterate(function(a){if(a){Ohe(a);var A=ld(a);return n(A?a.get(1):a[1],A?a.get(0):a[0],i)}},o)},t.prototype.__iterator=function(n,o){var i=this._iter.__iterator(ud,o);return new $i(function(){for(;;){var a=i.next();if(a.done)return a;var A=a.value;if(A){Ohe(A);var s=ld(A);return zA(n,s?A.get(0):A[0],s?A.get(1):A[1],a)}}})},t})(SQ);Cye.prototype.cacheResult=NM.prototype.cacheResult=hye.prototype.cacheResult=yye.prototype.cacheResult=L8;function Qye(e){var t=bI(e);return t._iter=e,t.size=e.size,t.flip=function(){return e},t.reverse=function(){var r=e.reverse.apply(this);return r.flip=function(){return e.reverse()},r},t.has=function(r){return e.includes(r)},t.includes=function(r){return e.has(r)},t.cacheResult=L8,t.__iterateUncached=function(r,n){var o=this;return e.__iterate(function(i,a){return r(a,i,o)!==!1},n)},t.__iteratorUncached=function(r,n){if(r===gd){var o=e.__iterator(r,n);return new $i(function(){var i=o.next();if(!i.done){var a=i.value[0];i.value[0]=i.value[1],i.value[1]=a}return i})}return e.__iterator(r===ud?OD:ud,n)},t}function Eye(e,t,r){var n=bI(e);return n.size=e.size,n.has=function(o){return e.has(o)},n.get=function(o,i){var a=e.get(o,hi);return a===hi?i:t.call(r,a,o,e)},n.__iterateUncached=function(o,i){var a=this;return e.__iterate(function(A,s,c){return o(t.call(r,A,s,c),s,a)!==!1},i)},n.__iteratorUncached=function(o,i){var a=e.__iterator(gd,i);return new $i(function(){var A=a.next();if(A.done)return A;var s=A.value,c=s[0];return zA(o,c,t.call(r,s[1],c,e),A)})},n}function w8(e,t){var r=bI(e);return r._iter=e,r.size=e.size,r.reverse=function(){return e},e.flip&&(r.flip=function(){var n=Qye(e);return n.reverse=function(){return e.flip()},n}),r.get=function(n,o){return e.get(t?n:-1-n,o)},r.has=function(n){return e.has(t?n:-1-n)},r.includes=function(n){return e.includes(n)},r.cacheResult=L8,r.__iterate=function(n,o){var i=this,a=0;return o&&GD(e),e.__iterate(function(A,s){return n(A,t?s:o?i.size-++a:a++,i)},!o)},r.__iterator=function(n,o){var i=0;o&&GD(e);var a=e.__iterator(gd,!o);return new $i(function(){var A=a.next();if(A.done)return A;var s=A.value;return zA(n,t?s[0]:o?r.size-++i:i++,s[1],A)})},r}function bye(e,t,r,n){var o=bI(e);return n&&(o.has=function(i){var a=e.get(i,hi);return a!==hi&&!!t.call(r,a,i,e)},o.get=function(i,a){var A=e.get(i,hi);return A!==hi&&t.call(r,A,i,e)?A:a}),o.__iterateUncached=function(i,a){var A=this,s=0;return e.__iterate(function(c,l,u){if(t.call(r,c,l,u))return s++,i(c,n?l:s-1,A)},a),s},o.__iteratorUncached=function(i,a){var A=e.__iterator(gd,a),s=0;return new $i(function(){for(;;){var c=A.next();if(c.done)return c;var l=c.value,u=l[0],g=l[1];if(t.call(r,g,u,e))return zA(i,n?u:s++,g,c)}})},o}function Xtt(e,t,r){var n=dd().asMutable();return e.__iterate(function(o,i){n.update(t.call(r,o,i,e),0,function(a){return a+1})}),n.asImmutable()}function Ztt(e,t,r){var n=JA(e),o=(QI(e)?Cc():dd()).asMutable();e.__iterate(function(a,A){o.update(t.call(r,a,A,e),function(s){return s=s||[],s.push(n?[A,a]:a),s})});var i=U8(e);return o.map(function(a){return nA(e,i(a))}).asImmutable()}function qtt(e,t,r){var n=JA(e),o=[[],[]];e.__iterate(function(a,A){o[t.call(r,a,A,e)?1:0].push(n?[A,a]:a)});var i=U8(e);return o.map(function(a){return nA(e,i(a))})}function R8(e,t,r,n){var o=e.size;if(TM(t,r,o))return e;if(typeof o>"u"&&(t<0||r<0))return R8(e.toSeq().cacheResult(),t,r,n);var i=dR(t,o),a=PM(r,o),A=a-i,s;A===A&&(s=A<0?0:A);var c=bI(e);return c.size=s===0?s:e.size&&s||void 0,!n&&b8(e)&&s>=0&&(c.get=function(l,u){return l=QQ(this,l),l>=0&&l<s?e.get(l+i,u):u}),c.__iterateUncached=function(l,u){var g=this;if(s===0)return 0;if(u)return this.cacheResult().__iterate(l,u);var m=0,p=!0,d=0;return e.__iterate(function(f,I){if(!(p&&(p=m++<i)))return d++,l(f,n?I:d-1,g)!==!1&&d!==s}),d},c.__iteratorUncached=function(l,u){if(s!==0&&u)return this.cacheResult().__iterator(l,u);if(s===0)return new $i(Dg);var g=e.__iterator(l,u),m=0,p=0;return new $i(function(){for(;m++<i;)g.next();if(++p>s)return Dg();var d=g.next();return n||l===ud||d.done?d:l===OD?zA(l,p-1,void 0,d):zA(l,p-1,d.value[1],d)})},c}function $tt(e,t,r){var n=bI(e);return n.__iterateUncached=function(o,i){var a=this;if(i)return this.cacheResult().__iterate(o,i);var A=0;return e.__iterate(function(s,c,l){return t.call(r,s,c,l)&&++A&&o(s,c,a)}),A},n.__iteratorUncached=function(o,i){var a=this;if(i)return this.cacheResult().__iterator(o,i);var A=e.__iterator(gd,i),s=!0;return new $i(function(){if(!s)return Dg();var c=A.next();if(c.done)return c;var l=c.value,u=l[0],g=l[1];return t.call(r,g,u,a)?o===gd?c:zA(o,u,g,c):(s=!1,Dg())})},n}function xye(e,t,r,n){var o=bI(e);return o.__iterateUncached=function(i,a){var A=this;if(a)return this.cacheResult().__iterate(i,a);var s=!0,c=0;return e.__iterate(function(l,u,g){if(!(s&&(s=t.call(r,l,u,g))))return c++,i(l,n?u:c-1,A)}),c},o.__iteratorUncached=function(i,a){var A=this;if(a)return this.cacheResult().__iterator(i,a);var s=e.__iterator(gd,a),c=!0,l=0;return new $i(function(){var u,g,m;do{if(u=s.next(),u.done)return n||i===ud?u:i===OD?zA(i,l++,void 0,u):zA(i,l++,u.value[1],u);var p=u.value;g=p[0],m=p[1],c&&(c=t.call(r,m,g,A))}while(c);return i===gd?u:zA(i,g,m,u)})},o}var ert=(function(e){function t(r){this._wrappedIterables=r.flatMap(function(n){return n._wrappedIterables?n._wrappedIterables:[n]}),this.size=this._wrappedIterables.reduce(function(n,o){if(n!==void 0){var i=o.size;if(i!==void 0)return n+i}},0),this[FM]=this._wrappedIterables[0][FM],this[vM]=this._wrappedIterables[0][vM],this[EQ]=this._wrappedIterables[0][EQ]}return e&&(t.__proto__=e),t.prototype=Object.create(e&&e.prototype),t.prototype.constructor=t,t.prototype.__iterateUncached=function(n,o){if(this._wrappedIterables.length!==0){if(o)return this.cacheResult().__iterate(n,o);for(var i=0,a=JA(this),A=a?gd:ud,s=this._wrappedIterables[i].__iterator(A,o),c=!0,l=0;c;){for(var u=s.next();u.done;){if(i++,i===this._wrappedIterables.length)return l;s=this._wrappedIterables[i].__iterator(A,o),u=s.next()}var g=a?n(u.value[1],u.value[0],this):n(u.value,l,this);c=g!==!1,l++}return l}},t.prototype.__iteratorUncached=function(n,o){var i=this;if(this._wrappedIterables.length===0)return new $i(Dg);if(o)return this.cacheResult().__iterator(n,o);var a=0,A=this._wrappedIterables[a].__iterator(n,o);return new $i(function(){for(var s=A.next();s.done;){if(a++,a===i._wrappedIterables.length)return s;A=i._wrappedIterables[a].__iterator(n,o),s=A.next()}return s})},t})(ym);function trt(e,t){var r=JA(e),n=[e].concat(t).map(function(i){return ld(i)?r&&(i=yp(i)):i=r?D8(i):Bye(Array.isArray(i)?i:[i]),i}).filter(function(i){return i.size!==0});if(n.length===0)return e;if(n.length===1){var o=n[0];if(o===e||r&&JA(o)||hp(e)&&hp(o))return o}return new ert(n)}function Sye(e,t,r){var n=bI(e);return n.__iterateUncached=function(o,i){if(i)return this.cacheResult().__iterate(o,i);var a=0,A=!1;function s(c,l){c.__iterate(function(u,g){return(!t||l<t)&&ld(u)?s(u,l+1):(a++,o(u,r?g:a-1,n)===!1&&(A=!0)),!A},i)}return s(e,0),a},n.__iteratorUncached=function(o,i){if(i)return this.cacheResult().__iterator(o,i);var a=e.__iterator(o,i),A=[],s=0;return new $i(function(){for(;a;){var c=a.next();if(c.done!==!1){a=A.pop();continue}var l=c.value;if(o===gd&&(l=l[1]),(!t||A.length<t)&&ld(l))A.push(a),a=l.__iterator(o,i);else return r?c:zA(o,s++,l,c)}return Dg()})},n}function rrt(e,t,r){var n=U8(e);return e.toSeq().map(function(o,i){return n(t.call(r,o,i,e))}).flatten(!0)}function nrt(e,t){var r=bI(e);return r.size=e.size&&e.size*2-1,r.__iterateUncached=function(n,o){var i=this,a=0;return e.__iterate(function(A){return(!a||n(t,a++,i)!==!1)&&n(A,a++,i)!==!1},o),a},r.__iteratorUncached=function(n,o){var i=e.__iterator(ud,o),a=0,A;return new $i(function(){return(!A||a%2)&&(A=i.next(),A.done)?A:a%2?zA(n,a++,t):zA(n,a++,A.value,A)})},r}function MD(e,t,r){t||(t=Dye);var n=JA(e),o=0,i=e.toSeq().map(function(a,A){return[A,a,o++,r?r(a,A,e):a]}).valueSeq().toArray();return i.sort(function(a,A){return t(a[3],A[3])||a[2]-A[2]}).forEach(n?function(a,A){i[A].length=2}:function(a,A){i[A]=a[1]}),n?SQ(i):hp(e)?jf(i):zD(i)}function QM(e,t,r){if(t||(t=Dye),r){var n=e.toSeq().map(function(o,i){return[o,r(o,i,e)]}).reduce(function(o,i){return Yhe(t,o[1],i[1])?i:o});return n&&n[0]}return e.reduce(function(o,i){return Yhe(t,o,i)?i:o})}function Yhe(e,t,r){var n=e(r,t);return n===0&&r!==t&&(r==null||r!==r)||n>0}function EM(e,t,r,n){var o=bI(e),i=new ND(r).map(function(a){return a.size});return o.size=n?i.max():i.min(),o.__iterate=function(a,A){for(var s=this.__iterator(ud,A),c,l=0;!(c=s.next()).done&&a(c.value,l++,this)!==!1;);return l},o.__iteratorUncached=function(a,A){var s=r.map(function(u){return u=Vu(u),d8(A?u.reverse():u)}),c=0,l=!1;return new $i(function(){var u;return l||(u=s.map(function(g){return g.next()}),l=n?u.every(function(g){return g.done}):u.some(function(g){return g.done})),l?Dg():zA(a,c++,t.apply(null,u.map(function(g){return g.value})))})},o}function nA(e,t){return e===t?e:b8(e)?t:e.constructor(t)}function Ohe(e){if(e!==Object(e))throw new TypeError("Expected [K, V] tuple: "+e)}function U8(e){return JA(e)?yp:hp(e)?D0:YD}function bI(e){return Object.create((JA(e)?SQ:hp(e)?jf:zD).prototype)}function L8(){return this._iter.cacheResult?(this._iter.cacheResult(),this.size=this._iter.size,this):ym.prototype.cacheResult.call(this)}function Dye(e,t){return e===void 0&&t===void 0?0:e===void 0?1:t===void 0?-1:e>t?1:e<t?-1:0}function Jhe(e){return!!(e&&typeof e.equals=="function"&&typeof e.hashCode=="function")}function cd(e,t){if(e===t||e!==e&&t!==t)return!0;if(!e||!t)return!1;if(typeof e.valueOf=="function"&&typeof t.valueOf=="function"){if(e=e.valueOf(),t=t.valueOf(),e===t||e!==e&&t!==t)return!0;if(!e||!t)return!1}return!!(Jhe(e)&&Jhe(t)&&e.equals(t))}function vye(e,t,r,n){return KD(e,[t],r,n)}function Fye(){for(var e=[],t=arguments.length;t--;)e[t]=arguments[t];return Rye(this,e)}function wye(e){for(var t=[],r=arguments.length-1;r-- >0;)t[r]=arguments[r+1];if(typeof e!="function")throw new TypeError("Invalid merger function: "+e);return Rye(this,t,e)}function Rye(e,t,r){for(var n=[],o=0;o<t.length;o++){var i=yp(t[o]);i.size!==0&&n.push(i)}return n.length===0?e:e.toSeq().size===0&&!e.__ownerID&&n.length===1?v0(e)?e:e.constructor(n[0]):e.withMutations(function(a){for(var A=r?function(c,l){vye(a,l,hi,function(u){return u===hi?c:r(u,c,l)})}:function(c,l){a.set(l,c)},s=0;s<n.length;s++)n[s].forEach(A)})}var ort=Object.prototype.toString;function irt(e){if(!e||typeof e!="object"||ort.call(e)!=="[object Object]")return!1;var t=Object.getPrototypeOf(e);if(t===null)return!0;for(var r=t,n=Object.getPrototypeOf(t);n!==null;)r=n,n=Object.getPrototypeOf(r);return r===t}function bQ(e){return typeof e=="object"&&(EI(e)||Array.isArray(e)||irt(e))}function BR(e){return typeof e=="string"&&(e==="__proto__"||e==="constructor")}function hI(e,t){t=t||0;for(var r=Math.max(0,e.length-t),n=new Array(r),o=0;o<r;o++)n[o]=e[o+t];return n}function wM(e){if(Array.isArray(e))return hI(e);var t={};for(var r in e)BR(r)||JD.call(e,r)&&(t[r]=e[r]);return t}function T8(e,t,r){return P8(e,t,art(r))}function P8(e,t,r){if(!bQ(e))throw new TypeError("Cannot merge into non-data-structure value: "+e);if(EI(e))return typeof r=="function"&&e.mergeWith?e.mergeWith.apply(e,[r].concat(t)):e.merge?e.merge.apply(e,t):e.concat.apply(e,t);for(var n=Array.isArray(e),o=e,i=n?D0:yp,a=n?function(s){o===e&&(o=wM(o)),o.push(s)}:function(s,c){if(!BR(c)){var l=JD.call(o,c),u=l&&r?r(o[c],s,c):s;(!l||u!==o[c])&&(o===e&&(o=wM(o)),o[c]=u)}},A=0;A<t.length;A++)i(t[A]).forEach(a);return o}function art(e){function t(r,n,o){return bQ(r)&&bQ(n)&&Art(r,n)?P8(r,[n],t):e?e(r,n,o):n}return t}function Art(e,t){var r=ym(e),n=ym(t);return hp(r)===hp(n)&&JA(r)===JA(n)}function Uye(){for(var e=[],t=arguments.length;t--;)e[t]=arguments[t];return T8(this,e)}function Lye(e){for(var t=[],r=arguments.length-1;r-- >0;)t[r]=arguments[r+1];return T8(this,t,e)}function G8(e){for(var t=[],r=arguments.length-1;r-- >0;)t[r]=arguments[r+1];return KD(this,e,yI(),function(n){return T8(n,t)})}function N8(e){for(var t=[],r=arguments.length-1;r-- >0;)t[r]=arguments[r+1];return KD(this,e,yI(),function(n){return P8(n,t)})}function srt(e,t,r){return KD(e,t,hi,function(){return r})}function M8(e,t){return srt(this,e,t)}function k8(e,t,r){return arguments.length===1?e(this):vye(this,e,t,r)}function H8(e,t,r){return KD(this,e,t,r)}function V8(){return this.__altered}function IR(e){var t=this.asMutable();return e(t),t.wasAltered()?t.__ensureOwner(this.__ownerID):this}var Tye="@@__IMMUTABLE_MAP__@@";function _8(e){return!!(e&&e[Tye])}function aR(e,t){if(!e)throw new Error(t)}function Ad(e){aR(e!==1/0,"Cannot perform this action with an infinite size.")}var dd=(function(e){function t(r){return r==null?yI():_8(r)&&!QI(r)?r:yI().withMutations(function(n){var o=e(r);Ad(o.size),o.forEach(function(i,a){return n.set(a,i)})})}return e&&(t.__proto__=e),t.prototype=Object.create(e&&e.prototype),t.prototype.constructor=t,t.prototype.toString=function(){return this.__toString("Map {","}")},t.prototype.get=function(n,o){return this._root?this._root.get(0,void 0,n,o):o},t.prototype.set=function(n,o){return jhe(this,n,o)},t.prototype.remove=function(n){return jhe(this,n,hi)},t.prototype.deleteAll=function(n){var o=Vu(n);return o.size===0?this:this.withMutations(function(i){o.forEach(function(a){return i.remove(a)})})},t.prototype.clear=function(){return this.size===0?this:this.__ownerID?(this.size=0,this._root=null,this.__hash=void 0,this.__altered=!0,this):yI()},t.prototype.sort=function(n){return Cc(MD(this,n))},t.prototype.sortBy=function(n,o){return Cc(MD(this,o,n))},t.prototype.map=function(n,o){var i=this;return this.withMutations(function(a){a.forEach(function(A,s){a.set(s,n.call(o,A,s,i))})})},t.prototype.__iterator=function(n,o){return new crt(this,n,o)},t.prototype.__iterate=function(n,o){var i=this,a=0;return this._root&&this._root.iterate(function(A){return a++,n(A[1],A[0],i)},o),a},t.prototype.__ensureOwner=function(n){return n===this.__ownerID?this:n?Y8(this.size,this._root,n,this.__hash):this.size===0?yI():(this.__ownerID=n,this.__altered=!1,this)},t})(yp);dd.isMap=_8;var wA=dd.prototype;wA[Tye]=!0;wA[mR]=wA.remove;wA.removeAll=wA.deleteAll;wA.setIn=M8;wA.removeIn=wA.deleteIn=z8;wA.update=k8;wA.updateIn=H8;wA.merge=wA.concat=Fye;wA.mergeWith=wye;wA.mergeDeep=Uye;wA.mergeDeepWith=Lye;wA.mergeIn=N8;wA.mergeDeepIn=G8;wA.withMutations=IR;wA.wasAltered=V8;wA.asImmutable=pR;wA["@@transducer/init"]=wA.asMutable=fR;wA["@@transducer/step"]=function(e,t){return e.set(t[0],t[1])};wA["@@transducer/result"]=function(e){return e.asImmutable()};var sR=function(t,r){this.ownerID=t,this.entries=r};sR.prototype.get=function(t,r,n,o){for(var i=this.entries,a=0,A=i.length;a<A;a++)if(cd(n,i[a][0]))return i[a][1];return o};sR.prototype.update=function(t,r,n,o,i,a,A){for(var s=i===hi,c=this.entries,l=0,u=c.length;l<u&&!cd(o,c[l][0]);l++);var g=l<u;if(g?c[l][1]===i:s)return this;if(Cp(A),(s||!g)&&Cp(a),!(s&&c.length===1)){if(!g&&!s&&c.length>=prt)return lrt(t,c,o,i);var m=t&&t===this.ownerID,p=m?c:hI(c);return g?s?l===u-1?p.pop():p[l]=p.pop():p[l]=[o,i]:p.push([o,i]),m?(this.entries=p,this):new sR(t,p)}};var kD=function(t,r,n){this.ownerID=t,this.bitmap=r,this.nodes=n};kD.prototype.get=function(t,r,n,o){r===void 0&&(r=hm(n));var i=1<<((t===0?r:r>>>t)&Sg),a=this.bitmap;return(a&i)===0?o:this.nodes[Pye(a&i-1)].get(t+oA,r,n,o)};kD.prototype.update=function(t,r,n,o,i,a,A){n===void 0&&(n=hm(o));var s=(r===0?n:n>>>r)&Sg,c=1<<s,l=this.bitmap,u=(l&c)!==0;if(!u&&i===hi)return this;var g=Pye(l&c-1),m=this.nodes,p=u?m[g]:void 0,d=O8(p,t,r+oA,n,o,i,a,A);if(d===p)return this;if(!u&&d&&m.length>=frt)return grt(t,m,l,s,d);if(u&&!d&&m.length===2&&Whe(m[g^1]))return m[g^1];if(u&&d&&m.length===1&&Whe(d))return d;var f=t&&t===this.ownerID,I=u?d?l:l^c:l|c,C=u?d?Gye(m,g,d,f):drt(m,g,f):mrt(m,g,d,f);return f?(this.bitmap=I,this.nodes=C,this):new kD(t,I,C)};var cR=function(t,r,n){this.ownerID=t,this.count=r,this.nodes=n};cR.prototype.get=function(t,r,n,o){r===void 0&&(r=hm(n));var i=(t===0?r:r>>>t)&Sg,a=this.nodes[i];return a?a.get(t+oA,r,n,o):o};cR.prototype.update=function(t,r,n,o,i,a,A){n===void 0&&(n=hm(o));var s=(r===0?n:n>>>r)&Sg,c=i===hi,l=this.nodes,u=l[s];if(c&&!u)return this;var g=O8(u,t,r+oA,n,o,i,a,A);if(g===u)return this;var m=this.count;if(!u)m++;else if(!g&&(m--,m<Brt))return urt(t,l,m,s);var p=t&&t===this.ownerID,d=Gye(l,s,g,p);return p?(this.count=m,this.nodes=d,this):new cR(t,m,d)};var xQ=function(t,r,n){this.ownerID=t,this.keyHash=r,this.entries=n,this._index=void 0};xQ.prototype._positionOf=function(t,r){var n=this.entries,o=this._index;if(o===void 0&&r&&n.length>=Irt&&(o=this._buildIndex()),o!==void 0){var i=o[F8(t)];if(i!==void 0)for(var a=0;a<i.length;a++){var A=i[a];if(cd(t,n[A][0]))return A}return-1}for(var s=0,c=n.length;s<c;s++)if(cd(t,n[s][0]))return s;return-1};xQ.prototype._buildIndex=function(){for(var t=Object.create(null),r=this.entries,n=0,o=r.length;n<o;n++){var i=F8(r[n][0]),a=t[i];a!==void 0?a.push(n):t[i]=[n]}return this._index=t,t};xQ.prototype.get=function(t,r,n,o){var i=this._positionOf(n,!0);return i===-1?o:this.entries[i][1]};xQ.prototype.update=function(t,r,n,o,i,a,A){n===void 0&&(n=hm(o));var s=i===hi;if(n!==this.keyHash)return s?this:(Cp(A),Cp(a),J8(this,t,r,n,[o,i]));var c=this.entries,l=c.length,u=t&&t===this.ownerID,g=this._positionOf(o,u),m=g===-1?l:g,p=g!==-1;if(p?c[m][1]===i:s)return this;if(Cp(A),(s||!p)&&Cp(a),s&&l===2)return new yh(t,this.keyHash,c[m^1]);var d=u?c:hI(c);if(p)s?(m===l-1?d.pop():d[m]=d.pop(),u&&(this._index=void 0)):d[m]=[o,i];else if(d.push([o,i]),u&&this._index!==void 0){var f=F8(o),I=this._index[f];I!==void 0?I.push(l):this._index[f]=[l]}return u?(this.entries=d,this):new xQ(t,this.keyHash,d)};var yh=function(t,r,n){this.ownerID=t,this.keyHash=r,this.entry=n};yh.prototype.get=function(t,r,n,o){return cd(n,this.entry[0])?this.entry[1]:o};yh.prototype.update=function(t,r,n,o,i,a,A){var s=i===hi,c=cd(o,this.entry[0]);if(c?i===this.entry[1]:s)return this;if(Cp(A),s){Cp(a);return}return c?t&&t===this.ownerID?(this.entry[1]=i,this):new yh(t,this.keyHash,[o,i]):(Cp(a),J8(this,t,r,hm(o),[o,i]))};sR.prototype.iterate=xQ.prototype.iterate=function(e,t){for(var r=this.entries,n=0,o=r.length-1;n<=o;n++)if(e(r[t?o-n:n])===!1)return!1};kD.prototype.iterate=cR.prototype.iterate=function(e,t){for(var r=this.nodes,n=0,o=r.length-1;n<=o;n++){var i=r[t?o-n:n];if(i&&i.iterate(e,t)===!1)return!1}};yh.prototype.iterate=function(e,t){return e(this.entry)};var crt=(function(e){function t(r,n,o){this._type=n,this._reverse=o,this._stack=r._root&&zhe(r._root)}return e&&(t.__proto__=e),t.prototype=Object.create(e&&e.prototype),t.prototype.constructor=t,t.prototype.next=function(){for(var n=this._type,o=this._stack;o;){var i=o.node,a=o.index++,A=void 0;if(i.entry){if(a===0)return l8(n,i.entry)}else if(i.entries){if(A=i.entries.length-1,a<=A)return l8(n,i.entries[this._reverse?A-a:a])}else if(A=i.nodes.length-1,a<=A){var s=i.nodes[this._reverse?A-a:a];if(s){if(s.entry)return l8(n,s.entry);o=this._stack=zhe(s,o)}continue}o=this._stack=this._stack.__prev}return Dg()},t})($i);function l8(e,t){return zA(e,t[0],t[1])}function zhe(e,t){return{node:e,index:0,__prev:t}}function Y8(e,t,r,n){var o=Object.create(wA);return o.size=e,o._root=t,o.__ownerID=r,o.__hash=n,o.__altered=!1,o}var Khe;function yI(){return Khe||(Khe=Y8(0))}function jhe(e,t,r){var n,o;if(e._root){var i=p8(),a=p8();if(n=O8(e._root,e.__ownerID,0,void 0,t,r,i,a),!a.value)return e;o=e.size+(i.value?r===hi?-1:1:0)}else{if(r===hi)return e;o=1,n=new sR(e.__ownerID,[[t,r]])}return e.__ownerID?(e.size=o,e._root=n,e.__hash=void 0,e.__altered=!0,e):n?Y8(o,n):yI()}function O8(e,t,r,n,o,i,a,A){return e?e.update(t,r,n,o,i,a,A):i===hi?e:(Cp(A),Cp(a),new yh(t,n,[o,i]))}function Whe(e){return e.constructor===yh||e.constructor===xQ}function J8(e,t,r,n,o){if(e.keyHash===n)return new xQ(t,n,[e.entry,o]);var i=(r===0?e.keyHash:e.keyHash>>>r)&Sg,a=(r===0?n:n>>>r)&Sg,A,s=i===a?[J8(e,t,r+oA,n,o)]:(A=new yh(t,n,o),i<a?[e,A]:[A,e]);return new kD(t,1<<i|1<<a,s)}function lrt(e,t,r,n){e||(e=new E8);for(var o=new yh(e,hm(r),[r,n]),i=0;i<t.length;i++){var a=t[i];o=o.update(e,0,void 0,a[0],a[1])}return o}function urt(e,t,r,n){for(var o=0,i=0,a=new Array(r),A=0,s=1,c=t.length;A<c;A++,s<<=1){var l=t[A];l!==void 0&&A!==n&&(o|=s,a[i++]=l)}return new kD(e,o,a)}function grt(e,t,r,n,o){for(var i=0,a=new Array(sd),A=0;r!==0;A++,r>>>=1)a[A]=r&1?t[i++]:void 0;return a[n]=o,new cR(e,i+1,a)}function Pye(e){return e-=e>>1&1431655765,e=(e&858993459)+(e>>2&858993459),e=e+(e>>4)&252645135,e+=e>>8,e+=e>>16,e&127}function Gye(e,t,r,n){var o=n?e:hI(e);return o[t]=r,o}function mrt(e,t,r,n){var o=e.length+1;if(n&&t+1===o)return e[t]=r,e;for(var i=new Array(o),a=0,A=0;A<o;A++)A===t?(i[A]=r,a=-1):i[A]=e[A+a];return i}function drt(e,t,r){var n=e.length-1;if(r&&t===n)return e.pop(),e;for(var o=new Array(n),i=0,a=0;a<n;a++)a===t&&(i=1),o[a]=e[a+i];return o}var prt=sd/4,frt=sd/2,Brt=sd/4,Irt=16;function Nye(e){if(fye(e)&&typeof e!="string")return e;if(QI(e))return e.toArray();throw new TypeError("Invalid keyPath: expected Ordered Collection or Array: "+e)}function lR(e){try{return typeof e=="string"?JSON.stringify(e):String(e)}catch{return JSON.stringify(e)}}function Crt(e,t){return EI(e)?e.has(t):bQ(e)&&JD.call(e,t)}function Mye(e,t,r){return EI(e)?e.get(t,r):Crt(e,t)?typeof e.get=="function"?e.get(t):e[t]:r}function hrt(e,t){if(!bQ(e))throw new TypeError("Cannot update non-data-structure value: "+e);if(EI(e)){if(!e.remove)throw new TypeError("Cannot update immutable value without .remove() method: "+e);return e.remove(t)}if(!JD.call(e,t))return e;var r=wM(e);return Array.isArray(r)?r.splice(t,1):delete r[t],r}function yrt(e,t,r){if(BR(t))return e;if(!bQ(e))throw new TypeError("Cannot update non-data-structure value: "+e);if(EI(e)){if(!e.set)throw new TypeError("Cannot update immutable value without .set() method: "+e);return e.set(t,r)}if(JD.call(e,t)&&r===e[t])return e;var n=wM(e);return n[t]=r,n}function KD(e,t,r,n){n||(n=r,r=void 0);var o=kye(EI(e),e,Nye(t),0,r,n);return o===hi?r:o}function kye(e,t,r,n,o,i){var a=t===hi;if(n===r.length){var A=a?o:t,s=i(A);return s===A?t:s}if(!a&&!bQ(t))throw new TypeError("Cannot update within non-data-structure value in path ["+Array.from(r).slice(0,n).map(lR)+"]: "+t);var c=r[n],l=a?hi:Mye(t,c,hi),u=kye(l===hi?e:EI(l),l,r,n+1,o,i);return u===l?t:u===hi?hrt(t,c):yrt(a?e?yI():{}:t,c,u)}function Qrt(e,t){return KD(e,t,function(){return hi})}function z8(e){return Qrt(this,e)}var Hye="@@__IMMUTABLE_LIST__@@";function Vye(e){return!!(e&&e[Hye])}var xI=(function(e){function t(r){var n=DM();if(r==null)return n;if(Vye(r))return r;var o=e(r),i=o.size;return i===0?n:(Ad(i),i>0&&i<sd?uR(0,i,oA,void 0,new yQ(o.toArray())):n.withMutations(function(a){a.setSize(i),o.forEach(function(A,s){return a.set(s,A)})}))}return e&&(t.__proto__=e),t.prototype=Object.create(e&&e.prototype),t.prototype.constructor=t,t.of=function(){return this(arguments)},t.prototype.toString=function(){return this.__toString("List [","]")},t.prototype.get=function(n,o){if(n=QQ(this,n),n>=0&&n<this.size){n+=this._origin;var i=_ye(this,n);return i&&i.array[n&Sg]}return o},t.prototype.set=function(n,o){return Ert(this,n,o)},t.prototype.remove=function(n){return this.has(n)?n===0?this.shift():n===this.size-1?this.pop():this.splice(n,1):this},t.prototype.insert=function(n,o){return this.splice(n,0,o)},t.prototype.clear=function(){return this.size===0?this:this.__ownerID?(this.size=this._origin=this._capacity=0,this._level=oA,this._root=this._tail=this.__hash=void 0,this.__altered=!0,this):DM()},t.prototype.push=function(){var n=arguments,o=this.size;return this.withMutations(function(i){hQ(i,0,o+n.length);for(var a=0;a<n.length;a++)i.set(o+a,n[a])})},t.prototype.pop=function(){return hQ(this,0,-1)},t.prototype.unshift=function(){var n=arguments;return this.withMutations(function(o){hQ(o,-n.length);for(var i=0;i<n.length;i++)o.set(i,n[i])})},t.prototype.shift=function(){return hQ(this,1)},t.prototype.shuffle=function(n){return n===void 0&&(n=Math.random),this.withMutations(function(o){for(var i=o.size,a,A;i;)a=Math.floor(n()*i--),A=o.get(a),o.set(a,o.get(i)),o.set(i,A)})},t.prototype.concat=function(){for(var n=arguments,o=[],i=0;i<arguments.length;i++){var a=n[i],A=e(typeof a!="string"&&lye(a)?a:[a]);A.size!==0&&o.push(A)}return o.length===0?this:this.size===0&&!this.__ownerID&&o.length===1?this.constructor(o[0]):this.withMutations(function(s){o.forEach(function(c){return c.forEach(function(l){return s.push(l)})})})},t.prototype.setSize=function(n){return hQ(this,0,n)},t.prototype.map=function(n,o){var i=this;return this.withMutations(function(a){for(var A=0;A<i.size;A++)a.set(A,n.call(o,a.get(A),A,i))})},t.prototype.slice=function(n,o){var i=this.size;return TM(n,o,i)?this:hQ(this,dR(n,i),PM(o,i))},t.prototype.__iterator=function(n,o){var i=o?this.size:0,a=Xhe(this,o);return new $i(function(){var A=a();return A===AR?Dg():zA(n,o?--i:i++,A)})},t.prototype.__iterate=function(n,o){for(var i=o?this.size:0,a=Xhe(this,o),A;(A=a())!==AR&&n(A,o?--i:i++,this)!==!1;);return i},t.prototype.__ensureOwner=function(n){return n===this.__ownerID?this:n?uR(this._origin,this._capacity,this._level,this._root,this._tail,n,this.__hash):this.size===0?DM():(this.__ownerID=n,this.__altered=!1,this)},t})(D0);xI.isList=Vye;var Ic=xI.prototype;Ic[Hye]=!0;Ic[mR]=Ic.remove;Ic.merge=Ic.concat;Ic.setIn=M8;Ic.deleteIn=Ic.removeIn=z8;Ic.update=k8;Ic.updateIn=H8;Ic.mergeIn=N8;Ic.mergeDeepIn=G8;Ic.withMutations=IR;Ic.wasAltered=V8;Ic.asImmutable=pR;Ic["@@transducer/init"]=Ic.asMutable=fR;Ic["@@transducer/step"]=function(e,t){return e.push(t)};Ic["@@transducer/result"]=function(e){return e.asImmutable()};var yQ=function(t,r){this.array=t,this.ownerID=r};yQ.prototype.removeBefore=function(t,r,n){if((n&(1<<r+oA)-1)===0||this.array.length===0)return this;var o=n>>>r&Sg;if(o>=this.array.length)return new yQ([],t);var i=o===0,a;if(r>0){var A=this.array[o];if(a=A&&A.removeBefore(t,r-oA,n),a===A&&i)return this}if(i&&!a)return this;var s=HD(this,t);if(!i)for(var c=0;c<o;c++)s.array[c]=void 0;return a&&(s.array[o]=a),s};yQ.prototype.removeAfter=function(t,r,n){if(n===(r?1<<r+oA:sd)||this.array.length===0)return this;var o=n-1>>>r&Sg;if(o>=this.array.length)return this;var i;if(r>0){var a=this.array[o];if(i=a&&a.removeAfter(t,r-oA,n),i===a&&o===this.array.length-1)return this}var A=HD(this,t);return A.array.splice(o+1),i&&(A.array[o]=i),A};var AR={};function Xhe(e,t){var r=e._origin,n=e._capacity,o=gR(n),i=e._tail;return a(e._root,e._level,0);function a(c,l,u){return l===0?A(c,u):s(c,l,u)}function A(c,l){var u=l===o?i&&i.array:c&&c.array,g=l>r?0:r-l,m=n-l;return m>sd&&(m=sd),function(){if(g===m)return AR;var p=t?--m:g++;return u&&u[p]}}function s(c,l,u){var g,m=c&&c.array,p=u>r?0:r-u>>l,d=(n-u>>l)+1;return d>sd&&(d=sd),function(){for(;;){if(g){var f=g();if(f!==AR)return f;g=null}if(p===d)return AR;var I=t?--d:p++;g=a(m&&m[I],l-oA,u+(I<<l))}}}}function uR(e,t,r,n,o,i,a){var A=Object.create(Ic);return A.size=t-e,A._origin=e,A._capacity=t,A._level=r,A._root=n,A._tail=o,A.__ownerID=i,A.__hash=a,A.__altered=!1,A}function DM(){return uR(0,0,oA)}function Ert(e,t,r){if(t=QQ(e,t),t!==t)return e;if(t>=e.size||t<0)return e.withMutations(function(a){t<0?hQ(a,t).set(0,r):hQ(a,0,t+1).set(t,r)});t+=e._origin;var n=e._tail,o=e._root,i=p8();return t>=gR(e._capacity)?n=C8(n,e.__ownerID,0,t,r,i):o=C8(o,e.__ownerID,e._level,t,r,i),i.value?e.__ownerID?(e._root=o,e._tail=n,e.__hash=void 0,e.__altered=!0,e):uR(e._origin,e._capacity,e._level,o,n):e}function C8(e,t,r,n,o,i){var a=n>>>r&Sg,A=e&&a<e.array.length;if(!A&&o===void 0)return e;var s;if(r>0){var c=e&&e.array[a],l=C8(c,t,r-oA,n,o,i);return l===c?e:(s=HD(e,t),s.array[a]=l,s)}return A&&e.array[a]===o?e:(i&&Cp(i),s=HD(e,t),o===void 0&&a===s.array.length-1?s.array.pop():s.array[a]=o,s)}function HD(e,t){return t&&e&&t===e.ownerID?e:new yQ(e?e.array.slice():[],t)}function _ye(e,t){if(t>=gR(e._capacity))return e._tail;if(t<1<<e._level+oA){for(var r=e._root,n=e._level;r&&n>0;)r=r.array[t>>>n&Sg],n-=oA;return r}}function brt(e,t,r){var n=e._origin+(t===void 0?0:t),o=r===void 0?e._capacity:r<0?e._capacity+r:e._origin+r;if(Number.isFinite(o)&&o>bM||Number.isFinite(n)&&n<-bM||Number.isFinite(o)&&Number.isFinite(n)&&o-n>bM)throw new RangeError("Invalid List size: a List cannot hold more than "+bM+" (2 ** 30) values.")}function hQ(e,t,r){brt(e,t,r),t!==void 0&&(t|=0),r!==void 0&&(r|=0);var n=e.__ownerID||new E8,o=e._origin,i=e._capacity,a=o+t,A=r===void 0?i:r<0?i+r:o+r;if(a===o&&A===i)return e;if(a>=A)return e.clear();for(var s=e._level,c=e._root,l=0;a+l<0;)c=new yQ(c&&c.array.length?[void 0,c]:[],n),s+=oA,l+=Zhe(s);l&&(a+=l,o+=l,A+=l,i+=l);for(var u=gR(i),g=gR(A);g>=Zhe(s+oA);)c=new yQ(c&&c.array.length?[c]:[],n),s+=oA;var m=e._tail,p=g<u?_ye(e,A-1):g>u?new yQ([],n):m;if(m&&g>u&&a<i&&m.array.length){c=HD(c,n);for(var d=c,f=s;f>oA;f-=oA){var I=u>>>f&Sg;d=d.array[I]=HD(d.array[I],n)}d.array[u>>>oA&Sg]=m}if(A<i&&(p=p&&p.removeAfter(n,0,A)),a>=g)a-=g,A-=g,s=oA,c=void 0,p=p&&p.removeBefore(n,0,a);else if(a>o||g<u){for(l=0;c;){var C=a>>>s&Sg;if(C!==g>>>s&Sg)break;C&&(l+=(1<<s)*C),s-=oA,c=c.array[C]}c&&a>o&&(c=c.removeBefore(n,s,a-l)),c&&g<u&&(c=c.removeAfter(n,s,g-l)),l&&(a-=l,A-=l)}return e.__ownerID?(e.size=A-a,e._origin=a,e._capacity=A,e._level=s,e._root=c,e._tail=p,e.__hash=void 0,e.__altered=!0,e):uR(a,A,s,c,p)}function gR(e){return e<sd?0:e-1>>>oA<<oA}var bM=Math.pow(2,30);function Zhe(e){return e<31?1<<e:Math.pow(2,e)}function Yye(e){return _8(e)&&QI(e)}var Cc=(function(e){function t(r){return r==null?nR():Yye(r)?r:nR().withMutations(function(n){var o=yp(r);Ad(o.size),o.forEach(function(i,a){return n.set(a,i)})})}return e&&(t.__proto__=e),t.prototype=Object.create(e&&e.prototype),t.prototype.constructor=t,t.of=function(){return this(arguments)},t.prototype.toString=function(){return this.__toString("OrderedMap {","}")},t.prototype.get=function(n,o){var i=this._map.get(n);return i!==void 0?this._list.get(i)[1]:o},t.prototype.clear=function(){return this.size===0?this:this.__ownerID?(this.size=0,this._map.clear(),this._list.clear(),this.__altered=!0,this):nR()},t.prototype.set=function(n,o){return $he(this,n,o)},t.prototype.remove=function(n){return $he(this,n,hi)},t.prototype.__iterate=function(n,o){var i=this;return this._list.__iterate(function(a){return a&&n(a[1],a[0],i)},o)},t.prototype.__iterator=function(n,o){return this._list.fromEntrySeq().__iterator(n,o)},t.prototype.__ensureOwner=function(n){if(n===this.__ownerID)return this;var o=this._map.__ensureOwner(n),i=this._list.__ensureOwner(n);return n?K8(o,i,n,this.__hash):this.size===0?nR():(this.__ownerID=n,this.__altered=!1,this._map=o,this._list=i,this)},t})(dd);Cc.isOrderedMap=Yye;Cc.prototype[EQ]=!0;Cc.prototype[mR]=Cc.prototype.remove;function K8(e,t,r,n){var o=Object.create(Cc.prototype);return o.size=e?e.size:0,o._map=e,o._list=t,o.__ownerID=r,o.__hash=n,o.__altered=!1,o}var qhe;function nR(){return qhe||(qhe=K8(yI(),DM()))}function $he(e,t,r){var n=e._map,o=e._list,i=n.get(t),a=i!==void 0,A,s;if(r===hi){if(!a)return e;o.size>=sd&&o.size>=n.size*2?(s=o.filter(function(c,l){return c!==void 0&&i!==l}),A=s.toKeyedSeq().map(function(c){return c[0]}).flip().toMap(),e.__ownerID&&(A.__ownerID=s.__ownerID=e.__ownerID)):(A=n.remove(t),s=i===o.size-1?o.pop():o.set(i,void 0))}else if(a){if(r===o.get(i)[1])return e;A=n,s=o.set(i,[t,r])}else A=n.set(t,o.size),s=o.set(o.size,[t,r]);return e.__ownerID?(e.size=A.size,e._map=A,e._list=s,e.__hash=void 0,e.__altered=!0,e):K8(A,s)}var Oye="@@__IMMUTABLE_STACK__@@";function h8(e){return!!(e&&e[Oye])}var j8=(function(e){function t(r){return r==null?xM():h8(r)?r:xM().pushAll(r)}return e&&(t.__proto__=e),t.prototype=Object.create(e&&e.prototype),t.prototype.constructor=t,t.of=function(){return this(arguments)},t.prototype.toString=function(){return this.__toString("Stack [","]")},t.prototype.get=function(n,o){var i=this._head;for(n=QQ(this,n);i&&n--;)i=i.next;return i?i.value:o},t.prototype.peek=function(){return this._head&&this._head.value},t.prototype.push=function(){var n=arguments;if(arguments.length===0)return this;for(var o=this.size+arguments.length,i=this._head,a=arguments.length-1;a>=0;a--)i={value:n[a],next:i};return this.__ownerID?(this.size=o,this._head=i,this.__hash=void 0,this.__altered=!0,this):oR(o,i)},t.prototype.pushAll=function(n){if(n=e(n),n.size===0)return this;if(this.size===0&&h8(n))return n;Ad(n.size);var o=this.size,i=this._head;return n.__iterate(function(a){o++,i={value:a,next:i}},!0),this.__ownerID?(this.size=o,this._head=i,this.__hash=void 0,this.__altered=!0,this):oR(o,i)},t.prototype.pop=function(){return this.slice(1)},t.prototype.clear=function(){return this.size===0?this:this.__ownerID?(this.size=0,this._head=void 0,this.__hash=void 0,this.__altered=!0,this):xM()},t.prototype.slice=function(n,o){if(TM(n,o,this.size))return this;var i=dR(n,this.size),a=PM(o,this.size);if(a!==this.size)return e.prototype.slice.call(this,n,o);for(var A=this.size-i,s=this._head;i--;)s=s.next;return this.__ownerID?(this.size=A,this._head=s,this.__hash=void 0,this.__altered=!0,this):oR(A,s)},t.prototype.__ensureOwner=function(n){return n===this.__ownerID?this:n?oR(this.size,this._head,n,this.__hash):this.size===0?xM():(this.__ownerID=n,this.__altered=!1,this)},t.prototype.__iterate=function(n,o){var i=this;if(o)return new ND(this.toArray()).__iterate(function(s,c){return n(s,c,i)},o);for(var a=0,A=this._head;A&&n(A.value,a++,this)!==!1;)A=A.next;return a},t.prototype.__iterator=function(n,o){if(o)return new ND(this.toArray()).__iterator(n,o);var i=0,a=this._head;return new $i(function(){if(a){var A=a.value;return a=a.next,zA(n,i++,A)}return Dg()})},t})(D0);j8.isStack=h8;var vg=j8.prototype;vg[Oye]=!0;vg.shift=vg.pop;vg.unshift=vg.push;vg.unshiftAll=vg.pushAll;vg.withMutations=IR;vg.wasAltered=V8;vg.asImmutable=pR;vg["@@transducer/init"]=vg.asMutable=fR;vg["@@transducer/step"]=function(e,t){return e.unshift(t)};vg["@@transducer/result"]=function(e){return e.asImmutable()};function oR(e,t,r,n){var o=Object.create(vg);return o.size=e,o._head=t,o.__ownerID=r,o.__hash=n,o.__altered=!1,o}var eye;function xM(){return eye||(eye=oR(0))}function tye(e,t,r,n,o,i){return Ad(e.size),e.__iterate(function(a,A,s){o?(o=!1,r=a):r=t.call(n,r,a,A,s)},i),r}function xrt(e,t){return t}function Srt(e,t){return[t,e]}function u8(e){return function(){for(var t=[],r=arguments.length;r--;)t[r]=arguments[r];return!e.apply(this,t)}}function rye(e){return function(){for(var t=[],r=arguments.length;r--;)t[r]=arguments[r];return-e.apply(this,t)}}function nye(e,t){return e<t?1:e>t?-1:0}function Jye(e,t){if(e===t)return!0;if(!ld(t)||e.size!==void 0&&t.size!==void 0&&e.size!==t.size||e.__hash!==void 0&&t.__hash!==void 0&&e.__hash!==t.__hash||JA(e)!==JA(t)||hp(e)!==hp(t)||QI(e)!==QI(t))return!1;if(e.size===0&&t.size===0)return!0;var r=!Q8(e);if(QI(e)){var n=e.entries();return t.every(function(s,c){var l=n.next().value;return l&&cd(l[1],s)&&(r||cd(l[0],c))})&&n.next().done}var o=!1;if(e.size===void 0)if(t.size===void 0)typeof e.cacheResult=="function"&&e.cacheResult();else{o=!0;var i=e;e=t,t=i}var a=!0,A=t.__iterate(function(s,c){if(r?!e.has(s):o?!cd(s,e.get(c,hi)):!cd(e.get(c,hi),s))return a=!1,!1});return a&&e.size===A}var Drt=(function(e){function t(r,n,o){if(o===void 0&&(o=1),!(this instanceof t))return new t(r,n,o);if(aR(o!==0,"Cannot step a Range by 0"),aR(r!==void 0,"You must define a start value when using Range"),aR(n!==void 0,"You must define an end value when using Range"),o=Math.abs(o),n<r&&(o=-o),this._start=r,this._end=n,this._step=o,this.size=Math.max(0,Math.ceil((n-r)/o-1)+1),this.size===0){if(g8)return g8;g8=this}}return e&&(t.__proto__=e),t.prototype=Object.create(e&&e.prototype),t.prototype.constructor=t,t.prototype.toString=function(){return this.size===0?"Range []":"Range [ "+this._start+"..."+this._end+(this._step!==1?" by "+this._step:"")+" ]"},t.prototype.get=function(n,o){return this.has(n)?this._start+QQ(this,n)*this._step:o},t.prototype.includes=function(n){var o=(n-this._start)/this._step;return o>=0&&o<this.size&&o===Math.floor(o)},t.prototype.slice=function(n,o){return TM(n,o,this.size)?this:(n=dR(n,this.size),o=PM(o,this.size),o<=n?new t(0,0):new t(this.get(n,this._end),this.get(o,this._end),this._step))},t.prototype.indexOf=function(n){var o=n-this._start;if(o%this._step===0){var i=o/this._step;if(i>=0&&i<this.size)return i}return-1},t.prototype.lastIndexOf=function(n){return this.indexOf(n)},t.prototype.__iterate=function(n,o){for(var i=this.size,a=this._step,A=o?this._start+(i-1)*a:this._start,s=0;s!==i&&n(A,o?i-++s:s++,this)!==!1;)A+=o?-a:a;return s},t.prototype.__iterator=function(n,o){var i=this.size,a=this._step,A=o?this._start+(i-1)*a:this._start,s=0;return new $i(function(){if(s===i)return Dg();var c=A;return A+=o?-a:a,zA(n,o?i-++s:s++,c)})},t.prototype.equals=function(n){return n instanceof t?this._start===n._start&&this._end===n._end&&this._step===n._step:Jye(this,n)},t})(jf),g8,zye="@@__IMMUTABLE_SET__@@";function W8(e){return!!(e&&e[zye])}var MM=(function(e){function t(r){return r==null?iR():W8(r)&&!QI(r)?r:iR().withMutations(function(n){var o=e(r);Ad(o.size),o.forEach(function(i){return n.add(i)})})}return e&&(t.__proto__=e),t.prototype=Object.create(e&&e.prototype),t.prototype.constructor=t,t.of=function(){return this(arguments)},t.fromKeys=function(n){return this(yp(n).keySeq())},t.intersect=function(n){return n=Vu(n).toArray(),n.length?uu.intersect.apply(t(n.pop()),n):iR()},t.union=function(n){return n=Vu(n).toArray(),n.length?uu.union.apply(t(n.pop()),n):iR()},t.prototype.toString=function(){return this.__toString("Set {","}")},t.prototype.has=function(n){return this._map.has(n)},t.prototype.add=function(n){return SM(this,this._map.set(n,n))},t.prototype.remove=function(n){return SM(this,this._map.remove(n))},t.prototype.clear=function(){return SM(this,this._map.clear())},t.prototype.map=function(n,o){var i=this,a=!1,A=SM(this,this._map.mapEntries(function(s){var c=s[1],l=n.call(o,c,c,i);return l!==c&&(a=!0),[l,l]},o));return a?A:this},t.prototype.union=function(){for(var n=[],o=arguments.length;o--;)n[o]=arguments[o];return n=n.filter(function(i){return i.size!==0}),n.length===0?this:this.size===0&&!this.__ownerID&&n.length===1?this.constructor(n[0]):this.withMutations(function(i){for(var a=0;a<n.length;a++)typeof n[a]=="string"?i.add(n[a]):e(n[a]).forEach(function(A){return i.add(A)})})},t.prototype.intersect=function(){for(var n=[],o=arguments.length;o--;)n[o]=arguments[o];if(n.length===0)return this;n=n.map(function(a){return e(a)});var i=[];return this.forEach(function(a){n.every(function(A){return A.includes(a)})||i.push(a)}),this.withMutations(function(a){i.forEach(function(A){a.remove(A)})})},t.prototype.subtract=function(){for(var n=[],o=arguments.length;o--;)n[o]=arguments[o];if(n.length===0)return this;n=n.map(function(a){return e(a)});var i=[];return this.forEach(function(a){n.some(function(A){return A.includes(a)})&&i.push(a)}),this.withMutations(function(a){i.forEach(function(A){a.remove(A)})})},t.prototype.sort=function(n){return md(MD(this,n))},t.prototype.sortBy=function(n,o){return md(MD(this,o,n))},t.prototype.wasAltered=function(){return this._map.wasAltered()},t.prototype.__iterate=function(n,o){var i=this;return this._map.__iterate(function(a){return n(a,a,i)},o)},t.prototype.__iterator=function(n,o){return this._map.__iterator(n,o)},t.prototype.__ensureOwner=function(n){if(n===this.__ownerID)return this;var o=this._map.__ensureOwner(n);return n?this.__make(o,n):this.size===0?this.__empty():(this.__ownerID=n,this._map=o,this)},t})(YD);MM.isSet=W8;var uu=MM.prototype;uu[zye]=!0;uu[mR]=uu.remove;uu.merge=uu.concat=uu.union;uu.withMutations=IR;uu.asImmutable=pR;uu["@@transducer/init"]=uu.asMutable=fR;uu["@@transducer/step"]=function(e,t){return e.add(t)};uu["@@transducer/result"]=function(e){return e.asImmutable()};uu.__empty=iR;uu.__make=Kye;function SM(e,t){return e.__ownerID?(e.size=t.size,e._map=t,e):t===e._map?e:t.size===0?e.__empty():e.__make(t)}function Kye(e,t){var r=Object.create(uu);return r.size=e?e.size:0,r._map=e,r.__ownerID=t,r}var oye;function iR(){return oye||(oye=Kye(yI()))}function jye(e,t,r){for(var n=Nye(t),o=0;o!==n.length;)if(e=Mye(e,n[o++],hi),e===hi)return r;return e}function Wye(e,t){return jye(this,e,t)}function vrt(e,t){return jye(e,t,hi)!==hi}function Frt(e){return vrt(this,e)}function Xye(){Ad(this.size);var e={};return this.__iterate(function(t,r){BR(r)||(e[r]=t)}),e}function RM(e){if(!e||typeof e!="object")return e;if(!ld(e)){if(!bQ(e))return e;e=ym(e)}if(JA(e)){var t={};return e.__iterate(function(n,o){BR(o)||(t[o]=RM(n))}),t}var r=[];return e.__iterate(function(n){r.push(RM(n))}),r}function wrt(e){if(e.size===1/0)return 0;var t=QI(e),r=JA(e),n=t?1:0;return e.__iterate(r?t?function(o,i){n=31*n+iye(hm(o),hm(i))|0}:function(o,i){n=n+iye(hm(o),hm(i))|0}:t?function(o){n=31*n+hm(o)|0}:function(o){n=n+hm(o)|0}),Rrt(e.size,n)}function Rrt(e,t){return t=rR(t,3432918353),t=rR(t<<15|t>>>-15,461845907),t=rR(t<<13|t>>>-13,5),t=(t+3864292196|0)^e,t=rR(t^t>>>16,2246822507),t=rR(t^t>>>13,3266489909),t=GM(t^t>>>16),t}function iye(e,t){return e^t+2654435769+(e<<6)+(e>>2)|0}function F0(e,t){var r=function(n){e.prototype[n]=t[n]};return Object.keys(t).forEach(r),Object.getOwnPropertySymbols&&Object.getOwnPropertySymbols(t).forEach(r),e}Vu.Iterator=$i;F0(Vu,{toArray:function(){Ad(this.size);var t=new Array(this.size||0),r=JA(this),n=0;return this.__iterate(function(o,i){t[n++]=r?[i,o]:o}),t},toIndexedSeq:function(){return new Cye(this)},toJS:function(){return RM(this)},toKeyedSeq:function(){return new NM(this,!0)},toMap:function(){return dd(this.toKeyedSeq())},toObject:Xye,toOrderedMap:function(){return Cc(this.toKeyedSeq())},toOrderedSet:function(){return md(JA(this)?this.valueSeq():this)},toSet:function(){return MM(JA(this)?this.valueSeq():this)},toSetSeq:function(){return new hye(this)},toSeq:function(){return hp(this)?this.toIndexedSeq():JA(this)?this.toKeyedSeq():this.toSetSeq()},toStack:function(){return j8(JA(this)?this.valueSeq():this)},toList:function(){return xI(JA(this)?this.valueSeq():this)},toString:function(){return"[Collection]"},__toString:function(t,r){return this.size===0?t+r:t+" "+this.toSeq().map(this.__toStringMapper).join(", ")+" "+r},concat:function(){for(var t=[],r=arguments.length;r--;)t[r]=arguments[r];return nA(this,trt(this,t))},includes:function(t){return this.some(function(r){return cd(r,t)})},entries:function(){return this.__iterator(gd)},every:function(t,r){Ad(this.size);var n=!0;return this.__iterate(function(o,i,a){if(!t.call(r,o,i,a))return n=!1,!1}),n},filter:function(t,r){return nA(this,bye(this,t,r,!0))},partition:function(t,r){return qtt(this,t,r)},find:function(t,r,n){var o=this.findEntry(t,r);return o?o[1]:n},forEach:function(t,r){return Ad(this.size),this.__iterate(r?t.bind(r):t)},join:function(t){Ad(this.size),t=t!==void 0?""+t:",";var r="",n=!0;return this.__iterate(function(o){n?n=!1:r+=t,r+=o!=null?o.toString():""}),r},keys:function(){return this.__iterator(OD)},map:function(t,r){return nA(this,Eye(this,t,r))},reduce:function(t,r,n){return tye(this,t,r,n,arguments.length<2,!1)},reduceRight:function(t,r,n){return tye(this,t,r,n,arguments.length<2,!0)},reverse:function(){return nA(this,w8(this,!0))},slice:function(t,r){return nA(this,R8(this,t,r,!0))},some:function(t,r){Ad(this.size);var n=!1;return this.__iterate(function(o,i,a){if(t.call(r,o,i,a))return n=!0,!1}),n},sort:function(t){return nA(this,MD(this,t))},values:function(){return this.__iterator(ud)},butLast:function(){return this.slice(0,-1)},isEmpty:function(){return this.size!==void 0?this.size===0:!this.some(function(){return!0})},count:function(t,r){return GD(t?this.toSeq().filter(t,r):this)},countBy:function(t,r){return Xtt(this,t,r)},equals:function(t){return Jye(this,t)},entrySeq:function(){var t=this;if(t._cache)return new ND(t._cache);var r=t.toSeq().map(Srt).toIndexedSeq();return r.fromEntrySeq=function(){return t.toSeq()},r},filterNot:function(t,r){return this.filter(u8(t),r)},findEntry:function(t,r,n){var o=n;return this.__iterate(function(i,a,A){if(t.call(r,i,a,A))return o=[a,i],!1}),o},findKey:function(t,r){var n=this.findEntry(t,r);return n&&n[0]},findLast:function(t,r,n){return this.toKeyedSeq().reverse().find(t,r,n)},findLastEntry:function(t,r,n){return this.toKeyedSeq().reverse().findEntry(t,r,n)},findLastKey:function(t,r){return this.toKeyedSeq().reverse().findKey(t,r)},first:function(t){return this.find(uye,null,t)},flatMap:function(t,r){return nA(this,rrt(this,t,r))},flatten:function(t){return nA(this,Sye(this,t,!0))},fromEntrySeq:function(){return new yye(this)},get:function(t,r){return this.find(function(n,o){return cd(o,t)},void 0,r)},getIn:Wye,groupBy:function(t,r){return Ztt(this,t,r)},has:function(t){return this.get(t,hi)!==hi},hasIn:Frt,isSubset:function(t){return t=typeof t.includes=="function"?t:Vu(t),this.every(function(r){return t.includes(r)})},isSuperset:function(t){return t=typeof t.isSubset=="function"?t:Vu(t),t.isSubset(this)},keyOf:function(t){return this.findKey(function(r){return cd(r,t)})},keySeq:function(){return this.toSeq().map(xrt).toIndexedSeq()},last:function(t){return this.toSeq().reverse().first(t)},lastKeyOf:function(t){return this.toKeyedSeq().reverse().keyOf(t)},max:function(t){return QM(this,t)},maxBy:function(t,r){return QM(this,r,t)},min:function(t){return QM(this,t?rye(t):nye)},minBy:function(t,r){return QM(this,r?rye(r):nye,t)},rest:function(){return this.slice(1)},skip:function(t){return t===0?this:this.slice(Math.max(0,t))},skipLast:function(t){return t===0?this:this.slice(0,-Math.max(0,t))},skipWhile:function(t,r){return nA(this,xye(this,t,r,!0))},skipUntil:function(t,r){return this.skipWhile(u8(t),r)},sortBy:function(t,r){return nA(this,MD(this,r,t))},take:function(t){return this.slice(0,Math.max(0,t))},takeLast:function(t){return this.slice(-Math.max(0,t))},takeWhile:function(t,r){return nA(this,$tt(this,t,r))},takeUntil:function(t,r){return this.takeWhile(u8(t),r)},update:function(t){return t(this)},valueSeq:function(){return this.toIndexedSeq()},hashCode:function(){return this.__hash||(this.__hash=wrt(this))}});var _u=Vu.prototype;_u[sye]=!0;_u[UM]=_u.values;_u.toJSON=_u.toArray;_u.__toStringMapper=lR;_u.inspect=_u.toSource=function(){return this.toString()};_u.chain=_u.flatMap;_u.contains=_u.includes;F0(yp,{flip:function(){return nA(this,Qye(this))},mapEntries:function(t,r){var n=this,o=0;return nA(this,this.toSeq().map(function(i,a){return t.call(r,[a,i],o++,n)}).fromEntrySeq())},mapKeys:function(t,r){var n=this;return nA(this,this.toSeq().flip().map(function(o,i){return t.call(r,o,i,n)}).flip())}});var CR=yp.prototype;CR[FM]=!0;CR[UM]=_u.entries;CR.toJSON=Xye;CR.__toStringMapper=function(e,t){return lR(t)+": "+lR(e)};F0(D0,{toKeyedSeq:function(){return new NM(this,!1)},filter:function(t,r){return nA(this,bye(this,t,r,!1))},findIndex:function(t,r){var n=this.findEntry(t,r);return n?n[0]:-1},indexOf:function(t){var r=this.keyOf(t);return r===void 0?-1:r},lastIndexOf:function(t){var r=this.lastKeyOf(t);return r===void 0?-1:r},reverse:function(){return nA(this,w8(this,!1))},slice:function(t,r){return nA(this,R8(this,t,r,!1))},splice:function(t,r){var n=arguments.length;if(r=Math.max(r||0,0),n===0||n===2&&!r)return this;t=dR(t,t<0?this.count():this.size);var o=this.slice(0,t);return nA(this,n===1?o:o.concat(hI(arguments,2),this.slice(t+r)))},findLastIndex:function(t,r){var n=this.findLastEntry(t,r);return n?n[0]:-1},first:function(t){return this.get(0,t)},flatten:function(t){return nA(this,Sye(this,t,!1))},get:function(t,r){return t=QQ(this,t),t<0||this.size===1/0||this.size!==void 0&&t>this.size?r:this.find(function(n,o){return o===t},void 0,r)},has:function(t){return t=QQ(this,t),t>=0&&(this.size!==void 0?this.size===1/0||t<this.size:this.find(function(r,n){return n===t},void 0,hi)!==hi)},interpose:function(t){return nA(this,nrt(this,t))},interleave:function(){var t=[this].concat(hI(arguments)),r=EM(this.toSeq(),jf.of,t),n=r.flatten(!0);return r.size&&(n.size=r.size*t.length),nA(this,n)},keySeq:function(){return Drt(0,this.size)},last:function(t){return this.get(-1,t)},skipWhile:function(t,r){return nA(this,xye(this,t,r,!1))},zip:function(){var t=[this].concat(hI(arguments));return nA(this,EM(this,aye,t))},zipAll:function(){var t=[this].concat(hI(arguments));return nA(this,EM(this,aye,t,!0))},zipWith:function(t){var r=hI(arguments);return r[0]=this,nA(this,EM(this,t,r))}});var jD=D0.prototype;jD[vM]=!0;jD[EQ]=!0;F0(YD,{get:function(t,r){return this.has(t)?t:r},includes:function(t){return this.has(t)},keySeq:function(){return this.valueSeq()}});var VD=YD.prototype;VD.has=_u.includes;VD.contains=VD.includes;VD.keys=VD.values;F0(SQ,CR);F0(jf,jD);F0(zD,VD);function aye(){return hI(arguments)}function Zye(e){return W8(e)&&QI(e)}var md=(function(e){function t(r){return r==null?y8():Zye(r)?r:y8().withMutations(function(n){var o=YD(r);Ad(o.size),o.forEach(function(i){return n.add(i)})})}return e&&(t.__proto__=e),t.prototype=Object.create(e&&e.prototype),t.prototype.constructor=t,t.of=function(){return this(arguments)},t.fromKeys=function(n){return this(yp(n).keySeq())},t.prototype.toString=function(){return this.__toString("OrderedSet {","}")},t})(MM);md.isOrderedSet=Zye;var w0=md.prototype;w0[EQ]=!0;w0.zip=jD.zip;w0.zipWith=jD.zipWith;w0.zipAll=jD.zipAll;w0.__empty=y8;w0.__make=qye;function qye(e,t){var r=Object.create(w0);return r.size=e?e.size:0,r._map=e,r.__ownerID=t,r}var Aye;function y8(){return Aye||(Aye=qye(nR()))}function Urt(e){if(v0(e))throw new Error("Can not call `Record` with an immutable Record as default values. Use a plain javascript object instead.");if(EI(e))throw new Error("Can not call `Record` with an immutable Collection as default values. Use a plain javascript object instead.");if(e===null||typeof e!="object")throw new Error("Can not call `Record` with a non-object as default values. Use a plain javascript object instead.")}var Fl=function(t,r){var n;Urt(t);var o=function(A){var s=this;if(A instanceof o)return A;if(!(this instanceof o))return new o(A);if(!n){n=!0;var c=Object.keys(t),l=i._indices={};i._name=r,i._keys=c,i._defaultValues=t;for(var u=0;u<c.length;u++){var g=c[u];l[g]=u,i[g]?typeof console=="object"&&console.warn&&console.warn("Cannot define "+Z8(this)+' with property "'+g+'" since that property name is part of the Record API.'):Lrt(i,g)}}return this.__ownerID=void 0,this._values=xI().withMutations(function(m){m.setSize(s._keys.length),yp(A).forEach(function(p,d){m.set(s._indices[d],p===s._defaultValues[d]?void 0:p)})}),this},i=o.prototype=Object.create(mA);return i.constructor=o,r&&(o.displayName=r),o};Fl.prototype.toString=function(){for(var t=Z8(this)+" { ",r=this._keys,n,o=0,i=r.length;o!==i;o++)n=r[o],t+=(o?", ":"")+n+": "+lR(this.get(n));return t+" }"};Fl.prototype.equals=function(t){return this===t||v0(t)&&_D(this).equals(_D(t))};Fl.prototype.hashCode=function(){return _D(this).hashCode()};Fl.prototype.has=function(t){return this._indices.hasOwnProperty(t)};Fl.prototype.get=function(t,r){if(!this.has(t))return r;var n=this._indices[t],o=this._values.get(n);return o===void 0?this._defaultValues[t]:o};Fl.prototype.set=function(t,r){if(this.has(t)){var n=this._values.set(this._indices[t],r===this._defaultValues[t]?void 0:r);if(n!==this._values&&!this.__ownerID)return X8(this,n)}return this};Fl.prototype.remove=function(t){return this.set(t)};Fl.prototype.clear=function(){var t=this._values.clear().setSize(this._keys.length);return this.__ownerID?this:X8(this,t)};Fl.prototype.wasAltered=function(){return this._values.wasAltered()};Fl.prototype.toSeq=function(){return _D(this)};Fl.prototype.toJS=function(){return RM(this)};Fl.prototype.entries=function(){return this.__iterator(gd)};Fl.prototype.__iterator=function(t,r){return _D(this).__iterator(t,r)};Fl.prototype.__iterate=function(t,r){return _D(this).__iterate(t,r)};Fl.prototype.__ensureOwner=function(t){if(t===this.__ownerID)return this;var r=this._values.__ensureOwner(t);return t?X8(this,r,t):(this.__ownerID=t,this._values=r,this)};Fl.isRecord=v0;Fl.getDescriptiveName=Z8;var mA=Fl.prototype;mA[dye]=!0;mA[mR]=mA.remove;mA.deleteIn=mA.removeIn=z8;mA.getIn=Wye;mA.hasIn=_u.hasIn;mA.merge=Fye;mA.mergeWith=wye;mA.mergeIn=N8;mA.mergeDeep=Uye;mA.mergeDeepWith=Lye;mA.mergeDeepIn=G8;mA.setIn=M8;mA.update=k8;mA.updateIn=H8;mA.withMutations=IR;mA.asMutable=fR;mA.asImmutable=pR;mA[UM]=mA.entries;mA.toJSON=mA.toObject=_u.toObject;mA.inspect=mA.toSource=function(){return this.toString()};function X8(e,t,r){var n=Object.create(Object.getPrototypeOf(e));return n._values=t,n.__ownerID=r,n}function Z8(e){return e.constructor.displayName||e.constructor.name||"Record"}function _D(e){return D8(e._keys.map(function(t){return[t,e.get(t)]}))}function Lrt(e,t){try{Object.defineProperty(e,t,{get:function(){return this.get(t)},set:function(r){aR(this.__ownerID,"Cannot set on an immutable record."),this.set(t,r)}})}catch{}}function Jo(){return Jo.zero()}(A=>{function e(){return{x:0,y:0,width:0,height:0}}A.zero=e;function t(s,c,l,u){return{x:s,y:c,width:l,height:u}}A.create=t;function r(s){return{...s}}A.clone=r;function n(s,c){return Object.assign(s,c)}A.copy=n;function o(s,c,l,u,g){return s.x=c,s.y=l,s.width=u,s.height=g,s}A.set=o;function i(s,c){return s[0]=c.x,s[1]=c.y,s[2]=c.width,s[3]=c.height,s}A.toVec4=i;function a(s,c){return s.x===c.x&&s.y===c.y&&s.width===c.width&&s.height===c.height}A.equals=a})(Jo||={});var SI=lr();function kM(e,t,r,n){let{x:o,y:i,width:a,height:A}=r;lr.set(SI,t[0],t[1],t[2],1),lr.transformMat4(SI,SI,n);let s=SI[3];return s!==0&&(SI[0]/=s,SI[1]/=s,SI[2]/=s),e[0]=(SI[0]+1)*a*.5+o,e[1]=(SI[1]+1)*A*.5+i,e[2]=(SI[2]+1)*.5,e[3]=s===0?0:1/s,e}function DI(e,t,r,n){let{x:o,y:i,width:a,height:A}=r,s=t[0]-o,c=t[1]-i,l=t[2];return e[0]=2*s/a-1,e[1]=2*c/A-1,e[2]=2*l-1,B.transformMat4(e,e,n)}function R0(e){if(typeof e=="object"){if("buttons"in e)return e.buttons;if("which"in e){let t=e.which;if(t===2)return 4;if(t===3)return 2;if(t>0)return 1<<t-1}}return 0}function WD(e){if(typeof e=="object"&&"button"in e){let t=e.button;if(t===1)return 4;if(t===2)return 2;if(t>=0)return 1<<t}return 0}function HM(e){return{alt:"altKey"in e?e.altKey:!1,shift:"shiftKey"in e?e.shiftKey:!1,control:"ctrlKey"in e?e.ctrlKey:!1,meta:"metaKey"in e?e.metaKey:!1}}var $ye={noScroll:!0,noMiddleClickScroll:!0,noContextMenu:!0,noPinchZoom:!0,noTextSelect:!0,preventGestures:!1,mask:(e,t)=>!0,pixelScale:1},as;(i=>{i.None=o();function t(a,A){return a.shift===A.shift&&a.alt===A.alt&&a.control===A.control&&a.meta===A.meta}i.areEqual=t;function r(a){return t(a,i.None)}i.areNone=r;function n(a){if(!a)return 0;let A=0;return a.shift&&A++,a.alt&&A++,a.control&&A++,a.meta&&A++,A}i.size=n;function o(a={}){return{shift:!!a.shift,alt:!!a.alt,control:!!a.control,meta:!!a.meta}}i.create=o})(as||={});var ya;(n=>{n.has=hA.has,n.create=hA.create;let r;(g=>(g[g.None=0]="None",g[g.Primary=1]="Primary",g[g.Secondary=2]="Secondary",g[g.Auxilary=4]="Auxilary",g[g.Forth=8]="Forth",g[g.Five=16]="Five",g[g.Trigger=32]="Trigger",g[g.Squeeze=48]="Squeeze"))(r=n.Flag||={})})(ya||={});var q8={key:"",code:"",modifiers:as.None,x:-1,y:-1,pageX:-1,pageY:-1,preventDefault:Hc};function eQe(){return{drag:new Jn,interactionEnd:new Jn,click:new Jn,move:new Jn,wheel:new Jn,pinch:new Jn,gesture:new Jn,resize:new Jn,leave:new Jn,enter:new Jn,modifiers:new Jn,key:new Jn,keyUp:new Jn,keyDown:new Jn,lock:new Jn,trackedPointers:new Jn}}var Trt=["Backspace","Delete"],$8;(r=>{function e(n={}){let{noScroll:o,noContextMenu:i}={...$ye,...n};return{noScroll:o,noContextMenu:i,pointerLock:!1,width:0,height:0,pixelRatio:1,...eQe(),setPixelScale:Hc,updateTrackedPointers:Hc,updateScreenTouches:Hc,requestPointerLock:Hc,exitPointerLock:Hc,dispose:Hc}}r.create=e;function t(n,o={}){let{noScroll:i,noMiddleClickScroll:a,noContextMenu:A,noPinchZoom:s,noTextSelect:c,mask:l,pixelScale:u,preventGestures:g}={...$ye,...o},m=n.clientWidth*S(),p=n.clientHeight*S(),d=!1,f=Jo(),I=Le(),C=Le(),y=Le(),Q=Le(),E=Le(),b={shift:!1,alt:!1,control:!1,meta:!1},x={x:-1,y:-1,pageX:-1,pageY:-1};function S(){return window.devicePixelRatio*u}function w(){return{...b}}function R(_e){return _e.target===document.body||_e.target===n}let T=0,L=!1,F=ya.create(0),v=0,U=!1,G=!1,N;typeof window.ResizeObserver<"u"&&(N=new window.ResizeObserver(he));let k=eQe(),{drag:J,interactionEnd:H,wheel:z,pinch:_,gesture:M,click:q,move:ne,leave:oe,enter:ae,resize:me,modifiers:Se,key:ee,keyUp:O,keyDown:X,lock:Ce,trackedPointers:Ne}=k;$();function $(){n.addEventListener("contextmenu",De,!1),n.addEventListener("wheel",cr,!1),n.addEventListener("mousedown",wt,!1),window.addEventListener("mousemove",Ut,!1),window.addEventListener("mouseup",Wt,!1),n.addEventListener("touchstart",et,!1),n.addEventListener("touchmove",ht,!1),n.addEventListener("touchend",gt,!1),n.addEventListener("gesturechange",ao,!1),n.addEventListener("gesturestart",nr,!1),n.addEventListener("gestureend",Yr,!1),window.addEventListener("blur",be),window.addEventListener("keyup",Ae,!1),window.addEventListener("keydown",Fe,!1),window.addEventListener("keypress",fe,!1),document.addEventListener("pointerlockchange",ye,!1),document.addEventListener("pointerlockerror",Be,!1),N!=null?N.observe(n.parentElement):window.addEventListener("resize",he,!1)}function pe(){L||(L=!0,n.removeEventListener("contextmenu",De,!1),n.removeEventListener("wheel",cr,!1),n.removeEventListener("mousedown",wt,!1),window.removeEventListener("mousemove",Ut,!1),window.removeEventListener("mouseup",Wt,!1),n.removeEventListener("touchstart",et,!1),n.removeEventListener("touchmove",ht,!1),n.removeEventListener("touchend",gt,!1),n.removeEventListener("gesturechange",ao,!1),n.removeEventListener("gesturestart",nr,!1),n.removeEventListener("gestureend",Yr,!1),window.removeEventListener("blur",be),window.removeEventListener("keyup",Ae,!1),window.removeEventListener("keydown",Fe,!1),window.removeEventListener("keypress",fe,!1),document.removeEventListener("pointerlockchange",ye,!1),document.removeEventListener("pointerlockerror",Be,!1),Jt.remove(),N!=null?(N.unobserve(n.parentElement),N.disconnect()):window.removeEventListener("resize",he,!1))}function ye(){n.ownerDocument.pointerLockElement===n?d=!0:d=!1,xr(d),Ce.next(d)}function Be(){console.error("Unable to use Pointer Lock API"),d=!1,xr(d),Ce.next(d)}function De(_e){l(_e.clientX,_e.clientY)&&A&&_e.preventDefault()}function Te(_e){b.alt=_e.altKey,b.shift=_e.shiftKey,b.control=_e.ctrlKey,b.meta=_e.metaKey}function be(){(F||b.shift||b.alt||b.meta||b.control)&&(F=0,b.shift=b.alt=b.control=b.meta=!1)}function Fe(_e){let zt=!1;!b.alt&&_e.altKey&&(zt=!0,b.alt=!0),!b.shift&&_e.shiftKey&&(zt=!0,b.shift=!0),!b.control&&_e.ctrlKey&&(zt=!0,b.control=!0),!b.meta&&_e.metaKey&&(zt=!0,b.meta=!0),zt&&U&&Se.next(w()),R(_e)&&U&&X.next({key:_e.key,code:_e.code,modifiers:w(),...x,preventDefault:()=>_e.preventDefault()})}function Ae(_e){let zt=!1;b.alt&&!_e.altKey&&(zt=!0,b.alt=!1),b.shift&&!_e.shiftKey&&(zt=!0,b.shift=!1),b.control&&!_e.ctrlKey&&(zt=!0,b.control=!1),b.meta&&!_e.metaKey&&(zt=!0,b.meta=!1),zt&&U&&Se.next(w()),Trt.includes(_e.key)&&fe(_e),R(_e)&&U&&O.next({key:_e.key,code:_e.code,modifiers:w(),...x,preventDefault:()=>_e.preventDefault()})}function fe(_e){!R(_e)||!U||ee.next({key:_e.key,code:_e.code,modifiers:w(),...x,preventDefault:()=>_e.preventDefault()})}let Qe={primary:{prev:void 0,down:Le(),end:Le(),axes:[]},secondary:{prev:void 0,down:Le(),end:Le(),axes:[]},distance:-1};function Ie(_e,zt,Ur){let Pr=ya.has(zt,_e);return(Ur?ya.has(Ur,_e):!1)&&!Pr}function le(_e,zt){let{x:Ur,y:Pr,dx:Si,dy:va,ray:Qs,buttons:MA,axes:Mc}=_e,[Bg,Ig]=[Ur,Pr],Jd=as.create(),OC=!0,Ks=zt?Qe.secondary:Qe.primary,{prev:Cg}=Ks;MA===2?ne.next({x:Ur,y:Pr,pageX:Bg,pageY:Ig,buttons:0,button:0,modifiers:Jd,inside:!0,onElement:!0,ray:Qs}):Cg?.buttons===2&&oe.next(void 0);let $g=ya.has(MA,1),zd=Cg?ya.has(Cg.buttons,1):!1;if(zd&&!$g&&(Le.set(Ks.end,Ur,Pr),Le.distance(Ks.end,Ks.down)<20&&q.next({x:Ur,y:Pr,pageX:Bg,pageY:Ig,buttons:32,button:32,modifiers:Jd,ray:Qs}),H.next(void 0)),$g){let $m=!zd;J.next({x:Ur,y:Pr,dx:Si,dy:va,pageX:Bg,pageY:Ig,buttons:32,button:32,modifiers:Jd,isStart:$m,useDelta:OC}),$m&&Le.set(Ks.down,Ur,Pr)}let Wa={x:0,y:0,pageX:0,pageY:0,modifiers:Jd,preventDefault:()=>{}};if(Ie(8,MA,Cg?.buttons)){let $m=zt?"GamepadX":"GamepadA";O.next({...Wa,code:$m,key:$m})}if(Ie(16,MA,Cg?.buttons)){let $m=zt?"GamepadY":"GamepadB";O.next({...Wa,code:$m,key:$m})}Mc&&(Mc[2]<0?(X.next({...Wa,code:"GamepadLeft",key:"GamepadLeft"}),O.next({...Wa,code:"GamepadRight",key:"GamepadRight"})):Mc[2]>0?(X.next({...Wa,code:"GamepadRight",key:"GamepadRight"}),O.next({...Wa,code:"GamepadLeft",key:"GamepadLeft"})):Mc[2]!==Ks.axes[2]&&(O.next({...Wa,code:"GamepadLeft",key:"GamepadLeft"}),O.next({...Wa,code:"GamepadRight",key:"GamepadRight"})),Mc[3]<0?(X.next({...Wa,code:"GamepadUp",key:"GamepadUp"}),O.next({...Wa,code:"GamepadDown",key:"GamepadDown"})):Mc[3]>0?(X.next({...Wa,code:"GamepadDown",key:"GamepadDown"}),O.next({...Wa,code:"GamepadUp",key:"GamepadUp"})):Mc[3]!==Ks.axes[3]&&(O.next({...Wa,code:"GamepadUp",key:"GamepadUp"}),O.next({...Wa,code:"GamepadDown",key:"GamepadDown"}))),Ks.axes=Mc||[],Ks.prev=_e}function Oe(_e,zt,Ur){let Pr=B.distance(_e.ray.origin,zt.ray.origin);if(Qe.distance>0){let Si=Pr/Qe.distance;M.next({scale:Si,rotation:0,deltaScale:0,deltaRotation:0,buttons:Ur,button:Ur,modifiers:w()})}Qe.distance=Pr}function tt(_e){let zt,Ur;for(let Pr of _e)Pr.handedness==="right"?zt=Pr:Pr.handedness==="left"&&(Ur=Pr);!zt&&Ur&&(zt=Ur,Ur=void 0),zt?.buttons===1&&Ur?.buttons===1?Oe(zt,Ur,32):zt?.buttons===2&&Ur?.buttons===2?Oe(zt,Ur,48):(Qe.distance===-1&&(zt&&le(zt,!1),Ur&&le(Ur,!0)),!zt?.buttons&&!Ur?.buttons&&(Qe.distance=-1))}let it,Rt,Mt=-1;function Bt(_e){if(_e.length===2){let Ks=Le.fromObj(_e[0]),Cg=Le.fromObj(_e[1]),$g=Le.distance(Ks,Cg),zd=32;if(Mt>0){let Wa=$g/Mt;M.next({scale:Wa,rotation:0,deltaScale:0,deltaRotation:0,buttons:zd,button:zd,modifiers:w()})}Mt=$g,it=void 0;return}Mt=-1;let zt=_e[0];if(!zt){if(Rt&&it){let Ks=Le.fromObj(Rt),Cg=Le.fromObj(it);if(Le.distance(Ks,Cg)<10){let[$g,zd]=Ks,[Wa,$m]=[$g,zd],kP=as.create(),HP=32,{ray:US}=Rt;q.next({x:$g,y:zd,pageX:Wa,pageY:$m,buttons:HP,button:HP,modifiers:kP,ray:US})}H.next(void 0)}it=void 0,Rt=void 0;return}let Ur=Le.fromObj(zt),[Pr,Si]=Ur,[va,Qs]=[Pr,Si],MA=as.create(),Mc=32,Bg=!0,Ig=it===void 0,Jd=it?Pr-it.x:0,OC=it?Si-it.y:0;it=zt,Ig&&(Rt=zt),J.next({x:Pr,y:Si,dx:Jd,dy:OC,pageX:va,pageY:Qs,buttons:Mc,button:Mc,modifiers:MA,isStart:Ig,useDelta:Bg})}function Zt(_e){let zt=_e.touches[0],Ur=_e.touches[1];return{clientX:(zt.clientX+Ur.clientX)/2,clientY:(zt.clientY+Ur.clientY)/2,pageX:(zt.pageX+Ur.pageX)/2,pageY:(zt.pageY+Ur.pageY)/2,target:_e.target}}function Nr(_e){let zt=_e.touches[0].pageX-_e.touches[1].pageX,Ur=_e.touches[0].pageY-_e.touches[1].pageY;return Math.sqrt(zt*zt+Ur*Ur)}let un=-1,xn,On=Le(),Zo=Le();function oi(_e){un<0||(Le.set(Zo,_e.touches[0].pageX,_e.touches[0].pageY),un+=Le.distance(On,Zo),Le.copy(On,Zo))}let pa=Le(),io=!1,j=0,ue=1;function et(_e){if(_e.preventDefault(),xn=void 0,un=-1,_e.touches.length===1)F=v=1,un=0,Le.set(On,_e.touches[0].pageX,_e.touches[0].pageY),xn=_e.touches[0],Kt(_e.touches[0]),Le.copy(pa,C),io=!0;else if(_e.touches.length===2){F=6,v=2,Te(_e),ue=1,j=Nr(_e);let{pageX:zt,pageY:Ur}=Me(Zt(_e));io||(He(pa,Zt(_e)),io=!0),_.next({isStart:!0,distance:j,delta:0,fraction:ue,fractionDelta:0,startX:pa[0],startY:pa[1],centerPageX:zt,centerPageY:Ur,buttons:F,button:v,modifiers:w()})}else _e.touches.length===3&&(F=v=8,Kt(Zt(_e)))}function gt(_e){if(qt(),xn&&un<=4){let zt=xn;if(!l(zt.clientX,zt.clientY))return;He(Zo,zt);let{pageX:Ur,pageY:Pr}=Me(zt),[Si,va]=Zo;q.next({x:Si,y:va,pageX:Ur,pageY:Pr,buttons:F,button:v,modifiers:w()})}xn=void 0,io=!1}function ht(_e){if(v=0,s&&(_e.preventDefault(),_e.stopPropagation(),_e.originalEvent&&(_e.originalEvent.preventDefault(),_e.originalEvent.stopPropagation())),xn=void 0,_e.touches.length===1)F=1,xn=_e.touches[0],oi(_e),Ar(_e.touches[0]);else if(_e.touches.length===2){F=6,v=2,Te(_e);let{pageX:zt,pageY:Ur}=Me(Zt(_e)),Pr=Nr(_e),Si=j-Pr,va=j/Pr,Qs=va-ue;ue=va,_.next({isStart:!1,distance:Pr,delta:Si,fraction:va,fractionDelta:Qs,startX:pa[0],startY:pa[1],centerPageX:zt,centerPageY:Ur,buttons:F,button:v,modifiers:w()})}else _e.touches.length===3&&(F=8,Ar(Zt(_e)))}function wt(_e){Te(_e),F=R0(_e),v=WD(_e),a&&F===4&&_e.preventDefault,Kt(_e)}function Ut(_e){Te(_e),F=R0(_e),v=0,Ar(_e)}function Wt(_e){Te(_e),F=R0(_e),v=WD(_e),Ot(_e),qt()}function qt(){H.next(void 0)}function Kt(_e){l(_e.clientX,_e.clientY)&&(He(C,_e),Le.copy(I,C),Ge(C)&&(T=1))}function Ot(_e){if(T=0,!!l(_e.clientX,_e.clientY)){if(He(y,_e),!G&&Le.distance(y,I)<4){let{pageX:zt,pageY:Ur}=Me(_e),[Pr,Si]=y;q.next({x:Pr,y:Si,pageX:zt,pageY:Ur,buttons:F,button:v,modifiers:w()})}G=!1}}function Ar(_e){He(y,_e);let{pageX:zt,pageY:Ur}=Me(_e),[Pr,Si]=y,{movementX:va,movementY:Qs}=_e,MA=Ge(y)&&l(_e.clientX,_e.clientY);if(U&&!MA?oe.next(void 0):!U&&MA&&ae.next(void 0),U=MA,x.x=Pr,x.y=Si,x.pageX=zt,x.pageY=Ur,ne.next({x:Pr,y:Si,pageX:zt,pageY:Ur,movementX:va,movementY:Qs,buttons:F,button:v,modifiers:w(),inside:MA,onElement:_e.target===n}),T===0||(c&&_e.preventDefault?.(),Le.div(Q,Le.sub(Q,y,C),ie(E)),Le.magnitude(Q)<1e-6))return;let Mc=T===1;if(Mc&&!l(_e.clientX,_e.clientY))return;Le.distance(y,I)>=4&&(G=!0);let[Bg,Ig]=Q;J.next({x:Pr,y:Si,dx:Bg,dy:Ig,pageX:zt,pageY:Ur,buttons:F,button:v,modifiers:w(),isStart:Mc}),Le.copy(C,y),T=2}function cr(_e){if(!l(_e.clientX,_e.clientY))return;He(y,_e);let{pageX:zt,pageY:Ur}=Me(_e),[Pr,Si]=y;i&&_e.preventDefault();let va=e6(_e);F=v=4,(va.dx||va.dy||va.dz)&&z.next({x:Pr,y:Si,pageX:zt,pageY:Ur,...va,buttons:F,button:v,modifiers:w()})}function rr(_e){g&&(_e.preventDefault(),_e.stopImmediatePropagation?.(),_e.stopPropagation?.())}let yr=0,br=0;function nr(_e){rr(_e),yr=_e.scale,br=_e.rotation,M.next({scale:_e.scale,rotation:_e.rotation,deltaRotation:0,deltaScale:0,isStart:!0,buttons:F,button:v,modifiers:w()})}function se(_e,zt){M.next({scale:_e.scale,rotation:_e.rotation,deltaRotation:br-_e.rotation,deltaScale:yr-_e.scale,isEnd:zt,buttons:F,button:v,modifiers:w()}),br=_e.rotation,yr=_e.scale}function ao(_e){rr(_e),se(_e)}function Yr(_e){rr(_e),se(_e,!0)}function he(){m=n.clientWidth*S(),p=n.clientHeight*S(),me.next({})}function Ge(_e){if(n instanceof Window||n instanceof Document||n===document.body)return!0;{let zt=n.getBoundingClientRect();return _e[0]>=0&&_e[1]>=0&&_e[0]<zt.width&&_e[1]<zt.height}}function ie(_e){return _e[0]=n.clientWidth,_e[1]=n.clientHeight,_e}function He(_e,zt){if(m=n.clientWidth*S(),p=n.clientHeight*S(),d){let Ur=S();_e[0]=(f.x+f.width/2)/Ur,_e[1]=(p-(f.y+f.height/2))/Ur}else{let Ur=n.getBoundingClientRect();_e[0]=(zt.clientX||0)-Ur.left,_e[1]=(zt.clientY||0)-Ur.top}return _e}function Me(_e){return d?{pageX:Math.round(window.innerWidth/2)+f.x,pageY:Math.round(window.innerHeight/2)+f.y}:{pageX:_e.pageX,pageY:_e.pageY}}let $e=30,Jt=Tr();function Tr(){let _e=document.createElement("div"),zt="30%",Ur="10%",Pr=`#000 ${zt}, #0000 0 calc(100% - ${zt}), #000 0`,Si=`linear-gradient(0deg, ${Pr}) 50%/${Ur} 100% no-repeat`,va=`linear-gradient(90deg, ${Pr}) 50%/100% ${Ur} no-repeat`;return Object.assign(_e.style,{width:`${$e}px`,aspectRatio:1,background:`${Si}, ${va}, radial-gradient(circle at 50%, #000 5%, #0000 5%)`,display:"none",zIndex:1e3,position:"absolute",mixBlendMode:"difference",filter:"invert(1)"}),n.parentElement?.appendChild(_e),_e}function xr(_e){if(Jt.style.display=_e?"block":"none",_e){let zt=S(),Ur=(f.x+f.width/2)/zt,Pr=(f.y+f.height/2)/zt;Jt.style.width=`${$e}px`,Jt.style.left=`calc(${Ur}px - ${$e/2}px)`,Jt.style.bottom=`calc(${Pr}px - ${$e/2}px)`}}return{get noScroll(){return i},set noScroll(_e){i=_e},get noContextMenu(){return A},set noContextMenu(_e){A=_e},get width(){return m},get height(){return p},get pixelRatio(){return S()},get pointerLock(){return d},...k,setPixelScale:_e=>{u=_e,m=n.clientWidth*S(),p=n.clientHeight*S()},updateTrackedPointers:_e=>{tt(_e),Ne.next(_e)},updateScreenTouches:_e=>{Bt(_e)},requestPointerLock:_e=>{f=_e,d||n.requestPointerLock()},exitPointerLock:()=>{d&&n.ownerDocument.exitPointerLock()},dispose:pe}}r.fromElement=t})($8||={});function e6(e){let o=0,i=0,a=0,A=0,s=0;return"detail"in e&&(i=e.detail),"wheelDelta"in e&&(i=-e.wheelDelta/120),"wheelDeltaY"in e&&(i=-e.wheelDeltaY/120),"wheelDeltaX"in e&&(o=-e.wheelDeltaX/120),"axis"in e&&e.axis===e.HORIZONTAL_AXIS&&(o=i,i=0),a=o*10,A=i*10,"deltaY"in e&&(A=e.deltaY),"deltaX"in e&&(a=e.deltaX),"deltaZ"in e&&(s=e.deltaZ),(a||A||s)&&e.deltaMode&&(e.deltaMode===1?(a*=40,A*=40,s*=40):(a*=800,A*=800,s*=800)),a&&!o&&(o=a<0?-1:1),A&&!i&&(i=A<0?-1:1),{spinX:o,spinY:i,dx:a,dy:A,dz:s}}var ZD={backgroundColor:h.Color(0,{description:"Background color of the 3D canvas"}),pickingAlphaThreshold:h.Numeric(.5,{min:0,max:1,step:.01},{description:"The minimum opacity value needed for an object to be pickable."}),colorMarker:h.Boolean(!0,{description:"Enable color marker"}),highlightColor:h.Color(ke.fromNormalizedRgb(1,.4,.6)),selectColor:h.Color(ke.fromNormalizedRgb(.2,1,.1)),dimColor:h.Color(ke.fromNormalizedRgb(1,1,1)),highlightStrength:h.Numeric(.3,{min:0,max:1,step:.1}),selectStrength:h.Numeric(.3,{min:0,max:1,step:.1}),dimStrength:h.Numeric(0,{min:0,max:1,step:.1}),markerPriority:h.Select(1,[[1,"Highlight"],[2,"Select"]]),xrayEdgeFalloff:h.Numeric(1,{min:0,max:3,step:.1}),celSteps:h.Numeric(5,{min:2,max:16,step:1}),exposure:h.Numeric(1,{min:0,max:3,step:.01}),light:h.ObjectList({inclination:h.Numeric(150,{min:0,max:180,step:1}),azimuth:h.Numeric(320,{min:0,max:360,step:1}),color:h.Color(ke.fromNormalizedRgb(1,1,1)),intensity:h.Numeric(.6,{min:0,max:5,step:.01})},e=>ke.toHexString(e.color),{defaultValue:[{inclination:150,azimuth:320,color:ke.fromNormalizedRgb(1,1,1),intensity:.6}]}),ambientColor:h.Color(ke.fromNormalizedRgb(1,1,1)),ambientIntensity:h.Numeric(.4,{min:0,max:2,step:.01}),enableAnimation:h.Boolean(!0,{description:"Enable time-based animations."})},XD=B(),t6=B();function tQe(e,t){let r=e.length,{direction:n,color:o}=t||{direction:new Array(r*3).fill(0),color:new Array(r*3).fill(0)};for(let i=0;i<r;++i){let a=e[i];B.directionFromSpherical(XD,kr(a.inclination),kr(a.azimuth),1),B.toArray(XD,n,i*3),B.scale(t6,ke.toVec3Normalized(t6,a.color),a.intensity),B.toArray(t6,o,i*3)}return{count:r,direction:n,color:o}}function r6(e,t){let r=new Array(e.count*3);for(let n=0,o=e.count;n<o;++n)B.fromArray(XD,e.direction,n*3),B.transformDirection(XD,XD,t),B.toArray(XD,r,n*3);return r}var n6;(n=>{let e;(A=>(A[A.None=0]="None",A[A.BlendedFront=1]="BlendedFront",A[A.BlendedBack=2]="BlendedBack"))(e||={});let t;(A=>(A[A.All=0]="All",A[A.Opaque=1]="Opaque",A[A.Transparent=2]="Transparent"))(t||={});function r(o,i={}){let{gl:a,state:A,stats:s}=o,c=h.merge(ZD,h.getDefaultValues(ZD),i),l=tQe(c.light),u=Jo(),g=Le.create(a.drawingBufferWidth,a.drawingBufferHeight),m=ke.toVec3Normalized(B(),c.backgroundColor),p=!1,d=null,f=o.resources.texture("image-uint8","rgba","ubyte","nearest");f.define(1,1),f.load({array:new Uint8Array([255,255,255,255]),width:1,height:1});let I=[["tDepth",f]],C=Y(),y=Y(),Q=Y(),E=Y(),b=Y(),x=Y(),S=Y(),w=Y(),R=Y(),T=Y(),L=Y(),F=B(),v=B(),U=B(),G=ai(),N=Le(),k=fI(),J=1,H=we(),z=B();B.scale(z,ke.toArrayNormalized(c.ambientColor,z,0),c.ambientIntensity);let _={uDrawId:D.create(0),uModel:D.create(Y.identity()),uView:D.create(y),uInvView:D.create(Q),uModelView:D.create(E),uInvModelView:D.create(b),uInvProjection:D.create(x),uProjection:D.create(Y()),uModelViewProjection:D.create(S),uInvModelViewProjection:D.create(w),uHasHeadRotation:D.create(!1),uInvHeadRotation:D.create(R),uHasEyeCamera:D.create(!1),uModelViewEye:D.create(T),uInvModelViewEye:D.create(L),uIsAsymmetricProjection:D.create(!1),uIsOrtho:D.create(1),uViewOffset:D.create(N),uModelScale:D.create(1),uPixelRatio:D.create(o.pixelRatio),uViewport:D.create(Jo.toVec4(lr(),u)),uDrawingBufferSize:D.create(g),uCameraPosition:D.create(v),uCameraDir:D.create(F),uCameraPlane:D.create(ai.toArray(G,lr(),0)),uNear:D.create(1),uFar:D.create(1e4),uFog:D.create(!0),uFogNear:D.create(1),uFogFar:D.create(1e4),uFogColor:D.create(m),uRenderMask:D.create(0),uMarkingDepthTest:D.create(!1),uPickType:D.create(0),uMarkingType:D.create(0),uTransparentBackground:D.create(!1),uLightDirection:D.create(l.direction),uLightColor:D.create(l.color),uAmbientColor:D.create(z),uPickingAlphaThreshold:D.create(c.pickingAlphaThreshold),uHighlightColor:D.create(ke.toVec3Normalized(B(),c.highlightColor)),uSelectColor:D.create(ke.toVec3Normalized(B(),c.selectColor)),uDimColor:D.create(ke.toVec3Normalized(B(),c.dimColor)),uHighlightStrength:D.create(c.highlightStrength),uSelectStrength:D.create(c.selectStrength),uDimStrength:D.create(c.dimStrength),uMarkerPriority:D.create(c.markerPriority),uMarkerAverage:D.create(0),uXrayEdgeFalloff:D.create(c.xrayEdgeFalloff),uCelSteps:D.create(c.celSteps),uExposure:D.create(c.exposure),uTime:D.create(0),uEnableAnimation:D.create(c.enableAnimation)},M=Object.entries(_),q=!0,ne=(le,Oe,tt)=>{if(le.state.disposed||!le.state.visible||!le.state.pickable&&Oe==="pick"||!le.values.drawCount.ref.value||(we.scaleNX(H,le.values.boundingSphere.ref.value,J),!fI.intersectsSphere3D(k,H)))return;let[it,Rt]=le.values.uLod.ref.value;if(it!==0||Rt!==0){let{center:Zt,radius:Nr}=H,un=ai.distanceToPoint(G,Zt);if(un+Nr<it*J||un-Nr>Rt*J)return}if(J===1){if(d!==null&&d(H))return;let Zt=le.values.instanceGrid.ref.value.cellSize>0,Nr=le.values.uInstanceCount.ref.value>1;Zt&&(Nr||le.values.lodLevels)?le.cull(G,k,d,o.stats):le.uncull()}else if(le.values.lodLevels){let{center:Zt,radius:Nr}=H,un=ai.distanceToPoint(G,Zt);le.cullSimple(un,Nr,J)}else le.uncull();let Bt=le.getProgram(Oe);if(A.currentProgramId!==Bt.id&&(q=!0,Bt.use()),q&&(Bt.setUniforms(M),Bt.bindTextures(I,0),q=!1),le.values.dGeometryType.ref.value==="directVolume"){if(Oe!=="color")return;A.disable(a.CULL_FACE),A.frontFace(a.CCW)}else tt===1?(A.enable(a.CULL_FACE),le.values.dFlipSided?.ref.value?(A.frontFace(a.CW),A.cullFace(a.FRONT)):(A.frontFace(a.CCW),A.cullFace(a.BACK))):tt===2?(A.enable(a.CULL_FACE),le.values.dFlipSided?.ref.value?(A.frontFace(a.CW),A.cullFace(a.BACK)):(A.frontFace(a.CCW),A.cullFace(a.FRONT))):(le.values.uDoubleSided?le.values.uDoubleSided.ref.value||le.values.hasReflection.ref.value?A.disable(a.CULL_FACE):A.enable(a.CULL_FACE):A.disable(a.CULL_FACE),le.values.dFlipSided?.ref.value?(A.frontFace(a.CW),A.cullFace(a.FRONT)):(A.frontFace(a.CCW),A.cullFace(a.BACK)));le.render(Oe,I.length)},oe=(le,Oe)=>{D.update(_.uView,le.view),D.update(_.uInvView,Y.invert(Q,le.view)),D.update(_.uProjection,le.projection),D.update(_.uInvProjection,Y.invert(x,le.projection)),D.updateIfChanged(_.uIsOrtho,le.state.mode==="orthographic"?1:0),D.update(_.uViewOffset,le.viewOffset.enabled?Le.set(N,le.viewOffset.offsetX*16,le.viewOffset.offsetY*16):Le.set(N,0,0)),D.updateIfChanged(_.uModelScale,le.scale),D.update(_.uCameraPosition,Y.getTranslation(v,Q)),B.scale(U,le.state.target,le.scale),B.normalize(F,B.sub(F,U,v)),D.update(_.uCameraDir,F),D.updateIfChanged(_.uFar,le.far),D.updateIfChanged(_.uNear,le.near),D.updateIfChanged(_.uFog,le.state.fog>0),D.updateIfChanged(_.uFogFar,le.fogFar),D.updateIfChanged(_.uFogNear,le.fogNear),D.updateIfChanged(_.uTransparentBackground,p),fI.fromProjectionMatrix(k,le.projectionView),ai.copy(G,k[fI.PlaneIndex.Near]),G.constant-=ai.distanceToPoint(G,v),D.update(_.uCameraPlane,ai.toArray(G,_.uCameraPlane.ref.value,0)),D.updateIfChanged(_.uMarkerAverage,Oe.markerAverage),!Y.isZero(le.headRotation)?(D.updateIfChanged(_.uHasHeadRotation,!0),D.update(_.uInvHeadRotation,Y.invert(R,le.headRotation)),D.update(_.uLightDirection,r6(l,R))):(D.updateIfChanged(_.uHasHeadRotation,!1),D.updateIfChanged(_.uInvHeadRotation,Y.id),D.update(_.uLightDirection,l.direction)),D.update(_.uIsAsymmetricProjection,le.isAsymmetricProjection)},ae=(le,Oe,tt,it,Rt)=>{$w(I,"tDepth",tt||f),J=Oe.scale,D.update(_.uModel,Y.scaleUniformly(C,le.view,J)),D.update(_.uModelView,Y.mul(E,Oe.view,C)),D.update(_.uInvModelView,Y.invert(b,E)),D.update(_.uModelViewProjection,Y.mul(S,E,Oe.projection)),D.update(_.uInvModelViewProjection,Y.invert(w,S)),D.updateIfChanged(_.uRenderMask,it),D.updateIfChanged(_.uMarkingDepthTest,Rt),!Y.isZero(Oe.viewEye)?(D.updateIfChanged(_.uHasEyeCamera,!0),D.update(_.uModelViewEye,Y.mul(T,Oe.viewEye,C)),D.update(_.uInvModelViewEye,Y.invert(L,T))):(D.updateIfChanged(_.uHasEyeCamera,!1),D.updateIfChanged(_.uModelViewEye,Y.id),D.updateIfChanged(_.uInvModelViewEye,Y.id)),A.enable(a.SCISSOR_TEST),A.colorMask(!0,!0,!0,!0);let{x:Bt,y:Zt,width:Nr,height:un}=u;A.viewport(Bt,Zt,Nr,un),A.scissor(Bt,Zt,Nr,un),q=!0,A.currentRenderItemId=-1},me=function(le){let Oe=$t(le.values.alpha.ref.value*le.state.alphaFactor,0,1),tt=le.values.dXrayShaded?.ref.value==="on"||le.values.dXrayShaded?.ref.value==="inverted";return Oe===1&&le.values.transparencyAverage.ref.value!==1&&le.values.dGeometryType.ref.value!=="directVolume"&&le.values.dPointStyle?.ref.value!=="fuzzy"&&!tt||le.values.dTransparentBackfaces?.ref.value==="opaque"},Se=function(le){let Oe=$t(le.values.alpha.ref.value*le.state.alphaFactor,0,1),tt=le.values.dXrayShaded?.ref.value==="on"||le.values.dXrayShaded?.ref.value==="inverted";return Oe!==0&&(Oe<1||le.values.transparencyAverage.ref.value>0||le.values.dGeometryType.ref.value==="directVolume"||le.values.dPointStyle?.ref.value==="fuzzy"||le.values.dGeometryType.ref.value==="text"||le.values.dGeometryType.ref.value==="image"||tt)},ee=function(le){return le.values.emissiveAverage.ref.value+le.values.uEmissive.ref.value>0},O=(le,Oe,tt,it)=>{at&&o.timer.mark("Renderer.renderPick"),A.disable(a.BLEND),A.enable(a.DEPTH_TEST),A.depthMask(!0),ae(le,Oe,null,0,!1),D.updateIfChanged(_.uPickType,it);let{renderables:Rt}=le;for(let Mt=0,Bt=Rt.length;Mt<Bt;++Mt)Rt[Mt].state.colorOnly||ne(Rt[Mt],tt,0);at&&o.timer.markEnd("Renderer.renderPick")},X=(le,Oe)=>{at&&o.timer.mark("Renderer.renderDepth"),A.disable(a.BLEND),A.enable(a.DEPTH_TEST),A.depthMask(!0),ae(le,Oe,null,0,!1);let{renderables:tt}=le;for(let it=0,Rt=tt.length;it<Rt;++it)ne(tt[it],"depth",0);at&&o.timer.markEnd("Renderer.renderDepth")},Ce=(le,Oe)=>{at&&o.timer.mark("Renderer.renderDepthOpaque"),A.disable(a.BLEND),A.enable(a.DEPTH_TEST),A.depthMask(!0),ae(le,Oe,null,1,!1);let{renderables:tt}=le;for(let it=0,Rt=tt.length;it<Rt;++it){let Mt=tt[it];me(Mt)&&ne(Mt,"depth",0)}at&&o.timer.markEnd("Renderer.renderDepthOpaque")},Ne=(le,Oe)=>{at&&o.timer.mark("Renderer.renderDepthOpaqueBack"),A.disable(a.BLEND),A.enable(a.DEPTH_TEST),A.depthMask(!0),A.depthFunc(a.GREATER),ae(le,Oe,null,1,!1);let{renderables:tt}=le;for(let it=0,Rt=tt.length;it<Rt;++it){let Mt=tt[it];me(Mt)&&ne(Mt,"depth",2)}A.depthFunc(a.LESS),at&&o.timer.markEnd("Renderer.renderDepthOpaqueBack")},$=(le,Oe,tt)=>{at&&o.timer.mark("Renderer.renderDepthTransparent"),A.disable(a.BLEND),A.enable(a.DEPTH_TEST),A.depthMask(!0),ae(le,Oe,tt,2,!1);let{renderables:it}=le;for(let Rt=0,Mt=it.length;Rt<Mt;++Rt){let Bt=it[Rt];Se(Bt)&&ne(Bt,"depth",0)}at&&o.timer.markEnd("Renderer.renderDepthTransparent")},pe=(le,Oe)=>{at&&o.timer.mark("Renderer.renderMarkingDepth"),A.disable(a.BLEND),A.enable(a.DEPTH_TEST),A.depthMask(!0),ae(le,Oe,null,0,!1),D.updateIfChanged(_.uMarkingType,1);let{renderables:tt}=le;for(let it=0,Rt=tt.length;it<Rt;++it){let Mt=tt[it];$t(Mt.values.alpha.ref.value*Mt.state.alphaFactor,0,1)!==0&&Mt.values.transparencyAverage.ref.value!==1&&Mt.values.markerAverage.ref.value!==1&&ne(tt[it],"marking",0)}at&&o.timer.markEnd("Renderer.renderMarkingDepth")},ye=(le,Oe,tt)=>{at&&o.timer.mark("Renderer.renderMarkingMask"),A.disable(a.BLEND),A.enable(a.DEPTH_TEST),A.depthMask(!0),ae(le,Oe,tt,0,!!tt),D.updateIfChanged(_.uMarkingType,2);let{renderables:it}=le;for(let Rt=0,Mt=it.length;Rt<Mt;++Rt)it[Rt].values.markerAverage.ref.value>0&&ne(it[Rt],"marking",0);at&&o.timer.markEnd("Renderer.renderMarkingMask")},Be=(le,Oe,tt,it)=>{at&&o.timer.mark("Renderer.renderEmissiveOpaque"),A.disable(a.BLEND),A.enable(a.DEPTH_TEST),it?(A.depthMask(!1),A.depthFunc(a.LEQUAL)):A.depthMask(!0),ae(le,Oe,tt,1,!1);let{renderables:Rt}=le;for(let Mt=0,Bt=Rt.length;Mt<Bt;++Mt){let Zt=Rt[Mt];me(Zt)&&(!it||ee(Zt))&&ne(Zt,"emissive",0)}it&&(A.depthFunc(a.LESS),A.depthMask(!0)),at&&o.timer.markEnd("Renderer.renderEmissiveOpaque")},De=(le,Oe,tt)=>{at&&o.timer.mark("Renderer.renderEmissiveTransparent");let it=o.extensions.blendMinMax;A.enable(a.BLEND),A.blendFunc(a.ONE,a.ONE),it&&A.blendEquation(it.MAX),A.enable(a.DEPTH_TEST),A.depthMask(!1),ae(le,Oe,tt,2,!1);let{renderables:Rt}=le;for(let Mt=0,Bt=Rt.length;Mt<Bt;++Mt){let Zt=Rt[Mt];Se(Zt)&&Zt.values.dGeometryType.ref.value!=="directVolume"&&ee(Zt)&&ne(Zt,"emissive",0)}it&&A.blendEquation(a.FUNC_ADD),at&&o.timer.markEnd("Renderer.renderEmissiveTransparent")},Te=(le,Oe)=>{at&&o.timer.mark("Renderer.renderTracing"),A.disable(a.BLEND),A.enable(a.DEPTH_TEST),A.depthMask(!0),ae(le,Oe,null,1,!1);let{renderables:tt}=le;for(let it=0,Rt=tt.length;it<Rt;++it){let Mt=tt[it];me(Mt)&&ne(Mt,"tracing",0)}at&&o.timer.markEnd("Renderer.renderTracing")},be=(le,Oe)=>{le.hasOpaque&&Fe(le,Oe),le.opacityAverage<1&&Ae(le,Oe)},Fe=(le,Oe)=>{at&&o.timer.mark("Renderer.renderOpaque"),A.disable(a.BLEND),A.enable(a.DEPTH_TEST),A.depthMask(!0),ae(le,Oe,null,1,!1);let{renderables:tt}=le;for(let it=0,Rt=tt.length;it<Rt;++it){let Mt=tt[it];me(Mt)&&ne(Mt,"color",0)}at&&o.timer.markEnd("Renderer.renderOpaque")},Ae=(le,Oe)=>{at&&o.timer.mark("Renderer.renderBlendedTransparent"),p?A.blendFunc(a.ONE,a.ONE_MINUS_SRC_ALPHA):A.blendFuncSeparate(a.SRC_ALPHA,a.ONE_MINUS_SRC_ALPHA,a.ONE,a.ONE_MINUS_SRC_ALPHA),A.enable(a.BLEND),A.enable(a.DEPTH_TEST),A.depthMask(!1),ae(le,Oe,null,2,!1);let{renderables:tt}=le;for(let it=0,Rt=tt.length;it<Rt;++it){let Mt=tt[it];Se(Mt)&&(Mt.values.uDoubleSided?.ref.value?(Mt.values.dTransparentBackfaces?.ref.value!=="opaque"&&ne(Mt,"color",2),ne(Mt,"color",1)):ne(Mt,"color",0))}at&&o.timer.markEnd("Renderer.renderBlendedTransparent")};return{clear:(le,Oe,tt)=>{A.enable(a.SCISSOR_TEST),A.enable(a.DEPTH_TEST),A.colorMask(!0,!0,!0,!0),A.depthMask(!0),tt||p&&!Oe?A.clearColor(0,0,0,0):le?A.clearColor(m[0],m[1],m[2],1):A.clearColor(1,1,1,1),a.clear(a.COLOR_BUFFER_BIT|a.DEPTH_BUFFER_BIT)},clearDepth:(le=!1)=>{A.enable(a.SCISSOR_TEST),A.enable(a.DEPTH_TEST),A.depthMask(!0),le?(A.colorMask(!0,!0,!0,!0),A.clearColor(1,1,1,1),a.clear(a.COLOR_BUFFER_BIT|a.DEPTH_BUFFER_BIT)):a.clear(a.DEPTH_BUFFER_BIT)},update:oe,renderPick:O,renderDepth:X,renderDepthOpaque:Ce,renderDepthOpaqueBack:Ne,renderDepthTransparent:$,renderMarkingDepth:pe,renderMarkingMask:ye,renderEmissiveOpaque:Be,renderEmissiveTransparent:De,renderTracing:Te,renderBlended:be,renderOpaque:Fe,renderBlendedTransparent:Ae,renderVolume:(le,Oe,tt)=>{at&&o.timer.mark("Renderer.renderVolume"),A.blendFunc(a.ONE,a.ONE_MINUS_SRC_ALPHA),A.enable(a.BLEND),A.disable(a.DEPTH_TEST),A.depthMask(!1),ae(le,Oe,tt,2,!1);let{renderables:it}=le;for(let Rt=0,Mt=it.length;Rt<Mt;++Rt){let Bt=it[Rt];Bt.values.dGeometryType.ref.value==="directVolume"&&ne(Bt,"color",0)}at&&o.timer.markEnd("Renderer.renderVolume")},renderWboitTransparent:(le,Oe,tt)=>{at&&o.timer.mark("Renderer.renderWboitTransparent"),ae(le,Oe,tt,2,!1);let{renderables:it}=le;for(let Rt=0,Mt=it.length;Rt<Mt;++Rt){let Bt=it[Rt];Se(Bt)&&ne(Bt,"color",0)}at&&o.timer.markEnd("Renderer.renderWboitTransparent")},renderDpoitTransparent:(le,Oe,tt,it)=>{at&&o.timer.mark("Renderer.renderDpoitTransparent"),A.enable(a.BLEND),$w(I,"tDpoitDepth",it.depth),$w(I,"tDpoitFrontColor",it.frontColor),$w(I,"tDpoitBackColor",it.backColor),ae(le,Oe,tt,2,!1);let{renderables:Rt}=le;for(let Mt=0,Bt=Rt.length;Mt<Bt;++Mt){let Zt=Rt[Mt];Se(Zt)&&ne(Zt,"color",0)}at&&o.timer.markEnd("Renderer.renderDpoitTransparent")},setTime:le=>{D.updateIfChanged(_.uTime,le)},setProps:le=>{le.backgroundColor!==void 0&&le.backgroundColor!==c.backgroundColor&&(c.backgroundColor=le.backgroundColor,ke.toVec3Normalized(m,c.backgroundColor),D.update(_.uFogColor,B.copy(_.uFogColor.ref.value,m))),le.pickingAlphaThreshold!==void 0&&le.pickingAlphaThreshold!==c.pickingAlphaThreshold&&(c.pickingAlphaThreshold=le.pickingAlphaThreshold,D.update(_.uPickingAlphaThreshold,c.pickingAlphaThreshold)),le.colorMarker!==void 0&&le.colorMarker!==c.colorMarker&&(c.colorMarker=le.colorMarker),le.highlightColor!==void 0&&le.highlightColor!==c.highlightColor&&(c.highlightColor=le.highlightColor,D.update(_.uHighlightColor,ke.toVec3Normalized(_.uHighlightColor.ref.value,c.highlightColor))),le.selectColor!==void 0&&le.selectColor!==c.selectColor&&(c.selectColor=le.selectColor,D.update(_.uSelectColor,ke.toVec3Normalized(_.uSelectColor.ref.value,c.selectColor))),le.dimColor!==void 0&&le.dimColor!==c.dimColor&&(c.dimColor=le.dimColor,D.update(_.uDimColor,ke.toVec3Normalized(_.uDimColor.ref.value,c.dimColor))),le.highlightStrength!==void 0&&le.highlightStrength!==c.highlightStrength&&(c.highlightStrength=le.highlightStrength,D.update(_.uHighlightStrength,c.highlightStrength)),le.selectStrength!==void 0&&le.selectStrength!==c.selectStrength&&(c.selectStrength=le.selectStrength,D.update(_.uSelectStrength,c.selectStrength)),le.dimStrength!==void 0&&le.dimStrength!==c.dimStrength&&(c.dimStrength=le.dimStrength,D.update(_.uDimStrength,c.dimStrength)),le.markerPriority!==void 0&&le.markerPriority!==c.markerPriority&&(c.markerPriority=le.markerPriority,D.update(_.uMarkerPriority,c.markerPriority)),le.xrayEdgeFalloff!==void 0&&le.xrayEdgeFalloff!==c.xrayEdgeFalloff&&(c.xrayEdgeFalloff=le.xrayEdgeFalloff,D.update(_.uXrayEdgeFalloff,c.xrayEdgeFalloff)),le.celSteps!==void 0&&le.celSteps!==c.celSteps&&(c.celSteps=le.celSteps,D.update(_.uCelSteps,c.celSteps)),le.exposure!==void 0&&le.exposure!==c.exposure&&(c.exposure=le.exposure,D.update(_.uExposure,c.exposure)),le.light!==void 0&&!ka(le.light,c.light)&&(c.light=le.light,Object.assign(l,tQe(le.light,l)),D.update(_.uLightDirection,l.direction),D.update(_.uLightColor,l.color)),le.ambientColor!==void 0&&le.ambientColor!==c.ambientColor&&(c.ambientColor=le.ambientColor,B.scale(z,ke.toArrayNormalized(c.ambientColor,z,0),c.ambientIntensity),D.update(_.uAmbientColor,z)),le.ambientIntensity!==void 0&&le.ambientIntensity!==c.ambientIntensity&&(c.ambientIntensity=le.ambientIntensity,B.scale(z,ke.toArrayNormalized(c.ambientColor,z,0),c.ambientIntensity),D.update(_.uAmbientColor,z)),le.enableAnimation!==void 0&&le.enableAnimation!==c.enableAnimation&&(c.enableAnimation=le.enableAnimation,D.update(_.uEnableAnimation,c.enableAnimation))},setViewport:(le,Oe,tt,it)=>{A.viewport(le,Oe,tt,it),A.scissor(le,Oe,tt,it),(le!==u.x||Oe!==u.y||tt!==u.width||it!==u.height)&&(Jo.set(u,le,Oe,tt,it),D.update(_.uViewport,lr.set(_.uViewport.ref.value,le,Oe,tt,it)))},setTransparentBackground:le=>{p=le},setDrawingBufferSize:(le,Oe)=>{(le!==g[0]||Oe!==g[1])&&D.update(_.uDrawingBufferSize,Le.set(g,le,Oe))},setPixelRatio:le=>{D.update(_.uPixelRatio,le)},setOcclusionTest:le=>{d=le},props:c,get stats(){return{programCount:o.stats.resourceCounts.program,shaderCount:o.stats.resourceCounts.shader,attributeCount:o.stats.resourceCounts.attribute,elementsCount:o.stats.resourceCounts.elements,framebufferCount:o.stats.resourceCounts.framebuffer,renderbufferCount:o.stats.resourceCounts.renderbuffer,textureCount:o.stats.resourceCounts.texture,vertexArrayCount:o.stats.resourceCounts.vertexArray,drawCount:s.drawCount,instanceCount:s.instanceCount,instancedDrawCount:s.instancedDrawCount}},get light(){return l},get ambientColor(){return _.uAmbientColor.ref.value},dispose:()=>{}}}n.create=r})(n6||={});function Gt(e,t="",r=""){return Gt.create(e,t,r)}(l=>{function e(u,g="",m=""){return{triggers:u,action:g,description:m}}l.create=e;function t(u){return!!u&&Array.isArray(u.triggers)&&typeof u.action=="string"}l.isBinding=t,l.Empty={triggers:[],action:"",description:""};function n(u){return u.triggers.length===0||u.triggers.every(g=>g.buttons===void 0&&g.modifiers===void 0&&!g.code)}l.isEmpty=n;function o(u,g,m){return u.triggers.some(p=>s.match(p,g,m))}l.match=o;function i(u,g,m,p){return u.triggers.some(d=>s.matchKey(d,g,m,p))}l.matchKey=i;function a(u){return u.triggers.map(s.format).join(" or ")}l.formatTriggers=a;function A(u,g=""){let m=u.description||Ra(g);return Sue(m,{triggers:"<i>"+a(u)+"</i>"})}l.format=A;function s(u,g){return s.create(u,g)}l.Trigger=s;function c(u,g){return s.create(void 0,g,u)}l.TriggerKey=c,(f=>{function u(I,C,y){return{buttons:I,modifiers:C,code:y}}f.create=u,f.Empty={};function m(I,C,y){let{buttons:Q,modifiers:E}=I;return Q!==void 0&&(Q===C||ya.has(Q,C))&&(!E||as.areEqual(E,y))}f.match=m;function p(I,C,y,Q){let{modifiers:E,code:b}=I;return b!==void 0&&(b===C||b.length===1&&C.length===4&&C.startsWith("Key")&&!!Q&&Q.length===1&&Q.toUpperCase()===b.toUpperCase())&&(!E||as.areEqual(E,y))}f.matchKey=p;function d(I){let C=[],y=Prt(I.buttons,I.code);y&&C.push(y);let Q=Nrt(I.code);Q&&C.push(Q);let E=Grt(I.modifiers);return E&&C.push(E),C.join(" + ")}f.format=d})(s=l.Trigger||={})})(Gt||={});var DQ=ya;function Prt(e,t){let r=[];return e===void 0&&!t?r.push("any mouse button"):e===0?r.push("mouse hover"):e!==void 0&&(DQ.has(e,DQ.Flag.Primary)&&r.push("left mouse button"),DQ.has(e,DQ.Flag.Secondary)&&r.push("right mouse button"),DQ.has(e,DQ.Flag.Auxilary)&&r.push("wheel/middle mouse button"),DQ.has(e,DQ.Flag.Forth)&&r.push("three fingers")),r.join(" + ")}function Grt(e,t){let r=[];return e?(e.alt&&r.push("alt key"),e.control&&r.push("control key"),e.meta&&r.push("meta/command key"),e.shift&&r.push("shift key"),t&&r.length===0&&r.push("no key")):t&&r.push("any key"),r.join(" + ")}function Nrt(e){return e?.startsWith("Key")&&(e=e.substring(3)),e&&uc(e).toLowerCase()}var Qh=ya,pd=as,Eh=Gt.Trigger,Yu=Gt.TriggerKey,Mrt={dragRotate:Gt([Eh(Qh.Flag.Primary,pd.create()),Eh(Qh.Flag.Trigger)],"Rotate","Drag using ${triggers}"),dragRotateZ:Gt([Eh(Qh.Flag.Primary,pd.create({shift:!0,control:!0}))],"Rotate around z-axis (roll)","Drag using ${triggers}"),dragPan:Gt([Eh(Qh.Flag.Secondary,pd.create()),Eh(Qh.Flag.Primary,pd.create({control:!0}))],"Pan","Drag using ${triggers}"),dragZoom:Gt.Empty,dragFocus:Gt([Eh(Qh.Flag.Forth,pd.create())],"Focus","Drag using ${triggers}"),dragFocusZoom:Gt([Eh(Qh.Flag.Auxilary,pd.create())],"Focus and zoom","Drag using ${triggers}"),scrollZoom:Gt([Eh(Qh.Flag.Auxilary,pd.create())],"Zoom","Scroll using ${triggers}"),scrollFocus:Gt([Eh(Qh.Flag.Auxilary,pd.create({shift:!0}))],"Clip","Scroll using ${triggers}"),scrollFocusZoom:Gt.Empty,keyMoveForward:Gt([Yu("KeyW"),Yu("GamepadUp")],"Move forward","Press ${triggers}"),keyMoveBack:Gt([Yu("KeyS"),Yu("GamepadDown")],"Move back","Press ${triggers}"),keyMoveLeft:Gt([Yu("KeyA")],"Move left","Press ${triggers}"),keyMoveRight:Gt([Yu("KeyD")],"Move right","Press ${triggers}"),keyMoveUp:Gt([Yu("KeyR")],"Move up","Press ${triggers}"),keyMoveDown:Gt([Yu("KeyF")],"Move down","Press ${triggers}"),keyRollLeft:Gt([Yu("KeyQ")],"Roll left","Press ${triggers}"),keyRollRight:Gt([Yu("KeyE")],"Roll right","Press ${triggers}"),keyPitchUp:Gt([Yu("ArrowUp",pd.create({shift:!0}))],"Pitch up","Press ${triggers}"),keyPitchDown:Gt([Yu("ArrowDown",pd.create({shift:!0}))],"Pitch down","Press ${triggers}"),keyYawLeft:Gt([Yu("ArrowLeft",pd.create({shift:!0}))],"Yaw left","Press ${triggers}"),keyYawRight:Gt([Yu("ArrowRight",pd.create({shift:!0}))],"Yaw right","Press ${triggers}"),boostMove:Gt([Yu("ShiftLeft")],"Boost move","Press ${triggers}"),enablePointerLock:Gt([Yu("Space",pd.create({control:!0}))],"Enable pointer lock","Press ${triggers}")},hR={rotateSpeed:h.Numeric(5,{min:1,max:10,step:1}),zoomSpeed:h.Numeric(7,{min:1,max:15,step:1}),panSpeed:h.Numeric(1,{min:.1,max:5,step:.1}),moveSpeed:h.Numeric(.75,{min:.1,max:3,step:.1}),boostMoveFactor:h.Numeric(5,{min:.1,max:10,step:.1}),flyMode:h.Boolean(!1),animate:h.MappedStatic("off",{off:h.EmptyGroup(),spin:h.Group({speed:h.Numeric(.1,{min:-2,max:2,step:.01},{description:"Number of rotations per second"}),axis:h.Vec3(B.create(0,-1,0),{},{description:"Axis of rotation in camera space"})},{description:"Spin the 3D scene around an axis in camera space"}),rock:h.Group({speed:h.Numeric(.3,{min:-5,max:5,step:.1},{description:"Number of oscilations per second"}),angle:h.Numeric(10,{min:0,max:90,step:1},{description:"How many degrees to rotate in each direction."}),axis:h.Vec3(B.create(0,-1,0),{},{description:"Axis of rotation in camera space"})},{description:"Rock the 3D scene around an axis in camera space"})}),staticMoving:h.Boolean(!0,{isHidden:!0}),dynamicDampingFactor:h.Numeric(.2,{},{isHidden:!0}),minDistance:h.Numeric(.01,{},{isHidden:!0}),maxDistance:h.Numeric(1e150,{},{isHidden:!0}),gestureScaleFactor:h.Numeric(1,{},{isHidden:!0}),maxWheelDelta:h.Numeric(.02,{},{isHidden:!0}),autoAdjustMinMaxDistance:h.MappedStatic("on",{off:h.EmptyGroup(),on:h.Group({minDistanceFactor:h.Numeric(0),minDistancePadding:h.Numeric(5),maxDistanceFactor:h.Numeric(10),maxDistanceMin:h.Numeric(20)})},{isHidden:!0})},o6={bindings:Mrt};var i6;(t=>{function e(r,n,o,i={},a={}){let A={...h.getDefaultValues(hR),...i},s={...o6,...a},c=s.bindings,l=Jo.clone(n.viewport),u=!1,g=r.drag.subscribe(io),m=r.interactionEnd.subscribe(j),p=r.wheel.subscribe(ue),d=r.pinch.subscribe(et),f=r.keyDown.subscribe(ht),I=r.keyUp.subscribe(wt),C=r.move.subscribe(gt),y=r.lock.subscribe(qt),Q=r.leave.subscribe(Ot),E=!1,b=B(),x=B(),S=Le(),w=Le(),R=B(),T=0,L=Le(),F=Le(),v=0,U=0,G=0,N=Le(),k=Le(),J=Le(),H=Le(),z=Le(),_=Le(),M=B.clone(n.target),q=B.clone(n.position),ne=B.clone(n.up),oe=Le();function ae(ie,He){return Le.set(oe,(ie-l.x)/l.width,(He-l.y)/l.height)}let me=Le();function Se(ie,He){return Le.set(me,(ie-l.width*.5-l.x)/(l.width*.5),(l.height+2*(l.y-He))/l.width)}function ee(){let ie=r.width/r.height||1;return A.rotateSpeed*r.pixelRatio*ie}let O=B(),X=gr(),Ce=B(),Ne=B(),$=B(),pe=B();function ye(){let ie=w[0]-S[0],He=w[1]-S[1];B.set(pe,ie,He,0);let Me=B.magnitude(pe)*ee();Me?(B.sub(x,n.position,n.target),B.normalize(Ce,x),B.normalize(Ne,n.up),B.normalize($,B.cross($,Ne,Ce)),B.setMagnitude(Ne,Ne,He),B.setMagnitude($,$,ie),B.add(pe,Ne,$),B.normalize(O,B.cross(O,pe,x)),gr.setAxisAngle(X,O,Me),B.transformQuat(x,x,X),B.transformQuat(n.up,n.up,X),B.copy(R,O),T=Me):!A.staticMoving&&T&&(T*=Math.sqrt(1-A.dynamicDampingFactor),B.sub(x,n.position,n.target),gr.setAxisAngle(X,R,T),B.transformQuat(x,x,X),B.transformQuat(n.up,n.up,X)),Le.copy(S,w)}let Be=gr(),De=B();function Te(){let ie=(Bt.rollRight-Bt.rollLeft)/45,He=(F[0]-L[0])*-Math.sign(F[1]),Me=(F[1]-L[1])*-Math.sign(F[0]),$e=-A.rotateSpeed*(-He+Me)+ie;$e?(B.normalize(De,x),gr.setAxisAngle(Be,De,$e),B.transformQuat(n.up,n.up,Be),v=$e):!A.staticMoving&&v&&(v*=Math.sqrt(1-A.dynamicDampingFactor),B.normalize(De,x),gr.setAxisAngle(Be,De,v),B.transformQuat(n.up,n.up,Be)),Le.copy(L,F)}let be=gr(),Fe=B();function Ae(){let ie=(Bt.pitchUp-Bt.pitchDown)/(A.flyMode?360:90),He=-A.rotateSpeed*ie;He?(B.cross(Fe,x,n.up),B.normalize(Fe,Fe),gr.setAxisAngle(be,Fe,He),B.transformQuat(x,x,be),B.transformQuat(n.up,n.up,be),U=He):!A.staticMoving&&U&&(U*=Math.sqrt(1-A.dynamicDampingFactor),B.cross(Fe,x,n.up),B.normalize(Fe,Fe),gr.setAxisAngle(be,Fe,U),B.transformQuat(x,x,be),B.transformQuat(n.up,n.up,be))}let fe=gr(),Qe=B();function Ie(){let ie=(Bt.yawRight-Bt.yawLeft)/(A.flyMode?360:90),He=-A.rotateSpeed*ie;He?(B.normalize(Qe,n.up),gr.setAxisAngle(fe,Qe,He),B.transformQuat(x,x,fe),B.transformQuat(n.up,n.up,fe),G=He):!A.staticMoving&&G&&(G*=Math.sqrt(1-A.dynamicDampingFactor),B.normalize(Qe,n.up),gr.setAxisAngle(fe,Qe,G),B.transformQuat(x,x,fe),B.transformQuat(n.up,n.up,fe))}function le(){let ie=1+(k[1]-N[1])*A.zoomSpeed;ie!==1&&ie>0&&B.scale(x,x,ie),A.staticMoving?Le.copy(N,k):N[1]+=(k[1]-N[1])*A.dynamicDampingFactor}function Oe(){let ie=(H[1]-J[1])*A.zoomSpeed;if(ie!==0){let He=Math.max(1,n.state.radius+n.state.radius*ie);n.setState({radius:He})}A.staticMoving?Le.copy(J,H):J[1]+=(H[1]-J[1])*A.dynamicDampingFactor}let tt=Le(),it=B(),Rt=B();function Mt(){if(Le.sub(tt,Le.copy(tt,_),z),Le.squaredMagnitude(tt)){let ie=r.pixelRatio*A.panSpeed;tt[0]*=1/n.zoom*n.viewport.width*ie,tt[1]*=1/n.zoom*n.viewport.height*ie,B.cross(Rt,B.copy(Rt,x),n.up),B.setMagnitude(Rt,Rt,tt[0]),B.setMagnitude(it,n.up,tt[1]),B.add(Rt,Rt,it),B.add(n.position,n.position,Rt),B.add(n.target,n.target,Rt),A.staticMoving?Le.copy(z,_):(Le.sub(tt,_,z),Le.scale(tt,tt,A.dynamicDampingFactor),Le.add(z,z,tt))}}let Bt={moveUp:0,moveDown:0,moveLeft:0,moveRight:0,moveForward:0,moveBack:0,pitchUp:0,pitchDown:0,yawLeft:0,yawRight:0,rollLeft:0,rollRight:0,boostMove:0},Zt=B(),Nr=B();function un(ie){B.sub(Nr,n.position,n.target);let He=Math.max(n.state.minNear,A.minDistance);B.setMagnitude(Nr,Nr,He);let Me=A.flyMode||r.pointerLock,$e=ie*(60/1e3)*A.moveSpeed*(Bt.boostMove===1?A.boostMoveFactor:1);if(Bt.moveForward===1&&(B.distance(n.position,o.boundingSphereVisible.center)<o.boundingSphereVisible.radius&&Me?(B.normalize(Zt,Nr),B.scaleAndSub(n.position,n.position,Zt,$e)):(B.sub(Zt,n.position,n.target),B.scale(Zt,Zt,1-$e/100),B.add(n.position,n.target,Zt)),Me&&B.sub(n.target,n.position,Nr)),Bt.moveBack===1&&(B.distance(n.position,o.boundingSphereVisible.center)<o.boundingSphereVisible.radius&&Me?(B.normalize(Zt,Nr),B.scaleAndAdd(n.position,n.position,Zt,$e)):(B.sub(Zt,n.position,n.target),B.scale(Zt,Zt,1+$e/100),B.add(n.position,n.target,Zt)),Me&&B.sub(n.target,n.position,Nr)),Bt.moveLeft===1&&(B.cross(Zt,Nr,n.up),B.normalize(Zt,Zt),Me?(B.scaleAndAdd(n.position,n.position,Zt,$e),B.sub(n.target,n.position,Nr)):(B.scaleAndSub(n.position,n.position,Zt,$e),B.sub(n.target,n.position,x))),Bt.moveRight===1&&(B.cross(Zt,Nr,n.up),B.normalize(Zt,Zt),Me?(B.scaleAndSub(n.position,n.position,Zt,$e),B.sub(n.target,n.position,Nr)):(B.scaleAndAdd(n.position,n.position,Zt,$e),B.sub(n.target,n.position,x))),Bt.moveUp===1&&(B.normalize(Zt,n.up),Me?(B.scaleAndAdd(n.position,n.position,Zt,$e),B.sub(n.target,n.position,Nr)):(B.scaleAndSub(n.position,n.position,Zt,$e),B.sub(n.target,n.position,x))),Bt.moveDown===1&&(B.normalize(Zt,n.up),Me?(B.scaleAndSub(n.position,n.position,Zt,$e),B.sub(n.target,n.position,Nr)):(B.scaleAndAdd(n.position,n.position,Zt,$e),B.sub(n.target,n.position,x))),Me){let Jt=B.distance(n.position,o.boundingSphereVisible.center);n.setState({minFar:Jt+o.boundingSphereVisible.radius})}}function xn(){let ie=Math.min(Math.max(n.state.radiusMax*1e3,.01),A.maxDistance);B.squaredMagnitude(x)>ie*ie&&(B.setMagnitude(x,x,ie),B.add(n.position,n.target,x),Le.copy(N,k),Le.copy(J,H)),B.squaredMagnitude(x)<A.minDistance*A.minDistance&&(B.setMagnitude(x,x,A.minDistance),B.add(n.position,n.target,x),Le.copy(N,k),Le.copy(J,H))}function On(ie,He){return ie*=r.pixelRatio,He*=r.pixelRatio,ie>l.x+l.width||r.height-He>l.y+l.height||ie<l.x||r.height-He<l.y}let Zo=-1;function oi(ie){if(Zo===ie)return;let He=ie-Zo;Zo>0&&(A.animate.name==="spin"?se(He):A.animate.name==="rock"&&Yr(He)),B.sub(x,n.position,n.target),ye(),Te(),Ae(),Ie(),le(),Oe(),Mt(),B.add(n.position,n.target,x),xn(),Zo>0&&un(Math.min(He,15*1e3/60)),B.sub(x,n.position,n.target),xn(),B.squaredDistance(b,n.position)>1e-6&&B.copy(b,n.position),Zo=ie}function pa(){B.copy(n.target,M),B.copy(n.position,q),B.copy(n.up,ne),B.sub(x,n.position,n.target),B.copy(b,n.position)}function io({x:ie,y:He,dx:Me,dy:$e,pageX:Jt,pageY:Tr,buttons:xr,modifiers:_e,isStart:zt,useDelta:Ur}){let Pr=!Ur&&On(ie,He);if(zt&&Pr||!zt&&!E)return;E=!0,he();let Si=Gt.match(c.dragRotate,xr,_e),va=Gt.match(c.dragRotateZ,xr,_e),Qs=Gt.match(c.dragPan,xr,_e),MA=Gt.match(c.dragZoom,xr,_e),Mc=Gt.match(c.dragFocus,xr,_e),Bg=Gt.match(c.dragFocusZoom,xr,_e);Ur&&Si&&Le.copy(S,Se(Jt-Me,Tr-$e)),Se(Jt,Tr),ae(Jt,Tr);let Ig=r.pixelRatio,Jd=(ie*Ig-l.width/2-l.x)/l.width,OC=-(r.height-He*Ig-l.height/2-l.y)/l.height;if(zt&&(Si&&(Le.copy(w,me),Le.copy(S,w)),va&&(Le.set(F,Jd,OC),Le.copy(L,F)),(MA||Bg)&&(Le.copy(N,oe),Le.copy(k,N)),Mc&&(Le.copy(J,oe),Le.copy(H,J)),Qs&&(Le.copy(z,oe),Le.copy(_,z))),Si&&Le.copy(w,me),va&&Le.set(F,Jd,OC),(MA||Bg)&&Le.copy(k,oe),Mc&&Le.copy(H,oe),Bg){let Ks=B.distance(n.state.position,n.state.target);n.setState({radius:Ks/5})}Qs&&Le.copy(_,oe)}function j(){E=!1}function ue({x:ie,y:He,spinX:Me,spinY:$e,dz:Jt,buttons:Tr,modifiers:xr}){if(On(ie,He))return;let _e=Qce(Me*.075,$e*.075,Jt*1e-4);_e<-A.maxWheelDelta?_e=-A.maxWheelDelta:_e>A.maxWheelDelta&&(_e=A.maxWheelDelta),Gt.match(c.scrollZoom,Tr,xr)&&(k[1]+=_e),Gt.match(c.scrollFocus,Tr,xr)&&(H[1]+=_e)}function et({isStart:ie,startX:He,startY:Me,centerPageX:$e,centerPageY:Jt,fractionDelta:Tr,buttons:xr,modifiers:_e}){if(On(He,Me))return;let zt=Gt.match(c.dragPan,xr,_e),Ur=Gt.match(c.scrollZoom,xr,_e);E=zt||Ur,zt&&(ae($e,Jt),ie?(Le.copy(z,oe),Le.copy(_,z)):Le.copy(_,oe)),Ur&&(k[1]+=A.gestureScaleFactor*Tr)}function gt({movementX:ie,movementY:He}){if(!r.pointerLock||ie===void 0||He===void 0)return;let Me=l.width*.5-l.x,$e=l.height*.5-l.y;Le.copy(S,Se(Me,$e)),Le.copy(w,Se(ie+Me,He+$e))}function ht({modifiers:ie,code:He,key:Me,x:$e,y:Jt}){On($e,Jt)||(Gt.matchKey(c.keyMoveForward,He,ie,Me)?Bt.moveForward=1:Gt.matchKey(c.keyMoveBack,He,ie,Me)?Bt.moveBack=1:Gt.matchKey(c.keyMoveLeft,He,ie,Me)?Bt.moveLeft=1:Gt.matchKey(c.keyMoveRight,He,ie,Me)?Bt.moveRight=1:Gt.matchKey(c.keyMoveUp,He,ie,Me)?Bt.moveUp=1:Gt.matchKey(c.keyMoveDown,He,ie,Me)?Bt.moveDown=1:Gt.matchKey(c.keyRollLeft,He,ie,Me)?Bt.rollLeft=1:Gt.matchKey(c.keyRollRight,He,ie,Me)?Bt.rollRight=1:Gt.matchKey(c.keyPitchUp,He,ie,Me)?Bt.pitchUp=1:Gt.matchKey(c.keyPitchDown,He,ie,Me)?Bt.pitchDown=1:Gt.matchKey(c.keyYawLeft,He,ie,Me)?Bt.yawLeft=1:Gt.matchKey(c.keyYawRight,He,ie,Me)&&(Bt.yawRight=1),Gt.matchKey(c.boostMove,He,ie,Me)&&(Bt.boostMove=1),Gt.matchKey(c.enablePointerLock,He,ie,Me)&&r.requestPointerLock(l))}function wt({modifiers:ie,code:He,key:Me,x:$e,y:Jt}){if(On($e,Jt))return;let Tr=!1;He.startsWith("Alt")?(Tr=!0,ie.alt=!0):He.startsWith("Shift")?(Tr=!0,ie.shift=!0):He.startsWith("Control")?(Tr=!0,ie.control=!0):He.startsWith("Meta")&&(Tr=!0,ie.meta=!0);let xr=[];Tr?(Bt.moveForward&&xr.push(c.keyMoveForward.triggers[0]?.code||""),Bt.moveBack&&xr.push(c.keyMoveBack.triggers[0]?.code||""),Bt.moveLeft&&xr.push(c.keyMoveLeft.triggers[0]?.code||""),Bt.moveRight&&xr.push(c.keyMoveRight.triggers[0]?.code||""),Bt.moveUp&&xr.push(c.keyMoveUp.triggers[0]?.code||""),Bt.moveDown&&xr.push(c.keyMoveDown.triggers[0]?.code||""),Bt.rollLeft&&xr.push(c.keyRollLeft.triggers[0]?.code||""),Bt.rollRight&&xr.push(c.keyRollRight.triggers[0]?.code||""),Bt.pitchUp&&xr.push(c.keyPitchUp.triggers[0]?.code||""),Bt.pitchDown&&xr.push(c.keyPitchDown.triggers[0]?.code||""),Bt.yawLeft&&xr.push(c.keyYawLeft.triggers[0]?.code||""),Bt.yawRight&&xr.push(c.keyYawRight.triggers[0]?.code||"")):xr.push(He);for(let _e of xr)Gt.matchKey(c.keyMoveForward,_e,ie,Me)?Bt.moveForward=0:Gt.matchKey(c.keyMoveBack,_e,ie,Me)?Bt.moveBack=0:Gt.matchKey(c.keyMoveLeft,_e,ie,Me)?Bt.moveLeft=0:Gt.matchKey(c.keyMoveRight,_e,ie,Me)?Bt.moveRight=0:Gt.matchKey(c.keyMoveUp,_e,ie,Me)?Bt.moveUp=0:Gt.matchKey(c.keyMoveDown,_e,ie,Me)?Bt.moveDown=0:Gt.matchKey(c.keyRollLeft,_e,ie,Me)?Bt.rollLeft=0:Gt.matchKey(c.keyRollRight,_e,ie,Me)?Bt.rollRight=0:Gt.matchKey(c.keyPitchUp,_e,ie,Me)?Bt.pitchUp=0:Gt.matchKey(c.keyPitchDown,_e,ie,Me)?Bt.pitchDown=0:Gt.matchKey(c.keyYawLeft,_e,ie,Me)?Bt.yawLeft=0:Gt.matchKey(c.keyYawRight,_e,ie,Me)&&(Bt.yawRight=0);Gt.matchKey(c.boostMove,He,ie,Me)&&(Bt.boostMove=0)}function Ut(){B.sub(Nr,n.position,n.target);let ie=Math.max(n.state.minNear,A.minDistance);B.setMagnitude(Nr,Nr,ie),B.sub(n.target,n.position,Nr);let He=B.distance(n.position,o.boundingSphereVisible.center);n.setState({minFar:He+o.boundingSphereVisible.radius})}function Wt(){let{center:ie,radius:He}=o.boundingSphereVisible;if(B.distance(n.position,ie)>He){let $e=n.getFocus(ie,He);n.setState({...$e,minFar:0})}else n.setState({minFar:0,radius:o.boundingSphereVisible.radius})}function qt(ie){ie?Ut():Wt()}function Kt(){Bt.moveForward=0,Bt.moveBack=0,Bt.moveLeft=0,Bt.moveRight=0,Bt.moveUp=0,Bt.moveDown=0,Bt.rollLeft=0,Bt.rollRight=0,Bt.pitchUp=0,Bt.pitchDown=0,Bt.yawLeft=0,Bt.yawRight=0,Bt.boostMove=0}function Ot(){Kt()}function Ar(){u||(u=!0,g.unsubscribe(),p.unsubscribe(),d.unsubscribe(),m.unsubscribe(),f.unsubscribe(),I.unsubscribe(),C.unsubscribe(),y.unsubscribe(),Q.unsubscribe())}let cr=gr(),rr=B(),yr=B(),br=B(),nr=B();function se(ie){if(A.animate.name!=="spin"||A.animate.params.speed===0||E)return;let He=2*Math.PI*A.animate.params.speed/1e3,Me=ie*He;B.sub(x,n.position,n.target),B.normalize(nr,x),B.normalize(yr,n.up),B.cross(br,yr,nr),B.normalize(br,br);let $e=A.animate.params.axis;B.set(rr,$e[0]*br[0]+$e[1]*yr[0]+$e[2]*nr[0],$e[0]*br[1]+$e[1]*yr[1]+$e[2]*nr[1],$e[0]*br[2]+$e[1]*yr[2]+$e[2]*nr[2]),B.normalize(rr,rr),gr.setAxisAngle(cr,rr,Me),B.transformQuat(x,x,cr),B.transformQuat(n.up,n.up,cr),B.add(n.position,n.target,x)}let ao=0;function Yr(ie){if(A.animate.name!=="rock"||A.animate.params.speed===0||E)return;let He=ie/1e3*A.animate.params.speed,Me=kr(A.animate.params.angle),$e=Math.sin(ao*Math.PI*2)*Me,Tr=Math.sin((ao+He)*Math.PI*2)*Me-$e;B.sub(x,n.position,n.target),B.normalize(nr,x),B.normalize(yr,n.up),B.cross(br,yr,nr),B.normalize(br,br);let xr=A.animate.params.axis;B.set(rr,xr[0]*br[0]+xr[1]*yr[0]+xr[2]*nr[0],xr[0]*br[1]+xr[1]*yr[1]+xr[2]*nr[1],xr[0]*br[2]+xr[1]*yr[2]+xr[2]*nr[2]),B.normalize(rr,rr),gr.setAxisAngle(cr,rr,Tr),B.transformQuat(x,x,cr),B.transformQuat(n.up,n.up,cr),B.add(n.position,n.target,x),ao+=He,ao>=1&&(ao=0)}function he(){ao=0}function Ge(ie){Zo=-1,oi(ie)}return{viewport:l,get isAnimating(){return A.animate.name!=="off"},get isMoving(){return Bt.moveForward===1||Bt.moveBack===1||Bt.moveLeft===1||Bt.moveRight===1||Bt.moveUp===1||Bt.moveDown===1||Bt.rollLeft===1||Bt.rollRight===1||Bt.pitchUp===1||Bt.pitchDown===1||Bt.yawLeft===1||Bt.yawRight===1},get props(){return A},setProps:ie=>{ie.animate?.name==="rock"&&A.animate.name!=="rock"&&he(),ie.flyMode!==void 0&&ie.flyMode!==A.flyMode&&(ie.flyMode?Ut():Wt()),Object.assign(A,ie)},get attribs(){return s},setAttribs:ie=>{Object.assign(s,ie),Object.assign(c,s.bindings)},start:Ge,update:oi,reset:pa,dispose:Ar}}t.create=e})(i6||={});var VM=13421772,krt="Assigns colors according to the Symbol Nomenclature for Glycans (SNFG).",rQe={};function Hrt(e){return rQe}function nQe(e,t){let r;if(e.structure){let{elements:n,getElementIndices:o}=e.structure.carbohydrates,i=(a,A)=>{if(!ge.isAtomic(a))return VM;let s=o(a,A);return s.length>0?n[s[0]].component.color:VM};r=(a,A)=>A?Rr.Secondary:W.Location.is(a)?i(a.unit,a.element):Et.isLocation(a)?i(a.aUnit,a.aUnit.elements[a.aIndex]):VM}else r=()=>VM;return{factory:nQe,granularity:"group",color:r,props:t,description:krt,legend:Ba(Rue)}}var oQe={name:"carbohydrate-symbol",label:"Carbohydrate Symbol",category:Br.Residue,factory:nQe,getParams:Hrt,defaultValues:h.getDefaultValues(rQe),isApplicable:e=>!!e.structure&&e.structure.models.some(t=>_t.hasCarbohydrate(t))};var a6={hue:h.Interval([1,360],{min:0,max:360,step:1}),chroma:h.Interval([40,70],{min:0,max:100,step:1}),luminance:h.Interval([15,85],{min:0,max:100,step:1}),sort:h.Select("contrast",h.arrayToOptions(["none","contrast"]),{description:"no sorting leaves colors approximately ordered by hue"}),clusteringStepCount:h.Numeric(50,{min:10,max:200,step:1},{isHidden:!0}),minSampleCount:h.Numeric(800,{min:100,max:5e3,step:100},{isHidden:!0}),sampleCountFactor:h.Numeric(5,{min:1,max:100,step:1},{isHidden:!0})},qD=2,U0=[0,0,0],L0=[0,0,0];function Vrt(e,t){return kA.toHcl(U0,e),kA.fromColor(L0,kA.toColor(e)),U0[0]>=t.hue[0]&&U0[0]<=t.hue[1]&&U0[1]>=t.chroma[0]&&U0[1]<=t.chroma[1]&&U0[2]>=t.luminance[0]&&U0[2]<=t.luminance[1]&&L0[0]>=e[0]-qD&&L0[0]<=e[0]+qD&&L0[1]>=e[1]-qD&&L0[1]<=e[1]+qD&&L0[2]>=e[2]-qD&&L0[2]<=e[2]+qD}function _rt(e){let t=e.slice(0),r=[t.shift()];for(;t.length>0;){let n=r[r.length-1],o=0,i=Number.NEGATIVE_INFINITY;for(let a=0;a<t.length;++a){let A=kA.distance(n,t[a]);A>i&&(i=A,o=a)}r.push(t.splice(o,1)[0])}return r}function Yrt(e,t){let r=new Map,n=Math.ceil(Math.cbrt(e)),o=nm(),i=Math.max((t.hue[1]-t.hue[0])/n,1),a=Math.max((t.chroma[1]-t.chroma[0])/n,1),A=Math.max((t.luminance[1]-t.luminance[0])/n,1);for(let s=t.hue[0]+i/2;s<=t.hue[1];s+=i)for(let c=t.chroma[0]+a/2;c<=t.chroma[1];c+=a)for(let l=t.luminance[0]+A/2;l<=t.luminance[1];l+=A){let u=kA.fromHcl(kA(),nm.set(o,s,c,l));Vrt(u,t)&&r.set(kA.toColor(u),u)}return Array.from(r.values())}function iQe(e,t){let r=1/0,n=0;for(let o=0;o<e.length;o++){let i=kA.distance(t,e[o]);i<r&&(r=i,n=o)}return n}function _M(e,t={}){let r={...h.getDefaultValues(a6),...t};if(e<=0)return[];let n=Yrt(Math.max(r.minSampleCount,e*r.sampleCountFactor),r);if(n.length<e)return console.warn("Not enough samples to generate distinct colors, increase sample count."),new Array(e).fill(xt.lightgrey);let o=[],i=[],a=Math.floor(n.length/e);for(let s=0;s<n.length&&(o.push(n[s]),i.push([]),!(o.length>=e));s+=a);for(let s=1;s<=r.clusteringStepCount;++s){let c=ii(i),l=ii(n);for(let g=0;g<o.length;++g){let m=iQe(l,o[g]);c[g].push(n[m]),l.splice(m,1)}for(let g=0;g<l.length;++g){let m=iQe(o,n[g]);c[m].push(n[g])}let u=ii(o);for(let g=0;g<c.length;++g){let m=c[g],p=m.length;if(p===0)continue;let d=0,f=0,I=0;for(let E of m)d+=E[0],f+=E[1],I+=E[2];let C=d/p,y=f/p,Q=I/p;o[g]=[C,y,Q]}if(ka(u,o))break}return(r.sort==="contrast"?_rt(o):o).map(s=>kA.toColor(s))}var AQe={type:"generate",colorList:"red-yellow-blue"};function Pi(e={}){let t={...AQe,...e};return{palette:h.MappedStatic(t.type,{colors:h.Group({list:h.ColorList(t.colorList)},{isFlat:!0}),generate:h.Group({...a6,maxCount:h.Numeric(75,{min:1,max:250,step:1})},{isFlat:!0})},{options:[["colors","Color List"],["generate","Generate Distinct"]]})}}var DFr=h.getDefaultValues(Pi()),aQe={valueLabel:e=>`${e+1}`,minLabel:"Start",maxLabel:"End"};function Yi(e,t,r={}){let n,o;if(t.palette.name==="colors"&&t.palette.params.list.kind==="interpolate"){let{list:i}=t.palette.params,a=[0,e-1],{minLabel:A,maxLabel:s}={...aQe,...r},c=i.colors;c.length===0&&(c=ns(AQe.colorList).list);let l=oa.create({listOrName:c,domain:a,minLabel:A,maxLabel:s});o=l.legend,n=l.color}else{let i;t.palette.name==="colors"?(i=t.palette.params.list.colors.map(c=>Array.isArray(c)?c[0]:c),i.length===0&&(i=ns("dark-2").list.map(c=>Array.isArray(c)?c[0]:c))):(e=Math.min(e,t.palette.params.maxCount),i=_M(e,t.palette.params));let a=r.valueLabel??aQe.valueLabel,A=i.length,s=[];for(let c=0;c<e;++c){let l=c%A;s[l]===void 0?s[l]=[a(c),i[l]]:s[l][0]+=`, ${a(c)}`}o=Ba(s),n=c=>i[c%A]}return{color:n,legend:o}}var Ort="many-distinct",sQe=16448250,Jrt="Gives every chain a color based on its `asym_id` value.",vI={asymId:h.Select("auth",h.arrayToOptions(["auth","label"])),...Pi({type:"colors",colorList:Ort})};function zrt(e){let t=h.clone(vI);return e.structure?.models.some(r=>r.coarseHierarchy.isDefined)&&(t.asymId.defaultValue="label"),t}function Krt(e,t){switch(e.kind){case ge.Kind.Atomic:return t==="auth"?Ke.chain.auth_asym_id:Ke.chain.label_asym_id;case ge.Kind.Spheres:case ge.Kind.Gaussians:return Ke.coarse.asym_id}}function cQe(e,t){let r=Krt(e.unit,t)(e);return e.structure.root.models.length>1?lQe(e.unit.model,r):r}function lQe(e,t){return`${t}|${(_t.Index.get(e).value||0)+1}`}function jrt(e,t){let r=new Map;for(let n of e.models){let o=_t.AsymIdOffset.get(n).value,i=(t==="auth"?o?.auth:o?.label)||0,a=0;n.properties.structAsymMap.forEach(({auth_id:A},s)=>{let c=t==="auth"?A:s,l=e.models.length>1?lQe(n,c):c;r.has(l)||(r.set(l,a+i),++a)})}return r}function FI(e,t){let r,n;if(e.structure){let o=W.Location.create(e.structure.root),i=jrt(e.structure.root,t.asymId),a=Array.from(i.keys()),A=c=>a[c],s=Yi(i.size,t,{valueLabel:A});n=s.legend,r=c=>{let l;if(W.Location.is(c)){let u=cQe(c,t.asymId);l=i.get(u)}else if(Et.isLocation(c)){o.unit=c.aUnit,o.element=c.aUnit.elements[c.aIndex];let u=cQe(o,t.asymId);l=i.get(u)}return l===void 0?sQe:s.color(l)}}else r=()=>sQe;return{factory:FI,granularity:"group",color:r,props:t,description:Jrt,legend:n}}var YM={name:"chain-id",label:"Chain Id",category:Br.Chain,factory:FI,getParams:zrt,defaultValues:h.getDefaultValues(vI),isApplicable:e=>!!e.structure};var uQe=13421772,Wrt="Gives every element (atom or coarse sphere/gaussian) a unique color based on the position (index) of the element in the list of elements in the structure.",gQe={...Pi({type:"colors",colorList:"red-yellow-blue"})};function Xrt(e){return gQe}function mQe(e,t){let r,n;if(e.structure){let{units:o}=e.structure.root,i=o.length,a=new Map,A=new Map,s=0;for(let l=0;l<i;++l)a.set(l,s),s+=o[l].elements.length,A.set(o[l].id,l);let c=Yi(s,t);n=c.legend,r=l=>{if(W.Location.is(l)){let u=A.get(l.unit.id),g=Ee.findPredecessorIndex(o[u].elements,l.element);return c.color(a.get(u)+g)}else if(Et.isLocation(l)){let u=A.get(l.aUnit.id),g=Ee.findPredecessorIndex(o[u].elements,l.aUnit.elements[l.aIndex]);return c.color(a.get(u)+g)}return uQe}}else r=()=>uQe;return{factory:mQe,granularity:"groupInstance",preferSmoothing:!0,color:r,props:t,description:Wrt,legend:n}}var dQe={name:"element-index",label:"Element Index",category:Br.Atom,factory:mQe,getParams:Xrt,defaultValues:h.getDefaultValues(gQe),isApplicable:e=>!!e.structure};function Qm(e){let t={};return Bi(e,(r,n)=>{t[n]=h.Color(e[n])}),t}var Zrt="many-distinct",pQe=13421772,qrt="Assigns a color based on the operator name of a transformed chain.",OM={...Pi({type:"colors",colorList:Zrt})};function $rt(e){return h.clone(OM)}function ent(e){let t=new Map;for(let r=0,n=e.units.length;r<n;++r){let o=e.units[r].conformation.operator.name;t.has(o)||t.set(o,t.size)}return t}function JM(e,t){let r,n;if(e.structure){let o=ent(e.structure.root),i=Array.from(o.keys()),a=s=>i[s],A=Yi(o.size,t,{valueLabel:a});n=A.legend,r=s=>{let c;if(W.Location.is(s)){let l=s.unit.conformation.operator.name;c=o.get(l)}else if(Et.isLocation(s)){let l=s.aUnit.conformation.operator.name;c=o.get(l)}return c===void 0?pQe:A.color(c)}}else r=()=>pQe;return{factory:JM,granularity:"instance",color:r,props:t,description:qrt,legend:n}}var $D={name:"operator-name",label:"Operator Name",category:Br.Symmetry,factory:JM,getParams:$rt,defaultValues:h.getDefaultValues(OM),isApplicable:e=>!!e.structure};var tnt="many-distinct",A6=16448250,rnt=16715021,nnt="Gives every chain a color based on its `label_entity_id` value.",wI={...Pi({type:"colors",colorList:tnt}),overrideWater:h.Boolean(!1,{description:"Override the color for water molecules."}),waterColor:h.Color(rnt,{hideIf:e=>!e.overrideWater,description:"Color for water molecules (if overrideWater is true)."})};function ont(e){return h.clone(wI)}function zM(e,t){return`${e}|${t}`}function int(e){let t=new WeakMap,r=0;for(let n=0,o=e.models.length;n<o;++n){let i=e.models[n].sourceData;t.has(i)||t.set(i,r++)}return t}function ant(e,t){let r=new Map;for(let n=0,o=e.models.length;n<o;++n){let i=t.get(e.models[n].sourceData)??-1,{label_entity_id:a}=e.models[n].atomicHierarchy.chains;for(let s=0,c=a.rowCount;s<c;++s){let l=zM(a.value(s),i);r.has(l)||r.set(l,r.size)}let{coarseHierarchy:A}=e.models[n];if(A.isDefined){let{entity_id:s}=A.spheres;for(let l=0,u=s.rowCount;l<u;++l){let g=zM(s.value(l),i);r.has(g)||r.set(g,r.size)}let{entity_id:c}=A.gaussians;for(let l=0,u=c.rowCount;l<u;++l){let g=zM(c.value(l),i);r.has(g)||r.set(g,r.size)}}}return r}function Ant(e){switch(e.unit.kind){case ge.Kind.Atomic:return Ke.chain.label_entity_id(e);case ge.Kind.Spheres:case ge.Kind.Gaussians:return Ke.coarse.entity_id(e)}}function RI(e,t){let r,n;if(e.structure){let o=W.Location.create(e.structure.root),i=int(e.structure),a=ant(e.structure.root,i),A=Array.from(a.keys()),s=l=>A[l],c=Yi(a.size,t,{valueLabel:s});n=c.legend,r=l=>{let u;if(W.Location.is(l))u=l;else if(Et.isLocation(l))o.unit=l.aUnit,o.element=l.aUnit.elements[l.aIndex],u=o;else return A6;let g=Ant(u),m=i.get(u.unit.model.sourceData)??-1;if(t.overrideWater){let f=u.unit.model.entities;if(f.data.type.value(f.getEntityIndex(g))==="water")return t.waterColor}let p=zM(g,m),d=a.get(p);return d===void 0?A6:c.color(d)}}else r=()=>A6;return{factory:RI,granularity:"group",color:r,props:t,description:nnt,legend:n}}var fQe={name:"entity-id",label:"Entity Id",category:Br.Chain,factory:RI,getParams:ont,defaultValues:h.getDefaultValues(wI),isApplicable:e=>!!e.structure};var c6="dark-2",KM=16448250,snt="Gives ranges of a polymer chain a color based on the entity source it originates from (e.g. gene, plasmid, organism).",UI={...Pi({type:"colors",colorList:c6})};function cnt(e){let t=h.clone(UI);return e.structure&&IQe(e.structure.root.models).srcKeySerialMap.size>Kr[c6].list.length&&(t.palette.defaultValue.name="colors",t.palette.defaultValue.params={...t.palette.defaultValue.params,list:{kind:"interpolate",colors:ns(c6).list}}),t}function BQe(e,t){return`${e}|${t}`}function lnt(e,t,r,n,o,i){return`${e}|${t}|${r}|${i||o||n}`}function s6(e,t,r,n,o,i,a,A){let{entity_id:s,pdbx_src_id:c,pdbx_beg_seq_num:l,pdbx_end_seq_num:u}=o;for(let g=0,m=o._rowCount;g<m;++g){let p=s.value(g),d=BQe(r,p),f;if(e.has(d))f=e.get(d);else{let x=n.entities.getEntityIndex(p),S=n.sequence.sequences[x].sequence;f=new Int16Array(S.length),e.set(d,f)}let I=a?a.value(g):"",C=A?A.value(g)[0]:"",y=lnt(r,p,i.value(g),c.value(g),I,C),Q=l.valueKind(g)===K.ValueKinds.Present?l.value(g):1,E=u.valueKind(g)===K.ValueKinds.Present?u.value(g):f.length,b;t.has(y)?b=t.get(y):(b=t.size+1,t.set(y,b));for(let x=Q,S=E;x<=S;++x)f[x-1]=b}}function IQe(e){let t=new Map,r=new Map;for(let n=0,o=e.length;n<o;++n){let i=e[n];if(!sn.is(i.sourceData))continue;let{entity_src_gen:a,entity_src_nat:A,pdbx_entity_src_syn:s}=i.sourceData.data.db;s6(t,r,n,i,a,a.pdbx_gene_src_scientific_name,a.plasmid_name,a.pdbx_gene_src_gene),s6(t,r,n,i,A,A.pdbx_organism_scientific,A.pdbx_plasmid_name),s6(t,r,n,i,s,s.organism_scientific)}return{seqToSrcByModelEntity:t,srcKeySerialMap:r}}function unt(e){let t=0;return Array.from(e.keys()).map(r=>{let n=r.split("|"),o=n[2];return`${TG(n[3])?`Unnamed ${++t}`:n[3]}${o?` (${o})`:""}`})}function LI(e,t){let r,n;if(e.structure){let o=W.Location.create(e.structure),{models:i}=e.structure.root,{seqToSrcByModelEntity:a,srcKeySerialMap:A}=IQe(i),s=unt(A),c=g=>s[g],l=Yi(A.size,t,{valueLabel:c});n=l.legend;let u=g=>{let m=i.indexOf(g.unit.model),p=Ke.entity.id(g),d=BQe(m,p),f=a.get(d);if(f){let I=f[Ke.residue.label_seq_id(g)-1]-1;return I===-1?KM:l.color(I)}else return KM};r=g=>W.Location.is(g)?u(g):Et.isLocation(g)?(o.unit=g.aUnit,o.element=g.aUnit.elements[g.aIndex],u(o)):KM}else r=()=>KM;return{factory:LI,granularity:"group",color:r,props:t,description:snt,legend:n}}var CQe={name:"entity-source",label:"Entity Source",category:Br.Chain,factory:LI,getParams:cnt,defaultValues:h.getDefaultValues(UI),isApplicable:e=>!!e.structure};var hQe=13421772,gnt="Gives every model a unique color based on its index.",TI={...Pi({type:"colors",colorList:"many-distinct"})};function mnt(e){return h.clone(TI)}function PI(e,t){let r,n,o=-1;if(e.structure){let i=(_t.MaxIndex.get(e.structure.models[0]).value??-1)+1;o=i;let a=Yi(i,t);n=a.legend,r=A=>W.Location.is(A)?a.color(_t.Index.get(A.unit.model).value||0):Et.isLocation(A)?a.color(_t.Index.get(A.aUnit.model).value||0):hQe}else r=()=>hQe;return{factory:PI,granularity:"instance",color:r,props:t,contextHash:o,description:gnt,legend:n}}var yQe={name:"model-index",label:"Model Index",category:Br.Chain,factory:PI,getParams:mnt,defaultValues:h.getDefaultValues(TI),isApplicable:e=>!!e.structure&&e.structure.elementCount>0};var QQe=13421772,dnt="Gives every structure a unique color based on its index.",GI={...Pi({type:"colors",colorList:"many-distinct"})};function pnt(e){return h.clone(GI)}function NI(e,t){let r,n,o=-1;if(e.structure){let i=(Ye.MaxIndex.get(e.structure).value??-1)+1;o=i;let a=Yi(i,t);n=a.legend,r=A=>W.Location.is(A)?a.color(Ye.Index.get(A.structure).value||0):Et.isLocation(A)?a.color(Ye.Index.get(A.aStructure).value||0):QQe}else r=()=>QQe;return{factory:NI,granularity:"instance",color:r,props:t,contextHash:o,description:dnt,legend:n}}var EQe={name:"structure-index",label:"Structure Index",category:Br.Chain,factory:NI,getParams:pnt,defaultValues:h.getDefaultValues(GI),isApplicable:e=>!!e.structure&&e.structure.elementCount>0};var l6="dark-2",bQe=13421772,fnt="Gives every chain instance (single chain or collection of single elements) a unique color based on the position (index) of the chain in the list of chains in the structure.",jM={...Pi({type:"colors",colorList:l6})};function Bnt(e){let t=h.clone(jM);return e.structure&&e.structure.root.units.length>Kr[l6].list.length&&(t.palette.defaultValue.name="colors",t.palette.defaultValue.params={...t.palette.defaultValue.params,list:{kind:"interpolate",colors:ns(l6).list}}),t}function WM(e,t){let r,n;if(e.structure){let{units:o}=e.structure.root,i=Yi(o.length,t);n=i.legend;let a=new Map;for(let A=0,s=o.length;A<s;++A)a.set(o[A].id,i.color(A));r=A=>W.Location.is(A)?a.get(A.unit.id):Et.isLocation(A)?a.get(A.aUnit.id):bQe}else r=()=>bQe;return{factory:WM,granularity:"instance",color:r,props:t,description:fnt,legend:n}}var xQe={name:"unit-index",label:"Chain Instance",category:Br.Chain,factory:WM,getParams:Bnt,defaultValues:h.getDefaultValues(jM),isApplicable:e=>!!e.structure};var SQe=13421772,Int="Gives every model (frame) a unique color based on the index in its trajectory.",vQ={...Pi({type:"colors",colorList:"purples"})};function Cnt(e){return h.clone(vQ)}function FQ(e,t){let r,n,o=-1;if(e.structure){let{models:i}=e.structure.root,a=0;for(let l of i)a=Math.max(a,_t.TrajectoryInfo.get(l)?.size||0);let A=[a],s=Yi(a,t);n=s.legend;let c=new Map;for(let l=0,u=i.length;l<u;++l){let g=_t.TrajectoryInfo.get(i[l])?.index||0;c.set(g,s.color(g)),A.push(g)}o=na(A),r=l=>W.Location.is(l)?c.get(_t.TrajectoryInfo.get(l.unit.model).index):Et.isLocation(l)?c.get(_t.TrajectoryInfo.get(l.aUnit.model).index):SQe}else r=()=>SQe;return{factory:FQ,granularity:"instance",color:r,props:t,contextHash:o,description:Int,legend:n}}var DQe={name:"trajectory-index",label:"Trajectory Index",category:Br.Chain,factory:FQ,getParams:Cnt,defaultValues:h.getDefaultValues(vQ),isApplicable:e=>!!e.structure&&e.structure.elementCount>0&&_t.TrajectoryInfo.get(e.structure.models[0]).size>1};var XM={H:16777215,D:16777152,T:16777120,HE:14286847,LI:13402367,BE:12779264,B:16758197,C:9474192,N:3166456,O:16715021,F:9494608,NE:11789301,NA:11230450,MG:9109248,AL:12560038,SI:1578e4,P:16744448,S:16777008,CL:2093087,AR:8442339,K:9388244,CA:4062976,SC:15132390,TI:12567239,V:10921643,CR:9083335,MN:10255047,FE:14706227,CO:15765664,NI:5296208,CU:13140019,ZN:8224944,GA:12750735,GE:6721423,AS:12419299,SE:16752896,BR:10889513,KR:6076625,RB:7351984,SR:65280,Y:9764863,ZR:9756896,NB:7586505,MO:5551541,TC:3907230,RU:2396047,RH:687500,PD:27013,AG:12632256,CD:16767375,IN:10909043,SN:6717568,SB:10380213,TE:13924864,I:9699476,XE:9699476,CS:5707663,BA:51456,LA:7394559,CE:16777159,PR:14286791,ND:13107143,PM:10747847,SM:9437127,EU:6422471,GD:4587463,TB:3211207,DY:2097095,HO:65436,ER:58997,TM:54354,YB:48952,LU:43812,HF:5096191,TA:5089023,W:2200790,RE:2522539,OS:2516630,IR:1528967,PT:13684960,AU:16765219,HG:12105936,TL:10900557,PB:5724513,BI:10375093,PO:11230208,AT:7688005,RN:4358806,FR:4325478,RA:32e3,AC:7384058,TH:47871,PA:41471,U:36863,NP:33023,PU:27647,AM:5528818,CM:7888099,BK:9064419,CF:10565332,ES:11739092,FM:11739066,MD:11734438,NO:12389767,LR:13041766,RF:13369433,DB:13697103,SG:14221381,BH:14680120,HS:15073326,MT:15400998,DS:16777215,RG:16777215,CN:16777215,UUT:16777215,FL:16777215,UUP:16777215,LV:16777215,UUH:16777215},vQe=16777215,hnt="Assigns a color to every atom according to its chemical element.",ZM={carbonColor:h.MappedStatic("chain-id",{"chain-id":h.Group(vI),"unit-index":h.Group(jM,{label:"Chain Instance"}),"entity-id":h.Group(wI),"entity-source":h.Group(UI),"operator-name":h.Group(OM),"model-index":h.Group(TI),"structure-index":h.Group(GI),"trajectory-index":h.Group(vQ),uniform:h.Group(ph),"element-symbol":h.EmptyGroup()},{description:"Use chain-id coloring for carbon atoms."}),saturation:h.Numeric(0,{min:-6,max:6,step:.1}),lightness:h.Numeric(.2,{min:-6,max:6,step:.1}),colors:h.MappedStatic("default",{default:h.EmptyGroup(),custom:h.Group(Qm(XM))})};function ynt(e){return h.clone(ZM)}function Qnt(e,t){let r=e[t];return r===void 0?vQe:r}function Ent(e,t){switch(t.name){case"chain-id":return FI(e,t.params);case"unit-index":return WM(e,t.params);case"entity-id":return RI(e,t.params);case"entity-source":return LI(e,t.params);case"operator-name":return JM(e,t.params);case"model-index":return PI(e,t.params);case"structure-index":return NI(e,t.params);case"trajectory-index":return FQ(e,t.params);case"uniform":return zf(e,t.params);case"element-symbol":return;default:Or(t)}}function qM(e,t){let r=qB(t.colors.name==="default"?XM:t.colors.params,t.saturation,t.lightness),n=Ent(e,t.carbonColor),o=n?.color,i=n?.contextHash??-1;function a(c,l){return o&&c==="C"?o(l,!1):Qnt(r,c)}function A(c){if(W.Location.is(c)){if(ge.isAtomic(c.unit)){let{type_symbol:l}=c.unit.model.atomicHierarchy.atoms;return a(l.value(c.element),c)}}else if(Et.isLocation(c)&&ge.isAtomic(c.aUnit)){let{type_symbol:l}=c.aUnit.model.atomicHierarchy.atoms,u=l.value(c.aUnit.elements[c.aIndex]);return a(u,c)}return vQe}let s=t.carbonColor.name==="operator-name"||t.carbonColor.name==="unit-index"?"groupInstance":"group";return{factory:qM,granularity:s,preferSmoothing:!0,color:A,props:t,contextHash:i,description:hnt,legend:Ba(Object.keys(r).map(c=>[c,r[c]]))}}var FQe={name:"element-symbol",label:"Element Symbol",category:Br.Atom,factory:qM,getParams:ynt,defaultValues:h.getDefaultValues(ZM),isApplicable:e=>!!e.structure};var RQe={water:3697840,ion:15729279,protein:12496596,RNA:16629894,DNA:12540695,PNA:4367514,saccharide:8374655},u6=16777113,bnt="Assigns a color based on the molecule type of a residue.",wQ={saturation:h.Numeric(0,{min:-6,max:6,step:.1}),lightness:h.Numeric(0,{min:-6,max:6,step:.1}),colors:h.MappedStatic("default",{default:h.EmptyGroup(),custom:h.Group(Qm(RQe))})};function xnt(e){return wQ}function wQe(e,t,r){switch(qy(t,r)){case 2:return e.water;case 3:return e.ion;case 5:return e.protein;case 6:return e.RNA;case 7:return e.DNA;case 8:return e.PNA;case 9:return e.saccharide}return u6}function RQ(e,t){let r=qB(t.colors.name==="default"?RQe:t.colors.params,t.saturation,t.lightness);function n(o){return W.Location.is(o)?wQe(r,o.unit,o.element):Et.isLocation(o)?wQe(r,o.aUnit,o.aUnit.elements[o.aIndex]):u6}return{factory:RQ,granularity:"group",color:n,props:t,description:bnt,legend:Ba(Object.keys(r).map(o=>[o,r[o]]).concat([["Other/unknown",u6]]))}}var UQe={name:"molecule-type",label:"Molecule Type",category:Br.Residue,factory:RQ,getParams:xnt,defaultValues:h.getDefaultValues(wQ),isApplicable:e=>!!e.structure};var g6="dark-2",LQe=16448250,Snt="Gives every polymer chain a color based on its `asym_id` value.",PQe={...Pi({type:"colors",colorList:g6})};function Dnt(e){let t=h.clone(PQe);return e.structure&&GQe(e.structure.root).size>Kr[g6].list.length&&(t.palette.defaultValue.name="colors",t.palette.defaultValue.params={...t.palette.defaultValue.params,list:{kind:"interpolate",colors:ns(g6).list}}),t}function TQe(e){switch(e.kind){case ge.Kind.Atomic:return Ke.chain.label_asym_id;case ge.Kind.Spheres:case ge.Kind.Gaussians:return Ke.coarse.asym_id}}function GQe(e){let t=new Map;for(let r=0,n=e.unitSymmetryGroups.length;r<n;++r){let o=e.unitSymmetryGroups[r].units[0],{model:i}=o;if(ge.isAtomic(o)){let{chainAtomSegments:a,chains:A}=i.atomicHierarchy,s=sr.transientSegments(a,o.elements);for(;s.hasNext;){let{index:c}=s.move(),l=A.label_entity_id.value(c),u=i.entities.getEntityIndex(l);if(i.entities.data.type.value(u)==="polymer"){let g=A.label_asym_id.value(c);t.has(g)||t.set(g,t.size)}}}else if(ge.isCoarse(o)){let{chainElementSegments:a,asym_id:A,entity_id:s}=ge.isSpheres(o)?i.coarseHierarchy.spheres:i.coarseHierarchy.gaussians,c=sr.transientSegments(a,o.elements);for(;c.hasNext;){let{index:l}=c.move(),u=a.offsets[l],g=s.value(u),m=i.entities.getEntityIndex(g);if(i.entities.data.type.value(m)==="polymer"){let p=A.value(u);t.has(p)||t.set(p,t.size)}}}}return t}function NQe(e,t){let r,n;if(e.structure){let o=W.Location.create(e.structure),i=GQe(e.structure.root),a=Array.from(i.keys()),A=c=>a[c],s=Yi(i.size,t,{valueLabel:A});n=s.legend,r=c=>{let l;if(W.Location.is(c)){let u=TQe(c.unit);l=i.get(u(c))}else if(Et.isLocation(c)){let u=TQe(c.aUnit);o.unit=c.aUnit,o.element=c.aUnit.elements[c.aIndex],l=i.get(u(o))}return l===void 0?LQe:s.color(l)}}else r=()=>LQe;return{factory:NQe,granularity:"group",color:r,props:t,description:Snt,legend:n}}var MQe={name:"polymer-id",label:"Polymer Chain Id",category:Br.Chain,factory:NQe,getParams:Dnt,defaultValues:h.getDefaultValues(PQe),isApplicable:e=>!!e.structure};var m6="dark-2",kQe=13421772,vnt="Gives every polymer chain instance a unique color based on the position (index) of the polymer in the list of polymers in the structure.",HQe={...Pi({type:"colors",colorList:m6})};function Fnt(e){let t=h.clone(HQe);return e.structure&&VQe(e.structure.root)>Kr[m6].list.length&&(t.palette.defaultValue.name="colors",t.palette.defaultValue.params={...t.palette.defaultValue.params,list:{kind:"interpolate",colors:ns(m6).list}}),t}function VQe(e){let t=0,{units:r}=e;for(let n=0,o=r.length;n<o;++n)r[n].polymerElements.length>0&&++t;return t}function _Qe(e,t){let r,n;if(e.structure){let o=Yi(VQe(e.structure.root),t);n=o.legend;let{units:i}=e.structure.root,a=new Map;for(let A=0,s=0,c=i.length;A<c;++A)i[A].polymerElements.length>0&&(a.set(i[A].id,o.color(s)),++s);r=A=>{let s;return W.Location.is(A)?s=a.get(A.unit.id):Et.isLocation(A)&&(s=a.get(A.aUnit.id)),s!==void 0?s:kQe}}else r=()=>kQe;return{factory:_Qe,granularity:"instance",color:r,props:t,description:vnt,legend:n}}var YQe={name:"polymer-index",label:"Polymer Chain Instance",category:Br.Chain,factory:_Qe,getParams:Fnt,defaultValues:h.getDefaultValues(HQe),isApplicable:e=>!!e.structure};var yR={ALA:9240460,ARG:124,ASN:16743536,ASP:10485826,CYS:16777072,GLN:16731212,GLU:6684672,GLY:15658734,HIS:7368959,ILE:19456,LEU:4546117,LYS:4671416,MET:12099650,PHE:5459026,PRO:5395026,SER:16740418,THR:12078080,TRP:5195264,TYR:9203788,VAL:16747775,A:14423100,G:3329330,I:10145074,C:16766720,T:4286945,U:4251856,DA:14423100,DG:3329330,DI:10145074,DC:16766720,DT:4286945,DU:4251856,APN:14423100,GPN:3329330,CPN:16766720,TPN:4286945},d6=16711935,wnt="Assigns a color to every residue according to its name.",ek={saturation:h.Numeric(0,{min:-6,max:6,step:.1}),lightness:h.Numeric(1,{min:-6,max:6,step:.1}),colors:h.MappedStatic("default",{default:h.EmptyGroup(),custom:h.Group(Qm(yR))})};function Rnt(e){return ek}function OQe(e,t){return e.model.atomicHierarchy.atoms.label_comp_id.value(t)}function JQe(e,t){let r=e.coarseElements.seq_id_begin.value(t),n=e.coarseElements.seq_id_end.value(t);if(r===n){let o=e.coarseElements.entityKey[t];return e.model.sequence.byEntityKey[o].sequence.compId.value(r-1)}}function $M(e,t){let r=e[t];return r===void 0?d6:r}function tk(e,t){let r=qB(t.colors.name==="default"?yR:t.colors.params,t.saturation,t.lightness);function n(o){if(W.Location.is(o))if(ge.isAtomic(o.unit)){let i=OQe(o.unit,o.element);return $M(r,i)}else{let i=JQe(o.unit,o.element);if(i)return $M(r,i)}else if(Et.isLocation(o))if(ge.isAtomic(o.aUnit)){let i=OQe(o.aUnit,o.aUnit.elements[o.aIndex]);return $M(r,i)}else{let i=JQe(o.aUnit,o.aUnit.elements[o.aIndex]);if(i)return $M(r,i)}return d6}return{factory:tk,granularity:"group",preferSmoothing:!0,color:n,props:t,description:wnt,legend:Ba(Object.keys(r).map(o=>[o,r[o]]).concat([["Unknown",d6]]))}}var zQe={name:"residue-name",label:"Residue Name",category:Br.Residue,factory:tk,getParams:Rnt,defaultValues:h.getDefaultValues(ek),isApplicable:e=>!!e.structure};var WQe={ARG:255,ASP:16711680,GLU:16711680,HIS:3392505,LYS:255,ALA:16777215,ASN:16777215,CYS:16777215,GLN:16777215,GLY:16777215,ILE:16777215,LEU:16777215,MET:16777215,PHE:16777215,PRO:16777215,SER:16777215,THR:16777215,TRP:16777215,TYR:16777215,VAL:16777215,MSE:16777215,SEP:16777215,TPO:16777215,PTR:16777215,PCA:16777215,HYP:16777215,HSD:16777215,HSE:16777215,HSP:255,LSN:16777215,ASPP:16777215,GLUP:16777215,HID:16777215,HIE:16777215,HIP:255,LYN:16777215,ASH:16777215,GLH:16777215,A:16777215,G:16777215,I:16777215,C:16777215,T:16777215,U:16777215,DA:16777215,DG:16777215,DI:16777215,DC:16777215,DT:16777215,DU:16777215,APN:16777215,GPN:16777215,CPN:16777215,TPN:16777215},p6=16711935,Unt="Assigns a color to every residue based on its charge state.",XQe={method:h.MappedStatic("by-name",{"by-name":h.Group({saturation:h.Numeric(0,{min:-6,max:6,step:.1}),lightness:h.Numeric(0,{min:-6,max:6,step:.1}),colors:h.MappedStatic("default",{default:h.EmptyGroup(),custom:h.Group(Qm(WQe))})},{isFlat:!0})})};function Lnt(e){return h.clone(XQe)}function KQe(e,t){return e.model.atomicHierarchy.atoms.label_comp_id.value(t)}function jQe(e,t){let r=e.coarseElements.seq_id_begin.value(t),n=e.coarseElements.seq_id_end.value(t);if(r===n){let o=e.coarseElements.entityKey[t];return e.model.sequence.byEntityKey[o].sequence.compId.value(r-1)}}function rk(e,t){let r=e[t];return r===void 0?p6:r}function ZQe(e,t){let{saturation:r,lightness:n,colors:o}=t.method.params,i=qB(t.method.params.colors.name==="default"?WQe:o.params,r,n);function a(A){if(W.Location.is(A))if(ge.isAtomic(A.unit)){let s=KQe(A.unit,A.element);return rk(i,s)}else{let s=jQe(A.unit,A.element);if(s)return rk(i,s)}else if(Et.isLocation(A))if(ge.isAtomic(A.aUnit)){let s=KQe(A.aUnit,A.aUnit.elements[A.aIndex]);return rk(i,s)}else{let s=jQe(A.aUnit,A.aUnit.elements[A.aIndex]);if(s)return rk(i,s)}return p6}return{factory:ZQe,granularity:"group",preferSmoothing:!0,color:a,props:t,description:Unt,legend:Ba(Object.keys(i).map(A=>[A,i[A]]).concat([["Unknown",p6]]))}}var qQe={name:"residue-charge",label:"Residue Charge",category:Br.Residue,factory:ZQe,getParams:Lnt,defaultValues:h.getDefaultValues(XQe),isApplicable:e=>!!e.structure};var Em={alphaHelix:16711808,threeTenHelix:10485888,piHelix:6291584,betaTurn:6324479,betaStrand:16762880,coil:16777215,bend:6740169,turn:45670,dna:11403518,rna:16580962,carbohydrate:10921722},f6=8421504,Tnt="Assigns a color based on the type of secondary structure and basic molecule type.",nk={saturation:h.Numeric(-1,{min:-6,max:6,step:.1}),lightness:h.Numeric(0,{min:-6,max:6,step:.1}),colors:h.MappedStatic("default",{default:h.EmptyGroup(),custom:h.Group(Qm(Em))})};function Pnt(e){return nk}function $Qe(e,t,r,n){let o=vr.create(vr.Flag.None);if(n&&ge.isAtomic(t)){let i=n.get(t.invariantId);i&&(o=i.type[i.getIndex(t.residueIndex[r])])}if(vr.is(o,vr.Flag.Helix))return vr.is(o,vr.Flag.Helix3Ten)?e.threeTenHelix:vr.is(o,vr.Flag.HelixPi)?e.piHelix:e.alphaHelix;if(vr.is(o,vr.Flag.Beta))return e.betaStrand;if(vr.is(o,vr.Flag.Bend))return e.bend;if(vr.is(o,vr.Flag.Turn))return e.turn;{let i=qy(t,r);if(i===7)return e.dna;if(i===6)return e.rna;if(i===9)return e.carbohydrate;if(i===5)return e.coil}return f6}function ok(e,t){let r=e.structure&&dc.get(e.structure),n=r?lc(r.id,r.version):-1,o=qB(t.colors.name==="default"?Em:t.colors.params,t.saturation,t.lightness);function i(a){return W.Location.is(a)?$Qe(o,a.unit,a.element,r?.value):Et.isLocation(a)?$Qe(o,a.aUnit,a.aUnit.elements[a.aIndex],r?.value):f6}return{factory:ok,granularity:"group",preferSmoothing:!0,color:i,props:t,contextHash:n,description:Tnt,legend:Ba(Object.keys(o).map(a=>[a,o[a]]).concat([["Other",f6]]))}}var eEe={name:"secondary-structure",label:"Secondary Structure",category:Br.Residue,factory:ok,getParams:Pnt,defaultValues:h.getDefaultValues(nk),isApplicable:e=>!!e.structure,ensureCustomProperties:{attach:(e,t)=>t.structure?dc.attach(e,t.structure,void 0,!0):Promise.resolve(),detach:e=>e.structure&&dc.ref(e.structure,!1)}};var Gnt=13421772,Nnt="Gives every polymer residue a color based on its `seq_id` value.",ik={list:h.ColorList("turbo-no-black",{presetKind:"scale"})};function Mnt(e){return ik}function tEe(e,t){let{model:r}=e;switch(e.kind){case ge.Kind.Atomic:let n=r.atomicHierarchy.residueAtomSegments.index[t];return r.atomicHierarchy.residues.label_seq_id.value(n);case ge.Kind.Spheres:return Math.round((r.coarseHierarchy.spheres.seq_id_begin.value(t)+r.coarseHierarchy.spheres.seq_id_end.value(t))/2);case ge.Kind.Gaussians:return Math.round((r.coarseHierarchy.gaussians.seq_id_begin.value(t)+r.coarseHierarchy.gaussians.seq_id_end.value(t))/2)}}function rEe(e,t){let{model:r}=e,n="";switch(e.kind){case ge.Kind.Atomic:let a=r.atomicHierarchy.chainAtomSegments.index[t];n=r.atomicHierarchy.chains.label_entity_id.value(a);break;case ge.Kind.Spheres:n=r.coarseHierarchy.spheres.entity_id.value(t);break;case ge.Kind.Gaussians:n=r.coarseHierarchy.gaussians.entity_id.value(t);break}if(n==="")return 0;let o=r.entities.getEntityIndex(n);if(o===-1)return 0;let i=r.sequence.byEntityKey[o];return i===void 0?0:i.sequence.length}function ak(e,t){let r=oa.create({listOrName:t.list.colors,minLabel:"Start",maxLabel:"End"});return{factory:ak,granularity:"group",preferSmoothing:!0,color:o=>{if(W.Location.is(o)){let{unit:i,element:a}=o,A=tEe(i,a);if(A>0){let s=rEe(i,a);if(s)return r.setDomain(0,s-1),r.color(A)}}else if(Et.isLocation(o)){let{aUnit:i,aIndex:a}=o,A=tEe(i,i.elements[a]);if(A>0){let s=rEe(i,i.elements[a]);if(s)return r.setDomain(0,s-1),r.color(A)}}return Gnt},props:t,description:Nnt,legend:r?r.legend:void 0}}var nEe={name:"sequence-id",label:"Sequence Id",category:Br.Residue,factory:ak,getParams:Mnt,defaultValues:h.getDefaultValues(ik),isApplicable:e=>!!e.structure};var knt=16777113,Hnt="Assigns a color based on the uncertainty or disorder of an element's position, e.g. B-factor or RMSF, depending on the data availability and experimental technique.",Ak={domain:h.Interval([0,100]),list:h.ColorList("red-white-blue",{presetKind:"scale"})};function Vnt(e){return Ak}function oEe(e,t){return ge.isAtomic(e)?e.model.atomicConformation.B_iso_or_equiv.value(t):ge.isSpheres(e)?e.model.coarseConformation.spheres.rmsf[t]:0}function sk(e,t){let r;t.list.kind==="set"?r=oa.createDiscrete({reverse:!0,domain:t.domain,listOrName:t.list.colors}):r=oa.create({reverse:!0,domain:t.domain,listOrName:t.list.colors});function n(o){return W.Location.is(o)?r.color(oEe(o.unit,o.element)):Et.isLocation(o)?r.color(oEe(o.aUnit,o.aUnit.elements[o.aIndex])):knt}return{factory:sk,granularity:"group",preferSmoothing:!0,color:n,props:t,description:Hnt,legend:r?r.legend:void 0}}var iEe={name:"uncertainty",label:"Uncertainty/Disorder",category:Br.Atom,factory:sk,getParams:Vnt,defaultValues:h.getDefaultValues(Ak),isApplicable:e=>!!e.structure&&e.structure.models.some(t=>t.atomicConformation.B_iso_or_equiv.isDefined||t.coarseHierarchy.isDefined)};var _nt=15658734,Ynt="Assigns an illustrative color that gives every chain a color based on the chosen style but with lighter carbons (inspired by David Goodsell's Molecule of the Month style).",aEe={style:h.MappedStatic("entity-id",{uniform:h.Group(ph),"chain-id":h.Group(vI),"entity-id":h.Group(wI),"entity-source":h.Group(UI),"molecule-type":h.Group(wQ),"model-index":h.Group(TI),"structure-index":h.Group(GI),"trajectory-index":h.Group(vQ)}),carbonLightness:h.Numeric(.8,{min:-6,max:6,step:.1})};function Ont(e){return h.clone(aEe)}function Jnt(e,t){switch(t.name){case"uniform":return zf(e,t.params);case"chain-id":return FI(e,t.params);case"entity-id":return RI(e,t.params);case"entity-source":return LI(e,t.params);case"molecule-type":return RQ(e,t.params);case"model-index":return PI(e,t.params);case"structure-index":return NI(e,t.params);case"trajectory-index":return FQ(e,t.params);default:Or(t)}}function AEe(e,t){let{color:r,legend:n,contextHash:o}=Jnt(e,t.style);function i(A,s){let c=r(A,!1);return s==="C"?ke.lighten(c,t.carbonLightness):c}function a(A){if(W.Location.is(A)&&ge.isAtomic(A.unit)){let s=A.unit.model.atomicHierarchy.atoms.type_symbol.value(A.element);return i(A,s)}else if(Et.isLocation(A)&&ge.isAtomic(A.aUnit)){let s=A.aUnit.elements[A.aIndex],c=A.aUnit.model.atomicHierarchy.atoms.type_symbol.value(s);return i(A,c)}return _nt}return{factory:AEe,granularity:"group",preferSmoothing:!0,color:a,props:t,contextHash:o,description:Ynt,legend:n}}var sEe={name:"illustrative",label:"Illustrative",category:Br.Misc,factory:AEe,getParams:Ont,defaultValues:h.getDefaultValues(aEe),isApplicable:e=>!!e.structure};var znt='Assigns a color to every amino acid according to the "Experimentally determined hydrophobicity scale for proteins at membrane interfaces" by Wimely and White (doi:10.1038/nsb1096-842).',ck={list:h.ColorList("red-yellow-green",{presetKind:"scale"}),scale:h.Select("DGwif",[["DGwif","DG water-membrane"],["DGwoct","DG water-octanol"],["Oct-IF","DG difference"]])};function Knt(e){return ck}var jnt={DGwif:0,DGwoct:1,"Oct-IF":2};function Wnt(e,t){let r=s2[e];return r===void 0?0:r[t]}function cEe(e,t){return e.model.atomicHierarchy.atoms.label_comp_id.value(t)}function lEe(e,t){let r=e.coarseElements.seq_id_begin.value(t),n=e.coarseElements.seq_id_end.value(t);if(r===n){let o=e.coarseElements.entityKey[t];return e.model.sequence.byEntityKey[o].sequence.compId.value(r-1)}}function lk(e,t){let r=jnt[t.scale],n=1/0,o=-1/0;for(let A in s2){let s=s2[A][r];n=Math.min(n,s),o=Math.max(o,s)}let i=oa.create({listOrName:t.list.colors,domain:[o,n],minLabel:"Hydrophilic",maxLabel:"Hydrophobic"});function a(A){let s;return W.Location.is(A)?ge.isAtomic(A.unit)?s=cEe(A.unit,A.element):s=lEe(A.unit,A.element):Et.isLocation(A)&&(ge.isAtomic(A.aUnit)?s=cEe(A.aUnit,A.aUnit.elements[A.aIndex]):s=lEe(A.aUnit,A.aUnit.elements[A.aIndex])),i.color(s?Wnt(s,r):0)}return{factory:lk,granularity:"group",preferSmoothing:!0,color:a,props:t,description:znt,legend:i?i.legend:void 0}}var uk={name:"hydrophobicity",label:"Hydrophobicity",category:Br.Residue,factory:lk,getParams:Knt,defaultValues:h.getDefaultValues(ck),isApplicable:e=>!!e.structure};var Xnt=13421772,Znt="Assigns a color based on the occupancy of an atom.",gk={domain:h.Interval([0,1]),list:h.ColorList("purples",{presetKind:"scale"})};function qnt(e){return gk}function uEe(e,t){return ge.isAtomic(e)?e.model.atomicConformation.occupancy.value(t):0}function mk(e,t){let r=oa.create({reverse:!1,domain:t.domain,listOrName:t.list.colors});function n(o){return W.Location.is(o)?r.color(uEe(o.unit,o.element)):Et.isLocation(o)?r.color(uEe(o.aUnit,o.aUnit.elements[o.aIndex])):Xnt}return{factory:mk,granularity:"group",preferSmoothing:!0,color:n,props:t,description:Znt,legend:r?r.legend:void 0}}var gEe={name:"occupancy",label:"Occupancy",category:Br.Atom,factory:mk,getParams:qnt,defaultValues:h.getDefaultValues(gk),isApplicable:e=>!!e.structure&&e.structure.models.some(t=>t.atomicConformation.occupancy.isDefined)};var I6="dark-2",mEe=13421772,$nt="Assigns a color based on the operator HKL value of a transformed chain.",dEe={...Pi({type:"colors",colorList:I6})};function eot(e){let t=h.clone(dEe);return e.structure&&pEe(e.structure.root).map.size>Kr[I6].list.length&&(t.palette.defaultValue.name="colors",t.palette.defaultValue.params={...t.palette.defaultValue.params,list:{kind:"interpolate",colors:ns(I6).list}}),t}var QR=1e4;function C6(e){return e.map(t=>`${t+QR}`.padStart(5,"0")).join("")}function h6(e){let t=Cge(QR,0),r=parseInt(e.substr(0,t)),n=parseInt(e.substr(t,t)),o=parseInt(e.substr(t+t,t));return B.create(r-QR,n-QR,o-QR)}function B6(e){return e.map(t=>t+5).join("")}function pEe(e){let t=new Map,r=new Set;for(let a=0,A=e.units.length;a<A;++a){let s=C6(e.units[a].conformation.operator.hkl);r.add(s)}let n=Array.from(r.values()).sort();n.forEach(a=>t.set(a,t.size));let o=h6(n[0]),i=h6(n[n.length-1]);return{min:o,max:i,map:t}}function fEe(e,t){let r,n;if(e.structure){let{min:o,max:i,map:a}=pEe(e.structure.root),A=[];a.forEach((l,u)=>{let g=l%a.size,m=B6(h6(u));A[g]===void 0?A[g]=m:A[g]+=`, ${m}`});let s={minLabel:B6(o),maxLabel:B6(i),valueLabel:l=>A[l]},c=Yi(a.size,t,s);n=c.legend,r=l=>{let u;if(W.Location.is(l)){let g=C6(l.unit.conformation.operator.hkl);u=a.get(g)}else if(Et.isLocation(l)){let g=C6(l.aUnit.conformation.operator.hkl);u=a.get(g)}return u===void 0?mEe:c.color(u)}}else r=()=>mEe;return{factory:fEe,granularity:"instance",color:r,props:t,description:$nt,legend:n}}var BEe={name:"operator-hkl",label:"Operator HKL",category:Br.Symmetry,factory:fEe,getParams:eot,defaultValues:h.getDefaultValues(dEe),isApplicable:e=>!!e.structure};var MI;(r=>(r.Descriptor={name:"atom_partial_charge"},r.Provider=Ws.create(r.Descriptor)))(MI||={});var y6=16777113,tot="Assigns a color based on the partial charge of an atom.",dk={domain:h.Interval([-1,1]),list:h.ColorList("red-white-blue",{presetKind:"scale"})};function rot(e){return dk}function IEe(e,t){return MI.Provider.get(e.model)?.data.value(t)}function pk(e,t){let r=oa.create({domain:t.domain,listOrName:t.list.colors});function n(o){if(W.Location.is(o)){let i=IEe(o.unit,o.element);return i!==void 0?r.color(i):y6}else if(Et.isLocation(o)){let i=IEe(o.aUnit,o.aUnit.elements[o.aIndex]);return i!==void 0?r.color(i):y6}return y6}return{factory:pk,granularity:"group",preferSmoothing:!0,color:n,props:t,description:tot,legend:r?r.legend:void 0}}var CEe={name:"partial-charge",label:"Partial Charge",category:Br.Atom,factory:pk,getParams:rot,defaultValues:h.getDefaultValues(dk),isApplicable:e=>!!e.structure&&e.structure.models.some(t=>MI.Provider.get(t)!==void 0)};var not="many-distinct",hEe=16448250,oot="Gives every atom a color based on its `label_atom_id` value.",yEe={...Pi({type:"colors",colorList:not})};function iot(e){return h.clone(yEe)}function aot(e){let t=new Map;for(let r of e.models){let{label_atom_id:n}=r.atomicHierarchy.atoms;for(let o=0,i=n.rowCount;o<i;++o){let a=n.value(o);t.has(a)||t.set(a,t.size)}}return t}function QEe(e,t){let r,n;if(e.structure){let o=W.Location.create(e.structure.root),i=aot(e.structure.root),a=Array.from(i.keys()),A=c=>a[c],s=Yi(i.size,t,{valueLabel:A});n=s.legend,r=c=>{let l;if(W.Location.is(c)){let u=Ke.atom.label_atom_id(c);l=i.get(u)}else if(Et.isLocation(c)){o.unit=c.aUnit,o.element=c.aUnit.elements[c.aIndex];let u=Ke.atom.label_atom_id(o);l=i.get(u)}return l===void 0?hEe:s.color(l)}}else r=()=>hEe;return{factory:QEe,granularity:"group",preferSmoothing:!0,color:r,props:t,description:oot,legend:n}}var EEe={name:"atom-id",label:"Atom Id",category:Br.Atom,factory:QEe,getParams:iot,defaultValues:h.getDefaultValues(yEe),isApplicable:e=>!!e.structure};var Q6="Assign color based on the given value of a volume cell.",bEe={colorList:h.ColorList({kind:"interpolate",colors:[[xt.white,0],[xt.red,.25],[xt.white,.5],[xt.blue,.75],[xt.white,1]]},{offsets:!0,isEssential:!0}),domain:h.MappedStatic("auto",{custom:h.Interval([-1,1],{step:.001}),auto:h.Group({symmetric:h.Boolean(!1,{description:"If true the automatic range is determined as [-|max|, |max|]."})})}),isRelative:h.Boolean(!1,{description:"If true the value is treated as relative to the volume mean and sigma."}),defaultColor:h.Color(13421772)};function Aot(e){return bEe}function fk(e,t){if(e.volume){let{min:r,max:n,mean:o,sigma:i}=e.volume.grid.stats,a=t.domain.name==="custom"?t.domain.params:[r,n],{colorList:A,defaultColor:s}=t;if(t.domain.name==="auto"&&t.isRelative&&(a[0]=(a[0]-o)/i,a[1]=(a[1]-o)/i),t.domain.name==="auto"&&t.domain.params.symmetric){let c=Math.max(Math.abs(a[0]),Math.abs(a[1]));a[0]=-c,a[1]=c}if(e.locationKinds?.includes("direct-location")){let c=[Uf(a[0],r,n),Uf(a[1],r,n)],l=KA.Palette(A.colors,A.kind,c,s);return{factory:fk,granularity:"direct",props:t,description:Q6,palette:l}}else{let c=jr.makeGetTrilinearlyInterpolated(e.volume.grid,"none"),l=g=>{if(!uQ(g))return t.defaultColor;let m=c(g.position);return Number.isNaN(m)?t.defaultColor:$t((m-a[0])/(a[1]-a[0]),0,1)*KA.PaletteScale},u=KA.Palette(A.colors,A.kind,void 0,s);return{factory:fk,granularity:"vertex",preferSmoothing:!0,color:l,palette:u,props:t,description:Q6}}}else return{factory:fk,granularity:"uniform",color:()=>t.defaultColor,props:t,description:Q6}}var xEe={name:"volume-value",label:"Volume Value",category:Br.Misc,factory:fk,getParams:Aot,defaultValues:h.getDefaultValues(bEe),isApplicable:e=>!!e.volume&&!Ze.Segmentation.get(e.volume)};var SEe=13421772,sot="Gives every volume segment a unique color.",DEe={...Pi({type:"colors",colorList:"many-distinct"})};function cot(e){return h.clone(DEe)}function vEe(e,t){let r,n,o=e.volume&&Ze.Segmentation.get(e.volume);if(o){let i=o.segments.size,a=Array.from(o.segments.keys()),A=Yi(i,t);n=A.legend,r=s=>Ze.Segment.isLocation(s)?A.color(a.indexOf(s.segment)):SEe}else r=()=>SEe;return{factory:vEe,granularity:"instance",color:r,props:t,description:sot,legend:n}}var FEe={name:"volume-segment",label:"Volume Segment",category:Br.Misc,factory:vEe,getParams:cot,defaultValues:h.getDefaultValues(DEe),isApplicable:e=>!!e.volume&&!!Ze.Segmentation.get(e.volume)};var Pa;(o=>{function e(i){let a={create(A){return{action:a,params:A}},id:Hn.create22(),definition:i,createDefaultParams(A,s){return i.params?h.getDefaultValues(i.params(A,s)):{}}};return a}o.create=e;function t(i){let a=i.definition;return e({from:a.from,display:a.display,params:a.params,isApplicable:i.definition.isApplicable?(A,s,c)=>i.definition.isApplicable(A,c):void 0,run({cell:A,state:s,params:c}){let l=s.build().to(A.transform.ref).apply(i,c);return s.updateTree(l)}})}o.fromTransformer=t;let r;(A=>{function i(s){return c=>e({from:s.from instanceof Array?s.from:s.from?[s.from]:[],display:typeof s.display=="string"?{name:s.display}:s.display?s.display:{name:"Unnamed State Action"},params:typeof s.params=="object"?()=>s.params:s.params?s.params:void 0,isApplicable:s.isApplicable,...typeof c=="function"?{run:c}:c})}A.build=s=>i(s)})(r=o.Builder||={}),o.build=r.build})(Pa||={});var lt;(d=>{function e(f,I,C){return f.definition.params?f.definition.params(I,C):{}}d.getParamDefinition=e;function t(f){return!!f&&typeof f.toAction=="function"&&typeof f.apply=="function"}d.is=t;let r;(Q=>(Q[Q.Unchanged=0]="Unchanged",Q[Q.Updated=1]="Updated",Q[Q.Recreate=2]="Recreate",Q[Q.Null=3]="Null"))(r=d.UpdateResult||={});let n=new Map,o=new Map;function i(f){for(let I of f.definition.from)if(o.has(I.type)){let C=o.get(I.type);for(let y=0;y<C.length;y++)if(C[y].id===f.id){C[y]=f;return}C.push(f)}else o.set(I.type,[f])}function a(){return Array.from(n.values())}d.getAll=a;function A(f){let I=n.get(f);if(!I)throw new Error(`A transformer with signature '${f}' is not registered.`);return I}d.get=A;function s(f){return o.get(f)||[]}d.fromType=s;function c(f,I){let{name:C}=I,y=`${f}.${C}`;if(n.has(y)){if(n.get(y).definition===I)return n.get(y);td||console.warn(`A transform with id '${C}' is already registered. Please pick a unique identifier for your transforms and/or register them only once. This is to ensure that transforms can be serialized and replayed.`)}let Q={apply(E,b,x){return en.create(E,Q,b,x)},toAction(){return Pa.fromTransformer(Q)},namespace:f,id:y,definition:I,createDefaultParams(E,b){return I.params?h.getDefaultValues(I.params(E,b)):{}}};return n.set(y,Q),i(Q),Q}d.create=c;function l(f){return I=>c(f,I)}d.factory=l;function u(f){return g.build(f)}d.builderFactory=u;let g;(C=>{function f(y,Q){return E=>c(y,{name:Q.name,from:Q.from instanceof Array?Q.from:[Q.from],to:Q.to instanceof Array?Q.to:[Q.to],display:typeof Q.display=="string"?{name:Q.display}:Q.display?Q.display:{name:wu(Q.name.replace(/[-]/g," "))},params:typeof Q.params=="object"?()=>Q.params:Q.params?Q.params:void 0,isDecorator:Q.isDecorator,...E})}function I(y){return Q=>f(y,Q)}C.build=I})(g=d.Builder||={});function m(f){return g.build(f)}d.build=m,d.ROOT=c("build-in",{name:"root",from:[],to:[],display:{name:"Root",description:"For internal use."},apply(){throw new Error("should never be applied")},update(){return 0}})})(lt||={});var en;(E=>{E.RootRef="-=root=-";function t(b,x){return x?typeof x.isCollapsed<"u"&&b.isCollapsed!==x.isCollapsed||typeof x.isHidden<"u"&&b.isHidden!==x.isHidden||typeof x.isGhost<"u"&&b.isGhost!==x.isGhost||typeof x.isLocked<"u"&&b.isLocked!==x.isLocked:!1}E.isStateChange=t;function r(b,x){if(!x)return!1;let S=!1;for(let w of Object.keys(x)){let R=x[w],T=b[w];!!R!=!!T&&(S=!0,b[w]=R)}return S}E.assignState=r;function n(b,x){if(!x)return!1;let S=!1;for(let w of Object.keys(x)){let R=x[w],T=b[w];!!R!=!!T&&(S=!0,R!==void 0?b[w]=R:delete b[w])}for(let w of Object.keys(b)){let R=x[w],T=b[w];!!R!=!!T&&(S=!0,R!==void 0?b[w]=R:delete b[w])}return S}E.syncState=n;function o(b,x,S,w){let R=w&&w.ref?w.ref:Hn.create22(),T;return w&&w.tags&&(T=typeof w.tags=="string"?[w.tags]:w.tags,T.length===0?T=void 0:T.sort()),{parent:b,transformer:x,state:w?.state||{},tags:T,ref:R,dependsOn:w&&w.dependsOn,params:S,version:Hn.create22()}}E.create=o;function i(b,x){return{...b,params:x,version:Hn.create22()}}E.withParams=i;function a(b,x){return x?{...b,state:{...b.state,...x}}:b}E.withState=a;function A(b,x){let S;return x&&(S=typeof x=="string"?[x]:x,S.length===0?S=void 0:S.sort()),{...b,tags:S,version:Hn.create22()}}E.withTags=A;function s(b,x){let S;return x&&(S=typeof x=="string"?[x]:x,S.length===0?S=void 0:S.sort()),{...b,dependsOn:S,version:Hn.create22()}}E.withDependsOn=s;function c(b,x){return{...b,parent:x,version:Hn.create22()}}E.withParent=c;function l(b){return o(E.RootRef,lt.ROOT,{},{ref:E.RootRef,state:b})}E.createRoot=l;function u(b,x){return b.tags?b.tags.indexOf(x)>=0:!1}E.hasTag=u;function g(b,x){if(!b.tags)return typeof x!="string"&&x.length===0;if(typeof x=="string")return u(b,x);for(let S of x)if(b.tags.indexOf(S)<0)return!1;return!0}E.hasTags=g;function m(b){let x=b;if(x._defaultSchemaSet)return x._defaultSchema;x._defaultSchemaSet=!0;try{let S=b.transformer.definition;S.params&&(x._defaultSchema=S.params(void 0,void 0))}catch{}return x._defaultSchema}E.tryGetDefaultParamDefinition=m;function p(b){let x=[];if(b.dependsOn)for(let R of b.dependsOn)Po(x,R);let S=b.transformer.definition,w=b.params;if(S.getDependencies&&w)try{let R=S.getDependencies(w);if(R)for(let T of R)Po(x,T)}catch{}if(w){let R=m(b);R?h.collectRefs(R,w,x):d(w,x)}return vu(x,b.ref),vu(x,E.RootRef),x}E.getEffectiveDependsOn=p;function d(b,x,S=0){if(!b||typeof b!="object"||S>6)return x;if(Array.isArray(b)){for(let R of b)d(R,x,S+1);return x}let w=b.ref;if(typeof w=="string"&&typeof b.getValue=="function")return Po(x,w),x;for(let R of Object.keys(b))d(b[R],x,S+1);return x}let f={};function I(b){let x;try{x=pz(b.params??f)}catch{let S=b.transformer.definition.customSerialization?b.transformer.definition.customSerialization.toJSON:C;x=pz(S(b.params??f))}b.version=x}E.setParamsHashVersion=I;function C(b){return b}function y(b){let x=b.transformer.definition.customSerialization?b.transformer.definition.customSerialization.toJSON:C,S;for(let w of Object.keys(b.state))b.state[w]&&(S||(S={}),S[w]=!0);return{parent:b.parent,transformer:b.transformer.id,params:b.params?x(b.params):void 0,state:S,tags:b.tags,ref:b.ref,dependsOn:b.dependsOn,version:b.version}}E.toJSON=y;function Q(b){let x=lt.get(b.transformer),S=x.definition.customSerialization?x.definition.customSerialization.fromJSON:C;return{parent:b.parent,transformer:x,params:b.params?S(b.params):void 0,state:b.state||{},tags:b.tags,ref:b.ref,dependsOn:b.dependsOn,version:b.version}}E.fromJSON=Q})(en||={});var bR=class{constructor(t){this.tree=t;this.transforms=this.tree.transforms;this.children=this.tree.children;this.dependencies=this.tree.dependencies;this.changedNodes=!1;this.changedChildren=!1;this.changedDependencies=!1;this._childMutations=void 0;this._dependencyMutations=void 0;this._stateUpdates=void 0}get childMutations(){return this._childMutations?this._childMutations:(this._childMutations=new Map,this._childMutations)}get dependencyMutations(){return this._dependencyMutations?this._dependencyMutations:(this._dependencyMutations=new Map,this._dependencyMutations)}changeNodes(){this.changedNodes||(this.changedNodes=!0,this.transforms=this.transforms.asMutable())}changeChildren(){this.changedChildren||(this.changedChildren=!0,this.children=this.children.asMutable())}changeDependencies(){this.changedDependencies||(this.changedDependencies=!0,this.dependencies=this.dependencies.asMutable())}get root(){return this.transforms.get(en.RootRef)}asTransient(){return this.asImmutable().asTransient()}addChild(t,r){if(this.changeChildren(),this.childMutations.has(t))this.childMutations.get(t).add(r);else{let n=this.children.get(t).asMutable();n.add(r),this.children.set(t,n),this.childMutations.set(t,n)}}removeChild(t,r){if(this.changeChildren(),this.childMutations.has(t))this.childMutations.get(t).remove(r);else{let n=this.children.get(t).asMutable();n.remove(r),this.children.set(t,n),this.childMutations.set(t,n)}}clearRoot(){let t=en.RootRef;if(this.children.get(t).size===0)return;this.changeChildren();let r=md();this.children.set(t,r),this.childMutations.set(t,r)}mutateDependency(t,r,n){let o=this.dependencyMutations.get(t);if(!o){let i=this.dependencies.get(t);if(!i&&n==="remove")return;this.changeDependencies(),o=i?i.asMutable():md().asMutable(),this.dependencyMutations.set(t,o),this.dependencies.set(t,o)}n==="add"?o.add(r):o.remove(r)}changeParent(t,r){ER(this.transforms,t);let n=this.transforms.get(t);this.removeChild(n.parent,t),this.addChild(r,t),this.changeNodes(),this.transforms.set(t,en.withParent(n,r))}add(t){let r=t.ref;this.transforms.has(t.ref)&&this.transforms.get(t.ref).parent!==t.parent&&got(t.ref);let n=this.children.get(t.parent);if(n||mot(t.parent),n.has(t.ref)||this.addChild(t.parent,t.ref),this.children.has(t.ref)||(this.changedChildren||(this.changedChildren=!0,this.children=this.children.asMutable()),this.children.set(t.ref,md())),this.changeNodes(),this.transforms.set(r,t),t.dependsOn)for(let o of t.dependsOn)this.mutateDependency(o,r,"add");return this}setParams(t,r){ER(this.transforms,t);let n=this.transforms.get(t);return Ny(n.params,r)?!1:(this.changedNodes||(this.changedNodes=!0,this.transforms=this.transforms.asMutable()),this.transforms.set(n.ref,en.withParams(n,r)),!0)}setTags(t,r){ER(this.transforms,t);let n=this.transforms.get(t),o=en.withTags(n,r);return _b(n.tags,o.tags)?!1:(this.changedNodes||(this.changedNodes=!0,this.transforms=this.transforms.asMutable()),this.transforms.set(n.ref,o),!0)}setDependsOn(t,r){ER(this.transforms,t);let n=this.transforms.get(t),o=en.withDependsOn(n,r);return _b(n.dependsOn,o.dependsOn)?!1:(this.changedNodes||(this.changedNodes=!0,this.transforms=this.transforms.asMutable()),this.transforms.set(n.ref,o),!0)}assignState(t,r){ER(this.transforms,t);let n=this.transforms.get(t);if(this._stateUpdates&&this._stateUpdates.has(t))return en.assignState(n.state,r),n;{this._stateUpdates||(this._stateUpdates=new Set),this._stateUpdates.add(n.ref),this.changeNodes();let o=en.withState(n,r);return this.transforms.set(t,o),o}}remove(t){let r=this.transforms.get(t);if(!r)return[];let n=Ho.subtreePostOrder(this,r);if(t===en.RootRef){if(n.pop(),n.length===0)return n;this.clearRoot()}else{if(n.length===0)return n;this.removeChild(r.parent,r.ref)}this.changeNodes(),this.changeChildren();for(let i of n)this.transforms.delete(i.ref),this.children.delete(i.ref),this._childMutations&&this._childMutations.delete(i.ref);let o=[];for(let i of n){if(i.dependsOn)for(let a of i.dependsOn)this.transforms.has(a)&&this.mutateDependency(a,i.ref,"remove");if(this.dependencies.has(i.ref)){let a=this.dependencies.get(i.ref).toArray();this.changeDependencies(),this.dependencies.delete(i.ref),this._dependencyMutations&&this._dependencyMutations.delete(i.ref);for(let A of a)if(this.transforms.has(A))for(let s of this.remove(A))o[o.length]=s}}for(let i of o)n[n.length]=i;return n}asImmutable(){return!this.changedNodes&&!this.changedChildren&&!this._childMutations?this.tree:(this._childMutations&&this._childMutations.forEach(lot,this.children),this._dependencyMutations&&this._dependencyMutations.forEach(uot,this.dependencies),Ho.create(this.changedNodes?this.transforms.asImmutable():this.transforms,this.changedChildren?this.children.asImmutable():this.children,this.changedDependencies?this.dependencies.asImmutable():this.dependencies))}};function lot(e,t){this.set(t,e.asImmutable())}function uot(e,t){e.size===0?this.delete(t):this.set(t,e.asImmutable())}function got(e){throw new Error(`Transform '${e}' is already present in the tree.`)}function mot(e){throw new Error(`Parent '${e}' must be present in the tree.`)}function ER(e,t){if(!e.has(t))throw new Error(`Node '${t}' is not present in the tree.`)}var Ho;(Q=>{class e{constructor(b,x,S){this.transforms=b;this.children=x;this.dependencies=S}get root(){return this.transforms.get(en.RootRef)}asTransient(){return new bR(this)}}function t(E){let b=E||en.createRoot();return r(dd([[b.ref,b]]),dd([[b.ref,md()]]),dd())}Q.createEmpty=t;function r(E,b,x){return new e(E,b,x)}Q.create=r;function n(E){o(this,this.tree.transforms.get(E))}function o(E,b){let x=E.tree.children.get(b.ref);x&&x.size&&x.forEach(n,E),E.f(b,E.tree,E.state)}function i(E,b,x,S){let w={tree:E,state:x,f:S};return o(w,b),w.state}Q.doPostOrder=i;function a(E){A(this,this.tree.transforms.get(E))}function A(E,b){let x=E.f(b,E.tree,E.state);if(typeof x=="boolean"&&!x)return;let S=E.tree.children.get(b.ref);S&&S.size&&S.forEach(a,E)}function s(E,b,x,S){let w={tree:E,state:x,f:S};return A(w,b),w.state}Q.doPreOrder=s;function c(E,b,x){x.push(E)}function l(E,b){return i(E,b,[],c)}Q.subtreePostOrder=l;function u(E,b,x){x.push(en.toJSON(E))}function g(E){let b=[];return s(E,E.root,b,u),{transforms:b}}Q.toJSON=g;function m(E){let b=dd().asMutable(),x=dd().asMutable(),S=dd().asMutable();for(let R of E.transforms){let T=en.fromJSON(R);b.set(T.ref,T),x.has(T.ref)||x.set(T.ref,md().asMutable()),T.ref!==T.parent&&x.get(T.parent).add(T.ref)}let w=new Set;for(let R of E.transforms){let T=R.ref;if(x.set(T,x.get(T).asImmutable()),!!R.dependsOn)for(let L of R.dependsOn)w.add(L),S.has(L)?S.get(L).add(T):S.set(L,md([T]).asMutable())}return w.forEach(R=>{S.set(R,S.get(R).asImmutable())}),r(b.asImmutable(),x.asImmutable(),S.asImmutable())}Q.fromJSON=m;function p(E){console.log({tr:E.transforms.keySeq().toArray(),tr1:E.transforms.valueSeq().toArray().map(b=>b.ref),ch:E.children.keySeq().toArray()})}Q.dump=p;function d(E,b,x){if(b===x)return!0;let w=E.children.get(b).values();for(;;){let R=w.next();if(R.done)return!1;if(d(E,R.value,x))return!0}}function f(E,b,x){return!E.transforms.has(b)||!E.transforms.has(x)?!1:d(E,b,x)}Q.subtreeHasRef=f;function I(E,b){let x=E.children.get(b);if(x.size!==1)return b;let S=E.transforms.get(x.first());return S?.transformer.definition.isDecorator?I(E,S.ref):b}Q.getDecoratorRoot=I;function C(E,b){for(let x of b){let S=E.transforms.get(x);S&&en.setParamsHashVersion(S)}}Q.setParamHashVersion=C;function y(E,b){let x=new Map(b.transforms.map(S=>[S.ref,S]));for(let S of E.transforms){let w=x.get(S.ref);w&&(S.transformer!==w.transformer||S.version!==w.version||(S.params=w.params))}}Q.reuseTransformParams=y})(Ho||={});var fr;(ne=>{function e(oe,ae){return t(oe)(ae)}ne.select=e;function t(oe){let ae=oe||s.root,me;return n(ae)?me=ae.compile():r(ae)?me=s.byValue(ae).compile():o(ae)?me=ae:me=s.byRef(ae).compile(),me}ne.compile=t;function r(oe){return oe.transform!==void 0&&oe.status!==void 0}function n(oe){return oe.compile!==void 0}function o(oe){return typeof oe=="function"}let i={select(oe){return e(this,oe||this.state)}};function a(oe,ae){i[oe]=function(...me){return ae.call(void 0,this,...me)}}function A(oe){return Object.create(i,{compile:{writable:!1,configurable:!1,value:oe}})}let s;(ye=>{ye.root=A(()=>Be=>[Be.cells.get(Be.tree.root.ref)]);function ae(...Be){return A(()=>De=>{let Te=[];for(let be of Be){let Fe=De.cells.get(be);Fe&&Te.push(Fe)}return Te})}ye.byRef=ae;function me(...Be){return A(()=>De=>Be)}ye.byValue=me;function Se(Be,De=en.RootRef){return A(()=>Te=>{let be={roots:[],cells:Te.cells,type:Be.type};return Ho.doPreOrder(Te.tree,Te.tree.transforms.get(De),be,Ce),be.roots})}ye.rootsOfType=Se;function ee(Be,De=en.RootRef){return A(()=>Te=>{let be={ret:[],cells:Te.cells,type:Be.type};return Ho.doPreOrder(Te.tree,Te.tree.transforms.get(De),be,Ne),be.ret})}ye.ofType=ee;function O(Be,De=en.RootRef){return A(()=>Te=>{let be={ret:[],cells:Te.cells,t:Be};return Ho.doPreOrder(Te.tree,Te.tree.transforms.get(De),be,$),be.ret})}ye.ofTransformer=O;function X(Be,De=en.RootRef){return A(()=>Te=>{let be={ret:[],cells:Te.cells,t:Be};return Ho.doPreOrder(Te.tree,Te.tree.transforms.get(De),be,pe),be.ret})}ye.ofTransformerWithError=X;function Ce(Be,De,Te){let be=Te.cells.get(Be.ref);return be&&be.obj&&be.obj.type===Te.type?(Te.roots.push(be),!1):!0}function Ne(Be,De,Te){let be=Te.cells.get(Be.ref);return be&&be.obj&&be.obj.type===Te.type&&Te.ret.push(be),!0}function $(Be,De,Te){let be=Te.cells.get(Be.ref);return be&&be.obj&&be.transform.transformer===Te.t&&Te.ret.push(be),!0}function pe(Be,De,Te){let be=Te.cells.get(Be.ref);return be&&be.status==="error"&&be.transform.transformer===Te.t&&Te.ret.push(be),!0}})(s=ne.Generators||={}),a("flatMap",c);function c(oe,ae){let me=t(oe);return A(()=>Se=>{let ee=[];for(let O of me(Se))for(let X of ae(O,Se))ee.push(X);return ee})}ne.flatMap=c,a("mapObject",l);function l(oe,ae){let me=t(oe);return A(()=>Se=>{let ee=[];for(let O of me(Se)){let X=ae(O,Se);X&&ee.push(X)}return ee})}ne.mapObject=l,a("unique",u);function u(oe){let ae=t(oe);return A(()=>me=>{let Se=new Set,ee=[];for(let O of ae(me))O&&(Se.has(O.transform.ref)||(Se.add(O.transform.ref),ee.push(O)));return ee})}ne.unique=u,a("first",g);function g(oe){let ae=t(oe);return A(()=>me=>{let Se=ae(me);return Se.length?[Se[0]]:[]})}ne.first=g,a("filter",m);function m(oe,ae){return c(oe,me=>ae(me)?[me]:[])}ne.filter=m,a("withStatus",p);function p(oe,ae){return m(oe,me=>me.status===ae)}ne.withStatus=p,a("withTag",d);function d(oe,ae){return m(oe,me=>!!me.transform.tags&&me.transform.tags.indexOf(ae)>=0)}ne.withTag=d,a("subtree",f);function f(oe){return c(oe,(ae,me)=>{let Se=[];return Ho.doPreOrder(me.tree,me.tree.transforms.get(ae.transform.ref),Se,(ee,O,X)=>{X.push(ee.ref)}),Se.map(ee=>me.cells.get(ee))})}ne.subtree=f,a("children",I);function I(oe){return c(oe,(ae,me)=>{let Se=[];return me.tree.children.get(ae.transform.ref).forEach(ee=>Se.push(me.cells.get(ee))),Se})}ne.children=I,a("ofType",C);function C(oe,ae){return m(oe,me=>me.obj?me.obj.type===ae.type:!1)}ne.ofType=C,a("ancestor",y);function y(oe,ae){return u(l(oe,(me,Se)=>T(Se.tree,Se.cells,me.transform.ref,ae)))}ne.ancestor=y,a("ancestorOfType",Q);function Q(oe,ae){return u(l(oe,(me,Se)=>v(Se.tree,Se.cells,me.transform.ref,ae)))}ne.ancestorOfType=Q,a("ancestorWithTransformer",E);function E(oe,ae){return u(l(oe,(me,Se)=>F(Se.tree,Se.cells,me.transform.ref,ae)))}ne.ancestorWithTransformer=E,a("withTransformer",b);function b(oe,ae){return m(oe,me=>me.transform.transformer===ae)}ne.withTransformer=b,a("root",x);function x(oe,ae){return u(l(oe,(me,Se)=>L(Se.tree,Se.cells,me.transform.ref,ae)))}ne.root=x,a("rootOfType",S);function S(oe,ae){return u(l(oe,(me,Se)=>U(Se.tree,Se.cells,me.transform.ref,ae)))}ne.rootOfType=S,a("parent",w);function w(oe){return u(l(oe,(ae,me)=>me.cells.get(me.tree.transforms.get(ae.transform.ref).parent)))}ne.parent=w;function R(oe,ae,me,Se,ee){let O=oe.transforms.get(me),X;for(;;){O=oe.transforms.get(O.parent);let Ce=ae.get(O.ref);if(Ce.obj&&Se(Ce)&&(X=Ce,ee)||O.ref===en.RootRef)return X}}function T(oe,ae,me,Se){return R(oe,ae,me,Se,!0)}ne.findAncestor=T;function L(oe,ae,me,Se){return R(oe,ae,me,Se,!1)}ne.findRoot=L;function F(oe,ae,me,Se){return T(oe,ae,me,Array.isArray(Se)?ee=>Se.indexOf(ee.transform.transformer)>=0:ee=>ee.transform.transformer===Se)}ne.findAncestorWithTransformer=F;function v(oe,ae,me,Se){return T(oe,ae,me,G(Se))}ne.findAncestorOfType=v;function U(oe,ae,me,Se){return L(oe,ae,me,G(Se))}ne.findRootOfType=U;function G(oe){return Array.isArray(oe)?ae=>{for(let me of oe)if(me.type===ae.obj.type)return!0}:ae=>ae.obj.type===oe.type}function N(oe,ae,me){return Ho.doPreOrder(oe,oe.transforms.get(ae),{refs:{},tags:me},k).refs}ne.findUniqueTagsInSubtree=N;function k(oe,ae,me){if(oe.tags){for(let Se of oe.tags)if(me.tags.has(Se)){me.refs[Se]=oe.ref;break}}return!0}function J(oe,ae,me){return Ho.doPreOrder(oe,oe.transforms.get(ae),{ref:void 0,tag:me},H).ref}ne.findTagInSubtree=J;function H(oe,ae,me){return oe.tags&&oe.tags.indexOf(me.tag)>=0?(me.ref=oe.ref,!1):!0}function z(oe,ae,me){return Ho.doPreOrder(oe,oe.transforms.get(ae),{refs:[],tags:me},_).refs}ne.findWithAllTags=z;function _(oe,ae,me){if(oe.tags){let Se=me.tags.size,ee=0;for(let O of oe.tags)if(me.tags.has(O)&&(ee++,ee===Se)){me.refs.push(oe);break}}else me.tags.size===0&&me.refs.push(oe)}function M(oe,ae,me){if(oe.transforms.get(ae).transformer===me)return oe.cells.get(ae);let ee=oe.tree.children.get(ae);if(ee.size!==1)return;let O=ee.first();if(O&&oe.transforms.get(O).transformer.definition.isDecorator)return M(oe,O,me)}ne.tryFindDecorator=M;function q(oe,ae){let me=oe.tree.children.get(ae);if(me.size!==1)return oe.cells.get(ae);let Se=me.first();return Se&&oe.transforms.get(Se).transformer.definition.isDecorator?q(oe,Se):oe.cells.get(ae)}ne.getDecorated=q})(fr||={});var po;(o=>{function e(){return i=>t(i)}o.factory=e;function t(i){return class{constructor(A,s){this.data=A;this.id=Hn.create22();this.type=i;this.label=s&&s.label||i.name,this.description=s&&s.description}static{this.type=i}static is(A){return!!A&&i===A.type}}}o.create=t;function r(i,a){if(!i.tags)return!1;for(let A of i.tags)if(A===a)return!0;return!1}o.hasTag=r,o.Null={id:Hn.create22(),type:{name:"Null",typeClass:"Null"},data:void 0,label:"Null"}})(po||={});var xR;(r=>{function e(n){let o=n;return!!o&&!!o.transform&&!!o.parent&&!!o.status}r.is=e;function t(n,o){let i=typeof o=="string"?o:r.is(o)?o.transform.ref:o.ref;return n.cells.get(i)}r.resolve=t})(xR||={});var UQ=class{constructor(t,r){this.ref=t;this.state=r}get cell(){return this.state?.cells.get(this.ref)}get obj(){return this.state?.cells.get(this.ref)?.obj}get data(){return this.obj?.data}update(t,r){if(!this.state)throw new Error("To use update() from StateObjectSelector, 'state' must be defined.");return r||(r=this.state.build()),(r||this.state.build()).to(this).update(t),r}checkValid(){if(!this.state)throw new Error("Unassigned State.");let t=this.cell;if(!t)throw new Error("Not created at all. Did you await/then the corresponding state update?");if(t.status==="ok")return!0;throw t.status==="error"?new Error(t.errorText):t.obj===po.Null?new Error("The object is Null."):new Error("Unresolved. Did you await/then the corresponding state update?")}get isOk(){let t=this.cell;return t&&t.status==="ok"&&t.obj!==po.Null}},Pn;(n=>{function e(o){if(o)return typeof o=="string"?o:xR.is(o)?o.transform.ref:o.cell?.transform.ref}n.resolveRef=e;function t(o,i){if(i)return xR.is(i)?i:typeof i=="string"?o.cells.get(i):i.cell}n.resolve=t;function r(o,i){let a=t(o,i);if(!(!a||!a.obj||a.status!=="ok"))return a}n.resolveAndCheck=r})(Pn||={});var Fg;(t=>{function e(){let r=new E6,n=(()=>r.create());return n.dispose=()=>r.dispose(),n.behavior=o=>r.behavior(o),n}t.create=e})(Fg||={});var E6=class{constructor(){this._eventList=[];this._disposed=!1}create(){let t=new Jn;return this._eventList.push(t),t}behavior(t){let r=new _A(t);return this._eventList.push(r),r}dispose(){if(!this._disposed){for(let t of this._eventList)t.complete();this._disposed=!0}}};var T0;(a=>{function e(A){let s=new Set;for(let c of A.actions)switch(c.kind){case"add":s.add(c.transform.ref);break;case"update":s.add(c.ref);break;case"delete":s.add(c.ref);break;case"insert":{s.add(c.ref),s.add(c.transform.ref);let l=A.tree.children.get(c.ref).toArray();for(let u of l)s.add(u);break}}return Array.from(s)}function t(A,s){if(!A.state||A.state.tree===A.editInfo.sourceTree){let u=A.tree.asImmutable();return s?.useHashVersion&&Ho.setParamHashVersion(u,e(A)),u}let c=A.state.tree.asTransient();for(let u of A.actions)switch(u.kind){case"add":c.add(u.transform);break;case"update":c.setParams(u.ref,u.params);break;case"delete":c.remove(u.ref);break;case"insert":{let g=c.children.get(u.ref).toArray();c.add(u.transform);for(let m of g)c.changeParent(m,u.transform.ref);break}}A.editInfo.sourceTree=A.tree;let l=c.asImmutable();return s?.useHashVersion&&Ho.setParamHashVersion(l,e(A)),l}function r(A){return!!A&&typeof A.getTree=="function"}a.is=r;function n(A){return!!A&&typeof A.getTree=="function"&&typeof A.ref=="string"}a.isTo=n;class o{get editInfo(){return this.state.editInfo}get currentTree(){return this.state.tree}to(s){let c=typeof s=="string"?s:xR.is(s)?s.transform.ref:s.ref;return new i(this.state,c,this)}toRoot(){return new i(this.state,this.state.tree.root.ref,this)}delete(s){let c=Pn.resolveRef(s);return!c||!this.state.tree.transforms.has(c)?this:(this.editInfo.count++,this.state.tree.remove(c),this.state.actions.push({kind:"delete",ref:c}),this)}getTree(s){return t(this.state,s)}commit(s){if(!this.state.state)throw new Error("Cannot commit template tree");return this.state.state.runTask(this.state.state.updateTree(this,s))}constructor(s,c){this.state={state:c,tree:s.asTransient(),actions:[],editInfo:{applied:!1,sourceTree:s,count:0,lastUpdate:void 0}}}}a.Root=o;class i{constructor(s,c,l){this.state=s;this.root=l;if(this.ref=c,!this.state.tree.transforms.has(c))throw new Error(`Could not find node '${c}'.`)}get editInfo(){return this.state.editInfo}get selector(){return new UQ(this.ref,this.state.state)}getApplyRoot(){return Ho.getDecoratorRoot(this.state.tree,this.ref)}apply(s,c,l){if(s.definition.isDecorator)return this.insert(s,c,l);let u=this.getApplyRoot(),g=s.apply(u,c,l);return this.state.tree.add(g),this.editInfo.count++,this.editInfo.lastUpdate=g.ref,this.state.actions.push({kind:"add",transform:g}),new i(this.state,g.ref,this.root)}applyOrUpdate(s,c,l,u){if(this.state.tree.transforms.has(s)){let g=this.to(s);return l&&g.update(l),g}else return this.apply(c,l,{...u,ref:s})}applyOrUpdateTagged(s,c,l,u){if(c.definition.isDecorator)throw new Error("Can't use applyOrUpdateTagged on decorator transformers.");let g=this.getApplyRoot(),m=this.state.tree.children.get(g).values();for(;;){let d=m.next();if(d.done)break;let f=this.state.tree.transforms.get(d.value);if(f&&en.hasTags(f,s)){let I=this.to(d.value);return I.updateTagged(l,Bk(f.tags,s,u&&u.tags)),I}}let p=c.apply(g,l,{...u,tags:Bk(s,u&&u.tags)});return this.state.tree.add(p),this.editInfo.count++,this.editInfo.lastUpdate=p.ref,this.state.actions.push({kind:"add",transform:p}),new i(this.state,p.ref,this.root)}group(s,c,l){return this.apply(s,c,l)}insert(s,c,l){let u=this.state.tree.children.get(this.ref).toArray(),g=s.apply(this.ref,c,l);this.state.tree.add(g);for(let m of u)this.state.tree.changeParent(m,g.ref);return this.editInfo.count++,this.editInfo.lastUpdate=g.ref,this.state.actions.push({kind:"insert",ref:this.ref,transform:g}),new i(this.state,g.ref,this.root)}updateTagged(s,c){(this.state.tree.setParams(this.ref,s)||this.state.tree.setTags(this.ref,c))&&(this.editInfo.count++,this.editInfo.lastUpdate=this.ref,this.state.actions.push({kind:"update",ref:this.ref,params:s}))}update(s,c){let l;if(c){let u=this.state.tree.transforms.get(this.ref);l=Wc(u.params,c)}else l=typeof s=="function"?Wc(this.state.tree.transforms.get(this.ref).params,s):s;return this.state.tree.setParams(this.ref,l)&&(this.editInfo.count++,this.editInfo.lastUpdate=this.ref,this.state.actions.push({kind:"update",ref:this.ref,params:l})),this.root}updateState(s){let c=this.state.tree.transforms.get(this.ref);en.isStateChange(c.state,s)&&(this.state.tree.assignState(this.ref,s),this.editInfo.count++,this.editInfo.lastUpdate=this.ref,this.state.actions.find(l=>l.kind==="update"&&l.ref===this.ref)||this.state.actions.push({kind:"update",ref:this.ref,params:c.params}))}tag(s){let c=this.state.tree.transforms.get(this.ref);return this.updateTagged(c.params,Bk(c.tags,s)),this}dependsOn(s){let c=this.state.tree.transforms.get(this.ref);this.state.tree.setDependsOn(this.ref,Bk(c.dependsOn,s))&&(this.editInfo.count++,this.editInfo.lastUpdate=this.ref,this.state.actions.push({kind:"update",ref:this.ref,params:c.params}))}to(s){return this.root.to(s)}toRoot(){return this.root.toRoot()}delete(s){return this.root.delete(s)}getTree(s){return t(this.state,s)}commit(s){if(!this.state.state)throw new Error("Cannot commit template tree");return this.state.state.runTask(this.state.state.updateTree(this,s))}}a.To=i})(T0||={});function Bk(...e){let t,r=[];for(let n of e)if(n)if(t||(t=new Set),typeof n=="string"){if(t.has(n))continue;t.add(n),r.push(n)}else for(let o of n)t.has(o)||(t.add(o),r.push(o));return r}var Ik=class{constructor(){this.ev=Fg.create();this.actions=new Map;this.fromTypeIndex=new Map;this.events={added:this.ev(),removed:this.ev()}}add(t){let r=lt.is(t)?t.toAction():t;if(this.actions.has(r.id))return this;this.actions.set(r.id,r);for(let n of r.definition.from)this.fromTypeIndex.has(n.type)?this.fromTypeIndex.get(n.type).push(r):this.fromTypeIndex.set(n.type,[r]);return this.events.added.next(void 0),this}remove(t){let r=lt.is(t)?t.toAction().id:Hn.is(t)?t:t.id,n=this.actions.get(r);if(!n)return this;this.actions.delete(r);for(let o of n.definition.from){let i=this.fromTypeIndex.get(o.type);i&&(vu(i,n),i.length===0&&this.fromTypeIndex.delete(o.type))}return this.events.removed.next(void 0),this}fromCell(t,r){let n=t.obj;if(!n)return[];let o=this.fromTypeIndex.get(n.type);if(!o)return[];let i=!1;for(let A of o)if(A.definition.isApplicable){i=!0;break}if(!i)return o;let a=[];for(let A of o)A.definition.isApplicable?A.definition.isApplicable(n,t.transform,r)&&a.push(A):a.push(A);return a}dispose(){this.ev.dispose()}};var Wf;(o=>{function e(i){return{type:"message",timestamp:new Date,message:i}}o.message=e;function t(i){return{type:"error",timestamp:new Date,message:i}}o.error=t;function r(i){return{type:"warning",timestamp:new Date,message:i}}o.warning=r;function n(i){return{type:"info",timestamp:new Date,message:i}}o.info=n})(Wf||={});var P0;(n=>{class e{constructor(i){this.cells=i;this._current=void 0}get current(){return this._current}set current(i){this._current=i}getAncestorOfType(i){if(!this._current)return;let a=this._current;for(;;){if(a=this.cells.get(a.transform.parent),!a.obj)return;if(a.obj.type===i.type)return a.obj;if(a.transform.ref===en.RootRef)return}}getRootOfType(i){if(!this._current)return;let a=this._current,A;for(;;){if(!a.obj)return;if(a.obj.type===i.type&&(A=a),a.transform.ref===en.RootRef)return A?A.obj:void 0;a=this.cells.get(a.transform.parent)}}}n.Impl=e;function t(o,i){let a=o.cells,A=a.get(i),s=[A];for(;A?.transform.transformer.definition.isDecorator;)A=a.get(A.transform.parent),s.push(A);return s}n.getDecoratorChain=t;function r(o,i,a){let A,s=o.cells.get(a);if(s)for(;;){if(!s.obj)return;if(s.obj.type===i.type&&(A=s),s.transform.ref===en.RootRef)return A?A.obj:void 0;s=o.cells.get(s.transform.parent)}}n.getRootOfType=r})(P0||={});var Ck=class{constructor(){this.queue=[];this.signal=new Jn}get length(){return this.queue.length}enqueue(t){return this.queue.push(t),this.queue.length===1?!0:this.waitFor(t)}handled(t){Tf(this.queue,t),this.queue.length>0&&this.signal.next({v:this.queue[0],stillPresent:!0})}remove(t){let r=Tf(this.queue,t);return r&&this.signal.next({v:t,stillPresent:!1}),r}waitFor(t){return new Promise(r=>{let n=this.signal.subscribe(({v:o,stillPresent:i})=>{o===t&&(n.unsubscribe(),r(i))})})}};var x6=class extends Error{constructor(t){super(`Cyclic state-tree dependency detected: ${t.join(" -> ")}`),this.name="StateTreeCycleError",this.cycle=t}},bm=class{constructor(t,r){this.errorFree=!0;this.ev=Fg.create();this.globalContext=void 0;this.events={cell:{stateUpdated:this.ev(),created:this.ev(),removed:this.ev()},object:{updated:this.ev(),created:this.ev(),removed:this.ev()},log:this.ev(),changed:this.ev(),historyUpdated:this.ev()};this.behaviors={currentObject:this.ev.behavior({state:this,ref:en.RootRef}),isUpdating:this.ev.behavior(!1)};this.actions=new Ik;this.cells=new Map;this.spine=new P0.Impl(this.cells);this.refResolvers=[];this.tryGetCellData=t=>{let r=this.cells.get(t)?.obj?.data;if(r===void 0){for(let[,n]of this.refResolvers)if(r=n(this,t),r!==void 0)break;if(r===void 0)throw new Error(`Cell '${t}' data undefined.`)}return r};this.historyCapacity=5;this.history=[];this.undoingHistory=!1;this.inTransaction=!1;this.inTransactionError=!1;this._inUpdate=!1;this.reverted=!1;this.updateQueue=new Ck;this._tree=Ho.createEmpty(en.createRoot(r&&r.rootState)).asTransient();let o=this._tree.root;this.runTask=r.runTask,r?.historyCapacity!==void 0&&(this.historyCapacity=r.historyCapacity),this.cells.set(o.ref,{parent:this,transform:o,sourceRef:void 0,obj:t,status:"ok",state:{...o.state},errorText:void 0,params:{definition:{},values:{}},dependencies:{dependentBy:[],dependsOn:[]},cache:{}}),this.globalContext=r&&r.globalContext}get tree(){return this._tree}get transforms(){return this._tree.transforms}get current(){return this.behaviors.currentObject.value.ref}get root(){return this.cells.get(this._tree.root.ref)}build(){return new T0.Root(this.tree,this)}registerRefResolver(t,r){this.refResolvers.push([t,r])}removeRefResolver(t){this.refResolvers=this.refResolvers.filter(r=>r[0]!==t)}addHistory(t,r){this.historyCapacity!==0&&(this.history.unshift([t,r||"Update"]),this.history.length>this.historyCapacity&&this.history.pop(),this.events.historyUpdated.next({state:this}))}clearHistory(){this.history.length!==0&&(this.history=[],this.events.historyUpdated.next({state:this}))}get latestUndoLabel(){return this.history.length>0?this.history[0][1]:void 0}get canUndo(){return this.history.length>0}undo(){return ve.create("Undo",async t=>{let r=this.history.shift();if(r){this.events.historyUpdated.next({state:this}),this.undoingHistory=!0;try{await this.updateTree(r[0],{canUndo:!1}).runInContext(t)}finally{this.undoingHistory=!1}}})}getSnapshot(){return{tree:Ho.toJSON(this._tree)}}setSnapshot(t){let r=Ho.fromJSON(t.tree);return this.updateTree(r)}setCurrent(t){this.behaviors.currentObject.next({state:this,ref:t})}updateCellState(t,r){let n=this.cells.get(t);if(!n)return;let o=typeof r=="function"?r(n.state):r;en.assignState(n.state,o)&&(n.transform=this._tree.assignState(n.transform.ref,o),this.events.cell.stateUpdated.next({state:this,ref:t,cell:n}))}dispose(){let t=[];Ho.doPostOrder(this._tree,this._tree.root,{refs:t},(r,n,o)=>{o.refs.push(r.ref)});for(let r=t.length-1;r>=0;r--){let n=this.cells.get(t[r]);if(n)try{SR(n.transform,n.obj,n.transform.params,n.cache,this.globalContext)}catch(o){console.warn("Error in transformer dispose during State.dispose",o)}}this.ev.dispose(),this.actions.dispose()}select(t){return fr.select(t,this)}selectQ(t){return typeof t=="string"?fr.select(t,this):fr.select(t(fr.Generators),this)}applyAction(t,r,n=en.RootRef){return ve.create("Apply Action",o=>{let i=this.cells.get(n);if(!i)throw new Error(`'${n}' does not exist.`);if(i.status!=="ok")throw new Error(`Action cannot be applied to a cell with status '${i.status}'`);return v6(t.definition.run({ref:n,cell:i,a:i.obj,params:r,state:this},this.globalContext),o)})}transaction(t,r){return ve.create("State Transaction",async n=>{let o=this.inTransaction,i=this._tree.asImmutable(),a=!1;try{o||this.behaviors.isUpdating.next(!0),this.inTransaction=!0,this.inTransactionError=!1,await t(n),this.inTransactionError&&(a=!0,await this.updateTree(i).runInContext(n))}catch(A){if(a||(a=!0,await this.updateTree(i).runInContext(n),this.events.log.next(Wf.error("Error during state transaction, reverting"))),o)throw this.inTransactionError=!0,A;if(r?.rethrowErrors)throw A;console.error(A)}finally{o||(this.inTransaction=!1,this.events.changed.next({state:this,inTransaction:!1}),this.behaviors.isUpdating.next(!1),a||(r?.canUndo?this.addHistory(i,typeof r.canUndo=="string"?r.canUndo:void 0):this.clearHistory()))}})}get inUpdate(){return this._inUpdate}updateTree(t,r){let n={tree:t,options:r};return ve.create("Update Tree",async o=>{if(!await this.updateQueue.enqueue(n))return;this._inUpdate=!0;let a=r?.canUndo?this._tree.asImmutable():void 0,A=!1;this.inTransaction||this.behaviors.isUpdating.next(!0);try{if(T0.is(t)){if(t.editInfo.applied)throw new Error("This builder has already been applied. Create a new builder for further state updates");t.editInfo.applied=!0}this.reverted=!1;let s=r&&(r.revertIfAborted||r.revertOnError)?await this._revertibleTreeUpdate(o,n,r):await this._updateTree(o,n);return A=this.reverted,s.ctx.hadError&&(this.inTransactionError=!0),s.cell?new UQ(s.cell.transform.ref,this):void 0}finally{this._inUpdate=!1,this.updateQueue.handled(n),this.inTransaction||(this.behaviors.isUpdating.next(!1),r?.canUndo?A||this.addHistory(a,typeof r.canUndo=="string"?r.canUndo:void 0):this.undoingHistory||this.clearHistory())}},()=>{this.updateQueue.remove(n)})}async _revertibleTreeUpdate(t,r,n){let o=this.tree,i=await this._updateTree(t,r);return(i.ctx.hadError||i.ctx.wasAborted)&&n.revertOnError||i.ctx.wasAborted&&n.revertIfAborted?(this.reverted=!0,await this._updateTree(t,{tree:o,options:r.options})):i}async _updateTree(t,r){let n=!1,o=this.updateTreeAndCreateCtx(r.tree,t,r.options);try{if(n=await pot(o),T0.isTo(r.tree)){let i=this.select(r.tree.ref)[0];return{ctx:o,cell:i}}return{ctx:o}}finally{this.spine.current=void 0,n&&this.events.changed.next({state:this,inTransaction:this.inTransaction})}}updateTreeAndCreateCtx(t,r,n){let o=(T0.is(t)?t.getTree():t).asTransient(),i=this._tree;this._tree=o;let a={parent:this,editInfo:T0.is(t)?t.editInfo:void 0,errorFree:this.errorFree,taskCtx:r,oldTree:i,tree:o,cells:this.cells,spine:this.spine,results:[],options:{...dot,...n},changed:!1,hadError:!1,wasAborted:!1,newCurrent:void 0,getCellData:this.tryGetCellData};return this.errorFree=!0,a}};(r=>{function e(n,o){return new r(n,o)}r.create=e;let t;(o=>{function n(i,a){return!!a&&i.ref===a.transform.ref&&i.state===a.parent}o.isCell=n})(t=r.ObjectEvent||={})})(bm||={});var dot={doNotLogTiming:!1,doNotUpdateCurrent:!0,revertIfAborted:!1,revertOnError:!1,canUndo:!1};async function pot(e){let t=!!(e.editInfo&&e.editInfo.count===1&&e.editInfo.lastUpdate&&e.editInfo.sourceTree===e.oldTree),r,n=[],o;if(t)r=[],o=[e.editInfo.lastUpdate];else{r=Cot(e);let A=e.parent.current,s=!1;for(let c of r)if(c===A){s=!0;break}if(s){let c=wEe(e.oldTree,A,r,e.cells);e.parent.setCurrent(c)}for(let c=r.length-1;c>=0;c--){let l=e.cells.get(r[c]);l&&SR(l.transform,l.obj,l?.transform.params,l.cache,e.parent.globalContext)}for(let c of r){let l=e.cells.get(c);l&&(l.parent=void 0,bot(l));let u=l&&l.obj;e.cells.delete(c),n.push(u)}o=fot(e.cells,e.tree)}let i=Fot(e,o);for(let A of i.added)e.parent.events.cell.created.next({state:e.parent,ref:A.transform.ref,cell:A});for(let A=0;A<r.length;A++){let s=r[A],c=e.oldTree.transforms.get(s).parent;e.parent.events.object.removed.next({state:e.parent,ref:s,obj:n[A]}),e.parent.events.cell.removed.next({state:e.parent,ref:s,parent:c})}if(n.length&&(n=[]),i.dependent)for(let A of i.dependent)o.push(A.transform.ref);Eot(e,o),e.scheduled=Uot(e,o);for(let A of o)await D6(e,A);if(e.deferred&&e.deferred.length>0)for(;e.deferred.length>0;){let A=e.deferred;e.deferred=[];let s=!1;for(let c of A){let l=e.deferred.length;await D6(e,c),e.deferred.length>l&&e.deferred[e.deferred.length-1]===c||(s=!0)}if(!s){let c=e.deferred.map(l=>{let u=e.cells.get(l);if(!u)return l;let g=TEe(e,u);return`${l} (waiting on: ${g.length?g.join(", "):"unknown"})`});throw e.deferred=[],new Error(`Unresolved dependency: ${c.join("; ")}`)}}e.editInfo||yot(e);let a=e.newCurrent;for(let A of e.results)A.action==="created"?(e.parent.events.object.created.next({state:e.parent,ref:A.ref,obj:A.obj}),e.newCurrent||!e.tree.transforms.get(A.ref).state.isGhost&&A.obj!==po.Null&&(a=A.ref)):A.action==="updated"?e.parent.events.object.updated.next({state:e.parent,ref:A.ref,action:"in-place",obj:A.obj,oldData:A.oldData}):A.action==="replaced"&&e.parent.events.object.updated.next({state:e.parent,ref:A.ref,action:"recreate",obj:A.obj,oldObj:A.oldObj});if(a)e.options.doNotUpdateCurrent||e.parent.setCurrent(a);else{let A=e.parent.current,s=e.cells.get(A);s&&(s.obj===po.Null||s.status==="error"&&s.errorText===wot)&&(a=wEe(e.oldTree,A,[],e.cells),e.parent.setCurrent(a))}return r.length>0||o.length>0||e.changed}function fot(e,t){let r={roots:[],cells:e};return Ho.doPreOrder(t,t.root,r,Bot),r.roots}function Bot(e,t,r){let n=r.cells.get(e.ref);return!n||n.transform.version!==e.version?(r.roots.push(e.ref),!1):!(n.status==="error"||n&&n.obj===po.Null)}function Iot(e,t,r){!r.newTree.transforms.has(e.ref)&&r.cells.has(e.ref)&&r.deletes.push(e.ref)}function Cot(e){let t={newTree:e.tree,cells:e.cells,deletes:[]};return Ho.doPostOrder(e.oldTree,e.oldTree.root,t,Iot),t.deletes}function hot(e,t,r){let n=r.cells.get(e.ref);!n||!en.syncState(n.state,e.state)||r.parent.events.cell.stateUpdated.next({state:r.parent,ref:e.ref,cell:n})}function yot(e){Ho.doPreOrder(e.tree,e.tree.root,e,hot)}function hk(e,t,r,n){let o=e.cells.get(t),i=o.status!==r;o.status=r,o.errorText=n,i&&e.parent.events.cell.stateUpdated.next({state:e.parent,ref:t,cell:o})}function Qot(e,t,r){let n=r.cells.get(e.ref);n.transform=e,Dot(n,r)&&UEe(n),hk(r,e.ref,"pending")}function Eot(e,t){for(let r of t)Ho.doPreOrder(e.tree,e.tree.transforms.get(r),e,Qot)}function bot(e){for(let t of e.dependencies.dependsOn)vu(t.dependencies.dependentBy,e)}function xot(e,t,{ctx:r,added:n,visited:o}){if(o.add(e.ref),r.cells.has(e.ref))return;let i={parent:r.parent,transform:e,sourceRef:void 0,status:"pending",state:{...e.state},errorText:void 0,params:void 0,dependencies:{dependentBy:[],dependsOn:[]},cache:void 0};r.cells.set(e.ref,i),n.push(i)}function Sot(e,t){let r=en.getEffectiveDependsOn(e.transform);if(r.length!==0)for(let n of r){if(!t.tree.transforms.get(n))throw new Error("Cannot depend on a non-existent transform.");let i=t.cells.get(n);Po(e.dependencies.dependsOn,i),Po(i.dependencies.dependentBy,e)}}function Dot(e,t){let r=en.getEffectiveDependsOn(e.transform),n=e.dependencies.dependsOn;if(n.length===r.length){let A=!0;for(let s of n)if(r.indexOf(s.transform.ref)<0){A=!1;break}if(A)return!1}let o=new Set(r),i=!1;for(let A=n.length-1;A>=0;A--){let s=n[A];o.has(s.transform.ref)||(n.splice(A,1),vu(s.dependencies.dependentBy,e),i=!0)}let a=new Set(n.map(A=>A.transform.ref));for(let A of r){if(a.has(A))continue;if(!t.tree.transforms.get(A))throw new Error("Cannot depend on a non-existent transform.");let c=t.cells.get(A);Po(e.dependencies.dependsOn,c),Po(c.dependencies.dependentBy,e),i=!0}return i}function vot(e){if(e.dependencies.dependsOn.length===0)return;let t=[{cell:e,idx:0}],r=new Set([e.transform.ref]),n=new Set;for(;t.length>0;){let o=t[t.length-1],i=o.cell.dependencies.dependsOn;if(o.idx>=i.length){r.delete(o.cell.transform.ref),n.add(o.cell.transform.ref),t.pop();continue}let a=i[o.idx++],A=a.transform.ref;if(!n.has(A)){if(r.has(A)){let s=[],c=!1;for(let l of t)(c||l.cell.transform.ref===A)&&(c=!0,s.push(l.cell.transform.ref));return s.push(A),s}r.add(A),t.push({cell:a,idx:0})}}}function UEe(e){let t=vot(e);if(t)throw new x6(t)}function Fot(e,t){let r={ctx:e,visited:new Set,added:[]};for(let o of t)Ho.doPreOrder(e.tree,e.tree.transforms.get(o),r,xot);for(let o of r.added)Sot(o,e);for(let o of r.added)UEe(o);let n;return r.visited.forEach(o=>{let i=e.cells.get(o);for(let a of i.dependencies.dependentBy)r.visited.has(a.transform.ref)||(n||(n=yo.create()),yo.add(n,a.transform.ref,a))}),{added:r.added,dependent:n?n.array:void 0}}function wEe(e,t,r,n){let o=new Set(r);return LEe(e,t,o,n)}function LEe(e,t,r,n){if(t===en.RootRef)return t;let o=e.transforms.get(t),i=e.children.get(o.parent).values(),a,A=!1;for(;;){let s=i.next();if(s.done)break;if(r.has(s.value))continue;let c=n.get(s.value);if(!c||c.status==="error"||c.obj===po.Null)continue;let l=e.transforms.get(s.value);if(!l.state.isGhost){if(s.value===t){A=!0,r.has(t)||(a=t);continue}if(A)return l.ref;a=l.ref}}return a||LEe(e,o.parent,r,n)}function S6(e,t,r,n){n||(e.hadError=!0,e.parent.errorFree=!1);let o=e.cells.get(t);if(r){e.wasAborted=e.wasAborted||ve.isAbort(r);let a=""+r;hk(e,t,"error",a),n||e.parent.events.log.next({type:"error",timestamp:new Date,message:a})}else o.params=void 0;if(o.obj){let a=o.obj;o.obj=void 0,o.cache=void 0,e.parent.events.object.removed.next({state:e.parent,ref:t,obj:a})}let i=e.tree.children.get(t).values();for(;;){let a=i.next();if(a.done)return;S6(e,a.value,void 0,n)}}var wot="Parent is null";function Rot(e,t,r){r.add(e.ref)}function Uot(e,t){let r=new Set;for(let n of t){let o=e.tree.transforms.get(n);o&&Ho.doPreOrder(e.tree,o,r,Rot)}return r}function TEe(e,t){let r=[],n=e.scheduled;if(!n)return r;for(let o of t.dependencies.dependsOn)o.obj||o.status!=="error"&&n.has(o.transform.ref)&&r.push(o.transform.ref);return r}async function D6(e,t){let r=e.cells.get(t);if(r&&r.dependencies.dependsOn.length>0&&TEe(e,r).length>0){e.deferred||(e.deferred=[]),e.deferred.push(t);return}hk(e,t,"processing");let n=!1;try{let i=co(),a=await Tot(e,t),A=co()-i;a.action!=="none"&&(e.changed=!0),hk(e,t,"ok"),e.results.push(a),a.action==="created"?(n=a.obj===po.Null,!n&&!e.options.doNotLogTiming&&e.parent.events.log.next(Wf.info(`Created ${a.obj.label} in ${NS(A)}.`))):a.action==="updated"?(n=a.obj===po.Null,!n&&!e.options.doNotLogTiming&&e.parent.events.log.next(Wf.info(`Updated ${a.obj.label} in ${NS(A)}.`))):a.action==="replaced"&&(n=a.obj===po.Null,!n&&!e.options.doNotLogTiming&&e.parent.events.log.next(Wf.info(`Updated ${a.obj.label} in ${NS(A)}.`)))}catch(i){e.changed=!0,e.hadError||(e.newCurrent=t),S6(e,t,i,!1),console.error(i);return}let o=e.tree.children.get(t).values();for(;;){let i=o.next();if(i.done)return;n?S6(e,i.value,void 0,!0):await D6(e,i.value)}}function Lot(e,t,r,n){let o=t.transformer.definition.params,i=o?o(r,e.parent.globalContext):{};if(t.version!==t._normalized_param_version)t.params=h.normalizeParams(i,t.params,"all"),t._normalized_param_version=t.version;else{let a=h.getDefaultValues(i);t.params=t.params?Lce(t.params,a):a}return h.resolveRefs(i,t.params,e.getCellData),{definition:i,values:t.params}}async function Tot(e,t){let{oldTree:r,tree:n}=e,o=e.cells.get(t),i=o.transform;if(o.transform.ref===en.RootRef)return{action:"none"};let a=e.cells.get(o.transform.parent);if(a?.obj===po.Null)if(o.sourceRef=a.transform.ref,r.transforms.has(t)&&o.params){let u=o.params.values,g=o.cache;return SR(i,o.obj,u,g,e.parent.globalContext),o.params=void 0,o.obj=po.Null,{ref:t,action:"updated",obj:o.obj}}else return o.params=void 0,{ref:t,action:"created",obj:po.Null};let s=i.transformer.definition.from.length===0?a:fr.findAncestorOfType(n,e.cells,t,i.transformer.definition.from);if(!s)throw new Error(`No suitable parent found for '${t}'`);e.spine.current=o;let c=s.obj;o.sourceRef=s.transform.ref;let l=Lot(e,i,c,o);if(!r.transforms.has(t)||!o.params){o.params=l;let u=await REe(e,o,i.transformer,c,l.values);return b6(u,i),o.obj=u,{ref:t,action:"created",obj:u}}else{let u=o.params.values,g=o.cache,m=o.obj?.data,p=l.values;switch(o.params=l,o.obj&&o.obj!==po.Null?await Pot(e,o,i.transformer,c,o.obj,u,p):lt.UpdateResult.Recreate){case lt.UpdateResult.Recreate:{let f=o.obj;SR(i,f,u,g,e.parent.globalContext);let I=await REe(e,o,i.transformer,c,p);return b6(I,i),o.obj=I,{ref:t,action:"replaced",oldObj:f,obj:I}}case lt.UpdateResult.Updated:return b6(o.obj,i),{ref:t,action:"updated",oldData:m,obj:o.obj};case lt.UpdateResult.Null:return SR(i,o.obj,u,g,e.parent.globalContext),o.obj=po.Null,{ref:t,action:"updated",obj:o.obj};default:return{action:"none"}}}}function SR(e,t,r,n,o){e.transformer.definition.dispose?.({b:t!==po.Null?t:void 0,params:r,cache:n},o)}function b6(e,t){!e||e===po.Null||(e.tags=t.tags)}function v6(e,t){return typeof e.runInContext=="function"?e.runInContext(t):e}function PEe(e){if(e.dependencies.dependsOn.length===0)return;let t=Object.create(null);for(let r of e.dependencies.dependsOn){if(!r.obj)throw new Error("Unresolved dependency.");t[r.transform.ref]=r.obj}return t}function REe(e,t,r,n,o){return t.cache||(t.cache=Object.create(null)),v6(r.definition.apply({a:n,params:o,cache:t.cache,spine:e.spine,dependencies:PEe(t)},e.parent.globalContext),e.taskCtx)}async function Pot(e,t,r,n,o,i,a){return r.definition.update?(t.cache||(t.cache=Object.create(null)),v6(r.definition.update({a:n,oldParams:i,b:o,newParams:a,cache:t.cache,spine:e.spine,dependencies:PEe(t)},e.parent.globalContext),e.taskCtx)):lt.UpdateResult.Recreate}var te;(g=>{g.Create=po.factory();function t(m){return!!m&&m.type.typeClass==="Representation3D"}g.isRepresentation3D=t;function r(m){return!!m&&m.type.typeClass==="Behavior"}g.isBehavior=r;function n(m){return(0,g.Create)({...m,typeClass:"Representation3D"})}g.CreateRepresentation3D=n;function o(m){return(0,g.Create)({...m,typeClass:"Behavior"})}g.CreateBehavior=o;class i extends(0,g.Create)({name:"Root",typeClass:"Root"}){}g.Root=i;class a extends(0,g.Create)({name:"Group",typeClass:"Group"}){}g.Group=a;let A;(f=>{class m extends(0,g.Create)({name:"String Data",typeClass:"Data"}){}f.String=m;class p extends(0,g.Create)({name:"Binary Data",typeClass:"Data"}){}f.Binary=p;class d extends(0,g.Create)({name:"Data Blob",typeClass:"Data"}){}f.Blob=d})(A=g.Data||={});let s;(T=>{class m extends(0,g.Create)({name:"JSON Data",typeClass:"Data"}){}T.Json=m;class p extends(0,g.Create)({name:"CIF File",typeClass:"Data"}){}T.Cif=p;class d extends(0,g.Create)({name:"Cube File",typeClass:"Data"}){}T.Cube=d;class f extends(0,g.Create)({name:"PSF File",typeClass:"Data"}){}T.Psf=f;class I extends(0,g.Create)({name:"PRMTOP File",typeClass:"Data"}){}T.Prmtop=I;class C extends(0,g.Create)({name:"TOP File",typeClass:"Data"}){}T.Top=C;class y extends(0,g.Create)({name:"PLY File",typeClass:"Data"}){}T.Ply=y;class Q extends(0,g.Create)({name:"OBJ File",typeClass:"Data"}){}T.Obj=Q;class E extends(0,g.Create)({name:"VTP File",typeClass:"Data"}){}T.Vtp=E;class b extends(0,g.Create)({name:"CCP4/MRC/MAP File",typeClass:"Data"}){}T.Ccp4=b;class x extends(0,g.Create)({name:"DSN6/BRIX File",typeClass:"Data"}){}T.Dsn6=x;class S extends(0,g.Create)({name:"DX File",typeClass:"Data"}){}T.Dx=S;class w extends(0,g.Create)({name:"MTZ File",typeClass:"Data"}){}T.Mtz=w;class R extends(0,g.Create)({name:"Format Blob",typeClass:"Data"}){}T.Blob=R})(s=g.Format||={});let c;(C=>{class m extends(0,g.Create)({name:"Coordinates",typeClass:"Object"}){}C.Coordinates=m;class p extends(0,g.Create)({name:"Topology",typeClass:"Object"}){}C.Topology=p;class d extends(0,g.Create)({name:"Model",typeClass:"Object"}){}C.Model=d;class f extends(0,g.Create)({name:"Trajectory",typeClass:"Object"}){}C.Trajectory=f;class I extends(0,g.Create)({name:"Structure",typeClass:"Object"}){}C.Structure=I,(b=>{class y extends n({name:"Structure 3D"}){}b.Representation3D=y;class Q extends(0,g.Create)({name:"Structure 3D State",typeClass:"Object"}){}b.Representation3DState=Q;class E extends(0,g.Create)({name:"Selections",typeClass:"Object"}){}b.Selections=E})(I=C.Structure||={})})(c=g.Molecule||={});let l;(f=>{class m extends(0,g.Create)({name:"Volume",typeClass:"Object"}){}f.Data=m;class p extends(0,g.Create)({name:"Lazy Volume",typeClass:"Object"}){}f.Lazy=p;class d extends n({name:"Volume 3D"}){}f.Representation3D=d})(l=g.Volume||={});let u;(d=>{class m extends(0,g.Create)({name:"Shape Provider",typeClass:"Object"}){}d.Provider=m;class p extends n({name:"Shape 3D"}){}d.Representation3D=p})(u=g.Shape||={})})(te||={});var Yt;(r=>(r.CreateBuiltIn=lt.factory("ms-plugin"),r.BuiltIn=lt.builderFactory("ms-plugin")))(Yt||={});var Got="Assigns a color based on volume value at a given vertex.",GEe={volume:h.ValueRef(e=>e.state.data.select(fr.Generators.rootsOfType(te.Volume.Data)).filter(r=>r.obj?.data).map(r=>[r.transform.ref,r.obj?.label??"<unknown>"]),(e,t)=>t(e)),coloring:h.MappedStatic("absolute-value",{"absolute-value":h.Group({domain:h.MappedStatic("auto",{custom:h.Interval([-1,1],{step:.001}),auto:h.Group({symmetric:h.Boolean(!1,{description:"If true the automatic range is determined as [-|max|, |max|]."})})}),list:h.ColorList("red-white-blue",{presetKind:"scale"})}),"relative-value":h.Group({domain:h.MappedStatic("auto",{custom:h.Interval([-1,1],{step:.001}),auto:h.Group({symmetric:h.Boolean(!1,{description:"If true the automatic range is determined as [-|max|, |max|]."})})}),list:h.ColorList("red-white-blue",{presetKind:"scale"})})}),defaultColor:h.Color(13421772),normalOffset:h.Numeric(0,{min:0,max:20,step:.1},{description:"Offset vertex position along its normal by given amount."}),usePalette:h.Boolean(!1,{description:"Use a palette to color at the pixel level."})};function NEe(e,t){let r;try{r=t.volume.getValue()}catch{}let n,o,{normalOffset:i,defaultColor:a,usePalette:A}=t;if(r){let s=t.coloring.params,{stats:c}=r.grid,l=s.domain.name==="custom"?s.domain.params:[c.min,c.max],u=t.coloring.name==="relative-value";if(s.domain.name==="auto"&&u&&(l[0]=(l[0]-c.mean)/c.sigma,l[1]=(l[1]-c.mean)/c.sigma),s.domain.name==="auto"&&s.domain.params.symmetric){let d=Math.max(Math.abs(l[0]),Math.abs(l[1]));l[0]=-d,l[1]=d}let g=oa.create({domain:l,listOrName:s.list.colors}),m=B(),p=jr.makeGetTrilinearlyInterpolated(r.grid,u?"relative":"none");n=d=>{if(!uQ(d))return a;i>0?B.scaleAndAdd(m,d.position,d.normal,i):B.copy(m,d.position);let f=p(m);return Number.isNaN(f)?a:A?$t((f-l[0])/(l[1]-l[0]),0,1)*KA.PaletteScale:g.color(f)},o=A?{colors:s.list.colors.map(d=>Array.isArray(d)?d[0]:d),filter:s.list.kind==="set"?"nearest":"linear"}:void 0}else n=()=>a;return{factory:NEe,granularity:"vertex",preferSmoothing:!0,color:n,palette:o,props:t,description:Got}}var MEe={name:"external-volume",label:"External Volume",category:Br.Misc,factory:NEe,getParams:()=>GEe,defaultValues:h.getDefaultValues(GEe),isApplicable:e=>!0};var Not="Uses separate themes for coloring mainchain and sidechain visuals.",kEe={mainchain:h.MappedStatic("molecule-type",{uniform:h.Group(ph),"chain-id":h.Group(vI),"entity-id":h.Group(wI),"entity-source":h.Group(UI),"molecule-type":h.Group(wQ),"model-index":h.Group(TI),"structure-index":h.Group(GI),"secondary-structure":h.Group(nk),"trajectory-index":h.Group(vQ)}),sidechain:h.MappedStatic("residue-name",{uniform:h.Group(ph),"residue-name":h.Group(ek),"element-symbol":h.Group(ZM),hydrophobicity:h.Group(ck),uncertainty:h.Group(Ak),occupancy:h.Group(gk),"sequence-id":h.Group(ik),"partial-charge":h.Group(dk)})};function Mot(e){return h.clone(kEe)}function kot(e,t){switch(t.name){case"uniform":return zf(e,t.params);case"chain-id":return FI(e,t.params);case"entity-id":return RI(e,t.params);case"entity-source":return LI(e,t.params);case"molecule-type":return RQ(e,t.params);case"model-index":return PI(e,t.params);case"structure-index":return NI(e,t.params);case"secondary-structure":return ok(e,t.params);case"trajectory-index":return FQ(e,t.params);default:Or(t)}}function Hot(e,t){switch(t.name){case"uniform":return zf(e,t.params);case"residue-name":return tk(e,t.params);case"element-symbol":return qM(e,t.params);case"hydrophobicity":return lk(e,t.params);case"uncertainty":return sk(e,t.params);case"occupancy":return mk(e,t.params);case"sequence-id":return ak(e,t.params);case"partial-charge":return pk(e,t.params);default:Or(t)}}function HEe(e,t){let r=kot(e,t.mainchain),n=Hot(e,t.sidechain),o=lc(r.contextHash??0,n.contextHash??0);function i(A,s){return s?r.color(A,!1):n.color(A,!1)}let a=r.legend;return r.legend?.kind==="table-legend"&&n.legend?.kind==="table-legend"&&(a={kind:"table-legend",table:[...r.legend.table,...n.legend.table]}),{factory:HEe,granularity:"group",preferSmoothing:!1,color:i,props:t,contextHash:o,description:Not,legend:a}}var VEe={name:"cartoon",label:"Cartoon",category:Br.Misc,factory:HEe,getParams:Mot,defaultValues:h.getDefaultValues(kEe),isApplicable:e=>!!e.structure};var F6=16777113,Vot="Assigns a color based on the formal charge of an atom.",YEe={domain:h.Interval([-3,3]),list:h.ColorList({kind:"set",colors:Kr["red-white-blue"].list})};function _ot(e){return YEe}function _Ee(e,t){return ge.isAtomic(e)?e.model.atomicHierarchy.atoms.pdbx_formal_charge.value(t):0}function OEe(e,t){let r=oa.create({domain:t.domain,listOrName:t.list.colors});function n(o){if(W.Location.is(o)){let i=_Ee(o.unit,o.element);return i!==void 0?r.color(i):F6}else if(Et.isLocation(o)){let i=_Ee(o.aUnit,o.aUnit.elements[o.aIndex]);return i!==void 0?r.color(i):F6}return F6}return{factory:OEe,granularity:"group",preferSmoothing:!0,color:n,props:t,description:Vot,legend:r?r.legend:void 0}}var JEe={name:"formal-charge",label:"Formal Charge",category:Br.Atom,factory:OEe,getParams:_ot,defaultValues:h.getDefaultValues(YEe),isApplicable:e=>!!e.structure&&e.structure.models.some(t=>t.atomicHierarchy.atoms.pdbx_formal_charge.isDefined)};var En=qs.Const,zr=qs.Dynamic,Yot=[En(Ve.core.type.bool,function(t,r){return!!r[0](t)}),En(Ve.core.type.num,function(t,r){return+r[0](t)}),En(Ve.core.type.str,function(t,r){return""+r[0](t)}),En(Ve.core.type.list,function(t,r){return F2.forEachEval(r,t,(n,o,i)=>i[o]=n,[])}),En(Ve.core.type.set,function(t,r){return F2.forEachEval(r,t,function(o,i,a){return a.add(o)},new Set)}),En(Ve.core.type.regex,function(t,r){return new RegExp(r[0](t),r[1]&&r[1](t)||"")}),En(Ve.core.type.bitflags,function(t,r){return+r[0](t)}),En(Ve.core.type.compositeKey,function(t,r){return F2.forEachEval(r,t,(n,o,i)=>i[o]=""+n,[]).join("-")}),En(Ve.core.logic.not,(e,t)=>!t[0](e)),En(Ve.core.logic.and,(e,t)=>{if(typeof t.length=="number"){for(let r=0,n=t.length;r<n;r++)if(!t[r](e))return!1}else for(let r of Object.keys(t))if(!t[r](e))return!1;return!0}),En(Ve.core.logic.or,(e,t)=>{if(typeof t.length=="number"){for(let r=0,n=t.length;r<n;r++)if(t[r](e))return!0}else for(let r of Object.keys(t))if(t[r](e))return!0;return!1}),En(Ve.core.rel.eq,(e,t)=>t[0](e)===t[1](e)),En(Ve.core.rel.neq,(e,t)=>t[0](e)!==t[1](e)),En(Ve.core.rel.lt,(e,t)=>t[0](e)<t[1](e)),En(Ve.core.rel.lte,(e,t)=>t[0](e)<=t[1](e)),En(Ve.core.rel.gr,(e,t)=>t[0](e)>t[1](e)),En(Ve.core.rel.gre,(e,t)=>t[0](e)>=t[1](e)),En(Ve.core.rel.inRange,(e,t)=>{let r=t[0](e);return r>=t[1](e)&&r<=t[2](e)}),En(Ve.core.math.add,(e,t)=>{let r=0;if(typeof t.length=="number")for(let n=0,o=t.length;n<o;n++)r+=t[n](e);else for(let n of Object.keys(t))r+=t[n](e);return r}),En(Ve.core.math.sub,(e,t)=>{let r=0;if(typeof t.length=="number"){if(t.length===1)return-t[0](e);r=t[0](e)||0;for(let n=1,o=t.length;n<o;n++)r-=t[n](e)}else{let n=Object.keys(t);if(n.length===1)return-t[n[0]](e);r=t[n[0]](e)||0;for(let o=1,i=n.length;o<i;o++)r-=t[n[o]](e)}return r}),En(Ve.core.math.mult,(e,t)=>{let r=1;if(typeof t.length=="number")for(let n=0,o=t.length;n<o;n++)r*=t[n](e);else for(let n of Object.keys(t))r*=t[n](e);return r}),En(Ve.core.math.div,(e,t)=>t[0](e)/t[1](e)),En(Ve.core.math.pow,(e,t)=>Math.pow(t[0](e),t[1](e))),En(Ve.core.math.mod,(e,t)=>t[0](e)%t[1](e)),En(Ve.core.math.min,(e,t)=>{let r=Number.POSITIVE_INFINITY;if(typeof t.length=="number")for(let n=0,o=t.length;n<o;n++)r=Math.min(t[n](e),r);else for(let n of Object.keys(t))r=Math.min(t[n](e),r);return r}),En(Ve.core.math.max,(e,t)=>{let r=Number.NEGATIVE_INFINITY;if(typeof t.length=="number")for(let n=0,o=t.length;n<o;n++)r=Math.max(t[n](e),r);else for(let n of Object.keys(t))r=Math.max(t[n](e),r);return r}),En(Ve.core.math.cantorPairing,(e,t)=>ko(t[0](e),t[1](e))),En(Ve.core.math.sortedCantorPairing,(e,t)=>Fu(t[0](e),t[1](e))),En(Ve.core.math.invertCantorPairing,(e,t)=>YS([0,0],t[0](e))),En(Ve.core.math.floor,(e,t)=>Math.floor(t[0](e))),En(Ve.core.math.ceil,(e,t)=>Math.ceil(t[0](e))),En(Ve.core.math.roundInt,(e,t)=>Math.round(t[0](e))),En(Ve.core.math.trunc,(e,t)=>Math.trunc(t[0](e))),En(Ve.core.math.abs,(e,t)=>Math.abs(t[0](e))),En(Ve.core.math.sign,(e,t)=>Math.sign(t[0](e))),En(Ve.core.math.sqrt,(e,t)=>Math.sqrt(t[0](e))),En(Ve.core.math.cbrt,(e,t)=>Math.cbrt(t[0](e))),En(Ve.core.math.sin,(e,t)=>Math.sin(t[0](e))),En(Ve.core.math.cos,(e,t)=>Math.cos(t[0](e))),En(Ve.core.math.tan,(e,t)=>Math.tan(t[0](e))),En(Ve.core.math.asin,(e,t)=>Math.asin(t[0](e))),En(Ve.core.math.acos,(e,t)=>Math.acos(t[0](e))),En(Ve.core.math.atan,(e,t)=>Math.atan(t[0](e))),En(Ve.core.math.sinh,(e,t)=>Math.sinh(t[0](e))),En(Ve.core.math.cosh,(e,t)=>Math.cosh(t[0](e))),En(Ve.core.math.tanh,(e,t)=>Math.tanh(t[0](e))),En(Ve.core.math.exp,(e,t)=>Math.exp(t[0](e))),En(Ve.core.math.log,(e,t)=>Math.log(t[0](e))),En(Ve.core.math.log10,(e,t)=>Math.log10(t[0](e))),En(Ve.core.math.atan2,(e,t)=>Math.atan2(t[0](e),t[1](e))),En(Ve.core.str.match,(e,t)=>t[0](e).test(t[1](e))),En(Ve.core.str.concat,(e,t)=>{let r=[];if(typeof t.length=="number")for(let n=0,o=t.length;n<o;n++)r.push(t[n](e).toString());else for(let n of Object.keys(t))r.push(t[n](e).toString());return r.join("")}),En(Ve.core.list.getAt,(e,t)=>t[0](e)[t[1](e)]),En(Ve.core.list.equal,(e,t)=>_b(t[0](e),t[1](e))),En(Ve.core.set.has,function(t,r){return r[0](t).has(r[1](t))}),En(Ve.core.set.isSubset,function(t,r){return lo.isSuperset(r[1](t),r[0](t))}),En(Ve.core.flags.hasAny,(e,t)=>{let r=t[1](e),n=t[0](e);return r?(n&r)!==0:!!n}),En(Ve.core.flags.hasAll,(e,t)=>{let r=t[1](e),n=t[0](e);return r?(n&r)===r:!n}),En(Ve.structureQuery.type.elementSymbol,(e,t)=>qd(t[0](e))),En(Ve.structureQuery.type.atomName,(e,t)=>xue(t[0](e))),En(Ve.structureQuery.type.bondFlags,(e,t)=>{let r=It.Flag.None;if(typeof t.length=="number")for(let n=0,o=t.length;n<o;n++)r=zEe(r,t[n](e));else for(let n of Object.keys(t))r=zEe(r,t[n](e));return r}),En(Ve.structureQuery.type.ringFingerprint,(e,t)=>Am.elementFingerprint(Oot(e,t))),En(Ve.structureQuery.type.secondaryStructureFlags,(e,t)=>{let r=vr.Flag.None;if(typeof t.length=="number")for(let n=0,o=t.length;n<o;n++)r=KEe(r,t[n](e));else for(let n of Object.keys(t))r=KEe(r,t[n](e));return r}),zr(Ve.structureQuery.filter.pick,(e,t)=>wo.filters.pick(t[0],t.test)(e)),zr(Ve.structureQuery.filter.first,(e,t)=>wo.filters.first(t[0])(e)),zr(Ve.structureQuery.filter.withSameAtomProperties,(e,t)=>wo.filters.withSameAtomProperties(t[0],t.source,t.property)(e)),zr(Ve.structureQuery.filter.intersectedBy,(e,t)=>wo.filters.areIntersectedBy(t[0],t.by)(e)),zr(Ve.structureQuery.filter.within,(e,t)=>wo.filters.within({query:t[0],target:t.target,minRadius:t["min-radius"]?.(e),maxRadius:t["max-radius"]?.(e),elementRadius:t["atom-radius"],invert:t.invert?.(e)})(e)),zr(Ve.structureQuery.filter.isConnectedTo,(e,t)=>wo.filters.isConnectedTo({query:t[0],target:t.target,disjunct:t.disjunct?.(e),invert:t.invert?.(e),bondTest:t["bond-test"]})(e)),zr(Ve.structureQuery.generator.atomGroups,function(t,r){return wo.generators.atoms({entityTest:r["entity-test"],chainTest:r["chain-test"],residueTest:r["residue-test"],atomTest:r["atom-test"],groupBy:r["group-by"]})(t)}),zr(Ve.structureQuery.generator.all,function(t){return wo.generators.all(t)}),zr(Ve.structureQuery.generator.empty,function(t){return wo.generators.none(t)}),zr(Ve.structureQuery.generator.bondedAtomicPairs,function(t,r){return wo.generators.bondedAtomicPairs(r&&r[0])(t)}),zr(Ve.structureQuery.generator.rings,function(t,r){return wo.generators.rings(r?.fingerprint?.(t),r?.["only-aromatic"]?.(t))(t)}),zr(Ve.structureQuery.generator.queryInSelection,function(t,r){return wo.generators.querySelection(r[0],r.query,r["in-complement"]?.(t))(t)}),zr(Ve.structureQuery.modifier.includeSurroundings,function(t,r){return wo.modifiers.includeSurroundings(r[0],{radius:r.radius(t),wholeResidues:!!(r["as-whole-residues"]&&r["as-whole-residues"](t)),elementRadius:r["atom-radius"]})(t)}),zr(Ve.structureQuery.modifier.surroundingLigands,function(t,r){return wo.modifiers.surroundingLigands({query:r[0],radius:r.radius(t),includeWater:!!(r["include-water"]&&r["include-water"](t))})(t)}),zr(Ve.structureQuery.modifier.wholeResidues,function(t,r){return wo.modifiers.wholeResidues(r[0])(t)}),zr(Ve.structureQuery.modifier.union,function(t,r){return wo.modifiers.union(r[0])(t)}),zr(Ve.structureQuery.modifier.expandProperty,function(t,r){return wo.modifiers.expandProperty(r[0],r.property)(t)}),zr(Ve.structureQuery.modifier.exceptBy,function(t,r){return wo.modifiers.exceptBy(r[0],r.by)(t)}),zr(Ve.structureQuery.modifier.includeConnected,function(t,r){return wo.modifiers.includeConnected({query:r[0],bondTest:r["bond-test"],wholeResidues:!!(r["as-whole-residues"]&&r["as-whole-residues"](t)),layerCount:r["layer-count"]&&r["layer-count"](t)||1,fixedPoint:r["fixed-point"]?.(t)??!1})(t)}),zr(Ve.structureQuery.modifier.intersectBy,function(t,r){return wo.modifiers.intersectBy(r[0],r.by)(t)}),zr(Ve.structureQuery.combinator.merge,(e,t)=>wo.combinators.merge(t)(e)),zr(Ve.structureQuery.atomProperty.core.elementSymbol,Fi(Ke.atom.type_symbol)),zr(Ve.structureQuery.atomProperty.core.vdw,(e,t)=>rm(Ke.atom.type_symbol(t&&t[0]&&t[0](e)||e.element))),zr(Ve.structureQuery.atomProperty.core.mass,(e,t)=>Uce(Ke.atom.type_symbol(t&&t[0]&&t[0](e)||e.element))),zr(Ve.structureQuery.atomProperty.core.atomicNumber,(e,t)=>Gy(Ke.atom.type_symbol(t&&t[0]&&t[0](e)||e.element))),zr(Ve.structureQuery.atomProperty.core.x,Fi(Ke.atom.x)),zr(Ve.structureQuery.atomProperty.core.y,Fi(Ke.atom.y)),zr(Ve.structureQuery.atomProperty.core.z,Fi(Ke.atom.z)),zr(Ve.structureQuery.atomProperty.core.sourceIndex,Fi(Ke.atom.sourceIndex)),zr(Ve.structureQuery.atomProperty.core.operatorName,Fi(Ke.unit.operator_name)),zr(Ve.structureQuery.atomProperty.core.instanceId,Fi(Ke.unit.instance_id)),zr(Ve.structureQuery.atomProperty.core.operatorKey,Fi(Ke.unit.operator_key)),zr(Ve.structureQuery.atomProperty.core.modelIndex,Fi(Ke.unit.model_index)),zr(Ve.structureQuery.atomProperty.core.modelLabel,Fi(Ke.unit.model_label)),zr(Ve.structureQuery.atomProperty.core.modelEntryId,Fi(Ke.unit.model_entry_id)),zr(Ve.structureQuery.atomProperty.core.atomKey,(e,t)=>{let r=t&&t[0]&&t[0](e)||e.element;return ko(r.unit.id,r.element)}),zr(Ve.structureQuery.atomProperty.macromolecular.residueKey,(e,t)=>W.residueIndex(t&&t[0]&&t[0](e)||e.element)),zr(Ve.structureQuery.atomProperty.macromolecular.chainKey,(e,t)=>W.chainIndex(t&&t[0]&&t[0](e)||e.element)),zr(Ve.structureQuery.atomProperty.macromolecular.entityKey,(e,t)=>W.entityIndex(t&&t[0]&&t[0](e)||e.element)),zr(Ve.structureQuery.atomProperty.macromolecular.id,Fi(Ke.atom.id)),zr(Ve.structureQuery.atomProperty.macromolecular.isHet,(e,t)=>Ke.residue.group_PDB(t&&t[0]&&t[0](e)||e.element)!=="ATOM"),zr(Ve.structureQuery.atomProperty.macromolecular.label_atom_id,Fi(Ke.atom.label_atom_id)),zr(Ve.structureQuery.atomProperty.macromolecular.label_alt_id,Fi(Ke.atom.label_alt_id)),zr(Ve.structureQuery.atomProperty.macromolecular.label_comp_id,Fi(Ke.atom.label_comp_id)),zr(Ve.structureQuery.atomProperty.macromolecular.label_seq_id,Fi(Ke.residue.label_seq_id)),zr(Ve.structureQuery.atomProperty.macromolecular.label_asym_id,Fi(Ke.chain.label_asym_id)),zr(Ve.structureQuery.atomProperty.macromolecular.label_entity_id,Fi(Ke.entity.id)),zr(Ve.structureQuery.atomProperty.macromolecular.auth_atom_id,Fi(Ke.atom.auth_atom_id)),zr(Ve.structureQuery.atomProperty.macromolecular.auth_comp_id,Fi(Ke.atom.auth_comp_id)),zr(Ve.structureQuery.atomProperty.macromolecular.auth_seq_id,Fi(Ke.residue.auth_seq_id)),zr(Ve.structureQuery.atomProperty.macromolecular.auth_asym_id,Fi(Ke.chain.auth_asym_id)),zr(Ve.structureQuery.atomProperty.macromolecular.pdbx_PDB_ins_code,Fi(Ke.residue.pdbx_PDB_ins_code)),zr(Ve.structureQuery.atomProperty.macromolecular.pdbx_formal_charge,Fi(Ke.atom.pdbx_formal_charge)),zr(Ve.structureQuery.atomProperty.macromolecular.occupancy,Fi(Ke.atom.occupancy)),zr(Ve.structureQuery.atomProperty.macromolecular.B_iso_or_equiv,Fi(Ke.atom.B_iso_or_equiv)),zr(Ve.structureQuery.atomProperty.macromolecular.entityType,Fi(Ke.entity.type)),zr(Ve.structureQuery.atomProperty.macromolecular.entitySubtype,Fi(Ke.entity.subtype)),zr(Ve.structureQuery.atomProperty.macromolecular.entityPrdId,Fi(Ke.entity.prd_id)),zr(Ve.structureQuery.atomProperty.macromolecular.entityDescription,Fi(Ke.entity.pdbx_description)),zr(Ve.structureQuery.atomProperty.macromolecular.objectPrimitive,Fi(Ke.unit.object_primitive)),zr(Ve.structureQuery.atomProperty.macromolecular.isNonStandard,Fi(Ke.residue.isNonStandard)),zr(Ve.structureQuery.atomProperty.macromolecular.secondaryStructureKey,Fi(Ke.residue.secondary_structure_key)),zr(Ve.structureQuery.atomProperty.macromolecular.secondaryStructureFlags,Fi(Ke.residue.secondary_structure_type)),zr(Ve.structureQuery.atomProperty.macromolecular.chemCompType,Fi(Ke.residue.chem_comp_type)),zr(Ve.structureQuery.atomProperty.macromolecular.residueSourceIndex,Fi(Ke.residue.residueSourceIndex)),zr(Ve.structureQuery.atomProperty.ihm.hasSeqId,function(t,r){let n=t.element,o=r&&r[0]&&r[0](t);return n.unit.kind===ge.Kind.Atomic?o===Ke.residue.label_seq_id(n):o>=Ke.coarse.seq_id_begin(n)&&o<=Ke.coarse.seq_id_end(n)}),zr(Ve.structureQuery.atomProperty.ihm.overlapsSeqIdRange,function(t,r){let n=t.element,o=(r&&r.beg&&r.beg(t))??-Number.MAX_VALUE,i=(r&&r.end&&r.end(t))??Number.MAX_VALUE;if(n.unit.kind===ge.Kind.Atomic){let s=Ke.residue.label_seq_id(n);return s>=o&&s<=i}let a=Ke.coarse.seq_id_begin(n),A=Ke.coarse.seq_id_end(n);return a>=o&&a<=i||A>=o&&A<=i||a<=o&&A>=i}),zr(Ve.structureQuery.atomSet.atomCount,function(t,r){return wo.atomset.atomCount(t)}),zr(Ve.structureQuery.atomSet.countQuery,function(t,r){return wo.atomset.countQuery(r[0])(t)}),zr(Ve.structureQuery.atomSet.propertySet,function(t,r){return wo.atomset.propertySet(r[0])(t)}),zr(Ve.structureQuery.bondProperty.order,(e,t)=>e.atomicBond.order),zr(Ve.structureQuery.bondProperty.flags,(e,t)=>e.atomicBond.type),zr(Ve.structureQuery.bondProperty.key,(e,t)=>e.atomicBond.key),zr(Ve.structureQuery.bondProperty.atomA,(e,t)=>e.atomicBond.a),zr(Ve.structureQuery.bondProperty.atomB,(e,t)=>e.atomicBond.b),zr(Ve.structureQuery.bondProperty.length,(e,t)=>e.atomicBond.length),zr(Ve.internal.generator.bundleElement,function(t,r){return DK(r.groupedUnits(t),r.ranges(t),r.set(t))}),zr(Ve.internal.generator.bundle,function(t,r){return vK(r.elements(t))(t)}),zr(Ve.internal.generator.current,function(t,r){return t.tryGetCurrentSelection()})];function Fi(e){return(t,r)=>e(r&&r[0]&&r[0](t)||t.element)}function zEe(e,t){return e|(It.isName(t)?It.fromName(t):It.Flag.None)}function KEe(e,t){switch(t.toLowerCase()){case"helix":return e|vr.Flag.Helix;case"alpha":return e|vr.Flag.Helix|vr.Flag.HelixAlpha;case"pi":return e|vr.Flag.Helix|vr.Flag.HelixPi;case"310":return e|vr.Flag.Helix|vr.Flag.Helix3Ten;case"beta":return e|vr.Flag.Beta;case"strand":return e|vr.Flag.Beta|vr.Flag.BetaStrand;case"sheet":return e|vr.Flag.Beta|vr.Flag.BetaSheet;case"turn":return e|vr.Flag.Turn;case"bend":return e|vr.Flag.Bend;case"coil":return e|vr.Flag.NA;default:return e}}function Oot(e,t){let r=[];if(!t)return r;if(typeof t.length=="number")for(let n=0,o=t.length;n<o;n++)r.push(t[n](e));else{let n=Object.keys(t);for(let o=1,i=n.length;o<i;o++)r.push(t[n[o]](e))}return r}(function(){for(let e of Yot)Zs.addSymbol(e)})();var X6={};ki(X6,{DeflateData:()=>Uat,Download:()=>G0,DownloadBlob:()=>V6,ImportJson:()=>Vat,ImportString:()=>Hat,LazyVolume:()=>Yat,ParseBlob:()=>Lat,ParseCcp4:()=>j6,ParseCif:()=>O6,ParseCube:()=>Tat,ParseDsn6:()=>Mat,ParseDx:()=>W6,ParseJson:()=>_at,ParseMtz:()=>kat,ParseObj:()=>Gat,ParsePly:()=>Pat,ParsePrmtop:()=>z6,ParsePsf:()=>J6,ParseTop:()=>K6,ParseVtp:()=>Nat,RawData:()=>_6,ReadFile:()=>Y6});var Ou;(A=>{function e(s){let c=new DataView(s.buffer);return Object.assign(s.subarray(0),{readInt8:l=>c.getInt8(l),readUInt8:l=>c.getUint8(l),writeInt8:(l,u)=>c.setInt8(u,l),writeUInt8:(l,u)=>c.setUint8(u,l),readInt16LE:l=>c.getInt16(l,!0),readInt32LE:l=>c.getInt32(l,!0),readUInt16LE:l=>c.getUint16(l,!0),readUInt32LE:l=>c.getUint32(l,!0),readFloatLE:l=>c.getFloat32(l,!0),readDoubleLE:l=>c.getFloat64(l,!0),writeInt16LE:(l,u)=>c.setInt16(u,l,!0),writeInt32LE:(l,u)=>c.setInt32(u,l,!0),writeUInt16LE:(l,u)=>c.setUint16(u,l,!0),writeUInt32LE:(l,u)=>c.setUint32(u,l,!0),writeFloatLE:(l,u)=>c.setFloat32(u,l,!0),writeDoubleLE:(l,u)=>c.setFloat64(u,l,!0),readInt16BE:l=>c.getInt16(l,!1),readInt32BE:l=>c.getInt32(l,!1),readUInt16BE:l=>c.getUint16(l,!1),readUInt32BE:l=>c.getUint32(l,!1),readFloatBE:l=>c.getFloat32(l,!1),readDoubleBE:l=>c.getFloat64(l,!1),writeInt16BE:(l,u)=>c.setInt16(u,l,!1),writeInt32BE:(l,u)=>c.setInt32(u,l,!1),writeUInt16BE:(l,u)=>c.setUint16(u,l,!1),writeUInt32BE:(l,u)=>c.setUint32(u,l,!1),writeFloatBE:(l,u)=>c.setFloat32(u,l,!1),writeDoubleBE:(l,u)=>c.setFloat64(u,l,!1),copy:(l,u,g,m)=>(u=AA(u,0),g=AA(g,0),m=AA(m,s.length),l.set(s.subarray(g,m),u),m-g)})}A.fromUint8Array=e;function t(s){return e(new Uint8Array(s))}A.fromArrayBuffer=t;function r(s){return s}A.fromBuffer=r,A.IsNativeEndianLittle=new Uint16Array(new Uint8Array([18,52]).buffer)[0]===13330;function o(s,c,l,u,g){for(let m=0,p=l;m<p;m+=u)for(let d=0;d<u;d++)c[g+m+u-d-1]=s[g+m+d]}A.flipByteOrder=o;function i(s,c=0,l){let u=new Int16Array(s,c,l);for(let g=0,m=u.length;g<m;++g){let p=u[g];u[g]=(p&255)<<8|p>>8&255}}A.flipByteOrderInPlace2=i;function a(s,c,l,u,g){A.IsNativeEndianLittle||!l||u<=1||o(s,c,l,u,g)}A.ensureLittleEndian=a})(Ou||={});var DR;(t=>{function e(r,n){return{name:n,readBuffer:(o,i,a,A)=>{let s,c;if(typeof i=="number"){a=AA(a,i);let l=o,u=Math.min(r.length,l+a);s=u-l,c=Ou.fromUint8Array(new Uint8Array(r.buffer,l,u-l))}else{a=AA(a,i.length);let l=o,u=Math.min(r.length,l+a);i.set(r.subarray(l,u),A),s=u-l,c=i}return a!==s&&console.warn(`byteCount ${a} and bytesRead ${s} differ`),Promise.resolve({bytesRead:s,buffer:c})},writeBuffer:(o,i,a)=>(a=AA(a,i.length),console.error(".writeBuffer not implemented for FileHandle.fromBuffer"),Promise.resolve(0)),writeBufferSync:(o,i,a)=>(a=AA(a,i.length),console.error(".writeSync not implemented for FileHandle.fromBuffer"),0),close:Hc}}t.fromBuffer=e})(DR||={});var wl;(o=>(o.Float32="float32",o.Int8="int8",o.Int16="int16",o.Uint16="uint16"))(wl||={});function w6(e){return e===wl.Float32?4:e===wl.Int16||e===wl.Uint16?2:1}function Jot(e,t,r=0,n){return e===wl.Float32?new Float32Array(t,r,n):e===wl.Int16?new Int16Array(t,r,n):e===wl.Uint16?new Uint16Array(t,r,n):new Int8Array(t,r,n)}function jEe(e,t){let r=w6(t),n=new ArrayBuffer(r*e),o=Ou.fromArrayBuffer(n),i=Ou.IsNativeEndianLittle?n:new ArrayBuffer(r*e);return{type:t,elementByteSize:r,readBuffer:o,valuesBuffer:new Uint8Array(i),values:Jot(t,i)}}async function WEe(e,t,r,n,o,i){return await t.readBuffer(r,e.readBuffer,n,o),e.elementByteSize>1&&(i!==void 0&&i!==Ou.IsNativeEndianLittle||!Ou.IsNativeEndianLittle)&&Ou.flipByteOrder(e.readBuffer,e.valuesBuffer,n,e.elementByteSize,o),e.values}async function zot(e){let{buffer:r}=await e.readBuffer(0,1024),n=String.fromCharCode(r.readUInt8(208),r.readUInt8(209),r.readUInt8(210),r.readUInt8(211)||32);if(n!=="MAP ")throw new Error('ccp4 format error, missing "MAP " string');let o=[r.readUInt8(212),r.readUInt8(213)],i=!1;o[0]===68&&o[1]===65?i=!0:o[0]===17&&o[1]===17?i=!1:r.readInt32LE(12)<=16&&(i=!0);let a=i?c=>r.readInt32LE(c*4):c=>r.readInt32BE(c*4),A=i?c=>r.readFloatLE(c*4):c=>r.readFloatBE(c*4);return{header:{NC:a(0),NR:a(1),NS:a(2),MODE:a(3),NCSTART:a(4),NRSTART:a(5),NSSTART:a(6),NX:a(7),NY:a(8),NZ:a(9),xLength:A(10),yLength:A(11),zLength:A(12),alpha:A(13),beta:A(14),gamma:A(15),MAPC:a(16),MAPR:a(17),MAPS:a(18),AMIN:A(19),AMAX:A(20),AMEAN:A(21),ISPG:a(22),NSYMBT:a(23),LSKFLG:a(24),SKWMAT:[],SKWTRN:[],userFlag1:a(39),userFlag2:a(40),originX:A(49),originY:A(50),originZ:A(51),MAP:n,MACHST:o,ARMS:A(54)},littleEndian:i}}async function Kot(e,t,r,n,o,i){if(ZEe(e)){let a=3*o;await r.readBuffer(n,t.readBuffer,o,a);let A=new Int8Array(t.valuesBuffer.buffer,a),s=(e.AMAX-e.AMIN)/255,c=.5*(e.AMIN+e.AMAX+s);for(let l=0,u=o;l<u;++l)t.values[l]=s*A[l]+c}else await WEe(t,r,n,o,0,i)}function XEe(e){switch(e){case 0:return wl.Int8;case 1:return wl.Int16;case 2:return wl.Float32;case 3:throw new Error("mode 3 unsupported, complex 16-bit integers");case 4:throw new Error("mode 4 unsupported, complex 32-bit reals");case 6:wl.Uint16;case 16:throw new Error("mode 16 unsupported, unsigned char * 3 (for rgb data, non-standard)")}throw new Error(`unknown mode '${e}'`)}function ZEe(e){return e.userFlag1===-128&&e.userFlag2===127}function R6(e){return ZEe(e)?wl.Float32:XEe(e.MODE)}function jot(e){return 256*4+e.NSYMBT}async function Wot(e,t,r){await r.update({message:"Parsing CCP4/MRC/MAP file..."});let{header:n,littleEndian:o}=await zot(e),i=jot(n),a=XEe(n.MODE),A=R6(n),s=n.NC*n.NR*n.NS,c=w6(a),l=s*c,u=jEe(s,A);return Kot(n,u,e,i,l,o),{header:n,values:u.values,name:e.name}}function Xot(e,t){return ve.create("Parse CCP4/MRC/MAP",async r=>{try{return An.success(await Wot(e,t,r))}catch(n){return An.error(n)}})}function qEe(e,t){return Xot(DR.fromBuffer(Ou.fromUint8Array(e),t),e.length)}var U6=512;function qot(e){return{xStart:parseInt(e.substr(10,5)),yStart:parseInt(e.substr(15,5)),zStart:parseInt(e.substr(20,5)),xExtent:parseInt(e.substr(32,5)),yExtent:parseInt(e.substr(38,5)),zExtent:parseInt(e.substr(42,5)),xRate:parseInt(e.substr(52,5)),yRate:parseInt(e.substr(58,5)),zRate:parseInt(e.substr(62,5)),xlen:parseFloat(e.substr(73,10)),ylen:parseFloat(e.substr(83,10)),zlen:parseFloat(e.substr(93,10)),alpha:parseFloat(e.substr(103,10)),beta:parseFloat(e.substr(113,10)),gamma:parseFloat(e.substr(123,10)),divisor:parseFloat(e.substr(138,12)),summand:parseInt(e.substr(155,8)),sigma:parseFloat(e.substr(170,12))}}function $ot(e,t){let r=t?o=>e.readInt16LE(o*2):o=>e.readInt16BE(o*2),n=1/r(17);return{xStart:r(0),yStart:r(1),zStart:r(2),xExtent:r(3),yExtent:r(4),zExtent:r(5),xRate:r(6),yRate:r(7),zRate:r(8),xlen:r(9)*n,ylen:r(10)*n,zlen:r(11)*n,alpha:r(12)*n,beta:r(13)*n,gamma:r(14)*n,divisor:r(15)/100,summand:r(16),sigma:void 0}}function $Ee(e){let{xExtent:t,yExtent:r,zExtent:n}=e,o=Math.ceil(t/8),i=Math.ceil(r/8),a=Math.ceil(n/8);return{xBlocks:o,yBlocks:i,zBlocks:a}}async function eit(e){let{buffer:t}=await e.readBuffer(0,U6),r=LG(t),n=r.startsWith(":-)"),o=n||t.readInt16LE(36)===100;return{header:n?qot(r):$ot(t,o),littleEndian:o}}async function tit(e,t,r,n){n||Ou.flipByteOrderInPlace2(t.buffer);let{divisor:o,summand:i,xExtent:a,yExtent:A,zExtent:s}=e,{xBlocks:c,yBlocks:l,zBlocks:u}=$Ee(e),g=0;for(let m=0;m<u;++m)for(let p=0;p<l;++p)for(let d=0;d<c;++d)for(let f=0;f<8;++f){let I=8*m+f;for(let C=0;C<8;++C){let y=8*p+C;for(let Q=0;Q<8;++Q){let E=8*d+Q;if(E<a&&y<A&&I<s){let b=(E*A+y)*s+I;r[b]=(t[g]-i)/o,++g}else{g+=8-Q;break}}}}}function rit(e){let{xExtent:t,yExtent:r,zExtent:n}=e,{xBlocks:o,yBlocks:i,zBlocks:a}=$Ee(e),A=t*r*n,s=o*8*i*8*a*8,l=s*1;return{count:s,byteCount:l,valueCount:A}}async function nit(e,t,r){await r.update({message:"Parsing DSN6/BRIX file..."});let{header:n,littleEndian:o}=await eit(e),{buffer:i}=await e.readBuffer(U6,t-U6),{valueCount:a}=rit(n),A=new Float32Array(a);return await tit(n,i,A,o),{header:n,values:A,name:e.name}}function oit(e,t){return ve.create("Parse DSN6/BRIX",async r=>{try{return An.success(await nit(e,t,r))}catch(n){return An.error(n)}})}function ebe(e,t){return oit(DR.fromBuffer(Ou.fromUint8Array(e),t),e.length)}var vR={char:1,uchar:1,short:2,ushort:2,int:4,uint:4,float:4,double:8,int8:1,uint8:1,int16:2,uint16:2,int32:4,uint32:4,float32:4,float64:8},ait=new Set(Object.keys(vR));function yk(e){if(!ait.has(e))throw new Error(`unknown ply type '${e}'`);return e}function tbe(e,t,r){let n=new Map;for(let o=0,i=t.length;o<i;++o)n.set(t[o],e[o]);return{comments:r,elementNames:t,getElement:o=>n.get(o)}}function Ait(e,t,r){let n=Pt(e);return{data:e,tokenizer:n,runtimeCtx:t,format:r??"ascii",formatPreset:r!==void 0,littleEndian:r!=="binary_big_endian",binaryData:void 0,binaryOffset:0,comments:[],elementSpecs:[],elements:[]}}function sit(e){let t=e.data.indexOf("end_header",e.position);if(t===-1)throw new Error("no 'end_header' record found");e.tokenStart=e.position,e.tokenEnd=t,e.position=t,Pt.eatLine(e)}function cit(e){let{tokenizer:t,comments:r,elementSpecs:n}=e;sit(t);let o=Pt.getTokenString(t).split(/\r?\n/);if(o[0]!=="ply")throw new Error("data not starting with 'ply'");if(!e.formatPreset){let c=o[1];if(c==="format ascii 1.0")e.format="ascii",e.littleEndian=!0;else if(c==="format binary_little_endian 1.0")e.format="binary_little_endian",e.littleEndian=!0;else if(c==="format binary_big_endian 1.0")e.format="binary_big_endian",e.littleEndian=!1;else throw new Error(`unsupported PLY format '${c}'`)}let i,a,A;function s(){if(i!==void 0&&a!==void 0&&A!==void 0){let c=!1;for(let l=0,u=A.length;l<u;++l)if(A[l].kind==="list"){c=!0;break}c&&A.length,c?n.push({kind:"list",name:i,count:a,property:A[0]}):n.push({kind:"table",name:i,count:a,properties:A})}}for(let c=2,l=o.length;c<l;++c){let u=o[c],g=u.split(" ");if(u.startsWith("comment"))r.push(u.substr(8));else if(u.startsWith("element"))s(),A=[],i=g[1],a=parseInt(g[2]);else if(u.startsWith("property")){if(A===void 0)throw new Error("properties outside of element");g[1]==="list"?A.push({kind:"list",countType:yk(g[2]),dataType:yk(g[3]),name:g[4]}):A.push({kind:"column",type:yk(g[1]),name:g[2]})}else u.startsWith("end_header")?s():console.warn("unknown header line")}}function lit(e){let{elementSpecs:t}=e;if(e.format==="ascii")for(let r=0,n=t.length;r<n;++r){let o=t[r];o.kind==="table"?dit(e,o):o.kind==="list"&&pit(e,o)}else for(let r=0,n=t.length;r<n;++r){let o=t[r];o.kind==="table"?git(e,o):o.kind==="list"&&mit(e,o)}}function T6(e){switch(e){case"char":case"uchar":case"int8":case"uint8":case"short":case"ushort":case"int16":case"uint16":case"int":case"uint":case"int32":case"uint32":return K.Schema.int;case"float":case"double":case"float32":case"float64":return K.Schema.float}}function L6(e,t,r,n){switch(r){case"char":case"int8":return e.getInt8(t);case"uchar":case"uint8":return e.getUint8(t);case"short":case"int16":return e.getInt16(t,n);case"ushort":case"uint16":return e.getUint16(t,n);case"int":case"int32":return e.getInt32(t,n);case"uint":case"uint32":return e.getUint32(t,n);case"float":case"float32":return e.getFloat32(t,n);case"double":case"float64":return e.getFloat64(t,n)}}function uit(e,t){switch(e){case"char":case"int8":return new Int8Array(t);case"uchar":case"uint8":return new Uint8Array(t);case"short":case"int16":return new Int16Array(t);case"ushort":case"uint16":return new Uint16Array(t);case"int":case"int32":return new Int32Array(t);case"uint":case"uint32":return new Uint32Array(t);case"float":case"float32":return new Float32Array(t);case"double":case"float64":return new Float64Array(t)}}function git(e,t){let{elements:r,binaryData:n,littleEndian:o}=e,{count:i,properties:a}=t,A=a.length,s=[],c=[],l=new Map,u=[];for(let m=0;m<A;m++)u.push(uit(a[m].type,i));let g=new DataView(n.buffer,n.byteOffset);for(let m=0;m<i;m++)for(let p=0;p<A;p++){let{type:d}=a[p];u[p][m]=L6(g,e.binaryOffset,d,o),e.binaryOffset+=vR[d]}for(let m=0;m<A;m++){let{type:p,name:d}=a[m],f=T6(p),I=K.ofArray({array:u[m],schema:f});s.push(d),c.push(p),l.set(d,I)}r.push({kind:"table",rowCount:i,propertyNames:s,propertyTypes:c,getProperty:m=>l.get(m)})}function mit(e,t){let{elements:r,binaryData:n,littleEndian:o}=e,{count:i,property:a}=t,{countType:A,dataType:s}=a,c=new DataView(n.buffer,n.byteOffset),l=[],u=new Uint32Array(i+1);for(let m=0;m<i;m++){let p=L6(c,e.binaryOffset,A,o);e.binaryOffset+=vR[A],u[m+1]=u[m]+p;for(let d=0;d<p;d++)l.push(L6(c,e.binaryOffset,s,o)),e.binaryOffset+=vR[s]}let g={entries:[],count:0};r.push({kind:"list",rowCount:i,name:a.name,type:a.dataType,value:m=>{let p=u[m],d=u[m+1];g.count=d-p;for(let f=p;f<d;f++)g.entries[f-p]=l[f];return g}})}function dit(e,t){let{elements:r,tokenizer:n}=e,{count:o,properties:i}=t,a=i.length,A=[],s=[],c=[],l=new Map;for(let u=0,g=a;u<g;++u){let m=ct.create(n.data,o*2);c.push(m)}for(let u=0,g=o;u<g;++u)for(let m=0,p=a;m<p;++m)Pt.skipWhitespace(n),Pt.markStart(n),Pt.eatValue(n),ct.addUnchecked(c[m],n.tokenStart,n.tokenEnd);for(let u=0,g=a;u<g;++u){let{type:m,name:p}=i[u],d=bG(c[u],T6(m));A.push(p),s.push(m),l.set(p,d)}r.push({kind:"table",rowCount:o,propertyNames:A,propertyTypes:s,getProperty:u=>l.get(u)})}function pit(e,t){let{elements:r,tokenizer:n}=e,{count:o,property:i}=t,a=ct.create(n.data,o*2*3),A=new Uint32Array(o+1),s=0;for(let u=0,g=o;u<g;++u){for(Pt.skipWhitespace(n),Pt.markStart(n);Pt.skipWhitespace(n)!==10;)++s,Pt.markStart(n),Pt.eatValue(n),ct.addToken(a,n);A[u+1]=s}let c={entries:[],count:0},l=bG(a,T6(i.dataType));r.push({kind:"list",rowCount:o,name:i.name,type:i.dataType,value:u=>{let g=A[u]+1,m=l.value(g-1);for(let p=g,d=g+m;p<d;++p)c.entries[p-g]=l.value(p);return c.count=m,c}})}async function fit(e,t){let r,n,o=0,i;if(e instanceof Uint8Array){o=Iit(e);let g=rp(e,0,o),m=Bit(g);i=m,m!=="ascii"?(r=g,n=e):r=rD(e,0,e.length)}else r=e;let a=Ait(r,t,i);n!==void 0&&(a.binaryData=n,a.binaryOffset=o),t.update({message:"Parsing...",current:0,max:e.length}),cit(a),lit(a);let{elements:A,elementSpecs:s,comments:c}=a,l=s.map(g=>g.name),u=tbe(A,l,c);return An.success(u)}function Bit(e){let t=e.indexOf(`
|
|
`),r=t===-1?"":e.substring(t+1,e.indexOf(`
|
|
`,t+1)).replace(/\r$/,"");return r==="format binary_little_endian 1.0"?"binary_little_endian":r==="format binary_big_endian 1.0"?"binary_big_endian":"ascii"}function Iit(e){let t=[101,110,100,95,104,101,97,100,101,114],r=t.length;for(let n=0;n<=e.length-r;n++){if(n!==0&&e[n-1]!==10)continue;let o=!0;for(let a=0;a<r;a++)if(e[n+a]!==t[a]){o=!1;break}if(!o)continue;let i=n+r;return i<e.length&&e[i]===13&&i++,i<e.length&&e[i]===10&&i++,i}throw new Error("no 'end_header' record found")}function rbe(e){return ve.create("Parse PLY",async t=>await fit(e,t))}var FR=256;function hit(e){return{tokenizer:Pt(e),positions:qe.create(Float32Array,3,1024),normals:qe.create(Float32Array,3,1024),vertexColors:qe.create(Float32Array,3,1024),positionIndices:qe.create(Int32Array,3,1024),normalIndices:qe.create(Int32Array,3,1024),faceGroups:qe.create(Int32Array,1,1024),facePos:new Int32Array(FR),faceNorm:new Int32Array(FR),materialNames:[],materialMap:new Map,currentMaterialIdx:0,hasVertexColors:!1,warnings:[]}}var yit=118,Qit=110,Eit=102,bit=117,xit=115,Sit=101,Dit=109,vit=116,Fit=108,P6=35,rv=10,Qk=13,ev=32,tv=9,nbe=47;function bh(e){let{data:t}=e;for(;e.position<e.length;){let r=t.charCodeAt(e.position);if(r===rv){++e.position,++e.lineNumber;return}if(r===Qk){++e.position,++e.lineNumber,e.position<e.length&&t.charCodeAt(e.position)===rv&&++e.position;return}++e.position}}function obe(e){let{data:t}=e;for(;e.position<e.length;){let r=t.charCodeAt(e.position);if(r!==ev&&r!==tv)return;++e.position}}function Qp(e){obe(e);let{data:t}=e;if(e.position>=e.length)return!1;let r=t.charCodeAt(e.position);if(r===rv||r===Qk||r===P6)return!1;for(e.tokenStart=e.position;e.position<e.length;){let n=t.charCodeAt(e.position);if(n===ev||n===tv||n===rv||n===Qk||n===P6)break;++e.position}return e.tokenEnd=e.position,e.tokenEnd>e.tokenStart}function wit(e,t,r,n,o,i){let{data:a}=e,A=0;for(;A<n&&Qp(e);){let s=e.tokenStart,c=e.tokenEnd,l=-1;for(let m=s;m<c;++m)if(a.charCodeAt(m)===nbe){l=m;break}let u,g=-1;if(l===-1){let m=cl(a,s,c);u=m<0?o+m:m-1}else{let m=cl(a,s,l);u=m<0?o+m:m-1;let p=-1;for(let d=l+1;d<c;++d)if(a.charCodeAt(d)===nbe){p=d;break}if(p!==-1&&p+1<c){let d=cl(a,p+1,c);g=d<0?i+d:d-1}}t[A]=u,r[A]=g,++A}return A}function Rit(e){let{tokenizer:t}=e;if(Qp(t)){let r=t.data.substring(t.tokenStart,t.tokenEnd);if(!e.materialMap.has(r)){let n=e.materialNames.length;e.materialMap.set(r,n),e.materialNames.push(r)}e.currentMaterialIdx=e.materialMap.get(r)}bh(t)}function Uit(e){let{tokenizer:t}=e,r=0,n=0,o=0;Qp(t)&&(r=Xa(t.data,t.tokenStart,t.tokenEnd)),Qp(t)&&(n=Xa(t.data,t.tokenStart,t.tokenEnd)),Qp(t)&&(o=Xa(t.data,t.tokenStart,t.tokenEnd)),qe.add3(e.positions,r,n,o);let i=1,a=1,A=1;if(Qp(t)){let s=Xa(t.data,t.tokenStart,t.tokenEnd);if(Qp(t)){let c=Xa(t.data,t.tokenStart,t.tokenEnd);Qp(t)&&(i=s,a=c,A=Xa(t.data,t.tokenStart,t.tokenEnd),e.hasVertexColors=!0)}}qe.add3(e.vertexColors,i,a,A),bh(t)}function Lit(e){let{tokenizer:t}=e,r=0,n=0,o=0;Qp(t)&&(r=Xa(t.data,t.tokenStart,t.tokenEnd)),Qp(t)&&(n=Xa(t.data,t.tokenStart,t.tokenEnd)),Qp(t)&&(o=Xa(t.data,t.tokenStart,t.tokenEnd)),qe.add3(e.normals,r,n,o),bh(t)}function Tit(e){let{tokenizer:t}=e,r=e.positions.elementCount,n=e.normals.elementCount,o=wit(t,e.facePos,e.faceNorm,FR,r,n);if(o<3){e.warnings.push(`Line ${t.lineNumber}: degenerate face with ${o} vertices, skipped`),bh(t);return}o===FR&&Qp(t)&&e.warnings.push(`Line ${t.lineNumber}: face with more than ${FR} vertices truncated`);let i=e.facePos[0],a=e.faceNorm[0],A=e.currentMaterialIdx;for(let s=1;s<o-1;++s)qe.add3(e.positionIndices,i,e.facePos[s],e.facePos[s+1]),qe.add3(e.normalIndices,a,e.faceNorm[s],e.faceNorm[s+1]),qe.add(e.faceGroups,A);bh(t)}async function Pit(e,t){let r=hit(e),{tokenizer:n}=r,o=1e5;for(;n.position<n.length;){let g=n.data.charCodeAt(n.position);if(g===rv){++n.position,++n.lineNumber;continue}if(g===Qk){++n.position,++n.lineNumber,n.position<n.length&&n.data.charCodeAt(n.position)===rv&&++n.position;continue}if(g===ev||g===tv){obe(n);continue}if(g===P6){bh(n);continue}let m=n.position+1<n.length?n.data.charCodeAt(n.position+1):-1;if(g===Eit&&(m===ev||m===tv))n.position+=2,Tit(r);else if(g===bit){let p=n.position;p+6<n.length&&n.data.charCodeAt(p+1)===xit&&n.data.charCodeAt(p+2)===Sit&&n.data.charCodeAt(p+3)===Dit&&n.data.charCodeAt(p+4)===vit&&n.data.charCodeAt(p+5)===Fit&&(n.data.charCodeAt(p+6)===ev||n.data.charCodeAt(p+6)===tv)?(n.position+=7,Rit(r)):bh(n)}else g===yit?m===ev||m===tv?(n.position+=2,Uit(r)):m===Qit?(n.position+=2,Lit(r)):bh(n):bh(n);t.shouldUpdate&&n.lineNumber%o===0&&await t.update({message:"Parsing OBJ",current:n.position,max:n.length})}let i=qe.compact(r.positions),a=qe.compact(r.normals),A=qe.compact(r.positionIndices),s=qe.compact(r.normalIndices),c=qe.compact(r.faceGroups),l=r.hasVertexColors?qe.compact(r.vertexColors):new Float32Array(0),u={positions:i,normals:a,positionIndices:A,normalIndices:s,positionCount:r.positions.elementCount,normalCount:r.normals.elementCount,triangleCount:A.length/3,vertexColors:l,materialNames:r.materialNames,faceGroups:c};return An.success(u,r.warnings)}function ibe(e){return ve.create("Parse OBJ",async t=>await Pit(e,t))}var Nit=new Set(["Float32","Float64","Int8","UInt8","Int16","UInt16","Int32","UInt32","Int64","UInt64"]);function abe(e){return e!==void 0&&Nit.has(e)?e:"Float32"}var xh=new Int8Array(256).fill(-1);"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".split("").forEach((e,t)=>xh[e.charCodeAt(0)]=t);function nv(e,t,r){if(r===0)return new Uint8Array(0);let n=new Uint8Array(r),o=t,i=0;for(;i<r;){let a=xh[e[o++]],A=xh[e[o++]],s=xh[e[o++]],c=xh[e[o++]];if(a<0||A<0)break;i<r&&(n[i++]=a<<2|A>>4),s>=0&&i<r&&(n[i++]=(A&15)<<4|s>>2),c>=0&&i<r&&(n[i++]=(s&3)<<6|c)}return n}function ov(e,t,r){if(r===0)return new Uint8Array(0);let n=new Uint8Array(r),o=t,i=0;for(;i<r;){let a=xh[e.charCodeAt(o++)],A=xh[e.charCodeAt(o++)],s=xh[e.charCodeAt(o++)],c=xh[e.charCodeAt(o++)];if(a<0||A<0)break;i<r&&(n[i++]=a<<2|A>>4),s>=0&&i<r&&(n[i++]=(A&15)<<4|s>>2),c>=0&&i<r&&(n[i++]=(s&3)<<6|c)}return n}function Abe(e,t){return{name:e.name,type:e.type,numberOfComponents:e.numberOfComponents,rangeMin:e.rangeMin,rangeMax:e.rangeMax,values:K.ofFloatArray(t)}}function lbe(e,t){if(e.byteOffset%4===0)return new Float32Array(e.buffer,e.byteOffset,t);let r=e.slice(0,t*4);return new Float32Array(r.buffer,0,t)}function Mit(e,t){let r=new DataView(e.buffer,e.byteOffset,e.byteLength),n=new Int32Array(t);for(let o=0;o<t;o++)n[o]=r.getUint32(o*8,!0);return n}function G6(e,t,r){let n=new DataView(e.buffer,e.byteOffset,e.byteLength);switch(t){case"Float32":return lbe(e,r);case"Float64":{let o=new Float64Array(r);for(let i=0;i<r;i++)o[i]=n.getFloat64(i*8,!0);return o}case"Int8":{let o=new Int8Array(r);for(let i=0;i<r;i++)o[i]=n.getInt8(i);return o}case"UInt8":{let o=new Uint8Array(r);for(let i=0;i<r;i++)o[i]=n.getUint8(i);return o}case"Int16":{let o=new Int16Array(r);for(let i=0;i<r;i++)o[i]=n.getInt16(i*2,!0);return o}case"UInt16":{let o=new Uint16Array(r);for(let i=0;i<r;i++)o[i]=n.getUint16(i*2,!0);return o}case"Int32":{let o=new Int32Array(r);for(let i=0;i<r;i++)o[i]=n.getInt32(i*4,!0);return o}case"UInt32":{let o=new Uint32Array(r);for(let i=0;i<r;i++)o[i]=n.getUint32(i*4,!0);return o}case"Int64":case"UInt64":{let o=new Float64Array(r);for(let i=0;i<r;i++){let a=n.getUint32(i*8,!0),A=n.getInt32(i*8+4,!0);o[i]=A*4294967296+a}return o}default:return Or(t)}}function kit(e,t,r){return t==="Float32"?lbe(e,r):new Float32Array(G6(e,t,r))}function sbe(e,t){if(t==="Int64"||t==="UInt64")return Mit(e,e.byteLength/8);if(t==="Int32"||t==="UInt32"){if(e.byteOffset%4===0)return new Int32Array(e.buffer,e.byteOffset,e.byteLength/4);let r=e.slice();return new Int32Array(r.buffer,0,r.byteLength/4)}throw new Error(`Unsupported connectivity type: "${t}". Expected Int32, UInt32, Int64, or UInt64.`)}function ube(e,t,r=0){let n=t.split("").map(i=>i.charCodeAt(0)),o=n.length;for(let i=r,a=e.length-o;i<=a;i++){let A=!0;for(let s=0;s<o;s++)if(e[i+s]!==n[s]){A=!1;break}if(A)return i}return-1}function Hit(e){let t=ube(e,"<AppendedData");if(t===-1)throw new Error("AppendedData section not found");let r=t;for(;r<e.length&&e[r]!==62;)r++;let n=new TextDecoder("ascii").decode(e.subarray(t,r+1)),{attrs:o}=xk(n,13),i=(o.get("encoding")??"raw").toLowerCase();for(r++;r<e.length&&(e[r]===32||e[r]===9||e[r]===10||e[r]===13);)r++;if(r>=e.length||e[r]!==95)throw new Error(`Expected '_' before appended data, got 0x${e[r]?.toString(16)??"EOF"}`);let a=r+1;return{encoding:i,rawByteStart:a,rawData:e}}function Sh(e){return e===32||e===9||e===10||e===13}function bk(e,t,r){let n="<"+t,o=n.length;e:for(let i=r,a=e.length-o;i<=a;i++){if(e.charCodeAt(i)!==60)continue;for(let s=1;s<o;s++)if(e.charCodeAt(i+s)!==n.charCodeAt(s))continue e;let A=e.charCodeAt(i+o);if(Sh(A)||A===62||A===47)return i}return-1}function xk(e,t){let r=new Map,n=e.length;for(;t<n;){for(;t<n&&Sh(e.charCodeAt(t));)t++;let o=e.charCodeAt(t);if(o===62||o===47)break;let i=t;for(;t<n&&e.charCodeAt(t)!==61&&!Sh(e.charCodeAt(t))&&e.charCodeAt(t)!==62&&e.charCodeAt(t)!==47;)t++;let a=e.slice(i,t);for(;t<n&&Sh(e.charCodeAt(t));)t++;for(t<n&&e.charCodeAt(t)===61&&t++;t<n&&Sh(e.charCodeAt(t));)t++;if(t<n&&(e.charCodeAt(t)===34||e.charCodeAt(t)===39)){let A=e.charCodeAt(t++),s=t;for(;t<n&&e.charCodeAt(t)!==A;)t++;a&&r.set(a,e.slice(s,t)),t<n&&t++}}return{attrs:r,tagEnd:t}}function Ek(e,t){let r=bk(e,t,0);if(r===-1)return[];let n=r+1+t.length;for(;n<e.length&&e.charCodeAt(n)!==62;)n++;n++;let o=e.indexOf("</"+t+">",n);if(o===-1)return[];let i=[];for(;n<o;){let a=bk(e,"DataArray",n);if(a===-1||a>=o)break;let{attrs:A,tagEnd:s}=xk(e,a+10),c="",l;if(e.charCodeAt(s)===47)l=s+2;else{l=s+1;let I=e.indexOf("</DataArray>",l);I!==-1?(c=e.slice(l,I),l=I+12):l=o}n=l;let u=A.get("format")??"binary",g=A.get("offset"),m=u==="binary"?c.replace(/\s/g,""):"",p=u==="ascii"?c:void 0;if(u==="appended"&&g===void 0||u==="binary"&&m.length===0)continue;let d=A.get("RangeMin"),f=A.get("RangeMax");i.push({name:A.get("Name")??"",type:abe(A.get("type")),numberOfComponents:parseInt(A.get("NumberOfComponents")??"1",10),format:u,offset:g!==void 0?parseInt(g,10):-1,rangeMin:d!==void 0?parseFloat(d):void 0,rangeMax:f!==void 0?parseFloat(f):void 0,...m.length>0?{inlineBase64:m}:{},...p!==void 0?{asciiText:p}:{}})}return i}function Vit(e){let t=bk(e,"VTKFile",0);if(t===-1)throw new Error("Cannot find VTKFile element in VTP header");let{attrs:r}=xk(e,t+8),n=bk(e,"Piece",0);if(n===-1)throw new Error("Cannot find Piece element in VTP header");let{attrs:o}=xk(e,n+6),i=o.get("NumberOfPoints"),a=o.get("NumberOfPolys");if(!i||!a)throw new Error("Cannot parse NumberOfPoints/NumberOfPolys from VTP Piece element");return{nPoints:parseInt(i,10),nCells:parseInt(a,10),nVerts:parseInt(o.get("NumberOfVerts")??"0",10),nLines:parseInt(o.get("NumberOfLines")??"0",10),nStrips:parseInt(o.get("NumberOfStrips")??"0",10),byteOrder:r.get("byte_order")??"LittleEndian",compressor:r.get("compressor")??"",headerType:r.get("header_type")==="UInt64"?"UInt64":"UInt32",pointDataArrays:Ek(e,"PointData"),cellDataArrays:Ek(e,"CellData"),pointsArrays:Ek(e,"Points"),polysArrays:Ek(e,"Polys")}}async function _it(e,t,r,n,o="UInt32",i=!0){let a=o==="UInt64"?8:4,A=r+n;if(!i){let x=nv(t,A,a),S=new DataView(x.buffer,x.byteOffset,a).getUint32(0,!0);return nv(t,A+Math.ceil(a/3)*4,S)}let s=nv(t,A,3*a),c=new DataView(s.buffer,s.byteOffset,3*a),l=c.getUint32(0,!0),u=c.getUint32(a,!0),g=c.getUint32(2*a,!0);if(l===0)return new Uint8Array(0);let m=(3+l)*a,p=nv(t,A,m),d=new DataView(p.buffer,p.byteOffset,p.byteLength),f=new Uint32Array(l),I=0;for(let x=0;x<l;x++)f[x]=d.getUint32((3+x)*a,!0),I+=f[x];let C=nv(t,A+Math.ceil(m/3)*4,I),y=g>0?(l-1)*u+g:l*u,Q=new Uint8Array(y),E=0,b=0;for(let x=0;x<l;x++){let S=f[x],w=await gD(e,new Uint8Array(C.buffer,C.byteOffset+E,S));Q.set(w,b),b+=w.length,E+=S}return Q}async function Yit(e,t,r,n="UInt32",o=!0){let i=n==="UInt64"?8:4;if(!o){let E=ov(t,r,i),b=new DataView(E.buffer,E.byteOffset,i).getUint32(0,!0);return ov(t,r+Math.ceil(i/3)*4,b)}let a=ov(t,r,3*i),A=new DataView(a.buffer,a.byteOffset,3*i),s=A.getUint32(0,!0),c=A.getUint32(i,!0),l=A.getUint32(2*i,!0);if(s===0)return new Uint8Array(0);let u=(3+s)*i,g=ov(t,r,u),m=new DataView(g.buffer,g.byteOffset,g.byteLength),p=new Uint32Array(s),d=0;for(let E=0;E<s;E++)p[E]=m.getUint32((3+E)*i,!0),d+=p[E];let f=ov(t,r+Math.ceil(u/3)*4,d),I=l>0?(s-1)*c+l:s*c,C=new Uint8Array(I),y=0,Q=0;for(let E=0;E<s;E++){let b=p[E],x=await gD(e,new Uint8Array(f.buffer,f.byteOffset+y,b));C.set(x,Q),Q+=x.length,y+=b}return C}async function Oit(e,t,r,n,o="UInt32",i=!0){let a=o==="UInt64"?8:4,A=r+n,s=new DataView(t.buffer,t.byteOffset,t.byteLength);if(!i){let C=s.getUint32(A,!0);return new Uint8Array(t.buffer,t.byteOffset+A+a,C).slice()}let c=s.getUint32(A,!0),l=s.getUint32(A+a,!0),u=s.getUint32(A+2*a,!0);if(c===0)return new Uint8Array(0);let g=(3+c)*a,m=new Uint32Array(c);for(let C=0;C<c;C++)m[C]=s.getUint32(A+(3+C)*a,!0);let p=u>0?(c-1)*l+u:c*l,d=new Uint8Array(p),f=A+g,I=0;for(let C=0;C<c;C++){let y=m[C],Q=new Uint8Array(t.buffer,t.byteOffset+f,y),E=await gD(e,Q);d.set(E,I),I+=E.length,f+=y}return d}async function wR(e,t,r,n,o){if(r.inlineBase64)return Yit(e,r.inlineBase64,0,n,o);if(!t)throw new Error(`No data source for array "${r.name}"`);return t.encoding==="base64"?_it(e,t.rawData,t.rawByteStart,r.offset,n,o):Oit(e,t.rawData,t.rawByteStart,r.offset,n,o)}function Sk(e,t,r,n){let o=0,i=0,a=e.length;for(;o<a&&i<r;){for(;o<a&&Sh(e.charCodeAt(o));)o++;if(o>=a)break;let A=o;for(;o<a&&!Sh(e.charCodeAt(o));)o++;o>A&&(t[i++]=n?cl(e,A,o):Xa(e,A,o))}}function Jit(e,t){let r=new Float32Array(t);return Sk(e,r,t,!1),r}function cbe(e,t){let r=new Float64Array(t);return Sk(e,r,t,!1),r}function zit(e,t){let r=new Int32Array(t);return Sk(e,r,t,!0),r}function Kit(e){let t=0,r=0,n=e.length;for(;r<n;){for(;r<n&&Sh(e.charCodeAt(r));)r++;if(r>=n)break;for(t++;r<n&&!Sh(e.charCodeAt(r));)r++}let o=new Int32Array(t);return Sk(e,o,t,!0),o}function jit(e,t,r){let n=0;for(let s=0;s<r;s++){let c=s>0?t[s-1]:0;n+=Math.max(0,t[s]-c-2)}let o=new Int32Array(3*n),i=new Int32Array(n),a=0,A=0;for(let s=0;s<r;s++){let c=s>0?t[s-1]:0,l=t[s],u=e[c];for(let g=c+1;g<l-1;g++)o[a++]=u,o[a++]=e[g],o[a++]=e[g+1],i[A++]=s}return{connectivity:o,triangleCellIndex:i}}async function Wit(e,t){t.update({message:"Parsing VTP header...",current:0,max:100});let r=ube(e,"<AppendedData"),n=r===-1,o=new TextDecoder("ascii").decode(n?e:e.subarray(0,r)),i=Vit(o);if(i.byteOrder==="BigEndian")throw new Error("BigEndian VTP files are not supported.");if(i.compressor&&i.compressor!=="vtkZLibDataCompressor")throw new Error(`Unsupported VTP compressor: "${i.compressor}". Only vtkZLibDataCompressor is supported.`);i.nVerts+i.nLines+i.nStrips>0&&console.warn(`VTP: file contains ${i.nVerts} verts, ${i.nLines} lines, ${i.nStrips} strips \u2014 only Polys are rendered.`);let a=i.headerType,A=!!i.compressor;t.update({message:"Locating binary section...",current:5,max:100});let s=n?null:Hit(e),c=i.pointsArrays.find(Q=>Q.name==="Points")??i.pointsArrays[0];if(!c)throw new Error("VTP file missing Points DataArray");t.update({message:"Decoding positions...",current:10,max:100});let l;if(c.format==="ascii")l=Jit(c.asciiText??"",i.nPoints*3);else{let Q=await wR(t,s,c,a,A);l=kit(Q,c.type,i.nPoints*3)}let u=i.polysArrays.find(Q=>Q.name==="connectivity"),g=i.polysArrays.find(Q=>Q.name==="offsets");if(!u||!g)throw new Error("VTP file missing Polys connectivity/offsets DataArrays");t.update({message:"Decoding topology...",current:20,max:100});let m,p;if(u.format==="ascii")m=Kit(u.asciiText??""),p=zit(g.asciiText??"",i.nCells);else{let Q=await wR(t,s,u,a,A),E=await wR(t,s,g,a,A);m=sbe(Q,u.type),p=sbe(E,g.type)}let{connectivity:d,triangleCellIndex:f}=jit(m,p,i.nCells),I=d.length/3,C=new Map;for(let Q=0;Q<i.pointDataArrays.length;Q++){let E=i.pointDataArrays[Q],b=i.nPoints*E.numberOfComponents;t.update({message:`Point data: ${E.name}...`,current:30+Math.floor(Q/Math.max(1,i.pointDataArrays.length)*30),max:100});let x;if(E.format==="ascii")x=cbe(E.asciiText??"",b);else{let S=await wR(t,s,E,a,A);x=G6(S,E.type,b)}C.set(E.name,Abe(E,x))}let y=new Map;for(let Q=0;Q<i.cellDataArrays.length;Q++){let E=i.cellDataArrays[Q],b=i.nCells*E.numberOfComponents;t.update({message:`Cell data: ${E.name}...`,current:60+Math.floor(Q/Math.max(1,i.cellDataArrays.length)*35),max:100});let x;if(E.format==="ascii")x=cbe(E.asciiText??"",b);else{let S=await wR(t,s,E,a,A);x=G6(S,E.type,b)}y.set(E.name,Abe(E,x))}return An.success({numberOfPoints:i.nPoints,numberOfCells:i.nCells,positions:l,connectivity:d,numberOfTriangles:I,triangleCellIndex:f,pointData:C,cellData:y})}function gbe(e){return ve.create("Parse VTP",async t=>await Wit(e,t))}var{readLine:vk,skipWhitespace:mbe,eatValue:dbe,eatLine:Zit,markStart:N6}=Pt,Dk=/\s+/,qit=/(^\*|REMARK)*/;function $it(e,t){return{tokenizer:e,runtimeCtx:t}}async function eat(e,t){let{tokenizer:r}=e,n=ct.create(r.data,t*2),o=ct.create(r.data,t*2),i=ct.create(r.data,t*2),a=ct.create(r.data,t*2),A=ct.create(r.data,t*2),s=ct.create(r.data,t*2),c=ct.create(r.data,t*2),l=ct.create(r.data,t*2),{position:u}=r,g=vk(r).trim();r.position=u;let m=g.split(Dk).length===7,p=m?6:8,{length:d}=r,f=0;return await bs(e.runtimeCtx,1e5,void 0,I=>{let C=Math.min(t-f,I);for(let y=0;y<C;++y){for(let Q=0;Q<p;++Q)if(mbe(r),N6(r),dbe(r),m)switch(Q){case 0:ct.addUnchecked(n,r.tokenStart,r.tokenEnd);break;case 1:ct.addUnchecked(i,r.tokenStart,r.tokenEnd);break;case 2:ct.addUnchecked(A,r.tokenStart,r.tokenEnd);break;case 3:ct.addUnchecked(s,r.tokenStart,r.tokenEnd);break;case 4:ct.addUnchecked(c,r.tokenStart,r.tokenEnd);break;case 5:ct.addUnchecked(l,r.tokenStart,r.tokenEnd);break}else switch(Q){case 0:ct.addUnchecked(n,r.tokenStart,r.tokenEnd);break;case 1:ct.addUnchecked(o,r.tokenStart,r.tokenEnd);break;case 2:ct.addUnchecked(i,r.tokenStart,r.tokenEnd);break;case 3:ct.addUnchecked(a,r.tokenStart,r.tokenEnd);break;case 4:ct.addUnchecked(A,r.tokenStart,r.tokenEnd);break;case 5:ct.addUnchecked(s,r.tokenStart,r.tokenEnd);break;case 6:ct.addUnchecked(c,r.tokenStart,r.tokenEnd);break;case 7:ct.addUnchecked(l,r.tokenStart,r.tokenEnd);break}Zit(r),N6(r)}return f+=C,C},I=>I.update({message:"Parsing...",current:r.position,max:d})),{count:t,atomId:dr(n)(K.Schema.int),segmentName:m?dr(i)(K.Schema.str):dr(o)(K.Schema.str),residueId:dr(i)(K.Schema.int),residueName:m?dr(i)(K.Schema.str):dr(a)(K.Schema.str),atomName:dr(A)(K.Schema.str),atomType:dr(s)(K.Schema.str),charge:dr(c)(K.Schema.float),mass:dr(l)(K.Schema.float)}}async function tat(e,t){let{tokenizer:r}=e,n=ct.create(r.data,t*2),o=ct.create(r.data,t*2),{length:i}=r,a=0;return await bs(e.runtimeCtx,10,void 0,A=>{let s=Math.min(t-a,A);for(let c=0;c<s;++c)for(let l=0;l<2;++l)switch(mbe(r),N6(r),dbe(r),l){case 0:ct.addUnchecked(n,r.tokenStart,r.tokenEnd);break;case 1:ct.addUnchecked(o,r.tokenStart,r.tokenEnd);break}return a+=s,s},A=>A.update({message:"Parsing...",current:r.position,max:i})),{count:t,atomIdA:dr(n)(K.Schema.int),atomIdB:dr(o)(K.Schema.int)}}function rat(e,t){let r=[];for(let n=0;n<t;++n){let o=vk(e.tokenizer);r.push(o.replace(qit,"").trim())}return r}async function nat(e,t){let r=Pt(e),n=$it(r,t),o,i,a,A=vk(n.tokenizer).trim();for(;r.tokenEnd<r.length;){let c=vk(n.tokenizer).trim();if(c.includes("!NTITLE")){let l=parseInt(c.split(Dk)[0]);o=rat(n,l)}else if(c.includes("!NATOM")){let l=parseInt(c.split(Dk)[0]);i=await eat(n,l)}else if(c.includes("!NBOND")){let l=parseInt(c.split(Dk)[0]);a=await tat(n,l);break}else c.includes("!NTHETA")||c.includes("!NPHI")||c.includes("!NIMPHI")||c.includes("!NDON")||c.includes("!NACC")||c.includes("!NNB")||c.includes("!NGRP NST2")||c.includes("!MOLNT")||c.includes("!NUMLP NUMLPH")||c.includes("!NCRTERM")}if(o===void 0&&(o=[]),i===void 0)return An.error("no atoms data");if(a===void 0)return An.error("no bonds data");let s={id:A,title:o,atoms:i,bonds:a};return An.success(s)}function pbe(e){return ve.create("Parse PSF",async t=>await nat(e,t))}function Dh(e,t){for(let r=0,n=t.length;r<n;++r)e[r]=t.charCodeAt(r)}function M6(e,t,r){let n="";for(let o=t;o<r;o++)n+=String.fromCharCode(e[o]);return n}function Fk(e){return e.replace(/\s+$/,"").replace(/\0/g,"").trim()}function oat(e,t){let r=e[8],n=e[9];if(r===68&&n===65)return!0;if(r===17&&n===17)return!1;let o=new DataView(e.buffer,e.byteOffset),i=o.getInt32(4,!0),a=o.getInt32(4,!1),A=t/4|0,s=i>=21&&i<=A,c=a>=21&&a<=A;return s&&!c?!0:!(c&&!s)}function iat(e){let t=e.trim().split(/\s+/),r=parseInt(t[0],10)||1,n=parseInt(t[3],10)||1,o=e.indexOf("'"),i=e.lastIndexOf("'"),a=o>=0&&i>o?e.slice(o+1,i):t[4]??"P 1";return{nsym:r,spgno:n,spgname:a}}function aat(e,t){let r=e.trim().split(/\s+/),n=r.length,o=parseInt(r[n-1],10)||0,i=parseFloat(r[n-2]),a=parseFloat(r[n-3]),A=r[n-4]??"R",s=r.slice(0,n-4).join(" ");return{label:Fk(s),type:A,min:a,max:i,datasetId:o,index:t}}function fbe(e){let t=e.trim().split(/\s+/).map(Number);return[t[0]??0,t[1]??0,t[2]??0,t[3]??90,t[4]??90,t[5]??90]}function Bbe(e,t){return ve.create("Parse MTZ",async r=>{try{if(e.length<80)return An.error("MTZ file too small to be valid.");if(M6(e,0,4).slice(0,3)!=="MTZ")return An.error("Not an MTZ file: magic bytes mismatch.");let o=oat(e,e.length),i=new DataView(e.buffer,e.byteOffset),a=v=>i.getInt32(v,o),A=v=>i.getFloat32(v,o),s=a(4),c=(s-1)*4;if(c<=0||c>=e.length)return An.error(`MTZ header position out of range: word ${s}`);await r.update({message:"Reading MTZ header..."});let l="",u=0,g=0,m=0,p="",d=[1,1,1,90,90,90],f=1,I="P 1",C=1,y=NaN,Q=[],E=[],b=[],x=new Map,S=c;for(;S+80<=e.length;){let v=M6(e,S,S+80);S+=80;let U=v.indexOf(" "),G=(U>=0?v.slice(0,U):v).trim(),N=U>=0?v.slice(U+1):"";if(G==="END")break;switch(G){case"VERS":l=Fk(N);break;case"TITLE":case"TITL":p=Fk(N);break;case"NCOL":{let k=N.trim().split(/\s+/);u=parseInt(k[0],10)||0,g=parseInt(k[1],10)||0,m=parseInt(k[2],10)||0;break}case"CELL":d=fbe(N);break;case"SYMINF":case"SYMI":{let k=iat(N);C=k.nsym,f=k.spgno,I=k.spgname;break}case"SYMM":Q.push(Fk(N));break;case"COLUMN":case"COL":{let k=aat(N,E.length);E.push(k);break}case"VALM":{let k=parseFloat(N.trim());y=isNaN(k)?NaN:k;break}case"PROJECT":case"PROJ":{let k=N.trim().split(/\s+/),J=parseInt(k[0],10)||0;x.has(J)||x.set(J,{id:J,project:"",crystal:"",name:""}),x.get(J).project=k.slice(1).join(" ");break}case"CRYSTAL":case"CRYS":{let k=N.trim().split(/\s+/),J=parseInt(k[0],10)||0;x.has(J)||x.set(J,{id:J,project:"",crystal:"",name:""}),x.get(J).crystal=k.slice(1).join(" ");break}case"DATASET":case"DATA":{let k=N.trim().split(/\s+/),J=parseInt(k[0],10)||0;x.has(J)||x.set(J,{id:J,project:"",crystal:"",name:""}),x.get(J).name=k.slice(1).join(" ");break}case"DCELL":case"DCEL":{let k=N.trim().split(/\s+/),J=parseInt(k[0],10)||0;x.has(J)||x.set(J,{id:J,project:"",crystal:"",name:""}),x.get(J).cell=fbe(k.slice(1).join(" "));break}case"DWAVEL":case"DWAV":{let k=N.trim().split(/\s+/),J=parseInt(k[0],10)||0;x.has(J)||x.set(J,{id:J,project:"",crystal:"",name:""}),x.get(J).wavelength=parseFloat(k[1])||void 0;break}}}for(let v of x.values())b.push(v);if(b.sort((v,U)=>v.id-U.id),u===0||g===0)return An.error(`MTZ header did not contain valid NCOL record (nColumns=${u}, nReflections=${g}).`);await r.update({message:"Reading MTZ reflection data..."});let w=80,R=g*u,T=w+R*4;if(T>e.length)return An.error(`MTZ file truncated: expected ${T} bytes for ${g} \xD7 ${u} reflections, got ${e.length}.`);let L=new Float32Array(R);if(o===Ou.IsNativeEndianLittle){let v=new Float32Array(e.buffer,e.byteOffset+w,R);L.set(v)}else for(let v=0;v<R;v++)L[v]=A(w+v*4);let F={version:l,title:p,nColumns:u,nReflections:g,nBatches:m,cell:d,spaceGroupNumber:f,spaceGroupName:I,nSymOps:C,symops:Q,columns:E,datasets:b,missingNumber:y};return An.success({name:t,header:F,data:L})}catch(n){return An.error(n?.message??String(n))}})}var Ibe=.529177210859;function Aat(e){let t=Pt.readLines(e,6),r=(C,y)=>{let Q=+t[C].trim().split(/\s+/g)[y];return Number.isNaN(Q)?0:Q},n=C=>{let y=r(C+2,0),Q=Ibe;return[Math.abs(y),B.create(r(C+2,1)*Q,r(C+2,2)*Q,r(C+2,3)*Q),y]},o=t[0].trim(),i=t[1].trim(),[a,A,s]=n(0),[c,l]=n(1),[u,g]=n(2),[m,p]=n(3),d=sat(e,a,Ibe),f=[];if(s>=0){let C=r(2,4);C===0&&(C=1);for(let y=0;y<C;y++)f.push(y)}else{let C=Pt.readLine(e).trim().split(/\s+/g);for(let y=0,Q=+C[0];y<Q;y++)f.push(+C[y+1])}return{header:{orbitals:s<0,comment1:o,comment2:i,atomCount:a,origin:A,dim:B.create(c,u,m),basisX:l,basisY:g,basisZ:p,dataSetIds:f},atoms:d}}function sat(e,t,r){let n=new Int32Array(t),o=new Float64Array(t),i=new Float32Array(t),a=new Float32Array(t),A=new Float32Array(t);for(let s=0;s<t;s++){let c=Pt.readLine(e).trim().split(/\s+/g);n[s]=+c[0],o[s]=+c[1],i[s]=+c[2]*r,a[s]=+c[3]*r,A[s]=+c[4]*r}return{count:t,number:K.ofArray({array:n,schema:K.Schema.int}),nuclearCharge:K.ofArray({array:o,schema:K.Schema.float}),x:K.ofArray({array:i,schema:K.Schema.float}),y:K.ofArray({array:a,schema:K.Schema.float}),z:K.ofArray({array:A,schema:K.Schema.float})}}function cat(e,t,r){let n=r.dim[0]*r.dim[1]*r.dim[2]*r.dataSetIds.length,o=1e4*100,i=new Float64Array(n),a=0;return bs(e,o,i,(A,s)=>{let c=Math.min(n,a+A);for(let l=a;l<c;l++)Pt.skipWhitespace(t),t.tokenStart=t.position,Pt.eatValue(t),s[l]=Xa(t.data,t.tokenStart,t.tokenEnd);return a=c,c===n?0:o},(A,s,c)=>A.update({current:Math.min(c,n),max:n}))}function Cbe(e,t){return ve.create("Parse Cube",async r=>{await r.update("Reading header...");let n=Pt(e),{header:o,atoms:i}=Aat(n),a=await cat(r,n,o);return An.success({header:o,atoms:i,values:a,name:t})})}function hbe(e){let t={h:B()},r=0,n=0,o=/\s+/g;for(;;){let i=Pt.readLine(e),a;if(i.startsWith("object 1"))a=i.split(o),t.dim=B.create(parseInt(a[5]),parseInt(a[6]),parseInt(a[7]));else if(i.startsWith("origin"))a=i.split(o),t.min=B.create(parseFloat(a[1]),parseFloat(a[2]),parseFloat(a[3]));else if(i.startsWith("delta"))a=i.split(o),n===0?t.h[0]=parseFloat(a[1]):n===1?t.h[1]=parseFloat(a[2]):n===2&&(t.h[2]=parseFloat(a[3])),n+=1;else if(i.startsWith("object 3")){r+=i.length+1;break}r+=i.length+1}return{header:t,headerByteCount:r}}function lat(e,t,r){let n=r.dim[0]*r.dim[1]*r.dim[2],o=1e4*100,i=new Float64Array(n),a=0;return bs(e,o,i,(A,s)=>{let c=Math.min(n,a+A);for(let l=a;l<c;l++)Pt.skipWhitespace(t),t.tokenStart=t.position,Pt.eatValue(t),s[l]=Xa(t.data,t.tokenStart,t.tokenEnd);return a=c,c===n?0:o},(A,s,c)=>A.update({current:Math.min(c,n),max:n}))}async function uat(e,t,r){await e.update("Reading header...");let n=Pt(t),{header:o}=hbe(n);await e.update("Reading values...");let i=await lat(e,n,o);return An.success({header:o,values:i,name:r})}async function gat(e,t,r){await e.update("Reading header...");let n=rp(t,0,1e3),o=Pt(n),{header:i,headerByteCount:a}=hbe(o);await e.update("Reading values...");let A=i.dim[0]*i.dim[1]*i.dim[2],s=new DataView(t.buffer,t.byteOffset+a),c=new Float64Array(A);for(let l=0;l<A;l++)c[l]=s.getFloat64(l*8,!0);return An.success({header:i,values:c,name:r})}function ybe(e,t){return ve.create("Parse DX",r=>am.is(e)?uat(r,e,t):gat(r,e,t))}var mat={NATOM:"",NTYPES:"",NBONH:"",MBONA:"",NTHETH:"",MTHETA:"",NPHIH:"",MPHIA:"",NHPARM:"",NPARM:"",NNB:"",NRES:"",NBONA:"",NTHETA:"",NPHIA:"",NUMBND:"",NUMANG:"",NPTRA:"",NATYP:"",NPHB:"",IFPERT:"",NBPER:"",NGPER:"",NDPER:"",MBPER:"",MGPER:"",MDPER:"",IFBOX:"",NMXRS:"",IFCAP:"",NUMEXTRA:"",NCOPY:""},Qbe=Object.keys(mat),{readLine:RR,markLine:Ebe,trim:dat}=Pt;function pat(e,t){return{tokenizer:e,runtimeCtx:t}}function fat(e){let{tokenizer:t}=e,r=[];for(;t.tokenEnd<t.length&&t.data.charAt(t.position)!=="%";){let n=RR(t).trim();n&&r.push(n)}return r}function Bat(e){let{tokenizer:t}=e,r=Object.create(null);Qbe.forEach(o=>{r[o]=0});let n=0;for(;t.tokenEnd<t.length&&t.data.charAt(t.position)!=="%";){let o=RR(t),i=Math.min(n+10,32);for(let a=0;n<i;++a,++n)r[Qbe[n]]=parseInt(o.substring(a*8,a*8+8).trim())}return r}function LQ(e,t,r,n){let{tokenizer:o}=e,i=ct.create(o.data,t*2),a=0;for(;o.tokenEnd<o.length&&o.data.charAt(o.position)!=="%";){o.tokenStart=o.position;let A=Math.min(a+r,t);for(let s=0;a<A;++s,++a){let c=o.position;dat(o,o.position,o.position+n),ct.addUnchecked(i,o.tokenStart,o.tokenEnd),o.position=c+n}Ebe(o)}return i}async function Iat(e,t){let r=Pt(e),n=pat(r,t),o=Object.create(null),i=0;for(;r.tokenEnd<r.length;){r.position-i>1e5&&t.shouldUpdate&&(i=r.position,await t.update({current:r.position,max:r.length}));let a=RR(n.tokenizer).trim();if(a.startsWith("%VERSION"))o.version=a.substring(8).trim();else if(a.startsWith("%FLAG")){let A=a.substring(5).trim(),s=RR(n.tokenizer).trim();for(;s.startsWith("%COMMENT");)s=RR(n.tokenizer).trim();if(!s.startsWith("%FORMAT"))throw new Error(`expected %FORMAT got "${s}"`);if(A==="TITLE"||A==="CTITLE")o.title=fat(n);else if(A==="POINTERS")o.pointers=Bat(n);else if(A==="ATOM_NAME"){let c=LQ(n,o.pointers.NATOM,20,4);o.atomName=dr(c)(K.Schema.str)}else if(A==="CHARGE"){let c=LQ(n,o.pointers.NATOM,5,16);o.charge=dr(c)(K.Schema.float)}else if(A==="MASS"){let c=LQ(n,o.pointers.NATOM,5,16);o.mass=dr(c)(K.Schema.float)}else if(A==="RESIDUE_LABEL"){let c=LQ(n,o.pointers.NRES,20,4);o.residueLabel=dr(c)(K.Schema.str)}else if(A==="RESIDUE_POINTER"){let c=LQ(n,o.pointers.NRES,10,8);o.residuePointer=dr(c)(K.Schema.int)}else if(A==="BONDS_INC_HYDROGEN"){let c=LQ(n,o.pointers.NBONH*3,10,8);o.bondsIncHydrogen=dr(c)(K.Schema.int)}else if(A==="BONDS_WITHOUT_HYDROGEN"){let c=LQ(n,o.pointers.NBONA*3,10,8);o.bondsWithoutHydrogen=dr(c)(K.Schema.int)}else if(A==="RADII"){let c=LQ(n,o.pointers.NATOM,5,16);o.radii=dr(c)(K.Schema.float)}else for(;r.tokenEnd<r.length&&r.data.charAt(r.position)!=="%";)Ebe(r)}}return An.success(o)}function bbe(e){return ve.create("Parse PRMTOP",async t=>await Iat(e,t))}var Cat={nr:K.Schema.Int(),type:K.Schema.Str(),resnr:K.Schema.Int(),residu:K.Schema.Str(),atom:K.Schema.Str(),cgnr:K.Schema.Int(),charge:K.Schema.Float(),mass:K.Schema.Float()},hat={ai:K.Schema.Int(),aj:K.Schema.Int()},yat={compound:K.Schema.Str(),molCount:K.Schema.Int()},{readLine:k6,markLine:TQ,skipWhitespace:PQ,markStart:wk,eatValue:H6,eatLine:Qat}=Pt;function Eat(e,t){return{tokenizer:e,runtimeCtx:t}}var bat=/\[ (.+) \]/,xat=/\s+/;function Sat(e){let{tokenizer:t}=e,r;for(;t.tokenEnd<t.length;){PQ(t);let n=t.data.charAt(t.position);if(n==="[")break;if(n===";"||n==="*"){TQ(t);continue}if(r!==void 0)throw new Error("more than one molName");r=k6(t).split(xat)[0]}if(r===void 0)throw new Error("missing molName");return r}function Dat(e){let{tokenizer:t}=e,r=ct.create(t.data,64),n=ct.create(t.data,64),o=ct.create(t.data,64),i=ct.create(t.data,64),a=ct.create(t.data,64),A=ct.create(t.data,64),s=ct.create(t.data,64),c=ct.create(t.data,64);for(;t.tokenEnd<t.length;){PQ(t);let l=t.data.charAt(t.position);if(l==="[")break;if(l===";"||l==="*"){TQ(t);continue}for(let u=0;u<8;++u)switch(PQ(t),wk(t),H6(t),u){case 0:ct.add(r,t.tokenStart,t.tokenEnd);break;case 1:ct.add(n,t.tokenStart,t.tokenEnd);break;case 2:ct.add(o,t.tokenStart,t.tokenEnd);break;case 3:ct.add(i,t.tokenStart,t.tokenEnd);break;case 4:ct.add(a,t.tokenStart,t.tokenEnd);break;case 5:ct.add(A,t.tokenStart,t.tokenEnd);break;case 6:ct.add(s,t.tokenStart,t.tokenEnd);break;case 7:ct.add(c,t.tokenStart,t.tokenEnd);break}TQ(t)}return Jr.ofColumns(Cat,{nr:dr(r)(K.Schema.int),type:dr(n)(K.Schema.str),resnr:dr(o)(K.Schema.int),residu:dr(i)(K.Schema.str),atom:dr(a)(K.Schema.str),cgnr:dr(A)(K.Schema.int),charge:dr(s)(K.Schema.float),mass:dr(c)(K.Schema.float)})}function vat(e){let{tokenizer:t}=e,r=ct.create(t.data,64),n=ct.create(t.data,64);for(;t.tokenEnd<t.length;){PQ(t);let o=t.data.charAt(t.position);if(o==="[")break;if(o===";"||o==="*"){TQ(t);continue}for(let i=0;i<2;++i)switch(PQ(t),wk(t),H6(t),i){case 0:ct.add(r,t.tokenStart,t.tokenEnd);break;case 1:ct.add(n,t.tokenStart,t.tokenEnd);break}TQ(t)}return Jr.ofColumns(hat,{ai:dr(r)(K.Schema.int),aj:dr(n)(K.Schema.int)})}function Fat(e){let{tokenizer:t}=e,r;for(;t.tokenEnd<t.length;){PQ(t);let n=t.data.charAt(t.position);if(n==="[")break;if(n===";"||n==="*"){TQ(t);continue}if(r!==void 0)throw new Error("more than one system");r=k6(t).trim()}if(r===void 0)throw new Error("missing system");return r}function wat(e){let{tokenizer:t}=e,r=ct.create(t.data,64),n=ct.create(t.data,64);for(;t.tokenEnd<t.length&&(PQ(t),!(t.position>=t.length));){let o=t.data.charAt(t.position);if(o==="[")break;if(o===";"||o==="*"){TQ(t);continue}for(let i=0;i<2;++i)switch(PQ(t),wk(t),H6(t),i){case 0:ct.add(r,t.tokenStart,t.tokenEnd);break;case 1:ct.add(n,t.tokenStart,t.tokenEnd);break}Qat(t),wk(t)}return Jr.ofColumns(yat,{compound:dr(r)(K.Schema.str),molCount:dr(n)(K.Schema.int)})}async function Rat(e,t){let r=Pt(e),n=Eat(r,t),o=Object.create(null),i=0;o.compounds={};let a={},A="";function s(){A&&a.atoms&&(o.compounds[A]=a,a={},A="")}for(;r.tokenEnd<r.length;){r.position-i>1e5&&t.shouldUpdate&&(i=r.position,await t.update({current:r.position,max:r.length}));let c=k6(n.tokenizer).trim();if(!(!c||c[0]==="*"||c[0]===";")){if(c.startsWith("#include"))throw new Error("#include statements not allowed");if(c.startsWith("[")){let l=c.match(bat);if(l===null)throw new Error("expected field name");let u=l[1];if(u==="moleculetype")s(),A=Sat(n);else if(u==="atoms")a.atoms=Dat(n);else if(u==="bonds")a.bonds=vat(n);else if(u==="system")o.system=Fat(n);else if(u==="molecules")s(),o.molecules=wat(n);else for(;r.tokenEnd<r.length&&r.data.charAt(r.position)!=="[";)TQ(r)}}}return An.success(o)}function xbe(e){return ve.create("Parse TOP",async t=>await Rat(e,t))}var G0=Yt.BuiltIn({name:"download",display:{name:"Download",description:"Download string or binary data from the specified URL"},from:[te.Root],to:[te.Data.String,te.Data.Binary],params:{url:h.Url("https://www.ebi.ac.uk/pdbe/static/entry/1cbs_updated.cif",{description:"Resource URL. Must be the same domain or support CORS."}),label:h.Optional(h.Text("")),isBinary:h.Optional(h.Boolean(!1,{description:"If true, download data as binary (string otherwise)"}))}})({apply({params:e,cache:t},r){return ve.create("Download",async n=>{let o=gn.getUrlAsset(r.managers.asset,e.url),i=await r.managers.asset.resolve(o,e.isBinary?"binary":"string").runInContext(n);return t.asset=i,e.isBinary?new te.Data.Binary(i.data,{label:e.label?e.label:o.url}):new te.Data.String(i.data,{label:e.label?e.label:o.url})})},dispose({cache:e}){e?.asset?.dispose()},update({oldParams:e,newParams:t,b:r}){return e.url!==t.url||e.isBinary!==t.isBinary?lt.UpdateResult.Recreate:e.label!==t.label?(r.label=t.label||(typeof t.url=="string"?t.url:t.url.url),lt.UpdateResult.Updated):lt.UpdateResult.Unchanged}}),V6=Yt.BuiltIn({name:"download-blob",display:{name:"Download Blob",description:"Download multiple string or binary data from the specified URLs."},from:te.Root,to:te.Data.Blob,params:{sources:h.ObjectList({id:h.Text("",{label:"Unique ID"}),url:h.Url("https://www.ebi.ac.uk/pdbe/static/entry/1cbs_updated.cif",{description:"Resource URL. Must be the same domain or support CORS."}),isBinary:h.Optional(h.Boolean(!1,{description:"If true, download data as binary (string otherwise)"})),canFail:h.Optional(h.Boolean(!1,{description:"Indicate whether the download can fail and not be included in the blob as a result."}))},e=>`${e.id}: ${e.url}`),maxConcurrency:h.Optional(h.Numeric(4,{min:1,max:12,step:1},{description:"The maximum number of concurrent downloads."}))}})({apply({params:e,cache:t},r){return ve.create("Download Blob",async n=>{let o=[],i=await Lme(n,r.managers.asset,e.sources,e.maxConcurrency||4),a=[];for(let A=0;A<i.length;A++){let s=i[A],c=e.sources[A];s.kind==="error"?r.log.warn(`Download ${s.id} (${c.url}) failed: ${s.error}`):(a.push(s.result),o.push(c.isBinary?{id:s.id,kind:"binary",data:s.result.data}:{id:s.id,kind:"string",data:s.result.data}))}return t.assets=a,new te.Data.Blob(o,{label:"Data Blob",description:`${o.length} ${o.length===1?"entry":"entries"}`})})},dispose({cache:e},t){let r=e?.assets;if(r)for(let n of r)n.dispose()}}),Uat=Yt.BuiltIn({name:"defalate-data",display:{name:"Deflate",description:"Deflate compressed data"},params:{method:h.Select("gzip",[["gzip","gzip"]]),isString:h.Boolean(!1),stringEncoding:h.Optional(h.Select("utf-8",[["utf-8","UTF8"]])),label:h.Optional(h.Text(""))},from:[te.Data.Binary],to:[te.Data.Binary,te.Data.String]})({apply({a:e,params:t},r){return ve.create("Gzip",async n=>{let o=await AN(n,e.data),i=t.label?t.label:e.label;if(t.isString){let a=rD(o);return new te.Data.String(a,{label:i})}return new te.Data.Binary(o,{label:i})})}}),_6=Yt.BuiltIn({name:"raw-data",display:{name:"Raw Data",description:"Raw data supplied by value."},from:[te.Root],to:[te.Data.String,te.Data.Binary],params:{data:h.Value("",{isHidden:!0}),label:h.Optional(h.Text(""))}})({apply({params:e}){return ve.create("Raw Data",async()=>{if(typeof e.data=="string")return new te.Data.String(e.data,{label:e.label?e.label:"String"});if(Array.isArray(e.data))return new te.Data.Binary(new Uint8Array(e.data),{label:e.label?e.label:"Binary"});if(e.data instanceof ArrayBuffer)return new te.Data.Binary(new Uint8Array(e.data),{label:e.label?e.label:"Binary"});if(e.data instanceof Uint8Array)return new te.Data.Binary(e.data,{label:e.label?e.label:"Binary"});Or(e.data)})},update({oldParams:e,newParams:t,b:r}){return e.data!==t.data?lt.UpdateResult.Recreate:e.label!==t.label?(r.label=t.label||r.label,lt.UpdateResult.Updated):lt.UpdateResult.Unchanged},customSerialization:{toJSON(e){if(typeof e.data=="string"||Array.isArray(e.data))return e;if(e.data instanceof ArrayBuffer){let t=new Uint8Array(e.data),r=new Array(t.length);for(let n=0,o=t.length;n<o;n++)r[n]=t[n];return{data:r,label:e.label}}else if(e.data instanceof Uint8Array){let t=new Array(e.data.length);for(let r=0,n=e.data.length;r<n;r++)t[r]=e.data[r];return{data:t,label:e.label}}},fromJSON(e){return e}}}),Y6=Yt.BuiltIn({name:"read-file",display:{name:"Read File",description:"Read string or binary data from the specified file"},from:te.Root,to:[te.Data.String,te.Data.Binary],params:{file:h.File(),label:h.Optional(h.Text("")),isBinary:h.Optional(h.Boolean(!1,{description:"If true, open file as as binary (string otherwise)"}))}})({apply({params:e,cache:t},r){return ve.create("Open File",async n=>{if(e.file===null)return r.log.error("No file(s) selected"),po.Null;let o=await r.managers.asset.resolve(e.file,e.isBinary?"binary":"string").runInContext(n);return t.asset=o,e.isBinary?new te.Data.Binary(o.data,{label:e.label?e.label:e.file.name}):new te.Data.String(o.data,{label:e.label?e.label:e.file.name})})},dispose({cache:e}){e?.asset?.dispose()},update({oldParams:e,newParams:t,b:r}){return e.label!==t.label?(r.label=t.label||e.file?.name||"",lt.UpdateResult.Updated):lt.UpdateResult.Unchanged},isSerializable:()=>({isSerializable:!1,reason:"Cannot serialize user loaded files."})}),Lat=Yt.BuiltIn({name:"parse-blob",display:{name:"Parse Blob",description:"Parse multiple data enties"},from:te.Data.Blob,to:te.Format.Blob,params:{formats:h.ObjectList({id:h.Text("",{label:"Unique ID"}),format:h.Select("cif",[["cif","cif"]])},e=>`${e.id}: ${e.format}`)}})({apply({a:e,params:t},r){return ve.create("Parse Blob",async n=>{let o=new Map;for(let a of t.formats)o.set(a.id,a.format);let i=[];for(let a of e.data){if(!o.has(a.id))continue;let A=await(a.kind==="string"?Kc.parse(a.data):Kc.parseBinary(a.data)).runInContext(n);if(A.isError)throw new Error(`${a.id}: ${A.message}`);i.push({id:a.id,kind:"cif",data:A.result})}return new te.Format.Blob(i,{label:"Format Blob",description:`${i.length} ${i.length===1?"entry":"entries"}`})})}}),O6=Yt.BuiltIn({name:"parse-cif",display:{name:"Parse CIF",description:"Parse CIF from String or Binary data"},from:[te.Data.String,te.Data.Binary],to:te.Format.Cif})({apply({a:e}){return ve.create("Parse CIF",async t=>{let r=await Kc.parse(e.data).runInContext(t);if(r.isError)throw new Error(r.message);return r.result.blocks.length===0?po.Null:new te.Format.Cif(r.result)})}}),Tat=Yt.BuiltIn({name:"parse-cube",display:{name:"Parse Cube",description:"Parse Cube from String data"},from:te.Data.String,to:te.Format.Cube})({apply({a:e}){return ve.create("Parse Cube",async t=>{let r=await Cbe(e.data,e.label).runInContext(t);if(r.isError)throw new Error(r.message);return new te.Format.Cube(r.result)})}}),J6=Yt.BuiltIn({name:"parse-psf",display:{name:"Parse PSF",description:"Parse PSF from String data"},from:[te.Data.String],to:te.Format.Psf})({apply({a:e}){return ve.create("Parse PSF",async t=>{let r=await pbe(e.data).runInContext(t);if(r.isError)throw new Error(r.message);return new te.Format.Psf(r.result)})}}),z6=Yt.BuiltIn({name:"parse-prmtop",display:{name:"Parse PRMTOP",description:"Parse PRMTOP from String data"},from:[te.Data.String],to:te.Format.Prmtop})({apply({a:e}){return ve.create("Parse PRMTOP",async t=>{let r=await bbe(e.data).runInContext(t);if(r.isError)throw new Error(r.message);return new te.Format.Prmtop(r.result)})}}),K6=Yt.BuiltIn({name:"parse-top",display:{name:"Parse TOP",description:"Parse TOP from String data"},from:[te.Data.String],to:te.Format.Top})({apply({a:e}){return ve.create("Parse TOP",async t=>{let r=await xbe(e.data).runInContext(t);if(r.isError)throw new Error(r.message);return new te.Format.Top(r.result)})}}),Pat=Yt.BuiltIn({name:"parse-ply",display:{name:"Parse PLY",description:"Parse PLY from String or Binary data"},from:[te.Data.String,te.Data.Binary],to:te.Format.Ply})({apply({a:e}){return ve.create("Parse PLY",async t=>{let r=await rbe(e.data).runInContext(t);if(r.isError)throw new Error(r.message);return new te.Format.Ply(r.result,{label:r.result.comments[0]||"PLY Data"})})}}),Gat=Yt.BuiltIn({name:"parse-obj",display:{name:"Parse OBJ",description:"Parse OBJ from String data"},from:[te.Data.String],to:te.Format.Obj})({apply({a:e}){return ve.create("Parse OBJ",async t=>{let r=await ibe(e.data).runInContext(t);if(r.isError)throw new Error(r.message);return new te.Format.Obj(r.result,{label:"OBJ Data"})})}}),Nat=Yt.BuiltIn({name:"parse-vtp",display:{name:"Parse VTP",description:"Parse VTP (VTK PolyData) from Binary data"},from:[te.Data.Binary],to:te.Format.Vtp})({apply({a:e}){return ve.create("Parse VTP",async t=>{let r=await gbe(e.data).runInContext(t);if(r.isError)throw new Error(r.message);return new te.Format.Vtp(r.result,{label:"VTP Data"})})}}),j6=Yt.BuiltIn({name:"parse-ccp4",display:{name:"Parse CCP4/MRC/MAP",description:"Parse CCP4/MRC/MAP from Binary data"},from:[te.Data.Binary],to:te.Format.Ccp4})({apply({a:e}){return ve.create("Parse CCP4/MRC/MAP",async t=>{let r=await qEe(e.data,e.label).runInContext(t);if(r.isError)throw new Error(r.message);return new te.Format.Ccp4(r.result)})}}),Mat=Yt.BuiltIn({name:"parse-dsn6",display:{name:"Parse DSN6/BRIX",description:"Parse CCP4/BRIX from Binary data"},from:[te.Data.Binary],to:te.Format.Dsn6})({apply({a:e}){return ve.create("Parse DSN6/BRIX",async t=>{let r=await ebe(e.data,e.label).runInContext(t);if(r.isError)throw new Error(r.message);return new te.Format.Dsn6(r.result)})}}),kat=Yt.BuiltIn({name:"parse-mtz",display:{name:"Parse MTZ",description:"Parse CCP4 MTZ reflection file from Binary data"},from:[te.Data.Binary],to:te.Format.Mtz})({apply({a:e}){return ve.create("Parse MTZ",async t=>{let r=await Bbe(e.data,e.label).runInContext(t);if(r.isError)throw new Error(r.message);return new te.Format.Mtz(r.result)})}}),W6=Yt.BuiltIn({name:"parse-dx",display:{name:"Parse DX",description:"Parse DX from Binary/String data"},from:[te.Data.Binary,te.Data.String],to:te.Format.Dx})({apply({a:e}){return ve.create("Parse DX",async t=>{let r=await ybe(e.data,e.label).runInContext(t);if(r.isError)throw new Error(r.message);return new te.Format.Dx(r.result)})}}),Hat=Yt.BuiltIn({name:"import-string",display:{name:"Import String",description:"Import given data as a string"},from:te.Root,to:te.Data.String,params:{data:h.Value(""),label:h.Optional(h.Text(""))}})({apply({params:{data:e,label:t}}){return new te.Data.String(e,{label:t||""})},update({oldParams:e,newParams:t,b:r}){return e.data!==t.data?lt.UpdateResult.Recreate:e.label!==t.label?(r.label=t.label||"",lt.UpdateResult.Updated):lt.UpdateResult.Unchanged},isSerializable:()=>({isSerializable:!1,reason:"Cannot serialize user imported strings."})}),Vat=Yt.BuiltIn({name:"import-json",display:{name:"Import JSON",description:"Import given data as a JSON"},from:te.Root,to:te.Format.Json,params:{data:h.Value({}),label:h.Optional(h.Text(""))}})({apply({params:{data:e,label:t}}){return new te.Format.Json(e,{label:t||""})},update({oldParams:e,newParams:t,b:r}){return e.data!==t.data?lt.UpdateResult.Recreate:e.label!==t.label?(r.label=t.label||"",lt.UpdateResult.Updated):lt.UpdateResult.Unchanged},isSerializable:()=>({isSerializable:!1,reason:"Cannot serialize user imported JSON."})}),_at=Yt.BuiltIn({name:"parse-json",display:{name:"Parse JSON",description:"Parse JSON from String data"},from:[te.Data.String],to:te.Format.Json})({apply({a:e}){return ve.create("Parse JSON",async t=>{let r=await new Response(am.toString(e.data)).json();return new te.Format.Json(r)})}}),Yat=Yt.BuiltIn({name:"lazy-volume",display:{name:"Lazy Volume",description:"A placeholder for lazy loaded volume representation"},from:te.Root,to:te.Volume.Lazy,params:{url:h.Url(""),isBinary:h.Boolean(!1),format:h.Text("ccp4"),entryId:h.Value("",{isHidden:!0}),isovalues:h.ObjectList({type:h.Text("relative"),value:h.Numeric(0),color:h.Color(xt.black),alpha:h.Numeric(1,{min:0,max:1,step:.01}),volumeIndex:h.Numeric(0)},e=>`${e.type} ${e.value}`)}})({apply({a:e,params:t}){return ve.create("Lazy Volume",async r=>{let n=Array.isArray(t.entryId)?t.entryId.join(", "):t.entryId;return new te.Volume.Lazy(t,{label:`${n||t.url}`,description:"Lazy Volume"})})}});var Z6={};ki(Z6,{CreateGroup:()=>Oat});var Oat=Yt.BuiltIn({name:"create-group",display:{name:"Group"},from:[],to:te.Group,params:{label:h.Text("Group"),description:h.Optional(h.Text(""))}})({apply({params:e}){return new te.Group({},e)},update({oldParams:e,newParams:t,b:r}){return KB(e,t)?lt.UpdateResult.Unchanged:(r.label=t.label,r.description=t.description,lt.UpdateResult.Updated)}});var tX={};ki(tX,{CoordinatesFromDcd:()=>GW,CoordinatesFromLammpstraj:()=>HW,CoordinatesFromNctraj:()=>kW,CoordinatesFromTrr:()=>MW,CoordinatesFromXtc:()=>NW,CustomModelProperties:()=>OR,CustomStructureProperties:()=>JR,ModelFromTrajectory:()=>YR,ModelWithCoordinates:()=>nct,MultiStructureSelectionFromBundle:()=>act,MultiStructureSelectionFromExpression:()=>ict,StructureComplexElement:()=>lct,StructureComplexElementTypes:()=>Dxe,StructureComponent:()=>Cv,StructureFromModel:()=>qW,StructureFromTrajectory:()=>rct,StructureInstances:()=>eX,StructureSelectionFromBundle:()=>sct,StructureSelectionFromExpression:()=>oct,StructureSelectionFromScript:()=>Act,TopologyFromPrmtop:()=>_W,TopologyFromPsf:()=>VW,TopologyFromTop:()=>YW,TrajectoryFromBlob:()=>Xst,TrajectoryFromCifCore:()=>$st,TrajectoryFromCube:()=>qst,TrajectoryFromGRO:()=>zW,TrajectoryFromLammpsData:()=>Zst,TrajectoryFromLammpsTrajData:()=>jW,TrajectoryFromMOL:()=>WW,TrajectoryFromMOL2:()=>ZW,TrajectoryFromMmCif:()=>OW,TrajectoryFromModelAndCoordinates:()=>Iv,TrajectoryFromPDB:()=>JW,TrajectoryFromSDF:()=>XW,TrajectoryFromXYZ:()=>KW,TransformStructureConformation:()=>$W,getTrajectory:()=>Jk});function Jat(e){let t=new DataView(e.buffer),r=Object.create(null),n=[],o=0,i=new Int32Array(e.buffer,0,23),a=i[0]!==t.getInt32(0);if(i[0]!==84){let d=e.byteLength;for(let f=0;f<d;f+=4)t.setFloat32(f,t.getFloat32(f),!0)}if(i[0]!==84)throw new Error("dcd bad format, header block start");if(String.fromCharCode(t.getUint8(4),t.getUint8(5),t.getUint8(6),t.getUint8(7))!=="CORD")throw new Error("dcd bad format, format string");let s=!1,c=!1,l=!1;if(i[22]!==0&&(s=!0,i[12]!==0&&(c=!0),i[13]===1&&(l=!0)),r.NSET=i[2],r.ISTART=i[3],r.NSAVC=i[4],r.NAMNF=i[10],s?r.DELTA=t.getFloat32(44,a):r.DELTA=t.getFloat64(44,a),i[22]!==84)throw new Error("dcd bad format, header block end");o=o+84+8;let u=t.getInt32(o,a),g=o+1;if((u-4)%80!==0)throw new Error("dcd bad format, title block start");if(r.TITLE=LG(e.subarray(g,u)),t.getInt32(g+u+4-1,a)!==u)throw new Error("dcd bad format, title block end");if(o=o+u+8,t.getInt32(o,a)!==4)throw new Error("dcd bad format, natom block start");if(r.NATOM=t.getInt32(o+4,a),t.getInt32(o+8,a)!==4)throw new Error("dcd bad format, natom block end");if(o=o+4+8,r.NAMNF>0)throw new Error("dcd format with fixed atoms unsupported, aborting");let m=r.NATOM,p=m*4;for(let d=0,f=r.NSET;d<f;++d){let I=Object.create(null);I.elementCount=m,c&&(o+=4,I.cell=[t.getFloat64(o,a),t.getFloat64(o+1,a),t.getFloat64(o+16,a),t.getFloat64(o+24,a),t.getFloat64(o+32,a),t.getFloat64(o+40,a)],o+=48,o+=4);for(let C=0;C<3;++C){if(t.getInt32(o,a)!==p)throw new Error(`dcd bad format, coord block start: ${d}, ${C}`);o+=4;let y=new Float32Array(e.buffer,o,m);if(C===0?I.x=y:C===1?I.y=y:I.z=y,o+=p,t.getInt32(o,a)!==p)throw new Error(`dcd bad format, coord block end: ${d}, ${C}`);o+=4}if(l){let C=t.getInt32(o,a);o+=4+C+4}n.push(I)}return{header:r,frames:n}}function Sbe(e){return ve.create("Parse DCD",async t=>{try{let r=Jat(e);return An.success(r)}catch(r){return An.error(r)}})}function Dbe(e){return function(t,r,n){return zat(e,t,r,n)}}function zat(e,t,r,n){let{data:o,indices:i,count:a}=e,{valueType:A}=n,s=A==="str"?c=>{let l=i[2*c]+t,u=i[2*c+1];if(l>=u)return"";let g=l+r;return g>u&&(g=u),Qde(o,l,g)}:A==="int"?c=>{let l=i[2*c]+t;return l>i[2*c+1]?0:zC(o,l,l+r)}:c=>{let l=i[2*c]+t;return l>i[2*c+1]?0:xce(o,l,l+r)};return{schema:n,__array:void 0,isDefined:!0,rowCount:a,value:s,valueKind:c=>K.ValueKinds.Present,toArray:c=>wa.createAndFillArray(a,s,c),areValuesEqual:(c,l)=>s(c)===s(l)}}function Kat(){return{title:"",timeInPs:0,hasVelocities:!1,precision:{position:0,velocity:0},box:[0,0,0]}}function jat(e,t){return{tokenizer:e,header:Kat(),numberOfAtoms:0,runtimeCtx:t}}function Wat(e){let{tokenizer:t,header:r}=e,n=Pt.readLine(t);n.trim().length===0&&(n=Pt.readLine(t));let o=n.lastIndexOf("t=");o>=0?(r.timeInPs=parseFloat(n.substring(o+2)),r.title=n.substring(0,o).trim(),r.title&&r.title[r.title.length-1]===","&&(r.title=r.title.substring(0,r.title.length-1))):r.title=n}function Xat(e){let{tokenizer:t}=e;Pt.markLine(t);let r=Pt.getTokenString(t);e.numberOfAtoms=parseInt(r)}async function Zat(e){let{tokenizer:t,numberOfAtoms:r}=e,n=await Pt.readLinesAsync(t,r,e.runtimeCtx,1e5),i=t.data.substring(n.indices[0],n.indices[1]).substring(20).match(/\.\d+/g),a=i.length===6;e.header.hasVelocities=a,e.header.precision.position=i[0].length-1,e.header.precision.velocity=a?i[3].length-1:0;let A=20,s=e.header.precision.position+5,c=A+3*s,l=e.header.precision.velocity+4,u=Dbe(n),g=K.Undefined(e.numberOfAtoms,K.Schema.float);return{count:e.numberOfAtoms,residueNumber:u(0,5,K.Schema.int),residueName:u(5,5,K.Schema.str),atomName:u(10,5,K.Schema.str),atomNumber:u(15,5,K.Schema.int),x:u(A,s,K.Schema.float),y:u(A+s,s,K.Schema.float),z:u(A+2*s,s,K.Schema.float),vx:a?u(c,l,K.Schema.float):g,vy:a?u(c+l,l,K.Schema.float):g,vz:a?u(c+2*l,l,K.Schema.float):g}}function qat(e){let{tokenizer:t}=e,r=Pt.readLine(t).trim().split(/\s+/g);e.header.box=[+r[0],+r[1],+r[2]]}async function $at(e,t){let r=Pt(e);await t.update({message:"Parsing...",current:0,max:e.length});let n=[];for(;r.position<e.length;){let i=jat(r,t);Wat(i),Xat(i);let a=await Zat(i);qat(i),n.push({header:i.header,atoms:a})}let o={structures:n};return An.success(o)}function vbe(e){return ve.create("Parse GRO",async t=>await $at(e,t))}function Fbe(e,t,r){return ve.create("Parse PDB",async n=>An.success({lines:await Pt.readAllLinesAsync(e,n),id:t,variant:r||"pdb"}))}function fd(){return fd.empty()}(n=>{function e(o,i){return{size:o,anglesInRadians:i}}n.create=e;function t(){return e(B(),B())}n.empty=t;function r(o,i,a){let A=B.magnitude(o),s=B.magnitude(i),c=B.magnitude(a),l=Math.acos(B.dot(i,a)/(s*c)),u=Math.acos(B.dot(o,a)/(A*c)),g=Math.acos(B.dot(o,i)/(A*s));return A<=0||s<=0||c<=0||l>=Math.PI||u>=Math.PI||g>=Math.PI?t():e(B.create(A,s,c),B.create(l,u,g))}n.fromBasis=r})(fd||={});var eAt=20.45482949774598;function wbe(e){return ve.create("Parse DCD",async t=>{await t.update("Converting to coordinates");let{header:r}=e,n=r.DELTA?rs(r.DELTA*eAt,"ps"):rs(1,"step"),o=r.ISTART>=1?rs((r.ISTART-1)*n.value,n.unit):rs(0,n.unit),i=[];for(let a=0,A=e.frames.length;a<A;++a){let s=e.frames[a],c={elementCount:s.elementCount,time:rs(o.value+n.value*a,n.unit),x:s.x,y:s.y,z:s.z,xyzOrdering:{isIdentity:!0}};if(s.cell){let l=s.cell;l[1]>=-1&&l[1]<=1&&l[3]>=-1&&l[3]<=1&&l[4]>=-1&&l[4]<=1?c.cell=fd.create(B.create(l[0],l[2],l[5]),B.create(kr(90-Math.asin(l[1])*90/Mb),kr(90-Math.asin(l[3])*90/Mb),kr(90-Math.asin(l[4])*90/Mb))):l[0]<0||l[1]<0||l[2]<0||l[3]<0||l[4]<0||l[5]<0||l[3]>180||l[4]>180||l[5]>180?c.cell=fd.fromBasis(B.create(l[0],l[1],l[3]),B.create(l[1],l[2],l[4]),B.create(l[3],l[4],l[5])):c.cell=fd.create(B.create(l[0],l[2],l[5]),B.create(kr(So(l[1],0,1e-6)?90:l[1]),kr(So(l[3],0,1e-6)?90:l[3]),kr(So(l[4],0,1e-6)?90:l[4])))}i.push(c)}return tm.create(i,n,o)})}function N0(e,t,r,n){let o=r,i=n-1,a=t.charCodeAt(o);for(;(a===32||a>=48&&a<=57)&&o<=i;)a=t.charCodeAt(++o);for(a=t.charCodeAt(i);(a===32||a>=48&&a<=57)&&i>=o;)a=t.charCodeAt(--i);if(++i,o===i)return ct.add(e,o,i);if(o+1===i)return ct.add(e,o,i);if(a=t.charCodeAt(o),o+2===i){let A=t.charCodeAt(o+1);if((a===78||a===110)&&(A===65||A===97)||(a===67||a===99)&&(A===76||A===108)||(a===70||a===102)&&(A===69||A===101)||(a===83||a===115)&&(A===73||A===105)||(a===66||a===98)&&(A===82||A===114)||(a===65||a===97)&&(A===83||A===115)||(a===76||a===108)&&(A===73||A===105)||(a===71||a===103)&&(A===65||A===97))return ct.add(e,o,o+2)}if(a===67||a===99||a===72||a===104||a===78||a===110||a===79||a===111||a===80||a===112||a===83||a===115)return ct.add(e,o,o+1);ct.add(e,o,o)}var tAt=new Set(["NA","CL","FE","SI","BR","AS","LI","GA"]),rAt=new Set(["C","H","N","O","P","S","F","B"]),nAt=/^[\s\d]+|[\s\d]+$/g;function Ep(e,t){e=e.replace(nAt,"").toUpperCase();let r=e.length;if(r===0||r===1||tAt.has(e))return e;if(r===3&&t===e){if(e==="SOD")return"NA";if(e==="POT")return"K";if(e==="CES")return"CS";if(e==="CAL")return"CA";if(e==="CLA")return"CL"}return rAt.has(e[0])?e[0]:""}var q6="ABCDEFGHIJKLMNOPQRSTUVWXYZ";function oAt(e){let t=q6.length,r=e,n=0,o=q6[r%t];for(;r>=t;)r=Math.floor(r/t),o+=q6[r%t],n+=1;return n>=5&&console.warn("getChainId overflow"),o}var Xf=Tu(oAt);function iAt(e,t){let r=e.atomName,n=e.residueName,o=new Array(e.count),i=new Array(e.count),a=new Uint32Array(e.count),A=new Uint32Array(e.count),s=new Array(e.count),c=new Ca,l=new Ha(e.residueNumber,e.atomName),u="",g=0,m="",p=0,d=0,f=-1;for(let y=0,Q=e.count;y<Q;++y){let E=e.residueNumber.value(y);if(E!==f){let b=e.residueName.value(y),x=Yc(l.add(b,y).type,b);(x!==d||E!==f+1&&!(f===99999&&E===0))&&(m=Xf(g),g+=1,p=0),u=c.getEntityId(b,x,m),p+=1,f=E,d=x}o[y]=u,i[y]=m,a[y]=p,A[y]=y,s[y]=Ep(e.atomName.value(y),e.residueName.value(y))}let I=K.ofStringArray(i),C=Jr.ofPartialColumns($o.atom_site,{auth_asym_id:I,auth_atom_id:r,auth_comp_id:n,auth_seq_id:e.residueNumber,Cartn_x:K.ofFloatArray(K.mapToArray(e.x,y=>y*10,Float32Array)),Cartn_y:K.ofFloatArray(K.mapToArray(e.y,y=>y*10,Float32Array)),Cartn_z:K.ofFloatArray(K.mapToArray(e.z,y=>y*10,Float32Array)),id:K.ofIntArray(A),label_asym_id:I,label_atom_id:r,label_comp_id:n,label_seq_id:K.ofIntArray(a),label_entity_id:K.ofStringArray(o),occupancy:K.ofConst(1,e.count,K.Schema.float),type_symbol:K.ofStringArray(s),pdbx_PDB_model_num:K.ofConst(t,e.count,K.Schema.int)},e.count);return La({entity:c.getEntityTable(),chem_comp:l.getChemCompTable(),atom_site:C})}var Rbe;(r=>{function e(n){return n?.kind==="gro"}r.is=e;function t(n){return{kind:"gro",name:n.structures[0].header.title,data:n}}r.fromGro=t})(Rbe||={});function Ube(e){return ve.create("Parse GRO",async t=>{let r=Rbe.fromGro(e),n=[];for(let o=0,i=e.structures.length;o<i;++o){let a=iAt(e.structures[o].atoms,o+1),A=await SA(a,r,t);if(A.frameCount===1){let s=A.representative,[c,l,u]=e.structures[o].header.box;if(c!==0&&l!==0&&u!==0){let g=Fo.fromCell(B.create(c*10,l*10,u*10),B.create(Math.PI/2,Math.PI/2,Math.PI/2));Fo.Provider.set(s,g)}n.push(s)}}return new fc(n)})}function Tbe(e,t){let r=(i,a)=>(t.substr(i,a)||"").trim(),n={entry_id:Lt.ofString(e),length_a:Lt.ofString(r(6,9)),length_b:Lt.ofString(r(15,9)),length_c:Lt.ofString(r(24,9)),angle_alpha:Lt.ofString(r(33,7)),angle_beta:Lt.ofString(r(40,7)),angle_gamma:Lt.ofString(r(47,7)),Z_PDB:Lt.ofString(r(66,4)),pdbx_unique_axis:Lt.ofString("?")},o={entry_id:Lt.ofString(e),"space_group_name_H-M":Lt.ofString(r(55,11)),Int_Tables_number:Lt.ofString("?"),cell_setting:Lt.ofString("?"),space_group_name_Hall:Lt.ofString("?")};return[Ua.ofFields("cell",n),Ua.ofFields("symmetry",o)]}function Lbe(e,t){return{id:e,details:t,groups:[]}}function Pbe(e,t,r){let n=[],o,i,a,A=1,s=1,c=d=>e.data.substring(e.indices[2*d],e.indices[2*d+1]);for(let d=t;d<r;d++){let f=c(d);if(f.substr(11,12)==="BIOMOLECULE:"){let I=f.substr(23).trim(),C=`Biomolecule ${I}`;f=c(d+1),f.substr(11,30)!=="APPLY THE FOLLOWING TO CHAINS:"&&(d++,C=f.substr(11).trim()),o=Lbe(I,C),n.push(o)}else if(f.substr(13,5)==="BIOMT"){let I=f.split(/\s+/),C=parseInt(f[18])-1;C===0&&(a=Y.identity(),i.operators.push({id:A++,matrix:a})),Y.setValue(a,C,0,parseFloat(I[4])),Y.setValue(a,C,1,parseFloat(I[5])),Y.setValue(a,C,2,parseFloat(I[6])),Y.setValue(a,C,3,parseFloat(I[7]))}else if(f.substr(11,30)==="APPLY THE FOLLOWING TO CHAINS:"||f.substr(11,30)===" AND CHAINS:"){f.substr(11,5)==="APPLY"&&(i={chains:[],operators:[]},o.groups.push(i));let I=f.substr(41,30).split(",");for(let C=0,y=I.length;C<y;++C){let Q=I[C].trim();Q&&i.chains.push(Q)}}else if(f.substr(11,33)==="APPLYING THE FOLLOWING TO CHAINS:"){o=Lbe(`${s}`,`Biomolecule ${s}`),n.push(o),s+=1,i={chains:[],operators:[]},o.groups.push(i),d++,f=c(d);let I=f.substr(11,69).split(",");for(let C=0,y=I.length;C<y;++C){let Q=I[C].trim();Q&&i.chains.push(Q)}}}if(n.length===0)return[];let l={id:Lt.ofStrings(n.map(d=>d.id)),details:Lt.ofStrings(n.map(d=>d.details))},u=[];for(let d of n)for(let f of d.groups)u.push({assembly_id:d.id,oper_expression:f.operators.map(I=>I.id).join(","),asym_id_list:f.chains.join(",")});let g={assembly_id:Lt.ofStrings(u.map(d=>d.assembly_id)),oper_expression:Lt.ofStrings(u.map(d=>d.oper_expression)),asym_id_list:Lt.ofStrings(u.map(d=>d.asym_id_list))},m=[];for(let d of n)for(let f of d.groups)for(let I of f.operators){let C={id:""+I.id,type:"?",name:"?",symmetry_operation:"?"};for(let y=0;y<3;y++){for(let Q=0;Q<3;Q++)C[`matrix[${y+1}][${Q+1}]`]=""+Y.getValue(I.matrix,y,Q);C[`vector[${y+1}]`]=""+Y.getValue(I.matrix,y,3)}m.push(C)}let p={id:Lt.ofStrings(m.map(d=>d.id)),type:Lt.ofStrings(m.map(d=>d.type)),name:Lt.ofStrings(m.map(d=>d.name)),symmetry_operation:Lt.ofStrings(m.map(d=>d.symmetry_operation))};for(let d=0;d<3;d++){for(let I=0;I<3;I++){let C=`matrix[${d+1}][${I+1}]`;p[C]=Lt.ofStrings(m.map(y=>y[C]))}let f=`vector[${d+1}]`;p[f]=Lt.ofStrings(m.map(I=>I[f]))}return[Ua.ofFields("pdbx_struct_assembly",l),Ua.ofFields("pdbx_struct_assembly_gen",g),Ua.ofFields("pdbx_struct_oper_list",p)]}function Gbe(e,t,r){let n=[],o,i=c=>e.data.substring(e.indices[2*c],e.indices[2*c+1]);for(let c=t;c<r;c++){let l=i(c),u=l.split(/\s+/),g=parseInt(l[5])-1;g===0&&(o=Y.identity(),n.push(o)),Y.setValue(o,g,0,parseFloat(u[2])),Y.setValue(o,g,1,parseFloat(u[3])),Y.setValue(o,g,2,parseFloat(u[4])),Y.setValue(o,g,3,parseFloat(u[5]))}if(n.length===0)return[];let a=[],A=1;for(let c of n){let l={id:"ncsop"+A++,code:".",details:"."};for(let u=0;u<3;u++){for(let g=0;g<3;g++)l[`matrix[${u+1}][${g+1}]`]=""+Y.getValue(c,u,g);l[`vector[${u+1}]`]=""+Y.getValue(c,u,3)}a.push(l)}let s={id:Lt.ofStrings(a.map(c=>c.id)),code:Lt.ofStrings(a.map(c=>c.code)),details:Lt.ofStrings(a.map(c=>c.details))};for(let c=0;c<3;c++){for(let u=0;u<3;u++){let g=`matrix[${c+1}][${u+1}]`;s[g]=Lt.ofStrings(a.map(m=>m[g]))}let l=`vector[${c+1}]`;s[l]=Lt.ofStrings(a.map(u=>u[l]))}return[Ua.ofFields("struct_ncs_oper",s)]}var aAt={1:"helx_rh_al_p",2:"helx_rh_om_p",3:"helx_rh_pi_p",4:"helx_rh_ga_p",5:"helx_rh_3t_p",6:"helx_lh_al_p",7:"helx_lh_om_p",8:"helx_lh_ga_p",9:"helx_rh_27_p",10:"helx_rh_pp_p"};function AAt(e){return aAt[e]||"helx_p"}function Nbe(e,t,r){let n=[],o=l=>e.data.substring(e.indices[2*l],e.indices[2*l+1]);for(let l=t;l<r;l++){let u=o(l);n.push({serNum:u.substring(7,10).trim(),helixID:u.substring(11,14).trim(),initResName:u.substring(15,19).trim(),initChainID:u.substring(19,20).trim(),initSeqNum:u.substring(21,25).trim(),initICode:u.substring(25,26).trim(),endResName:u.substring(27,31).trim(),endChainID:u.substring(31,34).trim(),endSeqNum:u.substring(33,37).trim(),endICode:u.substring(37,38).trim(),helixClass:u.substring(38,40).trim(),comment:u.substring(40,70).trim(),length:u.substring(71,76).trim()})}let i=Lt.ofStrings(n.map(l=>l.initChainID)),a=Lt.ofStrings(n.map(l=>l.initResName)),A=Lt.ofStrings(n.map(l=>l.endChainID)),s=Lt.ofStrings(n.map(l=>l.endResName)),c={beg_label_asym_id:i,beg_label_comp_id:a,beg_label_seq_id:Lt.ofUndefined(n.length,K.Schema.int),beg_auth_asym_id:i,beg_auth_comp_id:a,beg_auth_seq_id:Lt.ofStrings(n.map(l=>l.initSeqNum)),conf_type_id:Lt.ofStrings(n.map(l=>AAt(l.helixClass))),details:Lt.ofStrings(n.map(l=>l.comment)),end_label_asym_id:A,end_label_comp_id:s,end_label_seq_id:Lt.ofUndefined(n.length,K.Schema.int),end_auth_asym_id:A,end_auth_comp_id:s,end_auth_seq_id:Lt.ofStrings(n.map(l=>l.endSeqNum)),id:Lt.ofStrings(n.map(l=>l.serNum)),pdbx_beg_PDB_ins_code:Lt.ofStrings(n.map(l=>l.initICode)),pdbx_end_PDB_ins_code:Lt.ofStrings(n.map(l=>l.endICode)),pdbx_PDB_helix_class:Lt.ofStrings(n.map(l=>l.helixClass)),pdbx_PDB_helix_length:Lt.ofStrings(n.map(l=>l.length)),pdbx_PDB_helix_id:Lt.ofStrings(n.map(l=>l.helixID))};return Ua.ofFields("struct_conf",c)}function Mbe(e,t,r){let n=[],o=g=>e.data.substring(e.indices[2*g],e.indices[2*g+1]);for(let g=t;g<r;g++){let m=o(g);n.push({strand:m.substring(7,10).trim(),sheetID:m.substring(11,14).trim(),numStrands:m.substring(14,16).trim(),initResName:m.substring(17,21).trim(),initChainID:m.substring(21,22).trim(),initSeqNum:m.substring(22,26).trim(),initICode:m.substring(26,27).trim(),endResName:m.substring(28,32).trim(),endChainID:m.substring(32,33).trim(),endSeqNum:m.substring(33,37).trim(),endICode:m.substring(37,38).trim(),sense:m.substring(38,40).trim(),curAtom:m.substring(41,45).trim(),curResName:m.substring(45,49).trim(),curChainId:m.substring(49,50).trim(),curResSeq:m.substring(50,54).trim(),curICode:m.substring(54,55).trim(),prevAtom:m.substring(56,60).trim(),prevResName:m.substring(60,64).trim(),prevChainId:m.substring(64,65).trim(),prevResSeq:m.substring(65,69).trim(),prevICode:m.substring(69,70).trim()})}let i=Lt.ofStrings(n.map(g=>g.initChainID)),a=Lt.ofStrings(n.map(g=>g.initResName)),A=Lt.ofStrings(n.map(g=>g.initSeqNum)),s=Lt.ofStrings(n.map(g=>g.endChainID)),c=Lt.ofStrings(n.map(g=>g.endResName)),l=Lt.ofStrings(n.map(g=>g.endSeqNum)),u={beg_label_asym_id:i,beg_label_comp_id:a,beg_label_seq_id:A,beg_auth_asym_id:i,beg_auth_comp_id:a,beg_auth_seq_id:A,end_label_asym_id:s,end_label_comp_id:s,end_label_seq_id:l,end_auth_asym_id:s,end_auth_comp_id:c,end_auth_seq_id:l,id:Lt.ofStrings(n.map(g=>g.strand)),sheet_id:Lt.ofStrings(n.map(g=>g.sheetID)),pdbx_beg_PDB_ins_code:Lt.ofStrings(n.map(g=>g.initICode)),pdbx_end_PDB_ins_code:Lt.ofStrings(n.map(g=>g.endICode))};return Ua.ofFields("struct_sheet_range",u)}var sAt={MOL_ID:"",MOLECULE:"",CHAIN:"",FRAGMENT:"",SYNONYM:"",EC:"",ENGINEERED:"",MUTATION:"",OTHER_DETAILS:""};function kbe(e,t,r){let n=s=>e.data.substring(e.indices[2*s],e.indices[2*s+1]),o,i={chains:[],description:""},a=[];for(let s=t;s<r;s++){let l=n(s).substring(10,80).trim(),u=l.indexOf(":"),g=l.substring(0,u),m;g in sAt?(o=g,m=l.substring(u+2)):m=l,m=m.replace(/;$/,""),o==="MOL_ID"?(i={chains:[],description:""},a.push(i)):o==="MOLECULE"?(i.description&&(i.description+=" "),i.description+=m):o==="CHAIN"&&Array.prototype.push.apply(i.chains,m.split(/\s*,\s*/))}let A=[];for(let s of a)for(let c of s.chains)A.push({description:s.description,chains:[c]});return A}function Hbe(e,t,r){let n=i=>e.data.substring(e.indices[2*i],e.indices[2*i+1]),o=new Map;for(let i=t;i<r;i++){let a=n(i),A=a.substring(11,14).trim(),s=a.substring(15).trim();o.has(A)?o.set(A,`${o.get(A)} ${s}`):o.set(A,s)}return o}function Vbe(e,t,r){let n=i=>e.data.substring(e.indices[2*i],e.indices[2*i+1]),o=new Map;for(let i=t;i<r;i++){let a=n(i),A=a.substring(11,12),s=a.substring(19).trim().split(/\s+/);o.has(A)||o.set(A,[]),o.get(A).push(...s)}return o}function _be(e,t){let r=[],n=[],o=[],i=[],a=new Set;for(let[A,s]of e){let c=t(A);if(!(!c||a.has(c))){a.add(c);for(let l=0;l<s.length;l++)r.push(c),n.push(l+1),o.push(s[l]),i.push("no")}}if(r.length>0){let A={entity_id:Lt.ofStrings(r),num:Lt.ofNumbers(n),mon_id:Lt.ofStrings(o),hetero:Lt.ofStrings(i)};return Ua.ofFields("entity_poly_seq",A)}}function Ybe(e,t,r,n){let o=new Map;for(let y of e.keys()){let Q=t(y);Q&&o.set(y,Q)}let i=new Set,a=new Map,A=r.label_asym_id.rowCount;for(let y=0;y<A;++y){let Q=r.auth_asym_id.str(y),E=r.label_entity_id.str(y),b=o.get(Q);if(b&&E!==b)continue;let x=r.label_asym_id.str(y),S=r.label_seq_id.int(y),w=r.pdbx_PDB_model_num.int(y);i.add(`${w}|${x}|${S}`),a.has(Q)||a.set(Q,x)}let s=[],c=[],l=[],u=[],g=[],m=[],p=[],d=[],f=[],I=[],C=0;n=Math.max(n,1);for(let y=1;y<=n;++y)for(let[Q,E]of e){let b=a.get(Q);if(b)for(let x=0;x<E.length;x++){let S=x+1;i.has(`${y}|${b}|${S}`)||(C++,s.push(C),c.push(y),l.push(b),u.push(E[x]),g.push(S),m.push(Q),p.push(E[x]),d.push(S),f.push("y"),I.push(1))}}if(s.length>0){let y={id:Lt.ofNumbers(s),PDB_model_num:Lt.ofNumbers(c),polymer_flag:Lt.ofStrings(f),occupancy_flag:Lt.ofNumbers(I),label_asym_id:Lt.ofStrings(l),label_comp_id:Lt.ofStrings(u),label_seq_id:Lt.ofNumbers(g),auth_asym_id:Lt.ofStrings(m),auth_comp_id:Lt.ofStrings(p),auth_seq_id:Lt.ofNumbers(d)};return Ua.ofFields("pdbx_unobs_or_zero_occ_residues",y)}}var cAt="ACDEFGHIKLMNPQRSTVWY",lAt="ARNDCQEGHILKMFPSTWYVBZX",uAt=[[4,0,-2,-1,-2,0,-2,-1,-1,-1,-1,-2,-1,-1,-1,1,0,0,-3,-2],[0,9,-3,-4,-2,-3,-3,-1,-3,-1,-1,-3,-3,-3,-3,-1,-1,-1,-2,-2],[-2,-3,6,2,-3,-1,-1,-3,-1,-4,-3,1,-1,0,-2,0,-1,-3,-4,-3],[-1,-4,2,5,-3,-2,0,-3,1,-3,-2,0,-1,2,0,0,-1,-2,-3,-2],[-2,-2,-3,-3,6,-3,-1,0,-3,0,0,-3,-4,-3,-3,-2,-2,-1,1,3],[0,-3,-1,-2,-3,6,-2,-4,-2,-4,-3,0,-2,-2,-2,0,-2,-3,-2,-3],[-2,-3,-1,0,-1,-2,8,-3,-1,-3,-2,1,-2,0,0,-1,-2,-3,-2,2],[-1,-1,-3,-3,0,-4,-3,4,-3,2,1,-3,-3,-3,-3,-2,-1,3,-3,-1],[-1,-3,-1,1,-3,-2,-1,-3,5,-2,-1,0,-1,1,2,0,-1,-2,-3,-2],[-1,-1,-4,-3,0,-4,-3,2,-2,4,2,-3,-3,-2,-2,-2,-1,1,-2,-1],[-1,-1,-3,-2,0,-3,-2,1,-1,2,5,-2,-2,0,-1,-1,-1,1,-1,-1],[-2,-3,1,0,-3,0,1,-3,0,-3,-2,6,-2,0,0,1,0,-3,-4,-2],[-1,-3,-1,-1,-4,-2,-2,-3,-1,-3,-2,-2,7,-1,-2,-1,-1,-2,-4,-3],[-1,-3,0,2,-3,-2,0,-3,1,-2,0,0,-1,5,1,0,-1,-2,-2,-1],[-1,-3,-2,0,-3,-2,0,-3,2,-2,-1,0,-2,1,5,-1,-1,-3,-3,-2],[1,-1,0,0,-2,0,-1,-2,0,-2,-1,1,-1,0,-1,4,1,-2,-3,-2],[0,-1,-1,-1,-2,-2,-2,-1,-1,-1,-1,0,-1,-1,-1,1,5,0,-2,-2],[0,-1,-3,-2,-1,-3,-3,3,-2,1,1,-3,-2,-2,-3,-2,0,4,-3,-1],[-3,-2,-4,-3,1,-2,-2,-3,-3,-2,-1,-4,-4,-2,-3,-3,-2,-3,11,2],[-2,-2,-3,-2,3,-3,2,-1,-2,-1,-1,-2,-3,-1,-2,-2,-2,-1,2,7]],gAt=[[4,-1,-2,-2,0,-1,-1,0,-2,-1,-1,-1,-1,-2,-1,1,0,-3,-2,0,-2,-1,0],[-1,5,0,-2,-3,1,0,-2,0,-3,-2,2,-1,-3,-2,-1,-1,-3,-2,-3,-1,0,-1],[-2,0,6,1,-3,0,0,0,1,-3,-3,0,-2,-3,-2,1,0,-4,-2,-3,3,0,-1],[-2,-2,1,6,-3,0,2,-1,-1,-3,-4,-1,-3,-3,-1,0,-1,-4,-3,-3,4,1,-1],[0,-3,-3,-3,9,-3,-4,-3,-3,-1,-1,-3,-1,-2,-3,-1,-1,-2,-2,-1,-3,-3,-2],[-1,1,0,0,-3,5,2,-2,0,-3,-2,1,0,-3,-1,0,-1,-2,-1,-2,0,3,-1],[-1,0,0,2,-4,2,5,-2,0,-3,-3,1,-2,-3,-1,0,-1,-3,-2,-2,1,4,-1],[0,-2,0,-1,-3,-2,-2,6,-2,-4,-4,-2,-3,-3,-2,0,-2,-2,-3,-3,-1,-2,-1],[-2,0,1,-1,-3,0,0,-2,8,-3,-3,-1,-2,-1,-2,-1,-2,-2,2,-3,0,0,-1],[-1,-3,-3,-3,-1,-3,-3,-4,-3,4,2,-3,1,0,-3,-2,-1,-3,-1,3,-3,-3,-1],[-1,-2,-3,-4,-1,-2,-3,-4,-3,2,4,-2,2,0,-3,-2,-1,-2,-1,1,-4,-3,-1],[-1,2,0,-1,-3,1,1,-2,-1,-3,-2,5,-1,-3,-1,0,-1,-3,-2,-2,0,1,-1],[-1,-1,-2,-3,-1,0,-2,-3,-2,1,2,-1,5,0,-2,-1,-1,-1,-1,1,-3,-1,-1],[-2,-3,-3,-3,-2,-3,-3,-3,-1,0,0,-3,0,6,-4,-2,-2,1,3,-1,-3,-3,-1],[-1,-2,-2,-1,-3,-1,-1,-2,-2,-3,-3,-1,-2,-4,7,-1,-1,-4,-3,-2,-2,-1,-2],[1,-1,1,0,-1,0,0,0,-1,-2,-2,0,-1,-2,-1,4,1,-3,-2,-2,0,0,0],[0,-1,0,-1,-1,-1,-1,-2,-2,-1,-1,-1,-1,-2,-1,1,5,-2,-2,0,-1,-1,0],[-3,-3,-4,-4,-2,-2,-3,-2,-2,-3,-2,-3,-1,1,-4,-3,-2,11,2,-3,-4,-3,-2],[-2,-2,-2,-3,-2,-1,-2,-3,2,-1,-1,-2,-1,3,-3,-2,-2,2,7,-1,-3,-2,-1],[0,-3,-3,-3,-1,-2,-2,-3,-3,3,1,-2,1,-1,-2,-2,0,-3,-1,4,-3,-2,-1],[-2,-1,3,4,-3,0,1,-1,0,-3,-4,0,-3,-3,-2,0,-1,-4,-3,-3,4,1,-1],[-1,0,0,1,-3,3,4,-2,0,-3,-3,1,-1,-3,-1,0,-1,-3,-2,-2,1,4,-1],[0,-1,-1,-1,-2,-1,-1,-1,-1,-1,-1,-1,-1,-1,-2,0,0,-2,-1,-1,-1,-1,-1]];function Obe(e,t){let r,n=0,o={};return t.forEach(i=>{r=0;let a={};i.forEach(A=>a[e[r++]]=A),o[e[n++]]=a}),o}var Jbe={blosum62:Obe(lAt,gAt),blosum62x:Obe(cAt,uAt)};var mAt={gapPenalty:-11,gapExtensionPenalty:-1,substMatrix:"default"};function Rk(e,t,r={}){let n={...mAt,...r},o=new $6(e,t,n);return o.calculate(),o.trace()}var $6=class{constructor(t,r,n){this.seqA=t;this.seqB=r;this.S=[];this.V=[];this.H=[];this.gapPenalty=n.gapPenalty,this.gapExtensionPenalty=n.gapExtensionPenalty,this.substMatrix=n.substMatrix==="default"?void 0:Jbe[n.substMatrix],this.n=this.seqA.length,this.m=this.seqB.length}initMatrices(){let{n:t,m:r,gapPenalty:n,S:o,V:i,H:a}=this;for(let A=0;A<=t;++A){o[A]=[],i[A]=[],a[A]=[];for(let s=0;s<=r;++s)o[A][s]=0,i[A][s]=0,a[A][s]=0}for(let A=0;A<=t;++A)o[A][0]=n,a[A][0]=-1/0;for(let A=0;A<=r;++A)o[0][A]=n,i[0][A]=-1/0;o[0][0]=0}makeScoreFn(){let{seqA:t,seqB:r,substMatrix:n}=this;return n?function(i,a){let A=t[i],s=r[a],c=n[A]?.[s];return ir&&c===void 0&&console.warn(`Substitution matrix has no entry for residue pair ('${A}', '${s}') (seqA[${i}], seqB[${a}]). Non-standard residues are not supported with BLOSUM matrices.`),c??0}:function(i,a){let A=t[i],s=r[a];return A===s?5:-3}}calculate(){this.initMatrices();let t=this.makeScoreFn(),{V:r,H:n,S:o,n:i,m:a,gapExtensionPenalty:A,gapPenalty:s}=this,c,l,u,g,m;for(let p=1;p<=i;++p){l=o[p-1],c=r[p-1],u=r[p],g=n[p],m=o[p];for(let d=1;d<=a;++d)u[d]=Math.max(l[d]+s,c[d]+A),g[d]=Math.max(m[d-1]+s,g[d-1]+A),m[d]=Math.max(l[d-1]+t(p-1,d-1),u[d],g[d])}}trace(){let t=this.makeScoreFn(),{V:r,H:n,S:o,seqA:i,seqB:a,gapExtensionPenalty:A,gapPenalty:s}=this,c=this.n,l=this.m,u,g,m=[],p=[];for(o[c][l]>=r[c][l]?(u="S",g=o[c][l]):r[c][l]>=n[c][l]?(u="V",g=r[c][l]):(u="H",g=n[c][l]);c>0&&l>0;)u==="S"?o[c][l]===o[c-1][l-1]+t(c-1,l-1)?(m.push(i[c-1]),p.push(a[l-1]),--c,--l,u="S"):o[c][l]===r[c][l]?u="V":o[c][l]===n[c][l]?u="H":(--c,--l):u==="V"?r[c][l]===r[c-1][l]+A?(m.push(i[c-1]),p.push("-"),--c,u="V"):r[c][l]===o[c-1][l]+s?(m.push(i[c-1]),p.push("-"),--c,u="S"):--c:u==="H"&&(n[c][l]===n[c][l-1]+A?(m.push("-"),p.push(a[l-1]),--l,u="H"):n[c][l]===o[c][l-1]+s?(m.push("-"),p.push(a[l-1]),--l,u="S"):--l);for(;c>0;)m.push(i[c-1]),p.push("-"),--c;for(;l>0;)m.push("-"),p.push(a[l-1]),--l;return m.reverse(),p.reverse(),{aliA:m,aliB:p,score:g}}};function zbe(e,t){let r=()=>[],n=()=>ct.create(e,2*t);return{index:0,group_PDB:n(),id:r(),auth_atom_id:n(),label_alt_id:n(),auth_comp_id:n(),auth_asym_id:n(),auth_seq_id:n(),pdbx_PDB_ins_code:n(),Cartn_x:n(),Cartn_y:n(),Cartn_z:n(),occupancy:n(),B_iso_or_equiv:n(),type_symbol:n(),pdbx_PDB_model_num:r(),label_entity_id:r(),partial_charge:n()}}var Uk=class{constructor(t,r,n,o){this.asymIds=t;this.modelNums=r;this.terIndices=n;this.hasAssemblies=o;this.asymIdCounts=new Map;this.currModelNum=void 0;this.currAsymId="";this.currLabelAsymId=""}clear(){this.asymIdCounts.clear(),this.currModelNum=void 0}get(t){let r=this.asymIds.value(t);if(this.hasAssemblies)return r;let n=this.modelNums[t];if(n!==this.currModelNum?(this.asymIdCounts.clear(),this.currModelNum=n,this.currLabelAsymId=r):this.currAsymId!==r&&(this.currAsymId=r,this.currLabelAsymId=r),this.asymIdCounts.has(r)){if(this.terIndices.has(t)){let o=this.asymIdCounts.get(r)+1;this.asymIdCounts.set(r,o),this.currLabelAsymId=`${r}_${o}`}}else this.asymIdCounts.set(r,0);return this.currLabelAsymId}},iv=-1;function dAt(e,t){let r=t.length,n=e.length;if(r===0)return[];if(n===0)return new Array(r).fill(iv);let{aliA:o,aliB:i}=Rk(t,e),a=new Array(r).fill(iv),A=0,s=0;for(let c=0,l=o.length;c<l;c++){let u=o[c]!=="-",g=i[c]!=="-";u&&g?(a[A]=s+1,A++,s++):u?A++:s++}return a}function pAt(e,t,r,n,o,i,a){let A=new Map;if(!e)return A;let s=new Map,c="",l=-99999,u="___",g=r.str(0);for(let m=0,p=t.rowCount;m<p&&r.str(m)===g;++m){let d=n.str(m),f=o.int(m),I=i.str(m);(d!==c||f!==l||I!==u)&&(s.has(d)||s.set(d,[]),s.get(d).push(a.str(m)),c=d,l=f,u=I)}for(let[m,p]of s){let d=e.get(m);d&&d.length>0&&A.set(m,dAt(d,p))}return A}function eW(e,t,r){let n=e?e[0]:iv;return n!==iv?n:r?1:t}function Kbe(e,t,r){t.clear();let n=Lt.ofStrings(e.pdbx_PDB_model_num),o=Lt.ofTokens(e.auth_asym_id),i=Lt.ofTokens(e.auth_seq_id),a=Lt.ofTokens(e.pdbx_PDB_ins_code),A=Lt.ofTokens(e.auth_atom_id),s=Lt.ofTokens(e.auth_comp_id),c=Lt.ofStrings(e.id),l=!!r.seqresMap;if(!l){for(let T=0,L=c.rowCount;T<L;++T)if(a.str(T)!==""){l=!0;break}}let u=pAt(r.seqresMap,c,n,o,i,a,s),g=n.str(0),m=o.str(0),p=i.int(0),d=a.str(0),f=u.get(m),I=0,C=eW(f,p,l),y=new Map,Q=new Map,E=[],b=[],x=[];for(let T=0,L=c.rowCount;T<L;++T){let F=n.str(T),v=o.str(T),U=i.int(T),G=a.str(T),N=A.str(T);if(F!==g)y.clear(),Q.clear(),g=F,m=v,p=U,d=G,f=u.get(v),I=0,C=eW(f,p,l);else if(m!==v)Q.clear(),m=v,p=U,d=G,f=u.get(v),I=0,C=eW(f,U,l);else if(p!==U||d!==G){Q.clear(),I++;let k=f&&I<f.length?f[I]:iv;k!==iv?C=k:p===C&&!l?C=U:C+=1,p=U,d=G}if(E[T]=t.get(T),Q.has(N)){let k=Q.get(N)+1;Q.set(N,k),N=`${N}_${k}`}else Q.set(N,0);b[T]=N,l&&(x[T]=C)}let S=K.ofStringArray(E),w=K.ofStringArray(b),R=l?Lt.ofColumn(K.ofIntArray(x)):Lt.ofUndefined(e.index,K.Schema.int);return{auth_asym_id:o,auth_atom_id:A,auth_comp_id:s,auth_seq_id:i,B_iso_or_equiv:Lt.ofTokens(e.B_iso_or_equiv),Cartn_x:Lt.ofTokens(e.Cartn_x),Cartn_y:Lt.ofTokens(e.Cartn_y),Cartn_z:Lt.ofTokens(e.Cartn_z),group_PDB:Lt.ofTokens(e.group_PDB),id:c,label_alt_id:Lt.ofTokens(e.label_alt_id),label_asym_id:Lt.ofColumn(S),label_atom_id:Lt.ofColumn(w),label_comp_id:s,label_seq_id:R,label_entity_id:Lt.ofStrings(e.label_entity_id),occupancy:Kue(e.occupancy)?Lt.ofUndefined(e.index,K.Schema.float):Lt.ofTokens(e.occupancy),type_symbol:Lt.ofTokens(e.type_symbol),pdbx_PDB_ins_code:Lt.ofTokens(e.pdbx_PDB_ins_code),pdbx_PDB_model_num:n,partial_charge:Lt.ofTokens(e.partial_charge)}}function tW(e,t,r,n,o,i){let{data:a}=r,A=o-n;ct.addToken(e.group_PDB,Pt.trim(r,n,n+6)),Pt.trim(r,n+6,n+11),e.id[e.index]=r.data.substring(r.tokenStart,r.tokenEnd),ct.addToken(e.auth_atom_id,Pt.trim(r,n+12,n+16)),a.charCodeAt(n+16)===32?ct.add(e.label_alt_id,0,0):ct.add(e.label_alt_id,n+16,n+17),ct.addToken(e.auth_comp_id,Pt.trim(r,n+17,n+21)),ct.add(e.auth_asym_id,n+21,n+22),ct.addToken(e.auth_seq_id,Pt.trim(r,n+22,n+26)),a.charCodeAt(n+26)===32?ct.add(e.pdbx_PDB_ins_code,0,0):ct.add(e.pdbx_PDB_ins_code,n+26,n+27),ct.addToken(e.Cartn_x,Pt.trim(r,n+30,n+38)),ct.addToken(e.Cartn_y,Pt.trim(r,n+38,n+46)),ct.addToken(e.Cartn_z,Pt.trim(r,n+46,n+54)),i==="pqr"?(ct.addToken(e.partial_charge,Pt.trim(r,n+54,n+62)),N0(e.type_symbol,a,n+12,n+16)):(ct.addToken(e.occupancy,Pt.trim(r,n+54,n+60)),A>=66?ct.addToken(e.B_iso_or_equiv,Pt.trim(r,n+60,n+66)):ct.add(e.B_iso_or_equiv,0,0),i==="pdbqt"&&ct.addToken(e.partial_charge,Pt.trim(r,n+70,n+76)),A>=78&&i==="pdb"?(Pt.trim(r,n+76,n+78),r.tokenStart<r.tokenEnd?ct.addToken(e.type_symbol,r):N0(e.type_symbol,a,n+12,n+16)):N0(e.type_symbol,a,n+12,n+16)),e.pdbx_PDB_model_num[e.index]=t,e.index++}function jbe(e,t){let r=()=>[],n=()=>new Float32Array(t),o=()=>ct.create(e,2*t);return{index:0,count:t,id:r(),type_symbol:o(),pdbx_label_atom_id:o(),pdbx_label_alt_id:o(),pdbx_label_comp_id:o(),pdbx_label_asym_id:o(),pdbx_label_seq_id:o(),pdbx_PDB_ins_code:o(),"U[1][1]":n(),"U[2][2]":n(),"U[3][3]":n(),"U[1][2]":n(),"U[1][3]":n(),"U[2][3]":n(),pdbx_auth_seq_id:o(),pdbx_auth_comp_id:o(),pdbx_auth_asym_id:o(),pdbx_auth_atom_id:o()}}function Wbe(e){let t=Lt.ofTokens(e.pdbx_auth_seq_id),r=Lt.ofTokens(e.pdbx_auth_comp_id),n=Lt.ofTokens(e.pdbx_auth_asym_id),o=Lt.ofTokens(e.pdbx_auth_atom_id),i={id:Lt.ofStrings(e.id),type_symbol:Lt.ofTokens(e.type_symbol),pdbx_label_atom_id:o,pdbx_label_alt_id:Lt.ofTokens(e.pdbx_label_alt_id),pdbx_label_comp_id:r,pdbx_label_asym_id:n,pdbx_label_seq_id:t,pdbx_PDB_ins_code:Lt.ofTokens(e.pdbx_PDB_ins_code),pdbx_auth_seq_id:t,pdbx_auth_comp_id:r,pdbx_auth_asym_id:n,pdbx_auth_atom_id:o};return i["U[1][1]"]=Lt.ofNumbers(e["U[1][1]"]),i["U[2][2]"]=Lt.ofNumbers(e["U[2][2]"]),i["U[3][3]"]=Lt.ofNumbers(e["U[3][3]"]),i["U[1][2]"]=Lt.ofNumbers(e["U[1][2]"]),i["U[1][3]"]=Lt.ofNumbers(e["U[1][3]"]),i["U[2][3]"]=Lt.ofNumbers(e["U[2][3]"]),i}function Xbe(e,t,r,n,o){let{data:i}=r,a=o-n;Pt.trim(r,n+6,n+11),e.id[e.index]=i.substring(r.tokenStart,r.tokenEnd),ct.addToken(e.pdbx_auth_atom_id,Pt.trim(r,n+12,n+16)),i.charCodeAt(n+16)===32?ct.add(e.pdbx_label_alt_id,0,0):ct.add(e.pdbx_label_alt_id,n+16,n+17),ct.addToken(e.pdbx_auth_comp_id,Pt.trim(r,n+17,n+21)),ct.add(e.pdbx_auth_asym_id,n+21,n+22),ct.addToken(e.pdbx_auth_seq_id,Pt.trim(r,n+22,n+26)),i.charCodeAt(n+26)===32?ct.add(e.pdbx_PDB_ins_code,0,0):ct.add(e.pdbx_PDB_ins_code,n+26,n+27),e["U[1][1]"][e.index]=zC(i,n+28,n+35)/1e4,e["U[2][2]"][e.index]=zC(i,n+35,n+42)/1e4,e["U[3][3]"][e.index]=zC(i,n+42,n+49)/1e4,e["U[1][2]"][e.index]=zC(i,n+49,n+56)/1e4,e["U[1][3]"][e.index]=zC(i,n+56,n+63)/1e4,e["U[2][3]"][e.index]=zC(i,n+63,n+70)/1e4,a>=78?(Pt.trim(r,n+76,n+78),r.tokenStart<r.tokenEnd?ct.addToken(e.type_symbol,r):N0(e.type_symbol,i,n+12,n+16)):N0(e.type_symbol,i,n+12,n+16),e.index++}function Zbe(e,t,r,n){let o={};for(let T=0,L=n.id.rowCount;T<L;++T)o[n.id.str(T)]=T;let i=T=>e.data.substring(e.indices[2*T],e.indices[2*T+1]),a=[],A=[],s=[],c=[],l=[],u=[],g=[],m=[],p=[],d=[],f=[],I=[],C=[],y=[],Q=[],E=[11,16,21,26],b=1,x=-1,S={},w=!1;for(let T=t;T<r;T++){let L=i(T),F=o[parseInt(L.substr(6,5))];if(F!==void 0){x!==F&&(x=F,S={});for(let v=0;v<4;++v){let U=parseInt(L.substr(E[v],5));if(Number.isNaN(U))continue;let G=o[U];if(G===void 0||F>G)continue;if(S[G]!==void 0){s[S[G]]+=1,w=!0;continue}S[G]=b-1;let N=n.type_symbol.str(F),k=n.type_symbol.str(G);h2(N)||h2(k)?(a.push(`metalc${b}`),A.push("metalc")):(a.push(`covale${b}`),A.push("covale")),s.push(1),c.push(n.label_asym_id.str(F)),l.push(n.label_seq_id.int(F)),u.push(n.auth_seq_id.int(F)),g.push(n.label_atom_id.str(F)),m.push(n.label_alt_id.str(F)),p.push(n.pdbx_PDB_ins_code.str(F)),d.push(n.label_asym_id.str(G)),f.push(n.label_seq_id.int(G)),I.push(n.auth_seq_id.int(G)),C.push(n.label_atom_id.str(G)),y.push(n.label_alt_id.str(G)),Q.push(n.pdbx_PDB_ins_code.str(G)),b+=1}}}let R={id:Lt.ofStrings(a),conn_type_id:Lt.ofStrings(A),ptnr1_label_asym_id:Lt.ofStrings(c),ptnr1_label_seq_id:Lt.ofNumbers(l),ptnr1_auth_seq_id:Lt.ofNumbers(u),ptnr1_label_atom_id:Lt.ofStrings(g),pdbx_ptnr1_label_alt_id:Lt.ofStrings(m),pdbx_ptnr1_PDB_ins_code:Lt.ofStrings(p),ptnr2_label_asym_id:Lt.ofStrings(d),ptnr2_label_seq_id:Lt.ofNumbers(f),ptnr2_auth_seq_id:Lt.ofNumbers(I),ptnr2_label_atom_id:Lt.ofStrings(C),pdbx_ptnr2_label_alt_id:Lt.ofStrings(y),pdbx_ptnr2_PDB_ins_code:Lt.ofStrings(Q)};if(w){let T=["sing","doub","trpl","quad"];R.pdbx_value_order=Lt.ofStrings(s.map(L=>T[L-1]||"sing"))}return Ua.ofFields("struct_conn",R)}function qbe(e,t,r,n){let o=e.substring(t,r);n.id_code=o.substring(62,66).trim()||void 0,n.dep_date=o.substring(50,59).trim()||void 0,n.classification=o.substring(10,50).trim()||void 0}function dA(e,t,r,n){let o=n.length;if(o>r-t)return!1;for(let i=0;i<o;i++)if(e.charCodeAt(t+i)!==n.charCodeAt(i))return!1;return!0}async function $be(e){let{lines:t,variant:r}=e,{data:n,indices:o}=t,i=Pt(n),a=0,A=0;for(let L=0,F=t.count;L<F;L++){let v=o[2*L],U=o[2*L+1];switch(n.charAt(v)){case"A":dA(n,v,U,"ATOM ")?a++:dA(n,v,U,"ANISOU")&&A++;break;case"H":dA(n,v,U,"HETATM")&&a++;break}}let s={},c=zbe(n,a),l=jbe(n,A),u=new Ca,g=[],m=[],p=0,d="",f,I=!1,C,y=new Set;for(let L=0,F=t.count;L<F;L++){let v=o[2*L],U=o[2*L+1];switch(n.charAt(v)){case"A":dA(n,v,U,"ATOM ")?(p||(p++,d=""+p),tW(c,d,i,v,U,r)):dA(n,v,U,"ANISOU")&&Xbe(l,d,i,v,U);break;case"C":if(dA(n,v,U,"CRYST1"))g.push(...Tbe(e.id||"?",n.substring(v,U)));else if(dA(n,v,U,"CONECT")){let G=L+1;for(;v=o[2*G],U=o[2*G+1],!!dA(n,v,U,"CONECT");)G++;f?ir&&console.log("only single CONECT block allowed, ignoring others"):f=[L,G],L=G-1}else if(dA(n,v,U,"COMPND")){let G=L+1;for(;v=o[2*G],U=o[2*G+1],!!dA(n,v,U,"COMPND");)G++;u.setCompounds(kbe(t,L,G)),L=G-1}break;case"H":if(dA(n,v,U,"HEADER"))qbe(n,v,U,s);else if(dA(n,v,U,"HETATM"))p||(p++,d=""+p),tW(c,d,i,v,U,r);else if(dA(n,v,U,"HELIX")){let G=L+1;for(;v=o[2*G],U=o[2*G+1],!!dA(n,v,U,"HELIX");)G++;g.push(Nbe(t,L,G)),L=G-1}else if(dA(n,v,U,"HETNAM")){let G=L+1;for(;v=o[2*G],U=o[2*G+1],!!dA(n,v,U,"HETNAM");)G++;m.push(...Array.from(Hbe(t,L,G).entries())),L=G-1}break;case"M":if(dA(n,v,U,"MODEL ")&&(p++,d=""+p),dA(n,v,U,"MTRIX")){let G=L+1;for(;v=o[2*G],U=o[2*G+1],!!dA(n,v,U,"MTRIX");)G++;g.push(...Gbe(t,L,G)),L=G-1}break;case"O":break;case"R":if(dA(n,v,U,"REMARK 350")){let G=L+1;for(;v=o[2*G],U=o[2*G+1],!!dA(n,v,U,"REMARK 350");)G++;g.push(...Pbe(t,L,G)),L=G-1,I=!0}break;case"S":if(dA(n,v,U,"SHEET")){let G=L+1;for(;v=o[2*G],U=o[2*G+1],!!dA(n,v,U,"SHEET");)G++;g.push(Mbe(t,L,G)),L=G-1}else if(dA(n,v,U,"SEQRES")){let G=L+1;for(;v=o[2*G],U=o[2*G+1],!!dA(n,v,U,"SEQRES");)G++;C?ir&&console.log("only single SEQRES block allowed, ignoring others"):(C=Vbe(t,L,G),u.setSeqres(C)),L=G-1}break;case"T":dA(n,v,U,"TER")&&y.add(c.index)}}if(s.id_code){let L={id:Lt.ofString(s.id_code)};g.push(Ua.ofFields("entry",L))}if(s.classification){let L={pdbx_keywords:Lt.ofString(s.classification)};g.push(Ua.ofFields("struct_keywords",L))}if(s.dep_date){let L={recvd_initial_deposition_date:Lt.ofString(s.dep_date)};g.push(Ua.ofFields("pdbx_database_status",L))}let Q=K.ofIntTokens(c.auth_seq_id),E=K.ofStringTokens(c.auth_atom_id),b=K.ofStringTokens(c.auth_comp_id),x=K.ofStringTokens(c.auth_asym_id),S=new Uk(x,c.pdbx_PDB_model_num,y,I),w=new Ha(Q,E);w.setNames(m),u.setNames(m);for(let L=0,F=b.rowCount;L<F;++L){let v=b.value(L),U=Yc(w.add(v,L).type,v),G=S.get(L);c.label_entity_id[L]=u.getEntityId(v,U,G)}let R=Kbe(c,S,{hasAssemblies:I,seqresMap:C});r==="pdb"&&delete R.partial_charge,f&&g.push(Zbe(t,f[0],f[1],R));let T={entity:Ua.ofTable("entity",u.getEntityTable()),chem_comp:Ua.ofTable("chem_comp",w.getChemCompTable()),atom_site:Ua.ofFields("atom_site",R),atom_site_anisotrop:Ua.ofFields("atom_site_anisotrop",Wbe(l))};if(C){let L=_be(C,v=>u.getEntityIdForChain(v));L&&g.push(L);let F=Ybe(C,v=>u.getEntityIdForChain(v),R,p);F&&g.push(F)}for(let L of g)T[L.name]=L;return{header:e.id||r.toUpperCase(),categoryNames:Object.keys(T),categories:T}}var e0e;(r=>{function e(n){return n?.kind==="pdb"}r.is=e;function t(n){return{kind:"pdb",name:n.id||"",data:n}}r.create=t})(e0e||={});function t0e(e){return ve.create("Parse PDB",async t=>{await t.update("Converting to mmCIF");let r=await $be(e),n=sn.fromFrame(r,void 0,e0e.create(e)),o=La(n.data.db,!0),i=await SA(o,n,t),a=r.categories.atom_site?.getField("partial_charge");if(a&&i.frameCount===1){let A=i.representative,s=A.atomicHierarchy.atomSourceIndex,l=K.isIdentity(s)?void 0:s.toArray({array:Int32Array}),u=a.toFloatArray(),g=l?K.ofFloatArray(K.mapToArray(s,m=>u[m],Float32Array)):K.ofFloatArray(u);MI.Provider.set(A,{data:g,type:"GASTEIGER"})}return i})}function fAt(e){let t=new Array(e.count),r=new Array(e.count),n=new Uint32Array(e.count),o=new Uint32Array(e.count),i=new Array(e.count),a=new Ca,A=new Ha(e.residueId,e.atomName),s="",c=0,l="",u=0,g=e.segmentName.value(0),m=!1,p=0,d=-1;for(let I=0,C=e.count;I<C;++I){let y=e.residueId.value(I),Q=e.segmentName.value(I);if(g!==Q?(l=Xf(c),c+=1,u=0,m=!0,g=Q):m=!1,m||y!==d){let E=e.residueName.value(I),b=Yc(A.add(E,I).type,E);!m&&(b!==p||y!==d+1)&&(l=Xf(c),c+=1,u=0),s=a.getEntityId(E,b,l),u+=1,d=y,p=b}t[I]=s,r[I]=l,n[I]=u,o[I]=I,i[I]=Ep(e.atomName.value(I),e.residueName.value(I))}let f=Jr.ofPartialColumns($o.atom_site,{auth_asym_id:e.segmentName,auth_atom_id:e.atomName,auth_comp_id:e.residueName,auth_seq_id:e.residueId,id:K.ofIntArray(o),label_asym_id:K.ofStringArray(r),label_atom_id:e.atomName,label_comp_id:e.residueName,label_seq_id:K.ofIntArray(n),label_entity_id:K.ofStringArray(t),occupancy:K.ofConst(1,e.count,K.Schema.float),type_symbol:K.ofStringArray(i),pdbx_PDB_model_num:K.ofConst(1,e.count,K.Schema.int)},e.count);return La({entity:a.getEntityTable(),chem_comp:A.getChemCompTable(),atom_site:f})}var r0e;(r=>{function e(n){return n?.kind==="psf"}r.is=e;function t(n){return{kind:"psf",name:n.id,data:n}}r.fromPsf=t})(r0e||={});function n0e(e){return ve.create("Parse PSF",async t=>{let r=r0e.fromPsf(e),n=fAt(e.atoms),{atomIdA:o,atomIdB:i}=e.bonds,a={indexA:K.ofLambda({value:A=>o.value(A)-1,rowCount:o.rowCount,schema:o.schema}),indexB:K.ofLambda({value:A=>i.value(A)-1,rowCount:i.rowCount,schema:i.schema}),order:K.ofConst(1,e.bonds.count,K.Schema.int)};return Ty.create(e.id,n,a,r)})}function o0e(e){return Object.keys(e).filter(t=>!isNaN(t)).map(t=>+t).sort((t,r)=>t-r).map(t=>e[t])}function Lk(e,t,r){return e&&e[t]!==void 0?e[t]:r}function St(e,...t){return{kind:"alias",aliases:t,symbol:e}}function Tk(e,t,...r){return e.info.namespace="molscript-macro",e.id=`molscript-macro.${e.info.name}`,{kind:"macro",symbol:e,translate:t,aliases:[e.info.name,...r]}}function BAt(e){return e.kind==="alias"||e.kind==="macro"}var IAt=[["Core symbols",St(Ve.core.type.bool,"bool"),St(Ve.core.type.num,"num"),St(Ve.core.type.str,"str"),St(Ve.core.type.regex,"regex"),St(Ve.core.type.list,"list"),St(Ve.core.type.set,"set"),St(Ve.core.type.compositeKey,"composite-key"),St(Ve.core.logic.not,"not"),St(Ve.core.logic.and,"and"),St(Ve.core.logic.or,"or"),St(Ve.core.ctrl.if,"if"),St(Ve.core.ctrl.fn,"fn"),St(Ve.core.ctrl.eval,"eval"),St(Ve.core.math.add,"add","+"),St(Ve.core.math.sub,"sub","-"),St(Ve.core.math.mult,"mult","*"),St(Ve.core.math.div,"div","/"),St(Ve.core.math.pow,"pow","**"),St(Ve.core.math.mod,"mod"),St(Ve.core.math.min,"min"),St(Ve.core.math.max,"max"),St(Ve.core.math.cantorPairing,"cantor-pairing"),St(Ve.core.math.sortedCantorPairing,"sorted-cantor-pairing"),St(Ve.core.math.invertCantorPairing,"invert-cantor-pairing"),St(Ve.core.math.floor,"floor"),St(Ve.core.math.ceil,"ceil"),St(Ve.core.math.roundInt,"round"),St(Ve.core.math.trunc,"trunc"),St(Ve.core.math.abs,"abs"),St(Ve.core.math.sign,"sign"),St(Ve.core.math.sqrt,"sqrt"),St(Ve.core.math.cbrt,"cbrt"),St(Ve.core.math.sin,"sin"),St(Ve.core.math.cos,"cos"),St(Ve.core.math.tan,"tan"),St(Ve.core.math.asin,"asin"),St(Ve.core.math.acos,"acos"),St(Ve.core.math.atan,"atan"),St(Ve.core.math.sinh,"sinh"),St(Ve.core.math.cosh,"cosh"),St(Ve.core.math.tanh,"tanh"),St(Ve.core.math.exp,"exp"),St(Ve.core.math.log,"log"),St(Ve.core.math.log10,"log10"),St(Ve.core.math.atan2,"atan2"),St(Ve.core.rel.eq,"eq","="),St(Ve.core.rel.neq,"neq","!="),St(Ve.core.rel.lt,"lt","<"),St(Ve.core.rel.lte,"lte","<="),St(Ve.core.rel.gr,"gr",">"),St(Ve.core.rel.gre,"gre",">="),St(Ve.core.rel.inRange,"in-range"),St(Ve.core.str.concat,"concat"),St(Ve.core.str.match,"regex.match"),St(Ve.core.list.getAt,"list.get"),St(Ve.core.set.has,"set.has"),St(Ve.core.set.isSubset,"set.subset")],["Structure",["Types",St(Ve.structureQuery.type.entityType,"ent-type"),St(Ve.structureQuery.type.authResidueId,"auth-resid"),St(Ve.structureQuery.type.labelResidueId,"label-resid"),St(Ve.structureQuery.type.ringFingerprint,"ringfp"),St(Ve.structureQuery.type.bondFlags,"bond-flags")],["Slots",St(Ve.structureQuery.slot.elementSetReduce,"atom.set.reduce.value")],["Generators",St(Ve.structureQuery.generator.atomGroups,"sel.atom.atom-groups"),St(Ve.structureQuery.generator.queryInSelection,"sel.atom.query-in-selection"),St(Ve.structureQuery.generator.rings,"sel.atom.rings"),St(Ve.structureQuery.generator.empty,"sel.atom.empty"),St(Ve.structureQuery.generator.all,"sel.atom.all"),St(Ve.structureQuery.generator.bondedAtomicPairs,"sel.atom.bonded-pairs"),Tk(e0("sel.atom.atoms",_r.Dictionary({0:Vt(Je.Bool,{isOptional:!0,defaultValue:!0,description:"Test applied to each atom."})}),Cr.ElementSelection,"A selection of singleton atom sets."),e=>ce.struct.generator.atomGroups({"atom-test":Lk(e,0,!0)})),Tk(e0("sel.atom.res",_r.Dictionary({0:Vt(Je.Bool,{isOptional:!0,defaultValue:!0,description:"Test applied to the 1st atom of each residue."})}),Cr.ElementSelection,"A selection of atom sets grouped by residue."),e=>ce.struct.generator.atomGroups({"residue-test":Lk(e,0,!0),"group-by":ce.ammp("residueKey")})),Tk(e0("sel.atom.chains",_r.Dictionary({0:Vt(Je.Bool,{isOptional:!0,defaultValue:!0,description:"Test applied to the 1st atom of each chain."})}),Cr.ElementSelection,"A selection of atom sets grouped by chain."),e=>ce.struct.generator.atomGroups({"chain-test":Lk(e,0,!0),"group-by":ce.ammp("chainKey")}))],["Modifiers",St(Ve.structureQuery.modifier.queryEach,"sel.atom.query-each"),St(Ve.structureQuery.modifier.intersectBy,"sel.atom.intersect-by"),St(Ve.structureQuery.modifier.exceptBy,"sel.atom.except-by"),St(Ve.structureQuery.modifier.unionBy,"sel.atom.union-by"),St(Ve.structureQuery.modifier.union,"sel.atom.union"),St(Ve.structureQuery.modifier.cluster,"sel.atom.cluster"),St(Ve.structureQuery.modifier.includeSurroundings,"sel.atom.include-surroundings"),St(Ve.structureQuery.modifier.surroundingLigands,"sel.atom.surrounding-ligands"),St(Ve.structureQuery.modifier.includeConnected,"sel.atom.include-connected"),St(Ve.structureQuery.modifier.expandProperty,"sel.atom.expand-property")],["Filters",St(Ve.structureQuery.filter.pick,"sel.atom.pick"),St(Ve.structureQuery.filter.first,"sel.atom.first"),St(Ve.structureQuery.filter.withSameAtomProperties,"sel.atom.with-same-atom-properties"),St(Ve.structureQuery.filter.intersectedBy,"sel.atom.intersected-by"),St(Ve.structureQuery.filter.within,"sel.atom.within"),St(Ve.structureQuery.filter.isConnectedTo,"sel.atom.is-connected-to")],["Combinators",St(Ve.structureQuery.combinator.intersect,"sel.atom.intersect"),St(Ve.structureQuery.combinator.merge,"sel.atom.merge"),St(Ve.structureQuery.combinator.distanceCluster,"sel.atom.dist-cluster")],["Atom Set Properties",St(Ve.structureQuery.atomSet.atomCount,"atom.set.atom-count"),St(Ve.structureQuery.atomSet.countQuery,"atom.set.count-query"),St(Ve.structureQuery.atomSet.reduce,"atom.set.reduce"),St(Ve.structureQuery.atomSet.propertySet,"atom.set.property")],["Atom Properties",St(Ve.structureQuery.atomProperty.core.elementSymbol,"atom.el"),St(Ve.structureQuery.atomProperty.core.vdw,"atom.vdw"),St(Ve.structureQuery.atomProperty.core.mass,"atom.mass"),St(Ve.structureQuery.atomProperty.core.atomicNumber,"atom.atomic-number"),St(Ve.structureQuery.atomProperty.core.x,"atom.x"),St(Ve.structureQuery.atomProperty.core.y,"atom.y"),St(Ve.structureQuery.atomProperty.core.z,"atom.z"),St(Ve.structureQuery.atomProperty.core.sourceIndex,"atom.src-index"),St(Ve.structureQuery.atomProperty.core.operatorName,"atom.op-name"),St(Ve.structureQuery.atomProperty.core.instanceId,"atom.instance-id"),St(Ve.structureQuery.atomProperty.core.operatorKey,"atom.op-key"),St(Ve.structureQuery.atomProperty.core.modelIndex,"atom.model-index"),St(Ve.structureQuery.atomProperty.core.modelLabel,"atom.model-label"),St(Ve.structureQuery.atomProperty.core.modelEntryId,"atom.model-entry-id"),St(Ve.structureQuery.atomProperty.core.atomKey,"atom.key"),St(Ve.structureQuery.atomProperty.core.bondCount,"atom.bond-count"),St(Ve.structureQuery.atomProperty.topology.connectedComponentKey,"atom.key.molecule"),St(Ve.structureQuery.atomProperty.macromolecular.authResidueId,"atom.auth-resid"),St(Ve.structureQuery.atomProperty.macromolecular.labelResidueId,"atom.label-resid"),St(Ve.structureQuery.atomProperty.macromolecular.residueKey,"atom.key.res"),St(Ve.structureQuery.atomProperty.macromolecular.chainKey,"atom.key.chain"),St(Ve.structureQuery.atomProperty.macromolecular.entityKey,"atom.key.entity"),St(Ve.structureQuery.atomProperty.macromolecular.isHet,"atom.is-het"),St(Ve.structureQuery.atomProperty.macromolecular.id,"atom.id"),St(Ve.structureQuery.atomProperty.macromolecular.label_atom_id,"atom.label_atom_id"),St(Ve.structureQuery.atomProperty.macromolecular.label_alt_id,"atom.label_alt_id","atom.altloc"),St(Ve.structureQuery.atomProperty.macromolecular.label_comp_id,"atom.label_comp_id"),St(Ve.structureQuery.atomProperty.macromolecular.label_asym_id,"atom.label_asym_id"),St(Ve.structureQuery.atomProperty.macromolecular.label_entity_id,"atom.label_entity_id"),St(Ve.structureQuery.atomProperty.macromolecular.label_seq_id,"atom.label_seq_id"),St(Ve.structureQuery.atomProperty.macromolecular.auth_atom_id,"atom.auth_atom_id","atom.name"),St(Ve.structureQuery.atomProperty.macromolecular.auth_comp_id,"atom.auth_comp_id","atom.resname"),St(Ve.structureQuery.atomProperty.macromolecular.auth_asym_id,"atom.auth_asym_id","atom.chain"),St(Ve.structureQuery.atomProperty.macromolecular.auth_seq_id,"atom.auth_seq_id","atom.resno"),St(Ve.structureQuery.atomProperty.macromolecular.pdbx_PDB_ins_code,"atom.pdbx_PDB_ins_code","atom.inscode"),St(Ve.structureQuery.atomProperty.macromolecular.pdbx_formal_charge,"atom.pdbx_formal_charge"),St(Ve.structureQuery.atomProperty.macromolecular.occupancy,"atom.occupancy"),St(Ve.structureQuery.atomProperty.macromolecular.B_iso_or_equiv,"atom.B_iso_or_equiv","atom.bfactor"),St(Ve.structureQuery.atomProperty.macromolecular.entityType,"atom.entity-type"),St(Ve.structureQuery.atomProperty.macromolecular.entitySubtype,"atom.entity-subtype"),St(Ve.structureQuery.atomProperty.macromolecular.entityPrdId,"atom.entity-prd-id"),St(Ve.structureQuery.atomProperty.macromolecular.entityDescription,"atom.entity-description"),St(Ve.structureQuery.atomProperty.macromolecular.objectPrimitive,"atom.object-primitive"),St(Ve.structureQuery.atomProperty.macromolecular.chemCompType,"atom.chem-comp-type"),St(Ve.structureQuery.atomProperty.macromolecular.secondaryStructureKey,"atom.key.sec-struct"),St(Ve.structureQuery.atomProperty.macromolecular.isModified,"atom.is-modified"),St(Ve.structureQuery.atomProperty.macromolecular.modifiedParentName,"atom.modified-parent"),St(Ve.structureQuery.atomProperty.ihm.hasSeqId,"atom.ihm.has-seq-id"),St(Ve.structureQuery.atomProperty.ihm.overlapsSeqIdRange,"atom.ihm.overlaps-seq-id-range")],["Bond Properties",St(Ve.structureQuery.bondProperty.order,"bond.order"),St(Ve.structureQuery.bondProperty.length,"bond.length"),St(Ve.structureQuery.bondProperty.key,"bond.key"),St(Ve.structureQuery.bondProperty.atomA,"bond.atom-a"),St(Ve.structureQuery.bondProperty.atomB,"bond.atom-b"),Tk(e0("bond.is",_r.List(Cr.BondFlag),Je.Bool,`Test if the current bond has at least one (or all if partial = false) of the specified flags: ${Je.oneOfValues(Cr.BondFlag).join(", ")}`),e=>ce.core.flags.hasAny([ce.struct.bondProperty.flags(),ce.struct.type.bondFlags(o0e(e))]))]]],i0e=[];function a0e(e){for(let t of e)BAt(t)?i0e.push(t):t instanceof Array&&a0e(t)}a0e(IAt);var Pk=(function(){let e=[],t=Object.create(null),r=yo.create(),n=yo.create();for(let o of i0e){for(let a of o.aliases){if(e.push([a,o]),t[a])throw new Error(`Alias '${a}' already in use.`);t[a]=o}let i=o.symbol.args;if(i.kind!=="dictionary"){i.type.kind==="oneof"&&Je.oneOfValues(i.type).forEach(a=>yo.add(n,a,a));continue}for(let a of Object.keys(i.map)){isNaN(a)&&yo.add(r,a,a);let A=i.map[a];A.type.kind==="oneof"&&Je.oneOfValues(A.type).forEach(s=>yo.add(n,s,s))}}return{symbolList:e,symbolMap:t,namedArgs:r.array,constants:n.array}})();var XMr=Pk.constants,ZMr=Pk.namedArgs,av=Pk.symbolMap,qMr=Pk.symbolList;function UR(e){if(os.isLiteral(e))return e;if(os.isSymbol(e)){if(!av[e.name])return e;let a=av[e.name];if(a.kind==="alias")return os.Symbol(av[e.name].symbol.id);throw a.translate([])}let t=os.isSymbol(e.head)&&!!av[e.head.name]&&av[e.head.name].kind==="macro",r=t?e.head:UR(e.head),n=r!==e.head;if(!e.args)return t?UR(e.head):n?os.Apply(r):e;let o=!1,i;if(os.isArgumentsArray(e.args)){i=[];for(let a=0,A=e.args.length;a<A;a++){let s=e.args[a],c=UR(s);s!==c&&(o=!0),i[i.length]=c}if(o||(i=e.args),!t&&!n&&!o)return e}else{i={};for(let a of Object.keys(e.args)){let A=e.args[a],s=UR(A);A!==s&&(o=!0),i[a]=s}if(!t&&!n&&!o)return e;o||(i=e.args)}if(t){let a=av[e.head.name];return a.kind!=="macro"?os.Apply(r,i):a.translate(i)}return os.Apply(r,i)}function A0e(e){return UR(e)}var mt=class e{constructor(t){this._=t}parse(t){let r=this.skip(e.eof)._(t,0);return r.status?{success:!0,value:r.value}:{success:!1,index:s0e(t,r.furthest),expected:r.expected}}tryParse(t){let r=this.parse(t);if(r.success)return r.value;{let n=yAt(t,r);throw new Error(n)}}or(t){return e.alt(this,t)}trim(t){return this.wrap(t,t)}wrap(t,r){return rW(1,typeof t=="string"?e.string(t):t,this,typeof r=="string"?e.string(r):r)}thru(t){return t(this)}then(t){return rW(1,this,t)}many(){return new e((t,r)=>{let n=[],o;for(;;)if(o=bp(this._(t,r),o),o.status){if(r===o.index)throw new Error("infinite loop detected in .many() parser --- calling .many() on a parser which can accept zero characters is usually the cause");r=o.index,n.push(o.value)}else return bp(Ju(r,n),o)})}times(t,r){let n=typeof r>"u"?t:r;return new e((o,i)=>{let a=[],A,s,c;for(c=0;c<t;c++)if(A=this._(o,i),s=bp(A,s),A.status)i=A.index,a.push(A.value);else return s;for(;c<n&&(A=this._(o,i),s=bp(A,s),A.status);c+=1)i=A.index,a.push(A.value);return bp(Ju(i,a),s)})}result(t){return this.map(()=>t)}atMost(t){return this.times(0,t)}atLeast(t){return e.seq(this.times(t),this.many()).map(r=>[...r[0],...r[1]])}map(t){return new e((r,n)=>{let o=this._(r,n);return o.status?bp(Ju(o.index,t(o.value)),o):o})}skip(t){return rW(0,this,t)}mark(){return e.seq(e.index,this,e.index).map(t=>({start:t[0],value:t[1],end:t[2]}))}node(t){return e.seq(e.index,this,e.index).map(r=>({name:t,start:r[0],value:r[1],end:r[2]}))}sepBy(t){return e.sepBy(this,t)}sepBy1(t){return e.sepBy1(this,t)}lookahead(t){return this.skip(e.lookahead(t))}notFollowedBy(t){return this.skip(e.notFollowedBy(t))}desc(t){return new e((r,n)=>{let o=this._(r,n);return o.status||(o.expected=[t]),o})}fallback(t){return this.or(e.succeed(t))}ap(t){return e.seq(t,this).map(([r,n])=>r(n))}chain(t){return new e((r,n)=>{let o=this._(r,n);if(!o.status)return o;let i=t(o.value);return bp(i._(r,o.index),o)})}};(_=>{function e(M,q,ne){let oe=[].slice.call(arguments);if(oe.length===0)throw new Error("seqMap needs at least one argument");let ae=oe.pop();if(typeof ae!="function")throw new Error("not a function: "+ae);return r.apply(null,oe).map(function(me){return ae.apply(null,me)})}_.seqMap=e;function t(M){let q={};for(let ne of Object.keys(M))(function(oe){q[oe]=y(()=>M[oe](q))})(ne);return q}_.createLanguage=t;function r(...M){let q=M.length;return new _((ne,oe)=>{let ae,me=new Array(q),Se=oe;for(let ee=0;ee<q;ee++){if(ae=bp(M[ee]._(ne,Se),ae),!ae.status)return ae;me[ee]=ae.value,Se=ae.index}return bp(Ju(Se,me),ae)})}_.seq=r;function n(...M){return M.length===0?u("zero alternates"):new _((ne,oe)=>{let ae;for(let me=0;me<M.length;me++)if(ae=bp(M[me]._(ne,oe),ae),ae.status)return ae;return ae})}_.alt=n;function o(M,q){return i(M,q).or(l([]))}_.sepBy=o;function i(M,q){let ne=q.then(M).many();return r(M,ne).map(oe=>[oe[0],...oe[1]])}_.sepBy1=i;function a(M){let q=`'${M}'`;if(M.length===1){let ne=M.charCodeAt(0);return new _((oe,ae)=>oe.charCodeAt(ae)===ne?Ju(ae+1,M):vh(ae,q))}return new _((ne,oe)=>{let ae=oe+M.length;return ne.slice(oe,ae)===M?Ju(ae,M):vh(oe,q)})}_.string=a;function A(M){let q=""+M;return q.slice(q.lastIndexOf("/")+1)}function s(M){return RegExp("^(?:"+M.source+")",A(M))}function c(M,q=0){let ne=s(M),oe=""+M;return new _((ae,me)=>{let Se=ne.exec(ae.slice(me));if(Se){if(0<=q&&q<=Se.length){let O=Se[0],X=Se[q];return Ju(me+O.length,X)}let ee=`invalid match group (0 to ${Se.length}) in ${oe}`;return vh(me,ee)}return vh(me,oe)})}_.regexp=c;function l(M){return new _((q,ne)=>Ju(ne,M))}_.succeed=l;function u(M){return new _((q,ne)=>vh(ne,M))}_.fail=u;function g(M){if(EAt(M))return new _((q,ne)=>{let oe=M._(q,ne);return oe.status&&(oe.index=ne,oe.value=null),oe});if(typeof M=="string")return g(a(M));if(M instanceof RegExp)return g(c(M));throw new Error("not a string, regexp, or parser: "+M)}_.lookahead=g;function m(M){return new _((q,ne)=>{let oe=M._(q,ne);return oe.status?vh(ne,'not "'+q.slice(ne,oe.index)+'"'):Ju(ne,null)})}_.notFollowedBy=m;function p(M){return new _((q,ne)=>{let oe=q.charAt(ne);return ne<q.length&&M(oe)?Ju(ne+1,oe):vh(ne,"a character "+M)})}_.test=p;function d(M){return p(q=>M.indexOf(q)>=0)}_.oneOf=d;function f(M){return p(q=>M.indexOf(q)<0)}_.noneOf=f;function I(M,q){return p(ne=>M<=ne&&ne<=q).desc(M+"-"+q)}_.range=I;function C(M){return new _((q,ne)=>{let oe=ne;for(;oe<q.length&&M(q.charAt(oe));)oe++;return Ju(oe,q.slice(ne,oe))})}_.takeWhile=C;function y(M){let q=new _((ne,oe)=>{let ae=M()._;return q._=ae,ae(ne,oe)});return q}_.lazy=y;function Q(){return u("empty")}_.empty=Q,_.index=new _(function(M,q){return Ju(q,s0e(M,q))}),_.anyChar=new _((M,q)=>q>=M.length?vh(q,"any character"):Ju(q+1,M.charAt(q))),_.all=new _(function(M,q){return Ju(M.length,M.slice(q))}),_.eof=new _(function(M,q){return q<M.length?vh(q,"EOF"):Ju(q,null)}),_.digit=c(/[0-9]/).desc("a digit"),_.digits=c(/[0-9]*/).desc("optional digits"),_.letter=c(/[a-z]/i).desc("a letter"),_.letters=c(/[a-z]*/i).desc("optional letters"),_.optWhitespace=c(/\s*/).desc("optional whitespace"),_.whitespace=c(/\s+/).desc("whitespace"),_.cr=a("\r"),_.lf=a(`
|
|
`),_.crlf=a(`\r
|
|
`),_.newline=n(_.crlf,_.lf,_.cr).desc("newline"),_.end=n(_.newline,_.eof);function H(M){return l(M)}_.of=H;function z(M){return c(M)}_.regex=z})(mt||={});function rW(e,...t){let r=t.length;return new mt((n,o)=>{let i,a,A=o;for(let s=0;s<r;s++){if(i=bp(t[s]._(n,A),i),!i.status)return i;e===s&&(a=i.value),A=i.index}return bp(Ju(A,a),i)})}function Ju(e,t){return{status:!0,index:e,value:t}}function vh(e,t){return{status:!1,furthest:e,expected:[t]}}function bp(e,t){if(!t||e.status||t.status||e.furthest>t.furthest)return e;let r=e.furthest===t.furthest?QAt(e.expected,t.expected):t.expected;return{status:e.status,furthest:t.furthest,expected:r}}function s0e(e,t){let r=e.slice(0,t).split(`
|
|
`),n=r.length,o=r[r.length-1].length+1;return{offset:t,line:n,column:o}}function CAt(e){return e.length===1?e[0]:"one of "+e.join(", ")}function hAt(e,t){let r=t.index,n=r.offset;if(n===e.length)return", got the end of the input";let o=n>0?"'...":"'",i=e.length-n>12?"...'":"'";return` at line ${r.line} column ${r.column}, got ${o}${e.slice(n,n+12)}${i}`}function yAt(e,t){return`expected ${CAt(t.expected)}${hAt(e,t)}`}function QAt(e,t){let r=e.length,n=t.length;if(r===0)return t;if(n===0)return e;let o=new Set,i=[];for(let a=0;a<r;a++)o.has(e[a])||(i[i.length]=e[a],o.add(e[a]));for(let a=0;a<n;a++)o.has(t[a])||(i[i.length]=t[a],o.add(t[a]));return i.sort(),i}function EAt(e){return e instanceof mt}function c0e(e){return l0e.parse(e)}var l0e;(y=>{let e;(S=>{function Q(w){return{kind:"string",value:w}}S.str=Q;function E(w){return{kind:"symbol",value:w}}S.symb=E;function b(w,R){return{kind:"list",bracket:w,nodes:R}}S.list=b;function x(w){return{kind:"comment",value:w}}S.comment=x})(e||={});let t=mt.regexp(/[\n\r\s]*/),r=mt.lazy(()=>mt.alt(n,l,o,i).trim(t)),n=mt.takeWhile(Q=>Q!=="`").trim("`").map(e.str),o=mt.regexp(/[^()\[\]{};`,\n\r\s]+/).map(e.symb),i=mt.regexp(/\s*;+([^\n\r]*)\n/,1).map(e.comment),a=r.many(),A=a.wrap("(",")").map(Q=>e.list("(",Q)),s=a.wrap("[","]").map(Q=>e.list("[",Q)),c=a.wrap("{","}").map(Q=>e.list("{",Q)),l=mt.alt(A,s,c),u=r.many();function g(Q){return u.tryParse(Q)}function m(Q){switch(Q.kind){case"string":return Q.value;case"symbol":{let E=Q.value;if(E.length>1)switch(E.charAt(0)){case".":return ce.atomName(E.substr(1));case"_":return ce.struct.type.elementSymbol([E.substr(1)])}return E==="true"?!0:E==="false"?!1:I(E)?+E:os.Symbol(E)}case"list":switch(Q.bracket){case"[":return ce.core.type.list(f(Q.nodes).map(m));case"{":return ce.core.type.set(f(Q.nodes).map(m));case"(":{if(Q.nodes[0].kind==="comment")throw new Error("Invalid expression");let E=m(Q.nodes[0]);return os.Apply(E,p(Q.nodes))}default:Or(Q.bracket)}default:Or(Q)}}function p(Q){if(Q.length<=1)return;if(!d(Q)){let S=[];for(let w=1,R=Q.length;w<R;w++){let T=Q[w];T.kind!=="comment"&&(S[S.length]=m(T))}return S}let E={},b=!0,x=0;for(let S=1,w=Q.length;S<w;S++){let R=Q[S];if(R.kind!=="comment")if(R.kind==="symbol"&&R.value.length>1&&R.value.charAt(0)===":"){let T=R.value.substr(1);for(++S;S<w&&Q[S].kind==="comment";)S++;if(S>=w)throw new Error(`There must be a value foolowed a named arg ':${T}'.`);if(Q[S].kind==="comment")throw new Error("Invalid expression");E[T]=m(Q[S]),isNaN(+T)&&(b=!1)}else E[x++]=m(R)}if(b){let S=Object.keys(E).map(R=>+R).sort((R,T)=>R-T),w=!0;for(let R=0,T=S.length;R<T;R++)if(S[R]!==R){w=!1;break}if(w){let R=[];for(let T=0,L=S.length;T<L;T++)R[T]=E[T];return R}}return E}function d(Q){for(let E=1,b=Q.length;E<b;E++){let x=Q[E];if(x.kind==="symbol"&&x.value.length>1&&x.value.charAt(0)===":")return!0}return!1}function f(Q){let E=!1;for(let b=0,x=Q.length;b<x;b++)if(Q[b].kind==="comment"){E=!0;break}return E?Q.filter(b=>b.kind!=="comment"):Q}function I(Q){return/-?(0|[1-9][0-9]*)([.][0-9]+)?([eE][+-]?[0-9]+)?/.test(Q)&&!isNaN(+Q)}function C(Q){let E=g(Q),b=[];for(let x of E)x.kind!=="comment"&&(b[b.length]=m(x));return b}y.parse=C})(l0e||={});var Aa=ce;function Xc(e,t,r){let n=mt.lazy(()=>mt.seq(e,n).map(o=>r(...o)).or(t));return n}function LR(e,t,r){return mt.seqMap(t,e.many(),(n,o)=>o.reduce((i,a)=>r(a,i),n))}function hc(e,t,r){return mt.seqMap(t,mt.seq(e,t).many(),(n,o)=>o.reduce((i,a)=>{let[A,s]=a;return r(A,i,s)},n))}function GQ(e,t){return e.reduce((n,o)=>{let i=o.isUnsupported?Fh(`operator '${o.name}' not supported`):o.map;return o.type(o.rule,n,i)},t)}function xp(e,t=0){return mt.optWhitespace.then(mt.regexp(e,t).skip(mt.optWhitespace))}function wg(e,t=0){return mt.regexp(e,t).skip(mt.optWhitespace)}function TR(e,t=0){return mt.optWhitespace.then(mt.regexp(e,t))}function Gk(e,t){let r=t?`${e}|${eh(t)}`:e,n=RegExp(`(${r})\\s+([-+]?[0-9]*\\.?[0-9]+)\\s+OF`,"i");return xp(n,2).map(parseFloat)}function Fh(e){return function(){throw new Error(e)}}function PR(e){return e.length===1?e[0]:e.length>1?Aa.core.logic.and(e):void 0}function g0e(e){return e.length===1?e[0]:e.length>1?Aa.core.logic.or(e):void 0}function nW(e,t){if(t&&t.op!==void 0&&t.val!==void 0){let r=[e,t.val];switch(t.op){case"=":return Aa.core.rel.eq(r);case"!=":return Aa.core.rel.neq(r);case">":return Aa.core.rel.gr(r);case"<":return Aa.core.rel.lt(r);case">=":return Aa.core.rel.gre(r);case"<=":return Aa.core.rel.lte(r);default:throw new Error(`operator '${t.op}' not supported`)}}else return t&&t.flags!==void 0?Aa.core.flags.hasAny([e,t.flags]):t&&t.min!==void 0&&t.max!==void 0?Aa.core.rel.inRange([e,t.min,t.max]):Array.isArray(t)?t.length>1?Aa.core.set.has([Aa.core.type.set(t),e]):Aa.core.rel.eq([e,t[0]]):Aa.core.rel.eq([e,t])}function Rl(e){return Aa.struct.generator.queryInSelection({0:e,query:Aa.struct.generator.all(),"in-complement":!0})}function xm(e,t){return e.length<t.length?1:-1}function oW(e,t){let r=(t?[e].concat(t):[e]).sort(xm).map(eh).join("|");return RegExp(`${r}`,"i")}function m0e(e){let t={};return Object.keys(e).sort(xm).forEach(r=>{let n=e[r],o=Fh(`property '${r}' not supported`),i=mt.regexp(n.regex).map(a=>(n.isUnsupported&&o(),nW(n.property,n.map(a))));n.isNumeric||(t[r]=i)}),t}function Nk(e){let t=[];return Object.keys(e).sort(xm).forEach(r=>{let n=e[r],o=Fh(`property '${r}' not supported`),i=mt.regexp(n.regex).map(s=>(n.isUnsupported&&o(),nW(n.property,n.map(s)))),a=mt.regexp(oW(r,n.abbr)).trim(mt.optWhitespace),A=s=>Aa.struct.generator.atomGroups({[n.level]:s});n.isNumeric?t.push(a.then(mt.seq(mt.regexp(/>=|<=|=|!=|>|</).trim(mt.optWhitespace),mt.regexp(n.regex).map(n.map))).map(s=>(n.isUnsupported&&o(),nW(n.property,{op:s[0],val:s[1]}))).map(A)):t.push(a.then(i).map(A))}),t}function Av(e){let t=[];return Object.keys(e).sort(xm).forEach(r=>{let n=e[r],o=n.map?n.map:Fh(`keyword '${r}' not supported`),i=mt.regexp(oW(r,n.abbr)).map(o);t.push(i)}),t}function d0e(e,t){let r=[],n=mt.regexp(/\(\s*/),o=mt.regexp(/\s*\)/);return Object.keys(e).sort(xm).forEach(i=>{let a=e[i],A=a.map?a.map:Fh(`function '${i}' not supported`),s=mt.regexp(new RegExp(i,"i")).skip(n).then(t).skip(o).map(A);r.push(s)}),r}function GR(e,t){let r=[];return Object.keys(e).sort(xm).forEach(n=>{let o=e[n],i=Fh(`property '${n}' not supported`),a=mt.regexp(oW(n,o.abbr)).lookahead(t).map(()=>(o.isUnsupported&&i(),o.property));r.push(a)}),r}function sv(e,t,r,n){let o=[];for(let i in e)o.push(i),e[i].abbr&&o.push(...e[i].abbr);for(let i in t)o.push(i),t[i].abbr&&o.push(...t[i].abbr);return r.forEach(i=>{o.push(i.name),i.abbr&&o.push(...i.abbr)}),o}function Bd(e){return Aa.core.type.set(e.map(Aa.atomName))}function Id(e){return Aa.struct.generator.queryInSelection({0:e,query:Aa.struct.generator.all()})}function k0(e,t,r){switch(e.head.name){case"structure-query.atom-property.macromolecular.label_atom_id":return Aa.atomName(t);case"structure-query.atom-property.core.element-symbol":return Aa.es(t);case"structure-query.atom-property.macromolecular.secondary-structure-flags":return r&&(t=[r[t.toUpperCase()]||"none"]),Aa.struct.type.secondaryStructureFlags([t]);default:return t}}var u0e="structure-query.atom-property.macromolecular.",bAt=["entityKey","label_entity_id","entityType"],xAt=["chainKey","label_asym_id","label_entity_id","auth_asym_id","entityType"],SAt=["residueKey","label_comp_id","label_seq_id","auth_comp_id","auth_seq_id","pdbx_formal_charge","secondaryStructureKey","secondaryStructureFlags","isModified","modifiedParentName"];function p0e(e){if(e.head.name.startsWith(u0e)){let t=e.head.name.substr(u0e.length);if(bAt.includes(t))return"entity-test";if(xAt.includes(t))return"chain-test";if(SAt.includes(t))return"residue-test"}return"atom-test"}var DAt=["structure-query.atom-property.macromolecular.secondary-structure-flags"];function f0e(e,t){if(DAt.includes(e.head.name)){let r=t[0].head,n=[];return t.forEach(o=>n.push(...o.args[0])),Aa.core.flags.hasAny([e,{head:r,args:n}])}else{if(t.length===1)return Aa.core.rel.eq([e,t[0]]);if(t.length>1)return Aa.core.set.has([Aa.core.type.set(t),e])}}function Lo(e){return Aa.struct.generator.atomGroups({"residue-test":Aa.core.set.has([Aa.core.type.set(e),Aa.ammp("label_comp_id")])})}var As=ce,Sp=/[-+]?[0-9]*\.?[0-9]+/,NR=/[0-9]+/;function In(e){return e}var vAt={none:"none",turn:"turn",sheet:"beta",helix:"helix",dna:"dna",rna:"rna",carbohydrate:"carbohydrate",helix310:"3-10",helixalpha:"alpha",helixpi:"pi",0:"none",1:"turn",2:"beta",3:"helix",4:"dna",5:"rna",6:"carbohydrate",7:"3-10",8:"alpha",9:"pi"};function iW(e){if(e.head){if(e.head.name&&e.head.name==="core.type.regex"&&(e=e.args[0].replace(/^\^|\$$/g,"")),e=vAt[e.toString().toLowerCase()]||"none",["dna","rna","carbohydrate"].indexOf(e)!==-1)throw new Error("values 'dna', 'rna', 'carbohydrate' not yet supported for 'structure' property");return As.struct.type.secondaryStructureFlags([e])}}var aW={adpmax:{"@desc":"the maximum anisotropic displacement parameter for the selected atom","@examples":[""],isUnsupported:!0,regex:Sp,map:e=>parseFloat(e),level:"atom-test"},adpmin:{"@desc":"the minimum anisotropic displacement parameter for the selected atom","@examples":[""],isUnsupported:!0,regex:Sp,map:e=>parseFloat(e),level:"atom-test"},altloc:{"@desc":"PDB alternate location identifier","@examples":["altloc = A"],regex:/[a-zA-Z0-9]/,map:In,level:"atom-test",property:As.ammp("label_alt_id")},altname:{"@desc":"an alternative name given to atoms by some file readers (for example, P2N)","@examples":[""],isUnsupported:!0,regex:/[a-zA-Z0-9]/,map:In,level:"atom-test"},atomID:{"@desc":"special atom IDs for PDB atoms assigned by Jmol","@examples":[""],isUnsupported:!0,regex:NR,map:e=>parseInt(e),level:"atom-test"},atomIndex:{"@desc":"atom 0-based index; a unique number for each atom regardless of the number of models loaded","@examples":[""],isUnsupported:!0,regex:NR,map:e=>parseInt(e),level:"atom-test"},atomName:{"@desc":"atom name","@examples":["atomName = CA"],regex:/[a-zA-Z0-9]+/,map:e=>As.atomName(e),level:"atom-test",property:As.ammp("label_atom_id")},atomno:{"@desc":'sequential number; you can use "@" instead of "atomno=" -- for example, select @33 or Var x = @33 or @35',"@examples":[""],isUnsupported:!0,regex:NR,map:e=>parseInt(e),level:"atom-test"},atomType:{"@desc":"atom type (mol2, AMBER files) or atom name (other file types)","@examples":["atomType = OH"],regex:/[a-zA-Z0-9]+/,map:e=>As.atomName(e),level:"atom-test",property:As.ammp("label_atom_id")},atomX:{"@desc":"Cartesian X coordinate (or just X)","@examples":["x = 4.2"],abbr:["X"],isNumeric:!0,regex:Sp,map:e=>parseFloat(e),level:"atom-test",property:As.acp("x")},atomY:{"@desc":"Cartesian Y coordinate (or just Y)","@examples":["y < 42"],abbr:["Y"],isNumeric:!0,regex:Sp,map:e=>parseFloat(e),level:"atom-test",property:As.acp("y")},atomZ:{"@desc":"Cartesian Z coordinate (or just Z)","@examples":["Z > 10"],abbr:["Z"],isNumeric:!0,regex:Sp,map:e=>parseFloat(e),level:"atom-test",property:As.acp("z")},bondcount:{"@desc":"covalent bond count","@examples":["bondcount = 0"],isNumeric:!0,regex:NR,map:e=>parseInt(e),level:"atom-test",property:As.acp("bondCount")},bondingRadius:{"@desc":"radius used for auto bonding; synonymous with ionic and ionicRadius","@examples":[""],abbr:["ionic","ionicRadius"],isUnsupported:!0,regex:Sp,map:e=>parseFloat(e),level:"atom-test"},cell:{"@desc":'crystallographic unit cell, expressed either in lattice integer notation (111-999) or as a coordinate in ijk space, where {1 1 1} is the same as 555. ANDing two cells, for example select cell=555 and cell=556, selects the atoms on the common face. (Note: in the specifc case of CELL, only "=" is allowed as a comparator.)',"@examples":[""],isUnsupported:!0,regex:/[0-9\s{}-]+/,map:In,level:"atom-test"},configuration:{"@desc":'Only in the context {configuration=n}, this option selects the set of atoms with either no ALTLOC specified or those atoms having this index into the array of altlocs within its model. So, for example, if the model has altloc "A" and "B", select configuration=1 is equivalent to select altloc="" or altloc="A", and print {configuration=2} is equivalent to print {altloc="" or altloc="B"}. Configuration 0 is "all atoms in a model having configurations", and an invalid configuration number gives no atoms. (Note: in the specifc case of CONFIGURATION, only "=" is allowed as a comparator.)',"@examples":[""],isUnsupported:!0,regex:NR,map:e=>parseInt(e),level:"atom-test"},chain:{"@desc":'protein chain. For newer CIF files allowing multicharacter chain specifications, use quotations marks: select chain="AA". For these multicharacter desigations, case is not checked unless the CIF file has lower-case chain designations.',"@examples":["chain = A",'chain = "AA"'],regex:/[a-zA-Z0-9]+/,map:In,level:"chain-test",property:As.ammp("auth_asym_id")},chainNo:{"@desc":'chain number; sequentially counted from 1 for each model; chainNo == 0 means"no chain" or PDB chain identifier indicated as a blank (Jmol 14.0).',"@examples":[""],isUnsupported:!0,regex:/[0-9\s{}-]+/,map:In,level:"atom-test"},color:{"@desc":"the atom color","@examples":[""],isUnsupported:!0,regex:/[0-9\s{}-]+/,map:In,level:"atom-test"},covalentRadius:{"@desc":"covalent bonding radius, synonymous with covalent. Not used by Jmol, but could be used, for example, in {*}.spacefill={*}.covalentRadius.all.","@examples":[""],abbr:["covalent"],isUnsupported:!0,regex:/[0-9\s{}-]+/,map:In,level:"atom-test"},cs:{"@desc":"chemical shift calculated using computational results that include magnetic shielding tensors.","@examples":[""],isUnsupported:!0,regex:/[0-9\s{}-]+/,map:In,level:"atom-test"},element:{"@desc":'element symbol. The value of this parameter depends upon the context. Used with select structure=x, x can be either the quoted element symbol, "H", "He", "Li", etc. or atomic number. In all other contexts, the value is the element symbol. When the atom is a specific isotope, the string will contain the isotope number -- "13C", for example.',"@examples":["element=Fe"],regex:/[a-zA-Z]+/,map:e=>As.es(e),level:"atom-test",property:As.acp("elementSymbol")},elemno:{"@desc":"atomic element number","@examples":["elemno=8"],regex:/[0-9\s{}-]+/,map:e=>parseInt(e),level:"atom-test",property:As.acp("atomicNumber")},eta:{"@desc":`Based on Carlos M. Duarte, Leven M. Wadley, and Anna Marie Pyle, RNA structure comparison, motif search and discovery using a reduced representation of RNA conformational space, Nucleic Acids Research, 2003, Vol. 31, No. 16 4755-4761. The parameter eta is the C4'[i-1]-P[i]-C4'[i]-P[i+1] dihedral angle; theta is the P[i]-C4'[i]-P[i+1]-C4'[i+1] dihedral angle. Both are measured on a 0-360 degree scale because they are commonly near 180 degrees. Using the commands plot PROPERTIES eta theta resno; select visible;wireframe only one can create these authors' "RNA worm" graph.`,"@examples":[""],isUnsupported:!0,regex:/[0-9\s{}-]+/,map:In,level:"atom-test"},theta:{"@desc":`Based on Carlos M. Duarte, Leven M. Wadley, and Anna Marie Pyle, RNA structure comparison, motif search and discovery using a reduced representation of RNA conformational space, Nucleic Acids Research, 2003, Vol. 31, No. 16 4755-4761. The parameter eta is the C4'[i-1]-P[i]-C4'[i]-P[i+1] dihedral angle; theta is the P[i]-C4'[i]-P[i+1]-C4'[i+1] dihedral angle. Both are measured on a 0-360 degree scale because they are commonly near 180 degrees. Using the commands plot PROPERTIES eta theta resno; select visible;wireframe only one can create these authors' "RNA worm" graph.`,"@examples":[""],isUnsupported:!0,regex:/[0-9\s{}-]+/,map:In,level:"atom-test"},file:{"@desc":"file number containing this atom","@examples":[""],isUnsupported:!0,regex:/[0-9\s{}-]+/,map:In,level:"atom-test"},formalCharge:{"@desc":"formal charge","@examples":["formalCharge=1"],regex:Sp,map:e=>parseFloat(e),level:"atom-test",property:As.ammp("pdbx_formal_charge")},format:{"@desc":"format (label) of the atom.","@examples":[""],isUnsupported:!0,regex:/[0-9\s{}-]+/,map:In,level:"atom-test"},fXyz:{"@desc":"fractional XYZ coordinates","@examples":[""],isUnsupported:!0,regex:/[0-9\s{}-]+/,map:In,level:"atom-test"},fX:{"@desc":"fractional X coordinate","@examples":[""],isUnsupported:!0,regex:/[0-9\s{}-]+/,map:In,level:"atom-test"},fY:{"@desc":"fractional Y coordinate","@examples":[""],isUnsupported:!0,regex:/[0-9\s{}-]+/,map:In,level:"atom-test"},fZ:{"@desc":"fractional Z coordinate","@examples":[""],isUnsupported:!0,regex:/[0-9\s{}-]+/,map:In,level:"atom-test"},fuxyz:{"@desc":"fractional XYZ coordinates in the unitcell coordinate system","@examples":[""],isUnsupported:!0,regex:/[0-9\s{}-]+/,map:In,level:"atom-test"},fux:{"@desc":"fractional X coordinate in the unitcell coordinate system","@examples":[""],isUnsupported:!0,regex:/[0-9\s{}-]+/,map:In,level:"atom-test"},fuy:{"@desc":"fractional Y coordinate in the unitcell coordinate system","@examples":[""],isUnsupported:!0,regex:/[0-9\s{}-]+/,map:In,level:"atom-test"},fuz:{"@desc":"fractional Z coordinate in the unit cell coordinate system","@examples":[""],isUnsupported:!0,regex:/[0-9\s{}-]+/,map:In,level:"atom-test"},group:{"@desc":"3-letter residue code","@examples":["group = ALA"],regex:/[a-zA-Z0-9]{1,3}/,map:In,level:"residue-test",property:As.ammp("label_comp_id")},group1:{"@desc":"single-letter residue code (amino acids only)","@examples":["group1 = G"],regex:/[a-zA-Z]/,map:In,level:"residue-test",property:As.ammp("label_comp_id")},groupID:{"@desc":"group ID number: A unique ID for each amino acid or nucleic acid residue in a PDB file. 0 noGroup 1-5 ALA, ARG, ASN, ASP, CYS 6-10 GLN, GLU, GLY, HIS, ILE 11-15 LEU, LYS, MET, PHE, PRO 16-20 SER, THR, TRP, TYR, VAL 21-23 ASX, GLX, UNK 24-29 A, +A, G, +G, I, +I 30-35 C, +C, T, +T, U, +U Additional unique numbers are assigned arbitrarily by Jmol and cannot be used reproducibly.","@examples":[""],isUnsupported:!0,regex:/[0-9\s{}-]+/,map:In,level:"atom-test"},groupindex:{"@desc":"overall group index","@examples":[""],isUnsupported:!0,regex:/[0-9\s{}-]+/,map:In,level:"atom-test"},hydrophobicity:{"@desc":"Aminoacid residue scale of hydrophobicity based on Rose, G. D., Geselowitz, A. R., Lesser, G. J., Lee, R. H., and Zehfus, M. H. (1985). Hydrophobicity of amino acid residues in globular proteins, Science, 229(4716):834-838.","@examples":[""],isUnsupported:!0,regex:/[0-9\s{}-]+/,map:In,level:"atom-test"},identify:{"@desc":"for a PDB/mmCIF file, a label such as [ILE]7^1:A.CD1%A/3 #47, which includes the group ([ILE]), residue number with optional insertion code (7^1), chain (:A), atom name (CD1), alternate location if present (%A), PDB model number (/3, for NMR models when one file is loaded; /file.model such as /2.3 if more than one file is loaded), and atom number (#47). For non-PDB data, the information is shorter -- for example, H15/2.1 #6, indicating atom name (H15), full file.model number (/2.1), and atom number (#6). If only a single model is loaded, %[identify] does not include the model number.","@examples":[""],isUnsupported:!0,regex:/[0-9\s{}-]+/,map:In,level:"atom-test"},insertion:{"@desc":"protein residue insertion code","@examples":["insertion=A"],regex:/[a-zA-Z0-9]/,map:In,level:"atom-test",property:As.ammp("pdbx_PDB_ins_code")},label:{"@desc":"current atom label (same as format)","@examples":[""],isUnsupported:!0,regex:/[0-9\s{}-]+/,map:In,level:"atom-test"},mass:{"@desc":"atomic mass -- especially useful with appended .max or .sum","@examples":["mass > 13"],regex:Sp,map:e=>parseFloat(e),level:"atom-test",property:As.acp("mass")},model:{"@desc":"model number","@examples":[""],isUnsupported:!0,regex:/[0-9\s{}-]+/,map:In,level:"atom-test"},modelindex:{"@desc":"a unique number for each model, starting with 0 and spanning all models in all files","@examples":[""],isUnsupported:!0,regex:/[0-9\s{}-]+/,map:In,level:"atom-test"},modO:{"@desc":"currently calculated occupancy from modulation (0 to 100; NaN if atom has no occupancy modulation)","@examples":[""],isUnsupported:!0,regex:/[0-9\s{}-]+/,map:In,level:"atom-test"},modXYZ:{"@desc":"currently calculated displacement modulation (for incommensurately modulated structures). Also modX, modY, modZ for individual components. For atoms without modultion, {xx}.modXYZ is -1 and {xx}.modX is NaN, and in a label %[modXYZ] and %[modX] are blank.","@examples":[""],isUnsupported:!0,regex:/[0-9\s{}-]+/,map:In,level:"atom-test"},molecule:{"@desc":"molecule number","@examples":[""],isUnsupported:!0,regex:/[0-9\s{}-]+/,map:In,level:"atom-test"},monomer:{"@desc":"monomer number (group number) in a polymer (usually a chain), starting with 1, or 0 if not part of a biopolymer -- that is, not a connected carbohydrate, amino acid, or nucleic acid (Jmol 14.3.15)","@examples":[""],isUnsupported:!0,regex:/[0-9\s{}-]+/,map:In,level:"atom-test"},ms:{"@desc":"magnetic shielding calculated from file-loaded tensors.","@examples":[""],isUnsupported:!0,regex:/[0-9\s{}-]+/,map:In,level:"atom-test"},occupancy:{"@desc":'CIF file site occupancy. In SELECT command comparisons ("select occupancy < 90"), an integer n implies measurement on a 0-100 scale; also, in the context %[occupancy] or %q for a label, the reported number is a percentage. In all other cases, such as when %Q is used in a label or when a decimal number is used in a comparison, the scale is 0.0 - 1.0.',"@examples":["occupancy < 1"],regex:Sp,map:e=>parseFloat(e),level:"atom-test",property:As.ammp("occupancy")},partialCharge:{"@desc":"partial charge","@examples":[""],isUnsupported:!0,regex:Sp,map:e=>parseFloat(e),level:"atom-test"},phi:{"@desc":"protein group PHI angle for atom's residue","@examples":[""],isUnsupported:!0,regex:/[0-9\s{}-]+/,map:In,level:"atom-test"},polymer:{"@desc":"sequential polymer number in a model, starting with 1.","@examples":[""],isUnsupported:!0,regex:/[0-9\s{}-]+/,map:In,level:"atom-test"},polymerLength:{"@desc":"polymer length","@examples":[""],isUnsupported:!0,regex:/[0-9\s{}-]+/,map:In,level:"atom-test"},property_xx:{"@desc":"a property created using the DATA command","@examples":[""],isUnsupported:!0,regex:/[0-9\s{}-]+/,map:In,level:"atom-test"},psi:{"@desc":"protein group PSI angle for the atom's residue","@examples":[""],isUnsupported:!0,regex:/[0-9\s{}-]+/,map:In,level:"atom-test"},radius:{"@desc":'currently displayed radius -- In SELECT command comparisons ("select radius=n"), integer n implies Rasmol units 1/250 Angstroms; in all other cases or when a decimal number is used, the units are Angstroms.',"@examples":[""],isUnsupported:!0,regex:/[0-9\s{}-]+/,map:In,level:"atom-test"},resno:{"@desc":"PDB residue number, not including insertion code (see also seqcode, below)","@examples":["resno = 100"],regex:/-?[0-9]+/,map:e=>parseInt(e),level:"residue-test",property:As.ammp("auth_seq_id")},selected:{"@desc":"1.0 if atom is selected; 0.0 if not","@examples":[""],isUnsupported:!0,regex:/[0-9\s{}-]+/,map:In,level:"atom-test"},sequence:{"@desc":'PDB one-character sequence code, as a string of characters, with "?" indicated where single-character codes are not available',"@examples":[""],isUnsupported:!0,regex:/[0-9\s{}-]+/,map:In,level:"atom-test"},seqcode:{"@desc":'PDB residue number, including insertion code (for example, 234^2; "seqcode" option added in Jmol 14.3.16)',"@examples":[""],isUnsupported:!0,regex:/[0-9\s{}-]+/,map:In,level:"atom-test"},seqid:{"@desc":"(mmCIF only) the value from _atom_site.label_seq_id; a pointer to _entity_poly_seq.num in the ENTITY_POLY_SEQ category specifying the sequence of monomers in a polymer. Allowance is made for the possibility of microheterogeneity in a sample by allowing a given sequence number to be correlated with more than one monomer id. (Jmol 14.2.3)","@examples":[""],isUnsupported:!0,regex:/[0-9\s{}-]+/,map:In,level:"atom-test"},shape:{"@desc":'hybridization geometry such as "tetrahedral"',"@examples":[""],isUnsupported:!0,regex:/[0-9\s{}-]+/,map:In,level:"atom-test"},site:{"@desc":"crystallographic site number","@examples":[""],isUnsupported:!0,regex:/[0-9\s{}-]+/,map:In,level:"atom-test"},spacefill:{"@desc":"currently displayed radius","@examples":[""],isUnsupported:!0,regex:/[0-9\s{}-]+/,map:In,level:"atom-test"},straightness:{"@desc":'quaternion-derived straightness (second derivative of the quaternion describing the orientation of the residue. This quantity will have different values depending upon the setting of quaternionFrame as "A" (alpha-carbon/phosphorus atom only), "C" (alpha-carbon/pyrimidine or purine base based), "P" (carbonyl-carbon peptide plane/phosphorus tetrahedron based), or "N" (amide-nitrogen based). The default is alpha-carbon based, which corresponds closely to the following combination of Ramachandran angles involving three consecutive residues i-1, i, and i+1: -psii-1 - phii + psii + phii+1.',"@examples":[""],isUnsupported:!0,regex:/[0-9\s{}-]+/,map:In,level:"atom-test"},strucno:{"@desc":"a unique number for each helix, sheet, or turn in a model, starting with 1.","@examples":[""],isUnsupported:!0,regex:/[0-9\s{}-]+/,map:In,level:"atom-test"},structure:{"@desc":'The value of this parameter depends upon the context. Used with select structure=x, x can be either the quoted keyword "none", "turn", "sheet", "helix", "dna", "rna", or "carbohydrate" or a respective number 0-6. In the context {*}.structure, the return value is a number; in the context label %[structure], the return is one of the six keywords.',"@examples":['structure="helix"',"structure=3"],regex:/none|turn|sheet|helix|dna|rna|carbohydrate|[0-6]/i,map:In,level:"residue-test",property:"structure"},substructure:{"@desc":'like structure, the value of this parameter depends upon the context. Used with select substructure=x, x can be either the quoted keyword "none", "turn", "sheet", "helix", "dna", "rna", "carbohydrate", "helix310", "helixalpha", or "helixpi", or the respective number 0-9. In the context {*}.substructure, the return value is a number; in the context label %[substructure], the return is one of the nine keywords.',"@examples":['substructure = "alphahelix"',"substructure =9"],regex:/none|turn|sheet|helix|dna|rna|carbohydrate|helix310|helixalpha|helixpi|[0-9]/i,map:In,level:"residue-test",property:"structure"},surfacedistance:{"@desc":"A value related to the distance of an atom to a nominal molecular surface. 0 indicates at the surface. Positive numbers are minimum distances in Angstroms from the given atom to the surface.","@examples":[""],isUnsupported:!0,regex:/[0-9\s{}-]+/,map:In,level:"atom-test"},symop:{"@desc":'the first symmetry operation code that generated this atom by Jmol; an integer starting with 1. See also symmetry, below. This operator is only present if the file contains space group information and the file was loaded using the {i, j, k} option so as to generate symmetry-based atoms. To select only the original atoms prior to application of symmetry, you can either use "SYMOP=n", where n is the symmetry operator corresponding to "x,y,z", or you can specify instead simply "NOT symmetry" the way you might specify "NOT hydrogen". Note that atoms in special positions will have multiple operator matches. These atoms can be selected using the keyword SPECIALPOSITION. The special form select SYMOP=nijk selects a specific translation of atoms from the given crystallographic symmetry operation. Comparators <, <=, >, >=, and != can be used and only apply to the ijk part of the designation. The ijk are relative, not absolute. Thus, symop=2555 selects for atoms that have been transformed by symop=2 but not subjected to any further translation. select symop=1555 is identical to select not symmetry. All other ijk are relative to these selections for 555. If the model was loaded using load "filename.cif" {444 666 1}, where the 1 indicates that all symmetry-generated atoms are to be packed within cell 555 and then translated to fill the other 26 specified cells, then select symop=3555 is nearly the same as select symop=3 and cell=555. (The difference being that cell=555 selects for all atoms that are on any edge of the cell, while symop=3555 does not.) However, the situation is different if instead the model was loaded using load "filename.cif" {444 666 0}, where the 0 indicates that symmetry-generated atoms are to be placed exactly where their symmetry operator would put them (x,-y,z being different then from x, 1-y, z). In that case, select symop=3555 is for all atoms that have been generated using symmetry operation 3 but have not had any additional translations applied to the x,y,z expression found in the CIF file. If, for example, symmetry operation 3 is -x,-y,-z, then load "filename.cif" {444 666 0} will place an atom originally at {1/2, 1/2, 1/2} at positions {-1/2, -1/2, -1/2} (symop=3555) and {-3/2, -3/2, -3/2} (symop=3444) and 24 other sites.',"@examples":[""],isUnsupported:!0,regex:/[0-9\s{}-]+/,map:In,level:"atom-test"},symmetry:{"@desc":'as "symmetry" or in a label as lower-case "o" gives list of crystallographic symmetry operators generating this atom with lattice designations,such as 3555; upper-case "%O" in a label gives a list without the lattice designations. See also symop, above.',"@examples":[""],isUnsupported:!0,regex:/[0-9\s{}-]+/,map:In,level:"atom-test"},temperature:{"@desc":"yes yes temperature factor (B-factor)","@examples":["temperature >= 20"],regex:Sp,map:e=>parseFloat(e),level:"atom-test",property:As.ammp("B_iso_or_equiv")},unitXyz:{"@desc":"unit cell XYZ coordinates","@examples":[""],isUnsupported:!0,regex:/[0-9\s{}-]+/,map:In,level:"atom-test"},uX:{"@desc":"unit cell X coordinate normalized to [0,1)","@examples":[""],isUnsupported:!0,regex:/[0-9\s{}-]+/,map:In,level:"atom-test"},uY:{"@desc":"unit cell Y coordinate normalized to [0,1)","@examples":[""],isUnsupported:!0,regex:/[0-9\s{}-]+/,map:In,level:"atom-test"},uZ:{"@desc":"unit cell Z coordinate normalized to [0,1)","@examples":[""],isUnsupported:!0,regex:/[0-9\s{}-]+/,map:In,level:"atom-test"},valence:{"@desc":"the valence of an atom (sum of bonds, where double bond counts as 2 and triple bond counts as 3","@examples":[""],isUnsupported:!0,regex:/[0-9\s{}-]+/,map:In,level:"atom-test"},vanderwaals:{"@desc":"van der Waals radius","@examples":["vanderwaals >2"],regex:Sp,map:e=>parseFloat(e),level:"atom-test",property:As.acp("vdw")},vectorScale:{"@desc":"vibration vector scale","@examples":[""],isUnsupported:!0,regex:/[0-9\s{}-]+/,map:In,level:"atom-test"},volume:{"@desc":"approximate van der Waals volume for this atom. Note, {*}.volume gives an average; use {*}.volume.sum to get total volume.","@examples":[""],isUnsupported:!0,regex:/[0-9\s{}-]+/,map:In,level:"atom-test"},vXyz:{"@desc":"vibration vector, or individual components as %vx %vy %vz. For atoms without vibration vectors, {xx}.vXyz is -1; in a label, %[vxyz] is blank.","@examples":[""],isUnsupported:!0,regex:/[0-9\s{}-]+/,map:In,level:"atom-test"},vX:{"@desc":"vibration vector X coordinate; for atoms without vibration vector, {xx}.vX is NaN (same for vY and vZ)","@examples":[""],isUnsupported:!0,regex:/[0-9\s{}-]+/,map:In,level:"atom-test"},vY:{"@desc":"vibration vector Y coordinate","@examples":[""],isUnsupported:!0,regex:/[0-9\s{}-]+/,map:In,level:"atom-test"},vZ:{"@desc":"vibration vector Z coordinate","@examples":[""],isUnsupported:!0,regex:/[0-9\s{}-]+/,map:In,level:"atom-test"},xyz:{"@desc":"Cartesian XYZ coordinates; select xyz > 1.0 selects atoms more than one Angstrom from the origin.","@examples":[""],isUnsupported:!0,regex:/[0-9\s{}-]+/,map:In,level:"atom-test"}};var B0e=ce,AW=[{"@desc":"Selects atoms that are not included in s1.","@examples":["not ARG"],name:"not",type:Xc,rule:mt.alt(mt.regex(/NOT/i).skip(mt.whitespace),mt.string("!").skip(mt.optWhitespace)),map:(e,t)=>Rl(t)},{"@desc":"Selects atoms included in both s1 and s2.","@examples":["ASP and .CA"],name:"and",type:hc,rule:xp(/AND|&/i),map:(e,t,r)=>B0e.struct.modifier.intersectBy({0:t,by:r})},{"@desc":"Selects atoms included in either s1 or s2.","@examples":["ASP or GLU"],name:"or",type:hc,rule:xp(/OR|\||,/i),map:(e,t,r)=>B0e.struct.combinator.merge([t,r])}];var st=ce,Ya={acidic:["ASP","GLU"],aliphatic:["ALA","GLY","ILE","LEU","VAL"],amino:["ALA","ARG","ASN","ASP","CYS","GLN","GLU","GLY","HIS","ILE","LEU","LYS","MET","PHE","PRO","SER","THR","TRP","TYR","VAL","ASX","GLX","UNK"],aromatic:["HIS","PHE","TRP","TYR"],basic:["ARG","HIS","LYS"],buried:["ALA","CYS","ILE","LEU","MET","PHE","TRP","VAL"],cg:["CYT","C","GUA","G"],cyclic:["HIS","PHE","PRO","TRP","TYR"],hydrophobic:["ALA","GLY","ILE","LEU","MET","PHE","PRO","TRP","TYR","VAL"],large:["ARG","GLU","GLN","HIS","ILE","LEU","LYS","MET","PHE","TRP","TYR"],medium:["ASN","ASP","CYS","PRO","THR","VAL"],small:["ALA","GLY","SER"],nucleic:["G","C","A","T","U","I","DG","DC","DA","DT","DU","DI","+G","+C","+A","+T","+U","+I"]},I0e={nucleic:["P","O3'","O5'","C5'","C4'","C3'","OP1","OP2","O3*","O5*","C5*","C4*","C3*","C2'","C1'","O4'","O2'"],protein:["C","N","CA"]};function MR(){return st.struct.combinator.merge([st.struct.generator.atomGroups({"residue-test":st.core.set.has([st.set(...Ya.nucleic),st.ammp("label_comp_id")])}),st.struct.filter.pick({0:st.struct.generator.atomGroups({"group-by":st.ammp("residueKey")}),test:st.core.logic.and([st.core.rel.eq([st.struct.atomSet.atomCount(),1]),st.core.rel.eq([st.ammp("label_atom_id"),st.atomName("P")])])}),st.struct.filter.pick({0:st.struct.generator.atomGroups({"group-by":st.ammp("residueKey")}),test:st.core.logic.or([st.core.set.isSubset([Bd(["C1'","C2'","O3'","C3'","C4'","C5'","O5'"]),st.ammpSet("label_atom_id")]),st.core.set.isSubset([Bd(["C1*","C2*","O3*","C3*","C4*","C5*","O5*"]),st.ammpSet("label_atom_id")])])})])}function FAt(){return st.struct.generator.atomGroups({"residue-test":st.core.set.has([st.set(...Ya.amino),st.ammp("label_comp_id")])})}function wAt(){return st.struct.combinator.merge([st.struct.modifier.intersectBy({0:st.struct.generator.atomGroups({"residue-test":st.core.set.has([st.core.type.set(Ya.amino),st.ammp("label_comp_id")])}),by:st.struct.generator.atomGroups({"atom-test":st.core.set.has([st.core.type.set(I0e.protein),st.ammp("label_atom_id")])})}),st.struct.modifier.intersectBy({0:st.struct.generator.atomGroups({"residue-test":st.core.set.has([st.core.type.set(Ya.nucleic),st.ammp("label_comp_id")])}),by:st.struct.generator.atomGroups({"atom-test":st.core.set.has([st.core.type.set(I0e.nucleic),st.ammp("label_atom_id")])})})])}var sW={all:{"@desc":"all atoms; same as *",abbr:["*"],map:()=>st.struct.generator.all()},bonded:{"@desc":"covalently bonded",map:()=>st.struct.generator.atomGroups({"atom-test":st.core.rel.gr([st.struct.atomProperty.core.bondCount({flags:st.struct.type.bondFlags(["covalent","metallic","sulfide"])}),0])})},clickable:{"@desc":"actually visible -- having some visible aspect such as wireframe, spacefill, or a label showing, or the alpha-carbon or phosphorus atom in a biomolecule that is rendered with only cartoon, rocket, or other biomolecule-specific shape."},connected:{"@desc":"bonded in any way, including hydrogen bonds",map:()=>st.struct.generator.atomGroups({"atom-test":st.core.rel.gr([st.struct.atomProperty.core.bondCount({flags:st.struct.type.bondFlags()}),0])})},displayed:{"@desc":"displayed using the display or hide command; not necessarily visible"},hidden:{"@desc":"hidden using the display or hide command"},none:{"@desc":"no atoms",map:()=>st.struct.generator.empty()},selected:{"@desc":"atoms that have been selected; defaults to all when a file is first loaded"},thisModel:{"@desc":'atoms in the current frame set, as defined by frame, model, or animation commands. If more than one model is in this set, "thisModel" refers to all of them, regardless of atom displayed/hidden status.'},visible:{"@desc":"visible in any way, including PDB residue atoms for which a cartoon or other such rendering makes their group visible, even if they themselves are not visible."},subset:{"@desc":"the currently defined subset. Note that if a subset is currently defined, then select/display all is the same as select/display subset, restrict none is the same as restrict not subset. In addition, select not subset selects nothing."},specialPosition:{"@desc":"atoms in crystal structures that are at special positions - that is, for which there is more than one operator that leads to them."},unitcell:{"@desc":"atoms within the current unitcell, which may be offset. This includes atoms on the faces and at the vertices of the unitcell."},polyhedra:{"@desc":"all central atoms for which polyhedra have been created. See also polyhera(n), below. (Jmol 14.4)"},nonmetal:{"@desc":"_H,_He,_B,_C,_N,_O,_F,_Ne,_Si,_P,_S,_Cl,_Ar,_As,_Se,_Br,_Kr,_Te,_I,_Xe,_At,_Rn",map:()=>st.struct.generator.atomGroups({"atom-test":st.core.set.has([st.set(...["H","He","B","C","N","O","F","Ne","Si","P","S","Cl","Ar","As","Se","Br","Kr","Te","I","Xe","At","Rn"].map(st.es)),st.acp("elementSymbol")])})},metal:{"@desc":"!nonmetal",map:()=>st.struct.generator.atomGroups({"atom-test":st.core.logic.not([st.core.set.has([st.set(...["H","He","B","C","N","O","F","Ne","Si","P","S","Cl","Ar","As","Se","Br","Kr","Te","I","Xe","At","Rn"].map(st.es)),st.acp("elementSymbol")])])})},alkaliMetal:{"@desc":"_Li,_Na,_K,_Rb,_Cs,_Fr",map:()=>st.struct.generator.atomGroups({"atom-test":st.core.set.has([st.set(...["Li","Na","K","Rb","Cs","Fr"].map(st.es)),st.acp("elementSymbol")])})},alkalineEarth:{"@desc":"_Be,_Mg,_Ca,_Sr,_Ba,_Ra",map:()=>st.struct.generator.atomGroups({"atom-test":st.core.set.has([st.set(...["Be","Mg","Ca","Sr","Ba","Ra"].map(st.es)),st.acp("elementSymbol")])})},nobleGas:{"@desc":"_He,_Ne,_Ar,_Kr,_Xe,_Rn",map:()=>st.struct.generator.atomGroups({"atom-test":st.core.set.has([st.set(...["He","Ne","Ar","Kr","Xe","Rn"].map(st.es)),st.acp("elementSymbol")])})},metalloid:{"@desc":"_B,_Si,_Ge,_As,_Sb,_Te",map:()=>st.struct.generator.atomGroups({"atom-test":st.core.set.has([st.set(...["B","Si","Ge","As","Sb","Te"].map(st.es)),st.acp("elementSymbol")])})},transitionMetal:{"@desc":"(includes La and Ac) elemno>=21 and elemno<=30, elemno=57, elemno=89, elemno>=39 and elemno<=48, elemno>=72 and elemno<=80, elemno>=104 and elemno<=112",map:()=>st.struct.generator.atomGroups({"atom-test":st.core.logic.or([st.core.rel.inRange([st.acp("atomicNumber"),21,30]),st.core.rel.inRange([st.acp("atomicNumber"),39,48]),st.core.rel.inRange([st.acp("atomicNumber"),72,80]),st.core.rel.inRange([st.acp("atomicNumber"),104,112]),st.core.set.has([st.set(57,89),st.acp("atomicNumber")])])})},lanthanide:{"@desc":"(does not include La) elemno>57 and elemno<=71",map:()=>st.struct.generator.atomGroups({"atom-test":st.core.rel.inRange([st.acp("atomicNumber"),57,71])})},actinide:{"@desc":"(does not include Ac) elemno>89 and elemno<=103",map:()=>st.struct.generator.atomGroups({"atom-test":st.core.rel.inRange([st.acp("atomicNumber"),89,103])})},isaromatic:{"@desc":"atoms connected with the AROMATIC, AROMATICSINGLE, or AROMATICDOUBLE bond types",map:()=>st.struct.generator.atomGroups({"atom-test":st.core.rel.gr([st.struct.atomProperty.core.bondCount({flags:st.struct.type.bondFlags(["aromatic"])}),0])})},carbohydrate:{"@desc":""},ions:{"@desc":'(specifically the PDB designations "PO4" and "SO4")'},ligand:{"@desc":'(originally "hetero and not solvent"; changed to "!(protein,nucleic,water,UREA)" for Jmol 12.2)'},nucleic:{"@desc":`any group that (a) has one of the following group names: G, C, A, T, U, I, DG, DC, DA, DT, DU, DI, +G, +C, +A, +T, +U, +I; or (b) can be identified as a group that is only one atom, with name "P"; or (c) has all of the following atoms (prime, ', can replace * here): C1*, C2*, C3*, O3*, C4*, C5*, and O5*.`,map:()=>MR()},purine:{"@desc":"any nucleic group that (a) has one of the following group names: A, G, I, DA, DG, DI, +A, +G, or +I; or (b) also has atoms N7, C8, and N9.",map:()=>st.struct.modifier.intersectBy({0:MR(),by:st.struct.combinator.merge([st.struct.generator.atomGroups({"residue-test":st.core.set.has([st.set("A","G","I","DA","DG","DI","+A","+G","+I"),st.ammp("label_comp_id")])}),st.struct.filter.pick({0:st.struct.generator.atomGroups({"group-by":st.ammp("residueKey")}),test:st.core.set.isSubset([Bd(["N7","C8","N9"]),st.ammpSet("label_atom_id")])})])})},pyrimidine:{"@desc":"any nucleic group that (a) has one of the following group names: C, T, U, DC, DT, DU, +C, +T, +U; or (b) also has atom O2.",map:()=>st.struct.modifier.intersectBy({0:MR(),by:st.struct.combinator.merge([st.struct.generator.atomGroups({"residue-test":st.core.set.has([st.set("C","T","U","DC","DT","DU","+C","+T","+U"),st.ammp("label_comp_id")])}),st.struct.filter.pick({0:st.struct.generator.atomGroups({"group-by":st.ammp("residueKey")}),test:st.core.logic.or([st.core.set.has([st.ammpSet("label_atom_id"),st.atomName("O2*")]),st.core.set.has([st.ammpSet("label_atom_id"),st.atomName("O2'")])])})])})},dna:{"@desc":"any nucleic group that (a) has one of the following group names: DG, DC, DA, DT, DU, DI, T, +G, +C, +A, +T; or (b) has neither atom O2* or O2'.",map:()=>st.struct.modifier.intersectBy({0:MR(),by:st.struct.combinator.merge([st.struct.generator.atomGroups({"residue-test":st.core.set.has([st.set("DG","DC","DA","DT","DU","DI","T","+G","+C","+A","+T"),st.ammp("label_comp_id")])}),st.struct.filter.pick({0:st.struct.generator.atomGroups({"group-by":st.ammp("residueKey")}),test:st.core.logic.not([st.core.logic.or([st.core.set.has([st.ammpSet("label_atom_id"),st.atomName("O2*")]),st.core.set.has([st.ammpSet("label_atom_id"),st.atomName("O2'")])])])})])})},rna:{"@desc":"any nucleic group that (a) has one of the following group names: G, C, A, U, I, +U, +I; or (b) has atom O2* or O2'.",map:()=>st.struct.modifier.intersectBy({0:MR(),by:st.struct.combinator.merge([st.struct.generator.atomGroups({"residue-test":st.core.set.has([st.set("G","C","A","U","I","+U","+I"),st.ammp("label_comp_id")])}),st.struct.filter.pick({0:st.struct.generator.atomGroups({"group-by":st.ammp("residueKey")}),test:st.core.logic.or([st.core.set.has([st.ammpSet("label_atom_id"),st.atomName("O2*")]),st.core.set.has([st.ammpSet("label_atom_id"),st.atomName("O2'")])])})])})},protein:{"@desc":'defined as a group that (a) has one of the following group names: ALA, ARG, ASN, ASP, CYS, GLN, GLU, GLY, HIS, ILE, LEU, LYS, MET, PHE, PRO, SER, THR, TRP, TYR, VAL, ASX, GLX, or UNK; or (b) contains PDB atom designations [C, O, CA, and N] bonded correctly; or (c) does not contain "O" but contains [C, CA, and N] bonded correctly; or (d) has only one atom, which has name CA and does not have the group name CA (indicating a calcium atom).',map:()=>FAt()},acidic:{"@desc":"ASP GLU",map:()=>Lo(Ya.acidic)},acyclic:{"@desc":"amino and not cyclic",map:()=>st.struct.modifier.intersectBy({0:Lo(Ya.amino),by:Rl(Lo(Ya.cyclic))})},aliphatic:{"@desc":"ALA GLY ILE LEU VAL",map:()=>Lo(Ya.aliphatic)},amino:{"@desc":"all twenty standard amino acids, plus ASX, GLX, UNK",map:()=>Lo(Ya.amino)},aromatic:{"@desc":'HIS PHE TRP TYR (see also "isaromatic" for aromatic bonds)',map:()=>Lo(Ya.aromatic)},basic:{"@desc":"ARG HIS LYS",map:()=>Lo(Ya.basic)},buried:{"@desc":"ALA CYS ILE LEU MET PHE TRP VAL",map:()=>Lo(Ya.buried)},charged:{"@desc":"same as acidic or basic -- ASP GLU, ARG HIS LYS",map:()=>Lo(Ya.acidic.concat(Ya.basic))},cyclic:{"@desc":"HIS PHE PRO TRP TYR",map:()=>Lo(Ya.cyclic)},helix:{"@desc":"secondary structure-related.",map:()=>st.struct.generator.atomGroups({"residue-test":st.core.flags.hasAny([st.struct.type.secondaryStructureFlags(["helix"]),st.ammp("secondaryStructureFlags")])})},helixalpha:{"@desc":"secondary structure-related.",map:()=>st.struct.generator.atomGroups({"residue-test":st.core.flags.hasAny([st.struct.type.secondaryStructureFlags(["alpha"]),st.ammp("secondaryStructureFlags")])})},helix310:{"@desc":"secondary structure-related.",map:()=>st.struct.generator.atomGroups({"residue-test":st.core.flags.hasAny([st.struct.type.secondaryStructureFlags(["3-10"]),st.ammp("secondaryStructureFlags")])})},helixpi:{"@desc":"secondary structure-related.",map:()=>st.struct.generator.atomGroups({"residue-test":st.core.flags.hasAny([st.struct.type.secondaryStructureFlags(["pi"]),st.ammp("secondaryStructureFlags")])})},hetero:{"@desc":"PDB atoms designated as HETATM",map:()=>st.struct.generator.atomGroups({"atom-test":st.ammp("isHet")})},hydrophobic:{"@desc":"ALA GLY ILE LEU MET PHE PRO TRP TYR VAL",map:()=>Lo(Ya.hydrophobic)},large:{"@desc":"ARG GLU GLN HIS ILE LEU LYS MET PHE TRP TYR",map:()=>Lo(Ya.large)},medium:{"@desc":"ASN ASP CYS PRO THR VAL",map:()=>Lo(Ya.medium)},negative:{"@desc":"same as acidic -- ASP GLU",map:()=>Lo(Ya.acidic)},neutral:{"@desc":"amino and not (acidic or basic)",map:()=>st.struct.modifier.intersectBy({0:Lo(Ya.amino),by:Rl(Lo(Ya.acidic.concat(Ya.basic)))})},polar:{"@desc":"amino and not hydrophobic",map:()=>st.struct.modifier.intersectBy({0:Lo(Ya.amino),by:Rl(Lo(Ya.hydrophobic))})},positive:{"@desc":"same as basic -- ARG HIS LYS",map:()=>Lo(Ya.basic)},sheet:{"@desc":"secondary structure-related",map:()=>st.struct.generator.atomGroups({"residue-test":st.core.flags.hasAny([st.struct.type.secondaryStructureFlags(["sheet"]),st.ammp("secondaryStructureFlags")])})},small:{"@desc":"ALA GLY SER",map:()=>Lo(Ya.small)},surface:{"@desc":"amino and not buried",map:()=>st.struct.modifier.intersectBy({0:Lo(Ya.amino),by:Rl(Lo(Ya.buried))})},turn:{"@desc":"secondary structure-related",map:()=>st.struct.generator.atomGroups({"residue-test":st.core.flags.hasAny([st.struct.type.secondaryStructureFlags(["turn"]),st.ammp("secondaryStructureFlags")])})},alpha:{"@desc":"(*.CA)",map:()=>st.struct.generator.atomGroups({"atom-test":st.core.rel.eq([st.atomName("CA"),st.ammp("label_atom_id")])})},base:{"@desc":"(nucleic bases)"},backbone:{"@desc":"(*.C, *.CA, *.N, and all nucleic other than the bases themselves)",abbr:["mainchain"],map:()=>wAt()},sidechain:{"@desc":"((protein or nucleic) and not backbone)"},spine:{"@desc":"(*.CA, *.N, *.C for proteins; *.P, *.O3', *.O5', *.C3', *.C4', *.C5 for nucleic acids)"},leadatom:{"@desc":"(*.CA, *.P, and terminal *.O5')"},solvent:{"@desc":'PDB "HOH", water, also the connected set of H-O-H in any model'}};var Zn=ce,RAt=[{"@desc":"value comparisons","@examples":[],name:"=",abbr:["=="],type:hc,rule:mt.regexp(/\s*(LIKE|>=|<=|=|!=|>|<)\s*/i,1),map:(e,t,r)=>{let n;if(t==="structure"?n=Zn.core.flags.hasAny([Zn.ammp("secondaryStructureFlags"),iW(r)]):r==="structure"?n=Zn.core.flags.hasAny([Zn.ammp("secondaryStructureFlags"),iW(t)]):t.head!==void 0?t.head.name==="core.type.regex"&&(n=Zn.core.str.match([t,Zn.core.type.str([r])])):r.head!==void 0?r.head.name==="core.type.regex"&&(n=Zn.core.str.match([r,Zn.core.type.str([t])])):e.toUpperCase()==="LIKE"&&(t.head?n=Zn.core.str.match([Zn.core.type.regex([`^${r}$`,"i"]),Zn.core.type.str([t])]):n=Zn.core.str.match([Zn.core.type.regex([`^${t}$`,"i"]),Zn.core.type.str([r])])),!n)switch(t.head&&(r=k0(t,r)),r.head&&(t=k0(r,t)),e){case"=":n=Zn.core.rel.eq([t,r]);break;case"!=":n=Zn.core.rel.neq([t,r]);break;case">":n=Zn.core.rel.gr([t,r]);break;case"<":n=Zn.core.rel.lt([t,r]);break;case">=":n=Zn.core.rel.gre([t,r]);break;case"<=":n=Zn.core.rel.lte([t,r]);break;default:throw new Error(`value operator '${e}' not supported`)}return Zn.struct.generator.atomGroups({"atom-test":n})}}];function UAt(e){let[t,r,n,o,i,a,A]=e[1],s={};i&&(s["chain-test"]=Zn.core.rel.eq([Zn.ammp("auth_asym_id"),i]));let c=[];t&&c.push(Zn.core.rel.eq([Zn.ammp("label_comp_id"),t])),r&&c.push(Zn.core.logic.and([Zn.core.rel.gre([Zn.ammp("auth_seq_id"),r[0]]),Zn.core.rel.lte([Zn.ammp("auth_seq_id"),r[1]])])),n&&c.push(Zn.core.rel.eq([Zn.ammp("auth_seq_id"),n])),o&&c.push(Zn.core.rel.eq([Zn.ammp("pdbx_PDB_ins_code"),o])),c.length&&(s["residue-test"]=PR(c));let l=[];return a&&l.push(Zn.core.rel.eq([Zn.ammp("auth_atom_id"),a])),A&&l.push(Zn.core.rel.eq([Zn.ammp("label_alt_id"),A])),l.length&&(s["atom-test"]=PR(l)),Zn.struct.generator.atomGroups(s)}var LAt=mt.createLanguage({Integer:()=>mt.regexp(/-?[0-9]+/).map(Number).desc("integer"),Parens:function(e){return mt.alt(e.Parens,e.Operator,e.Expression).wrap(mt.regexp(/\(\s*/),mt.regexp(/\s*\)/))},Expression:function(e){return mt.alt(e.Keywords,e.AtomExpression.map(UAt),e.Within.map(t=>Zn.struct.modifier.includeSurroundings({0:t[1],radius:t[0]})),e.ValueQuery,e.Element.map(t=>Zn.struct.generator.atomGroups({"atom-test":Zn.core.rel.eq([Zn.acp("elementSymbol"),Zn.struct.type.elementSymbol(t)])})),e.Resname.map(t=>Zn.struct.generator.atomGroups({"residue-test":Zn.core.rel.eq([Zn.ammp("label_comp_id"),t])})))},Operator:function(e){return GQ(AW,mt.alt(e.Parens,e.Expression))},AtomExpression:function(e){return mt.seq(mt.lookahead(e.AtomPrefix),mt.seq(e.BracketedResname.or(mt.of(null)),e.ResnoRange.or(mt.of(null)),e.Resno.or(mt.of(null)),e.Inscode.or(mt.of(null)),e.Chainname.or(mt.of(null)),e.Atomname.or(mt.of(null)),e.Altloc.or(mt.of(null)),e.Model.or(mt.of(null)))).desc("expression")},AtomPrefix:()=>mt.regexp(/[\[0-9:^%/.-]/).desc("atom-prefix"),Chainname:()=>mt.regexp(/:([A-Za-z]{1,3})/,1).desc("chainname"),Model:()=>mt.regexp(/\/([0-9]+)/,1).map(Number).desc("model"),Element:()=>mt.regexp(/_([A-Za-z]{1,3})/,1).desc("element"),Atomname:()=>mt.regexp(/\.([a-zA-Z0-9]{1,4})/,1).map(Zn.atomName).desc("atomname"),Resname:()=>mt.regexp(/[a-zA-Z0-9]{1,4}/).desc("resname"),Resno:e=>e.Integer.desc("resno"),Altloc:()=>mt.regexp(/%([a-zA-Z0-9])/,1).desc("altloc"),Inscode:()=>mt.regexp(/\^([a-zA-Z0-9])/,1).desc("inscode"),BracketedResname:()=>mt.regexp(/\[([a-zA-Z0-9]{1,4})\]/,1).desc("bracketed-resname"),ResnoRange:e=>mt.seq(e.Integer.skip(mt.seq(mt.optWhitespace,mt.string("-"),mt.optWhitespace)),e.Integer).desc("resno-range"),Within:e=>mt.regexp(/within/i).skip(mt.regexp(/\s*\(\s*/)).then(mt.seq(e.Integer.skip(mt.regexp(/\s*,\s*/)),e.Query)).skip(mt.regexp(/\)/)),Keywords:()=>mt.alt(...Av(sW)).desc("keyword"),Query:function(e){return mt.alt(e.Operator,e.Parens,e.Expression).trim(mt.optWhitespace)},Number:function(){return mt.regexp(/-?(0|[1-9][0-9]*)([.][0-9]+)?([eE][+-]?[0-9]+)?/).map(Number).desc("number")},String:function(){let e=sv(aW,sW,AW).sort(xm).map(eh).join("|");return mt.alt(mt.regexp(new RegExp(`(?!(${e}))[A-Z0-9_]+`,"i")),mt.regexp(/'((?:[^"\\]|\\.)*)'/,1),mt.regexp(/"((?:[^"\\]|\\.)*)"/,1).map(t=>Zn.core.type.regex([`^${t}$`,"i"]))).desc("string")},Value:function(e){return mt.alt(e.Number,e.String)},ValueParens:function(e){return mt.alt(e.ValueParens,e.ValueOperator,e.ValueExpressions).wrap(mt.string("("),mt.string(")"))},ValuePropertyNames:function(){return mt.alt(...GR(aW,/LIKE|>=|<=|=|!=|>|<|\)|\s/i))},ValueOperator:function(e){return GQ(RAt,mt.alt(e.ValueParens,e.ValueExpressions))},ValueExpressions:function(e){return mt.alt(e.Value,e.ValuePropertyNames)},ValueQuery:function(e){return mt.alt(e.ValueOperator.map(t=>{if(t.head){if(t.head.name.startsWith("structure-query.generator"))return t}else if(typeof t=="string"&&t.length<=4)return Zn.struct.generator.atomGroups({"residue-test":Zn.core.rel.eq([Zn.ammp("label_comp_id"),t])});throw new Error(`values must be part of an comparison, value '${t}'`)}))}}),C0e=e=>LAt.Query.tryParse(e);var Ul=ce,Mk=/[-+]?[0-9]*\.?[0-9]+/;function TAt(e){return e.split("+").map(Ul.atomName)}function cv(e){return e.split("+").map(t=>t.replace(/^["']|["']$/g,""))}function cW(e){if(e.includes("-")&&e.includes("+")){let t=e.split("+").map(n=>n.replace(/^["']|["']$/g,"")),r=[];return t.forEach(n=>{if(n.includes("-")&&!n.startsWith("-")){let[o,i]=n.split("-").map(a=>parseInt(a));for(let a=o;a<=i;a++)r.push(a)}else if(n.includes("-")&&n.startsWith("-")&&n.match(/[0-9]+-[-0-9]+/)){let o=-parseInt(n.split("-")[1]),i;n.includes("--")?i=-parseInt(n.split("-")[3]):i=parseInt(n.split("-")[2]);for(let a=o;a<=i;a++)r.push(a)}else n.includes("-")&&n.startsWith("-")&&n.match(/[0-9]+-[-0-9]+/),r.push(parseInt(n))}),r}else if(e.includes("-")&&!e.includes("+")){let t=[];if(e.startsWith("-"))if(e.startsWith("-")&&e.match(/[0-9]+-[-0-9]+/)){let r=-parseInt(e.split("-")[1]),n;e.includes("--")?n=-parseInt(e.split("-")[3]):n=parseInt(e.split("-")[2]);for(let o=r;o<=n;o++)t.push(o)}else e.startsWith("-")&&e.match(/[0-9]+-[-0-9]+/),t.push(parseInt(e));else{let[r,n]=e.split("-").map(o=>parseInt(o));for(let o=r;o<=n;o++)t.push(o)}return t}else return!e.includes("-")&&e.includes("+")?cv(e).map(t=>parseInt(t)):[parseInt(e)]}function PAt(e){return e.split("+").map(Ul.struct.type.elementSymbol)}var GAt={H:"helix",S:"beta",L:"none"};function NAt(e){return{flags:Ul.struct.type.secondaryStructureFlags(e.toUpperCase().split("+").map(t=>GAt[t]||"none"))}}var kR={symbol:{"@desc":"chemical-symbol-list: list of 1- or 2-letter chemical symbols from the periodic table","@examples":["symbol O+N"],abbr:["e."],regex:/[a-zA-Z'"+]+/,map:PAt,level:"atom-test",property:Ul.acp("elementSymbol")},name:{"@desc":"atom-name-list: list of up to 4-letter codes for atoms in proteins or nucleic acids","@examples":["name CA+CB+CG+CD"],abbr:["n."],regex:/[a-zA-Z0-9'"+]+/,map:TAt,level:"atom-test",property:Ul.ammp("label_atom_id")},resn:{"@desc":"residue-name-list: list of 3-letter codes for amino acids or list of up to 2-letter codes for nucleic acids","@examples":["resn ASP+GLU+ASN+GLN","resn A+G"],abbr:["resname","r."],regex:/[a-zA-Z0-9'"+]+/,map:cv,level:"residue-test",property:Ul.ammp("label_comp_id")},resi:{"@desc":"residue-identifier-list list of up to 4-digit residue numbers or residue-identifier-range","@examples":["resi 1+10+100+1000","resi 1-10"],abbr:["resident","residue","resid","i."],regex:/[0-9+-]+/,map:cW,level:"residue-test",property:Ul.ammp("auth_seq_id")},alt:{"@desc":"alternate-conformation-identifier-list list of single letters","@examples":["alt A+B",'alt ""','alt ""+A'],abbr:[],regex:/[a-zA-Z0-9'"+]+/,map:cv,level:"atom-test",property:Ul.ammp("label_alt_id")},chain:{"@desc":"chain-identifier-list list of single letters or sometimes numbers","@examples":["chain A"],abbr:["c."],regex:/[a-zA-Z0-9'"+]+/,map:cv,level:"chain-test",property:Ul.ammp("auth_asym_id")},segi:{"@desc":"segment-identifier-list list of up to 4 letter identifiers","@examples":["segi lig"],abbr:["segid","s."],regex:/[a-zA-Z0-9'"+]+/,map:cv,level:"chain-test",property:Ul.ammp("label_asym_id")},flag:{"@desc":"flag-number a single integer from 0 to 31","@examples":["flag 0"],isUnsupported:!0,abbr:["f."],regex:/[0-9]+/,map:e=>parseInt(e),level:"atom-test"},numeric_type:{"@desc":"type-number a single integer","@examples":["nt. 5"],isUnsupported:!0,abbr:["nt."],regex:/[0-9]+/,map:e=>parseInt(e),level:"atom-test"},text_type:{"@desc":"type-string a list of up to 4 letter codes","@examples":["text_type HA+HC"],isUnsupported:!0,abbr:["tt."],regex:/[a-zA-Z0-9'"+]+/,map:cv,level:"atom-test"},id:{"@desc":"external-index-number a single integer","@examples":["id 23"],regex:/[0-9+-]+/,map:cW,level:"atom-test",property:Ul.ammp("id")},index:{"@desc":"internal-index-number a single integer","@examples":["index 11"],regex:/[0-9+-]+/,map:cW,level:"atom-test",property:Ul.ammp("id")},ss:{"@desc":"secondary-structure-type list of single letters. Helical regions should be assigned H and sheet regions S. Loop regions can either be assigned L or be blank.","@examples":["ss H+S+L",'ss S+""'],abbr:[],regex:/[a-zA-Z'"+]+/,map:NAt,level:"residue-test",property:Ul.ammp("secondaryStructureFlags")},b:{"@desc":"comparison-operator b-factor-value a real number","@examples":["b > 10"],isNumeric:!0,abbr:[],regex:Mk,map:e=>parseFloat(e),level:"atom-test",property:Ul.ammp("B_iso_or_equiv")},q:{"@desc":"comparison-operator occupancy-value a real number","@examples":["q <0.50"],isNumeric:!0,abbr:[],regex:Mk,map:e=>parseFloat(e),level:"atom-test",property:Ul.ammp("occupancy")},formal_charge:{"@desc":"comparison-operator formal charge-value an integer","@examples":["fc. = -1"],isNumeric:!0,abbr:["fc."],regex:Mk,map:e=>parseFloat(e),level:"atom-test",property:Ul.ammp("pdbx_formal_charge")},partial_charge:{"@desc":"comparison-operator partial charge-value a real number","@examples":["pc. > 1"],isUnsupported:!0,isNumeric:!0,abbr:["pc."],regex:Mk,map:e=>parseFloat(e),level:"atom-test"},elem:{"@desc":'str atomic element symbol string ("X" if undefined)',"@examples":["elem N"],regex:/[a-zA-Z0-9]{1,3}/,map:e=>Ul.es(e),level:"atom-test",property:Ul.acp("elementSymbol")}};var Gn=ce,lW=[{"@desc":"Selects atoms that are not included in s1.","@examples":["NOT resn ALA","not (resi 42 or chain A)","!resi 42 or chain A"],name:"not",type:Xc,rule:mt.alt(mt.regexp(/NOT/i).skip(mt.whitespace),mt.string("!").skip(mt.optWhitespace)),map:(e,t)=>Rl(t)},{"@desc":"Selects atoms included in both s1 and s2.","@examples":["chain A AND name CA"],name:"and",type:hc,rule:xp(/AND|&/i),map:(e,t,r)=>Gn.struct.modifier.intersectBy({0:t,by:r})},{"@desc":"Selects atoms included in either s1 or s2.","@examples":["chain A OR chain B"],name:"or",type:hc,rule:xp(/OR|\|/i),map:(e,t,r)=>Gn.struct.combinator.merge([t,r])},{"@desc":"Selects atoms in s1 whose identifiers name, resi, resn, chain and segi all match atoms in s2.","@examples":["chain A IN chain B"],name:"in",type:hc,rule:xp(/IN/i),map:(e,t,r)=>Gn.struct.filter.withSameAtomProperties({0:t,source:r,property:Gn.core.type.compositeKey([Gn.ammp("label_atom_id"),Gn.ammp("label_seq_id"),Gn.ammp("label_comp_id"),Gn.ammp("auth_asym_id"),Gn.ammp("label_asym_id")])})},{"@desc":"Selects atoms in s1 whose identifiers name and resi match atoms in s2.","@examples":["chain A LIKE chain B"],name:"like",type:hc,rule:xp(/LIKE|l\./i),map:(e,t,r)=>Gn.struct.filter.withSameAtomProperties({0:t,source:r,property:Gn.core.type.compositeKey([Gn.ammp("label_atom_id"),Gn.ammp("label_seq_id")])})},{"@desc":"Selects all atoms whose van der Waals radii are separated from the van der Waals radii of s1 by a minimum of X Angstroms.","@examples":["solvent GAP 2"],name:"gap",type:LR,rule:TR(/GAP\s+([-+]?[0-9]*\.?[0-9]+)/i,1).map(e=>parseFloat(e)),map:(e,t)=>Gn.struct.filter.within({0:Gn.struct.generator.all(),target:t,"atom-radius":Gn.acp("vdw"),"max-radius":e,invert:!0})},{"@desc":"Selects atoms with centers within X Angstroms of the center of any atom in s1.","@examples":["resname LIG AROUND 1"],name:"around",abbr:["a."],type:LR,rule:TR(/(AROUND|a\.)\s+([-+]?[0-9]*\.?[0-9]+)/i,2).map(e=>parseFloat(e)),map:(e,t)=>Gn.struct.modifier.exceptBy({0:Gn.struct.filter.within({0:Gn.struct.generator.all(),target:t,"max-radius":e}),by:t})},{"@desc":"Expands s1 by all atoms within X Angstroms of the center of any atom in s1.","@examples":["chain A EXPAND 3"],name:"expand",abbr:["x."],type:LR,rule:TR(/(EXPAND|x\.)\s+([-+]?[0-9]*\.?[0-9]+)/i,2).map(e=>parseFloat(e)),map:(e,t)=>Gn.struct.modifier.includeSurroundings({0:t,radius:e})},{"@desc":"Selects atoms in s1 that are within X Angstroms of any atom in s2.","@examples":["chain A WITHIN 3 OF chain B"],name:"within",abbr:["w."],type:hc,rule:Gk("WITHIN","w."),map:(e,t,r)=>Gn.struct.filter.within({0:t,target:r,"max-radius":e})},{"@desc":"Same as within, but excludes s2 from the selection (and thus is identical to s1 and s2 around X).","@examples":["chain A NEAR_TO 3 OF chain B"],name:"near_to",abbr:["nto."],type:hc,rule:Gk("NEAR_TO","nto."),map:(e,t,r)=>Gn.struct.modifier.exceptBy({0:Gn.struct.filter.within({0:t,target:r,"max-radius":e}),by:r})},{"@desc":"Selects atoms in s1 that are at least X Anstroms away from s2.","@examples":["solvent BEYOND 2 OF chain A"],name:"beyond",abbr:["be."],type:hc,rule:Gk("BEYOND","be."),map:(e,t,r)=>Gn.struct.modifier.exceptBy({0:Gn.struct.filter.within({0:t,target:r,"max-radius":e,invert:!0}),by:r})},{"@desc":"Expands selection to complete residues.","@examples":["BYRESIDUE name N"],name:"byresidue",abbr:["byresi","byres","br."],type:Xc,rule:wg(/BYRESIDUE|byresi|byres|br\./i),map:(e,t)=>Id(Gn.struct.modifier.expandProperty({0:Gn.struct.modifier.union({0:t}),property:Gn.ammp("residueKey")}))},{"@desc":"Completely selects all alpha carbons in all residues covered by a selection.","@examples":["BYCALPHA chain A"],name:"bycalpha",abbr:["bca."],type:Xc,rule:wg(/BYCALPHA|bca\./i),map:(e,t)=>Gn.struct.generator.queryInSelection({0:Gn.struct.modifier.expandProperty({0:Gn.struct.modifier.union({0:t}),property:Gn.ammp("residueKey")}),query:Gn.struct.generator.atomGroups({"atom-test":Gn.core.rel.eq([Gn.atomName("CA"),Gn.ammp("label_atom_id")])})})},{"@desc":"Expands selection to complete molecules.","@examples":["BYMOLECULE resi 20-30"],name:"bymolecule",isUnsupported:!0,abbr:["bymol","bm."],type:Xc,rule:wg(/BYMOLECULE|bymol|bm\./i),map:(e,t)=>Id(Gn.struct.modifier.expandProperty({0:Gn.struct.modifier.union({0:t}),property:Gn.atp("connectedComponentKey")}))},{"@desc":"Expands selection to complete fragments.","@examples":["BYFRAGMENT resi 10"],name:"byfragment",abbr:["byfrag","bf."],isUnsupported:!0,type:Xc,rule:wg(/BYFRAGMENT|byfrag|bf\./i),map:(e,t)=>[e,t]},{"@desc":"Expands selection to complete segments.","@examples":["BYSEGMENT resn CYS"],name:"bysegment",abbr:["bysegi","byseg","bs."],type:Xc,rule:wg(/BYSEGMENT|bysegi|byseg|bs\./i),map:(e,t)=>Id(Gn.struct.modifier.expandProperty({0:Gn.struct.modifier.union({0:t}),property:Gn.ammp("chainKey")}))},{"@desc":"Expands selection to complete objects.","@examples":["BYOBJECT chain A"],name:"byobject",abbr:["byobj","bo."],isUnsupported:!0,type:Xc,rule:wg(/BYOBJECT|byobj|bo\./i),map:(e,t)=>[e,t]},{"@desc":"Expands selection to unit cell.","@examples":["BYCELL chain A"],name:"bycell",isUnsupported:!0,type:Xc,rule:wg(/BYCELL/i),map:(e,t)=>[e,t]},{"@desc":"All rings of size \u2264 7 which have at least one atom in s1.","@examples":["BYRING resn HEM"],name:"byring",type:Xc,rule:wg(/BYRING/i),map:(e,t)=>Id(Gn.struct.modifier.intersectBy({0:Gn.struct.filter.pick({0:Gn.struct.generator.rings(),test:Gn.core.logic.and([Gn.core.rel.lte([Gn.struct.atomSet.atomCount(),7]),Gn.core.rel.gr([Gn.struct.atomSet.countQuery([t]),1])])}),by:t}))},{"@desc":"Selects atoms directly bonded to s1, excludes s1.","@examples":["NEIGHBOR resn CYS"],name:"neighbor",type:Xc,abbr:["nbr."],rule:wg(/NEIGHBOR|nbr\./i),map:(e,t)=>Gn.struct.modifier.exceptBy({0:Id(Gn.struct.modifier.includeConnected({0:Gn.struct.modifier.union({0:t}),"bond-test":!0})),by:t})},{"@desc":"Selects atoms directly bonded to s1, may include s1.","@examples":["BOUND_TO name CA"],name:"bound_to",abbr:["bto."],type:Xc,rule:wg(/BOUND_TO|bto\./i),map:(e,t)=>Id(Gn.struct.modifier.includeConnected({0:Gn.struct.modifier.union({0:t})}))},{"@desc":"Extends s1 by X bonds connected to atoms in s1.","@examples":["resname LIG EXTEND 3"],name:"extend",abbr:["xt."],type:LR,rule:TR(/(EXTEND|xt\.)\s+([0-9]+)/i,2).map(e=>parseInt(e)),map:(e,t)=>Id(Gn.struct.modifier.includeConnected({0:Gn.struct.modifier.union({0:t}),"bond-test":!0,"layer-count":e}))}];var Sr=ce,zu={nucleic:["A","C","T","G","U","DA","DC","DT","DG","DU"],protein:["ALA","ARG","ASN","ASP","CYS","CYX","GLN","GLU","GLY","HIS","HID","HIE","HIP","ILE","LEU","LYS","MET","MSE","PHE","PRO","SER","THR","TRP","TYR","VAL"],solvent:["HOH","WAT","H20","TIP","SOL"]},h0e={nucleic:["P","O3'","O5'","C5'","C4'","C3'","OP1","OP2","O3*","O5*","C5*","C4*","C3*","C2'","C1'","O4'","O2'"],protein:["C","N","CA","O"]};function y0e(){return Sr.struct.combinator.merge([Sr.struct.modifier.intersectBy({0:Sr.struct.generator.atomGroups({"residue-test":Sr.core.set.has([Sr.core.type.set(zu.protein),Sr.ammp("label_comp_id")])}),by:Sr.struct.generator.atomGroups({"atom-test":Sr.core.set.has([Sr.core.type.set(h0e.protein),Sr.ammp("label_atom_id")])})}),Sr.struct.modifier.intersectBy({0:Sr.struct.generator.atomGroups({"residue-test":Sr.core.set.has([Sr.core.type.set(zu.nucleic),Sr.ammp("label_comp_id")])}),by:Sr.struct.generator.atomGroups({"atom-test":Sr.core.set.has([Sr.core.type.set(h0e.nucleic),Sr.ammp("label_atom_id")])})})])}var uW={all:{"@desc":"All atoms currently loaded into PyMOL",abbr:["*"],map:()=>Sr.struct.generator.all()},none:{"@desc":"No atoms (empty selection)",map:()=>Sr.struct.generator.empty()},hydrogens:{"@desc":"All hydrogen atoms currently loaded into PyMOL",abbr:["hydro","h."],map:()=>Sr.struct.generator.atomGroups({"atom-test":Sr.core.rel.eq([Sr.acp("elementSymbol"),Sr.es("H")])})},hetatm:{"@desc":"All atoms loaded from Protein Data Bank HETATM records",abbr:["het"],map:()=>Sr.struct.generator.atomGroups({"atom-test":Sr.core.rel.eq([Sr.ammp("isHet"),!0])})},visible:{"@desc":"All atoms in enabled objects with at least one visible representation",abbr:["v."]},polymer:{"@desc":"All atoms on the polymer (not het). Finds atoms with residue identifiers matching a known polymer, such a peptide and DNA.",abbr:["pol."],map:()=>Sr.struct.generator.atomGroups({"residue-test":Sr.core.set.has([Sr.core.type.set(zu.nucleic.concat(zu.protein)),Sr.ammp("label_comp_id")])})},sidechain:{"@desc":"Polymer non-backbone atoms (new in PyMOL 1.6.1)",abbr:["sc."],map:()=>Sr.struct.modifier.exceptBy({0:Sr.struct.generator.atomGroups({"residue-test":Sr.core.set.has([Sr.core.type.set(zu.nucleic.concat(zu.protein)),Sr.ammp("label_comp_id")])}),by:y0e()})},present:{"@desc":"All atoms with defined coordinates in the current state (used in creating movies)",abbr:["pr."]},center:{"@desc":"Pseudo-atom at the center of the scene"},origin:{"@desc":"Pseudo-atom at the origin of rotation"},enabled:{"@desc":"All enabled objects or selections from the object list."},masked:{"@desc":"All masked atoms.",abbr:["msk."]},protected:{"@desc":"All protected atoms.",abbr:["pr."]},bonded:{"@desc":"All bonded atoms",map:()=>Sr.struct.generator.atomGroups({"atom-test":Sr.core.rel.gr([Sr.struct.atomProperty.core.bondCount({flags:Sr.struct.type.bondFlags(["covalent","metallic","sulfide"])}),0])})},donors:{"@desc":"All hydrogen bond donor atoms.",abbr:["don."]},acceptors:{"@desc":"All hydrogen bond acceptor atoms.",abbr:["acc."]},fixed:{"@desc":"All fixed atoms.",abbr:["fxd."]},restrained:{"@desc":"All restrained atoms.",abbr:["rst."]},organic:{"@desc":"All atoms in non-polymer organic compounds (e.g. ligands, buffers). Finds carbon-containing molecules that do not match known polymers.",abbr:["org."],map:()=>Id(Sr.struct.modifier.expandProperty({0:Sr.struct.modifier.union([Sr.struct.generator.queryInSelection({0:Sr.struct.generator.atomGroups({"residue-test":Sr.core.logic.not([Sr.core.set.has([Sr.core.type.set(zu.nucleic.concat(zu.protein)),Sr.ammp("label_comp_id")])])}),query:Sr.struct.generator.atomGroups({"atom-test":Sr.core.rel.eq([Sr.es("C"),Sr.acp("elementSymbol")])})})]),property:Sr.ammp("residueKey")}))},inorganic:{"@desc":"All non-polymer inorganic atoms/ions. Finds atoms in molecules that do not contain carbon and do not match any known solvent residues.",abbr:["ino."],map:()=>Id(Sr.struct.modifier.expandProperty({0:Sr.struct.modifier.union([Sr.struct.filter.pick({0:Sr.struct.generator.atomGroups({"residue-test":Sr.core.logic.not([Sr.core.set.has([Sr.core.type.set(zu.nucleic.concat(zu.protein).concat(zu.solvent)),Sr.ammp("label_comp_id")])]),"group-by":Sr.ammp("residueKey")}),test:Sr.core.logic.not([Sr.core.set.has([Sr.struct.atomSet.propertySet([Sr.acp("elementSymbol")]),Sr.es("C")])])})]),property:Sr.ammp("residueKey")}))},solvent:{"@desc":"All water molecules. The hardcoded solvent residue identifiers are currently: HOH, WAT, H20, TIP, SOL.",abbr:["sol."],map:()=>Sr.struct.generator.atomGroups({"residue-test":Sr.core.set.has([Sr.core.type.set(zu.solvent),Sr.ammp("label_comp_id")])})},guide:{"@desc":"All protein CA and nucleic acid C4*/C4",map:()=>Sr.struct.combinator.merge([Sr.struct.generator.atomGroups({"atom-test":Sr.core.rel.eq([Sr.atomName("CA"),Sr.ammp("label_atom_id")]),"residue-test":Sr.core.set.has([Sr.core.type.set(zu.protein),Sr.ammp("label_comp_id")])}),Sr.struct.generator.atomGroups({"atom-test":Sr.core.set.has([Bd(["C4*","C4'"]),Sr.ammp("label_atom_id")]),"residue-test":Sr.core.set.has([Sr.core.type.set(zu.nucleic),Sr.ammp("label_comp_id")])})])},metals:{"@desc":"All metal atoms (new in PyMOL 1.6.1)"},backbone:{"@desc":"Polymer backbone atoms (new in PyMOL 1.6.1)",abbr:["bb."],map:()=>y0e()},"polymer.protein":{"@desc":"Protein (New in PyMOL 2.1)",abbr:["polymer.protein"],map:()=>Sr.struct.generator.atomGroups({"residue-test":Sr.core.set.has([Sr.core.type.set(zu.protein),Sr.ammp("label_comp_id")])})},"polymer.nucleic":{"@desc":"Nucleic Acid (New in PyMOL 2.1)",abbr:["polymer.nucleic"],map:()=>Sr.struct.generator.atomGroups({"residue-test":Sr.core.set.has([Sr.core.type.set(zu.nucleic),Sr.ammp("label_comp_id")])})}};var MAt=ce,ss=m0e(kR),ws=mt.string("/");function Ga(e){return e.or(mt.of(null))}function kAt(e){let t={},r={};for(let n in e){let o=kR[n];if(!o)throw new Error(`property '${n}' not supported, value '${e[n]}'`);e[n]!==null&&(r[o.level]||(r[o.level]=[]),r[o.level].push(e[n]))}for(let n in r)t[n]=PR(r[n]);return MAt.struct.generator.atomGroups(t)}var HAt=mt.createLanguage({Parens:function(e){return mt.alt(e.Parens,e.Operator,e.Expression).wrap(mt.string("("),mt.string(")"))},Expression:function(e){return mt.alt(e.Keywords,e.AtomSelectionMacro.map(kAt),e.NamedAtomProperties,e.Pepseq,e.Rep,e.Object)},AtomSelectionMacro:function(e){return mt.alt(ws.then(mt.alt(mt.seq(Ga(e.ObjectProperty).skip(ws),Ga(ss.segi).skip(ws),Ga(ss.chain).skip(ws),Ga(ss.resi).skip(ws),Ga(ss.name)).map(t=>({object:t[0],segi:t[1],chain:t[2],resi:t[3],name:t[4]})),mt.seq(Ga(e.ObjectProperty).skip(ws),Ga(ss.segi).skip(ws),Ga(ss.chain).skip(ws),Ga(ss.resi)).map(t=>({object:t[0],segi:t[1],chain:t[2],resi:t[3]})),mt.seq(Ga(e.ObjectProperty).skip(ws),Ga(ss.segi).skip(ws),Ga(ss.chain)).map(t=>({object:t[0],segi:t[1],chain:t[2]})),mt.seq(Ga(e.ObjectProperty).skip(ws),Ga(ss.segi)).map(t=>({object:t[0],segi:t[1]})),mt.seq(Ga(e.ObjectProperty)).map(t=>({object:t[0]})))),mt.alt(mt.seq(Ga(e.ObjectProperty).skip(ws),Ga(ss.segi).skip(ws),Ga(ss.chain).skip(ws),Ga(ss.resi).skip(ws),Ga(ss.name)).map(t=>({object:t[0],segi:t[1],chain:t[2],resi:t[3],name:t[4]})),mt.seq(Ga(ss.segi).skip(ws),Ga(ss.chain).skip(ws),Ga(ss.resi).skip(ws),Ga(ss.name)).map(t=>({segi:t[0],chain:t[1],resi:t[2],name:t[3]})),mt.seq(Ga(ss.chain).skip(ws),Ga(ss.resi).skip(ws),Ga(ss.name)).map(t=>({chain:t[0],resi:t[1],name:t[2]})),mt.seq(Ga(ss.resi).skip(ws),Ga(ss.name)).map(t=>({resi:t[0],name:t[1]}))))},NamedAtomProperties:function(){return mt.alt(...Nk(kR))},Keywords:()=>mt.alt(...Av(uW)),ObjectProperty:()=>{let e=sv(kR,uW,lW).sort(xm).map(eh).join("|");return mt.regexp(new RegExp(`(?!(${e}))[A-Z0-9_]+`,"i"))},Object:e=>e.ObjectProperty.notFollowedBy(ws).map(t=>{throw new Error(`property 'object' not supported, value '${t}'`)}),Pepseq:()=>mt.regexp(/(PEPSEQ|ps\.)\s+([a-z]+)/i,2).map(Fh("operator 'pepseq' not supported")),Rep:()=>mt.regexp(/REP\s+(lines|spheres|mesh|ribbon|cartoon|sticks|dots|surface|labels|extent|nonbonded|nb_spheres|slice|extent|slice|dashes|angles|dihedrals|cgo|cell|callback|everything)/i,1).map(Fh("operator 'rep' not supported")),Operator:function(e){return GQ(lW,mt.alt(e.Parens,e.Expression,e.Operator))},Query:function(e){return mt.alt(e.Operator,e.Parens,e.Expression).trim(mt.optWhitespace)}}),Q0e=e=>HAt.Query.tryParse(e);var jA=ce,Sm=/[-+]?[0-9]*\.?[0-9]+/,kk=/[+]?[0-9]+/,HR=/[-+]?[0-9]+/;function H0(e){return e}var gW={T:"turn",E:"sheet",B:"strand",H:"alpha",G:"3-10",I:"pi",C:"none"};function Hk(e){return jA.struct.type.secondaryStructureFlags([gW[e.toUpperCase()]||"none"])}var Rh={name:{"@desc":"str atom name","@examples":["name CA"],regex:/[a-zA-Z0-9]+/,map:jA.atomName,level:"atom-test",property:jA.ammp("label_atom_id")},type:{"@desc":"str atom type","@examples":["type C3"],isUnsupported:!0,regex:/[a-zA-Z0-9]+/,map:H0,level:"atom-test"},index:{"@desc":"num the atom number, starting at 0","@examples":["index 10"],isNumeric:!0,regex:kk,map:e=>parseInt(e)-1,level:"atom-test",property:jA.ammp("id")},serial:{"@desc":"num the atom number, starting at 1","@examples":["serial 11"],isNumeric:!0,regex:kk,map:e=>parseInt(e),level:"atom-test",property:jA.ammp("id")},atomicnumber:{"@desc":"num atomic number (0 if undefined)","@examples":["atomicnumber 13"],isNumeric:!0,regex:kk,map:e=>parseInt(e),level:"atom-test",property:jA.acp("atomicNumber")},element:{"@desc":'str atomic element symbol string ("X" if undefined)',"@examples":["element N"],regex:/[a-zA-Z0-9]{1,3}/,map:e=>jA.es(e),level:"atom-test",property:jA.acp("elementSymbol")},altloc:{"@desc":"str alternate location/conformation identifier","@examples":["altloc C"],regex:/[a-zA-Z0-9]+/,map:H0,level:"atom-test",property:jA.ammp("label_alt_id")},chain:{"@desc":"str the one-character chain identifier","@examples":["chain A"],regex:/[a-zA-Z0-9]+/,map:H0,level:"residue-test",property:jA.ammp("auth_asym_id")},residue:{"@desc":"num a set of connected atoms with the same residue number","@examples":["residue < 11","residue 11"],isNumeric:!0,regex:HR,map:e=>parseInt(e),level:"residue-test",property:jA.ammp("auth_seq_id")},fragment:{"@desc":"num a set of connected residues","@examples":["fragment 42"],isUnsupported:!0,isNumeric:!0,regex:HR,map:e=>parseInt(e),level:"residue-test"},pfrag:{"@desc":"num a set of connected protein residues","@examples":["pfrag 42"],isUnsupported:!0,isNumeric:!0,regex:HR,map:e=>parseInt(e),level:"residue-test"},nfrag:{"@desc":"num a set of connected nucleic residues","@examples":["nfrag 42"],isUnsupported:!0,isNumeric:!0,regex:HR,map:e=>parseInt(e),level:"residue-test"},sequence:{"@desc":"str a sequence given by one letter names","@examples":["sequence PGATTACA"],isUnsupported:!0,regex:/[a-zA-Z0-9]+/,map:H0,level:"residue-test"},numbonds:{"@desc":"num number of bonds","@examples":["numbonds = 2","numbonds >= 3"],isNumeric:!0,regex:kk,map:e=>parseInt(e),level:"atom-test",property:jA.acp("bondCount")},resname:{"@desc":"str residue name","@examples":["resname ALA"],regex:/[a-zA-Z0-9]+/,map:H0,level:"residue-test",property:jA.ammp("auth_comp_id")},resid:{"@desc":"num residue id","@examples":["resid 42"],isNumeric:!0,regex:HR,map:e=>parseInt(e),level:"residue-test",property:jA.ammp("auth_seq_id")},segname:{"@desc":"str segment name","@examples":["segname B"],regex:/[a-zA-Z0-9]+/,map:H0,level:"residue-test",property:jA.ammp("label_asym_id")},x:{"@desc":"float x coordinate","@examples":["x 42"],isNumeric:!0,regex:Sm,map:e=>parseFloat(e),level:"atom-test",property:jA.acp("x")},y:{"@desc":"float y coordinate","@examples":["y > 1.7"],isNumeric:!0,regex:Sm,map:e=>parseFloat(e),level:"atom-test",property:jA.acp("y")},z:{"@desc":"float z coordinate","@examples":["z < 11","z > -21"],isNumeric:!0,regex:Sm,map:e=>parseFloat(e),level:"atom-test",property:jA.acp("z")},radius:{"@desc":"float atomic radius","@examples":["radius > 1.3"],isNumeric:!0,regex:Sm,map:e=>parseFloat(e),level:"atom-test",property:jA.acp("vdw")},mass:{"@desc":"float atomic mass","@examples":["mass > 2"],isNumeric:!0,regex:Sm,map:e=>parseFloat(e),level:"atom-test",property:jA.acp("mass")},charge:{"@desc":"float atomic charge","@examples":["charge > 0","charge 1"],isNumeric:!0,regex:Sm,map:e=>parseFloat(e),level:"atom-test",property:jA.ammp("pdbx_formal_charge")},beta:{"@desc":"float temperature factor","@examples":["beta < 20","beta > 35"],isNumeric:!0,regex:Sm,map:e=>parseFloat(e),level:"atom-test",property:jA.ammp("B_iso_or_equiv")},occupancy:{"@desc":"float occupancy","@examples":["occupancy 1","occupancy < 1"],isNumeric:!0,regex:Sm,map:e=>parseFloat(e),level:"atom-test",property:jA.ammp("occupancy")},user:{"@desc":"float time-varying user-specified value","@examples":["user < 0.1"],isUnsupported:!0,isNumeric:!0,regex:Sm,map:e=>parseFloat(e),level:"atom-test"},rasmol:{"@desc":"str translates Rasmol selection string to VMD","@examples":["rasmol 'all'"],isUnsupported:!0,regex:/[^']*/,map:H0,level:"atom-test"},structure:{"@desc":"str single letter name for the secondary structure","@examples":["structure H","structure H E"],regex:/T|E|B|H|G|I|C/i,map:Hk,level:"atom-test",property:jA.ammp("secondaryStructureFlags")},phi:{"@desc":"float phi backbone conformational angles","@examples":["phi < 160"],isUnsupported:!0,isNumeric:!0,regex:Sm,map:e=>parseFloat(e),level:"residue-test"},psi:{"@desc":"float psi backbone conformational angles","@examples":["psi < 160"],isUnsupported:!0,isNumeric:!0,regex:Sm,map:e=>parseFloat(e),level:"residue-test"},ufx:{"@desc":"num force to apply in the x coordinate","@examples":["ufx 1"],isUnsupported:!0,isNumeric:!0,regex:Sm,map:e=>parseInt(e),level:"atom-test"},ufy:{"@desc":"num force to apply in the y coordinate","@examples":["ufy 1"],isUnsupported:!0,isNumeric:!0,regex:Sm,map:e=>parseInt(e),level:"atom-test"},ufz:{"@desc":"num force to apply in the z coordinate","@examples":["ufz 1"],isUnsupported:!0,isNumeric:!0,regex:Sm,map:e=>parseInt(e),level:"atom-test"}};var V0=ce,VAt=Object.keys(Rh).sort(xm).filter(e=>!Rh[e].isUnsupported).join("|"),mW=[{"@desc":"Selects atoms that are not included in s1.","@examples":["not protein"],name:"not",type:Xc,rule:mt.regexp(/NOT/i).skip(mt.whitespace),map:(e,t)=>Rl(t)},{"@desc":"Selects atoms within a specified distance of a selection","@examples":["within 5 of name FE"],name:"within",type:Xc,rule:wg(/WITHIN\s+([-+]?[0-9]*\.?[0-9]+)\s+OF/i,1).map(e=>parseFloat(e)),map:(e,t)=>V0.struct.modifier.includeSurroundings({0:t,radius:e})},{"@desc":"Exclusive within, equivalent to (within 3 of X) and not X","@examples":["exwithin 10 of resname HEM"],name:"exwithin",type:Xc,rule:wg(/EXWITHIN\s+([-+]?[0-9]*\.?[0-9]+)\s+OF/i,1).map(e=>parseFloat(e)),map:(e,t)=>V0.struct.modifier.exceptBy({0:V0.struct.modifier.includeSurroundings({0:t,radius:e}),by:t})},{"@desc":"Selects atoms which have the same keyword as the atoms in a given selection","@examples":["same resid as name FE"],name:"same",type:Xc,rule:wg(new RegExp(`SAME\\s+(${VAt})\\s+AS`,"i"),1).map(e=>Rh[e].property),map:(e,t)=>V0.struct.filter.withSameAtomProperties({0:V0.struct.generator.all(),source:t,property:e})},{"@desc":"Selects atoms included in both s1 and s2.","@examples":["backbone and protein"],name:"and",type:hc,rule:mt.alt(xp(/AND/i),mt.whitespace),map:(e,t,r)=>V0.struct.modifier.intersectBy({0:t,by:r})},{"@desc":"Selects atoms included in either s1 or s2.","@examples":["water or protein"],name:"or",type:hc,rule:xp(/OR/i),map:(e,t,r)=>V0.struct.combinator.merge([t,r])}];var no=ce;function Uh(){return no.struct.filter.pick({0:no.struct.generator.atomGroups({"group-by":no.ammp("residueKey")}),test:no.core.set.isSubset([Bd(["C","N","CA","O"]),no.ammpSet("label_atom_id")])})}function dW(){return no.struct.filter.pick({0:no.struct.generator.atomGroups({"group-by":no.ammp("residueKey")}),test:no.core.logic.and([no.core.set.isSubset([Bd(["P"]),no.ammpSet("label_atom_id")]),no.core.logic.or([no.core.set.isSubset([Bd(["O3'","C3'","C4'","C5'","O5'"]),no.ammpSet("label_atom_id")]),no.core.set.isSubset([Bd(["O3*","C3*","C4*","C5*","O5*"]),no.ammpSet("label_atom_id")])])])})}function E0e(){return no.struct.combinator.merge([no.struct.generator.queryInSelection({0:Uh(),query:no.struct.generator.atomGroups({"atom-test":no.core.set.has([Bd(b0e.protein),no.ammp("label_atom_id")])})}),no.struct.generator.queryInSelection({0:dW(),query:no.struct.generator.atomGroups({"atom-test":no.core.set.has([Bd(b0e.nucleic),no.ammp("label_atom_id")])})})])}function kI(e){return no.struct.generator.atomGroups({"residue-test":no.core.flags.hasAll([no.ammp("secondaryStructureFlags"),no.struct.type.secondaryStructureFlags(e)])})}var b0e={nucleic:["P","O3'","O5'","C5'","C4'","C3'","OP1","OP2","O3*","O5*","C5*","C4*","C3*"],protein:["C","N","CA","O"]},Rs={acidic:["ASP","GLU"],aliphatic:["ALA","GLY","ILE","LEU","VAL"],aromatic:["HIS","PHE","TRP","TYR"],at:["ADA","A","THY","T"],basic:["ARG","HIS","LYS"],buried:["ALA","LEU","VAL","ILE","PHE","CYS","MET","TRP"],cg:["CYT","C","GUA","G"],cyclic:["HIS","PHE","PRO","TRP","TYR"],hydrophobic:["ALA","LEU","VAL","ILE","PRO","PHE","MET","TRP"],medium:["VAL","THR","ASP","ASN","PRO","CYS","ASX","PCA","HYP"],neutral:["VAL","PHE","GLN","TYR","HIS","CYS","MET","TRP","ASX","GLX","PCA","HYP"],purine:["ADE","A","GUA","G"],pyrimidine:["CYT","C","THY","T","URI","U"],small:["ALA","GLY","SER"],water:["H2O","HH0","OHH","HOH","OH2","SOL","WAT","TIP","TIP2","TIP3","TIP4"]},pW={all:{"@desc":"everything",map:()=>no.struct.generator.all()},none:{"@desc":"nothing",map:()=>no.struct.generator.empty()},protein:{"@desc":"a residue with atoms named C, N, CA, and O",map:()=>Uh()},nucleic:{"@desc":"a residue with atoms named P, O1P, O2P and either O3', C3', C4', C5', O5' or O3*, C3*, C4*, C5*, O5*. This definition assumes that the base is phosphorylated, an assumption which will be corrected in the future.",map:()=>dW()},backbone:{"@desc":"the C, N, CA, and O atoms of a protein and the equivalent atoms in a nucleic acid.",map:()=>E0e()},sidechain:{"@desc":"non-backbone atoms and bonds",map:()=>Rl(E0e())},water:{"@desc":"all atoms with the resname H2O, HH0, OHH, HOH, OH2, SOL, WAT, TIP, TIP2, TIP3 or TIP4",abbr:["waters"],map:()=>Lo(Rs.water)},at:{"@desc":"residues named ADA A THY T",map:()=>Lo(Rs.at)},acidic:{"@desc":"residues named ASP GLU",map:()=>Lo(Rs.acidic)},acyclic:{"@desc":'"protein and not cyclic"',map:()=>no.struct.modifier.intersectBy({0:Uh(),by:Rl(Lo(Rs.cyclic))})},aliphatic:{"@desc":"residues named ALA GLY ILE LEU VAL",map:()=>Lo(Rs.aliphatic)},alpha:{"@desc":"atom's residue is an alpha helix",map:()=>kI(["alpha"])},amino:{"@desc":"a residue with atoms named C, N, CA, and O",map:()=>Uh()},aromatic:{"@desc":"residues named HIS PHE TRP TYR",map:()=>Lo(Rs.aromatic)},basic:{"@desc":"residues named ARG HIS LYS",map:()=>Lo(Rs.basic)},bonded:{"@desc":"atoms for which numbonds > 0",map:()=>Id(no.struct.filter.pick({0:no.struct.modifier.includeConnected({0:no.struct.generator.all(),"bond-test":no.core.flags.hasAny([no.struct.bondProperty.flags(),no.struct.type.bondFlags(["covalent","metallic","sulfide"])])}),test:no.core.rel.gr([no.struct.atomSet.atomCount(),1])}))},buried:{"@desc":"residues named ALA LEU VAL ILE PHE CYS MET TRP",map:()=>Lo(Rs.buried)},cg:{"@desc":"residues named CYT C GUA G",map:()=>Lo(Rs.cg)},charged:{"@desc":'"basic or acidic"',map:()=>Lo(Rs.basic.concat(Rs.acidic))},cyclic:{"@desc":"residues named HIS PHE PRO TRP TYR",map:()=>Lo(Rs.cyclic)},hetero:{"@desc":'"not (protein or nucleic)"',map:()=>Rl(no.struct.combinator.merge([Uh(),dW()]))},hydrogen:{"@desc":'name "[0-9]?H.*"',map:()=>no.struct.generator.atomGroups({"atom-test":no.core.str.match([no.core.type.regex(["^[0-9]?[H].*$","i"]),no.core.type.str([no.ammp("label_atom_id")])])})},large:{"@desc":'"protein and not (small or medium)"',map:()=>no.struct.modifier.intersectBy({0:Uh(),by:Rl(Lo(Rs.small.concat(Rs.medium)))})},medium:{"@desc":"residues named VAL THR ASP ASN PRO CYS ASX PCA HYP",map:()=>Lo(Rs.medium)},neutral:{"@desc":"residues named VAL PHE GLN TYR HIS CYS MET TRP ASX GLX PCA HYP",map:()=>Lo(Rs.neutral)},hydrophobic:{"@desc":"hydrophobic resname ALA LEU VAL ILE PRO PHE MET TRP",map:()=>Lo(Rs.hydrophobic)},polar:{"@desc":'"protein and not hydrophobic"',map:()=>no.struct.modifier.intersectBy({0:Uh(),by:Rl(Lo(Rs.hydrophobic))})},purine:{"@desc":"residues named ADE A GUA G",map:()=>Lo(Rs.purine)},pyrimidine:{"@desc":"residues named CYT C THY T URI U",map:()=>Lo(Rs.pyrimidine)},small:{"@desc":"residues named ALA GLY SER",map:()=>Lo(Rs.small)},surface:{"@desc":'"protein and not buried"',map:()=>no.struct.modifier.intersectBy({0:Uh(),by:Rl(Lo(Rs.buried))})},alpha_helix:{"@desc":"atom's residue is in an alpha helix",map:()=>kI(["alpha"])},pi_helix:{"@desc":"atom's residue is in a pi helix",map:()=>kI(["pi"])},helix_3_10:{"@desc":"atom's residue is in a 3-10 helix",map:()=>kI(["3-10"])},helix:{"@desc":"atom's residue is in an alpha or pi or 3-10 helix",map:()=>kI(["helix"])},extended_beta:{"@desc":"atom's residue is a beta sheet",map:()=>kI(["sheet"])},bridge_beta:{"@desc":"atom's residue is a beta sheet",map:()=>kI(["strand"])},sheet:{"@desc":"atom's residue is a beta sheet",map:()=>kI(["beta"])},turn:{"@desc":"atom's residue is in a turn conformation",map:()=>kI(["turn"])},coil:{"@desc":"atom's residue is in a coil conformation",map:()=>no.struct.modifier.intersectBy({0:Uh(),by:kI(["none"])})}};var gu=ce,x0e={sqr:{"@desc":"square of x","@examples":["sqr(2)"],map:e=>gu.core.math.pow([e,2])},sqrt:{"@desc":"square root of x","@examples":["sqrt(2)"],map:e=>gu.core.math.sqrt([e])},abs:{"@desc":"absolute value of x","@examples":["abs(2)"],map:e=>gu.core.math.abs([e])},floor:{"@desc":"largest integer not greater than x","@examples":["floor(2)"],map:e=>gu.core.math.floor([e])},ceil:{"@desc":"smallest integer not less than x","@examples":["ceil(2)"],map:e=>gu.core.math.ceil([e])},sin:{"@desc":"sine of x","@examples":["sin(2)"],map:e=>gu.core.math.sin([e])},cos:{"@desc":"cosine of x","@examples":["cos(2)"],map:e=>gu.core.math.cos([e])},tan:{"@desc":"tangent of x","@examples":["tan(2)"],map:e=>gu.core.math.tan([e])},atan:{"@desc":"arctangent of x","@examples":["atan(2)"],map:e=>gu.core.math.atan([e])},asin:{"@desc":"arcsin of x","@examples":["asin(2)"],map:e=>gu.core.math.asin([e])},acos:{"@desc":"arccos of x","@examples":["acos(2)"],map:e=>gu.core.math.acos([e])},sinh:{"@desc":"hyperbolic sine of x","@examples":["sinh(2)"],map:e=>gu.core.math.sinh([e])},cosh:{"@desc":"hyperbolic cosine of x","@examples":["cosh(2)"],map:e=>gu.core.math.cosh([e])},tanh:{"@desc":"hyperbolic tangent of x","@examples":["tanh(2)"],map:e=>gu.core.math.tanh([e])},exp:{"@desc":"e to the power x","@examples":["exp(2)"],map:e=>gu.core.math.exp([e])},log:{"@desc":"natural log of x","@examples":["log(2)"],map:e=>gu.core.math.log([e])},log10:{"@desc":"log base 10 of x","@examples":["log10(2)"],map:e=>gu.core.math.log10([e])}};var iA=ce,_At=[{"@desc":"multiplication, division","@examples":[],name:"mul-div",type:hc,rule:mt.regexp(/\s*(\*|\/)\s*/,1),map:(e,t,r)=>{switch(e){case"*":return iA.core.math.mult([t,r]);case"/":return iA.core.math.div([t,r]);default:throw new Error(`value operator '${e}' not supported`)}}},{"@desc":"addition, substraction","@examples":[],name:"add-sub",type:hc,rule:mt.regexp(/\s*(-|\+)\s*/,1),map:(e,t,r)=>{switch(e){case"-":return iA.core.math.sub([t,r]);case"+":return iA.core.math.add([t,r]);default:throw new Error(`value operator '${e}' not supported`)}}},{"@desc":"value comparisons","@examples":[],name:"comparison",type:hc,rule:mt.alt(mt.regexp(/\s*(=~|==|>=|<=|=|!=|>|<)\s*/,1),mt.whitespace.result("=")),map:(e,t,r)=>{let n;if(t.head!==void 0?(t.head.name==="structure-query.atom-property.macromolecular.secondary-structure-flags"&&(n=iA.core.flags.hasAny([t,Hk(r)])),t.head.name==="core.type.regex"&&(n=iA.core.str.match([t,iA.core.type.str([r])]))):r.head!==void 0?(r.head.name==="structure-query.atom-property.macromolecular.secondary-structure-flags"&&(n=iA.core.flags.hasAny([r,Hk(t)])),r.head.name==="core.type.regex"&&(n=iA.core.str.match([r,iA.core.type.str([t])]))):e==="=~"&&(t.head?n=iA.core.str.match([iA.core.type.regex([`^${r}$`,"i"]),iA.core.type.str([t])]):n=iA.core.str.match([iA.core.type.regex([`^${t}$`,"i"]),iA.core.type.str([r])])),!n)switch(t.head&&(r=k0(t,r)),r.head&&(t=k0(r,t)),e){case"=":case"==":n=iA.core.rel.eq([t,r]);break;case"!=":n=iA.core.rel.neq([t,r]);break;case">":n=iA.core.rel.gr([t,r]);break;case"<":n=iA.core.rel.lt([t,r]);break;case">=":n=iA.core.rel.gre([t,r]);break;case"<=":n=iA.core.rel.lte([t,r]);break;default:throw new Error(`value operator '${e}' not supported`)}return iA.struct.generator.atomGroups({"atom-test":n})}}],YAt=mt.createLanguage({Parens:function(e){return mt.alt(e.Parens,e.Operator,e.Expression).wrap(mt.string("("),mt.string(")"))},Expression:function(e){return mt.alt(e.RangeListProperty,e.ValueQuery,e.Keywords)},NamedAtomProperties:function(){return mt.alt(...Nk(Rh))},Keywords:()=>mt.alt(...Av(pW)),ValueRange:function(e){return mt.seq(e.Value.skip(mt.regexp(/\s+TO\s+/i)),e.Value).map(t=>({range:t}))},RangeListProperty:function(e){return mt.seq(mt.alt(...GR(Rh,/\s/)).skip(mt.whitespace),mt.alt(e.ValueRange,e.Value).sepBy1(mt.whitespace)).map(t=>{let[r,n]=t,o=[],i=[];n.forEach(c=>{c.range?i.push(iA.core.rel.inRange([r,c.range[0],c.range[1]])):o.push(k0(r,c,gW))});let a=g0e(i),A=f0e(r,o),s;return a&&A?s=iA.core.logic.or([a,A]):s=a||A,iA.struct.generator.atomGroups({[p0e(r)]:s})})},Operator:function(e){return GQ(mW,mt.alt(e.Parens,e.Expression,e.ValueQuery))},Query:function(e){return mt.alt(e.Operator,e.Parens,e.Expression).trim(mt.optWhitespace)},Number:function(){return mt.regexp(/-?(0|[1-9][0-9]*)([.][0-9]+)?([eE][+-]?[0-9]+)?/).map(Number).desc("number")},String:function(){let e=sv(Rh,pW,mW).sort(xm).map(eh).join("|");return mt.alt(mt.regexp(new RegExp(`(?!(${e}))[A-Z0-9_]+`,"i")),mt.regexp(/'((?:[^"\\]|\\.)*)'/,1),mt.regexp(/"((?:[^"\\]|\\.)*)"/,1).map(t=>iA.core.type.regex([`^${t}$`,"i"]))).desc("string")},Value:function(e){return mt.alt(e.Number,e.String)},ValueParens:function(e){return mt.alt(e.ValueParens,e.ValueOperator,e.ValueExpressions).wrap(mt.string("("),mt.string(")"))},ValuePropertyNames:function(){return mt.alt(...GR(Rh,/=~|==|>=|<=|=|!=|>|<|\)|\s|\+|-|\*|\//i))},ValueOperator:function(e){return GQ(_At,mt.alt(e.ValueParens,e.ValueExpressions))},ValueExpressions:function(e){return mt.alt(e.ValueFunctions,e.Value,e.ValuePropertyNames)},ValueFunctions:function(e){return mt.alt(...d0e(x0e,e.ValueOperator))},ValueQuery:function(e){return mt.alt(e.ValueOperator.map(t=>{if(!t.head.name||!t.head.name.startsWith("structure-query.generator"))throw new Error(`values must be part of an comparison, value '${t}'`);return t}))}}),S0e=e=>YAt.Query.tryParse(e);var D0e={pymol:Q0e,vmd:S0e,jmol:C0e};var OAt=D0e;function v0e(e,t){try{return OAt[e](t)}catch(r){throw console.error(r.message),r}}function zo(e,t){return{expression:e,language:t}}(A=>{A.Info={"mol-script":"Mol-Script",pymol:"PyMOL",vmd:"VMD",jmol:"Jmol"};function t(s){return!!s&&typeof s.expression=="string"&&!!s.language}A.is=t;function r(s,c){return s.language===c.language&&s.expression===c.expression}A.areEqual=r;function n(s){switch(s.language){case"mol-script":let c=c0e(s.expression);if(c.length===0)throw new Error("No query");return A0e(c[0]);case"pymol":case"jmol":case"vmd":return v0e(s.language,s.expression);default:Or(s.language)}}A.toExpression=n;function o(s){let c=n(s);return au(c)}A.toQuery=o;function i(s,c){let u=o(s)(new qo(c));return Qt.toLociWithSourceUnits(u)}A.toLoci=i;function a(s,c,l){let u=typeof s=="function"?s(ce):s;return au(u)(new qo(c,l))}A.getStructureSelection=a})(zo||={});var lv={dynamicBonds:h.Optional(h.Boolean(!1,{description:"Ensure bonds are recalculated upon model changes. Also enables calculation of inter-unit bonds in water molecules and ions."}))},Lh;(A=>{function e(s,c){let l=s&&Fo.Provider.get(s),u=l?l.assemblies.map(I=>[I.id,`${I.id}: ${Ra(I.details)}`]):[],g=l?!Ia.isZero(l.spacegroup.cell):!0,m=[];if(l){let{operators:I}=l.spacegroup;for(let C=0,y=I.length;C<y;C++)m.push([C,`${C+1}: ${HA.getOperatorXyz(I[C])}`])}let p=[];s&&s.properties.structAsymMap.forEach(I=>{let C=I.id===I.auth_id?I.id:`${I.id} [auth ${I.auth_id}]`;p.push([I.id,C])});let d={auto:h.Group(lv),model:h.Group(lv),assembly:h.Group({id:h.Optional(s?h.Select(u.length?u[0][0]:"",u,{label:"Asm Id",description:"Assembly Id"}):h.Text("",{label:"Asm Id",description:"Assembly Id (use empty for the 1st assembly)"})),...lv},{isFlat:!0}),"symmetry-mates":h.Group({radius:h.Numeric(5,{min:0,max:50,step:1}),...lv},{isFlat:!0}),symmetry:h.Group({ijkMin:h.Vec3(B.create(-1,-1,-1),{step:1},{label:"Min IJK",fieldLabels:{x:"I",y:"J",z:"K"}}),ijkMax:h.Vec3(B.create(1,1,1),{step:1},{label:"Max IJK",fieldLabels:{x:"I",y:"J",z:"K"}}),...lv},{isFlat:!0}),"symmetry-assembly":h.Group({generators:h.ObjectList({operators:h.ObjectList({index:h.Select(0,m),shift:h.Vec3(B(),{step:1},{label:"IJK",fieldLabels:{x:"I",y:"J",z:"K"}})},I=>`${I.index+1}_${I.shift.map(C=>C+5).join("")}`,{defaultValue:[]}),asymIds:h.MultiSelect([],p)},I=>`${I.asymIds.length} asym ids, ${I.operators.length} operators`,{defaultValue:[]}),...lv},{isFlat:!0})},f=[];return c==="auto"&&f.push(["auto","Auto"]),f.push(["model","Model"]),u.length>0&&f.push(["assembly","Assembly"]),g&&(f.push(["symmetry-mates","Symmetry Mates"]),f.push(["symmetry","Symmetry (indices)"]),f.push(["symmetry-assembly","Symmetry (assembly)"])),{type:h.MappedStatic(c||"model",d,{options:f})}}A.getParams=e;function t(s,c){return!(c.name==="symmetry-assembly"||c.name==="symmetry"&&s.name==="symmetry")}A.canAutoUpdate=t;async function r(s,c,l,u,g){let m,p=Fo.Provider.get(l);!u&&p&&p.assemblies.length!==0&&(u=p.assemblies[0].id),!p||p.assemblies.length===0?s.log.warn(`Model '${l.entryId}' has no assembly, returning model structure.`):(m=ah.findAssembly(l,u||""),m||s.log.warn(`Model '${l.entryId}' has no assembly called '${u}', returning model structure.`));let d=Ye.ofModel(l,g);if(!m){let C={label:"Model",description:Ye.elementDescription(d)};return new te.Molecule.Structure(d,C)}u=m.id;let f=await Jc.buildAssembly(d,u).runInContext(c),I={label:`Assembly ${u}`,description:Ye.elementDescription(f)};return new te.Molecule.Structure(f,I)}async function n(s,c,l,u,g){let m=Ye.ofModel(c,g),p=await Jc.buildSymmetryRange(m,l,u).runInContext(s),d={label:`Symmetry [${l}] to [${u}]`,description:Ye.elementDescription(p)};return new te.Molecule.Structure(p,d)}async function o(s,c,l,u){let g=Ye.ofModel(c,u),m=await Jc.builderSymmetryMates(g,l).runInContext(s),p={label:"Symmetry Mates",description:Ye.elementDescription(m)};return new te.Molecule.Structure(m,p)}async function i(s,c,l,u,g){let m=Ye.ofModel(c,g),p=await Jc.buildSymmetryAssembly(m,l,u).runInContext(s),d={label:"Symmetry Assembly",description:Ye.elementDescription(p)};return new te.Molecule.Structure(p,d)}async function a(s,c,l,u){let g=u?.params,m=Fo.Provider.get(l);if(!m||!u||u.name==="model"){let p=Ye.ofModel(l,g);return new te.Molecule.Structure(p,{label:"Model",description:Ye.elementDescription(p)})}if(u.name==="auto")if(m.assemblies.length===0){let p=Ye.ofModel(l,g);return new te.Molecule.Structure(p,{label:"Model",description:Ye.elementDescription(p)})}else return r(s,c,l,void 0,g);if(u.name==="assembly")return r(s,c,l,u.params.id,g);if(u.name==="symmetry")return n(c,l,u.params.ijkMin,u.params.ijkMax,g);if(u.name==="symmetry-mates")return o(c,l,u.params.radius,g);if(u.name==="symmetry-assembly")return i(c,l,u.params.generators,m,g);Or(u)}A.create=a})(Lh||={});var tc;(a=>{function e(A,s,c){return A.currentStructure!==c?!1:zo.is(s)?!!A.script&&zo.areEqual(A.script,s):A.expression===s}a.isUnchanged=e;function t(A,s){let c=zo.is(s)?s:void 0,l=zo.is(s)?zo.toExpression(s):s,u=au(l);return{script:c,expression:l,compiled:u,originalStructure:A,currentStructure:A}}a.create=t;function r(A,s){return A.compiled(new qo(s))}a.run=r;function n(A,s){let c=t(A,s);return{entry:c,selection:r(c,A)}}a.createAndRun=n;function o(A,s){return A.currentStructure=s,A.compiled(new qo(s))}a.updateStructure=o;function i(A,s,c){let l=Qt.unionStructure(s);A.label=`${c||"Selection"}`,A.description=Ye.elementDescription(l),A.data=l}a.updateStructureObject=i})(tc||={});var F0e=["all","polymer","protein","nucleic","water","ion","lipid","branched","ligand","non-standard","coarse"],w0e=()=>({type:h.MappedStatic("static",{static:h.Text("polymer"),expression:h.Value(ce.struct.generator.all),bundle:h.Value(W.Bundle.Empty),script:h.Script({language:"mol-script",expression:"(sel.atom.all)"})},{isHidden:!0}),nullIfEmpty:h.Optional(h.Boolean(!0,{isHidden:!0})),label:h.Text("",{isHidden:!0})});function uv(e,t,r){r.source=e;let n=Ye.Empty,o;switch(t.type.name){case"static":{let a;switch(t.type.params){case"all":a=Oi.all.query,o="All";break;case"polymer":a=Oi.polymer.query,o="Polymer";break;case"protein":a=Oi.protein.query,o="Protein";break;case"nucleic":a=Oi.nucleic.query,o="Nucleic";break;case"water":a=wo.internal.water(),o="Water";break;case"ion":a=Oi.ion.query,o="Ion";break;case"lipid":a=Oi.lipid.query,o="Lipid";break;case"branched":a=Oi.branchedPlusConnected.query,o="Branched";break;case"ligand":a=Oi.ligandPlusConnected.query,o="Ligand";break;case"non-standard":a=Oi.nonStandardPolymer.query,o="Non-standard";break;case"coarse":a=Oi.coarse.query,o="Coarse";break;default:Or(t.type)}let A=a(new qo(e));n=Qt.unionStructure(A);break}case"script":case"expression":{let{selection:a,entry:A}=tc.createAndRun(e,t.type.params);r.entry=A,n=Qt.unionStructure(a);break}case"bundle":{if(t.type.params.hash!==e.hashCode)break;n=W.Bundle.toStructure(t.type.params,e);break}}if(t.nullIfEmpty&&n.elementCount===0)return po.Null;let i={label:`${t.label||o||"Component"}`,description:Ye.elementDescription(n)};return new te.Molecule.Structure(n,i)}function R0e(e,t,r,n,o){if(r.type.name!==n.type.name)return lt.UpdateResult.Recreate;let i=!1;switch(n.type.name){case"static":return r.type.params!==n.type.params?lt.UpdateResult.Recreate:Ye.areEquivalent(e,o.source)?t.data.model===e.model?lt.UpdateResult.Unchanged:t.data.model?_t.areHierarchiesEqual(e.model,t.data.model)?(t.data=t.data.remapModel(e.model),lt.UpdateResult.Updated):lt.UpdateResult.Recreate:lt.UpdateResult.Unchanged:lt.UpdateResult.Recreate;case"script":if(!zo.areEqual(r.type.params,n.type.params))return lt.UpdateResult.Recreate;case"expression":{if(r.type.params!==n.type.params)return lt.UpdateResult.Recreate;if(e===o.source)break;let a=o.entry,A=tc.updateStructure(a,e);o.source=e,t.data=Qt.unionStructure(A),tc.updateStructureObject(t,A,n.label),i=!0;break}case"bundle":{if(e===o.source&&W.Bundle.areEqual(r.type.params,n.type.params))break;o.source=e,n.type.params.hash!==e.hashCode?(i=t.data.elementCount!==0,t.data=t.data.elementCount===0?t.data:Ye.Empty):(i=!0,t.data=W.Bundle.toStructure(n.type.params,e));break}}if(i){if(n.nullIfEmpty&&t.data.elementCount===0)return lt.UpdateResult.Null;t.description=Ye.elementDescription(t.data)}return r.label!==n.label&&(i=!0,t.label=`${n.label||t.label}`),i?lt.UpdateResult.Updated:lt.UpdateResult.Unchanged}function U0e(e){switch(e){case 7:return-3;case 6:return-2;case 5:return-1;case 0:return 0;case 3:return 1;case 2:return 2;case 1:return 3;case 4:return 0;default:return console.error(`Value ${e} is outside the 0-7 range, defaulting to 0.`),0}}function fW(e,t){let r=ct.create(e.data,t*2),n=ct.create(e.data,t*2),o=ct.create(e.data,t*2),i=ct.create(e.data,t*2),a=ct.create(e.data,t*2);for(let A=0;A<t;++A){Pt.markLine(e);let{tokenStart:s,position:c}=e;Pt.trim(e,s,s+10),ct.addUnchecked(r,e.tokenStart,e.tokenEnd),Pt.trim(e,s+10,s+20),ct.addUnchecked(n,e.tokenStart,e.tokenEnd),Pt.trim(e,s+20,s+30),ct.addUnchecked(o,e.tokenStart,e.tokenEnd),Pt.trim(e,s+31,s+34),ct.addUnchecked(i,e.tokenStart,e.tokenEnd),Pt.trim(e,s+36,s+39),ct.addUnchecked(a,e.tokenStart,e.tokenEnd),e.position=c}return{count:t,x:dr(r)(K.Schema.float),y:dr(n)(K.Schema.float),z:dr(o)(K.Schema.float),type_symbol:dr(i)(K.Schema.str),formal_charge:dr(a)(K.Schema.int)}}function BW(e,t){let r=ct.create(e.data,t*2),n=ct.create(e.data,t*2),o=ct.create(e.data,t*2);for(let i=0;i<t;++i){Pt.markLine(e);let{tokenStart:a,position:A}=e;Pt.trim(e,a,a+3),ct.addUnchecked(r,e.tokenStart,e.tokenEnd),Pt.trim(e,a+3,a+6),ct.addUnchecked(n,e.tokenStart,e.tokenEnd),Pt.trim(e,a+6,a+9),ct.addUnchecked(o,e.tokenStart,e.tokenEnd),e.position=A}return{count:t,atomIdxA:dr(r)(K.Schema.int),atomIdxB:dr(n)(K.Schema.int),order:dr(o)(K.Schema.int)}}function JAt(e,t,r){Pt.trim(e,t+6,t+9);let n=parseInt(Pt.getTokenString(e));for(let o=0;o<n;++o){let i=9+o*8;Pt.trim(e,t+i,t+i+4);let a=Pt.getTokenString(e);r.atomIdx.push(+a),Pt.trim(e,t+i+4,t+i+8);let A=Pt.getTokenString(e);r.charge.push(+A)}Pt.eatLine(e)}function zAt(e){let t=e.trim().split(/\s+/g),r=[];for(let n=1;n<t.length;n+=2){let o=+t[n],i=+t[n+1]||0;r.push({atomIdx:o,kind:i})}return r}function IW(e){let n={atomIdx:[],charge:[]},o;for(;e.position<e.length;){let{position:a}=e;Pt.trim(e,a+3,a+6);let A=Pt.getTokenString(e);if(A==="END")break;switch(Pt.eatLine(e),A){case"CHG":JAt(e,a,n);break;case"APO":o=zAt(Pt.getTokenString(e).substring(3));break;default:break}}return{formalCharges:{atomIdx:K.ofIntArray(n.atomIdx),charge:K.ofIntArray(n.charge)},attachmentPoints:o}}function KAt(e){let t=Pt(e),r=Pt.readLine(t).trim(),n=Pt.readLine(t).trim(),o=Pt.readLine(t).trim(),i=Pt.readLine(t),a=+i.substr(0,3),A=+i.substr(3,3),s=fW(t,a),c=BW(t,A),l={title:r,program:n,comment:o,atoms:s,bonds:c,...IW(t)};return An.success(l)}function L0e(e){return ve.create("Parse Mol",async()=>KAt(e))}async function CW(e,t,r){let{atoms:n,bonds:o,formalCharges:i}=e,a=K.ofConst("MOL",e.atoms.count,K.Schema.str),A=K.ofConst("A",e.atoms.count,K.Schema.str),s=K.asArrayColumn(n.type_symbol),c=K.ofConst(1,n.count,K.Schema.int),l=new Int32Array(e.atoms.count);if(i.atomIdx.rowCount>0)for(let f=0;f<i.atomIdx.rowCount;f++)l[i.atomIdx.value(f)-1]=i.charge.value(f);else for(let f=0;f<e.atoms.count;f++)l[f]=U0e(n.formal_charge.value(f));let u=Jr.ofPartialColumns($o.atom_site,{auth_asym_id:A,auth_atom_id:s,auth_comp_id:a,auth_seq_id:c,Cartn_x:K.asArrayColumn(n.x,Float32Array),Cartn_y:K.asArrayColumn(n.y,Float32Array),Cartn_z:K.asArrayColumn(n.z,Float32Array),id:K.range(1,n.count),label_asym_id:A,label_atom_id:s,label_comp_id:a,label_seq_id:c,label_entity_id:K.ofConst("1",n.count,K.Schema.str),occupancy:K.ofConst(1,n.count,K.Schema.float),type_symbol:s,pdbx_PDB_model_num:K.ofConst(1,n.count,K.Schema.int),pdbx_formal_charge:K.ofIntArray(l)},n.count),g=new Ca;g.setNames([["MOL","Unknown Entity"]]),g.getEntityId("MOL",0,"A");let m=new Ha(c,s);m.setNames([["MOL","Unknown Molecule"]]),m.add("MOL",0);let p=La({entity:g.getEntityTable(),chem_comp:m.getChemCompTable(),atom_site:u}),d=await SA(p,t??T0e.create(e),r);if(d.frameCount>0){let f=K.ofIntArray(K.mapToArray(o.atomIdxA,Q=>Q-1,Int32Array)),I=K.ofIntArray(K.mapToArray(o.atomIdxB,Q=>Q-1,Int32Array)),C=K.asArrayColumn(o.order,Int32Array),y=Hi.fromData({pairs:{indexA:f,indexB:I,order:C},count:n.count},{maxDistance:1/0});Hi.Provider.set(d.representative,y)}return d}var T0e;(r=>{function e(n){return n?.kind==="mol"}r.is=e;function t(n){return{kind:"mol",name:n.title,data:n}}r.create=t})(T0e||={});function P0e(e){return ve.create("Parse MOL",t=>CW(e,void 0,t))}function jAt(e){let t=e.it_number.value(0),r=e["name_h-m_full"].isDefined?e["name_h-m_full"]:e["name_h-m_alt"],n=r.value(0).replace("_"," ");return e.it_number.isDefined?(r.isDefined,t):n}function WAt(e){let{cell:t,space_group:r}=e,n=jAt(r),o=Ia.create(n,B.create(t.length_a.value(0),t.length_b.value(0),t.length_c.value(0)),B.scale(B(),B.create(t.angle_alpha.value(0),t.angle_beta.value(0),t.angle_gamma.value(0)),Math.PI/180));return{spacegroup:HA.create(o),assemblies:[],isNonStandardCrystalFrame:!1,ncsOperators:[]}}async function XAt(e,t,r){let n=e.atom_site._rowCount,o=K.ofConst("MOL",n,K.Schema.str),i=K.ofConst("A",n,K.Schema.str),a=K.ofConst(1,n,K.Schema.int),A=WAt(e),s=A.spacegroup.cell.fromFractional,{fract_x:c,fract_y:l,fract_z:u}=e.atom_site,g=new Float32Array(n),m=new Float32Array(n),p=new Float32Array(n),d=B();for(let R=0;R<n;++R)B.set(d,c.value(R),l.value(R),u.value(R)),B.transformMat4(d,d,s),g[R]=d[0],m[R]=d[1],p[R]=d[2];let{type_symbol:f,label:I}=e.atom_site,C,y;if(f.isDefined){let R=new Array(n),T=new Int8Array(n);for(let L=0;L<n;++L){let F=f.value(L),v=F.length;if(F[v-1]==="+"){let U=F.charCodeAt(v-2);v>=2&&U>=49&&U<=57?(R[L]=F.substring(0,v-2),T[L]=U-48):(R[L]=F.substring(0,v-1),T[L]=1)}else if(v>=2&&F[v-2]==="+")R[L]=F.substring(0,v-2),T[L]=F.charCodeAt(v-1)-48;else if(F[v-1]==="-"){let U=F.charCodeAt(v-2);v>=2&&U>=48&&U<=57?(R[L]=F.substring(0,v-2),T[L]=-(U-48)):(R[L]=F.substring(0,v-1),T[L]=-1)}else v>=2&&F[v-2]==="-"?(R[L]=F.substring(0,v-2),T[L]=-(F.charCodeAt(v-1)-48)):(R[L]=F,T[L]=0)}C=K.ofStringArray(R),y=K.ofIntArray(T)}else{let R=new Array(n);for(let T=0;T<n;++T)R[T]=Ep(I.value(T),"");C=K.ofStringArray(R),y=K.Undefined(n,K.Schema.int)}let Q=Jr.ofPartialColumns($o.atom_site,{auth_asym_id:i,auth_atom_id:I,auth_comp_id:o,auth_seq_id:a,Cartn_x:K.ofFloatArray(g),Cartn_y:K.ofFloatArray(m),Cartn_z:K.ofFloatArray(p),id:K.range(0,n-1),label_asym_id:i,label_atom_id:I,label_comp_id:o,label_seq_id:a,label_entity_id:K.ofConst("1",n,K.Schema.str),occupancy:e.atom_site.occupancy.isDefined?e.atom_site.occupancy:K.ofConst(1,n,K.Schema.float),type_symbol:C,pdbx_formal_charge:y,pdbx_PDB_model_num:K.ofConst(1,n,K.Schema.int),B_iso_or_equiv:e.atom_site.u_iso_or_equiv},n),E=e.chemical.name_common.value(0)||e.chemical.name_systematic.value(0)||e.chemical_formula.sum.value(0),b=new Ca;b.setNames([["MOL",E||"Unknown Entity"]]),b.getEntityId("MOL",0,"A");let x=new Ha(a,e.atom_site.type_symbol);x.setNames([["MOL",E||"Unknown Molecule"]]),x.add("MOL",0);let S=La({entity:b.getEntityTable(),chem_comp:x.getChemCompTable(),atom_site:Q}),w=await SA(S,t,r);if(w.frameCount>0){let R=w.representative;Fo.Provider.set(R,A);let T=e.geom_bond._rowCount;if(T>0){let L={},{label:F}=e.atom_site;for(let oe=0,ae=F.rowCount;oe<ae;++oe)L[F.value(oe)]=oe;let v=t.data.frame.categories.ccdc_geom_bond_type?.getField(""),U=[],G=[],N=[],k=[],J=[],H=new Set,z=0,{atom_site_label_1:_,atom_site_label_2:M,valence:q,distance:ne}=e.geom_bond;for(let oe=0;oe<T;++oe){let ae=L[_.value(oe)],me=L[M.value(oe)],Se=ae<me?ko(ae,me):ko(me,ae);if(!H.has(Se)){if(H.add(Se),U[z]=ae,G[z]=me,k[z]=ne.value(oe)||-1,v){let ee=v.str(oe);ee==="D"?(N[z]=2,J[z]=It.Flag.Covalent):ee==="A"?(N[z]=1,J[z]=It.Flag.Covalent|It.Flag.Aromatic):ee==="S"?(N[z]=1,J[z]=It.Flag.Covalent):(N[z]=1,J[z]=It.Flag.Covalent)}else J[z]=It.Flag.Covalent,N[z]=q.isDefined?q.value(oe):1;z+=1}}Hi.Provider.set(R,Hi.fromData({pairs:{indexA:K.ofIntArray(U),indexB:K.ofIntArray(G),order:K.ofIntArray(N),distance:K.ofFloatArray(k),flag:K.ofIntArray(J)},count:n}))}}return w}function ZAt(e){if(!Vk.is(e.sourceData))return;let{atom_site:t,atom_site_aniso:r}=e.sourceData.data.db,n=Jr.ofPartialColumns(cm.Schema,{U:r.u},r._rowCount),o=cm.getElementToAnsiotropFromLabel(t.label,r.label);return{data:n,elementToAnsiotrop:o}}function qAt(e){return Vk.is(e.sourceData)?e.sourceData.data.db.atom_site_aniso.u.isDefined:!1}cm.Provider.formatRegistry.add("cifCore",ZAt,qAt);var Vk;(r=>{function e(n){return n?.kind==="cifCore"}r.is=e;function t(n,o){return o||(o=Kc.schema.cifCore(n)),{kind:"cifCore",name:o.database_code.depnum_ccdc_archive.value(0)||o.database_code.depnum_ccdc_fiz.value(0)||o.database_code.icsd.value(0)||o.database_code.mdf.value(0)||o.database_code.nbs.value(0)||o.database_code.csd.value(0)||o.database_code.cod.value(0)||o._name,data:{db:o,frame:n}}}r.fromFrame=t})(Vk||={});function G0e(e){let t=Vk.fromFrame(e);return ve.create("Parse CIF Core",r=>XAt(t.data.db,t,r))}async function $At(e,t){let{atoms:r}=e,n=K.ofConst("MOL",e.atoms.count,K.Schema.str),o=K.ofConst("A",e.atoms.count,K.Schema.str),i=K.ofArray({array:K.mapToArray(r.number,u=>Vz(u)),schema:K.Schema.Aliased(K.Schema.str)}),a=K.ofConst(1,r.count,K.Schema.int),A=Jr.ofPartialColumns($o.atom_site,{auth_asym_id:o,auth_atom_id:i,auth_comp_id:n,auth_seq_id:a,Cartn_x:K.asArrayColumn(r.x,Float32Array),Cartn_y:K.asArrayColumn(r.y,Float32Array),Cartn_z:K.asArrayColumn(r.z,Float32Array),id:K.range(0,r.count-1),label_asym_id:o,label_atom_id:i,label_comp_id:n,label_seq_id:a,label_entity_id:K.ofConst("1",r.count,K.Schema.str),occupancy:K.ofConst(1,r.count,K.Schema.float),type_symbol:i,pdbx_PDB_model_num:K.ofConst(1,r.count,K.Schema.int)},r.count),s=new Ca;s.setNames([["MOL","Unknown Entity"]]),s.getEntityId("MOL",0,"A");let c=new Ha(a,i);c.setNames([["MOL","Unknown Molecule"]]),c.add("MOL",0);let l=La({entity:s.getEntityTable(),chem_comp:c.getChemCompTable(),atom_site:A});return await SA(l,N0e.create(e),t)}var N0e;(r=>{function e(n){return n?.kind==="cube"}r.is=e;function t(n){return{kind:"cube",name:n.header.comment1,data:n}}r.create=t})(N0e||={});function M0e(e){return ve.create("Parse Cube",t=>$At(e,t))}var{skipWhitespace:k0e,eatValue:est,markLine:Cd,getTokenString:hd,skipStrictWhitespace:tst}=Pt;function rst(){return{mol_name:"",num_atoms:0,num_bonds:0,num_subst:0,num_feat:0,num_sets:0,mol_type:"",charge_type:"",status_bits:"",mol_comment:""}}function nst(e,t){return{tokenizer:e,molecule:rst(),runtimeCtx:t}}var H0e=/\s+/g;function ost(e){let{tokenizer:t,molecule:r}=e;for(;hd(t)!=="@<TRIPOS>MOLECULE"&&t.position<t.data.length;)Cd(t);Cd(t),r.mol_name=hd(t),Cd(t);let n=hd(t).trim().split(H0e);r.num_atoms=parseInt(n[0]),r.num_bonds=parseInt(n[1]),r.num_subst=parseInt(n[2]),r.num_feat=parseInt(n[3]),r.num_sets=parseInt(n[4]),Cd(t);let o=hd(t);if(o.startsWith("@<TRIPOS>"))return;r.mol_type=o,Cd(t);let i=hd(t);if(i.startsWith("@<TRIPOS>"))return;r.charge_type=i,Cd(t);let a=hd(t);if(a.startsWith("@<TRIPOS>"))return;r.status_bits=a,Cd(t);let A=hd(t);A.startsWith("@<TRIPOS>")||(r.mol_comment=A)}function hW(e,t,r){let n=0;for(let o=0;o<e;o++){let i=0;for(k0e(r);tst(r),r.tokenStart=r.position,est(r),r.tokenStart!==r.tokenEnd;){let a=t[i++];a&&ct.addUnchecked(a,r.tokenStart,r.tokenEnd)}i>n&&(n=i);for(let a=i;a<t.length;a++)ct.addUnchecked(t[a],0,0)}return n+1}async function ist(e){let{tokenizer:t,molecule:r}=e;for(;hd(t)!=="@<TRIPOS>ATOM"&&t.position<t.data.length;)Cd(t);let n=t.position,o=t.lineNumber,i=ct.create(t.data,r.num_atoms*2),a=ct.create(t.data,r.num_atoms*2),A=ct.create(t.data,r.num_atoms*2),s=ct.create(t.data,r.num_atoms*2),c=ct.create(t.data,r.num_atoms*2),l=ct.create(t.data,r.num_atoms*2),u=ct.create(t.data,r.num_atoms*2),g=ct.create(t.data,r.num_atoms*2),m=ct.create(t.data,r.num_atoms*2),p=ct.create(t.data,r.num_atoms*2),d=K.Undefined(r.num_atoms,K.Schema.float),f=K.Undefined(r.num_atoms,K.Schema.int),I=K.Undefined(r.num_atoms,K.Schema.str);t.position=n,t.lineNumber=o;let C=0,y=[i,a,A,s,c,l,u,g,m,p],{length:Q}=t,E=0;return await bs(e.runtimeCtx,1e5,void 0,x=>{let S=Math.min(r.num_atoms-E,x);return C=Math.max(C,hW(S,y,t)),E+=S,S},x=>x.update({message:"Parsing...",current:t.position,max:Q})),{count:r.num_atoms,atom_id:dr(i)(K.Schema.int),atom_name:dr(a)(K.Schema.str),x:dr(A)(K.Schema.float),y:dr(s)(K.Schema.float),z:dr(c)(K.Schema.float),atom_type:C>5?dr(l)(K.Schema.str):I,subst_id:C>6?dr(u)(K.Schema.int):f,subst_name:C>7?dr(g)(K.Schema.str):I,charge:C>8?dr(m)(K.Schema.float):d,status_bits:C>9?dr(p)(K.Schema.str):I}}async function ast(e){let{tokenizer:t,molecule:r}=e;for(;hd(t)!=="@<TRIPOS>BOND"&&t.position<t.data.length;)Cd(t);let n=t.position,o=t.lineNumber,i=ct.create(t.data,r.num_bonds*2),a=ct.create(t.data,r.num_bonds*2),A=ct.create(t.data,r.num_bonds*2),s=ct.create(t.data,r.num_bonds*2),c=ct.create(t.data,r.num_bonds*2),l=K.Undefined(r.num_bonds,K.Schema.str);t.position=n,t.lineNumber=o;let u=0,g=[i,a,A,s,c],{length:m}=t,p=0;return await bs(e.runtimeCtx,1e5,void 0,f=>{let I=Math.min(r.num_bonds-p,f);return u=Math.max(u,hW(I,g,t)),p+=I,I},f=>f.update({message:"Parsing...",current:t.position,max:m})),{count:r.num_bonds,bond_id:dr(i)(K.Schema.int),origin_atom_id:dr(a)(K.Schema.int),target_atom_id:dr(A)(K.Schema.int),bond_type:dr(s)(K.Schema.str),status_bits:u>4?dr(c)(K.Schema.str):l}}async function Ast(e){let{tokenizer:t,molecule:r}=e;if(r.num_subst===0)return;for(;hd(t)!=="@<TRIPOS>SUBSTRUCTURE"&&t.position<t.data.length;)Cd(t);let n=t.position,o=t.lineNumber,i=ct.create(t.data,r.num_subst*2),a=ct.create(t.data,r.num_subst*2),A=ct.create(t.data,r.num_subst*2),s=ct.create(t.data,r.num_subst*2),c=ct.create(t.data,r.num_subst*2),l=ct.create(t.data,r.num_subst*2),u=ct.create(t.data,r.num_subst*2),g=ct.create(t.data,r.num_subst*2),m=ct.create(t.data,r.num_subst*2),p=K.Undefined(r.num_subst,K.Schema.int),d=K.Undefined(r.num_subst,K.Schema.str);t.position=n,t.lineNumber=o;let f=0,I=[i,a,A,s,c,l,u,g,m],{length:C}=t,y=0;return await bs(e.runtimeCtx,1e5,void 0,E=>{let b=Math.min(r.num_subst-y,E);return f=Math.max(f,hW(b,I,t)),y+=b,b},E=>E.update({message:"Parsing...",current:t.position,max:C})),{count:r.num_subst,subst_id:dr(i)(K.Schema.int),subst_name:dr(a)(K.Schema.str),root_atom:dr(A)(K.Schema.int),subst_type:f>3?dr(s)(K.Schema.str):d,dict_type:f>4?dr(c)(K.Schema.str):d,chain:f>5?dr(l)(K.Schema.str):d,sub_type:f>6?dr(u)(K.Schema.str):d,inter_bonds:f>7?dr(g)(K.Schema.int):p,status_bits:f>8?dr(m)(K.Schema.str):d}}function sst(e){let{tokenizer:t}=e;for(;t.position<t.data.length;){let n=hd(t);if(n==="@<TRIPOS>MOLECULE")return;if(n==="@<TRIPOS>CRYSIN")break;Cd(t)}if(t.position>=t.data.length)return;Cd(t);let r=hd(t).trim().split(H0e);return{a:parseFloat(r[0]),b:parseFloat(r[1]),c:parseFloat(r[2]),alpha:parseFloat(r[3]),beta:parseFloat(r[4]),gamma:parseFloat(r[5]),spaceGroup:parseInt(r[6],10),setting:parseInt(r[7],10)}}async function cst(e,t,r){let n=Pt(t);e.update({message:"Parsing...",current:0,max:t.length});let o=[];for(;n.position<t.length;){let a=nst(n,e);ost(a);let A=await ist(a),s=await ast(a),c=await Ast(a),l=sst(a);for(o.push({molecule:a.molecule,atoms:A,bonds:s,substructures:c,crysin:l}),k0e(n);hd(n)!=="@<TRIPOS>MOLECULE"&&n.position<n.data.length;)Cd(n)}let i={name:r,structures:o};return An.success(i)}function V0e(e,t){return ve.create("Parse MOL2",async r=>await cst(r,e,t))}async function lst(e,t){let r=[];for(let n=0,o=e.structures.length;n<o;++n){let{molecule:i,atoms:a,bonds:A,substructures:s,crysin:c}=e.structures[n],l=new Array(a.count),u=new Array(a.count),g=new Array(a.count),m=new Array(a.count),p=new Array(a.count),d=!1;for(let k=0;k<a.count;++k)if(a.atom_type.value(k).includes(".")){d=!0;break}let f=new Map;if(s)for(let k=0;k<s.count;++k){let J=s.root_atom.value(k),H=s.chain.value(k),z=s.sub_type.value(k);f.set(J,{chain:H,subType:z})}let I=new Ca,C=new Ha(a.subst_id,a.atom_name),y,Q="",E=0,b="",x=0,S=-1;for(let k=0;k<a.count;++k){let J=a.subst_name.value(k),H=a.subst_id.value(k),z=J.replace(/\d+$/,"")||"MOL",_=J.match(/(\d+)$/);p[k]=_?parseInt(_[1]):H;let M=f.get(a.atom_id.value(k));if(M&&(y=M),y&&y.subType&&y.subType!=="UNK"&&(z=y.subType),g[k]=d?a.atom_type.value(k).split(".")[0].toUpperCase():Ep(a.atom_name.value(k),z),m[k]=z,H!==S){let q=Yc(C.add(z,k).type,z);y?.chain?b=y.chain:(q!==x||H!==S+1)&&(b=Xf(E),E+=1),Q=I.getEntityId(z,q,b),S=H,x=q}l[k]=Q,u[k]=b}let w=K.ofStringArray(g),R=K.ofStringArray(m),T=K.ofStringArray(l),L=K.ofStringArray(u),F=K.asArrayColumn(a.atom_name),v=K.ofIntArray(p),U=Jr.ofPartialColumns($o.atom_site,{auth_asym_id:L,auth_atom_id:F,auth_comp_id:R,auth_seq_id:v,Cartn_x:K.asArrayColumn(a.x,Float32Array),Cartn_y:K.asArrayColumn(a.y,Float32Array),Cartn_z:K.asArrayColumn(a.z,Float32Array),id:K.asArrayColumn(a.atom_id),label_asym_id:L,label_atom_id:F,label_comp_id:R,label_seq_id:a.subst_id,label_entity_id:T,occupancy:K.ofConst(1,a.count,K.Schema.float),type_symbol:w,pdbx_PDB_model_num:K.ofConst(n,a.count,K.Schema.int)},a.count),G=La({entity:I.getEntityTable(),chem_comp:C.getChemCompTable(),atom_site:U}),N=await SA(G,_0e.create(e),t);if(N.frameCount>0){let k=K.ofIntArray(K.mapToArray(A.origin_atom_id,ne=>ne-1,Int32Array)),J=K.ofIntArray(K.mapToArray(A.target_atom_id,ne=>ne-1,Int32Array)),H=A.bond_id,z=K.ofIntArray(K.mapToArray(A.bond_type,ne=>{switch(ne){case"ar":case"am":case"un":return 1;case"du":case"nc":return 0;default:return parseInt(ne)}},Int8Array)),_=K.ofIntArray(K.mapToArray(A.bond_type,ne=>{switch(ne){case"ar":case"am":return It.Flag.Aromatic|It.Flag.Covalent;case"du":case"nc":return It.Flag.None;default:return It.Flag.Covalent}},Int8Array)),M=Hi.fromData({pairs:{key:H,indexA:k,indexB:J,order:z,flag:_},count:a.count},{maxDistance:c?-1:1/0}),q=N.representative;if(Hi.Provider.set(q,M),MI.Provider.set(q,{data:a.charge,type:i.charge_type}),c){let ne=ust(c);ne&&Fo.Provider.set(q,ne)}r.push(q)}}return new fc(r)}function ust(e){if(e.setting!==1)return;let t=Ia.create(e.spaceGroup,B.create(e.a,e.b,e.c),B.scale(B(),B.create(e.alpha,e.beta,e.gamma),Math.PI/180));return{spacegroup:HA.create(t),assemblies:[],isNonStandardCrystalFrame:!1,ncsOperators:[]}}var _0e;(r=>{function e(n){return n?.kind==="mol2"}r.is=e;function t(n){return{kind:"mol2",name:n.name,data:n}}r.create=t})(_0e||={});function Y0e(e){return ve.create("Parse MOL2",t=>lst(e,t))}var gv=new Uint32Array([0,0,0,0,0,0,0,0,0,8,10,12,16,20,25,32,40,50,64,80,101,128,161,203,256,322,406,512,645,812,1024,1290,1625,2048,2580,3250,4096,5060,6501,8192,10321,13003,16384,20642,26007,32768,41285,52015,65536,82570,104031,131072,165140,208063,262144,330280,416127,524287,660561,832255,1048576,1321122,1664510,2097152,2642245,3329021,4194304,5284491,6658042,8388607,10568983,13316085,16777216]),yW=9,yd;(l=>{function e(u){let g=1,m=0;for(;u>=g&&m<32;)m++,g<<=1;return m}l.sizeOfInt=e;let t=new Uint8Array(32);function r(u,g){let m=1,p=0;t[0]=1;for(let f=0;f<u;f++){let I,C=0;for(I=0;I<m;I++)C+=t[I]*g[f],t[I]=C&255,C>>=8;for(;C!==0;)t[I++]=C&255,C>>=8;m=I}let d=1;for(m--;t[m]>=d;)p++,d*=2;return p+m*8}l.sizeOfInts=r;let n=new ArrayBuffer(24);l.buf=new Int32Array(n);let i=new Uint32Array(n);function a(u,g,m){let p=m,d=(1<<p)-1,f=i[1],I=i[2],C=l.buf[0],y=0;for(;p>=8;)I=I<<8|u[g+C++],y|=I>>f<<p-8,p-=8;return p>0&&(f<p&&(f+=8,I=I<<8|u[g+C++]),f-=p,y|=I>>f&(1<<p)-1),y&=d,l.buf[0]=C,l.buf[1]=f,l.buf[2]=I,y}l.decodeBits=a;function A(u,g){let m=i[2],p=l.buf[0];return m=m<<8|u[g+p],l.buf[0]=p+1,l.buf[2]=m,m>>i[1]&255}let s=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0];function c(u,g,m,p,d){let f=m,I=0;for(s[0]=0,s[1]=0,s[2]=0,s[3]=0;f>8;)s[I++]=A(u,g),f-=8;f>0&&(s[I++]=a(u,g,f));for(let C=2;C>0;C--){let y=0,Q=p[C];for(let E=I-1;E>=0;E--){y=y<<8|s[E];let b=y/Q|0;s[E]=b,y=y-b*Q}d[C]=y}d[0]=s[0]|s[1]<<8|s[2]<<16|s[3]<<24}l.decodeInts=c})(yd||={});function gst(){throw new Error("(xdrfile error) Undefined error.")}async function mst(e,t){let r=new DataView(t.buffer,t.byteOffset),n={frames:[],boxes:[],times:[],timeOffset:0,deltaTime:0},o=n.frames,i=n.boxes,a=n.times,A=[0,0,0,0,0,0],s=[0,0,0],c=[0,0,0],l=[0,0,0],u=[.1,.1,.1],g=[.1,.1,.1],m=0,p=yd.buf;for(;;){let d,f=r.getInt32(m+4);m+=12,a.push(r.getFloat32(m)),m+=4;let I=new Float32Array(9);for(let C=0;C<9;++C)I[C]=r.getFloat32(m)*10,m+=4;if(i.push(I),f<=9){d={count:f,x:new Float32Array(f),y:new Float32Array(f),z:new Float32Array(f)},m+=4;for(let C=0;C<f;++C)d.x[C]=r.getFloat32(m),d.y[C]=r.getFloat32(m+4),d.z[C]=r.getFloat32(m+8),m+=12}else{p[0]=p[1]=p[2]=0,s[0]=s[1]=s[2]=0,l[0]=l[1]=l[2]=0,c[0]=c[1]=c[2]=0,u[0]=u[1]=u[2]=0,g[0]=g[1]=g[2]=0,d={count:f,x:new Float32Array(f),y:new Float32Array(f),z:new Float32Array(f)};let C=0,y=r.getInt32(m);m+=4;let Q=r.getFloat32(m);m+=4,A[0]=r.getInt32(m),A[1]=r.getInt32(m+4),A[2]=r.getInt32(m+8),A[3]=r.getInt32(m+12),A[4]=r.getInt32(m+16),A[5]=r.getInt32(m+20),s[0]=A[3]-A[0]+1,s[1]=A[4]-A[1]+1,s[2]=A[5]-A[2]+1,m+=24;let E;(s[0]|s[1]|s[2])>16777215?(c[0]=yd.sizeOfInt(s[0]),c[1]=yd.sizeOfInt(s[1]),c[2]=yd.sizeOfInt(s[2]),E=0):E=yd.sizeOfInts(3,s);let b=r.getInt32(m);m+=4;let x=b-1;x=yW>x?yW:x;let S=gv[x]/2|0,w=gv[b]/2|0;l[0]=l[1]=l[2]=gv[b];let R=Math.ceil(r.getInt32(m)/4)*4;m+=4;let T=1/Q,L=0,F=0;for(u[0]=u[1]=u[2]=0;F<y;){E===0?(u[0]=yd.decodeBits(t,m,c[0]),u[1]=yd.decodeBits(t,m,c[1]),u[2]=yd.decodeBits(t,m,c[2])):yd.decodeInts(t,m,E,s,u),F++,u[0]+=A[0],u[1]+=A[1],u[2]+=A[2],g[0]=u[0],g[1]=u[1],g[2]=u[2];let v=yd.decodeBits(t,m,1),U=0;if(v===1&&(L=yd.decodeBits(t,m,5),U=L%3,L-=U,U--),L>0){u[0]=u[1]=u[2]=0;for(let G=0;G<L;G+=3){if(yd.decodeInts(t,m,b,l,u),F++,u[0]+=g[0]-w,u[1]+=g[1]-w,u[2]+=g[2]-w,G===0){let N=u[0];u[0]=g[0],g[0]=N,N=u[1],u[1]=g[1],g[1]=N,N=u[2],u[2]=g[2],g[2]=N,d.x[C]=g[0]*T,d.y[C]=g[1]*T,d.z[C]=g[2]*T,C++}else g[0]=u[0],g[1]=u[1],g[2]=u[2];d.x[C]=u[0]*T,d.y[C]=u[1]*T,d.z[C]=u[2]*T,C++}}else d.x[C]=u[0]*T,d.y[C]=u[1]*T,d.z[C]=u[2]*T,C++;b+=U,U<0?(w=S,b>yW?S=gv[b-1]/2|0:S=0):U>0&&(S=w,w=gv[b]/2|0),l[0]=l[1]=l[2]=gv[b],(l[0]===0||l[1]===0||l[2]===0)&&gst()}m+=R}for(let C=0;C<f;C++)d.x[C]*=10,d.y[C]*=10,d.z[C]*=10;if(o.push(d),e.shouldUpdate&&await e.update({current:m,max:t.length}),m>=t.length)break}return a.length>=1&&(n.timeOffset=a[0]),a.length>=2&&(n.deltaTime=a[1]-a[0]),n}function O0e(e){return ve.create("Parse XTC",async t=>{try{t.update({canAbort:!0,message:"Parsing trajectory..."});let r=await mst(t,e);return An.success(r)}catch(r){return An.error(""+r)}})}function J0e(e){return ve.create("Parse XTC",async t=>{await t.update("Converting to coordinates");let r=rs(e.deltaTime,"step"),n=rs(e.timeOffset,r.unit),o=[];for(let i=0,a=e.frames.length;i<a;++i){let A=e.boxes[i],s=B.fromArray(B(),A,0),c=B.fromArray(B(),A,3),l=B.fromArray(B(),A,6);o.push({elementCount:e.frames[i].count,cell:fd.fromBasis(s,c,l),x:e.frames[i].x,y:e.frames[i].y,z:e.frames[i].z,xyzOrdering:{isIdentity:!0},time:rs(n.value+r.value*i,r.unit)})}return tm.create(o,r,n)})}function dst(e){let t=e.position>=e.data.length-1?0:+Pt.readLine(e);isNaN(t)&&(t=0);let r=Pt.readLine(e),n=new Float64Array(t),o=new Float64Array(t),i=new Float64Array(t),a=new Array(t);for(let A=0;A<t;++A){let c=Pt.readLineTrim(e).split(/\s+/g);a[A]=c[0],n[A]=+c[1],o[A]=+c[2],i[A]=+c[3]}return{count:t,comment:r,x:K.ofFloatArray(n),y:K.ofFloatArray(o),z:K.ofFloatArray(i),type_symbol:K.ofStringArray(a)}}function pst(e){let t=Pt(e),r=[];for(;;){let o=dst(t);if(o.count===0)break;r.push(o)}let n={molecules:r};return An.success(n)}function z0e(e){return ve.create("Parse Mol",async()=>pst(e))}function fst(e,t){let{molecules:r}=e,n=0;for(let y of r)n+=y.count;let o=new Array(n),i=new Int32Array(n),a=new Float32Array(n),A=new Float32Array(n),s=new Float32Array(n),c=new Int32Array(n),l=0;for(let y=0;y<r.length;y++){let Q=r[y];for(let E=0;E<Q.count;E++)o[l]=Q.type_symbol.value(E),a[l]=Q.x.value(E),A[l]=Q.y.value(E),s[l]=Q.z.value(E),i[l]=E,c[l]=y,l++}let u=K.ofConst("MOL",n,K.Schema.str),g=K.ofConst("A",n,K.Schema.str),m=K.ofConst(1,n,K.Schema.int),p=K.ofStringArray(o),d=Jr.ofPartialColumns($o.atom_site,{auth_asym_id:g,auth_atom_id:p,auth_comp_id:u,auth_seq_id:m,Cartn_x:K.ofFloatArray(a),Cartn_y:K.ofFloatArray(A),Cartn_z:K.ofFloatArray(s),id:K.ofIntArray(i),label_asym_id:g,label_atom_id:p,label_comp_id:u,label_seq_id:m,label_entity_id:K.ofConst("1",n,K.Schema.str),occupancy:K.ofConst(1,n,K.Schema.float),type_symbol:p,pdbx_PDB_model_num:K.ofIntArray(c)},n),f=new Ca;f.setNames([["MOL","Unknown Entity"]]),f.getEntityId("MOL",0,"A");let I=new Ha(m,p);I.setNames([["MOL","Unknown Molecule"]]),I.add("MOL",0);let C=La({entity:f.getEntityTable(),chem_comp:I.getChemCompTable(),atom_site:d});return SA(C,K0e.create(e),t)}var K0e;(r=>{function e(n){return n?.kind==="xyz"}r.is=e;function t(n){return{kind:"xyz",name:"xyz",data:n}}r.create=t})(K0e||={});function j0e(e){return ve.create("Parse XYZ",t=>fst(e,t))}var VR={lj:{mass:"unitless",distance:"unitless",time:"unitless",energy:"unitless",velocity:"unitless",force:"unitless",torque:"unitless",temperature:"unitless",pressure:"unitless",viscosity:"unitless",charge:"unitless",density:"unitless",scale:1},real:{mass:"grams/mole",distance:"Angstroms",time:"femtoseconds",energy:"Kcal/mol",velocity:"Angstroms/femtosecond",force:"Kcal/mol-Angstrom",torque:"Kcal/mol",temperature:"Kelvin",pressure:"atmospheres",viscosity:"Poise",charge:"multiple of electron charge",dipole:"charge*Angstroms",electricField:"volts/Angstrom",density:"g/cm^3",scale:1},metal:{mass:"grams/mole",distance:"Angstroms",time:"picoseconds",energy:"eV",velocity:"Angstroms/picosecond",force:"eV/Angstrom",torque:"eV",temperature:"Kelvin",pressure:"bars",viscosity:"Poise",charge:"multiple of electron charge",dipole:"charge*Angstroms",electricField:"volts/Angstrom",density:"g/cm^3",scale:1},si:{mass:"kilograms",distance:"meters",time:"seconds",energy:"Joules",velocity:"meters/second",force:"Newtons",torque:"Newton-meters",temperature:"Kelvin",pressure:"Pascals",viscosity:"Pascal*second",charge:"Coulombs",dipole:"Coulombs*meters",electricField:"volts/meter",density:"kg/m^3",scale:1},cgs:{mass:"grams",distance:"centimeters",time:"seconds",energy:"ergs",velocity:"centimeters/second",force:"dynes",torque:"dyne-centimeters",temperature:"Kelvin",pressure:"dyne/cm^2",viscosity:"Poise",charge:"statcoulombs",dipole:"statcoul-cm",electricField:"statvolt/cm",density:"g/cm^3",scale:1},electron:{mass:"atomic mass units",distance:"Bohr",time:"femtoseconds",energy:"Hartrees",velocity:"Bohr/atomic time units",force:"Hartrees/Bohr",temperature:"Kelvin",pressure:"Pascals",charge:"multiple of electron charge",dipole:"Debye",electricField:"volts/cm",density:"unitless",torque:"",viscosity:"",scale:.529177},micro:{mass:"picograms",distance:"micrometers",time:"microseconds",energy:"picogram-micrometer^2/microsecond^2",velocity:"micrometers/microsecond",force:"picogram-micrometer/microsecond^2",torque:"picogram-micrometer^2/microsecond^2",temperature:"Kelvin",pressure:"picogram/(micrometer-microsecond^2)",viscosity:"picogram/(micrometer-microsecond)",charge:"picocoulombs",dipole:"picocoulomb-micrometer",electricField:"volt/micrometer",density:"pg/\u03BCm^3",scale:1},nano:{mass:"attograms",distance:"nanometers",time:"nanoseconds",energy:"attogram-nanometer^2/nanosecond^2",velocity:"nanometers/nanosecond",force:"attogram-nanometer/nanosecond^2",torque:"attogram-nanometer^2/nanosecond^2",temperature:"Kelvin",pressure:"attogram/(nanometer-nanosecond^2)",viscosity:"attogram/(nanometer-nanosecond)",charge:"multiple of electron charge",dipole:"charge-nanometer",electricField:"volt/nanometer",density:"ag/nm^3",scale:10}},QW=["real","metal","si","cgs","electron","micro","nano","lj"];var{readLine:W0e,skipWhitespace:X0e,eatValue:Z0e,eatLine:Bst,markStart:EW}=Pt,_R=/\s+/;function Ist(e,t){return{tokenizer:e,runtimeCtx:t}}async function Cst(e,t,r){let{tokenizer:n}=e,o=ct.create(n.data,t*2),i=ct.create(n.data,t*2),a=ct.create(n.data,t*2),A=ct.create(n.data,t*2),s=ct.create(n.data,t*2),c=ct.create(n.data,t*2),l=ct.create(n.data,t*2),u={full:[o,i,a,A,s,c,l],atomic:[o,a,s,c,l],bond:[o,i,a,s,c,l]},g=u[r].length,{position:m}=n;W0e(n).trim(),n.position=m;let{length:p}=n,d=0;return await bs(e.runtimeCtx,1e5,void 0,f=>{let I=Math.min(t-d,f);for(let C=0;C<I;++C){for(let y=0;y<g;++y){X0e(n),EW(n),Z0e(n);let Q=u[r][y];Q&&ct.addUnchecked(Q,n.tokenStart,n.tokenEnd)}Bst(n),EW(n)}return d+=I,I},f=>f.update({message:"Parsing...",current:n.position,max:p})),{count:t,atomId:dr(o)(K.Schema.int),moleculeId:dr(i)(K.Schema.int),atomType:dr(a)(K.Schema.int),charge:dr(A)(K.Schema.float),x:dr(s)(K.Schema.float),y:dr(c)(K.Schema.float),z:dr(l)(K.Schema.float)}}async function hst(e,t){let{tokenizer:r}=e,n=ct.create(r.data,t*2),o=ct.create(r.data,t*2),i=ct.create(r.data,t*2),a=ct.create(r.data,t*2),{length:A}=r,s=0;return await bs(e.runtimeCtx,10,void 0,c=>{let l=Math.min(t-s,c);for(let u=0;u<l;++u)for(let g=0;g<4;++g)switch(X0e(r),EW(r),Z0e(r),g){case 0:ct.addUnchecked(n,r.tokenStart,r.tokenEnd);break;case 1:ct.addUnchecked(o,r.tokenStart,r.tokenEnd);break;case 2:ct.addUnchecked(i,r.tokenStart,r.tokenEnd);break;case 3:ct.addUnchecked(a,r.tokenStart,r.tokenEnd);break}return s+=l,l},c=>c.update({message:"Parsing...",current:r.position,max:A})),{count:t,bondId:dr(n)(K.Schema.int),bondType:dr(o)(K.Schema.int),atomIdA:dr(i)(K.Schema.int),atomIdB:dr(a)(K.Schema.int)}}var yst=["full","atomic","bond"];async function Qst(e,t){let r=Pt(e),n=Ist(r,t),o,i,a=0,A=0,s="full",c=NaN,l=NaN,u=NaN,g=NaN,m=NaN,p=NaN;for(;r.tokenEnd<r.length;){let I=W0e(n.tokenizer).trim();if(I.includes("atoms"))a=parseInt(I.split(_R)[0]);else if(I.includes("bonds"))A=parseInt(I.split(_R)[0]);else if(I.includes("xlo xhi")){let C=I.split(_R);c=parseFloat(C[0]),l=parseFloat(C[1])}else if(I.includes("ylo yhi")){let C=I.split(_R);u=parseFloat(C[0]),g=parseFloat(C[1])}else if(I.includes("zlo zhi")){let C=I.split(_R);m=parseFloat(C[0]),p=parseFloat(C[1])}else if(!I.includes("Masses"))if(I.includes("Atoms")){let C=I.split("#");if(C.length>1){let y=C[1].trim();yst.includes(y)?s=y:console.warn(`Unknown atom style: ${y}`)}o=await Cst(n,a,s)}else I.includes("Bonds")&&(i=await hst(n,A))}if(o===void 0)return An.error("no atoms data");i===void 0&&(i={count:0,bondId:K.ofIntArray([]),bondType:K.ofIntArray([]),atomIdA:K.ofIntArray([]),atomIdB:K.ofIntArray([])});let d=!isNaN(c)&&!isNaN(l)&&!isNaN(u)&&!isNaN(g)&&!isNaN(m)&&!isNaN(p)?{lower:[c,u,m],length:[l-c,g-u,p-m],periodicity:["p","p","p"]}:void 0,f={atoms:o,bonds:i,box:d};return An.success(f)}function q0e(e){return ve.create("Parse LammpsData",async t=>await Qst(e,t))}async function Est(e,t,r="real"){let{atoms:n,bonds:o}=e,i=[],a=n.count,A=VR[r].scale,s=new Array(a),c=new Float32Array(a),l=new Float32Array(a),u=new Float32Array(a),g=0;for(let x=0;x<a;x++){let S=n.atomId.value(x);s[x]=n.atomType.value(x).toString(),c[x]=n.x.value(x)*A,l[x]=n.y.value(x)*A,u[x]=n.z.value(x)*A,S>g&&(g=S)}let m=new Int32Array(g+1).fill(-1);for(let x=0;x<a;x++)m[n.atomId.value(x)]=x;let p=K.ofConst("MOL",a,K.Schema.str),d=K.ofLambda({value:x=>n.moleculeId.value(x).toString(),rowCount:a,schema:K.Schema.str}),f=K.ofConst(1,a,K.Schema.int),I=K.ofStringArray(s),C=Jr.ofPartialColumns($o.atom_site,{auth_asym_id:d,auth_atom_id:I,auth_comp_id:p,auth_seq_id:f,Cartn_x:K.ofFloatArray(c),Cartn_y:K.ofFloatArray(l),Cartn_z:K.ofFloatArray(u),id:n.atomId,label_asym_id:d,label_atom_id:I,label_comp_id:p,label_seq_id:f,label_entity_id:K.ofConst("1",a,K.Schema.str),occupancy:K.ofConst(1,a,K.Schema.float),type_symbol:I,pdbx_PDB_model_num:K.ofConst(0,a,K.Schema.int)},a),y=new Ca;y.setNames([["MOL","Unknown Entity"]]),y.getEntityId("MOL",0,"A");let Q=new Ha(f,I);Q.setNames([["MOL","Unknown Molecule"]]),Q.add("MOL",0);let E=La({entity:y.getEntityTable(),chem_comp:Q.getChemCompTable(),atom_site:C}),b=await SA(E,$0e.create(e),t);if(b.frameCount>0){let x=b.representative;if(o.count!==0){let S=[],w=[],R=[];for(let N=0;N<o.count;N++){let k=o.atomIdA.value(N),J=o.atomIdB.value(N);if(k>g||J>g)continue;let H=m[k],z=m[J];H<0||z<0||(S.push(H),w.push(z),R.push(o.bondId.value(N)))}let T=K.ofIntArray(new Int32Array(S)),L=K.ofIntArray(new Int32Array(w)),F=K.ofIntArray(new Int32Array(R)),v=K.ofConst(1,S.length,K.Schema.int),U=K.ofConst(It.Flag.Covalent,S.length,K.Schema.int),G=Hi.fromData({pairs:{key:F,indexA:T,indexB:L,order:v,flag:U},count:n.count},{maxDistance:1/0});Hi.Provider.set(x,G)}if(MI.Provider.set(x,{data:n.charge,type:"NO_CHARGES"}),e.box){let[S,w,R]=e.box.length,T=Fo.fromCell(B.create(S*A,w*A,R*A),B.create(Math.PI/2,Math.PI/2,Math.PI/2));Fo.Provider.set(x,T)}i.push(x)}return new fc(i)}var $0e;(r=>{function e(n){return n?.kind==="data"}r.is=e;function t(n){return{kind:"data",name:"data",data:n}}r.create=t})($0e||={});function exe(e,t){return t===void 0&&(t="real"),ve.create("Parse Lammps Data",r=>Est(e,r,t))}var{readLine:mv,skipWhitespace:bst,eatValue:xst,eatLine:Sst,markStart:txe}=Pt;function Dst(e,t){return{tokenizer:e,runtimeCtx:t}}async function vst(e,t,r){let{tokenizer:n}=e,o=Object.fromEntries(r.map((y,Q)=>[y,Q])),i=r.findIndex(y=>y[0]==="x"),a=r.findIndex(y=>y[0]==="y"),A=r.findIndex(y=>y[0]==="z"),s=r[i],c=ct.create(n.data,t*2),l=ct.create(n.data,t*2),u=ct.create(n.data,t*2),g=ct.create(n.data,t*2),m=ct.create(n.data,t*2),p=ct.create(n.data,t*2),{position:d}=n;n.position=d;let f=r.length,{length:I}=n,C=0;return await bs(e.runtimeCtx,1e5,void 0,y=>{let Q=Math.min(t-C,y);for(let E=0;E<Q;++E){for(let b=0;b<f;++b)switch(bst(n),txe(n),xst(n),b){case o.id:ct.addUnchecked(c,n.tokenStart,n.tokenEnd);break;case o.mol:ct.addUnchecked(l,n.tokenStart,n.tokenEnd);break;case o.type:ct.addUnchecked(u,n.tokenStart,n.tokenEnd);break;case i:ct.addUnchecked(g,n.tokenStart,n.tokenEnd);break;case a:ct.addUnchecked(m,n.tokenStart,n.tokenEnd);break;case A:ct.addUnchecked(p,n.tokenStart,n.tokenEnd);break}Sst(n),txe(n)}return C+=Q,Q},y=>y.update({message:"Parsing...",current:n.position,max:I})),{count:t,atomMode:s,atomId:dr(c)(K.Schema.int),moleculeId:dr(l)(K.Schema.int),atomType:dr(u)(K.Schema.int),x:dr(g)(K.Schema.float),y:dr(m)(K.Schema.float),z:dr(p)(K.Schema.float)}}async function Fst(e,t){let r=Pt(e),n=Dst(r,t),o={frames:[],times:[],bounds:[],timeOffset:0,deltaTime:0},i=o.frames,a=0,A=0;for(;r.tokenEnd<r.length;){let s=mv(n.tokenizer).trim();if(s.includes("ITEM: TIMESTEP"))A=parseInt(mv(n.tokenizer).trim()),o.times.push(A);else if(s.includes("ITEM: NUMBER OF ATOMS"))a=parseInt(mv(n.tokenizer).trim());else if(s.includes("ITEM: ATOMS")){let c=s.split(" ").slice(2),l=await vst(n,a,c);i.push(l)}else if(s.includes("ITEM: BOX BOUNDS")){let c=s.split("ITEM: BOX BOUNDS ")[1].split(" "),l=c[0],u=c[1],g=c[2],m=mv(n.tokenizer).trim().split(" "),p=mv(n.tokenizer).trim().split(" "),d=mv(n.tokenizer).trim().split(" "),f=parseFloat(m[0]),I=parseFloat(m[1]),C=parseFloat(p[0]),y=parseFloat(p[1]),Q=parseFloat(d[0]),E=parseFloat(d[1]);o.bounds.push({lower:[f,C,Q],length:[I-f,y-C,E-Q],periodicity:[l,u,g]})}}return o.times.length>=1&&(o.timeOffset=o.times[0]),o.times.length>=2&&(o.deltaTime=o.times[1]-o.times[0]),An.success(o)}function bW(e){return ve.create("Parse Lammp Trajectory",async t=>await Fst(e,t))}function rxe(e){let{count:t,atomId:r}=e,n,o;for(let i=0;i<t;i++){let a=r.value(i)-1;if(a<0||a>=t)return;if(!n){if(a===i)continue;if(a<i)return;n=new Int32Array(t),o=new Uint8Array(t);for(let A=0;A<i;A++)n[A]=A,o[A]=1}if(o[a])return;o[a]=1,n[i]=a}return n}function xW(e,t="real"){return ve.create("Parse Lammps Trajectory",async r=>{await r.update("Converting to coordinates");let n=VR[t].scale,o=rs(e.deltaTime,"step"),i=rs(e.timeOffset,o.unit),a={x:0,y:0,z:0},A={x:1,y:1,z:1},c=e.frames[0].atomMode.includes("s"),l=[];for(let u=0,g=e.frames.length;u<g;++u){let m=e.bounds[u];c&&(A.x=m.length[0],A.y=m.length[1],A.z=m.length[2],a.x=m.lower[0],a.y=m.lower[1],a.z=m.lower[2]);let p=e.frames[u],d=p.count,f=rxe(p),I=new Float32Array(d),C=new Float32Array(d),y=new Float32Array(d),Q=A.x*n,E=A.y*n,b=A.z*n,x=a.x*n,S=a.y*n,w=a.z*n;for(let R=0;R<d;R++){let T=f?f[R]:R;I[T]=p.x.value(R)*Q+x,C[T]=p.y.value(R)*E+S,y[T]=p.z.value(R)*b+w}l.push({elementCount:d,x:I,y:C,z:y,xyzOrdering:{isIdentity:!0},time:rs(i.value+o.value*u,o.unit)})}return tm.create(l,o,i)})}async function wst(e,t,r="real"){let n=e.frames[0],o=n.count,i=n.atomMode,a=e.bounds[0],A={x:0,y:0,z:0},s={x:1,y:1,z:1},c=VR[r].scale;i.includes("s")&&(s.x=a.length[0],s.y=a.length[1],s.z=a.length[2],A.x=a.lower[0],A.y=a.lower[1],A.z=a.lower[2]);let l=new Array(o),u=new Array(o),g=new Int32Array(o),m=new Float32Array(o),p=new Float32Array(o),d=new Float32Array(o),f=s.x*c,I=s.y*c,C=s.z*c,y=A.x*c,Q=A.y*c,E=A.z*c,b=rxe(n);for(let k=0;k<o;k++){let J=b?b[k]:k;l[J]=n.atomType.value(k).toString(),u[J]=n.moleculeId.value(k).toString(),m[J]=n.x.value(k)*f+y,p[J]=n.y.value(k)*I+Q,d[J]=n.z.value(k)*C+E,g[J]=n.atomId.value(k)}let x=K.ofConst("MOL",o,K.Schema.str),S=K.ofStringArray(u),w=K.ofConst(1,o,K.Schema.int),R=K.ofStringArray(l),T=Jr.ofPartialColumns($o.atom_site,{auth_asym_id:S,auth_atom_id:R,auth_comp_id:x,auth_seq_id:w,Cartn_x:K.ofFloatArray(m),Cartn_y:K.ofFloatArray(p),Cartn_z:K.ofFloatArray(d),id:K.ofIntArray(g),label_asym_id:S,label_atom_id:R,label_comp_id:x,label_seq_id:w,label_entity_id:K.ofConst("1",o,K.Schema.str),occupancy:K.ofConst(1,o,K.Schema.float),type_symbol:R,pdbx_PDB_model_num:K.ofConst(0,o,K.Schema.int)},o),L=new Ca;L.setNames([["MOL","Unknown Entity"]]),L.getEntityId("MOL",0,"A");let F=new Ha(w,R);F.setNames([["MOL","Unknown Molecule"]]),F.add("MOL",0);let v=La({entity:L.getEntityTable(),chem_comp:F.getChemCompTable(),atom_site:T}),G=(await SA(v,nxe.create(e),t)).representative;if(e.bounds.length>0){let k=e.bounds[0],[J,H,z]=k.length,_=Fo.fromCell(B.create(J*c,H*c,z*c),B.create(Math.PI/2,Math.PI/2,Math.PI/2));Fo.Provider.set(G,_)}let N=await xW(e,r).runInContext(t);return _t.trajectoryFromModelAndCoordinates(G,N)}var nxe;(r=>{function e(n){return n?.kind==="lammpstrj"}r.is=e;function t(n){return{kind:"lammpstrj",name:"lammpstrj",data:n}}r.create=t})(nxe||={});function oxe(e,t){return t===void 0&&(t="real"),ve.create("Parse Lammps Traj Data",r=>wst(e,r,t))}function ixe(e){return e.trim().endsWith("V3000")}function axe(e){let t=ct.create(e.data,1),r=ct.create(e.data,1);return Pt.eatLine(e),Ph(e),Ph(e),Ph(e),Th(e,t),Th(e,r),Pt.eatLine(e),{atomCount:dr(t)(K.Schema.int).value(0),bondCount:dr(r)(K.Schema.int).value(0)}}function Axe(e,t){let r=ct.create(e.data,t*2),n=ct.create(e.data,t*2),o=ct.create(e.data,t*2),i=ct.create(e.data,t*2);for(let a=0;a<t;++a){Pt.markLine(e),Ph(e),Ph(e),Ph(e);let{position:A}=e;Th(e,i),Th(e,r),Th(e,n),Th(e,o),e.position=A}return Pt.eatLine(e),Pt.eatLine(e),{count:t,x:dr(r)(K.Schema.float),y:dr(n)(K.Schema.float),z:dr(o)(K.Schema.float),type_symbol:dr(i)(K.Schema.str),formal_charge:K.ofConst(0,t,K.Schema.int)}}function sxe(e,t){let r=ct.create(e.data,t*2),n=ct.create(e.data,t*2),o=ct.create(e.data,t*2);for(let i=0;i<t;++i){Pt.markLine(e),Ph(e),Ph(e),Ph(e);let{position:a}=e;Th(e,o),Th(e,r),Th(e,n),e.position=a}return Pt.eatLine(e),Pt.eatLine(e),{count:t,atomIdxA:dr(r)(K.Schema.float),atomIdxB:dr(n)(K.Schema.float),order:dr(o)(K.Schema.float)}}function Ph(e){Pt.skipWhitespace(e),Pt.eatValue(e)}function Th(e,t){let{position:r}=e;Pt.skipWhitespace(e),Pt.eatValue(e),Pt.trim(e,r,e.position),ct.addUnchecked(t,e.tokenStart,e.tokenEnd)}var SW="$$$$";function Rst(e){let t=ct.create(e.data,32),r=ct.create(e.data,32);for(;e.position<e.length;){let n=Pt.readLine(e);if(n.startsWith(SW))break;if(n&&n.startsWith("> ")){ct.add(t,e.tokenStart+2,e.tokenEnd),Pt.markLine(e);let o=e.tokenStart,i=e.tokenEnd,a=!1;for(;e.position<e.length;){let A=Pt.readLine(e);if(!A||A.startsWith(SW)||A.startsWith("> ")){ct.add(r,o,i),a=!0;break}i=e.tokenEnd}a||ct.add(r,o,i)}}return{dataHeader:dr(t)(K.Schema.str),data:dr(r)(K.Schema.str)}}function Ust(e){return{atomCount:+e.substr(0,3),bondCount:+e.substr(3,3)}}function Lst(e){let t=Pt.readLine(e).trim(),r=Pt.readLine(e).trim(),n=Pt.readLine(e).trim(),o=Pt.readLine(e),i=ixe(o),{atomCount:a,bondCount:A}=i?axe(e):Ust(o);if(Number.isNaN(a)||Number.isNaN(A)){for(;e.position<e.length&&!Pt.readLine(e).startsWith(SW););return}let s={atomIdx:K.ofConst(0,a,K.Schema.int),charge:K.ofConst(0,a,K.Schema.int)},c=i?Axe(e,a):fW(e,a),l=i?sxe(e,A):BW(e,A),u=i?{formalCharges:s}:IW(e),g=Rst(e);return{molFile:{title:t,program:r,comment:n,atoms:c,bonds:l,...u},dataItems:g}}function Tst(e){let t=Pt(e),r=[];for(;t.position<t.length;){let n=Lst(t);n&&r.push(n)}return An.success({compounds:r})}function cxe(e){return ve.create("Parse Sdf",async()=>Tst(e))}var lxe;(r=>{function e(n){return n?.kind==="sdf"}r.is=e;function t(n){return{kind:"sdf",name:n.molFile.title,data:n}}r.create=t})(lxe||={});function uxe(e){return ve.create("Parse SDF",t=>CW(e.molFile,lxe.create(e),t))}async function Pst(e){let t=new DataView(e.buffer),r={frames:[],boxes:[],times:[],timeOffset:0,deltaTime:0},n=r.frames,o=r.boxes,i=r.times,a=0;for(;;){a+=8;let A=t.getInt32(a);a+=4,a+=A;let s=t.getInt32(a+8),c=t.getInt32(a+12),l=t.getInt32(a+16),u=t.getInt32(a+28),g=t.getInt32(a+32),m=t.getInt32(a+36),p=t.getInt32(a+40);a+=52;let d=s/9,f=p*3;if(d===8?i.push(t.getFloat64(a)):i.push(t.getFloat32(a)),a+=2*d,s){let I=new Float32Array(9);if(d===8)for(let C=0;C<9;++C)I[C]=t.getFloat64(a)*10,a+=8;else for(let C=0;C<9;++C)I[C]=t.getFloat32(a)*10,a+=4;o.push(I)}if(a+=c,a+=l,u){let I=new Float32Array(p),C=new Float32Array(p),y=new Float32Array(p);if(d===8)for(let Q=0;Q<p;++Q)I[Q]=t.getFloat64(a)*10,C[Q]=t.getFloat64(a+8)*10,y[Q]=t.getFloat64(a+16)*10,a+=24;else{let Q=new Uint32Array(e.buffer,a,f);for(let b=0;b<f;++b){let x=Q[b];Q[b]=(x&255)<<24|(x&65280)<<8|x>>8&65280|x>>24&255}let E=new Float32Array(e.buffer,a,f);for(let b=0;b<p;++b)I[b]=E[b*3]*10,C[b]=E[b*3+1]*10,y[b]=E[b*3+2]*10,a+=12}n.push({count:p,x:I,y:C,z:y})}if(a+=g,a+=m,a>=e.byteLength)break}return i.length>=1&&(r.timeOffset=i[0]),i.length>=2&&(r.deltaTime=i[1]-i[0]),r}function gxe(e){return ve.create("Parse TRR",async t=>{try{t.update({canAbort:!0,message:"Parsing trajectory..."});let r=await Pst(e);return An.success(r)}catch(r){return An.error(""+r)}})}function mxe(e){return ve.create("Parse TRR",async t=>{await t.update("Converting to coordinates");let r=rs(e.deltaTime,"step"),n=rs(e.timeOffset,r.unit),o=[];for(let i=0,a=e.frames.length;i<a;++i){let A=e.boxes[i],s=B.fromArray(B(),A,0),c=B.fromArray(B(),A,3),l=B.fromArray(B(),A,6);o.push({elementCount:e.frames[i].count,cell:fd.fromBasis(s,c,l),x:e.frames[i].x,y:e.frames[i].y,z:e.frames[i].z,xyzOrdering:{isIdentity:!0},time:rs(n.value+r.value*i,r.unit)})}return tm.create(o,r,n)})}var Gst=1024*8,DW=[],_k=class{constructor(t,r={}){this._mark=0;this._marks=[];this.offset=0;this.littleEndian=!0;let n=!1;t===void 0&&(t=Gst),typeof t=="number"?t=new ArrayBuffer(t):n=!0;let o=r.offset?r.offset>>>0:0,i=t.byteLength-o,a=o;!(t instanceof ArrayBuffer)&&!(t instanceof SharedArrayBuffer)&&(t.byteLength!==t.buffer.byteLength&&(a=t.byteOffset+o),t=t.buffer),n?this._lastWrittenByte=i:this._lastWrittenByte=0,this.buffer=t,this.length=i,this.byteLength=i,this.byteOffset=a,this._data=new DataView(this.buffer,a,i)}available(t=1){return this.offset+t<=this.length}isLittleEndian(){return this.littleEndian}setLittleEndian(){return this.littleEndian=!0,this}isBigEndian(){return!this.littleEndian}setBigEndian(){return this.littleEndian=!1,this}skip(t){return t===void 0&&(t=1),this.offset+=t,this}seek(t){return this.offset=t,this}mark(){return this._mark=this.offset,this}reset(){return this.offset=this._mark,this}pushMark(){return this._marks.push(this.offset),this}popMark(){let t=this._marks.pop();if(t===void 0)throw new Error("Mark stack empty");return this.seek(t),this}rewind(){return this.offset=0,this}ensureAvailable(t){if(t===void 0&&(t=1),!this.available(t)){let n=(this.offset+t)*2,o=new Uint8Array(n);o.set(new Uint8Array(this.buffer)),this.buffer=o.buffer,this.length=this.byteLength=n,this._data=new DataView(this.buffer)}return this}readBoolean(){return this.readUint8()!==0}readInt8(){return this._data.getInt8(this.offset++)}readUint8(){return this._data.getUint8(this.offset++)}readByte(){return this.readUint8()}readBytes(t){t===void 0&&(t=1);let r=new Uint8Array(t);for(let n=0;n<t;n++)r[n]=this.readByte();return r}readInt16(){let t=this._data.getInt16(this.offset,this.littleEndian);return this.offset+=2,t}readUint16(){let t=this._data.getUint16(this.offset,this.littleEndian);return this.offset+=2,t}readInt32(){let t=this._data.getInt32(this.offset,this.littleEndian);return this.offset+=4,t}readUint32(){let t=this._data.getUint32(this.offset,this.littleEndian);return this.offset+=4,t}readFloat32(){let t=this._data.getFloat32(this.offset,this.littleEndian);return this.offset+=4,t}readFloat64(){let t=this._data.getFloat64(this.offset,this.littleEndian);return this.offset+=8,t}readChar(){return String.fromCharCode(this.readInt8())}readChars(t=1){DW.length=t;for(let r=0;r<t;r++)DW[r]=this.readChar();return DW.join("")}writeBoolean(t=!1){return this.writeUint8(t?255:0),this}writeInt8(t){return this.ensureAvailable(1),this._data.setInt8(this.offset++,t),this._updateLastWrittenByte(),this}writeUint8(t){return this.ensureAvailable(1),this._data.setUint8(this.offset++,t),this._updateLastWrittenByte(),this}writeByte(t){return this.writeUint8(t)}writeBytes(t){this.ensureAvailable(t.length);for(let r=0;r<t.length;r++)this._data.setUint8(this.offset++,t[r]);return this._updateLastWrittenByte(),this}writeInt16(t){return this.ensureAvailable(2),this._data.setInt16(this.offset,t,this.littleEndian),this.offset+=2,this._updateLastWrittenByte(),this}writeUint16(t){return this.ensureAvailable(2),this._data.setUint16(this.offset,t,this.littleEndian),this.offset+=2,this._updateLastWrittenByte(),this}writeInt32(t){return this.ensureAvailable(4),this._data.setInt32(this.offset,t,this.littleEndian),this.offset+=4,this._updateLastWrittenByte(),this}writeUint32(t){return this.ensureAvailable(4),this._data.setUint32(this.offset,t,this.littleEndian),this.offset+=4,this._updateLastWrittenByte(),this}writeFloat32(t){return this.ensureAvailable(4),this._data.setFloat32(this.offset,t,this.littleEndian),this.offset+=4,this._updateLastWrittenByte(),this}writeFloat64(t){return this.ensureAvailable(8),this._data.setFloat64(this.offset,t,this.littleEndian),this.offset+=8,this._updateLastWrittenByte(),this}writeChar(t){return this.writeUint8(t.charCodeAt(0))}writeChars(t){for(let r=0;r<t.length;r++)this.writeUint8(t.charCodeAt(r));return this}toArray(){return new Uint8Array(this.buffer,this.byteOffset,this._lastWrittenByte)}_updateLastWrittenByte(){this.offset>this._lastWrittenByte&&(this._lastWrittenByte=this.offset)}};function Dp(e,t){if(e)throw new TypeError("Not a valid NetCDF v3.x file: "+t)}function dxe(e){e.offset%4!==0&&e.skip(4-e.offset%4)}function vW(e){let t=e.readUint32(),r=e.readChars(t);return dxe(e),r}var WA={BYTE:1,CHAR:2,SHORT:3,INT:4,FLOAT:5,DOUBLE:6};function pxe(e){switch(Number(e)){case WA.BYTE:return"byte";case WA.CHAR:return"char";case WA.SHORT:return"short";case WA.INT:return"int";case WA.FLOAT:return"float";case WA.DOUBLE:return"double";default:return"undefined"}}function fxe(e){switch(Number(e)){case WA.BYTE:return 1;case WA.CHAR:return 1;case WA.SHORT:return 2;case WA.INT:return 4;case WA.FLOAT:return 4;case WA.DOUBLE:return 8;default:return-1}}function Bxe(e){switch(String(e)){case"byte":return WA.BYTE;case"char":return WA.CHAR;case"short":return WA.SHORT;case"int":return WA.INT;case"float":return WA.FLOAT;case"double":return WA.DOUBLE;default:return-1}}function Yk(e,t){if(e!==1){let r=new Array(e);for(let n=0;n<e;n++)r[n]=t();return r}else return t()}function FW(e,t,r){switch(t){case WA.BYTE:return e.readBytes(r);case WA.CHAR:return Nst(e.readChars(r));case WA.SHORT:return Yk(r,e.readInt16.bind(e));case WA.INT:return Yk(r,e.readInt32.bind(e));case WA.FLOAT:return Yk(r,e.readFloat32.bind(e));case WA.DOUBLE:return Yk(r,e.readFloat64.bind(e));default:Dp(!0,"non valid type "+t);return}}function Nst(e){return e.charCodeAt(e.length-1)===0?e.substring(0,e.length-1):e}function Mst(e,t){let r=Bxe(t.type),n=t.size/fxe(r),o=new Array(n);for(let i=0;i<n;i++)o[i]=FW(e,r,1);return o}function kst(e,t,r){let n=Bxe(t.type),o=t.size?t.size/fxe(n):1,i=r.length,a=new Array(i),A=r.recordStep;for(let s=0;s<i;s++){let c=e.offset;a[s]=FW(e,n,o),e.seek(c+A)}return a}var dv=0,Hst=10,Vst=11,_st=12;function Yst(e,t){let r={recordDimension:{length:e.readUint32()}};r.version=t;let n=Ost(e);r.recordDimension.id=n.recordId,r.recordDimension.name=n.recordName,r.dimensions=n.dimensions,r.globalAttributes=Ixe(e);let o=Jst(e,n.recordId,t);return r.variables=o.variables,r.recordDimension.recordStep=o.recordStep,r}function Ost(e){let t,r,n,o=e.readUint32();if(o===dv)return Dp(e.readUint32()!==dv,"wrong empty tag for list of dimensions"),[];{Dp(o!==Hst,"wrong tag for list of dimensions");let i=e.readUint32();t=new Array(i);for(let a=0;a<i;a++){let A=vW(e),s=e.readUint32();s===0&&(r=a,n=A),t[a]={name:A,size:s}}return{dimensions:t,recordId:r,recordName:n}}}function Ixe(e){let t,r=e.readUint32();if(r===dv)return Dp(e.readUint32()!==dv,"wrong empty tag for list of attributes"),[];{Dp(r!==_st,"wrong tag for list of attributes");let n=e.readUint32();t=new Array(n);for(let o=0;o<n;o++){let i=vW(e),a=e.readUint32();Dp(a<1||a>6,"non valid type "+a);let A=e.readUint32(),s=FW(e,a,A);dxe(e),t[o]={name:i,type:pxe(a),value:s}}}return t}function Jst(e,t,r){let n=e.readUint32(),o=0,i;if(n===dv)return Dp(e.readUint32()!==dv,"wrong empty tag for list of variables"),[];{Dp(n!==Vst,"wrong tag for list of variables");let a=e.readUint32();i=new Array(a);for(let A=0;A<a;A++){let s=vW(e),c=e.readUint32(),l=new Array(c);for(let d=0;d<c;d++)l[d]=e.readUint32();let u=Ixe(e),g=e.readUint32();Dp(g<1&&g>6,"non valid type "+g);let m=e.readUint32(),p=e.readUint32();r===2&&(Dp(p>0,"offsets larger than 4GB not supported"),p=e.readUint32()),l[0]===t&&(o+=m),i[A]={name:s,dimensions:l,attributes:u,type:pxe(g),size:m,offset:p,record:l[0]===t}}}return{variables:i,recordStep:o}}var Ok=class{constructor(t){let r=new _k(t);r.setBigEndian(),Dp(r.readChars(3)!=="CDF","should start with CDF");let n=r.readByte();Dp(n>2,"unknown version"),this.header=Yst(r,n),this.buffer=r}get version(){return this.header.version===1?"classic format":"64-bit offset format"}get recordDimension(){return this.header.recordDimension}get dimensions(){return this.header.dimensions}get globalAttributes(){return this.header.globalAttributes}get variables(){return this.header.variables}hasDataVariable(t){return this.header.variables&&this.header.variables.findIndex(r=>r.name===t)!==-1}getDataVariable(t){let r;if(typeof t=="string"?r=this.header.variables?.find(n=>n.name===t):r=t,r===void 0)throw new Error("variable not found");return this.buffer.seek(r.offset),r.record?kst(this.buffer,r,this.header.recordDimension):Mst(this.buffer,r)}};async function zst(e){let t=new Ok(e.buffer),r={coordinates:[],time:[],timeOffset:0,deltaTime:1};for(let n of t.getDataVariable("coordinates"))r.coordinates.push(n);if(t.hasDataVariable("velocities")){let n=[];for(let o of t.getDataVariable("velocities"))n.push(o);r.velocities=n}if(t.hasDataVariable("forces")){let n=[];for(let o of t.getDataVariable("forces"))n.push(o);r.forces=n}if(t.hasDataVariable("cell_lengths")){let n=[];for(let o of t.getDataVariable("cell_lengths"))n.push(o);r.cell_lengths=n}if(t.hasDataVariable("cell_angles")){let n=[];for(let o of t.getDataVariable("cell_angles"))n.push(o);r.cell_angles=n}if(t.hasDataVariable("time")){let n=[];for(let o of t.getDataVariable("time"))n.push(o);r.time=n}return r.time&&(r.time.length>=1&&(r.timeOffset=r.time[0]),r.time.length>=2&&(r.deltaTime=r.time[1]-r.time[0])),r}function Cxe(e){return ve.create("Parse NCTRAJ",async t=>{try{t.update({canAbort:!0,message:"Parsing trajectory..."});let r=await zst(e);return An.success(r)}catch(r){return An.error(""+r)}})}function hxe(e){return ve.create("Parse NCTRAJ",async t=>{await t.update("Converting to coordinates");let r=rs(e.deltaTime,"step"),n=rs(e.timeOffset,r.unit),o=[];for(let i=0,a=e.coordinates.length;i<a;++i){let A=e.coordinates[i],s=A.length/3,c=new Float32Array(s),l=new Float32Array(s),u=new Float32Array(s);for(let m=0,p=A.length;m<p;m+=3)c[m/3]=A[m],l[m/3]=A[m+1],u[m/3]=A[m+2];let g={elementCount:s,x:c,y:l,z:u,xyzOrdering:{isIdentity:!0},time:rs(n.value+r.value*i,r.unit)};if(e.cell_lengths){let m=e.cell_lengths[i],p=B.scale(B(),B.unitX,m[0]),d=B.scale(B(),B.unitY,m[1]),f=B.scale(B(),B.unitZ,m[2]);g.cell=fd.fromBasis(p,d,f)}o.push(g)}return tm.create(o,r,n)})}function Kst(e){let{pointers:t,residuePointer:r,residueLabel:n,atomName:o}=e,i=t.NATOM,a=t.NRES,A=new Uint32Array(i),s=[],c=(F,v,U)=>{let G=n.value(F);for(let N=v,k=U;N<k;++N)A[N]=F+1,s[N]=G};for(let F=0,v=a-1;F<v;++F)c(F,r.value(F)-1,r.value(F+1)-1);c(a-1,r.value(a-1)-1,i);let l=K.ofIntArray(A),u=K.ofStringArray(s),g=new Array(i),m=new Array(i),p=new Uint32Array(i),d=new Uint32Array(i),f=new Ca,I=new Ha(l,o),C="",y=0,Q="",E=0,b=0,x=-1;for(let F=0,v=i;F<v;++F){let U=l.value(F);if(U!==x){let G=u.value(F),N=Yc(I.add(G,F).type,G);N!==b&&(Q=Xf(y),y+=1,E=0),C=f.getEntityId(G,N,Q),E+=1,x=U,b=N}g[F]=C,m[F]=Q,p[F]=E,d[F]=F}let S=K.ofIntArray(d),w=K.ofStringArray(m),R=new Array(i);for(let F=0;F<i;++F)R[F]=Ep(o.value(F),u.value(F));let T=Jr.ofPartialColumns($o.atom_site,{auth_asym_id:w,auth_atom_id:K.asArrayColumn(o),auth_comp_id:u,auth_seq_id:l,id:K.asArrayColumn(S),label_asym_id:w,label_atom_id:K.asArrayColumn(o),label_comp_id:u,label_seq_id:K.ofIntArray(p),label_entity_id:K.ofStringArray(g),occupancy:K.ofConst(1,i,K.Schema.float),type_symbol:K.ofStringArray(R),pdbx_PDB_model_num:K.ofConst(1,i,K.Schema.int)},i);return La({entity:f.getEntityTable(),chem_comp:I.getChemCompTable(),atom_site:T})}var yxe;(r=>{function e(n){return n?.kind==="prmtop"}r.is=e;function t(n){return{kind:"prmtop",name:n.title.join(" ")||"PRMTOP",data:n}}r.fromPrmtop=t})(yxe||={});function Qxe(e){return ve.create("Parse PRMTOP",async t=>{let r=yxe.fromPrmtop(e),n=Kst(e),{pointers:{NBONH:o,NBONA:i},bondsIncHydrogen:a,bondsWithoutHydrogen:A}=e,s=o+i,c={indexA:K.ofLambda({value:l=>l<o?a.value(l*3)/3:A.value((l-o)*3)/3,rowCount:s,schema:K.Schema.int}),indexB:K.ofLambda({value:l=>l<o?a.value(l*3+1)/3:A.value((l-o)*3+1)/3,rowCount:s,schema:K.Schema.int}),order:K.ofConst(1,s,K.Schema.int)};return Ty.create(e.title.join(" ")||"PRMTOP",n,c,r)})}function jst(e){let{molecules:t,compounds:r}=e,n={},o=0;for(let F=0,v=t._rowCount;F<v;++F){let U=t.compound.value(F),G=t.molCount.value(F),{atoms:N}=r[U];K.asArrayColumn(N.atom),K.asArrayColumn(N.resnr),K.asArrayColumn(N.residu),o+=G*N._rowCount;let k=N.resnr.value(0);n[U]=!0;for(let J=1,H=N._rowCount;J<H;++J){let z=N.resnr.value(J);if(z!==k){n[U]=!1;break}k=z}}let i=new Array(o),a=new Uint32Array(o),A=new Array(o),s=0;for(let F=0,v=t._rowCount;F<v;++F){let U=t.compound.value(F),G=t.molCount.value(F),{atoms:N}=r[U],k=n[U];for(let J=0;J<G;++J)for(let H=0,z=N._rowCount;H<z;++H)i[s]=N.atom.value(H),a[s]=N.resnr.value(H),A[s]=N.residu.value(H),k&&(a[s]+=J),s+=1}let c=K.ofStringArray(i),l=K.ofIntArray(a),u=K.ofStringArray(A),g=new Array(o),m=new Array(o),p=new Uint32Array(o),d=new Uint32Array(o),f=new Ca,I=new Ha(l,c),C="",y=0,Q="",E=0,b=0,x=-1;for(let F=0,v=o;F<v;++F){let U=l.value(F);if(U!==x){let G=u.value(F),N=Yc(I.add(G,F).type,G);N!==b&&(Q=Xf(y),y+=1,E=0),C=f.getEntityId(G,N,Q),E+=1,x=U,b=N}g[F]=C,m[F]=Q,p[F]=E,d[F]=F}let S=K.ofIntArray(d),w=K.ofStringArray(m),R=new Array(o);for(let F=0;F<o;++F)R[F]=Ep(c.value(F),u.value(F));let T=Jr.ofPartialColumns($o.atom_site,{auth_asym_id:w,auth_atom_id:K.asArrayColumn(c),auth_comp_id:u,auth_seq_id:l,id:K.asArrayColumn(S),label_asym_id:w,label_atom_id:K.asArrayColumn(c),label_comp_id:u,label_seq_id:K.ofIntArray(p),label_entity_id:K.ofStringArray(g),occupancy:K.ofConst(1,o,K.Schema.float),type_symbol:K.ofStringArray(R),pdbx_PDB_model_num:K.ofConst(1,o,K.Schema.int)},o);return La({entity:f.getEntityTable(),chem_comp:I.getChemCompTable(),atom_site:T})}function Wst(e){let{molecules:t,compounds:r}=e,n=[],o=[],i=0;for(let a=0,A=t._rowCount;a<A;++a){let s=t.compound.value(a),c=t.molCount.value(a),{atoms:l,bonds:u}=r[s];if(u)for(let g=0;g<c;++g){for(let m=0,p=u._rowCount;m<p;++m)n.push(u.ai.value(m)-1+i),o.push(u.aj.value(m)-1+i);i+=l._rowCount}else if(s==="TIP3")for(let g=0;g<c;++g)n.push(0+i),o.push(1+i),n.push(0+i),o.push(2+i),i+=l._rowCount;else i+=c*l._rowCount}return{indexA:K.ofIntArray(n),indexB:K.ofIntArray(o),order:K.ofConst(1,n.length,K.Schema.int)}}var Exe;(r=>{function e(n){return n?.kind==="top"}r.is=e;function t(n){return{kind:"top",name:n.system||"TOP",data:n}}r.fromTop=t})(Exe||={});function bxe(e){return ve.create("Parse TOP",async t=>{let r=Exe.fromTop(e),n=jst(e),o=Wst(e);return Ty.create(e.system||"TOP",n,o,r)})}function wW(e){let t=e[0].loci,r=e[1].loci;return{pairs:[{loci:[t,r]}]}}function RW(e){let t=e[0].loci,r=e[1].loci,n=e[2].loci;return{triples:[{loci:[t,r,n]}]}}function UW(e){let t=e[0].loci,r=e[1].loci,n=e[2].loci,o=e[3].loci;return{quads:[{loci:[t,r,n,o]}]}}function LW(e){return{infos:[{loci:e[0].loci}]}}function TW(e){return{locis:e.map(t=>t.loci)}}function PW(e){return{locis:e.map(t=>t.loci)}}var Dm={center:B(),rotation:Y(),translationToCenter:Y(),translationFromCenter:Y(),translation:Y(),local:Y()};function pv(e){return e.name==="components"&&e.params.rotationCenter?.name==="centroid"}function fv(e,t){if(e.name==="matrix"){let r=Y();return Y.copy(r,e.params.data),e.params.transpose&&Y.transpose(r,r),r}else{e.params.rotationCenter?.name==="centroid"?B.copy(Dm.center,t):e.params.rotationCenter?.name==="point"?B.copy(Dm.center,e.params.rotationCenter.params.point):B.set(Dm.center,0,0,0),Y.fromTranslation(Dm.translationToCenter,Dm.center),Y.fromRotation(Dm.rotation,e.params.angle*Math.PI/180,e.params.axis),Y.fromTranslation(Dm.translationFromCenter,B.negate(Dm.center,Dm.center));let r=Y.mul3(Y(),Dm.translationToCenter,Dm.rotation,Dm.translationFromCenter);return Y.fromTranslation(Dm.translation,e.params.translation),Y.mul(r,Dm.translation,r),r}}var Bv=h.MappedStatic("matrix",{matrix:h.Group({data:h.Mat4(Y.identity()),transpose:h.Boolean(!1)},{isFlat:!0}),components:h.Group({translation:h.Vec3(B.create(0,0,0)),axis:h.Vec3(B.create(1,0,0)),angle:h.Numeric(0,{min:-360,max:360,step:1},{description:"Angle in Degrees"}),rotationCenter:h.MappedStatic("point",{point:h.Group({point:h.Vec3(B.create(0,0,0))},{isFlat:!0}),centroid:h.Group({})})},{isFlat:!0})},{label:"Kind"});var GW=Yt.BuiltIn({name:"coordinates-from-dcd",display:{name:"Parse DCD",description:"Parse DCD binary data."},from:[te.Data.Binary],to:te.Molecule.Coordinates})({apply({a:e}){return ve.create("Parse DCD",async t=>{let r=await Sbe(e.data).runInContext(t);if(r.isError)throw new Error(r.message);let n=await wbe(r.result).runInContext(t);return new te.Molecule.Coordinates(n,{label:e.label,description:"Coordinates"})})}}),NW=Yt.BuiltIn({name:"coordinates-from-xtc",display:{name:"Parse XTC",description:"Parse XTC binary data."},from:[te.Data.Binary],to:te.Molecule.Coordinates})({apply({a:e}){return ve.create("Parse XTC",async t=>{let r=await O0e(e.data).runInContext(t);if(r.isError)throw new Error(r.message);let n=await J0e(r.result).runInContext(t);return new te.Molecule.Coordinates(n,{label:e.label,description:"Coordinates"})})}}),MW=Yt.BuiltIn({name:"coordinates-from-trr",display:{name:"Parse TRR",description:"Parse TRR binary data."},from:[te.Data.Binary],to:te.Molecule.Coordinates})({apply({a:e}){return ve.create("Parse TRR",async t=>{let r=await gxe(e.data).runInContext(t);if(r.isError)throw new Error(r.message);let n=await mxe(r.result).runInContext(t);return new te.Molecule.Coordinates(n,{label:e.label,description:"Coordinates"})})}}),kW=Yt.BuiltIn({name:"coordinates-from-nctraj",display:{name:"Parse NCTRAJ",description:"Parse NCTRAJ binary data."},from:[te.Data.Binary],to:te.Molecule.Coordinates})({apply({a:e}){return ve.create("Parse NCTRAJ",async t=>{let r=await Cxe(e.data).runInContext(t);if(r.isError)throw new Error(r.message);let n=await hxe(r.result).runInContext(t);return new te.Molecule.Coordinates(n,{label:e.label,description:"Coordinates"})})}}),HW=Yt.BuiltIn({name:"coordinates-from-lammpstraj",display:{name:"Parse LAMMPSTRAJ",description:"Parse LAMMPSTRAJ data."},from:[te.Data.String],to:te.Molecule.Coordinates})({apply({a:e}){return ve.create("Parse LAMMPSTRAJ",async t=>{let r=await bW(e.data).runInContext(t);if(r.isError)throw new Error(r.message);let n=await xW(r.result).runInContext(t);return new te.Molecule.Coordinates(n,{label:e.label,description:"Coordinates"})})}}),VW=Yt.BuiltIn({name:"topology-from-psf",display:{name:"PSF Topology",description:"Create topology from PSF."},from:[te.Format.Psf],to:te.Molecule.Topology})({apply({a:e}){return ve.create("Create Topology",async t=>{let r=await n0e(e.data).runInContext(t);return new te.Molecule.Topology(r,{label:r.label||e.label,description:"Topology"})})}}),_W=Yt.BuiltIn({name:"topology-from-prmtop",display:{name:"PRMTOP Topology",description:"Create topology from PRMTOP."},from:[te.Format.Prmtop],to:te.Molecule.Topology})({apply({a:e}){return ve.create("Create Topology",async t=>{let r=await Qxe(e.data).runInContext(t);return new te.Molecule.Topology(r,{label:r.label||e.label,description:"Topology"})})}}),YW=Yt.BuiltIn({name:"topology-from-top",display:{name:"TOP Topology",description:"Create topology from TOP."},from:[te.Format.Top],to:te.Molecule.Topology})({apply({a:e}){return ve.create("Create Topology",async t=>{let r=await bxe(e.data).runInContext(t);return new te.Molecule.Topology(r,{label:r.label||e.label,description:"Topology"})})}});async function Jk(e,t,r){if(t.type===te.Molecule.Topology.type){let n=t.data;return await _t.trajectoryFromTopologyAndCoordinates(n,r).runInContext(e)}else if(t.type===te.Molecule.Model.type){let n=t.data;return _t.trajectoryFromModelAndCoordinates(n,r)}throw new Error("no model/topology found")}var Iv=Yt.BuiltIn({name:"trajectory-from-model-and-coordinates",display:{name:"Trajectory from Topology & Coordinates",description:"Create a trajectory from existing model/topology and coordinates."},from:te.Root,to:te.Molecule.Trajectory,params:{modelRef:h.Text("",{isHidden:!0}),coordinatesRef:h.Text("",{isHidden:!0})}})({getDependencies:({modelRef:e,coordinatesRef:t})=>{let r=[];return e&&r.push(e),t&&r.push(t),r},apply({params:e,dependencies:t}){return ve.create("Create trajectory from model/topology and coordinates",async r=>{let n=t[e.coordinatesRef].data,o=await Jk(r,t[e.modelRef],n),i={label:"Trajectory",description:`${o.frameCount} model${o.frameCount===1?"":"s"}`};return new te.Molecule.Trajectory(o,i)})}}),Xst=Yt.BuiltIn({name:"trajectory-from-blob",display:{name:"Parse Blob",description:"Parse format blob into a single trajectory."},from:te.Format.Blob,to:te.Molecule.Trajectory})({apply({a:e}){return ve.create("Parse Format Blob",async t=>{let r=[];for(let o of e.data){if(o.kind!=="cif")continue;let i=o.data.blocks[0],a=await QN(i).runInContext(t);if(a.frameCount===0)throw new Error("No models found.");for(let A=0;A<a.frameCount;A++){let s=await ve.resolveInContext(a.getFrameAtIndex(A),t);r.push(s)}}for(let o=0;o<r.length;o++)_t.TrajectoryInfo.set(r[o],{index:o,size:r.length});let n={label:"Trajectory",description:`${r.length} model${r.length===1?"":"s"}`};return new te.Molecule.Trajectory(new fc(r),n)})}});function Zf(e){return{label:`${e.representative.entry}`,description:`${e.frameCount} model${e.frameCount===1?"":"s"}`}}var OW=Yt.BuiltIn({name:"trajectory-from-mmcif",display:{name:"Trajectory from mmCIF",description:"Identify and create all separate models in the specified CIF data block"},from:te.Format.Cif,to:te.Molecule.Trajectory,params(e){if(!e)return{loadAllBlocks:h.Optional(h.Boolean(!1,{description:"If True, ignore Block Header and Block Index parameters and parse all datablocks into a single trajectory."})),blockHeader:h.Optional(h.Text(void 0,{description:"Header of the block to parse. If not specifed, Block Index parameter applies.",hideIf:n=>n.loadAllBlocks===!0})),blockIndex:h.Optional(h.Numeric(0,{min:0,step:1},{description:"Zero-based index of the block to parse. Only applies when Block Header parameter is not specified.",hideIf:n=>n.loadAllBlocks===!0||n.blockHeader}))};let{blocks:t}=e.data,r=t.map(n=>[n.header,n.header]);return r.push(["","[Use Block Index]"]),{loadAllBlocks:h.Optional(h.Boolean(!1,{description:"If True, ignore Block Header and Block Index parameters and parse all data blocks into a single trajectory."})),blockHeader:h.Optional(h.Select(t[0]&&t[0].header,r,{description:"Header of the block to parse. If not specifed, Block Index parameter applies.",hideIf:n=>n.loadAllBlocks===!0})),blockIndex:h.Optional(h.Numeric(0,{min:0,step:1,max:t.length-1},{description:"Zero-based index of the block to parse. Only applies when Block Header parameter is not specified.",hideIf:n=>n.loadAllBlocks===!0||n.blockHeader}))}}})({isApplicable:e=>e.data.blocks.length>0,apply({a:e,params:t}){return ve.create("Parse mmCIF",async r=>{let n;if(t.loadAllBlocks){let i=[];for(let a of e.data.blocks){r.shouldUpdate&&await r.update(`Parsing ${a.header}...`);let A=await QN(a).runInContext(r);for(let s=0;s<A.frameCount;s++)i.push(await ve.resolveInContext(A.getFrameAtIndex(s),r))}n=new fc(i)}else{let i=t.blockHeader||e.data.blocks[t.blockIndex??0].header,a=e.data.blocks.find(s=>s.header===i);if(!a)throw new Error(`Data block '${[i]}' not found.`);n=a.categoryNames.includes("chem_comp_atom")&&!a.categoryNames.includes("atom_site")&&!a.categoryNames.includes("ihm_sphere_obj_site")&&!a.categoryNames.includes("ihm_gaussian_obj_site")?await qde(a).runInContext(r):await QN(a,e.data).runInContext(r)}if(n.frameCount===0)throw new Error("No models found.");let o=Zf(n);return new te.Molecule.Trajectory(n,o)})}}),JW=Yt.BuiltIn({name:"trajectory-from-pdb",display:{name:"Parse PDB",description:"Parse PDB string and create trajectory."},from:[te.Data.String],to:te.Molecule.Trajectory,params:{variant:h.Select("pdb",h.arrayToOptions(["pdb","pdbqt","pqr"]))}})({apply({a:e,params:t}){return ve.create("Parse PDB",async r=>{let n=await Fbe(e.data,e.label,t.variant).runInContext(r);if(n.isError)throw new Error(n.message);let o=await t0e(n.result).runInContext(r),i=Zf(o);return new te.Molecule.Trajectory(o,i)})}}),zW=Yt.BuiltIn({name:"trajectory-from-gro",display:{name:"Parse GRO",description:"Parse GRO string and create trajectory."},from:[te.Data.String],to:te.Molecule.Trajectory})({apply({a:e}){return ve.create("Parse GRO",async t=>{let r=await vbe(e.data).runInContext(t);if(r.isError)throw new Error(r.message);let n=await Ube(r.result).runInContext(t),o=Zf(n);return new te.Molecule.Trajectory(n,o)})}}),KW=Yt.BuiltIn({name:"trajectory-from-xyz",display:{name:"Parse XYZ",description:"Parse XYZ string and create trajectory."},from:[te.Data.String],to:te.Molecule.Trajectory})({apply({a:e}){return ve.create("Parse XYZ",async t=>{let r=await z0e(e.data).runInContext(t);if(r.isError)throw new Error(r.message);let n=await j0e(r.result).runInContext(t),o=Zf(n);return new te.Molecule.Trajectory(n,o)})}}),Zst=Yt.BuiltIn({name:"trajectory-from-lammps-data",display:{name:"Parse Lammps Data",description:"Parse Lammps Data from string and create trajectory."},from:[te.Data.String],to:te.Molecule.Trajectory,params:{unitsStyle:h.Select("real",h.arrayToOptions(QW))}})({apply({a:e,params:t}){return ve.create("Parse Lammps Data",async r=>{let n=await q0e(e.data).runInContext(r);if(n.isError)throw new Error(n.message);let o=await exe(n.result,t.unitsStyle).runInContext(r),i=Zf(o);return new te.Molecule.Trajectory(o,i)})}}),jW=Yt.BuiltIn({name:"trajectory-from-lammps-traj-data",display:{name:"Parse Lammps traj Data",description:"Parse Lammps Traj Data string and create trajectory."},from:[te.Data.String],to:te.Molecule.Trajectory,params:{unitsStyle:h.Select("real",h.arrayToOptions(QW))}})({apply({a:e,params:t}){return ve.create("Parse Lammps Data",async r=>{let n=await bW(e.data).runInContext(r);if(n.isError)throw new Error(n.message);let o=await oxe(n.result,t.unitsStyle).runInContext(r),i=Zf(o);return new te.Molecule.Trajectory(o,i)})}}),WW=Yt.BuiltIn({name:"trajectory-from-mol",display:{name:"Parse MOL",description:"Parse MOL string and create trajectory."},from:[te.Data.String],to:te.Molecule.Trajectory})({apply({a:e}){return ve.create("Parse MOL",async t=>{let r=await L0e(e.data).runInContext(t);if(r.isError)throw new Error(r.message);let n=await P0e(r.result).runInContext(t),o=Zf(n);return new te.Molecule.Trajectory(n,o)})}}),XW=Yt.BuiltIn({name:"trajectory-from-sdf",display:{name:"Parse SDF",description:"Parse SDF string and create trajectory."},from:[te.Data.String],to:te.Molecule.Trajectory})({apply({a:e}){return ve.create("Parse SDF",async t=>{let r=await cxe(e.data).runInContext(t);if(r.isError)throw new Error(r.message);let n=[];for(let a of r.result.compounds){let A=await uxe(a).runInContext(t);for(let s=0;s<A.frameCount;s++)n.push(await ve.resolveInContext(A.getFrameAtIndex(s),t))}let o=new fc(n),i=Zf(o);return new te.Molecule.Trajectory(o,i)})}}),ZW=Yt.BuiltIn({name:"trajectory-from-mol2",display:{name:"Parse MOL2",description:"Parse MOL2 string and create trajectory."},from:[te.Data.String],to:te.Molecule.Trajectory})({apply({a:e}){return ve.create("Parse MOL2",async t=>{let r=await V0e(e.data,e.label).runInContext(t);if(r.isError)throw new Error(r.message);let n=await Y0e(r.result).runInContext(t),o=Zf(n);return new te.Molecule.Trajectory(n,o)})}}),qst=Yt.BuiltIn({name:"trajectory-from-cube",display:{name:"Parse Cube",description:"Parse Cube file to create a trajectory."},from:te.Format.Cube,to:te.Molecule.Trajectory})({apply({a:e}){return ve.create("Parse MOL",async t=>{let r=await M0e(e.data).runInContext(t),n=Zf(r);return new te.Molecule.Trajectory(r,n)})}}),$st=Yt.BuiltIn({name:"trajectory-from-cif-core",display:{name:"Parse CIF Core",description:"Identify and create all separate models in the specified CIF data block"},from:te.Format.Cif,to:te.Molecule.Trajectory,params(e){if(!e)return{blockHeader:h.Optional(h.Text(void 0,{description:"Header of the block to parse. If none is specifed, the 1st data block in the file is used."}))};let{blocks:t}=e.data;return{blockHeader:h.Optional(h.Select(t[0]&&t[0].header,t.map(r=>[r.header,r.header]),{description:"Header of the block to parse"}))}}})({apply({a:e,params:t}){return ve.create("Parse CIF Core",async r=>{let n=t.blockHeader||e.data.blocks[0].header,o=e.data.blocks.find(A=>A.header===n);if(!o)throw new Error(`Data block '${[n]}' not found.`);let i=await G0e(o).runInContext(r);if(i.frameCount===0)throw new Error("No models found.");let a=Zf(i);return new te.Molecule.Trajectory(i,a)})}}),ect=e=>e+1,tct=e=>e-1,YR=Yt.BuiltIn({name:"model-from-trajectory",display:{name:"Molecular Model",description:"Create a molecular model from specified index in a trajectory."},from:te.Molecule.Trajectory,to:te.Molecule.Model,params:e=>e?{modelIndex:h.Converted(ect,tct,h.Numeric(1,{min:1,max:e.data.frameCount,step:1},{description:"Model Index",immediateUpdate:!0}))}:{modelIndex:h.Numeric(0,{},{description:"Zero-based index of the model",immediateUpdate:!0})}})({isApplicable:e=>e.data.frameCount>0,apply({a:e,params:t}){return ve.create("Model from Trajectory",async r=>{let n=Math.round(t.modelIndex)%e.data.frameCount;n<0&&(n+=e.data.frameCount);let o=await ve.resolveInContext(e.data.getFrameAtIndex(n),r),i=`Model ${n+1}`,a=e.data.frameCount===1?void 0:`of ${e.data.frameCount}`;return new te.Molecule.Model(o,{label:i,description:a})})},interpolate(e,t,r){return{modelIndex:r>=1?t.modelIndex:e.modelIndex+Math.floor((t.modelIndex-e.modelIndex+1)*r)}},dispose({b:e}){e?.data.customProperties.dispose()}}),rct=Yt.BuiltIn({name:"structure-from-trajectory",display:{name:"Structure from Trajectory",description:"Create a molecular structure from a trajectory."},from:te.Molecule.Trajectory,to:te.Molecule.Structure})({apply({a:e}){return ve.create("Build Structure",async t=>{let r=await Ye.ofTrajectory(e.data,t),n={label:"Ensemble",description:Ye.elementDescription(r)};return new te.Molecule.Structure(r,n)})},dispose({b:e}){e?.data.customPropertyDescriptors.dispose()}}),qW=Yt.BuiltIn({name:"structure-from-model",display:{name:"Structure",description:"Create a molecular structure (model, assembly, or symmetry) from the specified model."},from:te.Molecule.Model,to:te.Molecule.Structure,params(e){return Lh.getParams(e&&e.data)}})({canAutoUpdate({oldParams:e,newParams:t}){return Lh.canAutoUpdate(e.type,t.type)},apply({a:e,params:t},r){return ve.create("Build Structure",async n=>Lh.create(r,n,e.data,t&&t.type))},update:({a:e,b:t,oldParams:r,newParams:n})=>ka(r,n)?t.data.model===e.data?lt.UpdateResult.Unchanged:_t.areHierarchiesEqual(e.data,t.data.model)?(t.data=t.data.remapModel(e.data),lt.UpdateResult.Updated):lt.UpdateResult.Recreate:lt.UpdateResult.Recreate,dispose({b:e}){e?.data.customPropertyDescriptors.dispose()}}),$W=Yt.BuiltIn({name:"transform-structure-conformation",display:{name:"Transform Conformation"},isDecorator:!0,from:te.Molecule.Structure,to:te.Molecule.Structure,params:{transform:Bv}})({canAutoUpdate({newParams:e}){return e.transform.name!=="matrix"},apply({a:e,params:t}){let r=pv(t.transform)?e.data.boundary.sphere.center:B.unit,n=fv(t.transform,r),o=Ye.transform(e.data,n);return new te.Molecule.Structure(o,{label:e.label,description:`${e.description} [Transformed]`})},dispose({b:e}){e?.data.customPropertyDescriptors.dispose()}}),eX=Yt.BuiltIn({name:"structure-instances",display:{name:"Structure Instances"},isDecorator:!0,from:te.Molecule.Structure,to:te.Molecule.Structure,params:{transforms:h.ObjectList({transform:Bv},()=>"Transform")}})({canAutoUpdate(){return!0},apply({a:e,params:t}){let r=t.transforms.some(i=>pv(i.transform))?e.data.boundary.sphere.center:B.unit,n=t.transforms.map(i=>fv(i.transform,r));if(!n.length)return e;let o=Ye.instances(e.data,n);return new te.Molecule.Structure(o,{label:e.label,description:`${e.description} [Instanced]`})},dispose({b:e}){e?.data.customPropertyDescriptors.dispose()}}),nct=Yt.BuiltIn({name:"model-with-coordinates",display:{name:"Model With Coordinates",description:"Updates the current model with provided coordinate frame"},from:te.Molecule.Model,to:te.Molecule.Model,params:{frameIndex:h.Optional(h.Numeric(0,void 0,{isHidden:!0})),frameCount:h.Optional(h.Numeric(1,void 0,{isHidden:!0})),atomicCoordinateFrame:h.Optional(h.Value(void 0,{isHidden:!0}))},isDecorator:!0})({apply({a:e,params:t}){if(!t.atomicCoordinateFrame)return e;let r={...e.data,atomicConformation:_t.getAtomicConformationFromFrame(e.data,t.atomicCoordinateFrame)};return _t.TrajectoryInfo.set(r,{index:t.frameIndex??0,size:t.frameCount??1}),new te.Molecule.Model(r,{label:e.label,description:e.description})},update:({a:e,b:t,oldParams:r,newParams:n})=>r.atomicCoordinateFrame===n.atomicCoordinateFrame?lt.UpdateResult.Unchanged:(n.atomicCoordinateFrame?t.data={...t.data,atomicConformation:_t.getAtomicConformationFromFrame(t.data,n.atomicCoordinateFrame)}:t.data=e.data,_t.TrajectoryInfo.set(t.data,{index:n.frameIndex??0,size:n.frameCount??1}),lt.UpdateResult.Updated)}),oct=Yt.BuiltIn({name:"structure-selection-from-expression",display:{name:"Selection",description:"Create a molecular structure from the specified expression."},from:te.Molecule.Structure,to:te.Molecule.Structure,params:()=>({expression:h.Value(ce.struct.generator.all,{isHidden:!0}),label:h.Optional(h.Text("",{isHidden:!0}))})})({apply({a:e,params:t,cache:r}){let{selection:n,entry:o}=tc.createAndRun(e.data,t.expression);if(r.entry=o,Qt.isEmpty(n))return po.Null;let i=Qt.unionStructure(n),a={label:`${t.label||"Selection"}`,description:Ye.elementDescription(i)};return new te.Molecule.Structure(i,a)},update:({a:e,b:t,oldParams:r,newParams:n,cache:o})=>{if(r.expression!==n.expression)return lt.UpdateResult.Recreate;let i=o.entry;if(i.currentStructure===e.data)return lt.UpdateResult.Unchanged;let a=tc.updateStructure(i,e.data);return Qt.isEmpty(a)?lt.UpdateResult.Null:(tc.updateStructureObject(t,a,n.label),lt.UpdateResult.Updated)},dispose({b:e}){e?.data.customPropertyDescriptors.dispose()}}),ict=Yt.BuiltIn({name:"structure-multi-selection-from-expression",display:{name:"Multi-structure Measurement Selection",description:"Create selection object from multiple structures."},from:te.Root,to:te.Molecule.Structure.Selections,params:()=>({selections:h.ObjectList({key:h.Text(void 0,{description:"A unique key."}),ref:h.Text(),groupId:h.Optional(h.Text()),expression:h.Value(ce.struct.generator.empty)},e=>e.ref,{isHidden:!0}),isTransitive:h.Optional(h.Boolean(!1,{isHidden:!0,description:"Remap the selections from the original structure if structurally equivalent."})),label:h.Optional(h.Text("",{isHidden:!0}))})})({apply({params:e,cache:t,dependencies:r}){let n=new Map,o=[],i=0;for(let A of e.selections){let{selection:s,entry:c}=tc.createAndRun(r[A.ref].data,A.expression);n.set(A.key,c);let l=Qt.toLociWithSourceUnits(s);o.push({key:A.key,structureRef:A.ref,loci:l,groupId:A.groupId}),i+=W.Loci.size(l)}t.entries=n;let a={label:`${e.label||"Multi-selection"}`,description:`${e.selections.length} source(s), ${i} element(s) total`};return new te.Molecule.Structure.Selections(o,a)},update:({b:e,oldParams:t,newParams:r,cache:n,dependencies:o})=>{if(!!t.isTransitive!=!!r.isTransitive)return lt.UpdateResult.Recreate;let i=n.entries,a=new Map,A=new Map;for(let u of e.data)A.set(u.key,u);let s=!1,c=0,l=[];for(let u of r.selections){let g=o[u.ref].data,m=!1;if(i.has(u.key)){let p=i.get(u.key);if(tc.isUnchanged(p,u.expression,g)&&A.has(u.key)){let d=A.get(u.key);d.groupId!==u.groupId&&(d.groupId=u.groupId,s=!0),a.set(u.key,p),l.push(d),c+=W.Loci.size(d.loci);continue}if(p.expression!==u.expression)m=!0;else{let d=!1;if(r.isTransitive)if(Ye.areUnitIdsAndIndicesEqual(p.originalStructure,g)){let f=tc.run(p,p.originalStructure);p.currentStructure=g,a.set(u.key,p);let I=W.Loci.remap(Qt.toLociWithSourceUnits(f),g);l.push({key:u.key,structureRef:u.ref,loci:I,groupId:u.groupId}),c+=W.Loci.size(I),s=!0}else d=!0;else d=!0;if(d){s=!0;let f=tc.updateStructure(p,g);a.set(u.key,p);let I=Qt.toLociWithSourceUnits(f);l.push({key:u.key,structureRef:u.ref,loci:I,groupId:u.groupId}),c+=W.Loci.size(I)}}}else m=!0;if(m){s=!0;let{selection:p,entry:d}=tc.createAndRun(g,u.expression);a.set(u.key,d);let f=Qt.toLociWithSourceUnits(p);l.push({key:u.key,structureRef:u.ref,loci:f,groupId:u.groupId}),c+=W.Loci.size(f)}}return s?(n.entries=a,e.data=l,e.label=`${r.label||"Multi-selection"}`,e.description=`${l.length} source(s), ${c} element(s) total`,lt.UpdateResult.Updated):lt.UpdateResult.Unchanged}}),act=Yt.BuiltIn({name:"structure-multi-selection-from-bundle",display:{name:"Multi-structure Measurement Selection",description:"Create selection object from multiple structures."},from:te.Root,to:te.Molecule.Structure.Selections,params:()=>({selections:h.ObjectList({key:h.Text(void 0,{description:"A unique key."}),ref:h.Text(),groupId:h.Optional(h.Text()),bundle:h.Value(W.Bundle.Empty)},e=>e.ref,{isHidden:!0}),isTransitive:h.Optional(h.Boolean(!1,{isHidden:!0,description:"Remap the selections from the original structure if structurally equivalent."})),label:h.Optional(h.Text("",{isHidden:!0}))})})({apply({params:e,cache:t,dependencies:r}){let n=new Map,o=[],i=0;for(let A of e.selections){let s=r[A.ref].data,c=W.Bundle.toLoci(A.bundle,s);o.push({key:A.key,structureRef:A.ref,loci:c,groupId:A.groupId}),i+=W.Loci.size(c),n.set(A.key,{source:s})}t.entries=n;let a={label:`${e.label||"Multi-selection"}`,description:`${e.selections.length} source(s), ${i} element(s) total`};return new te.Molecule.Structure.Selections(o,a)},update:({b:e,oldParams:t,newParams:r,cache:n,dependencies:o})=>{if(!!t.isTransitive!=!!r.isTransitive)return lt.UpdateResult.Recreate;let i=n.entries,a=new Map,A=new Map;for(let g of t.selections)A.set(g.key,g.bundle);let s=new Map;for(let g of e.data)s.set(g.key,g);let c=!1,l=0,u=[];for(let g of r.selections){let m=!1;if(i.has(g.key)){let p=o[g.ref].data,d=i.get(g.key),f=A.get(g.key);if(f&&p===d.source&&g.bundle.hash===d.source.hashCode&&W.Bundle.areEqual(g.bundle,f)){let I=s.get(g.key);I.groupId!==g.groupId&&(I.groupId=g.groupId,c=!0),a.set(g.key,d),u.push(I),l+=W.Loci.size(I.loci);continue}m=!0}else m=!0;if(m){c=!0;let p=o[g.ref].data,d=W.Bundle.toLoci(g.bundle,p);u.push({key:g.key,structureRef:g.ref,loci:d,groupId:g.groupId}),l+=W.Loci.size(d),a.set(g.key,{source:p})}}return c?(n.entries=a,e.data=u,e.label=`${r.label||"Multi-selection"}`,e.description=`${u.length} source(s), ${l} element(s) total`,lt.UpdateResult.Updated):lt.UpdateResult.Unchanged}}),Act=Yt.BuiltIn({name:"structure-selection-from-script",display:{name:"Selection",description:"Create a molecular structure from the specified script."},from:te.Molecule.Structure,to:te.Molecule.Structure,params:()=>({script:h.Script({language:"mol-script",expression:"(sel.atom.atom-groups :residue-test (= atom.resname ALA))"}),label:h.Optional(h.Text(""))})})({apply({a:e,params:t,cache:r}){let{selection:n,entry:o}=tc.createAndRun(e.data,t.script);r.entry=o;let i=Qt.unionStructure(n),a={label:`${t.label||"Selection"}`,description:Ye.elementDescription(i)};return new te.Molecule.Structure(i,a)},update:({a:e,b:t,oldParams:r,newParams:n,cache:o})=>{if(!zo.areEqual(r.script,n.script))return lt.UpdateResult.Recreate;let i=o.entry;if(i.currentStructure===e.data)return lt.UpdateResult.Unchanged;let a=tc.updateStructure(i,e.data);return tc.updateStructureObject(t,a,n.label),lt.UpdateResult.Updated},dispose({b:e}){e?.data.customPropertyDescriptors.dispose()}}),sct=Yt.BuiltIn({name:"structure-selection-from-bundle",display:{name:"Selection",description:"Create a molecular structure from the specified structure-element bundle."},from:te.Molecule.Structure,to:te.Molecule.Structure,params:()=>({bundle:h.Value(W.Bundle.Empty,{isHidden:!0}),label:h.Optional(h.Text("",{isHidden:!0}))})})({apply({a:e,params:t,cache:r}){if(t.bundle.hash!==e.data.hashCode)return po.Null;r.source=e.data;let n=W.Bundle.toStructure(t.bundle,e.data);if(n.elementCount===0)return po.Null;let o={label:`${t.label||"Selection"}`,description:Ye.elementDescription(n)};return new te.Molecule.Structure(n,o)},update:({a:e,b:t,oldParams:r,newParams:n,cache:o})=>{if(!W.Bundle.areEqual(r.bundle,n.bundle))return lt.UpdateResult.Recreate;if(n.bundle.hash!==e.data.hashCode)return lt.UpdateResult.Null;if(o.source===e.data)return lt.UpdateResult.Unchanged;o.source=e.data;let i=W.Bundle.toStructure(n.bundle,e.data);return i.elementCount===0?lt.UpdateResult.Null:(t.label=`${n.label||"Selection"}`,t.description=Ye.elementDescription(i),t.data=i,lt.UpdateResult.Updated)},dispose({b:e}){e?.data.customPropertyDescriptors.dispose()}}),Dxe={polymer:"polymer",protein:"protein",nucleic:"nucleic",water:"water",branched:"branched",ligand:"ligand","non-standard":"non-standard",coarse:"coarse","atomic-sequence":"atomic-sequence","atomic-het":"atomic-het",spheres:"spheres"},cct=h.objectToOptions(Dxe),lct=Yt.BuiltIn({name:"structure-complex-element",display:{name:"Complex Element",description:"Create a molecular structure from the specified model."},from:te.Molecule.Structure,to:te.Molecule.Structure,params:{type:h.Select("atomic-sequence",cct,{isHidden:!0})}})({apply({a:e,params:t}){let r,n;switch(t.type){case"polymer":r=Oi.polymer.query,n="Polymer";break;case"protein":r=Oi.protein.query,n="Protein";break;case"nucleic":r=Oi.nucleic.query,n="Nucleic";break;case"water":r=wo.internal.water(),n="Water";break;case"branched":r=Oi.branchedPlusConnected.query,n="Branched";break;case"ligand":r=Oi.ligandPlusConnected.query,n="Ligand";break;case"non-standard":r=Oi.nonStandardPolymer.query,n="Non-standard";break;case"coarse":r=Oi.coarse.query,n="Coarse";break;case"atomic-sequence":r=wo.internal.atomicSequence(),n="Sequence";break;case"atomic-het":r=wo.internal.atomicHet(),n="HET Groups/Ligands";break;case"spheres":r=wo.internal.spheres(),n="Coarse Spheres";break;default:Or(t.type)}let o=r(new qo(e.data)),i=Qt.unionStructure(o);return i.elementCount===0?po.Null:new te.Molecule.Structure(i,{label:n,description:Ye.elementDescription(i)})},dispose({b:e}){e?.data.customPropertyDescriptors.dispose()}}),Cv=Yt.BuiltIn({name:"structure-component",display:{name:"Component",description:"A molecular structure component."},from:te.Molecule.Structure,to:te.Molecule.Structure,params:w0e})({apply({a:e,params:t,cache:r}){return uv(e.data,t,r)},update:({a:e,b:t,oldParams:r,newParams:n,cache:o})=>R0e(e.data,t,r,n,o),dispose({b:e}){e?.data.customPropertyDescriptors.dispose()}}),OR=Yt.BuiltIn({name:"custom-model-properties",display:{name:"Custom Model Properties"},isDecorator:!0,from:te.Molecule.Model,to:te.Molecule.Model,params:(e,t)=>t.customModelProperties.getParams(e?.data)})({apply({a:e,params:t},r){return ve.create("Custom Props",async n=>(await xxe(e.data,r,n,t),new te.Molecule.Model(e.data,{label:e.label,description:e.description})))},update({a:e,b:t,oldParams:r,newParams:n},o){return ve.create("Custom Props",async i=>{t.data=e.data,t.label=e.label,t.description=e.description;for(let a of r.autoAttach){let A=o.customModelProperties.get(a);A&&e.data.customProperties.reference(A.descriptor,!1)}return await xxe(e.data,o,i,n),lt.UpdateResult.Updated})},dispose({b:e}){e?.data.customProperties.dispose()}});async function xxe(e,t,r,n){let o={runtime:r,assetManager:t.managers.asset,errorContext:t.errorContext},{autoAttach:i,properties:a}=n;for(let A of Object.keys(a)){let s=t.customModelProperties.get(A),c=a[A];if(i.includes(A)||s.isHidden)try{await s.attach(o,e,c,!0)}catch(l){t.log.warn(`Error attaching model prop '${A}': ${l}`)}else s.set(e,c)}}var JR=Yt.BuiltIn({name:"custom-structure-properties",display:{name:"Custom Structure Properties"},isDecorator:!0,from:te.Molecule.Structure,to:te.Molecule.Structure,params:(e,t)=>t.customStructureProperties.getParams(e?.data.root)})({apply({a:e,params:t},r){return ve.create("Custom Props",async n=>(await Sxe(e.data.root,r,n,t),new te.Molecule.Structure(e.data,{label:e.label,description:e.description})))},update({a:e,b:t,oldParams:r,newParams:n},o){return e.data!==t.data?lt.UpdateResult.Recreate:ve.create("Custom Props",async i=>{t.data=e.data,t.label=e.label,t.description=e.description;for(let a of r.autoAttach){let A=o.customStructureProperties.get(a);A&&e.data.customPropertyDescriptors.reference(A.descriptor,!1)}return await Sxe(e.data.root,o,i,n),lt.UpdateResult.Updated})},dispose({b:e}){e?.data.customPropertyDescriptors.dispose()}});async function Sxe(e,t,r,n){let o={runtime:r,assetManager:t.managers.asset,errorContext:t.errorContext},{autoAttach:i,properties:a}=n;for(let A of Object.keys(a)){let s=t.customStructureProperties.get(A),c=a[A];if(i.includes(A)||s.isHidden)try{await s.attach(o,e,c,!0)}catch(l){t.log.warn(`Error attaching structure prop '${A}': ${l}`)}else s.set(e,c)}}var lX={};ki(lX,{AssignColorVolume:()=>xct,CustomVolumeProperties:()=>Sct,VolumeFromCcp4:()=>iX,VolumeFromCube:()=>yct,VolumeFromDensityServerCif:()=>AX,VolumeFromDsn6:()=>hct,VolumeFromDx:()=>aX,VolumeFromMtz:()=>bct,VolumeFromSegmentationCif:()=>Qct,VolumeFromStructureFactorsCif:()=>Ect,VolumeInstances:()=>cX,VolumeTransform:()=>sX});function uct(e){return e.originX===0&&e.originY===0&&e.originZ===0?B.create(e.NCSTART,e.NRSTART,e.NSSTART):B.create(e.originX/(e.xLength/e.NX),e.originY/(e.yLength/e.NY),e.originZ/(e.zLength/e.NZ))}function gct(e){return e.xLength===0&&e.yLength===0&&e.zLength===0?B.create(e.NX,e.NY,e.NZ):B.create(e.xLength,e.yLength,e.zLength)}function mct(e){let t=R6(e);switch(t){case wl.Float32:return Float32Array;case wl.Int8:return Int8Array;case wl.Int16:return Int16Array;case wl.Uint16:return Uint16Array}throw Error(`${t} is not a supported value format.`)}function vxe(e,t){return ve.create("Create Volume",async r=>{let{header:n,values:o}=e,i=gct(n);t&&t.voxelSize&&B.mul(i,i,t.voxelSize);let a=B.create(kr(n.alpha),kr(n.beta),kr(n.gamma)),A=n.ISPG>65536?0:n.ISPG,s=Ia.create(A||"P 1",i,a),c=B.create(n.MAPC-1,n.MAPR-1,n.MAPS-1),l=Fr.convertToCanonicalAxisIndicesFastToSlow(c),u=[n.NX,n.NY,n.NZ],g=l([n.NC,n.NR,n.NS]),m=uct(n);t?.offset&&B.add(m,m,t.offset);let p=l(m),d=B.create(p[0]/u[0],p[1]/u[1],p[2]/u[2]),f=B.create(g[0]/u[0],g[1]/u[1],g[2]/u[2]),I=Fr.Space(g,Fr.invertAxisOrder(c),mct(n)),C=Fr.create(I,Fr.Data1(o)),y=n.AMIN===0&&n.AMAX===0&&n.AMEAN===0&&n.ARMS===0,Q={transform:{kind:"spacegroup",cell:s,fractionalBox:Ct.create(d,B.add(B(),d,f))},cells:C,stats:{min:Number.isNaN(n.AMIN)||y?My(o):n.AMIN,max:Number.isNaN(n.AMAX)||y?Es(o):n.AMAX,mean:Number.isNaN(n.AMEAN)||y?ky(o):n.AMEAN,sigma:Number.isNaN(n.ARMS)||n.ARMS===0?Hy(o):n.ARMS},periodicity:B.isInteger(f)?"xyz":"none"};return{label:t?.label,entryId:t?.entryId,grid:Q,instances:[{transform:Y.identity()}],sourceData:Fxe.create(e),customProperties:new bA,_propertyData:Object.create(null),_localPropertyData:Object.create(null)}})}var Fxe;(r=>{function e(n){return n?.kind==="ccp4"}r.is=e;function t(n){return{kind:"ccp4",name:n.name,data:n}}r.create=t})(Fxe||={});function wxe(e,t){return ve.create("Create Volume",async r=>{let{header:n,values:o}=e,i=B.create(n.xlen,n.ylen,n.zlen);t&&t.voxelSize&&B.mul(i,i,t.voxelSize);let a=B.create(kr(n.alpha),kr(n.beta),kr(n.gamma)),A=Ia.create("P 1",i,a),s=[n.xRate,n.yRate,n.zRate],c=[n.xExtent,n.yExtent,n.zExtent],l=[n.xStart,n.yStart,n.zStart],u=B.create(l[0]/s[0],l[1]/s[1],l[2]/s[2]),g=B.create(c[0]/s[0],c[1]/s[1],c[2]/s[2]),m=Fr.Space(c,[0,1,2],Float32Array),p=Fr.create(m,Fr.Data1(o));return{label:t?.label,entryId:t?.entryId,grid:{transform:{kind:"spacegroup",cell:A,fractionalBox:Ct.create(u,B.add(B.zero(),u,g))},cells:p,stats:{min:My(o),max:Es(o),mean:ky(o),sigma:n.sigma!==void 0?n.sigma:Hy(o)},periodicity:B.isInteger(g)?"xyz":"none"},instances:[{transform:Y.identity()}],sourceData:Rxe.create(e),customProperties:new bA,_propertyData:Object.create(null),_localPropertyData:Object.create(null)}})}var Rxe;(r=>{function e(n){return n?.kind==="dsn6"}r.is=e;function t(n){return{kind:"dsn6",name:n.name,data:n}}r.create=t})(Rxe||={});function Uxe(e,t){return ve.create("Create Volume",async()=>{let{header:r,values:n}=e,o=Fr.Space(r.dim,[0,1,2],Float64Array),i=Fr.create(o,Fr.Data1(n)),a=Y.fromTranslation(Y(),r.min),A=Y.fromScaling(Y(),r.h);return Y.mul(a,a,A),{label:t?.label,entryId:t?.entryId,grid:{transform:{kind:"matrix",matrix:a},cells:i,stats:{min:My(n),max:Es(n),mean:ky(n),sigma:Hy(n)}},instances:[{transform:Y.identity()}],sourceData:Lxe.create(e),customProperties:new bA,_propertyData:Object.create(null),_localPropertyData:Object.create(null)}})}var Lxe;(r=>{function e(n){return n?.kind==="dx"}r.is=e;function t(n){return{kind:"dx",name:n.name,data:n}}r.create=t})(Lxe||={});function Txe(e,t){return ve.create("Create Segmentation Volume",async r=>{let{volume_data_3d_info:n,segmentation_data_3d:o}=e,i=Ia.create(n.spacegroup_number.value(0)||"P 1",B.ofArray(n.spacegroup_cell_size.value(0)),B.scale(B(),B.ofArray(n.spacegroup_cell_angles.value(0)),Math.PI/180)),a=n.axis_order.value(0),A=Fr.convertToCanonicalAxisIndicesFastToSlow(a),s=A(n.sample_count.value(0)),c=Fr.Space(s,Fr.invertAxisOrder(a),Float32Array),l=Fr.create(c,Fr.Data1(o.values.toArray({array:Float32Array}))),u=B.ofArray(A(n.origin.value(0))),g=B.ofArray(A(n.dimensions.value(0))),m={label:t?.label,entryId:void 0,grid:{transform:{kind:"spacegroup",cell:i,fractionalBox:Ct.create(u,B.add(B(),u,g))},cells:l,stats:{min:0,max:1,mean:0,sigma:1}},instances:[{transform:Y.identity()}],sourceData:Pxe.create(e),customProperties:new bA,_propertyData:{ownerId:t?.ownerId},_localPropertyData:Object.create(null)};Ze.PickingGranularity.set(m,"object");let p=new Map,d=new Map,{segment_id:f,set_id:I}=e.segmentation_data_table;for(let F=0,v=f.rowCount;F<v;++F){let U=f.value(F),G=I.value(F);G===0||U===0||(d.has(G)||d.set(G,new Set),d.get(G).add(U))}d.forEach((F,v)=>{F.forEach(U=>{p.has(U)||p.set(U,new Set),p.get(U).add(v)})});let C=[0,0,0],y=l.space.getCoords,Q=l.data,[E,b,x]=m.grid.cells.space.dimensions,S=E-1,w=b-1,R=x-1,T={};d.forEach((F,v)=>{T[v]=[S,w,R,-1,-1,-1]});for(let F=0,v=Q.length;F<v;++F){let U=Q[F];if(U===0)continue;y(F,C);let G=T[U];C[0]<G[0]&&(G[0]=C[0]),C[1]<G[1]&&(G[1]=C[1]),C[2]<G[2]&&(G[2]=C[2]),C[0]>G[3]&&(G[3]=C[0]),C[1]>G[4]&&(G[4]=C[1]),C[2]>G[5]&&(G[5]=C[2])}let L={};return p.forEach((F,v)=>{L[v]=Ct.create(B.create(S,w,R),B.create(-1,-1,-1))}),Bi(T,(F,v)=>{d.get(parseInt(v)).forEach(U=>{let G=L[U];F[0]<G.min[0]&&(G.min[0]=F[0]),F[1]<G.min[1]&&(G.min[1]=F[1]),F[2]<G.min[2]&&(G.min[2]=F[2]),F[3]>G.max[0]&&(G.max[0]=F[3]),F[4]>G.max[1]&&(G.max[1]=F[4]),F[5]>G.max[2]&&(G.max[2]=F[5])})}),Ze.Segmentation.set(m,{segments:p,sets:d,bounds:L,labels:t?.segmentLabels??{}}),m})}var Pxe;(r=>{function e(n){return n?.kind==="segcif"}r.is=e;function t(n){return{kind:"segcif",name:n._name,data:n}}r.create=t})(Pxe||={});function Kk(e){if(e<=1)return 1;let t=1;for(;t<e;)t<<=1;return t}var Gxe=new Map;function dct(e){let t=Gxe.get(e);if(!t){let r=new Float64Array(e),n=new Float64Array(e);for(let a=0;a<e;a++){let A=-2*Math.PI*a/e;r[a]=Math.cos(A),n[a]=Math.sin(A)}let o=new Uint32Array(e),i=0;for(let a=1;a<e;a++){let A=e>>1;for(;i&A;A>>=1)i^=A;i^=A,o[a]=i}t=[r,n,o],Gxe.set(e,t)}return t}var rX=new Float32Array(0),Nxe=new Float32Array(0),nX=new Float64Array(0),Mxe=new Float64Array(0);function pct(e,t){return t instanceof Float32Array?(rX.length<e&&(rX=new Float32Array(e),Nxe=new Float32Array(e)),[rX,Nxe]):(nX.length<e&&(nX=new Float64Array(e),Mxe=new Float64Array(e)),[nX,Mxe])}function zk(e,t,r,n,o){let[i,a,A]=dct(n);for(let l=1;l<n;l++){let u=A[l];if(l<u){let g=r+l*o,m=r+u*o,p=e[g];e[g]=e[m],e[m]=p,p=t[g],t[g]=t[m],t[m]=p}}let s=0;for(let l=n;l>1;l>>=1)s++;let c=1;if((s&1)===1){for(let l=0;l<n;l+=2){let u=r+l*o,g=r+(l+1)*o,m=e[u],p=t[u],d=e[g],f=t[g];e[u]=m+d,t[u]=p+f,e[g]=m-d,t[g]=p-f}c=2}for(;c<n;c<<=2){let l=c<<2,u=n/l|0,g=u<<1,m=g+u;for(let p=0;p<n;p+=l){let d=0,f=0,I=0;for(let C=0;C<c;C++){let y=r+(p+C)*o,Q=y+c*o,E=Q+c*o,b=E+c*o,x=e[y],S=t[y],w=e[Q],R=t[Q],T=e[E],L=t[E],F=e[b],v=t[b],U=i[d],G=a[d],N=i[f],k=a[f],J=i[I],H=a[I],z=w*N-R*k,_=w*k+R*N,M=T*U-L*G,q=T*G+L*U,ne=F*J-v*H,oe=F*H+v*J,ae=x+z,me=S+_,Se=x-z,ee=S-_,O=M+ne,X=q+oe,Ce=M-ne,Ne=q-oe;e[y]=ae+O,t[y]=me+X,e[E]=ae-O,t[E]=me-X,e[Q]=Se+Ne,t[Q]=ee-Ce,e[b]=Se-Ne,t[b]=ee+Ce,d+=u,f+=g,I+=m}}}}var fct=16;function oX(e,t,r,n,o,i,a,A){let s=fct;for(let c=0;c<o;c+=s){let l=c+s<o?c+s:o;for(let u=0;u<i;u+=s){let g=u+s<i?u+s:i;for(let m=c;m<l;m++){let p=a+m*i;for(let d=u;d<g;d++){let f=p+d,I=A+d*o+m;r[I]=e[f],n[I]=t[f]}}}}}function kxe(e,t,r,n,o,i,a){let A=i*a;for(let s=0;s<o;s++)oX(e,t,r,n,i,a,s*A,s*A)}function Bct(e,t,r,n,o,i,a){oX(e,t,r,n,o,i*a,0,0)}function Ict(e,t,r,n,o,i,a){oX(e,t,r,n,i*a,o,0,0)}function Hxe(e,t,r,n,o,i){let a=o>>1,A=a+1,s=r*n,[c,l]=pct(s*A,e);kxe(e,t,c,l,r,n,A);for(let p=0;p<r;p++)for(let d=0;d<A;d++)zk(c,l,p*A*n+d*n,n,1);kxe(c,l,e,t,r,A,n),Bct(e,t,c,l,r,n,A);for(let p=0;p<n;p++)for(let d=0;d<A;d++)zk(c,l,p*A*r+d*r,r,1);Ict(c,l,e,t,r,n,A);let u=e instanceof Float32Array?new Float32Array(o):new Float64Array(o),g=e instanceof Float32Array?new Float32Array(o):new Float64Array(o),m=0;for(;m+1<s;m+=2){let p=m*A,d=(m+1)*A;u[0]=e[p]-t[d],g[0]=t[p]+e[d];for(let C=1;C<a;C++){let y=e[p+C],Q=t[p+C],E=e[d+C],b=t[d+C];u[C]=y-b,g[C]=Q+E;let x=o-C;u[x]=y+b,g[x]=E-Q}u[a]=e[p+a]-t[d+a],g[a]=t[p+a]+e[d+a],zk(u,g,0,o,1);let f=m*o,I=(m+1)*o;for(let C=0;C<o;C++)i[f+C]=u[C],i[I+C]=g[C]}if(m<s){let p=m*A;u[0]=e[p],g[0]=t[p];for(let f=1;f<a;f++){let I=e[p+f],C=t[p+f];u[f]=I,g[f]=C;let y=o-f;u[y]=I,g[y]=-C}u[a]=e[p+a],g[a]=t[p+a],zk(u,g,0,o,1);let d=m*o;for(let f=0;f<o;f++)i[d+f]=u[f]}}async function jk(e,t,r,n,o,i,a){let A=e.length,s=i.operators,c=0,l=0,u=0;for(let S=0;S<A;S++){let w=e[S],R=t[S],T=r[S],L=n[S],F=o[S];if(!(!isFinite(L)||!isFinite(F)))for(let v=0;v<s.length;v++){let U=s[v],G=Math.round(U[0]*w+U[1]*R+U[2]*T),N=Math.round(U[4]*w+U[5]*R+U[6]*T),k=Math.round(U[8]*w+U[9]*R+U[10]*T),J=Math.abs(G),H=Math.abs(N),z=Math.abs(k);J>c&&(c=J),H>l&&(l=H),z>u&&(u=z)}}let g=Kk(2*c+2),m=Kk(2*l+2),p=Kk(2*u+2);await a.update({message:"Expanding structure factors..."});let d=g*m*p,f=p>>1,I=f+1,C=g*m*I,y=new Float32Array(C),Q=new Float32Array(C),E=new Uint8Array(C),b=(S,w,R,T,L)=>{let F=(S%g+g)%g,v=(w%m+m)%m,U=(R%p+p)%p,G=L*(Math.PI/180);U>f&&(F=(g-F)%g,v=(m-v)%m,U=p-U,G=-G);let N=F*m*I+v*I+U;E[N]||(y[N]=T*Math.cos(G),Q[N]=T*Math.sin(G),E[N]=1)};for(let S=0;S<A;S++){let w=e[S],R=t[S],T=r[S],L=n[S],F=o[S];if(!(!isFinite(L)||!isFinite(F)))for(let v=0;v<s.length;v++){let U=s[v],G=Math.round(U[0]*w+U[1]*R+U[2]*T),N=Math.round(U[4]*w+U[5]*R+U[6]*T),k=Math.round(U[8]*w+U[9]*R+U[10]*T),J=360*(w*U[12]+R*U[13]+T*U[14]),H=F+J;b(G,N,k,L,H),b(-G,-N,-k,L,-H)}}await a.update({message:"Computing Fourier transform..."});let x=new Float32Array(d);return Hxe(y,Q,g,m,p,x),{density:x,N0:g,N1:m,N2:p}}function Vxe(e,t){return ve.create("Compute Structure Factor Map",async r=>{let n=t?.mapType??"2fo-fc",{cell:o,symmetry:i,refln:a}=e,A=i.Int_Tables_number.value(0)||i["space_group_name_H-M"].value(0)||"P 1",s=B.create(o.length_a.value(0),o.length_b.value(0),o.length_c.value(0)),c=B.create(kr(o.angle_alpha.value(0)),kr(o.angle_beta.value(0)),kr(o.angle_gamma.value(0))),l=Ia.create(A,s,c),u=HA.create(l);if(await r.update({message:"Reading reflections..."}),a.index_h.rowCount===0)throw new Error("No reflection data found in the _refln category.");let m=a.index_h.toArray({array:Int16Array}),p=a.index_k.toArray({array:Int16Array}),d=a.index_l.toArray({array:Int16Array}),f=n==="2fo-fc"?a.pdbx_FWT:a.pdbx_DELFWT,I=n==="2fo-fc"?a.pdbx_PHWT:a.pdbx_DELPHWT;if(!f.isDefined||!I.isDefined){let N=n==="2fo-fc"?"pdbx_FWT":"pdbx_DELFWT",k=n==="2fo-fc"?"pdbx_PHWT":"pdbx_DELPHWT";throw new Error(`Structure factor CIF is missing required _refln.${N}/_refln.${k} map coefficients.`)}let C=f.toArray({array:Float32Array}),y=I.toArray({array:Float32Array}),{density:Q,N0:E,N1:b,N2:x}=await jk(m,p,d,C,y,u,r);await r.update({message:"Finalizing volume..."});let S=E*b*x,w=1/0,R=-1/0,T=0,L=0;for(let N=0;N<S;N++){let k=Q[N];k<w&&(w=k),k>R&&(R=k),T+=k,L+=k*k}let F=T/S,v=Math.sqrt(Math.max(0,L/S-F*F)),U=Fr.Space([E,b,x],[0,1,2],Float32Array),G=Fr.create(U,Fr.Data1(Q));return{label:t?.label,entryId:t?.entryId,grid:{transform:{kind:"spacegroup",cell:l,fractionalBox:Ct.create(B.zero(),B.create(1,1,1))},cells:G,stats:{min:w,max:R,mean:F,sigma:v},periodicity:"xyz"},instances:[{transform:Y.identity()}],sourceData:_xe.create(e),customProperties:new bA,_propertyData:Object.create(null),_localPropertyData:Object.create(null)}})}var _xe;(r=>{function e(n){return n?.kind==="sf"}r.is=e;function t(n){return{kind:"sf",name:n._name,data:n}}r.create=t})(_xe||={});var Cct=[{label:"2fo-fc",amp:"FWT",phi:"PHWT"},{label:"fo-fc",amp:"DELFWT",phi:"DELPHWT"},{label:"fo-fc",amp:"DELFWT",phi:"PHDELWT"},{label:"2fo-fc",amp:"2FOFCWT",phi:"PH2FOFCWT"},{label:"fo-fc",amp:"FOFCWT",phi:"PHFOFCWT"},{label:"2fo-fc",amp:"FWT",phi:"PHIC"}];function Yxe(e){let t=new Set(e.columns.map(o=>o.label)),r=[],n=new Set;for(let o of Cct)if(t.has(o.amp)&&t.has(o.phi)){let i=`${o.amp}|${o.phi}`;n.has(i)||(n.add(i),r.push({label:o.label,ampLabel:o.amp,phiLabel:o.phi}))}return r}function Oxe(e,t){return ve.create("Compute MTZ Map",async r=>{let n=t?.ampLabel??"FWT",o=t?.phiLabel??"PHWT",{header:i,data:a}=e,A=i.cell;for(let be of i.datasets)if(be.id>0&&be.cell){A=be.cell;break}let[s,c,l,u,g,m]=A,p=B.create(s,c,l),d=B.create(kr(u),kr(g),kr(m)),f=i.spaceGroupNumber||i.spaceGroupName||"P 1",I=Ia.create(f,p,d),C=HA.create(I);await r.update({message:"Locating MTZ columns..."});let y=i.columns.find(be=>be.type==="H"&&be.label==="H"),Q=i.columns.find(be=>be.type==="H"&&be.label==="K"),E=i.columns.find(be=>be.type==="H"&&be.label==="L"),b=i.columns.find(be=>be.label===n),x=i.columns.find(be=>be.label===o);if(!y||!Q||!E)throw new Error("MTZ file does not contain H, K, L index columns.");if(!b)throw new Error(`MTZ amplitude column '${n}' not found.`);if(!x)throw new Error(`MTZ phase column '${o}' not found.`);let S=y.index,w=Q.index,R=E.index,T=b.index,L=x.index,F=i.nColumns,v=i.nReflections,U=i.missingNumber,G=be=>isNaN(U)?!isFinite(be):be===U||!isFinite(be);await r.update({message:"Extracting MTZ reflections..."});let N=new Int16Array(v),k=new Int16Array(v),J=new Int16Array(v),H=new Float32Array(v),z=new Float32Array(v),_=0;for(let be=0;be<v;be++){let Fe=be*F,Ae=a[Fe+T],fe=a[Fe+L];G(Ae)||G(fe)||(N[_]=Math.round(a[Fe+S]),k[_]=Math.round(a[Fe+w]),J[_]=Math.round(a[Fe+R]),H[_]=Ae,z[_]=fe,_++)}if(_===0)throw new Error(`MTZ file contains no valid reflections for columns '${n}' and '${o}'.`);let M=N.subarray(0,_),q=k.subarray(0,_),ne=J.subarray(0,_),oe=H.subarray(0,_),ae=z.subarray(0,_),{density:me,N0:Se,N1:ee,N2:O}=await jk(M,q,ne,oe,ae,C,r);await r.update({message:"Finalizing volume..."});let X=Se*ee*O,Ce=1/0,Ne=-1/0,$=0,pe=0;for(let be=0;be<X;be++){let Fe=me[be];Fe<Ce&&(Ce=Fe),Fe>Ne&&(Ne=Fe),$+=Fe,pe+=Fe*Fe}let ye=$/X,Be=Math.sqrt(Math.max(0,pe/X-ye*ye)),De=Fr.Space([Se,ee,O],[0,1,2],Float32Array),Te=Fr.create(De,Fr.Data1(me));return{label:t?.label,entryId:t?.entryId,grid:{transform:{kind:"spacegroup",cell:I,fractionalBox:Ct.create(B.zero(),B.create(1,1,1))},cells:Te,stats:{min:Ce,max:Ne,mean:ye,sigma:Be},periodicity:"xyz"},instances:[{transform:Y.identity()}],sourceData:Jxe.create(e),customProperties:new bA,_propertyData:Object.create(null),_localPropertyData:Object.create(null)}})}var Jxe;(r=>{function e(n){return n?.kind==="mtz"}r.is=e;function t(n){return{kind:"mtz",name:n.name,data:n}}r.create=t})(Jxe||={});var iX=Yt.BuiltIn({name:"volume-from-ccp4",display:{name:"Volume from CCP4/MRC/MAP",description:"Create Volume from CCP4/MRC/MAP data"},from:te.Format.Ccp4,to:te.Volume.Data,params(e){return{voxelSize:h.Vec3(B.create(1,1,1)),offset:h.Vec3(B.create(0,0,0)),entryId:h.Text("")}}})({apply({a:e,params:t}){return ve.create("Create volume from CCP4/MRC/MAP",async r=>{let n=await vxe(e.data,{...t,label:e.data.name||e.label}).runInContext(r),o={label:n.label||"Volume",description:`Volume ${e.data.header.NX}\xD7${e.data.header.NX}\xD7${e.data.header.NX}`};return new te.Volume.Data(n,o)})},dispose({b:e}){e?.data.customProperties.dispose()}}),hct=Yt.BuiltIn({name:"volume-from-dsn6",display:{name:"Volume from DSN6/BRIX",description:"Create Volume from DSN6/BRIX data"},from:te.Format.Dsn6,to:te.Volume.Data,params(e){return{voxelSize:h.Vec3(B.create(1,1,1)),entryId:h.Text("")}}})({apply({a:e,params:t}){return ve.create("Create volume from DSN6/BRIX",async r=>{let n=await wxe(e.data,{...t,label:e.data.name||e.label}).runInContext(r),o={label:n.label||"Volume",description:`Volume ${e.data.header.xExtent}\xD7${e.data.header.yExtent}\xD7${e.data.header.zExtent}`};return new te.Volume.Data(n,o)})},dispose({b:e}){e?.data.customProperties.dispose()}}),yct=Yt.BuiltIn({name:"volume-from-cube",display:{name:"Volume from Cube",description:"Create Volume from Cube data"},from:te.Format.Cube,to:te.Volume.Data,params(e){return{dataIndex:e?h.Select(0,e.data.header.dataSetIds.map((r,n)=>[n,`${r}`])):h.Numeric(0),entryId:h.Text("")}}})({apply({a:e,params:t}){return ve.create("Create volume from Cube",async r=>{let n=await ehe(e.data,{...t,label:e.data.name||e.label}).runInContext(r),o={label:n.label||"Volume",description:`Volume ${e.data.header.dim[0]}\xD7${e.data.header.dim[1]}\xD7${e.data.header.dim[2]}`};return new te.Volume.Data(n,o)})},dispose({b:e}){e?.data.customProperties.dispose()}}),aX=Yt.BuiltIn({name:"volume-from-dx",display:{name:"Parse DX",description:"Create volume from DX data."},from:te.Format.Dx,to:te.Volume.Data})({apply({a:e}){return ve.create("Parse DX",async t=>{let r=await Uxe(e.data,{label:e.data.name||e.label}).runInContext(t),n={label:r.label||"Volume",description:`Volume ${e.data.header.dim[0]}\xD7${e.data.header.dim[1]}\xD7${e.data.header.dim[2]}`};return new te.Volume.Data(r,n)})},dispose({b:e}){e?.data.customProperties.dispose()}}),AX=Yt.BuiltIn({name:"volume-from-density-server-cif",display:{name:"Volume from density-server CIF",description:"Identify and create all separate models in the specified CIF data block"},from:te.Format.Cif,to:te.Volume.Data,params(e){if(!e)return{blockHeader:h.Optional(h.Text(void 0,{description:"Header of the block to parse. If none is specifed, the 1st data block in the file is used."})),entryId:h.Text("")};let t=e.data.blocks.slice(1);return{blockHeader:h.Optional(h.Select(t[0]&&t[0].header,t.map(r=>[r.header,r.header]),{description:"Header of the block to parse"})),entryId:h.Text("")}}})({isApplicable:e=>e.data.blocks.length>0,apply({a:e,params:t}){return ve.create("Parse density-server CIF",async r=>{let n=t.blockHeader||e.data.blocks[1].header,o=e.data.blocks.find(u=>u.header===n);if(!o)throw new Error(`Data block '${[n]}' not found.`);let i=Kc.schema.densityServer(o),a=await X2(i,{entryId:t.entryId}).runInContext(r),[A,s,c]=a.grid.cells.space.dimensions,l={label:t.entryId??i.volume_data_3d_info.name.value(0),description:`Volume ${A}\xD7${s}\xD7${c}`};return new te.Volume.Data(a,l)})},dispose({b:e}){e?.data.customProperties.dispose()}}),Qct=Yt.BuiltIn({name:"volume-from-segmentation-cif",display:{name:"Volume from Segmentation CIF"},from:te.Format.Cif,to:te.Volume.Data,params(e){let t=e?.data.blocks.slice(1);return{blockHeader:t?h.Optional(h.Select(t[0]&&t[0].header,t.map(n=>[n.header,n.header]),{description:"Header of the block to parse"})):h.Optional(h.Text(void 0,{description:"Header of the block to parse. If none is specifed, the 1st data block in the file is used."})),segmentLabels:h.ObjectList({id:h.Numeric(-1),label:h.Text("")},n=>`${n.id} = ${n.label}`,{description:"Mapping of segment IDs to segment labels"}),ownerId:h.Text("",{isHidden:!0,description:"Reference to the object which manages this volume"})}}})({isApplicable:e=>e.data.blocks.length>0,apply({a:e,params:t}){return ve.create("Parse segmentation CIF",async r=>{let n=t.blockHeader||e.data.blocks[1].header,o=e.data.blocks.find(g=>g.header===n);if(!o)throw new Error(`Data block '${[n]}' not found.`);let i=Kc.schema.segmentation(o),a={};for(let g of t.segmentLabels)a[g.id]=g.label;let A=await Txe(i,{segmentLabels:a,ownerId:t.ownerId}).runInContext(r),[s,c,l]=A.grid.cells.space.dimensions,u={label:i.volume_data_3d_info.name.value(0),description:`Segmentation ${s}\xD7${c}\xD7${l}`};return new te.Volume.Data(A,u)})},dispose({b:e}){e?.data.customProperties.dispose()}}),Ect=Yt.BuiltIn({name:"volume-from-structure-factors-cif",display:{name:"Volume from Structure Factors CIF",description:"Compute electron density map from structure factor reflection data (pdbx_FWT/pdbx_PHWT or pdbx_DELFWT/pdbx_DELPHWT)"},from:te.Format.Cif,to:te.Volume.Data,params(e){let t=e?e.data.blocks.map(r=>[r.header,r.header]):[];return{blockHeader:h.Optional(t.length>0?h.Select(t[0][0],t,{description:"Header of the data block to use"}):h.Text(void 0,{description:"Header of the block to parse. Defaults to first block."})),entryId:h.Text(""),mapType:h.Select("2fo-fc",[["2fo-fc","2Fo-Fc (pdbx_FWT/PHWT)"],["fo-fc","Fo-Fc (pdbx_DELFWT/DELPHWT)"]])}}})({isApplicable:e=>e.data.blocks.length>0,apply({a:e,params:t}){return ve.create("Parse structure factors CIF",async r=>{let n=t.blockHeader||e.data.blocks[0].header,o=e.data.blocks.find(m=>m.header===n);if(!o)throw new Error(`Data block '${n}' not found.`);let i=Kc.schema.SF(o),a=await Vxe(i,{entryId:t.entryId,mapType:t.mapType}).runInContext(r),[A,s,c]=a.grid.cells.space.dimensions,l=t.entryId||n,u=t.mapType==="fo-fc"?"Fo-Fc":"2Fo-Fc",g={label:l,description:`${u} Volume ${A}\xD7${s}\xD7${c}`};return new te.Volume.Data(a,g)})},dispose({b:e}){e?.data.customProperties.dispose()}}),bct=Yt.BuiltIn({name:"volume-from-mtz",display:{name:"Volume from MTZ",description:"Compute electron density map from MTZ reflection data"},from:te.Format.Mtz,to:te.Volume.Data,params(e){if(!e)return{ampLabel:h.Text("FWT",{description:"Column label of the structure-factor amplitude (type F)"}),phiLabel:h.Text("PHWT",{description:"Column label of the phase in degrees (type P)"}),entryId:h.Text("")};let t=e.data.header.columns.filter(n=>n.type==="F").map(n=>[n.label,n.label]),r=e.data.header.columns.filter(n=>n.type==="P").map(n=>[n.label,n.label]);return{ampLabel:t.length>0?h.Select(t[0][0],t,{description:"Structure-factor amplitude column (type F)"}):h.Text("FWT",{description:"Structure-factor amplitude column label (type F)"}),phiLabel:r.length>0?h.Select(r[0][0],r,{description:"Phase column in degrees (type P)"}):h.Text("PHWT",{description:"Phase column label in degrees (type P)"}),entryId:h.Text("")}}})({apply({a:e,params:t}){return ve.create("Compute volume from MTZ",async r=>{let n=await Oxe(e.data,{ampLabel:t.ampLabel,phiLabel:t.phiLabel,entryId:t.entryId||void 0,label:t.entryId||e.data.name||void 0}).runInContext(r),[o,i,a]=n.grid.cells.space.dimensions,s={label:t.entryId||e.data.name||"Volume",description:`Volume ${o}\xD7${i}\xD7${a}`};return new te.Volume.Data(n,s)})},dispose({b:e}){e?.data.customProperties.dispose()}}),xct=Yt.BuiltIn({name:"assign-color-volume",display:{name:"Assign Color Volume",description:"Assigns another volume to be available for coloring."},from:te.Volume.Data,to:te.Volume.Data,isDecorator:!0,params(e,t){if(!e)return{ref:h.Text()};let r=t.state.data.select(fr.Generators.root.subtree().ofType(te.Volume.Data).filter(n=>!!n.obj&&!n.obj?.data.colorVolume&&n.obj!==e));return r.length===0?{ref:h.Text("",{isHidden:!0})}:{ref:h.Select(r[0].transform.ref,r.map(n=>[n.transform.ref,n.obj.label]))}}})({apply({a:e,params:t,dependencies:r}){return ve.create("Assign Color Volume",async n=>{if(!r||!r[t.ref])throw new Error("Dependency not available.");let o=r[t.ref].data,i={...e.data,colorVolume:o,_localPropertyData:Object.create(null)},a={label:e.label,description:"Volume + Colors"};return new te.Volume.Data(i,a)})},getDependencies:({ref:e})=>e?[e]:[]}),sX=Yt.BuiltIn({name:"volume-transform",display:{name:"Transform Volume"},isDecorator:!0,from:te.Volume.Data,to:te.Volume.Data,params:{transform:Bv}})({canAutoUpdate(){return!1},apply({a:e,params:t}){let r=pv(t.transform)?jr.getBoundingSphere(e.data.grid).center:B.unit,n=fv(t.transform,r),o={kind:"matrix",matrix:Y.mul(Y(),n,jr.getGridToCartesianTransform(e.data.grid))};return new te.Volume.Data({...e.data,grid:{...e.data.grid,transform:o},_localPropertyData:Object.create(null)},{label:e.label,description:`${e.description} [Transformed]`})}}),cX=Yt.BuiltIn({name:"volume-instances",display:{name:"Volume Instances"},isDecorator:!0,from:te.Volume.Data,to:te.Volume.Data,params:{mode:h.Select("transforms",h.arrayToOptions(["transforms","periodicRange"])),transforms:h.ObjectList({transform:Bv},()=>"Transform",{hideIf:e=>e.mode!=="transforms"}),periodicRange:h.Group({min:h.Vec3(B.create(0,0,0),{min:-10,max:10,step:1},{label:"Min",description:"Inclusive lower bound of the translation range (x, y, z)"}),max:h.Vec3(B.create(1,1,1),{min:-10,max:10,step:1},{label:"Max",description:"Exclusive upper bound of the translation range (x, y, z)"})},{hideIf:e=>e.mode!=="periodicRange",isFlat:!0})}})({canAutoUpdate(){return!0},apply({a:e,params:t}){let r=[];if(t.mode==="transforms"){let n=t.transforms.some(o=>pv(o.transform))?jr.getBoundingSphere(e.data.grid).center:B.unit;r=t.transforms.map(o=>({transform:fv(o.transform,n)}))}else if(t.mode==="periodicRange"&&Ze.isPeriodic(e.data)){let n=e.data.grid.cells.space.dimensions,o=jr.getGridToCartesianTransform(e.data.grid),{min:i,max:a}=t.periodicRange,[A,s,c]=i,[l,u,g]=a,m=B();for(let p=A;p<l;p++)for(let d=s;d<u;d++)for(let f=c;f<g;f++)B.set(m,n[0]*p,n[1]*d,n[2]*f),B.transformMat4(m,m,o),r.push({transform:Y.fromTranslation(Y(),m)})}return r.length?new te.Volume.Data({...e.data,instances:r,_localPropertyData:Object.create(null)},{label:e.label,description:`${e.description} [Instanced]`}):e}}),Sct=Yt.BuiltIn({name:"custom-volume-properties",display:{name:"Custom Volume Properties"},isDecorator:!0,from:te.Volume.Data,to:te.Volume.Data,params:(e,t)=>t.customVolumeProperties.getParams(e?.data)})({apply({a:e,params:t},r){return ve.create("Custom Volume Props",async n=>(await zxe(e.data,r,n,t),new te.Volume.Data(e.data,{label:e.label,description:e.description})))},update({a:e,b:t,oldParams:r,newParams:n},o){return ve.create("Custom Volume Props",async i=>{t.data=e.data,t.label=e.label,t.description=e.description;for(let a of r.autoAttach){let A=o.customVolumeProperties.get(a);A&&e.data.customProperties.reference(A.descriptor,!1)}return await zxe(e.data,o,i,n),lt.UpdateResult.Updated})},dispose({b:e}){e?.data.customProperties.dispose()}});async function zxe(e,t,r,n){let o={runtime:r,assetManager:t.managers.asset,errorContext:t.errorContext},{autoAttach:i,properties:a}=n;for(let A of Object.keys(a)){let s=t.customVolumeProperties.get(A),c=a[A];if(i.includes(A)||s.isHidden)try{await s.attach(o,e,c,!0)}catch(l){t.log.warn(`Error attaching volume prop '${A}': ${l}`)}else s.set(e,c)}}var YX={};ki(YX,{ClippingStructureRepresentation3DFromBundle:()=>xgt,ClippingStructureRepresentation3DFromScript:()=>bgt,EmissiveStructureRepresentation3DFromBundle:()=>ygt,EmissiveStructureRepresentation3DFromScript:()=>hgt,ExplodeStructureRepresentation3D:()=>pgt,ModelUnitcell3D:()=>wgt,OverpaintStructureRepresentation3DFromBundle:()=>VX,OverpaintStructureRepresentation3DFromScript:()=>Bgt,ShapeRepresentation3D:()=>Fgt,SpinStructureRepresentation3D:()=>fgt,StructureBoundingBox3D:()=>Rgt,StructureRepresentation3D:()=>Xu,StructureSelectionsAngle3D:()=>Lgt,StructureSelectionsDihedral3D:()=>Tgt,StructureSelectionsDistance3D:()=>Ugt,StructureSelectionsLabel3D:()=>Pgt,StructureSelectionsOrientation3D:()=>Ggt,StructureSelectionsPlane3D:()=>Ngt,SubstanceStructureRepresentation3DFromBundle:()=>Egt,SubstanceStructureRepresentation3DFromScript:()=>Qgt,ThemeStrengthRepresentation3D:()=>vgt,TransparencyStructureRepresentation3DFromBundle:()=>Cgt,TransparencyStructureRepresentation3DFromScript:()=>Igt,UnwindStructureAssemblyRepresentation3D:()=>dgt,VolumeRepresentation3D:()=>_X,VolumeRepresentation3DHelpers:()=>mu,WiggleStructureRepresentation3DFromBundle:()=>Dgt,WiggleStructureRepresentation3DFromScript:()=>Sgt});function Kxe(){if(typeof navigator>"u"||typeof window>"u")return!1;let e=!1;return(function(t){(/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino/i.test(t)||/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i.test(t.substr(0,4)))&&(e=!0)})(navigator.userAgent||navigator.vendor||window.opera),e}function uX(){if(typeof navigator>"u"||typeof window>"u")return!1;let e=/iPad|iPhone|iPod/.test(navigator.userAgent),t=navigator.userAgent.includes("Macintosh"),r=navigator.maxTouchPoints>=4;return!window.MSStream&&(e||t&&r)}function jxe(){if(typeof navigator>"u"||!("xr"in navigator))return!1;let e=navigator.userAgent||"";return/OculusBrowser\//.test(e)||/PicoBrowser\//.test(e)}var Qd;(r=>{function e(){return{updateTransform:!1,updateMatrix:!1,updateColor:!1,updateSize:!1,updateLocation:!1,createGeometry:!1,createNew:!1,info:{}}}r.create=e;function t(n){n.updateTransform=!1,n.updateMatrix=!1,n.updateColor=!1,n.updateSize=!1,n.updateLocation=!1,n.createGeometry=!1,n.createNew=!1}r.reset=t})(Qd||={});var Dct={lowestElementCount:1e6,lowerElementCount:5e5,lowElementCount:1e5,mediumElementCount:2e4,highElementCount:2e3,coarseGrainedFactor:10,elementCountFactor:1};function vct(e){switch(e){case"lowest":return 0;case"lower":return 1;case"low":return 2;case"medium":return 3;case"high":return 4;case"higher":return 5;case"highest":return 6}}function zR(e,t={}){let r={...Dct,...t},n=e.elementCount*r.elementCountFactor;return(e.isCoarseGrained||e.isCoarse)&&(n*=r.coarseGrainedFactor),n>r.lowestElementCount?"lowest":n>r.lowerElementCount?"lower":n>r.lowElementCount?"low":n>r.mediumElementCount?"medium":n>r.highElementCount?"high":"higher"}function Fct(e){if(e.root.models.length===1){let t=Fo.Provider.get(e.root.model);if(t&&t.spacegroup.name==="P 1"&&!Ia.isZero(t.spacegroup.cell))return t.spacegroup.cell.volume}return Ct.volume(e.root.boundary.box)}function KR(e,t){let r=AA(e.quality,"auto"),n=AA(e.detail,1),o=AA(e.radialSegments,12),i=AA(e.linearSegments,8),a=AA(e.resolution,2),A=AA(e.imageResolution,1),s=AA(e.probePositions,12),c=AA(e.doubleSided,!0),l=0;if(r==="auto"){if(t instanceof Ye)r=zR(t.root),l=Fct(t);else if(Ze.is(t)){let[u,g,m]=t.grid.cells.space.dimensions;l=u*g*m,r=l<1e7?"medium":"low"}}if(r!=="custom"&&r!=="auto"){let u=vct(r);switch(jxe()&&(u=Math.max(u-1,0)),u){case 6:n=3,o=36,i=18,a=.1,A=.01,s=72,c=!0;break;case 5:n=3,o=28,i=14,a=.3,A=.05,s=48,c=!0;break;case 4:n=2,o=20,i=10,a=.5,A=.1,s=36,c=!0;break;case 3:n=1,o=12,i=8,a=.8,A=.2,s=24,c=!0;break;case 2:n=0,o=8,i=3,a=1.3,A=.4,s=24,c=!1;break;case 1:n=0,o=4,i=2,a=3,A=.7,s=12,c=!1;break;case 0:n=0,o=2,i=1,a=8,A=1,s=12,c=!1;break}}return l>0&&(a=Math.max(a,l/3e8),a=Math.min(a,20)),e.transparentBackfaces==="off"&&(e.alpha!==void 0&&e.alpha<1||e.xrayShaded)&&(c=!1),{detail:n,radialSegments:o,linearSegments:i,resolution:a,imageResolution:A,probePositions:s,doubleSided:c}}var Ko;(i=>{i.is=hA.has,i.All=63,i.Highlighting=35,i.Selecting=60;function o(a,A){return a===1&&A===2||a===2&&A===1||a===4&&A===8||a===8&&A===4||a===16&&A===16}i.isReverse=o})(Ko||={});function Wxe(e,t,r){e.fill(t,0,r)}function gX(e,t,r){switch(r){case 1:e[t]|=1;break;case 2:e[t]&=-2;break;case 4:e[t]|=2;break;case 8:e[t]&=-3;break;case 16:e[t]^=2;break;case 32:e[t]=0;break}}function NQ(e,t,r){if(r===0)return!1;if(Ue.is(t)){let n=Ue.start(t),o=Ue.end(t),i=n+3>>2,a=i+(o-4*i>>2);if(a<=i){for(let g=n;g<o;++g)gX(e,g,r);return!0}let A=new Uint32Array(e.buffer,0,e.buffer.byteLength>>2),s=n,c=Math.min(4*i,o),l=Math.max(n,4*a),u=o;switch(r){case 1:for(let g=i;g<a;++g)A[g]|=16843009;break;case 2:for(let g=i;g<a;++g)A[g]&=-16843010;break;case 4:for(let g=i;g<a;++g)A[g]|=33686018;break;case 8:for(let g=i;g<a;++g)A[g]&=-33686019;break;case 16:for(let g=i;g<a;++g)A[g]^=33686018;break;case 32:for(let g=i;g<a;++g)A[g]=0;break;default:Or(r)}for(let g=s;g<c;++g)gX(e,g,r);for(let g=l;g<u;++g)gX(e,g,r)}else switch(r){case 1:for(let n=0,o=t.length;n<o;++n)e[t[n]]|=1;break;case 2:for(let n=0,o=t.length;n<o;++n)e[t[n]]&=-2;break;case 4:for(let n=0,o=t.length;n<o;++n)e[t[n]]|=2;break;case 8:for(let n=0,o=t.length;n<o;++n)e[t[n]]&=-3;break;case 16:for(let n=0,o=t.length;n<o;++n)e[t[n]]^=2;break;case 32:for(let n=0,o=t.length;n<o;++n)e[t[n]]=0;break;default:Or(r)}return!0}function Xxe(e,t){let r=-1,n=-1;switch(e){case 1:t===0||t===1?(r=1,n=1):t===2||t===3?(r=1,n=3):r=1;break;case 2:t===0||t===1?(r=0,n=0):(t===2||t===3)&&(r=1,n=2);break;case 4:t===1||t===3?(r=1,n=3):t===0||t===2?(r=1,n=2):r=1;break;case 8:t===1||t===3?(r=1,n=1):(t===0||t===2)&&(r=0,n=0);break;case 16:t===1?(r=1,n=3):t===2?(r=0,n=0):t===3?(r=1,n=1):t===0&&(r=1,n=2);break;case 32:r=0,n=0;break}return{average:r,status:n}}function Zxe(e,t){switch(e){case 1:return .5;case 2:return t===0?0:t===2||t===3?.5:-1;case 4:return .5;case 8:return t===1||t===3?.5:t===0?0:-1;case 16:return t===-1?-1:.5;case 32:return t===-1?-1:t===0?0:.5;case 0:return-1;default:Or(e)}}var Ai;(r=>{r.Null=16777214;function t(n,o){return n.objectId===o.objectId&&n.instanceId===o.instanceId&&n.groupId===o.groupId}r.areSame=t})(Ai||={});var Wk=wct();function wct(){let e=new ArrayBuffer(4),t=new Float32Array(e),r=new Uint32Array(e),n=new Uint32Array(512),o=new Uint32Array(512);for(let s=0;s<256;++s){let c=s-127;c<-27?(n[s]=0,n[s|256]=32768,o[s]=24,o[s|256]=24):c<-14?(n[s]=1024>>-c-14,n[s|256]=1024>>-c-14|32768,o[s]=-c-1,o[s|256]=-c-1):c<=15?(n[s]=c+15<<10,n[s|256]=c+15<<10|32768,o[s]=13,o[s|256]=13):c<128?(n[s]=31744,n[s|256]=64512,o[s]=24,o[s|256]=24):(n[s]=31744,n[s|256]=64512,o[s]=13,o[s|256]=13)}let i=new Uint32Array(2048),a=new Uint32Array(64),A=new Uint32Array(64);for(let s=1;s<1024;++s){let c=s<<13,l=0;for(;(c&8388608)===0;)c<<=1,l-=8388608;c&=-8388609,l+=947912704,i[s]=c|l}for(let s=1024;s<2048;++s)i[s]=939524096+(s-1024<<13);for(let s=1;s<31;++s)a[s]=s<<23;a[31]=1199570944,a[32]=2147483648;for(let s=33;s<63;++s)a[s]=2147483648+(s-32<<23);a[63]=3347054592;for(let s=1;s<64;++s)s!==32&&(A[s]=1024);return{floatView:t,uint32View:r,baseTable:n,shiftTable:o,mantissaTable:i,exponentTable:a,offsetTable:A}}function vp(e){e=$t(e,-65504,65504),Wk.floatView[0]=e;let t=Wk.uint32View[0],r=t>>23&511;return Wk.baseTable[r]+((t&8388607)>>Wk.shiftTable[r])}var Xk=B.set,qxe=B.normalize,$xe=B.sub,eSe=B.addScalar,Zk=B.scale,qk=B.toArray;function qf(e,t,r,n){let o=!1,i=t.grid.cells.data.length;if(Ze.isLoci(e)){if(!Ze.areEquivalent(e.volume,t))return!1;if(Ue.is(e.instances)){let a=Ue.start(e.instances)*i,A=Ue.end(e.instances)*i;n(Ue.ofBounds(a,A))&&(o=!0)}else for(let a=0,A=e.instances.length;a<A;++a){let s=e.instances[a]*i;n(Ue.ofBounds(s,s+i))&&(o=!0)}}else if(Ze.Isosurface.isLoci(e)){if(!Ze.areEquivalent(e.volume,t))return!1;if(r?.isoValue){if(!Ze.IsoValue.areSame(e.isoValue,r.isoValue,t.grid.stats))return!1;if(Ue.is(e.instances)){let a=Ue.start(e.instances)*i,A=Ue.end(e.instances)*i;n(Ue.ofBounds(a,A))&&(o=!0)}else for(let a=0,A=e.instances.length;a<A;++a){let s=e.instances[a]*i;n(Ue.ofBounds(s,s+i))&&(o=!0)}}else{let{stats:a,cells:{data:A}}=t.grid,s=a.sigma,c=Ze.IsoValue.toAbsolute(e.isoValue,a).absoluteValue;for(let l=0,u=A.length;l<u;++l)So(c,A[l],s)&&Ee.forEach(e.instances,g=>{let m=g*i;n(Ue.ofSingleton(m+l))&&(o=!0)})}}else if(Ze.Cell.isLoci(e)){if(!Ze.areEquivalent(e.volume,t))return!1;for(let{indices:a,instances:A}of e.elements)Ue.is(a)?Ee.forEach(A,s=>{let c=s*i;n(Ue.offset(a,c))&&(o=!0)}):Ee.forEach(a,s=>{Ee.forEach(A,c=>{let l=c*i;n(Ue.ofSingleton(l+s))&&(o=!0)})})}else if(Ze.Segment.isLoci(e)){if(!Ze.areEquivalent(e.volume,t))return!1;if(r?.segments)for(let{segments:a,instances:A}of e.elements)Ee.areIntersecting(a,r.segments)&&Ee.forEach(A,s=>{let c=s*i;n(Ue.ofBounds(c,c+i))&&(o=!0)});else{let a=Ze.Segmentation.get(t);if(a){let A=new Set;for(let{segments:s,instances:c}of e.elements){for(let g=0,m=Ee.size(s);g<m;g++){let p=Ee.getAt(s,g);lo.add(A,a.segments.get(p))}let l=Array.from(A.values()),u=t.grid.cells.data;for(let g=0,m=u.length;g<m;++g)if(l.includes(u[g]))for(let p=0,d=Ee.size(c);p<d;p++){let f=p*i;n(Ue.ofSingleton(g+f))&&(o=!0)}}}}}return o}function $f(e,t){let[r,n,o]=e.grid.cells.space.dimensions,i=r*n*o,a=e.instances.length,A=Ze.Cell.Location(e);return rn(i,a,1,(c,l)=>(A.cell=c,A.instance=l,A))}function tSe(e,t,r){let n=r.meta.mapping;if(!n)return $f(e,t);let o=n.cell.length,i=Ze.isPeriodic(e)?1:e.instances.length,a=Ze.Cell.Location(e),A=(c,l)=>(a.cell=c,a.instance=l,a),s=Ze.isPeriodic(e);return rn(o,i,1,A,s)}function Fp(e,t=0){let r=e[0]*e[1]*e[2],n=Math.sqrt(r),o=Math.pow(2,Math.ceil(Math.log(n)/Math.log(2))),i=e[0]+t,a=e[1]+t,A=1,s=i;return o<i*e[2]?(s=Math.floor(o/i),A=Math.ceil(e[2]/s),i*=s,a*=A):i*=e[2],{width:i,height:a,columns:s,rows:A,powerOfTwoSize:a<o?o:o*2}}function $k(e,t,r=0,n="byte"){let{cells:{space:o,data:i},stats:{max:a,min:A}}=e.grid,s=o.dimensions,{dataOffset:c}=o,{width:l,height:u}=Fp(s,r),g=t==="data"?1:4,m=n==="byte"?new Uint8Array(l*u*g):n==="halfFloat"?new Uint16Array(l*u*g):new Float32Array(l*u*g),p={array:m,width:l,height:u},d=a-A,[f,I,C]=s,y=f+r,Q=I+r,E=B(),b=B(),x=f-1,S=I-1,w=C-1;for(let R=0;R<C;++R)for(let T=0;T<I;++T)for(let L=0;L<f;++L){let F=Math.floor(R*y%l/y),v=Math.floor(R*y/l),U=F*y+L,G=g*(v*Q*l+T*l+U),N=c(L,T,R),k;if(n==="byte"?k=Math.round((i[N]-A)/d*255):n==="halfFloat"?k=vp((i[N]-A)/d):k=(i[N]-A)/d,t==="data")m[G]=k;else{if(t==="groups")if(n==="halfFloat"){let J=$t(Math.round(N),0,16777215)+1;m[G+2]=vp(J%256),J=Math.floor(J/256),m[G+1]=vp(J%256),J=Math.floor(J/256),m[G]=vp(J%256)}else od(N,m,G);else Xk(E,i[c(Math.max(0,L-1),T,R)],i[c(L,Math.max(0,T-1),R)],i[c(L,T,Math.max(0,R-1))]),Xk(b,i[c(Math.min(x,L+1),T,R)],i[c(L,Math.min(S,T+1),R)],i[c(L,T,Math.min(w,R+1))]),qxe(E,$xe(E,E,b)),eSe(E,Zk(E,E,.5),.5),n==="byte"?qk(Zk(E,E,255),m,G):n==="halfFloat"?(m[G]=vp(E[0]),m[G+1]=vp(E[1]),m[G+2]=vp(E[2])):qk(E,m,G);m[G+3]=k}}return p}function rSe(e,t="byte"){let{cells:{space:r,data:n},stats:{max:o,min:i}}=e.grid,[a,A,s]=r.dimensions,{dataOffset:c}=r,l=t==="byte"?new Uint8Array(a*A*s*4):t==="halfFloat"?new Uint16Array(a*A*s*4):new Float32Array(a*A*s*4),u={array:l,width:a,height:A,depth:s},g=o-i,m=B(),p=B(),d=a-1,f=A-1,I=s-1,C=0;for(let y=0;y<s;++y)for(let Q=0;Q<A;++Q)for(let E=0;E<a;++E){let b=c(E,Q,y);Xk(m,n[c(Math.max(0,E-1),Q,y)],n[c(E,Math.max(0,Q-1),y)],n[c(E,Q,Math.max(0,y-1))]),Xk(p,n[c(Math.min(d,E+1),Q,y)],n[c(E,Math.min(f,Q+1),y)],n[c(E,Q,Math.min(I,y+1))]),qxe(m,$xe(m,m,p)),eSe(m,Zk(m,m,.5),.5),t==="byte"?(qk(Zk(m,m,255),l,C),l[C+3]=Math.round((n[b]-i)/g*255)):t==="halfFloat"?(l[C]=vp(m[0]),l[C+1]=vp(m[1]),l[C+2]=vp(m[2]),l[C+3]=vp((n[b]-i)/g)):(qk(m,l,C),l[C+3]=(n[b]-i)/g),C+=4}return u}function nSe(e,t,r,n=0){let o=e.grid.cells.data,i=Ct.size(B(),r),a=e.grid.cells.space.dataOffset,{width:A,height:s}=Fp(i,n),c=1,l=new Uint8Array(A*s*c),u={array:l,width:A,height:s},[g,m,p]=i,d=g-1,f=m-1,I=p-1,C=g+n,y=m+n,[Q,E,b]=r.min,[x,S,w]=r.max;for(let R=0;R<p;++R)for(let T=0;T<m;++T)for(let L=0;L<g;++L){let F=Math.floor(R*C%A/C),v=Math.floor(R*C/A),U=F*C+L,G=c*(v*y*A+T*A+U),N=t.includes(o[a(L+Q,T+E,R+b)])?255:0,k=t.includes(o[a(Math.min(d+x,L+1+Q),T+E,R+b)])?255:0,J=t.includes(o[a(Math.max(0,L-1+Q),T+E,R+b)])?255:0,H=t.includes(o[a(L+Q,Math.min(f+S,T+1+E),R+b)])?255:0,z=t.includes(o[a(L+Q,Math.max(0,T-1+E),R+b)])?255:0,_=t.includes(o[a(L+Q,T+E,Math.min(I+w,R+1+b))])?255:0,M=t.includes(o[a(L+Q,T+E,Math.max(0,R-1+b))])?255:0;l[G]=Math.round((N+N+k+J+H+z+_+M)/8)}return u}function eH(e){let{space:t,data:r}=e,{get:n,set:o,add:i,dataOffset:a}=t,[A,s,c]=t.dimensions,l=B.create(A+1,s+1,c+1),d={...t,dimensions:l,get:(f,I,C,y)=>n(f,I%A,C%s,y%c),set:(f,I,C,y,Q)=>o(f,I%A,C%s,y%c,Q),add:(f,I,C,y,Q)=>i(f,I%A,C%s,y%c,Q),dataOffset:(f,I,C)=>a(f%A,I%s,C%c)};return{data:r,space:d}}function oSe(e){let{grid:t}=e,r=jr.getGridToCartesianTransform(t),n={...t,transform:{kind:"matrix",matrix:r},cells:eH(t.cells)};return{...e,grid:n,parent:e}}function mX(e,t,r){let{grid:n}=e,{space:o}=n.cells,{get:i,set:a,add:A,dataOffset:s}=o,[c,l,u]=o.dimensions,g=B.sub(B(),r,t),m=B.create(c*g[0],l*g[1],u*g[2]),C={...o,dimensions:m,get:(S,w,R,T)=>i(S,w%c,R%l,T%u),set:(S,w,R,T,L)=>a(S,w%c,R%l,T%u,L),add:(S,w,R,T,L)=>A(S,w%c,R%l,T%u,L),dataOffset:(S,w,R)=>s(S%c,w%l,R%u)},y=jr.getGridToCartesianTransform(e.grid),Q=Y.getScaling(B(),y);B.mul(Q,Q,o.dimensions);let E=B.mul(B(),t,Q);Y.setTranslation(y,E);let x={...n,transform:{kind:"matrix",matrix:y},cells:{...n.cells,space:C}};return{...e,grid:x,parent:e,instances:[{transform:Y.identity()}]}}function jR(e,t,r,n){let{colorType:o,vertexCount:i,groupCount:a,positionBuffer:A,instanceBuffer:s,transformBuffer:c,groupBuffer:l,itemSize:u}=e,{resolution:g,stride:m}=t,p=o.endsWith("Instance"),d=Ct.fromSphere3D(Ct(),p?e.boundingSphere:e.invariantBoundingSphere),f=1+g,I=Ct.expand(Ct(),d,B.create(f,f,f)),C=1/g,y=Ct.scale(Ct(),I,C),Q=Ct.size(B(),y);B.ceil(Q,Q),B.add(Q,Q,B.create(2,2,2));let{min:E}=I,[b,x]=Q,{width:S,height:w}=Fp(Q),R=new Float32Array(S*w*u),T=new Float32Array(S*w),L=new Uint8Array(S*w*u),F={array:L,width:S,height:w,filter:"linear"},v=p?e.instanceCount:1,U=e.colorData.array;function G(ne,oe,ae){let me=Math.floor(ae*b%S/b),Se=Math.floor(ae*b/S),ee=me*b+ne;return u*(Se*x*S+oe*S+ee)}let N=2,[k,J,H]=Q,z=B();for(let ne=0;ne<v;++ne){let oe=r&&p?s[ne]:ne;for(let ae=0;ae<i;ae+=m){B.fromArray(z,A,ae*3),p&&B.transformMat4Offset(z,z,c,0,0,ne*16),B.sub(z,z,E),B.scale(z,z,C);let[me,Se,ee]=z,O=Math.floor(me),X=Math.floor(Se),Ce=Math.floor(ee),Ne=(oe*a+l[ae])*u,$=Math.max(0,O-N),pe=Math.max(0,X-N),ye=Math.max(0,Ce-N),Be=Math.min(k,O+N+2),De=Math.min(J,X+N+2),Te=Math.min(H,Ce+N+2);for(let be=$;be<Be;++be){let Fe=be-me;for(let Ae=pe;Ae<De;++Ae){let fe=Ae-Se;for(let Qe=ye;Qe<Te;++Qe){let Ie=Qe-ee,le=Math.sqrt(Fe*Fe+fe*fe+Ie*Ie);if(le>N)continue;let Oe=N-le,tt=G(be,Ae,Qe);for(let it=0;it<u;++it)R[tt+it]+=U[Ne+it]*Oe;T[tt/u]+=Oe}}}}}for(let ne=0,oe=T.length;ne<oe;++ne){let ae=ne*u,me=T[ne];for(let Se=0;Se<u;++Se)L[ae+Se]=Math.round(R[ae+Se]/me)}let _=Le.create(S,w),M=lr.create(E[0],E[1],E[2],C),q=p?"volumeInstance":"volume";if(r){if(!n){let ne=u===4?"rgba":u===3?"rgb":"alpha";n=r.resources.texture("image-uint8",ne,"ubyte","linear")}return n.load(F),{kind:"volume",texture:n,gridTexDim:_,gridDim:Q,gridTransform:M,type:q}}else{let ne=WR({vertexCount:i,instanceCount:v,transformBuffer:c,positionBuffer:A,colorType:q,grid:L,gridDim:Q,gridTexDim:_,gridTransform:M,vertexStride:3,colorStride:u,outputStride:u});return{kind:"vertex",texture:ne,texDim:Le.create(ne.width,ne.height),type:p?"vertexInstance":"vertex"}}}function WR(e){let{vertexCount:t,positionBuffer:r,transformBuffer:n,grid:o,gridDim:i,gridTexDim:a,gridTransform:A,vertexStride:s,colorStride:c}=e,l=e.itemOffset||0,u=e.outputStride;if(u+l>c)throw new Error("outputStride + itemOffset must NOT be larger than colorStride");let g=e.colorType.endsWith("Instance"),m=g?e.instanceCount:1,p=Mo(Math.max(1,m*t),u,Uint8Array),{array:d}=p,[f,I]=i,C=a[0],y=B.fromArray(B(),A,0),Q=A[3];function E(R,T,L){let F=Math.floor(L*f%C/f),v=Math.floor(L*f/C),U=F*f+R;return c*(v*I*C+T*C+U)}let b=B(),x=B(),S=B(),w=B();for(let R=0;R<m;++R)for(let T=0;T<t;++T){B.fromArray(b,r,T*s),g&&B.transformMat4Offset(b,b,n,0,0,R*16),B.sub(b,b,y),B.scale(b,b,Q),B.floor(x,b),B.ceil(S,b),B.sub(w,b,x),B.sub(b,S,x),B.div(w,w,b);let[L,F,v]=x,[U,G,N]=S,[k,J,H]=w,z=E(L,F,v)+l,_=E(U,F,v)+l,M=E(L,F,N)+l,q=E(U,F,N)+l,ne=E(L,G,v)+l,oe=E(U,G,v)+l,ae=E(L,G,N)+l,me=E(U,G,N)+l,Se=(R*t+T)*u;for(let ee=0;ee<u;++ee){let O=o[z+ee],X=o[_+ee],Ce=o[M+ee],Ne=o[q+ee],$=o[ne+ee],pe=o[oe+ee],ye=o[ae+ee],Be=o[me+ee],De=ho(O,X,k),Te=ho(Ce,Ne,k),be=ho($,pe,k),Fe=ho(ye,Be,k),Ae=ho(De,be,J),fe=ho(Te,Fe,J);d[Se+ee]=ho(Ae,fe,H)}}return p}function Rct(e){return e==="group"||e==="groupInstance"}function hv(e,t,r,n){if(!Rct(e.dColorType.ref.value))return;let o=jR({vertexCount:e.uVertexCount.ref.value,instanceCount:e.uInstanceCount.ref.value,groupCount:e.uGroupCount.ref.value,transformBuffer:e.aTransform.ref.value,instanceBuffer:e.aInstance.ref.value,positionBuffer:e.aPosition.ref.value,groupBuffer:e.aGroup.ref.value,colorData:e.tColor.ref.value,colorType:e.dColorType.ref.value,boundingSphere:e.boundingSphere.ref.value,invariantBoundingSphere:e.invariantBoundingSphere.ref.value,itemSize:3},t,r,n);o.kind==="volume"?(D.updateIfChanged(e.dColorType,o.type),D.update(e.tColorGrid,o.texture),D.update(e.uColorTexDim,o.gridTexDim),D.update(e.uColorGridDim,o.gridDim),D.update(e.uColorGridTransform,o.gridTransform)):o.kind==="vertex"&&(D.updateIfChanged(e.dColorType,o.type),D.update(e.tColor,o.texture),D.update(e.uColorTexDim,o.texDim))}function Uct(e){return e==="groupInstance"}function iSe(e,t,r,n){if(!Uct(e.dOverpaintType.ref.value))return;let o=jR({vertexCount:e.uVertexCount.ref.value,instanceCount:e.uInstanceCount.ref.value,groupCount:e.uGroupCount.ref.value,transformBuffer:e.aTransform.ref.value,instanceBuffer:e.aInstance.ref.value,positionBuffer:e.aPosition.ref.value,groupBuffer:e.aGroup.ref.value,colorData:e.tOverpaint.ref.value,colorType:e.dOverpaintType.ref.value,boundingSphere:e.boundingSphere.ref.value,invariantBoundingSphere:e.invariantBoundingSphere.ref.value,itemSize:4},t,r,n);o.kind==="volume"?(D.updateIfChanged(e.dOverpaintType,o.type),D.update(e.tOverpaintGrid,o.texture),D.update(e.uOverpaintTexDim,o.gridTexDim),D.update(e.uOverpaintGridDim,o.gridDim),D.update(e.uOverpaintGridTransform,o.gridTransform)):o.kind==="vertex"&&(D.updateIfChanged(e.dOverpaintType,o.type),D.update(e.tOverpaint,o.texture),D.update(e.uOverpaintTexDim,o.texDim))}function Lct(e){return e==="groupInstance"}function aSe(e,t,r,n){if(!Lct(e.dTransparencyType.ref.value))return;let o=jR({vertexCount:e.uVertexCount.ref.value,instanceCount:e.uInstanceCount.ref.value,groupCount:e.uGroupCount.ref.value,transformBuffer:e.aTransform.ref.value,instanceBuffer:e.aInstance.ref.value,positionBuffer:e.aPosition.ref.value,groupBuffer:e.aGroup.ref.value,colorData:e.tTransparency.ref.value,colorType:e.dTransparencyType.ref.value,boundingSphere:e.boundingSphere.ref.value,invariantBoundingSphere:e.invariantBoundingSphere.ref.value,itemSize:1},t,r,n);o.kind==="volume"?(D.updateIfChanged(e.dTransparencyType,o.type),D.update(e.tTransparencyGrid,o.texture),D.update(e.uTransparencyTexDim,o.gridTexDim),D.update(e.uTransparencyGridDim,o.gridDim),D.update(e.uTransparencyGridTransform,o.gridTransform)):o.kind==="vertex"&&(D.updateIfChanged(e.dTransparencyType,o.type),D.update(e.tTransparency,o.texture),D.update(e.uTransparencyTexDim,o.texDim))}function Tct(e){return e==="groupInstance"}function ASe(e,t,r,n){if(!Tct(e.dEmissiveType.ref.value))return;let o=jR({vertexCount:e.uVertexCount.ref.value,instanceCount:e.uInstanceCount.ref.value,groupCount:e.uGroupCount.ref.value,transformBuffer:e.aTransform.ref.value,instanceBuffer:e.aInstance.ref.value,positionBuffer:e.aPosition.ref.value,groupBuffer:e.aGroup.ref.value,colorData:e.tEmissive.ref.value,colorType:e.dEmissiveType.ref.value,boundingSphere:e.boundingSphere.ref.value,invariantBoundingSphere:e.invariantBoundingSphere.ref.value,itemSize:1},t,r,n);o.kind==="volume"?(D.updateIfChanged(e.dEmissiveType,o.type),D.update(e.tEmissiveGrid,o.texture),D.update(e.uEmissiveTexDim,o.gridTexDim),D.update(e.uEmissiveGridDim,o.gridDim),D.update(e.uEmissiveGridTransform,o.gridTransform)):o.kind==="vertex"&&(D.updateIfChanged(e.dEmissiveType,o.type),D.update(e.tEmissive,o.texture),D.update(e.uEmissiveTexDim,o.texDim))}function Pct(e){return e==="groupInstance"}function sSe(e,t,r,n){if(!Pct(e.dSubstanceType.ref.value))return;let o=jR({vertexCount:e.uVertexCount.ref.value,instanceCount:e.uInstanceCount.ref.value,groupCount:e.uGroupCount.ref.value,transformBuffer:e.aTransform.ref.value,instanceBuffer:e.aInstance.ref.value,positionBuffer:e.aPosition.ref.value,groupBuffer:e.aGroup.ref.value,colorData:e.tSubstance.ref.value,colorType:e.dSubstanceType.ref.value,boundingSphere:e.boundingSphere.ref.value,invariantBoundingSphere:e.invariantBoundingSphere.ref.value,itemSize:4},t,r,n);o.kind==="volume"?(D.updateIfChanged(e.dSubstanceType,o.type),D.update(e.tSubstanceGrid,o.texture),D.update(e.uSubstanceTexDim,o.gridTexDim),D.update(e.uSubstanceGridDim,o.gridDim),D.update(e.uSubstanceGridTransform,o.gridTransform)):o.kind==="vertex"&&(D.updateIfChanged(e.dSubstanceType,o.type),D.update(e.tSubstance,o.texture),D.update(e.uSubstanceTexDim,o.texDim))}var cSe=`
|
|
precision highp float;
|
|
precision highp sampler2D;
|
|
|
|
uniform sampler2D tColor;
|
|
uniform sampler2D tCount;
|
|
uniform vec2 uTexSize;
|
|
|
|
void main(void) {
|
|
vec2 coords = gl_FragCoord.xy / uTexSize;
|
|
vec4 color = texture2D(tColor, coords);
|
|
float count = texture2D(tCount, coords).r;
|
|
|
|
gl_FragColor = color / count;
|
|
}
|
|
`;var lSe=`
|
|
precision highp float;
|
|
|
|
varying vec3 vPosition;
|
|
varying vec4 vColor;
|
|
|
|
uniform float uCurrentSlice;
|
|
uniform float uCurrentX;
|
|
uniform float uCurrentY;
|
|
uniform float uResolution;
|
|
|
|
const float p = 2.0;
|
|
|
|
void main() {
|
|
vec2 v = gl_FragCoord.xy - vec2(uCurrentX, uCurrentY) - 0.5;
|
|
vec3 fragPos = vec3(v.x, v.y, uCurrentSlice);
|
|
float dist = distance(fragPos, vPosition);
|
|
if (dist > p) discard;
|
|
|
|
float f = p - dist;
|
|
gl_FragColor = vColor * f;
|
|
gl_FragData[1] = vec4(f);
|
|
}
|
|
`;var uSe=`
|
|
precision highp float;
|
|
|
|
#include common
|
|
#include read_from_texture
|
|
|
|
uniform int uGroupCount;
|
|
|
|
attribute float aSample;
|
|
#define SampleID int(aSample)
|
|
|
|
attribute mat4 aTransform;
|
|
attribute float aInstance;
|
|
|
|
uniform vec2 uGeoTexDim;
|
|
uniform sampler2D tPosition;
|
|
uniform sampler2D tGroup;
|
|
|
|
uniform vec2 uColorTexDim;
|
|
uniform sampler2D tColor;
|
|
|
|
varying vec3 vPosition;
|
|
varying vec4 vColor;
|
|
|
|
uniform vec3 uBboxSize;
|
|
uniform vec3 uBboxMin;
|
|
uniform float uResolution;
|
|
|
|
void main() {
|
|
vec3 position = readFromTexture(tPosition, SampleID, uGeoTexDim).xyz;
|
|
float group = unpackRGBToInt(readFromTexture(tGroup, SampleID, uGeoTexDim).rgb);
|
|
|
|
position = (aTransform * vec4(position, 1.0)).xyz;
|
|
gl_PointSize = 7.0;
|
|
vPosition = (position - uBboxMin) / uResolution;
|
|
gl_Position = vec4(((position - uBboxMin) / uBboxSize) * 2.0 - 1.0, 1.0);
|
|
|
|
#if defined(dColorType_group)
|
|
vColor = readFromTexture(tColor, group, uColorTexDim);
|
|
#elif defined(dColorType_groupInstance)
|
|
vColor = readFromTexture(tColor, aInstance * float(uGroupCount) + group, uColorTexDim);
|
|
#endif
|
|
}
|
|
`;var Gct={drawCount:go("number"),instanceCount:go("number"),stride:go("number"),uGroupCount:Re("i","material"),aTransform:Bo("float32",16,1),aInstance:Bo("float32",1,1),aSample:Bo("float32",1,0),uGeoTexDim:Re("v2","material"),tPosition:Ft("texture","rgba","float","nearest","material"),tGroup:Ft("texture","rgba","float","nearest","material"),uColorTexDim:Re("v2","material"),tColor:Ft("texture","rgba","ubyte","nearest","material"),dColorType:bt("string",["group","groupInstance","vertex","vertexInstance"]),uCurrentSlice:Re("f"),uCurrentX:Re("f"),uCurrentY:Re("f"),uBboxMin:Re("v3","material"),uBboxSize:Re("v3","material"),uResolution:Re("f","material")},Ed="color-accumulate",XR="color-count";function gSe(e,t){let r=new Float32Array(e);for(let n=0;n<e;++n)r[n]=n*t;return r}function Nct(e,t,r,n,o){if(e.namedComputeRenderables[Ed]){let i=B.sub(B(),r.max,r.min),a=e.namedComputeRenderables[Ed].values,A=Math.round(t.vertexCount/o);(A>a.drawCount.ref.value||o!==a.stride.ref.value)&&D.update(a.aSample,gSe(A,o)),D.updateIfChanged(a.drawCount,A),D.updateIfChanged(a.instanceCount,t.instanceCount),D.updateIfChanged(a.stride,o),D.updateIfChanged(a.uGroupCount,t.groupCount),D.update(a.aTransform,t.transformBuffer),D.update(a.aInstance,t.instanceBuffer),D.update(a.uGeoTexDim,Le.set(a.uGeoTexDim.ref.value,t.positionTexture.getWidth(),t.positionTexture.getHeight())),D.update(a.tPosition,t.positionTexture),D.update(a.tGroup,t.groupTexture),D.update(a.uColorTexDim,Le.set(a.uColorTexDim.ref.value,t.colorData.getWidth(),t.colorData.getHeight())),D.update(a.tColor,t.colorData),D.updateIfChanged(a.dColorType,t.colorType),D.updateIfChanged(a.uCurrentSlice,0),D.updateIfChanged(a.uCurrentX,0),D.updateIfChanged(a.uCurrentY,0),D.update(a.uBboxMin,r.min),D.update(a.uBboxSize,i),D.updateIfChanged(a.uResolution,n),e.namedComputeRenderables[Ed].update()}else e.namedComputeRenderables[Ed]=Mct(e,t,r,n,o);return e.namedComputeRenderables[Ed]}function Mct(e,t,r,n,o){let i=B.sub(B(),r.max,r.min),a=Math.round(t.vertexCount/o),A={drawCount:D.create(a),instanceCount:D.create(t.instanceCount),stride:D.create(o),uGroupCount:D.create(t.groupCount),aTransform:D.create(t.transformBuffer),aInstance:D.create(t.instanceBuffer),aSample:D.create(gSe(a,o)),uGeoTexDim:D.create(Le.create(t.positionTexture.getWidth(),t.positionTexture.getHeight())),tPosition:D.create(t.positionTexture),tGroup:D.create(t.groupTexture),uColorTexDim:D.create(Le.create(t.colorData.getWidth(),t.colorData.getHeight())),tColor:D.create(t.colorData),dColorType:D.create(t.colorType),uCurrentSlice:D.create(0),uCurrentX:D.create(0),uCurrentY:D.create(0),uBboxMin:D.create(r.min),uBboxSize:D.create(i),uResolution:D.create(n)},s={...Gct},c=Cn("accumulate",uSe,lSe,{drawBuffers:"required"}),l=Un(e,"points",c,s,A);return Ln(l,A)}function kct(e){let{gl:t,state:r}=e;r.disable(t.CULL_FACE),r.enable(t.BLEND),r.disable(t.DEPTH_TEST),r.enable(t.SCISSOR_TEST),r.depthMask(!1),r.clearColor(0,0,0,0),r.blendFunc(t.ONE,t.ONE),r.blendEquation(t.FUNC_ADD)}var Hct={...Wn,tColor:Ft("texture","rgba","float","nearest"),tCount:Ft("texture","alpha","float","nearest"),uTexSize:Re("v2")},ZR="color-normalize";function Vct(e,t,r){if(e.namedComputeRenderables[ZR]){let n=e.namedComputeRenderables[ZR].values;D.update(n.tColor,t),D.update(n.tCount,r),D.update(n.uTexSize,Le.set(n.uTexSize.ref.value,t.getWidth(),t.getHeight())),e.namedComputeRenderables[ZR].update()}else e.namedComputeRenderables[ZR]=_ct(e,t,r);return e.namedComputeRenderables[ZR]}function _ct(e,t,r){let n={...Xn,tColor:D.create(t),tCount:D.create(r),uTexSize:D.create(Le.create(t.getWidth(),t.getHeight()))},o={...Hct},i=Cn("normalize",mo,cSe),a=Un(e,"triangles",i,o,n);return Ln(a,n)}function Yct(e){let{gl:t,state:r}=e;r.disable(t.CULL_FACE),r.enable(t.BLEND),r.disable(t.DEPTH_TEST),r.enable(t.SCISSOR_TEST),r.depthMask(!1),r.clearColor(0,0,0,0),r.blendFunc(t.ONE,t.ONE),r.blendEquation(t.FUNC_ADD)}function Oct(e){let t=e[0]*e[1]*e[2],r=Math.sqrt(t),n=Math.pow(2,Math.ceil(Math.log(r)/Math.log(2))),o=0,i=e[1],a=1,A=e[2];return n<e[0]*e[2]?(A=Math.floor(n/e[0]),a=Math.ceil(e[2]/A),o=A*e[0],i*=a):o=e[0]*e[2],{texDimX:o,texDimY:i,texRows:a,texCols:A,powerOfTwoSize:i<n?n:n*2}}function qR(e,t,r,n){let{drawBuffers:o}=r.extensions;if(!o)throw new Error("need WebGL draw buffers");at&&r.timer.mark("calcTextureMeshColorSmoothing");let{gl:i,resources:a,state:A,extensions:{colorBufferHalfFloat:s,textureHalfFloat:c}}=r,{resolution:l,stride:u}=t,g=e.colorType.endsWith("Instance"),m=Ct.fromSphere3D(Ct(),g?e.boundingSphere:e.invariantBoundingSphere),p=1+l,d=Ct.expand(Ct(),m,B.create(p,p,p));g||(e.instanceCount=1,e.instanceBuffer=new Float32Array([0]),e.transformBuffer=new Float32Array(Y.id));let f=1/l,I=Ct.scale(Ct(),d,f),C=Ct.size(B(),I);B.ceil(C,C),B.add(C,C,B.create(2,2,2));let{min:y}=d,[Q,E,b]=C,{texDimX:x,texDimY:S,texCols:w}=Oct(C);r.namedFramebuffers[Ed]||(r.namedFramebuffers[Ed]=r.resources.framebuffer());let R=r.namedFramebuffers[Ed];mr(i)?(r.namedTextures[Ed]||(r.namedTextures[Ed]=s&&c?a.texture("image-float16","rgba","fp16","nearest"):a.texture("image-float32","rgba","float","nearest")),r.namedTextures[XR]||(r.namedTextures[XR]=a.texture("image-float32","alpha","float","nearest"))):(r.namedTextures[Ed]||(r.namedTextures[Ed]=a.texture("image-float32","rgba","float","nearest")),r.namedTextures[XR]||(r.namedTextures[XR]=a.texture("image-float32","rgba","float","nearest")));let T=r.namedTextures[Ed],L=r.namedTextures[XR];T.define(x,S),L.define(x,S),T.attachFramebuffer(R,0),L.attachFramebuffer(R,1);let F=Nct(r,e,d,l,u);A.currentRenderItemId=-1,R.bind(),o.drawBuffers([o.COLOR_ATTACHMENT0,o.COLOR_ATTACHMENT1]);let{uCurrentSlice:v,uCurrentX:U,uCurrentY:G}=F.values;at&&r.timer.mark("ColorAccumulate.render"),kct(r),A.viewport(0,0,x,S),A.scissor(0,0,x,S),i.clear(i.COLOR_BUFFER_BIT),D.update(G,0);let N=0,k=0,J=0;for(let M=0;M<b;++M)N>=w&&(N-=w,k+=E,J=0,D.update(G,k)),D.update(U,J),D.update(v,M),A.viewport(J,k,Q,E),A.scissor(J,k,Q,E),F.render(),++N,J+=Q;T.detachFramebuffer(R,0),L.detachFramebuffer(R,1),o.drawBuffers([i.COLOR_ATTACHMENT0,i.NONE]),at&&r.timer.markEnd("ColorAccumulate.render"),at&&r.timer.mark("ColorNormalize.render"),(!n||tCe(n))&&(n=a.texture("image-uint8","rgba","ubyte","linear")),n.define(x,S);let H=Vct(r,T,L);A.currentRenderItemId=-1,Yct(r),n.attachFramebuffer(R,0),A.viewport(0,0,x,S),A.scissor(0,0,x,S),i.clear(i.COLOR_BUFFER_BIT),H.render(),at&&r.timer.markEnd("ColorNormalize.render");let z=lr.create(y[0],y[1],y[2],f),_=g?"volumeInstance":"volume";return at&&r.timer.markEnd("calcTextureMeshColorSmoothing"),{texture:n,gridDim:C,gridTexDim:Le.create(x,S),gridTransform:z,type:_}}var dX="color-smoothing-rgb",yv="color-smoothing-rgba",Qv="color-smoothing-alpha";function Jct(e){return e==="group"||e==="groupInstance"}function pX(e,t,r,n){if(!Jct(e.dColorType.ref.value))return;t={...t,stride:t.stride*3},r.namedTextures[dX]||(r.namedTextures[dX]=r.resources.texture("image-uint8","rgb","ubyte","nearest"));let o=r.namedTextures[dX];o.load(e.tColor.ref.value);let i=qR({vertexCount:e.uVertexCount.ref.value,instanceCount:e.uInstanceCount.ref.value,groupCount:e.uGroupCount.ref.value,transformBuffer:e.aTransform.ref.value,instanceBuffer:e.aInstance.ref.value,positionTexture:e.tPosition.ref.value,groupTexture:e.tGroup.ref.value,colorData:o,colorType:e.dColorType.ref.value,boundingSphere:e.boundingSphere.ref.value,invariantBoundingSphere:e.invariantBoundingSphere.ref.value},t,r,n);D.updateIfChanged(e.dColorType,i.type),D.update(e.tColorGrid,i.texture),D.update(e.uColorTexDim,i.gridTexDim),D.update(e.uColorGridDim,i.gridDim),D.update(e.uColorGridTransform,i.gridTransform)}function zct(e){return e==="groupInstance"}function mSe(e,t,r,n){if(!zct(e.dOverpaintType.ref.value))return;t={...t,stride:t.stride*3},r.namedTextures[yv]||(r.namedTextures[yv]=r.resources.texture("image-uint8","rgba","ubyte","nearest"));let o=r.namedTextures[yv];o.load(e.tOverpaint.ref.value);let i=qR({vertexCount:e.uVertexCount.ref.value,instanceCount:e.uInstanceCount.ref.value,groupCount:e.uGroupCount.ref.value,transformBuffer:e.aTransform.ref.value,instanceBuffer:e.aInstance.ref.value,positionTexture:e.tPosition.ref.value,groupTexture:e.tGroup.ref.value,colorData:o,colorType:e.dOverpaintType.ref.value,boundingSphere:e.boundingSphere.ref.value,invariantBoundingSphere:e.invariantBoundingSphere.ref.value},t,r,n);D.updateIfChanged(e.dOverpaintType,i.type),D.update(e.tOverpaintGrid,i.texture),D.update(e.uOverpaintTexDim,i.gridTexDim),D.update(e.uOverpaintGridDim,i.gridDim),D.update(e.uOverpaintGridTransform,i.gridTransform)}function Kct(e){return e==="groupInstance"}function dSe(e,t,r,n){if(!Kct(e.dTransparencyType.ref.value))return;t={...t,stride:t.stride*3},r.namedTextures[Qv]||(r.namedTextures[Qv]=r.resources.texture("image-uint8","alpha","ubyte","nearest"));let o=r.namedTextures[Qv];o.load(e.tTransparency.ref.value);let i=qR({vertexCount:e.uVertexCount.ref.value,instanceCount:e.uInstanceCount.ref.value,groupCount:e.uGroupCount.ref.value,transformBuffer:e.aTransform.ref.value,instanceBuffer:e.aInstance.ref.value,positionTexture:e.tPosition.ref.value,groupTexture:e.tGroup.ref.value,colorData:o,colorType:e.dTransparencyType.ref.value,boundingSphere:e.boundingSphere.ref.value,invariantBoundingSphere:e.invariantBoundingSphere.ref.value},t,r,n);D.updateIfChanged(e.dTransparencyType,i.type),D.update(e.tTransparencyGrid,i.texture),D.update(e.uTransparencyTexDim,i.gridTexDim),D.update(e.uTransparencyGridDim,i.gridDim),D.update(e.uTransparencyGridTransform,i.gridTransform)}function jct(e){return e==="groupInstance"}function pSe(e,t,r,n){if(!jct(e.dEmissiveType.ref.value))return;t={...t,stride:t.stride*3},r.namedTextures[Qv]||(r.namedTextures[Qv]=r.resources.texture("image-uint8","alpha","ubyte","nearest"));let o=r.namedTextures[Qv];o.load(e.tEmissive.ref.value);let i=qR({vertexCount:e.uVertexCount.ref.value,instanceCount:e.uInstanceCount.ref.value,groupCount:e.uGroupCount.ref.value,transformBuffer:e.aTransform.ref.value,instanceBuffer:e.aInstance.ref.value,positionTexture:e.tPosition.ref.value,groupTexture:e.tGroup.ref.value,colorData:o,colorType:e.dEmissiveType.ref.value,boundingSphere:e.boundingSphere.ref.value,invariantBoundingSphere:e.invariantBoundingSphere.ref.value},t,r,n);D.updateIfChanged(e.dEmissiveType,i.type),D.update(e.tEmissiveGrid,i.texture),D.update(e.uEmissiveTexDim,i.gridTexDim),D.update(e.uEmissiveGridDim,i.gridDim),D.update(e.uEmissiveGridTransform,i.gridTransform)}function Wct(e){return e==="groupInstance"}function fSe(e,t,r,n){if(!Wct(e.dSubstanceType.ref.value))return;t={...t,stride:t.stride*3},r.namedTextures[yv]||(r.namedTextures[yv]=r.resources.texture("image-uint8","rgba","ubyte","nearest"));let o=r.namedTextures[yv];o.load(e.tSubstance.ref.value);let i=qR({vertexCount:e.uVertexCount.ref.value,instanceCount:e.uInstanceCount.ref.value,groupCount:e.uGroupCount.ref.value,transformBuffer:e.aTransform.ref.value,instanceBuffer:e.aInstance.ref.value,positionTexture:e.tPosition.ref.value,groupTexture:e.tGroup.ref.value,colorData:o,colorType:e.dSubstanceType.ref.value,boundingSphere:e.boundingSphere.ref.value,invariantBoundingSphere:e.invariantBoundingSphere.ref.value},t,r,n);D.updateIfChanged(e.dSubstanceType,i.type),D.update(e.tSubstanceGrid,i.texture),D.update(e.uSubstanceTexDim,i.gridTexDim),D.update(e.uSubstanceGridDim,i.gridDim),D.update(e.uSubstanceGridTransform,i.gridTransform)}var Qn;(m=>{function e(p,d){p&&(p.state.visible=d)}m.setVisibility=e;function t(p,d){p&&(p.state.alphaFactor=d)}m.setAlphaFactor=t;function r(p,d){p&&(p.state.pickable=d)}m.setPickable=r;function n(p,d){p&&(p.state.colorOnly=d)}m.setColorOnly=n;function o(p,d,f,I,C){if(!p||ga(d))return!1;let{tMarker:y,uMarker:Q,markerAverage:E,markerStatus:b,uGroupCount:x,instanceCount:S,instanceGranularity:w}=p.values,R=w.ref.value?S.ref.value:x.ref.value*S.ref.value,{array:T}=y.ref.value,L=b.ref.value;if(!uA(d)){let G=0;if(I(d,N=>(G+=Ue.size(N),!0),!0),G===0)return!1;G===R&&(d=Bp)}let F=!1,v=-1,U=-1;if(uA(d)){let G=Xxe(f,L);G.status!==-1?(F=L!==G.status,F&&Wxe(T,G.status,R)):F=NQ(T,Ue.ofLength(R),f),v=G.average,U=G.status}else F=I(d,G=>NQ(T,G,f),!0),F&&(v=Zxe(f,L),C&&C.status!==-1&&v===-1&&Ko.isReverse(C.action,f)&&pr.areEqual(d,C.loci)&&(U=C.status,v=U===0?0:.5));return F&&(v===-1&&(v=Hpe(T,R),v===0&&(U=0)),C&&(C.action=f,C.loci=d,C.status=L),D.updateIfChanged(Q,U),U===-1&&D.update(y,y.ref.value),D.updateIfChanged(E,v),D.updateIfChanged(b,U)),F}m.mark=o;function i(p,d,f,I,C){if(!p)return;let{tOverpaint:y,dOverpaintType:Q,dOverpaint:E,uGroupCount:b,instanceCount:x,instanceGranularity:S}=p.values,w=S.ref.value?x.ref.value:b.ref.value*x.ref.value,R=S.ref.value?"instance":"groupInstance";dCe(d.layers.length?w:0,R,p.values);let{array:T}=y.ref.value;I&&h9(T,0,w);for(let L=0,F=d.layers.length;L<F;++L){let{loci:v,color:U,clear:G}=d.layers[L];f(v,k=>{let J=Ue.start(k),H=Ue.end(k);return G?h9(T,J,H):mCe(T,J,H,U)},!1)}if(D.update(y,y.ref.value),D.updateIfChanged(Q,R),D.updateIfChanged(E,d.layers.length>0),d.layers.length!==0&&R!=="instance"&&C&&pm(C.props)){let{geometry:L,props:F,webgl:v}=C;if(L.kind==="mesh"){let{resolution:U,overpaintTexture:G}=L.meta,N=cu(F.smoothColors,!0,U);N&&(iSe(p.values,N,v,G),L.meta.overpaintTexture=p.values.tOverpaintGrid.ref.value)}else if(v&&L.kind==="texture-mesh"){let{resolution:U,overpaintTexture:G}=L.meta,N=cu(F.smoothColors,!0,U);N&&(mSe(p.values,N,v,G),L.meta.overpaintTexture=p.values.tOverpaintGrid.ref.value)}}}m.setOverpaint=i;function a(p,d,f,I,C){if(!p)return;let{tTransparency:y,dTransparencyType:Q,transparencyAverage:E,transparencyMin:b,dTransparency:x,uGroupCount:S,instanceCount:w,instanceGranularity:R}=p.values,T=R.ref.value?w.ref.value:S.ref.value*w.ref.value,L=R.ref.value?"instance":"groupInstance";ICe(d.layers.length?T:0,L,p.values);let{array:F}=y.ref.value;I&&BCe(F,0,T);for(let v=0,U=d.layers.length;v<U;++v){let{loci:G,value:N}=d.layers[v];f(G,J=>{let H=Ue.start(J),z=Ue.end(J);return fCe(F,H,z,N)},!1)}if(D.update(y,y.ref.value),D.updateIfChanged(E,y9(F,T)),D.updateIfChanged(b,Q9(F,T)),D.updateIfChanged(Q,L),D.updateIfChanged(x,d.layers.length>0),d.layers.length!==0&&L!=="instance"&&C&&pm(C.props)){let{geometry:v,props:U,webgl:G}=C;if(v.kind==="mesh"){let{resolution:N,transparencyTexture:k}=v.meta,J=cu(U.smoothColors,!0,N);J&&(aSe(p.values,J,G,k),v.meta.transparencyTexture=p.values.tTransparencyGrid.ref.value)}else if(G&&v.kind==="texture-mesh"){let{resolution:N,transparencyTexture:k}=v.meta,J=cu(U.smoothColors,!0,N);J&&(dSe(p.values,J,G,k),v.meta.transparencyTexture=p.values.tTransparencyGrid.ref.value)}}}m.setTransparency=a;function A(p,d,f,I,C){if(!p)return;let{tEmissive:y,dEmissiveType:Q,emissiveAverage:E,dEmissive:b,uGroupCount:x,instanceCount:S,instanceGranularity:w}=p.values,R=w.ref.value?S.ref.value:x.ref.value*S.ref.value,T=w.ref.value?"instance":"groupInstance";FCe(d.layers.length?R:0,T,p.values);let{array:L}=y.ref.value;I&&vCe(L,0,R);for(let F=0,v=d.layers.length;F<v;++F){let{loci:U,value:G}=d.layers[F];f(U,k=>{let J=Ue.start(k),H=Ue.end(k);return DCe(L,J,H,G)},!1)}if(D.update(y,y.ref.value),D.updateIfChanged(E,b9(L,R)),D.updateIfChanged(Q,T),D.updateIfChanged(b,d.layers.length>0),d.layers.length!==0&&T!=="instance"&&C&&pm(C.props)){let{geometry:F,props:v,webgl:U}=C;if(F.kind==="mesh"){let{resolution:G,emissiveTexture:N}=F.meta,k=cu(v.smoothColors,!0,G);k&&(ASe(p.values,k,U,N),F.meta.emissiveTexture=p.values.tEmissiveGrid.ref.value)}else if(U&&F.kind==="texture-mesh"){let{resolution:G,emissiveTexture:N}=F.meta,k=cu(v.smoothColors,!0,G);k&&(pSe(p.values,k,U,N),F.meta.emissiveTexture=p.values.tEmissiveGrid.ref.value)}}}m.setEmissive=A;function s(p,d,f,I,C){if(!p)return;let{tSubstance:y,dSubstanceType:Q,dSubstance:E,uGroupCount:b,instanceCount:x,instanceGranularity:S}=p.values,w=S.ref.value?x.ref.value:b.ref.value*x.ref.value,R=S.ref.value?"instance":"groupInstance";xCe(d.layers.length?w:0,R,p.values);let{array:T}=y.ref.value;I&&E9(T,0,w);for(let L=0,F=d.layers.length;L<F;++L){let{loci:v,material:U,clear:G}=d.layers[L];f(v,k=>{let J=Ue.start(k),H=Ue.end(k);return G?E9(T,J,H):bCe(T,J,H,U)},!1)}if(D.update(y,y.ref.value),D.updateIfChanged(Q,R),D.updateIfChanged(E,d.layers.length>0),d.layers.length!==0&&R!=="instance"&&C&&pm(C.props)){let{geometry:L,props:F,webgl:v}=C;if(L.kind==="mesh"){let{resolution:U,substanceTexture:G}=L.meta,N=cu(F.smoothColors,!0,U);N&&(sSe(p.values,N,v,G),L.meta.substanceTexture=p.values.tSubstanceGrid.ref.value)}else if(v&&L.kind==="texture-mesh"){let{resolution:U,substanceTexture:G}=L.meta,N=cu(F.smoothColors,!0,U);N&&(fSe(p.values,N,v,G),L.meta.substanceTexture=p.values.tSubstanceGrid.ref.value)}}}m.setSubstance=s;function c(p,d,f,I){if(!p)return;let{tClipping:C,dClippingType:y,dClipping:Q,uGroupCount:E,instanceCount:b,instanceGranularity:x}=p.values,S=x.ref.value?b.ref.value:E.ref.value*b.ref.value,{layers:w}=d,R=x.ref.value?"instance":"groupInstance";QCe(w.length?S:0,R,p.values);let{array:T}=C.ref.value;I&&yCe(T,0,S);for(let L=0,F=d.layers.length;L<F;++L){let{loci:v,groups:U}=d.layers[L];f(v,N=>{let k=Ue.start(N),J=Ue.end(N);return hCe(T,k,J,U)},!1)}D.update(C,C.ref.value),D.updateIfChanged(y,R),D.updateIfChanged(Q,d.layers.length>0)}m.setClipping=c;function l(p,d,f,I){if(!p)return;let{tWiggle:C,dWiggleType:y,wiggleAverage:Q,dWiggle:E,uGroupCount:b,instanceCount:x,instanceGranularity:S}=p.values,w=S.ref.value?x.ref.value:b.ref.value*x.ref.value,R=S.ref.value?"instance":"groupInstance";LCe(d.layers.length?w:0,R,p.values);let{array:T}=C.ref.value;I&&UCe(T,0,w);for(let L=0,F=d.layers.length;L<F;++L){let{loci:v,value:U}=d.layers[L];f(v,N=>{let k=Ue.start(N),J=Ue.end(N);return RCe(T,k,J,U)},!1)}D.update(C,C.ref.value),D.updateIfChanged(Q,x9(T,w)),D.updateIfChanged(y,R),D.updateIfChanged(E,d.layers.length>0)}m.setWiggle=l;function u(p,d){p&&(D.updateIfChanged(p.values.uOverpaintStrength,d.overpaint),D.updateIfChanged(p.values.uTransparencyStrength,d.transparency),D.updateIfChanged(p.values.uEmissiveStrength,d.emissive),D.updateIfChanged(p.values.uSubstanceStrength,d.substance),D.updateIfChanged(p.values.uWiggleStrength,d.wiggle))}m.setThemeStrength=u;function g(p,d,f){if(!p||!d&&!f)return;let{values:I}=p;d&&(Y.copy(I.matrix.ref.value,d),D.update(I.matrix,I.matrix.ref.value)),f?(I.extraTransform.ref.value.set(f),D.update(I.extraTransform,I.extraTransform.ref.value),D.updateIfChanged(I.hasExtraTransform,!0)):f===null&&D.updateIfChanged(I.hasExtraTransform,!1),C9(I,I.invariantBoundingSphere.ref.value,I.instanceGrid.ref.value.cellSize,I.instanceGrid.ref.value.batchSize);let C=Ta(I.invariantBoundingSphere.ref.value,I.transform.ref.value,I.instanceCount.ref.value,0);D.update(I.boundingSphere,C)}m.setTransform=g})(Qn||={});function yi(e,t,r={}){let n=0,o=new Jn,i=Xt.createState(),a=FA(),A=[],s,c,l=-1,u=Gi.createEmpty(),g=t.Params,m=h.getDefaultValues(g),p,d;r.modifyState&&Xt.updateState(i,r.modifyState(i));let f=Qd.create();function I(E={},b){Qd.reset(f),!(!b&&!c)&&(b&&!c?f.createNew=!0:b&&c&&b.id===c.id||(b&&c&&b.id!==c.id?(f.updateTransform=!0,f.createGeometry=!0):b&&console.warn("unexpected state")),E.instanceGranularity!==m.instanceGranularity&&(f.updateTransform=!0),f.updateTransform&&(f.updateColor=!0,f.updateSize=!0,f.updateMatrix=!0),f.createGeometry&&(f.updateColor=!0,f.updateSize=!0))}function C(E={},b){return r.modifyProps&&(E=r.modifyProps(E)),ve.create("ShapeRepresentation.create",async x=>{let S=Object.assign(m,E),w=b?await e(x,b,S,c):void 0;if(I(E,w),w&&(c=w,Object.assign(u,Mr.getTheme(c))),f.createNew){A.length=0,p=Mr.groupIterator(c);let R=Mr.createTransform(c.transforms,c.geometry.boundingSphere,S.cellSize,S.batchSize),T=t.createValues(c.geometry,R,p,u,S),L=t.createRenderableState(S);r.modifyState&&Object.assign(L,r.modifyState(L)),Xt.updateState(i,L),s=$s(c.geometry.kind,T,L,a),s&&A.push(s),d=t.createPositionIterator(c.geometry,s.values)}else{if(!s)throw new Error("expected renderObject to be available");if(f.updateTransform){p=Mr.groupIterator(c);let{instanceCount:R,groupCount:T}=p;vi(S.instanceGranularity,T,R)?ei(R,"instance",s.values):ei(R*T,"groupInstance",s.values)}f.updateMatrix&&(Mr.createTransform(c.transforms,c.geometry.boundingSphere,S.cellSize,S.batchSize,s.values),"lodLevels"in s.values&&D.update(s.values.lodLevels,s.values.lodLevels.ref.value)),f.createGeometry&&(D.updateIfChanged(s.values.drawCount,lA.getDrawCount(c.geometry)),D.updateIfChanged(s.values.uVertexCount,lA.getVertexCount(c.geometry)),D.updateIfChanged(s.values.uGroupCount,p.groupCount)),f.updateColor&&cA(p,d,u.color,s.values),f.updateSize&&"uSize"in s.values&&hl(p,d,u.size,s.values),t.updateValues(s.values,S),t.updateRenderableState(s.state,S),(f.updateTransform||f.createGeometry)&&(t.updateBoundingSphere(s.values,c.geometry),d=t.createPositionIterator(c.geometry,s.values))}m=S,(f.createGeometry||f.createNew)&&(l+=1),o.next(n++)})}function y(E,b,x){let S=!1;if(!OA.isLoci(E)||OA.isLociEmpty(E)||E.shape!==b)return!1;for(let w of E.groups)x(Ue.ofSingleton(w.instance))&&(S=!0);return S}function Q(E,b){let x=vi(m.instanceGranularity,c.groupCount,c.transforms.length);return uA(E)||Mr.isLoci(E)&&E.shape===c?b(x?Ue.ofBounds(0,c.transforms.length):Ue.ofBounds(0,c.groupCount*c.transforms.length)):x?y(E,c,b):Xct(E,c,b)}return{label:"Shape geometry",get groupCount(){return p?p.count:0},get props(){return m},get params(){return g},get state(){return i},get theme(){return u},renderObjects:A,get geometryVersion(){return l},updated:o,createOrUpdate:C,getLoci(E){let{objectId:b,groupId:x,instanceId:S}=E;if(s&&s.id===b){let w=vi(m.instanceGranularity,c.groupCount,c.transforms.length);return x===Ai.Null||w?Mr.Loci(c):OA.Loci(c,[{ids:Ee.ofSingleton(x),instance:S}])}return Ir},getAllLoci(){return[Mr.Loci(c)]},eachLocation:E=>{for(p.reset();p.hasNext;){let{location:b,isSecondary:x}=p.move();E(b,x)}},mark(E,b){if(!Ko.is(i.markerActions,b))return!1;if(OA.isLoci(E)||Mr.isLoci(E)){if(E.shape!==c)return!1}else if(!uA(E))return!1;return Qn.mark(s,E,b,Q)},setState(E){r.modifyState&&(E=r.modifyState(E)),s&&(E.visible!==void 0&&Qn.setVisibility(s,E.visible),E.alphaFactor!==void 0&&Qn.setAlphaFactor(s,E.alphaFactor),E.pickable!==void 0&&Qn.setPickable(s,E.pickable),E.colorOnly!==void 0&&Qn.setColorOnly(s,E.colorOnly),E.overpaint!==void 0&&Qn.setOverpaint(s,E.overpaint,Q,!0),E.transparency!==void 0&&Qn.setTransparency(s,E.transparency,Q,!0),E.substance!==void 0&&Qn.setSubstance(s,E.substance,Q,!0),E.transform!==void 0&&Qn.setTransform(s,E.transform)),Xt.updateState(i,E)},setTheme(E){ir&&console.warn("The `ShapeRepresentation` theme is fixed to `ShapeGroupColorTheme` and `ShapeGroupSizeTheme`. Colors are taken from `Shape.getColor` and sizes from `Shape.getSize`")},destroy(){A.length=0,s&&(s.state.disposed=!0,s=void 0)}}}function Xct(e,t,r){if(!OA.isLoci(e)||e.shape!==t)return!1;let n=!1,{groupCount:o}=t,{groups:i}=e;for(let{ids:a,instance:A}of i)if(Ue.is(a)){let s=A*o+Ue.start(a),c=A*o+Ue.end(a);r(Ue.ofBounds(s,c))&&(n=!0)}else for(let s=0,c=a.length;s<c;s++){let l=A*o+a[s];r(Ue.ofSingleton(l))&&(n=!0)}return n}var BSe=Y(),Gh=class{constructor(t){this.structure=t;this.groupUnitTransforms=[];this.unitOffsetMap=_c.Mutable();this.groupIndexMap=new Map;this._isIdentity=void 0;this.version=0;this.unitTransforms=new Float32Array(t.units.length*16),this.size=t.units.length,this.reset();let r=0;for(let n=0,o=t.unitSymmetryGroups.length;n<o;++n){let i=t.unitSymmetryGroups[n];this.groupIndexMap.set(i,n);let a=this.unitTransforms.subarray(r,r+i.units.length*16);this.groupUnitTransforms.push(a);for(let A=0,s=i.units.length;A<s;++A)this.unitOffsetMap.set(i.units[A].id,r+A*16);r+=i.units.length*16}}reset(){this.version=0,ACe(this.unitTransforms,this.size),this._isIdentity=!0}get isIdentity(){if(this._isIdentity===void 0){this._isIdentity=!0;for(let t=0,r=this.size*16;t<r;t+=16)if(Y.fromArray(BSe,this.unitTransforms,t),!Y.isIdentity(BSe)){this._isIdentity=!1;break}}return this._isIdentity}setTransform(t,r){this.version=(this.version+1)%2147483647,Y.toArray(t,this.unitTransforms,this.unitOffsetMap.get(r.id)),this._isIdentity=void 0}getTransform(t,r){return Y.fromArray(t,this.unitTransforms,this.unitOffsetMap.get(r.id))}getSymmetryGroupTransforms(t){return this.groupUnitTransforms[this.groupIndexMap.get(t)]}};var ISe=Y();function fX(e,t,r){for(let n=0,o=e.units.length;n<o;n++){let i=e.units[n];Go.lerpFromIdentity(ISe,i.conformation.operator,r),t.setTransform(ISe,i)}}var CSe=B(),Ev=B(),rH=Y();function BX(e,t,r,n){let o=n.radius*r;for(let i=0,a=e.units.length;i<a;i++){let A=e.units[i];B.transformMat4(CSe,A.lookup3d.boundary.sphere.center,A.conformation.operator.matrix),B.sub(Ev,CSe,n.center),B.setMagnitude(Ev,Ev,o),Y.fromTranslation(rH,Ev),t.setTransform(rH,A)}}var QSe={axis:h.MappedStatic("custom",{structure:h.Group({principalAxis:h.Select("dirA",[["dirA","A"],["dirB","B"],["dirC","C"]])}),custom:h.Group({vector:h.Vec3(B.create(0,0,1))})}),origin:h.MappedStatic("structure",{structure:h.Group({}),custom:h.Group({vector:h.Vec3(B.create(0,0,0))})})};function IX(e,t){let r,n;return t.axis.name==="custom"?r=t.axis.params.vector:r=Ye.getPrincipalAxes(e).momentsAxes[t.axis.params.principalAxis],t.origin.name==="custom"?n=t.origin.params.vector:n=Ye.getPrincipalAxes(e).momentsAxes.origin,{axis:r,origin:n}}var hSe=Y(),ySe=Y(),tH=Y();function CX(e,t,r,n,o){for(let i=0,a=e.units.length;i<a;i++){let A=e.units[i];B.negate(Ev,o),Y.fromTranslation(rH,Ev),Y.fromRotation(hSe,Math.PI*r*2,n),Y.fromTranslation(ySe,o),Y.mul(tH,hSe,rH),Y.mul(tH,ySe,tH),t.setTransform(tH,A)}}function cs(e,t){return{kind:e,layers:t}}(c=>{c.Empty={kind:"empty-loci",layers:[]};function t(l,u){if(l.layers.length===0&&u.layers.length===0)return!0;if(l.layers.length!==u.layers.length)return!1;for(let g=0,m=l.layers.length;g<m;++g)if(l.layers[g].clear!==u.layers[g].clear||l.layers[g].color!==u.layers[g].color||!pr.areEqual(l.layers[g].loci,u.layers[g].loci))return!1;return!0}c.areEqual=t;function r(l){return l.layers.length===0}c.isEmpty=r;function n(l,u){if(l.kind==="element-loci"){let g=[];for(let m of l.layers){let{loci:p,color:d,clear:f}=m;p=W.Loci.remap(p,u),W.Loci.isEmpty(p)||g.push({loci:p,color:d,clear:f})}return{kind:"element-loci",layers:g}}else return l}c.remap=n;function o(l){if(r(l))return l;if(l.kind==="element-loci"){let{structure:u}=l.layers[0].loci,g=new Map,m=W.Loci.none(u);for(let d=0,f=l.layers.length;d<f;++d){let{loci:I,color:C,clear:y}=l.layers[f-d-1];if(I=W.Loci.subtract(I,m),m=W.Loci.union(I,m),!W.Loci.isEmpty(I)){let Q=y?-1:C;g.has(Q)&&(I=W.Loci.union(I,g.get(Q))),g.set(Q,I)}}let p=[];return g.forEach((d,f)=>{let I=f===-1,C=I?0:f;p.push({loci:d,color:C,clear:I})}),{kind:"element-loci",layers:p}}else return l}c.merge=o;function i(l,u){if(r(l))return l;if(l.kind==="element-loci"){let{structure:g}=l.layers[0].loci,m=[];for(let p of l.layers){let{loci:d,color:f,clear:I}=p,C=W.Loci.remap(d,u);d=W.Loci.remap(C,g),W.Loci.isEmpty(d)||m.push({loci:d,color:f,clear:I})}return{kind:"element-loci",layers:m}}else return l}c.filter=i;function a(l,u){let g=[];for(let m=0,p=l.length;m<p;++m){let{script:d,color:f,clear:I}=l[m],C=zo.toLoci(d,u);W.Loci.isEmpty(C)||g.push({loci:C,color:f,clear:I})}return{kind:"element-loci",layers:g}}c.ofScript=a;function A(l,u){let g=[];for(let m=0,p=l.length;m<p;++m){let{bundle:d,color:f,clear:I}=l[m],C=W.Bundle.toLoci(d,u.root);g.push({loci:C,color:f,clear:I})}return{kind:"element-loci",layers:g}}c.ofBundle=A;function s(l){let u=[];for(let g=0,m=l.layers.length;g<m;++g){let{loci:p,color:d,clear:f}=l.layers[g],I=W.Bundle.fromLoci(p);u.push({bundle:I,color:d,clear:f})}return{kind:"element-loci",layers:u}}c.toBundle=s})(cs||={});function ls(e,t){return{kind:e,layers:t}}(c=>{c.Empty={kind:"empty-loci",layers:[]};function t(l,u){if(l.layers.length===0&&u.layers.length===0)return!0;if(l.layers.length!==u.layers.length)return!1;for(let g=0,m=l.layers.length;g<m;++g)if(l.layers[g].value!==u.layers[g].value||!pr.areEqual(l.layers[g].loci,u.layers[g].loci))return!1;return!0}c.areEqual=t;function r(l){return l.layers.length===0}c.isEmpty=r;function n(l,u){if(l.kind==="element-loci"){let g=[];for(let m of l.layers){let p=W.Loci.remap(m.loci,u);W.Loci.isEmpty(p)||g.push({loci:p,value:m.value})}return{kind:"element-loci",layers:g}}else return l}c.remap=n;function o(l){if(r(l))return l;if(l.kind==="element-loci"){let{structure:u}=l.layers[0].loci,g=new Map,m=W.Loci.none(u);for(let d=0,f=l.layers.length;d<f;++d){let{loci:I,value:C}=l.layers[f-d-1];I=W.Loci.subtract(I,m),m=W.Loci.union(I,m),W.Loci.isEmpty(I)||(g.has(C)&&(I=W.Loci.union(I,g.get(C))),g.set(C,I))}let p=[];return g.forEach((d,f)=>{p.push({loci:d,value:f})}),{kind:"element-loci",layers:p}}else return l}c.merge=o;function i(l,u){if(r(l))return l;if(l.kind==="element-loci"){let{structure:g}=l.layers[0].loci,m=[];for(let p of l.layers){let{loci:d,value:f}=p,I=W.Loci.remap(d,u);d=W.Loci.remap(I,g),W.Loci.isEmpty(d)||m.push({loci:d,value:f})}return{kind:"element-loci",layers:m}}else return l}c.filter=i;function a(l,u){let g=[];for(let m=0,p=l.length;m<p;++m){let{script:d,value:f}=l[m],I=zo.toLoci(d,u);W.Loci.isEmpty(I)||g.push({loci:I,value:f})}return{kind:"element-loci",layers:g}}c.ofScript=a;function A(l,u){let g=[];for(let m=0,p=l.length;m<p;++m){let{bundle:d,value:f}=l[m],I=W.Bundle.toLoci(d,u.root);g.push({loci:I,value:f})}return{kind:"element-loci",layers:g}}c.ofBundle=A;function s(l){let u=[];for(let g=0,m=l.layers.length;g<m;++g){let{loci:p,value:d}=l.layers[g],f=W.Bundle.fromLoci(p);u.push({bundle:f,value:d})}return{kind:"element-loci",layers:u}}c.toBundle=s})(ls||={});var Zct={radius:1,detail:0};function ESe(e,t,r){let{radius:n,detail:o}={...Zct,...r},i=qct(),{vertices:a,indices:A}=i;c(o),Mpe(a,n);let s=new Float32Array(a.length);return xN(a,A,s,a.length/3,A.length/3),{vertices:new Float32Array(a),normals:new Float32Array(s),indices:new Uint32Array(A)};function c(u){let g=B(),m=B(),p=B();for(let d=0;d<t.length;d+=3)B.fromArray(g,e,t[d+0]*3),B.fromArray(m,e,t[d+1]*3),B.fromArray(p,e,t[d+2]*3),l(g,m,p,u)}function l(u,g,m,p){let d=Math.pow(2,p),f=[];for(let I=0;I<=d;++I){f[I]=[];let C=B();B.lerp(C,u,m,I/d);let y=B();B.lerp(y,g,m,I/d);let Q=d-I;for(let E=0;E<=Q;++E)if(E===0&&I===d)f[I][E]=C;else{let b=B();B.lerp(b,C,y,E/Q),f[I][E]=b}}for(let I=0;I<d;++I)for(let C=0;C<2*(d-I)-1;++C){let y=Math.floor(C/2);C%2===0?i.add(f[I][y+1],f[I+1][y],f[I][y]):i.add(f[I][y+1],f[I+1][y+1],f[I+1][y])}}}function qct(){let e=[],t=[],r=new Map;function n(o){let i=`${o[0].toFixed(5)}|${o[1].toFixed(5)}|${o[2].toFixed(5)}`,a=r.get(i);return a===void 0&&(a=e.length/3,r.set(i,a),e.push(...o)),a}return{vertices:e,indices:t,add:(o,i,a)=>{t.push(n(o),n(i),n(a))}}}var wp=(1+Math.sqrt(5))/2,bSe=[-1,wp,0,1,wp,0,-1,-wp,0,1,-wp,0,0,-1,wp,0,1,wp,0,-1,-wp,0,1,-wp,wp,0,-1,wp,0,1,-wp,0,-1,-wp,0,1],$ct=[0,11,5,0,5,1,0,1,7,0,7,10,0,10,11,1,5,9,5,11,4,11,10,2,10,7,6,7,1,8,3,9,4,3,4,2,3,2,6,3,6,8,3,8,9,4,9,5,2,4,11,6,2,10,8,6,7,9,8,1],elt=[0,11,5,11,0,5,1,5,0,1,1,7,0,7,7,10,0,10,10,11,5,9,4,11,2,10,6,7,1,8,3,9,4,9,3,4,2,4,2,3,2,6,3,6,6,8,3,8,8,9,4,5,2,11,6,10,7,8,1,9],hX;function xSe(){return hX||(hX=IQ(bSe,$ct)),hX}var tlt=dp(bSe,elt);function SSe(){return tlt}var{vertices:rlt,indices:nlt}=xSe();function vm(e){return 10*Math.pow(Math.pow(2,e),2)+2}function nH(e){return ESe(rlt,nlt,{detail:e,radius:1})}var DSe=new Map,olt=Y.identity();function ilt(e,t,r){return Y.scaleUniformly(e,Y.fromTranslation(e,t),r)}function yX(e){let t=DSe.get(e);return t===void 0&&(t=nH(e),DSe.set(e,t)),t}function cn(e,t,r,n){We.addPrimitive(e,ilt(olt,t,r),yX(n))}var eB={radiusTop:1,radiusBottom:1,height:1,radialSegments:8,heightSegments:1,topCap:!1,bottomCap:!1,thetaStart:0,thetaLength:Math.PI*2};function $R(e){let{radiusTop:t,radiusBottom:r,height:n,radialSegments:o,heightSegments:i,topCap:a,bottomCap:A,thetaStart:s,thetaLength:c}={...eB,...e},l=[],u=[],g=[],m=0,p=[],d=n/2;return f(),a&&t>0&&I(!0),A&&r>0&&I(!1),{vertices:new Float32Array(u),normals:new Float32Array(g),indices:new Uint32Array(l)};function f(){let C=B.zero(),y=(r-t)/n;for(let Q=0;Q<=i;++Q){let E=[],b=Q/i,x=b*(r-t)+t;for(let S=0;S<=o;++S){let R=S/o*c+s,T=Math.sin(R),L=Math.cos(R);u.push(x*T,-b*n+d,x*L),B.normalize(C,B.set(C,T,y,L)),g.push(...C),E.push(m++)}p.push(E)}for(let Q=0;Q<o;++Q)for(let E=0;E<i;++E){let b=p[E][Q],x=p[E+1][Q],S=p[E+1][Q+1],w=p[E][Q+1];l.push(b,x,w),l.push(x,S,w)}}function I(C){let y=C===!0?t:r,Q=C===!0?1:-1,E=m;for(let x=1;x<=o;++x)u.push(0,d*Q,0),g.push(0,Q,0),++m;let b=m;for(let x=0;x<=o;++x){let w=x/o*c+s,R=Math.cos(w),T=Math.sin(w);u.push(y*T,d*Q,y*R),g.push(0,Q,0),++m}for(let x=0;x<o;++x){let S=E+x,w=b+x;C===!0?l.push(w,w+1,S):l.push(w+1,w,S)}}}var vSe=B(),FSe=B(),Fm=B(),wm=B(),HI=B(),bv=B(),alt={height:1,topCap:!0,bottomCap:!0};function tB(e,t){let r=e.length/3;if(r<3)throw new Error("need at least 3 points to build a prism");let{height:n,topCap:o,bottomCap:i}={...alt,...t},a=r*2,A=r*4,s=(o?1:0)+(i?1:0);r===3?(a+=s,A+=s*3):r===4?(a+=s*2,A+=s*4):(a+=s*r,A+=s*r*3);let c=Bm(a,A),l=n*.5;B.set(vSe,0,0,-l),B.set(FSe,0,0,l);for(let u=0;u<r;++u){let g=(u+1)%r;B.set(Fm,e[u*3],e[u*3+1],-l),B.set(wm,e[g*3],e[g*3+1],-l),B.set(HI,e[g*3],e[g*3+1],l),B.set(bv,e[u*3],e[u*3+1],l),c.addQuad(Fm,wm,HI,bv)}if(r===3)o&&(B.set(Fm,e[0],e[1],-l),B.set(wm,e[3],e[4],-l),B.set(HI,e[6],e[7],-l),c.add(HI,wm,Fm)),i&&(B.set(Fm,e[0],e[1],l),B.set(wm,e[3],e[4],l),B.set(HI,e[6],e[7],l),c.add(Fm,wm,HI));else if(r===4)o&&(B.set(Fm,e[0],e[1],-l),B.set(wm,e[3],e[4],-l),B.set(HI,e[6],e[7],-l),B.set(bv,e[9],e[10],-l),c.addQuad(bv,HI,wm,Fm)),i&&(B.set(Fm,e[0],e[1],l),B.set(wm,e[3],e[4],l),B.set(HI,e[6],e[7],l),B.set(bv,e[9],e[10],l),c.addQuad(Fm,wm,HI,bv));else for(let u=0;u<r;++u){let g=(u+1)%r;o&&(B.set(Fm,e[u*3],e[u*3+1],-l),B.set(wm,e[g*3],e[g*3+1],-l),c.add(vSe,wm,Fm)),i&&(B.set(Fm,e[u*3],e[u*3+1],l),B.set(wm,e[g*3],e[g*3+1],l),c.add(Fm,wm,FSe))}return c.getPrimitive()}var QX;function wSe(){return QX||(QX=tB(vs(4,!1))),QX}var EX;function RSe(){return EX||(EX=tB(vs(5,!1))),EX}var bX;function USe(){return bX||(bX=tB(vs(6,!1))),bX}var xX;function LSe(){return xX||(xX=tB(vs(6,!0))),xX}var SX;function TSe(){return SX||(SX=tB(vs(7,!1))),SX}function eU(e,t=1){let r=e.length/3,n=[],o=[],i=t*.5,a=0;for(let A=0;A<r;++A)n.push(e[A*3],e[A*3+1],-i,e[A*3],e[A*3+1],i),o.push(a,a+1),a+=2;for(let A=0;A<r;++A){let s=(A+1)%r;o.push(A*2,s*2,A*2+1,s*2+1)}return{vertices:n,edges:o}}var PSe=new Map,GSe=B.create(0,1,0),Rp=B(),oH=B(),NSe=B(),Up=Y(),MSe=Y(),kSe=B(),_I=B(),DX=B();function xv(e,t,r,n,o){return B.setMagnitude(oH,r,n/2),B.add(NSe,t,oH),o?B.matchDirection(DX,GSe,oH):B.copy(DX,GSe),B.set(kSe,1,n,1),B.makeRotation(MSe,DX,oH),Y.scale(e,MSe,kSe),Y.setTranslation(e,NSe)}var VI=new Int32Array(9);function Alt(e){return VI[0]=Math.round(1e3*(e.radiusTop??eB.radiusTop)),VI[1]=Math.round(1e3*(e.radiusBottom??eB.radiusBottom)),VI[2]=Math.round(1e3*(e.height??eB.height)),VI[3]=e.radialSegments??eB.radialSegments,VI[4]=e.heightSegments??eB.heightSegments,VI[5]=e.topCap??eB.topCap?1:0,VI[6]=e.bottomCap??eB.bottomCap?1:0,VI[7]=Math.round(1e3*(e.thetaStart??eB.thetaStart)),VI[8]=Math.round(1e3*(e.thetaLength??eB.thetaLength)),na(VI)}function Sv(e){let t=Alt(e),r=PSe.get(t);if(r===void 0){if(e.radialSegments&&e.radialSegments<=4){let n=Math.max(3,e.radialSegments),o=tB(vs(n,!0,e.radiusTop),e);r=mI(o,Y.rotX90)}else r=$R(e);PSe.set(t,r)}return r}function tU(e,t,r,n){let o=B.distance(t,r);B.sub(Rp,r,t),xv(Up,t,Rp,o,!1),We.addPrimitive(e,Up,Sv(n))}function HSe(e,t,r,n){xv(Up,t.origin,t.direction,r,!1),We.addPrimitive(e,Up,Sv(n))}function Sn(e,t,r,n,o){let i=B.distance(t,r)*n;B.sub(Rp,r,t),xv(Up,t,Rp,i,!0),We.addPrimitive(e,Up,Sv(o))}function VSe(e,t,r,n,o,i){let a=B.distance(t,r)*n,A=Sv(i);B.sub(Rp,r,t),B.add(_I,t,o),xv(Up,_I,Rp,a,!0),We.addPrimitive(e,Up,A),B.sub(_I,t,o),xv(Up,_I,Rp,a,!0),We.addPrimitive(e,Up,A)}function Rm(e,t,r,n,o,i,a){let A=B.distance(t,r)*n,s=o%2!==0,c=Math.floor((o+1)/2),l=A/(o+.5),u=Sv(a);B.setMagnitude(Rp,B.sub(Rp,r,t),l),B.copy(_I,t);for(let g=0;g<c;++g)B.add(_I,_I,Rp),s&&g===c-1&&(!i&&a.topCap&&(a.topCap=!1,u=Sv(a)),l/=2),xv(Up,_I,Rp,l,!1),We.addPrimitive(e,Up,u),B.add(_I,_I,Rp)}var XA=B(),_Se=Ht(),rB=B(),Lp=B(),Nh=B(),iH=B(),Ku=B.fromArray,slt=B.triangleNormal,YSe=B.copy,aH=B.transformMat4,OSe=B.transformMat3,JSe=Ht.directionTransform,ju=qe.add3,AH=qe.add,We;(u=>{function e(g=2048,m=1024,p){return{currentGroup:-1,vertices:qe.create(Float32Array,3,m,p?p.vertexBuffer.ref.value:g),normals:qe.create(Float32Array,3,m,p?p.normalBuffer.ref.value:g),indices:qe.create(Uint32Array,3,m*3,p?p.indexBuffer.ref.value:g*3),groups:qe.create(Float32Array,1,m,p?p.groupBuffer.ref.value:g),mesh:p}}u.createState=e;function t(g,m,p,d){let{vertices:f,normals:I,indices:C,groups:y,currentGroup:Q}=g,E=f.elementCount;ju(f,m[0],m[1],m[2]),ju(f,p[0],p[1],p[2]),ju(f,d[0],d[1],d[2]),slt(XA,m,p,d);for(let b=0;b<3;++b)ju(I,XA[0],XA[1],XA[2]),AH(y,Q);ju(C,E,E+1,E+2)}u.addTriangle=t;function r(g,m,p,d,f){let{vertices:I,normals:C,indices:y,groups:Q,currentGroup:E}=g,b=I.elementCount;ju(I,m[0],m[1],m[2]),ju(I,p[0],p[1],p[2]),ju(I,d[0],d[1],d[2]);for(let x=0;x<3;++x)ju(C,f[0],f[1],f[2]),AH(Q,E);ju(y,b,b+1,b+2)}u.addTriangleWithNormal=r;function n(g,m,p){Ku(Nh,m,p[0]*3),Ku(iH,m,p[1]*3);for(let d=2,f=p.length;d<f;d+=2)YSe(rB,Nh),YSe(Lp,iH),Ku(Nh,m,p[d]*3),Ku(iH,m,p[d+1]*3),t(g,rB,Lp,Nh),t(g,Lp,iH,Nh)}u.addTriangleStrip=n;function o(g,m,p){Ku(rB,m,p[0]*3);for(let d=2,f=p.length;d<f;++d)Ku(Lp,m,p[d-1]*3),Ku(Nh,m,p[d]*3),t(g,rB,Nh,Lp)}u.addTriangleFan=o;function i(g,m,p,d){Ku(rB,m,p[0]*3);for(let f=2,I=p.length;f<I;++f)Ku(Lp,m,p[f-1]*3),Ku(Nh,m,p[f]*3),r(g,rB,Nh,Lp,d)}u.addTriangleFanWithNormal=i;function a(g,m,p){let{vertices:d,normals:f,indices:I}=p,{vertices:C,normals:y,indices:Q,groups:E,currentGroup:b}=g,x=C.elementCount,S=JSe(_Se,m);for(let w=0,R=d.length;w<R;w+=3)aH(XA,Ku(XA,d,w),m),ju(C,XA[0],XA[1],XA[2]),OSe(XA,Ku(XA,f,w),S),ju(y,XA[0],XA[1],XA[2]),AH(E,b);for(let w=0,R=I.length;w<R;w+=3)ju(Q,I[w]+x,I[w+1]+x,I[w+2]+x)}u.addPrimitive=a;function A(g,m,p){let{vertices:d,normals:f,indices:I}=p,{vertices:C,normals:y,indices:Q,groups:E,currentGroup:b}=g,x=C.elementCount,S=JSe(_Se,m);for(let w=0,R=d.length;w<R;w+=3)aH(XA,Ku(XA,d,w),m),ju(C,XA[0],XA[1],XA[2]),OSe(XA,Ku(XA,f,w),S),ju(y,-XA[0],-XA[1],-XA[2]),AH(E,b);for(let w=0,R=I.length;w<R;w+=3)ju(Q,I[w+2]+x,I[w+1]+x,I[w]+x)}u.addPrimitiveFlipped=A;function s(g,m,p,d,f,I){let{vertices:C,edges:y}=p,Q={radiusTop:d,radiusBottom:d,radialSegments:I};for(let E=0,b=y.length;E<b;E+=2)Ku(rB,C,y[E]*3),Ku(Lp,C,y[E+1]*3),aH(rB,rB,m),aH(Lp,Lp,m),cn(g,rB,d,f),cn(g,Lp,d,f),Sn(g,rB,Lp,1,Q)}u.addCage=s;function c(g,m,p){a(g,m,{vertices:p.vertexBuffer.ref.value.subarray(0,p.vertexCount*3),normals:p.normalBuffer.ref.value.subarray(0,p.vertexCount*3),indices:p.indexBuffer.ref.value.subarray(0,p.triangleCount*3)})}u.addMesh=c;function l(g){let{vertices:m,normals:p,indices:d,groups:f,mesh:I}=g,C=qe.compact(m,!0),y=qe.compact(d,!0),Q=qe.compact(p,!0),E=qe.compact(f,!0);return At.create(C,y,Q,E,g.vertices.elementCount,g.indices.elementCount,I)}u.getMesh=l})(We||={});var clt=Y.fromTranslation(Y(),B.create(.5,.5,.5)),llt=wD(FD(Q0()),clt),nB=B(),zSe=Y(),ult={origin:"Origin",model:"Model"},glt={corner:"Corner",center:"Center"},mlt={...At.Params,cellColor:h.Color(xt.orange),cellScale:h.Numeric(2,{min:.1,max:5,step:.1}),ref:h.Select("model",h.objectToOptions(ult),{isEssential:!0}),attachment:h.Select("corner",h.objectToOptions(glt),{isEssential:!0})},dlt={mesh:(e,t)=>yi(flt,At.Utils)},vX={...mlt};function plt(e,t,r){let n=We.createState(256,128,r),{fromFractional:o}=e.symmetry.spacegroup.cell;B.copy(nB,e.ref),t.attachment==="center"?(B.trunc(nB,nB),B.subScalar(nB,nB,.5)):B.floor(nB,nB),Y.fromTranslation(zSe,nB);let i=wD(FD(llt),zSe),a=Math.cbrt(e.symmetry.spacegroup.cell.volume)/300*t.cellScale;n.currentGroup=1,We.addCage(n,o,i,a,2,20);let A=we.fromDimensionsAndTransform(we(),B.unit,o);B.transformMat4(nB,nB,o),we.translate(A,A,nB),we.expand(A,A,a);let s=We.getMesh(n);return s.setBoundingSphere(A),s}function flt(e,t,r,n){let o=plt(t,r,n&&n.geometry),i=ah.getUnitcellLabel(t.symmetry);return Mr.create(i,t,o,()=>r.cellColor,()=>1,()=>i)}function FX(e,t,r){let n=B();return r.ref==="model"&&B.transformMat4(n,_t.getCenter(e),t.spacegroup.cell.toFractional),{symmetry:t,ref:n}}function KSe(e,t){return Xt.createMulti("Unit Cell",e,t,Xt.StateBuilder,dlt)}var Tp=new Uint16Array([0,1,2,1,3,2]),_0=qe.add3,Ll=qe.add2,jSe=qe.add,rc;(t=>{function e(r={},n=2048,o=1024,i){n*=2,o*=2;let a=qe.create(Float32Array,3,o,i?i.centerBuffer.ref.value:n),A=qe.create(Float32Array,2,o,i?i.mappingBuffer.ref.value:n),s=qe.create(Float32Array,1,o,i?i.depthBuffer.ref.value:n),c=qe.create(Uint32Array,3,o,i?i.indexBuffer.ref.value:n),l=qe.create(Float32Array,1,o,i?i.groupBuffer.ref.value:n),u=qe.create(Float32Array,2,o,i?i.tcoordBuffer.ref.value:n),g={...h.getDefaultValues(tA.Params),...r},{attachment:m,background:p,backgroundMargin:d,tether:f,tetherLength:I,tetherBaseWidth:C}=g,y=YCe(g),Q=1/2.5*d,E=y.buffer/y.lineHeight,b=(x,S,w,R,T)=>{_0(a,x,S,w),jSe(s,R),jSe(l,T)};return{add:(x,S,w,R,T,L,F)=>{let v=0,U=x.length;for(let ne=0;ne<U;++ne){let oe=y.get(x[ne]);v+=oe.nw-2*E}let G=1/1.25,N,k;if(m.startsWith("top")?N=G:m.startsWith("middle")?N=G/2:N=0,m.endsWith("right")?k=v:m.endsWith("center")?k=v/2:k=0,f)switch(m){case"bottom-left":k-=I/2+Q+.1,N-=I/2+Q;break;case"bottom-center":N-=I+Q;break;case"bottom-right":k+=I/2+Q+.1,N-=I/2+Q;break;case"middle-left":k-=I+Q+.1;break;case"middle-center":break;case"middle-right":k+=I+Q+.1;break;case"top-left":k-=I/2+Q+.1,N+=I/2+Q;break;case"top-center":N+=I+Q;break;case"top-right":k+=I/2+Q+.1,N+=I/2+Q;break}let J=(-k-Q-.1)*L,H=(v-k+Q+.1)*L,z=.5-N-E*.5,_=(z+G/2+Q)*L,M=(z-G/2-Q)*L;if(p){Ll(A,J,_),Ll(A,J,M),Ll(A,H,_),Ll(A,H,M);let ne=a.elementCount;for(let oe=0;oe<4;++oe)Ll(u,10,10),b(S,w,R,T,F);_0(c,ne+Tp[0],ne+Tp[1],ne+Tp[2]),_0(c,ne+Tp[3],ne+Tp[4],ne+Tp[5])}if(f){let ne,oe,ae,me,Se,ee,O,X,Ce=I*L,Ne=C*L;switch(m){case"bottom-left":ne=J-Ce/2,ae=J+Ne/2,Se=J,O=J,oe=M-Ce/2,me=M,ee=M+Ne/2,X=M;break;case"bottom-center":ne=0,ae=Ne/2,Se=-Ne/2,O=0,oe=M-Ce,me=M,ee=M,X=M;break;case"bottom-right":ne=H+Ce/2,ae=H,Se=H-Ne/2,O=H,oe=M-Ce/2,me=M+Ne/2,ee=M,X=M;break;case"middle-left":ne=J-Ce,ae=J,Se=J,O=J,oe=0,me=-Ne/2,ee=Ne/2,X=0;break;case"middle-center":ne=0,ae=0,Se=0,O=0,oe=0,me=0,ee=0,X=0;break;case"middle-right":ne=H+Ce,ae=H,Se=H,O=H,oe=0,me=Ne/2,ee=-Ne/2,X=0;break;case"top-left":ne=J-Ce/2,ae=J+Ne/2,Se=J,O=J,oe=_+Ce/2,me=_,ee=_-Ne/2,X=_;break;case"top-center":ne=0,ae=Ne/2,Se=-Ne/2,O=0,oe=_+Ce,me=_,ee=_,X=_;break;case"top-right":ne=H+Ce/2,ae=H,Se=H-Ne/2,O=H,oe=_+Ce/2,me=_-Ne/2,ee=_,X=_;break;default:Or(m)}Ll(A,ne,oe),Ll(A,ae,me),Ll(A,Se,ee),Ll(A,O,X);let $=a.elementCount;for(let pe=0;pe<4;++pe)Ll(u,10,10),b(S,w,R,T,F);_0(c,$,$+1,$+3),_0(c,$,$+3,$+2)}k+=E,N+=E;let q=0;for(let ne=0;ne<U;++ne){let oe=y.get(x[ne]),ae=(q-k)*L,me=(q+oe.nw-k)*L,Se=(oe.nh-N)*L,ee=-N*L;Ll(A,ae,Se),Ll(A,ae,ee),Ll(A,me,Se),Ll(A,me,ee);let O=y.texture.width,X=y.texture.height;Ll(u,oe.x/O,oe.y/X),Ll(u,oe.x/O,(oe.y+oe.h)/X),Ll(u,(oe.x+oe.w)/O,oe.y/X),Ll(u,(oe.x+oe.w)/O,(oe.y+oe.h)/X),q+=oe.nw-2*E;let Ce=a.elementCount;for(let Ne=0;Ne<4;++Ne)b(S,w,R,T,F);_0(c,Ce+Tp[0],Ce+Tp[1],Ce+Tp[2]),_0(c,Ce+Tp[3],Ce+Tp[4],Ce+Tp[5])}},getText:()=>{let x=y.texture,S=qe.compact(a,!0),w=qe.compact(A,!0),R=qe.compact(s,!0),T=qe.compact(c,!0),L=qe.compact(l,!0),F=qe.compact(u,!0);return tA.create(x,S,w,R,T,L,F,c.elementCount/2,i)}}}t.create=e})(rc||={});var vv={granularity:"element",condensed:!1,reverse:!1,countsOnly:!1,hidePrefix:!1,htmlStyling:!0};function Um(e,t={}){switch(e.kind){case"structure-loci":return e.structure.models.map(g=>g.entry).filter(g=>!!g).join(", ");case"element-loci":return Y0(W.Stats.ofLoci(e),t);case"bond-loci":let r=e.bonds[0];return r?kQ(r,t):"";case"shape-loci":return e.shape.name;case"group-loci":let n=e.groups[0];return n?e.shape.getLabel(Ee.start(n.ids),n.instance):"";case"every-loci":return"Everything";case"empty-loci":return"Nothing";case"data-loci":return e.getLabel();case"volume-loci":return e.volume.label||"Volume";case"isosurface-loci":return[`${e.volume.label||"Volume"}`,`Isosurface at ${Ze.IsoValue.toString(e.isoValue)}`].join(" | ");case"cell-loci":let o=Ze.Cell.getLociSize(e),i=Ee.start(e.elements[0].indices),a=Ze.IsoValue.absolute(e.volume.grid.cells.data[i]),A=Ze.IsoValue.toRelative(a,e.volume.grid.stats),s=[`${e.volume.label||"Volume"}`,`${o===1?`Cell #${i}`:`${o} Cells`}`];return o===1&&(e.volume.instances.length>1&&s.push(`Instance #${Ee.start(e.elements[0].instances)+1}`),s.push(`${Ze.IsoValue.toString(a)} (${Ze.IsoValue.toString(A)})`)),s.join(" | ");case"segment-loci":let c=Ze.Segment.getLociSize(e),l=Ze.Segmentation.get(e.volume)?.labels,u=Ee.start(e.elements[0].segments);if(l&&c===1){let g=l[u];if(g)return g}return[`${e.volume.label||"Volume"}`,`${c===1?`Segment ${u}`:`${c} Segments`}`].join(" | ")}}function Dv(e,t){return e===1?`1 ${t}`:`${e} ${t}s`}function rU(e,t,r,n,o,i){return`${bd(t,{granularity:r,hidePrefix:n,reverse:o,condensed:i})} <small>[+ ${Dv(e-1,`other ${wu(r)}`)}]</small>`}function Blt(e){let{elements:t,model:r}=e,{chainAtomSegments:n,residueAtomSegments:o}=r.atomicHierarchy,i=n.offsets[n.index[t[0]]],a=n.offsets[n.index[t[t.length-1]]+1]-1;return o.index[a]-o.index[i]+1}function Y0(e,t={}){let r={...vv,...t},n=Ilt(e,r.countsOnly,r.hidePrefix,r.condensed,r.reverse);return r.htmlStyling?n:Ru(n)}function MQ(e,t={}){let r=W.Stats.create();for(let n of e)W.Stats.add(r,r,W.Stats.ofLoci(n));return Y0(r,t)}function Ilt(e,t=!1,r=!1,n=!1,o=!1){let{structureCount:i,chainCount:a,residueCount:A,conformationCount:s,elementCount:c}=e;if(!t&&c===1&&A===0&&a===0)return bd(e.firstElementLoc,{hidePrefix:r,condensed:n,granularity:"element",reverse:o});if(!t&&c===0&&A===1&&a===0)return bd(e.firstResidueLoc,{hidePrefix:r,condensed:n,granularity:"residue",reverse:o});if(!t&&c===0&&A===0&&a===1){let{unit:l}=e.firstChainLoc,u=ge.isAtomic(l)&&Blt(l)===1||ge.Traits.is(l.traits,ge.Trait.MultiChain)?"residue":"chain";return bd(e.firstChainLoc,{hidePrefix:r,condensed:n,granularity:u,reverse:o})}else if(t){let l=[];return i>0&&l.push(Dv(i,"Structure")),a>0&&l.push(Dv(a,"Chain")),A>0&&l.push(Dv(A,"Residue")),s>0&&l.push(Dv(s,"Conformation")),c>0&&l.push(Dv(c,"Element")),l.join("<small> + </small>")}else{let l=[];return i>0&&l.push(i===1?bd(e.firstStructureLoc,{hidePrefix:r,condensed:n,granularity:"structure",reverse:o}):rU(i,e.firstStructureLoc,"structure",r,o,n)),a>0&&(l.push(a===1?bd(e.firstChainLoc,{condensed:n,granularity:"chain",hidePrefix:r,reverse:o}):rU(a,e.firstChainLoc,"chain",r,o,n)),r=!0),A>0&&(l.push(A===1?bd(e.firstResidueLoc,{condensed:n,granularity:"residue",hidePrefix:r,reverse:o}):rU(A,e.firstResidueLoc,"residue",r,o,n)),r=!0),s>0&&(l.push(s===1?bd(e.firstConformationLoc,{condensed:n,granularity:"conformation",hidePrefix:r,reverse:o}):rU(s,e.firstConformationLoc,"conformation",r,o,n)),r=!0),c>0&&l.push(c===1?bd(e.firstElementLoc,{condensed:n,granularity:"element",hidePrefix:r,reverse:o}):rU(c,e.firstElementLoc,"element",r,o,n)),l.join("<small> + </small>")}}function kQ(e,t={}){return Fv({loci:[W.Loci(e.aStructure,[{unit:e.aUnit,indices:Ee.ofSingleton(e.aIndex)}]),W.Loci(e.bStructure,[{unit:e.bUnit,indices:Ee.ofSingleton(e.bIndex)}])]},t)}function Fv(e,t={}){let r={...vv,...t},n=Clt(e,r);return r.htmlStyling?n:Ru(n)}function Clt(e,t){let{granularity:r,hidePrefix:n,reverse:o,condensed:i}=t,a=!0;for(let A of e.loci)if(!W.Loci.is(A)||W.Loci.size(A)!==1){a=!1;break}if(a){let s=e.loci.map(l=>{let{unit:u,indices:g}=l.elements[0];return W.Location.create(l.structure,u,u.elements[Ee.start(g)])}).map(l=>WSe(l,r,n,o||i));if(i)return s.map(l=>l[0].replace(/\[.*\]/g,"").trim()).filter(l=>!!l).join(" \u2014 ");let c=0;for(let l=0,u=Math.min(...s.map(g=>g.length))-1;l<u;++l){let g=!0;for(let m=1,p=s.length;m<p;++m)if(s[0][l]!==s[m][l]){g=!1;break}if(g)c+=1;else break}if(c>0){let l=[s[0].join(" | ")];for(let u=1,g=s.length;u<g;++u)l.push(s[u].slice(c).filter(m=>!!m).join(" | "));return l.join(" \u2014 ")}else return s.map(l=>l.filter(u=>!!u).join(" | ")).filter(l=>!!l).join("</br>")}else return e.loci.map(s=>Um(s,t)).filter(s=>!!s).join(i?" \u2014 ":"</br>")}function bd(e,t={}){let r={...vv,...t},n=WSe(e,r.granularity,r.hidePrefix,r.reverse||r.condensed),o=r.condensed?n[0]?.replace(/\[.*\]/g,"").trim()??"":n.filter(i=>!!i).join(" | ");return r.htmlStyling?o:Ru(o)}function WSe(e,t="element",r=!1,n=!1){let o=[];if(!r){let i=e.unit.model.entry;i.length>30&&(i=i.substr(0,27)+"\u2026"),o.push(`<small>${i}</small>`),t!=="structure"&&(o.push(`<small>Model ${e.unit.model.modelNum}</small>`),o.push(`<small>Instance ${e.unit.conformation.operator.instanceId}</small>`))}return ge.isAtomic(e.unit)?o.push(...hlt(e,t,n)):ge.isCoarse(e.unit)?o.push(...ylt(e,t)):o.push("Unknown"),n?o.reverse():o}function hlt(e,t,r=!1){let n=W.Location.residueIndex(e),o=Ke.chain.label_asym_id(e),i=Ke.chain.auth_asym_id(e),a=e.unit.model.atomicHierarchy.residues.label_seq_id.valueKind(n)===K.ValueKinds.Present,A=Ke.residue.label_seq_id(e),s=Ke.residue.auth_seq_id(e),c=Ke.residue.pdbx_PDB_ins_code(e),l=Ke.atom.label_comp_id(e),u=Ke.atom.label_atom_id(e),g=Ke.atom.label_alt_id(e),m=Ke.atom.occupancy(e),p=Ke.atom.sourceIndex(e),d=Ke.residue.microheterogeneityCompIds(e),f=t==="residue"&&d.length>1?`(${d.join("|")})`:l,I=[];switch(t){case"element":{let y=`<b>${u}</b>${g?`%${g}`:""}`,Q=`<small style='margin-left: 4px'>[idx <b>${p+1}</b>]</small>`;I.push(`${y}${Q}`)}case"conformation":t==="conformation"&&g&&I.push(`<small>Conformation</small> <b>${g}</b>`);case"residue":let C=A===s||!a?s:A;I.push(`<b>${f} ${C}</b>${C!==s?` <small>[auth</small> <b>${s}</b><small>]</small>`:""}<b>${c||""}</b>`);case"chain":o===i?I.push(`<b>${o}</b>`):t==="chain"&&ge.Traits.is(e.unit.traits,ge.Trait.MultiChain)?I.push(`<small>[auth</small> <b>${i}</b><small>]</small>`):I.push(`<b>${o}</b> <small>[auth</small> <b>${i}</b><small>]</small>`)}return I.length>0&&m!==1&&!r&&(I[0]=`${I[0]} <small>[occupancy</small> <b>${Math.round(100*m)/100}</b><small>]</small>`),I.reverse()}function ylt(e,t){let r=Ke.coarse.asym_id(e),n=Ke.coarse.seq_id_begin(e),o=Ke.coarse.seq_id_end(e),i=[];switch(t){case"element":case"conformation":case"residue":if(n===o){let a=Ke.coarse.entityKey(e),s=e.unit.model.sequence.byEntityKey[a].sequence.compId.value(n-1);i.push(`<b>${s} ${n}</b>`)}else i.push(`<b>${n}-${o}</b>`);case"chain":i.push(`<b>${r}</b>`)}return i.reverse()}function wv(e,t={}){let r={...vv,measureOnly:!1,unitLabel:"\u212B",...t},[n,o]=e.loci.map(A=>pr.getCenter(A)),i=`${B.distance(n,o).toFixed(2)} ${r.unitLabel}`;if(r.measureOnly)return i;let a=Fv(e,r);return r.condensed?`${i} | ${a}`:`Distance ${i}</br>${a}`}function Rv(e,t={}){let r={...vv,measureOnly:!1,...t},[n,o,i]=e.loci.map(l=>pr.getCenter(l)),a=B.sub(B(),n,o),A=B.sub(B(),i,o),s=`${yA(B.angle(a,A)).toFixed(2)}\xB0`;if(r.measureOnly)return s;let c=Fv(e,r);return r.condensed?`${s} | ${c}`:`Angle ${s}</br>${c}`}function Uv(e,t={}){let r={...vv,measureOnly:!1,...t},[n,o,i,a]=e.loci.map(c=>pr.getCenter(c)),A=`${yA(B.dihedralAngle(n,o,i,a)).toFixed(2)}\xB0`;if(r.measureOnly)return A;let s=Fv(e,r);return r.condensed?`${A} | ${s}`:`Dihedral ${A}</br>${s}`}var wX={customText:h.Text("",{label:"Text",description:"Override the label with custom value.",isEssential:!0}),textColor:h.Color(xt.black,{isEssential:!0}),textSize:h.Numeric(.5,{min:.1,max:10,step:.1},{isEssential:!0})},HQ={...tA.Params,...wX,borderWidth:h.Numeric(.2,{min:0,max:.5,step:.01})};var XSe={unitLabel:h.Text("\u212B",{isEssential:!0})},Qlt={...Zr.Params,...XSe,lineSizeAttenuation:h.Boolean(!0),linesColor:h.Color(xt.lightgreen,{isEssential:!0}),linesSize:h.Numeric(.075,{min:.01,max:5,step:.01}),dashLength:h.Numeric(.2,{min:.01,max:.2,step:.01})},Elt={...HQ,...XSe},ZSe={lines:(e,t)=>yi(Slt,Zr.Utils,{modifyState:r=>({...r,markerActions:Ko.Highlighting})}),text:(e,t)=>yi(vlt,tA.Utils,{modifyState:r=>({...r,markerActions:0})})},RX={...Qlt,...Elt,visuals:h.MultiSelect(["lines","text"],h.objectToOptions(ZSe))};function blt(){return{sphereA:we(),sphereB:we(),center:B(),distance:0}}function qSe(e,t){let{sphereA:r,sphereB:n,center:o}=t,[i,a]=e.loci;return pr.getBoundingSphere(i,r),pr.getBoundingSphere(a,n),B.add(o,r.center,n.center),B.scale(o,o,.5),t.distance=B.distance(r.center,n.center),t}var nU=blt();function $Se(e,t){return e.pairs.length===1?`Distance ${wv(e.pairs[0],{unitLabel:t,measureOnly:!0})}`:`${e.pairs.length} Distances`}function xlt(e,t,r){let n=Ii.create(128,64,r);for(let o=0,i=e.pairs.length;o<i;++o)qSe(e.pairs[o],nU),n.addFixedLengthDashes(nU.sphereA.center,nU.sphereB.center,t.dashLength,o);return n.getLines()}function Slt(e,t,r,n){let o=xlt(t,r,n&&n.geometry),i=$Se(t,r.unitLabel),a=A=>wv(t.pairs[A],r);return Mr.create(i,t,o,()=>r.linesColor,()=>r.linesSize,a)}function Dlt(e,t,r){let n=rc.create(t,128,64,r);for(let o=0,i=e.pairs.length;o<i;++o){qSe(e.pairs[o],nU);let{center:a,distance:A,sphereA:s,sphereB:c}=nU,l=t.customText||`${A.toFixed(2)} ${t.unitLabel}`,g=Math.max(2,s.radius,c.radius)/2;n.add(l,a[0],a[1],a[2],1,g,o)}return n.getText()}function vlt(e,t,r,n){let o=Dlt(t,r,n&&n.geometry),i=$Se(t,r.unitLabel),a=A=>wv(t.pairs[A],r);return Mr.create(i,t,o,()=>r.textColor,()=>r.textSize,a)}function eDe(e,t){return Xt.createMulti("Distance",e,t,Xt.StateBuilder,ZSe)}var Flt={...HQ},tDe={text:(e,t)=>yi(Llt,tA.Utils)},UX={...Flt,scaleByRadius:h.Boolean(!0),visuals:h.MultiSelect(["text"],h.objectToOptions(tDe)),snapshotKey:h.Text("",{isEssential:!0,disableInteractiveUpdates:!0,description:"Activate the snapshot with the provided key when clicking on the label"}),tooltip:h.Text("",{isEssential:!0,multiline:!0,disableInteractiveUpdates:!0,placeholder:"Tooltip",description:"Tooltip text to be displayed when hovering over the label"})},wlt=we();function LX(e,t=!1){return e.label||Um(e.loci,{hidePrefix:!0,htmlStyling:!1,condensed:t})}function Rlt(e){return e.infos.length===1?LX(e.infos[0]):`${e.infos.length} Labels`}function Ult(e,t,r){let n=rc.create(t,128,64,r),o=t.customText.trim();for(let i=0,a=e.infos.length;i<a;++i){let A=e.infos[i],s=pr.getBoundingSphere(A.loci,wlt);if(!s)continue;let{center:c,radius:l}=s,u=o||LX(A,!0);n.add(u,c[0],c[1],c[2],t.scaleByRadius?l/.9:0,t.scaleByRadius?Math.max(1,l):1,i)}return n.getText()}function Llt(e,t,r,n){let o=Ult(t,r,n&&n.geometry),i=Rlt(t),a=r.tooltip?.trim()??"",A=r.customText.trim(),s;return a?s=c=>a:A?s=c=>A:s=c=>LX(t.infos[c]),Mr.create(i,t,o,()=>r.textColor,()=>r.textSize,s)}function rDe(e,t){return Xt.createMulti("Label",e,t,Xt.StateBuilder,tDe)}var O0=B(),Tlt=Y.identity(),J0=new Float32Array(18),Plt=new Uint8Array([0,1,2,3,4,5]);function nDe(e,t,r,n,o){let{origin:i,dirA:a,dirB:A,dirC:s}=t;B.add(O0,i,a),B.toArray(B.add(O0,i,a),J0,0),B.toArray(B.sub(O0,i,a),J0,3),B.toArray(B.add(O0,i,A),J0,6),B.toArray(B.sub(O0,i,A),J0,9),B.toArray(B.add(O0,i,s),J0,12),B.toArray(B.sub(O0,i,s),J0,15);let c=dp(J0,Plt),l=$a.volume(t),u=Math.cbrt(l)/300*r;We.addCage(e,Tlt,c,u,n,o)}var pjr=B.zero(),fjr=B.zero();var VQ=B(),Glt=B(),Nlt=B(),Mlt=B(),klt=Y.identity(),oDe=new Float32Array(24),Hlt=new Uint8Array([0,1,0,3,0,6,1,2,1,7,2,3,2,4,3,5,4,5,4,7,5,6,6,7]);function iDe(e,t,r,n,o){let{origin:i,dirA:a,dirB:A,dirC:s}=t,c=B.negate(Glt,a),l=B.negate(Nlt,A),u=B.negate(Mlt,s),g=0,m=function(I,C,y){B.copy(VQ,i),B.add(VQ,VQ,I),B.add(VQ,VQ,C),B.add(VQ,VQ,y),B.toArray(VQ,oDe,g),g+=3};m(a,A,s),m(a,A,u),m(a,l,u),m(a,l,s),m(c,l,u),m(c,l,s),m(c,A,s),m(c,A,u);let p=dp(oDe,Hlt),d=$a.volume(t),f=Math.cbrt(d)/300*r;We.addCage(e,klt,p,f,n,o)}var Vlt=Y.identity(),aDe=B();function _lt(e,t,r,n,o){return B.add(aDe,t,r),Y.targetTo(e,t,aDe,n),Y.setTranslation(e,t),Y.scale(e,e,o)}function Mh(e,t,r,n,o,i){We.addPrimitive(e,_lt(Vlt,t,r,n,o),yX(i))}var TX={color:h.Color(xt.orange),scaleFactor:h.Numeric(1,{min:.1,max:10,step:.1}),radiusScale:h.Numeric(2,{min:.1,max:10,step:.1})},Ylt={...At.Params,...TX},Olt={...At.Params,...TX},Jlt={...At.Params,...TX},ADe={axes:(e,t)=>yi(jlt,At.Utils),box:(e,t)=>yi(Zlt,At.Utils),ellipsoid:(e,t)=>yi(eut,At.Utils)},PX={...Ylt,...Olt,...Jlt,visuals:h.MultiSelect(["box"],h.objectToOptions(ADe))};function zlt(e){return`Principal Axes of ${MQ(e,{countsOnly:!0})}`}function Klt(e,t,r){let n=We.createState(256,128,r),o=W.Loci.getPrincipalAxesMany(e.locis);return $a.scale(o.momentsAxes,o.momentsAxes,t.scaleFactor),n.currentGroup=0,nDe(n,o.momentsAxes,t.radiusScale,2,20),We.getMesh(n)}function jlt(e,t,r,n){let o=Klt(t,r,n&&n.geometry),i=zlt(t.locis);return Mr.create(i,t,o,()=>r.color,()=>1,()=>i)}function Wlt(e){return`Oriented Box of ${MQ(e,{countsOnly:!0})}`}function Xlt(e,t,r){let n=We.createState(256,128,r),o=W.Loci.getPrincipalAxesMany(e.locis);return $a.scale(o.boxAxes,o.boxAxes,t.scaleFactor),n.currentGroup=0,iDe(n,o.boxAxes,t.radiusScale,2,20),We.getMesh(n)}function Zlt(e,t,r,n){let o=Xlt(t,r,n&&n.geometry),i=Wlt(t.locis);return Mr.create(i,t,o,()=>r.color,()=>1,()=>i)}function qlt(e){return`Oriented Ellipsoid of ${MQ(e,{countsOnly:!0})}`}function $lt(e,t,r){let n=We.createState(256,128,r),i=W.Loci.getPrincipalAxesMany(e.locis).boxAxes,{origin:a,dirA:A,dirB:s}=i,c=$a.size(B(),i);B.scale(c,c,.5*t.scaleFactor);let l=B.create(c[2],c[1],c[0]);return n.currentGroup=0,Mh(n,a,A,s,l,2),We.getMesh(n)}function eut(e,t,r,n){let o=$lt(t,r,n&&n.geometry),i=qlt(t.locis);return Mr.create(i,t,o,()=>r.color,()=>1,()=>i)}function sDe(e,t){let r=Xt.createMulti("Orientation",e,t,Xt.StateBuilder,ADe);return r.setState({markerActions:Ko.Highlighting}),r}var tut={radius:1,segments:36,thetaStart:0,thetaLength:Math.PI*2};function YI(e){let{radius:t,segments:r,thetaStart:n,thetaLength:o}={...tut,...e},i=o===Math.PI*2,a=i?r+1:r+2,A=new Float32Array(a*3),s=new Float32Array(a*3),c=new Uint32Array(r*3);A[0]=0,A[1]=0,A[2]=0,s[0]=0,s[1]=1,s[2]=0;for(let l=0,u=3;l<r;++l,u+=3){let g=n+l/r*o;A[u]=t*Math.sin(g),A[u+1]=0,A[u+2]=t*Math.cos(g),s[u]=0,s[u+1]=1,s[u+2]=0}for(let l=1,u=0;l<r;++l,u+=3)c[u]=l,c[u+1]=l+1,c[u+2]=0;if(i){let l=(r-1)*3;c[l]=r,c[l+1]=1,c[l+2]=0}else{let l=n+o,u=(r+1)*3;A[u]=t*Math.sin(l),A[u+1]=0,A[u+2]=t*Math.cos(l),s[u]=0,s[u+1]=1,s[u+2]=0;let g=(r-1)*3;c[g]=r,c[g+1]=r+1,c[g+2]=0}return{vertices:A,normals:s,indices:c}}var cDe={color:h.Color(xt.lightgreen),arcScale:h.Numeric(.7,{min:.01,max:1,step:.01})},lDe={...Zr.Params,...cDe,lineSizeAttenuation:h.Boolean(!0),linesSize:h.Numeric(.04,{min:.01,max:5,step:.01}),dashLength:h.Numeric(.04,{min:.01,max:.2,step:.01})},rut={...lDe},nut={...lDe},out={...At.Params,...cDe,ignoreLight:h.Boolean(!0),sectorOpacity:h.Numeric(.75,{min:0,max:1,step:.01})},uDe={vectors:(e,t)=>yi(Aut,Zr.Utils,{modifyState:r=>({...r,pickable:!1})}),arc:(e,t)=>yi(cut,Zr.Utils,{modifyState:r=>({...r,pickable:!1})}),sector:(e,t)=>yi(uut,At.Utils,{modifyProps:r=>({...r,alpha:r.sectorOpacity}),modifyState:r=>({...r,markerActions:Ko.Highlighting})}),text:(e,t)=>yi(mut,tA.Utils,{modifyState:r=>({...r,markerActions:0})})},GX={...rut,...nut,...out,...HQ,visuals:h.MultiSelect(["vectors","sector","text"],h.objectToOptions(uDe))};function iut(){return{sphereA:we(),sphereB:we(),sphereC:we(),arcDirA:B(),arcDirC:B(),arcNormal:B(),radius:0,angle:0}}var _Q=B(),oU=Y();function sH(e,t,r){let{sphereA:n,sphereB:o,sphereC:i}=t,{arcDirA:a,arcDirC:A,arcNormal:s}=t,[c,l,u]=e.loci;pr.getBoundingSphere(c,n),pr.getBoundingSphere(l,o),pr.getBoundingSphere(u,i),B.sub(a,n.center,o.center),B.sub(A,i.center,o.center),B.cross(s,a,A);let m=Math.min(B.magnitude(a),B.magnitude(A))*r;return t.radius=m,t.angle=B.angle(a,A),t}function gDe(e,t){let{radius:r,angle:n}=e,o=t?eG(n,r)/t:32;Y.targetTo(oU,e.sphereB.center,e.sphereA.center,e.arcNormal),Y.setTranslation(oU,e.sphereB.center),Y.mul(oU,oU,Y.rotY180);let i=YI({radius:r,thetaLength:n,segments:o});return mI(i,oU)}var Tl=iut();function cH(e){return e.triples.length===1?`Angle ${Rv(e.triples[0],{measureOnly:!0})}`:`${e.triples.length} Angles`}function aut(e,t,r){let n=Ii.create(128,64,r);for(let o=0,i=e.triples.length;o<i;++o)sH(e.triples[o],Tl,t.arcScale),n.addFixedLengthDashes(Tl.sphereB.center,Tl.sphereA.center,t.dashLength,o),n.addFixedLengthDashes(Tl.sphereB.center,Tl.sphereC.center,t.dashLength,o);return n.getLines()}function Aut(e,t,r,n){let o=aut(t,r,n&&n.geometry),i=cH(t);return Mr.create(i,t,o,()=>r.color,()=>r.linesSize,()=>"")}function sut(e,t,r){let n=Ii.create(128,64,r);for(let o=0,i=e.triples.length;o<i;++o){sH(e.triples[o],Tl,t.arcScale);let a=gDe(Tl,t.dashLength),{indices:A,vertices:s}=a;for(let c=0,l=A.length;c<l;c+=3){if(c%2===1)continue;let u=A[c]*3,g=A[c+1]*3,m=s[u],p=s[u+1],d=s[u+2],f=s[g],I=s[g+1],C=s[g+2];n.add(m,p,d,f,I,C,o)}}return n.getLines()}function cut(e,t,r,n){let o=sut(t,r,n&&n.geometry),i=cH(t);return Mr.create(i,t,o,()=>r.color,()=>r.linesSize,()=>"")}function lut(e,t,r){let n=We.createState(128,64,r);for(let o=0,i=e.triples.length;o<i;++o){sH(e.triples[o],Tl,t.arcScale);let a=gDe(Tl);n.currentGroup=o,We.addPrimitive(n,Y.id,a),We.addPrimitiveFlipped(n,Y.id,a)}return We.getMesh(n)}function uut(e,t,r,n){let o=lut(t,r,n&&n.geometry),i=cH(t),a=A=>Rv(t.triples[A]);return Mr.create(i,t,o,()=>r.color,()=>1,a)}function gut(e,t,r){let n=rc.create(t,128,64,r);for(let o=0,i=e.triples.length;o<i;++o){sH(e.triples[o],Tl,t.arcScale),B.add(_Q,Tl.arcDirA,Tl.arcDirC),B.setMagnitude(_Q,_Q,Tl.radius),B.add(_Q,Tl.sphereB.center,_Q);let a=yA(Tl.angle).toFixed(2),A=t.customText||`${a}\xB0`,c=Math.max(2,Tl.sphereA.radius,Tl.sphereB.radius,Tl.sphereC.radius)/2;n.add(A,_Q[0],_Q[1],_Q[2],.1,c,o)}return n.getText()}function mut(e,t,r,n){let o=gut(t,r,n&&n.geometry),i=cH(t),a=A=>Rv(t.triples[A]);return Mr.create(i,t,o,()=>r.textColor,()=>r.textSize,a)}function mDe(e,t){return Xt.createMulti("Angle",e,t,Xt.StateBuilder,uDe)}var dDe={color:h.Color(xt.lightgreen),arcScale:h.Numeric(.7,{min:.01,max:1,step:.01})},lH={...Zr.Params,...dDe,lineSizeAttenuation:h.Boolean(!0),linesSize:h.Numeric(.04,{min:.01,max:5,step:.01}),dashLength:h.Numeric(.04,{min:.01,max:.2,step:.01})},dut={...lH},put={...lH},fut={...lH},But={...lH},Iut={...At.Params,...dDe,ignoreLight:h.Boolean(!0),sectorOpacity:h.Numeric(.75,{min:0,max:1,step:.01})},pDe={vectors:(e,t)=>yi(yut,Zr.Utils,{modifyState:r=>({...r,pickable:!1})}),extenders:(e,t)=>yi(Dut,Zr.Utils,{modifyState:r=>({...r,pickable:!1})}),connector:(e,t)=>yi(Eut,Zr.Utils,{modifyState:r=>({...r,pickable:!1})}),arms:(e,t)=>yi(xut,Zr.Utils,{modifyState:r=>({...r,pickable:!1})}),arc:(e,t)=>yi(Fut,Zr.Utils,{modifyState:r=>({...r,pickable:!1})}),sector:(e,t)=>yi(Rut,At.Utils,{modifyProps:r=>({...r,alpha:r.sectorOpacity}),modifyState:r=>({...r,markerActions:Ko.Highlighting})}),text:(e,t)=>yi(Lut,tA.Utils,{modifyState:r=>({...r,markerActions:0})})},NX={...dut,...put,...fut,...But,...Iut,...HQ,visuals:h.MultiSelect(["extenders","arms","sector","text"],h.objectToOptions(pDe))};function Cut(){return{sphereA:we(),sphereB:we(),sphereC:we(),sphereD:we(),dirBA:B(),dirCD:B(),projA:B(),projD:B(),arcPointA:B(),arcPointD:B(),arcDirA:B(),arcDirD:B(),arcCenter:B(),arcNormal:B(),radius:0,angle:0}}var Wu=B(),iU=Y();function z0(e,t,r){let{sphereA:n,sphereB:o,sphereC:i,sphereD:a,dirBA:A,dirCD:s,projA:c,projD:l}=t,{arcPointA:u,arcPointD:g,arcDirA:m,arcDirD:p,arcCenter:d,arcNormal:f}=t,[I,C,y,Q]=e.loci;pr.getBoundingSphere(I,n),pr.getBoundingSphere(C,o),pr.getBoundingSphere(y,i),pr.getBoundingSphere(Q,a),B.add(d,o.center,i.center),B.scale(d,d,.5),B.sub(A,n.center,o.center),B.sub(s,a.center,i.center),B.add(u,d,A),B.add(g,d,s),B.sub(f,i.center,o.center),B.orthogonalize(m,f,A),B.orthogonalize(p,f,s),B.projectPointOnVector(c,u,m,d),B.projectPointOnVector(l,g,p,d);let b=Math.min(B.distance(c,d),B.distance(l,d))*r;B.setMagnitude(m,m,b),B.setMagnitude(p,p,b),B.add(u,d,m),B.add(g,d,p),t.radius=b,t.angle=B.dihedralAngle(n.center,o.center,i.center,a.center),B.matchDirection(Wu,f,B.sub(Wu,u,n.center));let x=B.angle(A,Wu),S=b/Math.cos(x-Mb);B.add(c,o.center,B.setMagnitude(Wu,A,S)),B.matchDirection(Wu,f,B.sub(Wu,g,a.center));let w=B.angle(s,Wu),R=b/Math.cos(w-Mb);return B.add(l,i.center,B.setMagnitude(Wu,s,R)),t}function fDe(e,t){let{radius:r,angle:n}=e,o=t?eG(n,r)/t:32;Y.targetTo(iU,e.arcCenter,n<0?e.arcPointD:e.arcPointA,e.arcNormal),Y.setTranslation(iU,e.arcCenter),Y.mul(iU,iU,Y.rotY180);let i=YI({radius:r,thetaLength:Math.abs(n),segments:o});return mI(i,iU)}var sa=Cut();function K0(e){return e.quads.length===1?`Dihedral ${Uv(e.quads[0],{measureOnly:!0})}`:`${e.quads.length} Dihedrals`}function hut(e,t,r){let n=Ii.create(128,64,r);for(let o=0,i=e.quads.length;o<i;++o)z0(e.quads[o],sa,t.arcScale),n.addFixedLengthDashes(sa.arcCenter,sa.arcPointA,t.dashLength,o),n.addFixedLengthDashes(sa.arcCenter,sa.arcPointD,t.dashLength,o);return n.getLines()}function yut(e,t,r,n){let o=hut(t,r,n&&n.geometry),i=K0(t);return Mr.create(i,t,o,()=>r.color,()=>r.linesSize,()=>"")}function Qut(e,t,r){let n=Ii.create(128,64,r);for(let o=0,i=e.quads.length;o<i;++o)z0(e.quads[o],sa,t.arcScale),n.addFixedLengthDashes(sa.sphereB.center,sa.sphereC.center,t.dashLength,o);return n.getLines()}function Eut(e,t,r,n){let o=Qut(t,r,n&&n.geometry),i=K0(t);return Mr.create(i,t,o,()=>r.color,()=>r.linesSize,()=>"")}function but(e,t,r){let n=Ii.create(128,64,r);for(let o=0,i=e.quads.length;o<i;++o)z0(e.quads[o],sa,t.arcScale),n.addFixedLengthDashes(sa.sphereB.center,sa.sphereA.center,t.dashLength,o),n.addFixedLengthDashes(sa.sphereC.center,sa.sphereD.center,t.dashLength,o);return n.getLines()}function xut(e,t,r,n){let o=but(t,r,n&&n.geometry),i=K0(t);return Mr.create(i,t,o,()=>r.color,()=>r.linesSize,()=>"")}function Sut(e,t,r){let n=Ii.create(128,64,r);for(let o=0,i=e.quads.length;o<i;++o)z0(e.quads[o],sa,t.arcScale),n.addFixedLengthDashes(sa.arcPointA,sa.projA,t.dashLength,o),n.addFixedLengthDashes(sa.arcPointD,sa.projD,t.dashLength,o);return n.getLines()}function Dut(e,t,r,n){let o=Sut(t,r,n&&n.geometry),i=K0(t);return Mr.create(i,t,o,()=>r.color,()=>r.linesSize,()=>"")}function vut(e,t,r){let n=Ii.create(128,64,r);for(let o=0,i=e.quads.length;o<i;++o){z0(e.quads[o],sa,t.arcScale);let a=fDe(sa,t.dashLength),{indices:A,vertices:s}=a;for(let c=0,l=A.length;c<l;c+=3){if(c%2===1)continue;let u=A[c]*3,g=A[c+1]*3,m=s[u],p=s[u+1],d=s[u+2],f=s[g],I=s[g+1],C=s[g+2];n.add(m,p,d,f,I,C,o)}}return n.getLines()}function Fut(e,t,r,n){let o=vut(t,r,n&&n.geometry),i=K0(t);return Mr.create(i,t,o,()=>r.color,()=>r.linesSize,()=>"")}function wut(e,t,r){let n=We.createState(128,64,r);for(let o=0,i=e.quads.length;o<i;++o){z0(e.quads[o],sa,t.arcScale);let a=fDe(sa);n.currentGroup=o,We.addPrimitive(n,Y.id,a),We.addPrimitiveFlipped(n,Y.id,a)}return We.getMesh(n)}function Rut(e,t,r,n){let o=wut(t,r,n&&n.geometry),i=K0(t),a=A=>Uv(t.quads[A]);return Mr.create(i,t,o,()=>r.color,()=>1,a)}function Uut(e,t,r){let n=rc.create(t,128,64,r);for(let o=0,i=e.quads.length;o<i;++o){z0(e.quads[o],sa,t.arcScale),B.add(Wu,sa.arcDirA,sa.arcDirD),B.setMagnitude(Wu,Wu,sa.radius),B.add(Wu,sa.arcCenter,Wu);let a=yA(sa.angle).toFixed(2);a==="-0.00"&&(a="0.00");let A=t.customText||`${a}\xB0`,c=Math.max(2,sa.sphereA.radius,sa.sphereB.radius,sa.sphereC.radius,sa.sphereD.radius)/2;n.add(A,Wu[0],Wu[1],Wu[2],.1,c,o)}return n.getText()}function Lut(e,t,r,n){let o=Uut(t,r,n&&n.geometry),i=K0(t),a=A=>Uv(t.quads[A]);return Mr.create(i,t,o,()=>r.textColor,()=>r.textSize,a)}function BDe(e,t){return Xt.createMulti("Dihedral",e,t,Xt.StateBuilder,pDe)}function si(e,t){return{kind:e,layers:t}}(l=>{l.Empty={kind:"empty-loci",layers:[]};let t;(y=>{y.is=hA.has;let g;(T=>(T[T.None=0]="None",T[T.One=1]="One",T[T.Two=2]="Two",T[T.Three=4]="Three",T[T.Four=8]="Four",T[T.Five=16]="Five",T[T.Six=32]="Six"))(g=y.Flag||={});function m(Q){return hA.create(Q)}y.create=m,y.Names={one:1,two:2,three:4,four:8,five:16,six:32};function d(Q){return Q in y.Names}y.isName=d;function f(Q){switch(Q){case"one":return 1;case"two":return 2;case"three":return 4;case"four":return 8;case"five":return 16;case"six":return 32}}y.fromName=f;function I(Q){let E=0;for(let b=0,x=Q.length;b<x;++b)E|=f(Q[b]);return E}y.fromNames=I;function C(Q){let E=[];return(0,y.is)(Q,1)&&E.push("one"),(0,y.is)(Q,2)&&E.push("two"),(0,y.is)(Q,4)&&E.push("three"),(0,y.is)(Q,8)&&E.push("four"),(0,y.is)(Q,16)&&E.push("five"),(0,y.is)(Q,32)&&E.push("six"),E}y.toNames=C})(t=l.Groups||={});function r(u,g){if(u.layers.length!==g.layers.length)return!1;for(let m=0,p=u.layers.length;m<p;++m)if(u.layers[m].groups!==g.layers[m].groups||!pr.areEqual(u.layers[m].loci,g.layers[m].loci))return!1;return!0}l.areEqual=r;function n(u){return u.layers.length===0}l.isEmpty=n;function o(u,g){if(u.kind==="element-loci"){let m=[];for(let p of u.layers){let{loci:d,groups:f}=p;d=W.Loci.remap(d,g),W.Loci.isEmpty(d)||m.push({loci:d,groups:f})}return{kind:"element-loci",layers:m}}else return u}l.remap=o;function i(u){if(n(u))return u;if(u.kind==="element-loci"){let{structure:g}=u.layers[0].loci,m=new Map,p=W.Loci.none(g);for(let f=0,I=u.layers.length;f<I;++f){let{loci:C,groups:y}=u.layers[I-f-1];C=W.Loci.subtract(C,p),p=W.Loci.union(C,p),W.Loci.isEmpty(C)||(m.has(y)&&(C=W.Loci.union(C,m.get(y))),m.set(y,C))}let d=[];return m.forEach((f,I)=>{d.push({loci:f,groups:I})}),{kind:"element-loci",layers:d}}else return u}l.merge=i;function a(u,g){if(n(u))return u;if(u.kind==="element-loci"){let{structure:m}=u.layers[0].loci,p=[];for(let d of u.layers){let{loci:f,groups:I}=d,C=W.Loci.remap(f,g);f=W.Loci.remap(C,m),W.Loci.isEmpty(f)||p.push({loci:f,groups:I})}return{kind:"element-loci",layers:p}}else return u}l.filter=a;function A(u,g){let m=[];for(let p=0,d=u.length;p<d;++p){let{script:f,groups:I}=u[p],C=zo.toLoci(f,g);W.Loci.isEmpty(C)||m.push({loci:C,groups:I})}return{kind:"element-loci",layers:m}}l.ofScript=A;function s(u,g){let m=[];for(let p=0,d=u.length;p<d;++p){let{bundle:f,groups:I}=u[p],C=W.Bundle.toLoci(f,g.root);m.push({loci:C,groups:I})}return{kind:"element-loci",layers:m}}l.ofBundle=s;function c(u){let g=[];for(let m=0,p=u.layers.length;m<p;++m){let{loci:d,groups:f}=u.layers[m],I=W.Bundle.fromLoci(d);g.push({bundle:I,groups:f})}return{kind:"element-loci",layers:g}}l.toBundle=c})(si||={});var MX={};ki(MX,{BoxShape3D:()=>igt,ShapeFromObj:()=>Agt,ShapeFromPly:()=>agt,ShapeFromVtp:()=>cgt,getBoxMesh:()=>gH});function IDe(e){let t=new Map,r=null,n=8421504,o=()=>{r!==null&&t.set(r,{Kd:n})},i=e.split(/\r?\n/);for(let a of i){let A=a.trim();if(!(A.length===0||A.charCodeAt(0)===35)){if(A.startsWith("newmtl"))o(),r=A.slice(6).trim(),n=8421504;else if(A.startsWith("Kd")){let s=A.slice(2).trim().split(/\s+/);if(s.length>=3){let c=parseFloat(s[0]),l=parseFloat(s[1]),u=parseFloat(s[2]);n=ke.fromNormalizedRgb(c,l,u)}}}}return o(),t}function hDe(e,t){let r=(e?.vertexColors.length??0)>0,n=e?.materialNames??[],o=n.length>0,i=t!==void 0&&t.size>0&&o,a=n.length>1?_M(n.length):n.length===1?[xt.grey]:[],A={};for(let l=0;l<n.length;++l)A[n[l]]=h.Color(a[l]);let s={uniform:h.Group({color:h.Color(xt.grey)},{isFlat:!0})};i&&(s.given=h.Group({},{isFlat:!0})),s.custom=h.Group(A,{isFlat:!1}),r&&(s.vertex=h.Group({},{isFlat:!0}));let c=r?"vertex":i?"given":o?"custom":"uniform";return{...At.Params,coloring:h.MappedStatic(c,s)}}var $9r=hDe();function Tut(e,t,r){let{coloring:n}=t;if(n.name==="vertex")return[];let o=Math.max(1,e.length);if(n.name==="uniform")return Array(o).fill(n.params.color);if(n.name==="given")return e.length===0?[xt.grey]:e.map(i=>r?.get(i)?.Kd??xt.grey);{if(e.length===0)return[xt.grey];let i=n.params;return e.map(a=>i[a]??xt.grey)}}function Put(e){let t=new Int32Array(e.positionCount);for(let r=0;r<e.triangleCount;++r){let n=r*3,o=e.faceGroups[r];for(let i=0;i<3;++i)t[e.positionIndices[n+i]]=o}return t}function Gut(e,t){let{positionIndices:r,normalIndices:n,faceGroups:o,positionCount:i,triangleCount:a}=e,A=e.normalCount>0,s=t,c=null,l=null;if(!t){c=new Int32Array(i).fill(-1);let u=!1;e:for(let g=0;g<a;++g){let m=g*3,p=o[g];for(let d=0;d<3;++d){let f=r[m+d];if(c[f]===-1)c[f]=p;else if(c[f]!==p){u=!0;break e}}}u?ir&&console.warn("OBJ: position shared across face groups; falling back to vertex duplication"):s=!0}if(s&&A){l=new Int32Array(i).fill(-1);let u=!1;e:for(let g=0;g<a;++g){let m=g*3;for(let p=0;p<3;++p){let d=r[m+p],f=n[m+p];if(l[d]===-1)l[d]=f;else if(l[d]!==f){u=!0;break e}}}u&&(s=!1)}return{canUseIndexedPath:s,posGroups:c,posNormals:l}}async function Nut(e,t,r,n){let{positions:o,normals:i,positionIndices:a,triangleCount:A,positionCount:s}=t,c=t.normalCount>0,{posGroups:l,posNormals:u,usePositionGroups:g}=r,m=5e4,p=We.createState(s,A,n),{vertices:d,normals:f,indices:I,groups:C}=p;for(let Q=0;Q<s;++Q){let E=Q*3;if(qe.add3(d,o[E],o[E+1],o[E+2]),u!==null&&u[Q]>=0){let b=u[Q]*3;qe.add3(f,i[b],i[b+1],i[b+2])}else qe.add3(f,0,0,0);qe.add(C,g?Q:Math.max(0,l[Q])),Q%m===0&&e.shouldUpdate&&await e.update({message:"Building OBJ mesh",current:Q,max:s})}for(let Q=0;Q<A;++Q){let E=Q*3;qe.add3(I,a[E],a[E+1],a[E+2])}let y=We.getMesh(p);return c||At.computeNormals(y),D.updateIfChanged(y.varyingGroup,!0),y}async function Mut(e,t,r,n){let{positions:o,normals:i,positionIndices:a,normalIndices:A,triangleCount:s,faceGroups:c}=t,l=t.normalCount>0,u=5e4,g=We.createState(s*3,s,n),{vertices:m,normals:p,indices:d,groups:f}=g;for(let C=0;C<s;++C){let y=C*3,Q=C*3;for(let E=0;E<3;++E){let b=a[y+E],x=b*3;qe.add3(m,o[x],o[x+1],o[x+2]);let S=l?A[y+E]:-1;if(l&&S>=0){let w=S*3;qe.add3(p,i[w],i[w+1],i[w+2])}else qe.add3(p,0,0,0);qe.add(f,r?b:c[C])}qe.add3(d,Q,Q+1,Q+2),C%u===0&&e.shouldUpdate&&await e.update({message:"Building OBJ mesh",current:C,max:s})}let I=We.getMesh(g);return l||At.computeNormals(I),D.updateIfChanged(I.varyingGroup,!0),I}async function kut(e,t,r,n){let{canUseIndexedPath:o,posGroups:i,posNormals:a}=Gut(t,r);return o?Nut(e,t,{posGroups:i,posNormals:a,usePositionGroups:r},n):Mut(e,t,r,n)}function CDe(e,t,r,n,o){let{source:i,transforms:a}=e,{materialNames:A,vertexColors:s,positionCount:c}=i,l=s.length>0,u;if(n==="vertex"&&l)u=p=>ke.fromNormalizedArray(s,p*3);else if(l&&o)if(n==="uniform"){let p=r[0]??xt.grey;u=()=>p}else u=p=>r[Math.min(o[p],r.length-1)];else u=p=>r[Math.min(p,r.length-1)];let g;l&&o&&A.length>0?g=p=>A[o[p]]??"OBJ Mesh":!l&&A.length>0?g=p=>A[p]??"OBJ Mesh":g=()=>"OBJ Mesh";let m=l?c:r.length>0?r.length:void 0;return Mr.create("obj-mesh",i,t,p=>u(p),()=>1,p=>g(p),a,m)}function Hut(){let e,t,r,n,o,i=null;return async(A,s,c,l)=>{let u=!e||e!==s,g=c.coloring.name,m=Tut(s.source.materialNames,c,s.mtl),p=!t||r!==g||m.length!==t.length||m.some((d,f)=>d!==t[f]);if(u){t=m,r=g;let d=s.source.vertexColors.length>0;i=d?Put(s.source):null,o=await kut(A,s.source,d,l&&l.geometry),n=CDe(s,o,t,r,i)}else p&&(t=m,r=g,n=CDe(s,o,t,r,i));return e=s,n}}function yDe(e,t){return ve.create("Shape Provider",async r=>({label:"Mesh",data:{source:e,transforms:t?.transforms,mtl:t?.mtl},params:hDe(e,t?.mtl),getShape:Hut(),geometryUtils:At.Utils}))}function xDe(e){let t=e&&e.getElement("vertex"),r=e&&e.getElement("material"),n={group:"",vRed:"",vGreen:"",vBlue:"",mRed:"",mGreen:"",mBlue:""},o=[["",""]],i=[["",""]];if(t){for(let s=0,c=t.propertyNames.length;s<c;++s){let l=t.propertyNames[s],u=t.propertyTypes[s];(u==="uchar"||u==="uint8"||u==="ushort"||u==="uint16"||u==="uint"||u==="uint32"||u==="int")&&o.push([l,l]),(u==="uchar"||u==="uint8")&&i.push([l,l])}t.propertyNames.includes("atomid")?n.group="atomid":t.propertyNames.includes("material_index")&&(n.group="material_index"),t.propertyNames.includes("red")&&(n.vRed="red"),t.propertyNames.includes("green")&&(n.vGreen="green"),t.propertyNames.includes("blue")&&(n.vBlue="blue")}let a=[["",""]];if(r){for(let s=0,c=r.propertyNames.length;s<c;++s){let l=r.propertyNames[s],u=r.propertyTypes[s];(u==="uchar"||u==="uint8")&&a.push([l,l])}r.propertyNames.includes("red")&&(n.mRed="red"),r.propertyNames.includes("green")&&(n.mGreen="green"),r.propertyNames.includes("blue")&&(n.mBlue="blue")}let A=n.vRed&&n.vGreen&&n.vBlue?"vertex":n.mRed&&n.mGreen&&n.mBlue?"material":"uniform";return{...At.Params,coloring:h.MappedStatic(A,{vertex:h.Group({red:h.Select(n.vRed,i,{label:"Red Property"}),green:h.Select(n.vGreen,i,{label:"Green Property"}),blue:h.Select(n.vBlue,i,{label:"Blue Property"})},{isFlat:!0}),material:h.Group({red:h.Select(n.mRed,a,{label:"Red Property"}),green:h.Select(n.mGreen,a,{label:"Green Property"}),blue:h.Select(n.mBlue,a,{label:"Blue Property"})},{isFlat:!0}),uniform:h.Group({color:h.Color(xt.grey),saturation:h.Numeric(0,{min:-6,max:6,step:.1}),lightness:h.Numeric(0,{min:-6,max:6,step:.1})},{isFlat:!0})}),grouping:h.MappedStatic(n.group?"vertex":"none",{vertex:h.Group({group:h.Select(n.group,o,{label:"Group Property"})},{isFlat:!0}),none:h.Group({})})}}var QDe=xDe();function Vut(e,t,r,n,o){let{vertices:i,normals:a,groups:A}=r,s=n.getProperty("x"),c=n.getProperty("y"),l=n.getProperty("z");if(!s||!c||!l)throw new Error("missing coordinate properties");let u=n.getProperty("nx"),g=n.getProperty("ny"),m=n.getProperty("nz"),p=!!u&&!!g&&!!m;for(let d=e;d<t;++d)qe.add3(i,s.value(d),c.value(d),l.value(d)),p&&qe.add3(a,u.value(d),g.value(d),m.value(d)),qe.add(A,o[d])}function _ut(e,t,r,n){let{indices:o}=r;for(let i=e;i<t;++i){let{entries:a,count:A}=n.value(i);A===3?qe.add3(o,a[0],a[1],a[2]):A===4&&(qe.add3(o,a[2],a[1],a[0]),qe.add3(o,a[2],a[0],a[3]))}}async function Yut(e,t,r,n,o){let i=We.createState(t.rowCount,t.rowCount/4,o),a=t.getProperty("x"),A=t.getProperty("y"),s=t.getProperty("z");if(!a||!A||!s)throw new Error("missing coordinate properties");let c=t.getProperty("nx"),l=t.getProperty("ny"),u=t.getProperty("nz"),g=!!c&&!!l&&!!u,m=1e5;for(let d=0,f=t.rowCount;d<f;d+=m)Vut(d,Math.min(d+m,f),i,t,n),e.shouldUpdate&&await e.update({message:"adding ply mesh vertices",current:d,max:f});for(let d=0,f=r.rowCount;d<f;d+=m)_ut(d,Math.min(d+m,f),i,r),e.shouldUpdate&&await e.update({message:"adding ply mesh faces",current:d,max:f});let p=We.getMesh(i);return g||At.computeNormals(p),D.updateIfChanged(p.varyingGroup,!0),p}var kh=K.Schema.int;function Out(e,t){let{grouping:r}=t,{rowCount:n}=e,o=r.name==="vertex"?e.getProperty(r.params.group):void 0,i=r.name==="vertex"?Ra(r.params.group):"Vertex",a=o?o.toArray({array:Uint32Array}):QA(new Uint32Array(n)),A=o?Es(a):n-1,s=new Uint32Array(A+1);for(let c=0,l=a.length;c<l;++c)s[a[c]]=c;return{ids:a,map:s,label:i}}function EDe(e,t,r){let{coloring:n}=r,{rowCount:o}=e,i,a,A;if(n.name==="vertex")i=e.getProperty(n.params.red)||K.ofConst(127,o,kh),a=e.getProperty(n.params.green)||K.ofConst(127,o,kh),A=e.getProperty(n.params.blue)||K.ofConst(127,o,kh);else if(n.name==="material")i=t&&t.getProperty(n.params.red)||K.ofConst(127,o,kh),a=t&&t.getProperty(n.params.green)||K.ofConst(127,o,kh),A=t&&t.getProperty(n.params.blue)||K.ofConst(127,o,kh);else{let s=n.params.color;s=ke.saturate(s,n.params.saturation),s=ke.lighten(s,n.params.lightness);let[c,l,u]=ke.toRgb(s);i=K.ofConst(c,o,kh),a=K.ofConst(l,o,kh),A=K.ofConst(u,o,kh)}return{kind:n.name,red:i,green:a,blue:A}}function bDe(e,t,r,n){let{kind:o,red:i,green:a,blue:A}=r,{ids:s,map:c,label:l}=n,{source:u,transforms:g}=e,m=Es(s)+1;return Mr.create("ply-mesh",u,t,p=>{let d=o==="material"?p:c[p];return ke.fromRgb(i.value(d),a.value(d),A.value(d))},()=>1,p=>`${l} ${s[p]}`,g,m)}function Jut(){let e,t,r,n,o,i;return async(A,s,c,l)=>{let u=s.source.getElement("vertex");if(!u)throw new Error("missing vertex element");let g=s.source.getElement("face");if(!g)throw new Error("missing face element");let m=s.source.getElement("material"),p=!1,d=!1;return(!e||e!==s)&&(p=!0),(!t||!h.isParamEqual(QDe.grouping,t.grouping,c.grouping))&&(p=!0),(!t||!h.isParamEqual(QDe.coloring,t.coloring,c.coloring))&&(d=!0),p?(o=EDe(u,m,c),i=Out(u,c),n=await Yut(A,u,g,i.ids,l&&l.geometry),r=bDe(s,n,o,i)):d&&(o=EDe(u,m,c),r=bDe(s,n,o,i)),e=s,t=ii(c),r}}function SDe(e,t){return ve.create("Shape Provider",async r=>({label:"Mesh",data:{source:e,transforms:t?.transforms},params:xDe(e),getShape:Jut(),geometryUtils:At.Utils}))}var zut=[Y.identity()];function uH(e){if(!isFinite(e))return e.toString();let t=Math.abs(e);return t===0?"0":t<.001||t>=1e5?e.toExponential(2):e.toPrecision(3)}function DDe(e,t){let r,n=1,o="";if(t.startsWith("point:")){o=t.slice(6);let m=e.pointData.get(o);if(!m)return"";r=m.values.toArray(),n=m.numberOfComponents}else if(t.startsWith("cell:")){o=t.slice(5);let m=e.cellData.get(o);if(!m)return"";r=m.values.toArray(),n=m.numberOfComponents}if(!r)return"";let i=r.length/n,a=1/0,A=-1/0,s=0,c=0;for(let m=0;m<i;m++){let p;if(n===1)p=r[m];else{let d=0;for(let f=0;f<n;f++)d+=r[m*n+f]**2;p=Math.sqrt(d)}p<a&&(a=p),p>A&&(A=p),s+=p,c+=p*p}let l=s/i,u=Math.sqrt(Math.max(0,c/i-l*l)),g=n>1?`${n}-comp magnitude`:"scalar";return`${o} (${g}, n=${i})
|
|
min: ${uH(a)} max: ${uH(A)}
|
|
mean: ${uH(l)} \u03C3: ${uH(u)}`}function Kut(e){if(!e)return[["","No attributes"]];let t=[];for(let[r,n]of e.pointData){let o=n.numberOfComponents;t.push([`point:${r}`,o>1?`Point: ${r} (mag)`:`Point: ${r}`])}for(let[r,n]of e.cellData){let o=n.numberOfComponents;t.push([`cell:${r}`,o>1?`Cell: ${r} (mag)`:`Cell: ${r}`])}return t.length>0?t:[["","No attributes"]]}function jut(e){if(!e)return"";for(let[t,r]of e.cellData)if(r.numberOfComponents===1)return`cell:${t}`;for(let[t,r]of e.pointData)if(r.numberOfComponents===1)return`point:${t}`;return e.cellData.size>0?`cell:${e.cellData.keys().next().value}`:e.pointData.size>0?`point:${e.pointData.keys().next().value}`:""}function Wut(e){let t=1/0,r=-1/0;for(let n=0;n<e.length;n++)e[n]<t&&(t=e[n]),e[n]>r&&(r=e[n]);return[t===1/0?0:t,r===-1/0?1:r]}function vDe(e,t){let r=Kut(e),n=jut(e),o=e&&n?DDe(e,n):"",i=(e?.pointData.size??0)+(e?.cellData.size??0)>0;return{...At.Params,doubleSided:{...At.Params.doubleSided,defaultValue:!0},interior:{...At.Params.interior,defaultValue:{...At.Params.interior.defaultValue,colorStrength:0}},colorTheme:h.MappedStatic(i?"attribute":"uniform",{attribute:h.Group({name:h.Select(n,r,{help:()=>({description:t?t():o})}),colors:h.Select("viridis",hG),domain:h.MappedStatic("auto",{custom:h.Interval([-1,1],{step:.001}),auto:h.Group({symmetric:h.Boolean(!1,{description:"If true the automatic range is determined as [-|max|, |max|]."})})})}),uniform:h.Group({color:h.Color(xt.grey,{label:"Uniform Color"})})},{isEssential:!0}),scale:h.Numeric(1,{min:.01,max:100,step:.01},{label:"Scale",isEssential:!0,description:"Uniform scale factor applied to the mesh."})}}var Xut=vDe();async function Zut(e,t,r){let{positions:n,connectivity:o,numberOfPoints:i,numberOfTriangles:a}=t,A=We.createState(i,a,r),{vertices:s,indices:c,groups:l}=A,u=5e4;for(let m=0,p=i;m<p;m+=u){let d=Math.min(m+u,p);for(let f=m;f<d;f++)qe.add3(s,n[3*f],n[3*f+1],n[3*f+2]),qe.add(l,f);e.shouldUpdate&&await e.update({message:"Building VTP mesh...",current:m,max:i+a})}for(let m=0,p=a;m<p;m+=u){let d=Math.min(m+u,p);for(let f=m;f<d;f++)qe.add3(c,o[3*f],o[3*f+1],o[3*f+2]);e.shouldUpdate&&await e.update({message:"Building VTP mesh...",current:i+m,max:i+a})}let g=We.getMesh(A);return At.computeNormals(g),D.updateIfChanged(g.varyingGroup,!0),g}function qut(e,t){let{connectivity:r,triangleCellIndex:n,numberOfPoints:o}=e,i=r.length/3,a=new Float64Array(o),A=new Uint32Array(o);for(let c=0;c<i;c++){let l=t[n[c]],u=r[3*c],g=r[3*c+1],m=r[3*c+2];a[u]+=l,A[u]++,a[g]+=l,A[g]++,a[m]+=l,A[m]++}let s=new Float64Array(o);for(let c=0;c<o;c++)s[c]=A[c]>0?a[c]/A[c]:0;return s}function $ut(e,t,r){let{connectivity:n,triangleCellIndex:o,numberOfPoints:i}=e,a=n.length/3,A=new Float64Array(i*r),s=new Uint32Array(i);for(let l=0;l<a;l++){let u=o[l],g=n[3*l],m=n[3*l+1],p=n[3*l+2];for(let d=0;d<r;d++){let f=t[u*r+d];A[g*r+d]+=f,A[m*r+d]+=f,A[p*r+d]+=f}s[g]++,s[m]++,s[p]++}let c=new Float64Array(i);for(let l=0;l<i;l++)if(s[l]>0){let u=0;for(let g=0;g<r;g++){let m=A[l*r+g]/s[l];u+=m*m}c[l]=Math.sqrt(u)}return c}function egt(e,t,r){let n=0;for(let o=0;o<r;o++)n+=e[t+o]**2;return Math.sqrt(n)}function tgt(e,t){if(!t)return null;if(t.startsWith("cell:")){let r=e.cellData.get(t.slice(5));if(!r)return null;let n=r.numberOfComponents,o=r.values.toArray();return n===1?{values:qut(e,o),isMagnitude:!1}:{values:$ut(e,o,n),isMagnitude:!0}}if(t.startsWith("point:")){let r=e.pointData.get(t.slice(6));if(!r)return null;let n=r.numberOfComponents,o=r.values.toArray();if(n===1)return{values:o,isMagnitude:!1};let i=o.length/n,a=new Float64Array(i);for(let A=0;A<i;A++)a[A]=egt(o,A*n,n);return{values:a,isMagnitude:!0}}return null}function rgt(e,t){if(e.name==="uniform")return()=>e.params.color;if(!t)return()=>xt.grey;let{values:r,isMagnitude:n}=t,{colors:o,domain:i}=e.params,a,A;if(i.name==="custom")[a,A]=i.params;else if([a,A]=Wut(r),n&&A>0&&(A-a)/A<.01&&(a=0),i.params.symmetric){let c=Math.max(Math.abs(a),Math.abs(A));a=-c,A=c}A-a<1e-9&&(A=a+1e-9);let s=oa.create({listOrName:o,domain:[a,A]});return c=>s.color(r[c])}function ngt(e,t,r,n){let o=Y.fromUniformScaling(Y(),n.scale),a=(e.transforms??zut).map(s=>Y.mul(Y(),s,o)),{numberOfPoints:A}=e.source;return Mr.create("vtp-mesh",e.source,t,r,()=>1,s=>s>=0?`Vertex ${s}`:"",a,A)}function ogt(){let e,t,r,n,o,i=null,a,A="";return{getShape:async(l,u,g,m)=>{let p=Xut,d=!e||e.source!==u.source,f=g.colorTheme.name==="attribute"?g.colorTheme.params.name:null,I=t?t.colorTheme.name==="attribute"?t.colorTheme.params.name:null:void 0,C=d||f!==I,y=!t||!h.isParamEqual(p.colorTheme,t.colorTheme,g.colorTheme),Q=d||C||y,E=d||Q||e?.transforms!==u.transforms||!t||t.scale!==g.scale;return d&&(n=await Zut(l,u.source,m?.geometry)),C&&(i=f?tgt(u.source,f):null,f&&f!==a?(A=DDe(u.source,f),a=f):f||(A="",a=void 0)),Q&&(o=rgt(g.colorTheme,i)),E&&(r=ngt(u,n,o,g)),e=u,(d||Q||E)&&(t=ii(g)),r},getStats:()=>({text:A,attr:a})}}function FDe(e,t){return ve.create("Shape Provider",async()=>{let r=ogt();return{label:"VTP Mesh",data:{source:e,transforms:t?.transforms},params:vDe(e,()=>r.getStats().text),getShape:r.getShape,geometryUtils:At.Utils}})}var igt=Yt.BuiltIn({name:"box-shape-3d",display:"Box Shape",from:te.Root,to:te.Shape.Provider,params:{bottomLeft:h.Vec3(B()),topRight:h.Vec3(B.create(1,1,1)),radius:h.Numeric(.15,{min:.01,max:4,step:.01}),color:h.Color(xt.red)}})({canAutoUpdate(){return!0},apply({params:e}){return ve.create("Shape Representation",async t=>new te.Shape.Provider({label:"Box",data:e,params:At.Params,getShape:(r,n)=>{let o=gH(Ct.create(e.bottomLeft,e.topRight),e.radius);return Mr.create("Box",n,o,()=>n.color,()=>1,()=>"Box")},geometryUtils:At.Utils},{label:"Box"}))}});function gH(e,t,r){let n=B.sub(B(),e.max,e.min),o=Y.fromTranslation(Y(),B.create(.5,.5,.5)),i=Y.fromScaling(Y(),n),a=Y.fromTranslation(Y(),e.min),A=Y.mul3(Y(),a,i,o),s=We.createState(256,128,r);s.currentGroup=1,We.addCage(s,A,Q0(),t,2,20);let c=We.getMesh(s),l=B.scaleAndAdd(B(),e.min,n,.5),u=B.distance(e.min,l);return c.setBoundingSphere(we.create(l,u)),c}var agt=Yt.BuiltIn({name:"shape-from-ply",display:{name:"Shape from PLY",description:"Create Shape from PLY data"},from:te.Format.Ply,to:te.Shape.Provider,params(e){return{transforms:h.Optional(h.Value([Y.identity()],{isHidden:!0})),label:h.Optional(h.Text("",{isHidden:!0}))}}})({apply({a:e,params:t}){return ve.create("Create shape from PLY",async r=>{let n=await SDe(e.data,t).runInContext(r),o={label:t.label||"Shape"};return new te.Shape.Provider(n,o)})}});var Agt=Yt.BuiltIn({name:"shape-from-obj",display:{name:"Shape from OBJ",description:"Create Shape from OBJ data"},from:te.Format.Obj,to:te.Shape.Provider,params(e){return{transforms:h.Optional(h.Value([Y.identity()],{isHidden:!0})),label:h.Optional(h.Text("",{isHidden:!0})),mtlFile:h.Optional(h.File({accept:".mtl",label:"MTL File"}))}}})({apply({a:e,params:t,cache:r},n){return ve.create("Create shape from OBJ",async o=>{let i;if(t.mtlFile){let s=await n.managers.asset.resolve(t.mtlFile,"string").runInContext(o);r.mtlAsset=s,i=IDe(s.data)}let a=await yDe(e.data,{...t,mtl:i}).runInContext(o),A={label:t.label||"Shape"};return new te.Shape.Provider(a,A)})},dispose({cache:e}){e?.mtlAsset?.dispose()}}),sgt=[Y.identity()];var cgt=Yt.BuiltIn({name:"shape-from-vtp",display:{name:"Shape from VTP",description:"Create Shape from VTP (VTK PolyData) file"},from:te.Format.Vtp,to:te.Shape.Provider,params(e){return{transforms:h.Optional(h.Value(sgt,{isHidden:!0})),label:h.Optional(h.Text("",{isHidden:!0}))}}})({apply({a:e,params:t}){return ve.create("Create shape from VTP",async r=>{let n=await FDe(e.data,t).runInContext(r),o={label:t.label||"VTP Shape"};return new te.Shape.Provider(n,o)})}});var wDe={vertices:new Float32Array([-.5,.5,0,.5,.5,0,-.5,-.5,0,.5,-.5,0]),normals:new Float32Array([0,0,1,0,0,1,0,0,1,0,0,1]),indices:new Uint32Array([0,2,1,1,2,3])},J8r={vertices:wDe.vertices,edges:new Uint32Array([0,1,2,3,3,1,2,0])};function mH(){return wDe}var lgt={...At.Params,color:h.Color(xt.orange),scaleFactor:h.Numeric(1,{min:.1,max:10,step:.1}),variant:h.Select("rectangle",h.arrayToOptions(["rectangle","circle"]),{label:"Shape"}),radialSegments:h.Numeric(64,{min:12,max:256,step:1},{hideIf:e=>e.variant!=="circle"})},RDe={plane:(e,t)=>yi(mgt,At.Utils)},HX={...lgt,visuals:h.MultiSelect(["plane"],h.objectToOptions(RDe))};function ugt(e){return`Best Fit Plane of ${MQ(e,{countsOnly:!0})}`}var Rg=Y(),kX=B();function ggt(e,t,r){let n=We.createState(256,128,r),i=W.Loci.getPrincipalAxesMany(e.locis).boxAxes;if(B.add(kX,i.origin,i.dirC),Y.targetTo(Rg,kX,i.origin,i.dirB),n.currentGroup=0,t.variant==="circle"){Y.mul(Rg,Rg,Y.rotX90),Y.scaleUniformly(Rg,Rg,t.scaleFactor),Y.setTranslation(Rg,i.origin);let a=Math.max(B.magnitude(i.dirA),B.magnitude(i.dirB)),A=YI({radius:a,segments:t.radialSegments});We.addPrimitive(n,Rg,A),We.addPrimitiveFlipped(n,Rg,A)}else{let a=mH();Y.scale(Rg,Rg,$a.size(kX,i)),Y.scaleUniformly(Rg,Rg,t.scaleFactor),Y.setTranslation(Rg,i.origin),We.addPrimitive(n,Rg,a),We.addPrimitiveFlipped(n,Rg,a)}return We.getMesh(n)}function mgt(e,t,r,n){let o=ggt(t,r,n&&n.geometry),i=ugt(t.locis);return Mr.create(i,t,o,()=>r.color,()=>1,()=>i)}function UDe(e,t){let r=Xt.createMulti("Plane",e,t,Xt.StateBuilder,RDe);return r.setState({markerActions:Ko.Highlighting}),r}function us(e,t){return{kind:e,layers:t}}(c=>{c.Empty={kind:"empty-loci",layers:[]};function t(l,u){if(l.layers.length===0&&u.layers.length===0)return!0;if(l.layers.length!==u.layers.length)return!1;for(let g=0,m=l.layers.length;g<m;++g)if(l.layers[g].clear!==u.layers[g].clear||!Ny(l.layers[g].material,u.layers[g].material)||!pr.areEqual(l.layers[g].loci,u.layers[g].loci))return!1;return!0}c.areEqual=t;function r(l){return l.layers.length===0}c.isEmpty=r;function n(l,u){if(l.kind==="element-loci"){let g=[];for(let m of l.layers){let{loci:p,material:d,clear:f}=m;p=W.Loci.remap(p,u),W.Loci.isEmpty(p)||g.push({loci:p,material:d,clear:f})}return{kind:"element-loci",layers:g}}else return l}c.remap=n;function o(l){if(r(l))return l;if(l.kind==="element-loci"){let{structure:u}=l.layers[0].loci,g,m=new Map,p=W.Loci.none(u);for(let f=0,I=l.layers.length;f<I;++f){let{loci:C,material:y,clear:Q}=l.layers[I-f-1];C=W.Loci.subtract(C,p),p=W.Loci.union(C,p),W.Loci.isEmpty(C)||(Q?g=g?W.Loci.union(C,g):C:(m.has(y)&&(C=W.Loci.union(C,m.get(y))),m.set(y,C)))}let d=[];return g&&d.push({loci:g,material:Va(),clear:!0}),m.forEach((f,I)=>{d.push({loci:f,material:I,clear:!1})}),{kind:"element-loci",layers:d}}else return l}c.merge=o;function i(l,u){if(r(l))return l;if(l.kind==="element-loci"){let{structure:g}=l.layers[0].loci,m=[];for(let p of l.layers){let{loci:d,material:f,clear:I}=p,C=W.Loci.remap(d,u);d=W.Loci.remap(C,g),W.Loci.isEmpty(d)||m.push({loci:d,material:f,clear:I})}return{kind:"element-loci",layers:m}}else return l}c.filter=i;function a(l,u){let g=[];for(let m=0,p=l.length;m<p;++m){let{script:d,material:f,clear:I}=l[m],C=zo.toLoci(d,u);W.Loci.isEmpty(C)||g.push({loci:C,material:f,clear:I})}return{kind:"element-loci",layers:g}}c.ofScript=a;function A(l,u){let g=[];for(let m=0,p=l.length;m<p;++m){let{bundle:d,material:f,clear:I}=l[m],C=W.Bundle.toLoci(d,u.root);g.push({loci:C,material:f,clear:I})}return{kind:"element-loci",layers:g}}c.ofBundle=A;function s(l){let u=[];for(let g=0,m=l.layers.length;g<m;++g){let{loci:p,material:d,clear:f}=l.layers[g],I=W.Bundle.fromLoci(p);u.push({bundle:I,material:d,clear:f})}return{kind:"element-loci",layers:u}}c.toBundle=s})(us||={});function gs(e,t){return{kind:e,layers:t}}(c=>{c.Empty={kind:"empty-loci",layers:[]};function t(l,u){if(l.layers.length===0&&u.layers.length===0)return!0;if(l.layers.length!==u.layers.length)return!1;for(let g=0,m=l.layers.length;g<m;++g)if(l.layers[g].value!==u.layers[g].value||!pr.areEqual(l.layers[g].loci,u.layers[g].loci))return!1;return!0}c.areEqual=t;function r(l){return l.layers.length===0}c.isEmpty=r;function n(l,u){if(l.kind==="element-loci"){let g=[];for(let m of l.layers){let{loci:p,value:d}=m;p=W.Loci.remap(p,u),W.Loci.isEmpty(p)||g.push({loci:p,value:d})}return{kind:"element-loci",layers:g}}else return l}c.remap=n;function o(l){if(r(l))return l;if(l.kind==="element-loci"){let{structure:u}=l.layers[0].loci,g=new Map,m=W.Loci.none(u);for(let d=0,f=l.layers.length;d<f;++d){let{loci:I,value:C}=l.layers[f-d-1];I=W.Loci.subtract(I,m),m=W.Loci.union(I,m),W.Loci.isEmpty(I)||(g.has(C)&&(I=W.Loci.union(I,g.get(C))),g.set(C,I))}let p=[];return g.forEach((d,f)=>{p.push({loci:d,value:f})}),{kind:"element-loci",layers:p}}else return l}c.merge=o;function i(l,u){if(r(l))return l;if(l.kind==="element-loci"){let{structure:g}=l.layers[0].loci,m=[];for(let p of l.layers){let{loci:d,value:f}=p,I=W.Loci.remap(d,u);d=W.Loci.remap(I,g),W.Loci.isEmpty(d)||m.push({loci:d,value:f})}return{kind:"element-loci",layers:m}}else return l}c.filter=i;function a(l,u){let g=[];for(let m=0,p=l.length;m<p;++m){let{script:d,value:f}=l[m],I=zo.toLoci(d,u);W.Loci.isEmpty(I)||g.push({loci:I,value:f})}return{kind:"element-loci",layers:g}}c.ofScript=a;function A(l,u){let g=[];for(let m=0,p=l.length;m<p;++m){let{bundle:d,value:f}=l[m],I=W.Bundle.toLoci(d,u.root);g.push({loci:I,value:f})}return{kind:"element-loci",layers:g}}c.ofBundle=A;function s(l){let u=[];for(let g=0,m=l.layers.length;g<m;++g){let{loci:p,value:d}=l.layers[g],f=W.Bundle.fromLoci(p);u.push({bundle:f,value:d})}return{kind:"element-loci",layers:u}}c.toBundle=s})(gs||={});function RA(e,t){return{kind:e,layers:t}}(c=>{c.Empty={kind:"empty-loci",layers:[]};function t(l,u){if(l.layers.length===0&&u.layers.length===0)return!0;if(l.layers.length!==u.layers.length)return!1;for(let g=0,m=l.layers.length;g<m;++g)if(l.layers[g].value!==u.layers[g].value||!pr.areEqual(l.layers[g].loci,u.layers[g].loci))return!1;return!0}c.areEqual=t;function r(l){return l.layers.length===0}c.isEmpty=r;function n(l,u){if(l.kind==="element-loci"){let g=[];for(let m of l.layers){let{loci:p,value:d}=m;p=W.Loci.remap(p,u),W.Loci.isEmpty(p)||g.push({loci:p,value:d})}return{kind:"element-loci",layers:g}}else return l}c.remap=n;function o(l){if(r(l))return l;if(l.kind==="element-loci"){let{structure:u}=l.layers[0].loci,g=new Map,m=W.Loci.none(u);for(let d=0,f=l.layers.length;d<f;++d){let{loci:I,value:C}=l.layers[f-d-1];I=W.Loci.subtract(I,m),m=W.Loci.union(I,m),W.Loci.isEmpty(I)||(g.has(C)&&(I=W.Loci.union(I,g.get(C))),g.set(C,I))}let p=[];return g.forEach((d,f)=>{p.push({loci:d,value:f})}),{kind:"element-loci",layers:p}}else return l}c.merge=o;function i(l,u){if(r(l))return l;if(l.kind==="element-loci"){let{structure:g}=l.layers[0].loci,m=[];for(let p of l.layers){let{loci:d,value:f}=p,I=W.Loci.remap(d,u);d=W.Loci.remap(I,g),W.Loci.isEmpty(d)||m.push({loci:d,value:f})}return{kind:"element-loci",layers:m}}else return l}c.filter=i;function a(l,u){let g=[];for(let m=0,p=l.length;m<p;++m){let{script:d,value:f}=l[m],I=zo.toLoci(d,u);W.Loci.isEmpty(I)||g.push({loci:I,value:f})}return{kind:"element-loci",layers:g}}c.ofScript=a;function A(l,u){let g=[];for(let m=0,p=l.length;m<p;++m){let{bundle:d,value:f}=l[m],I=W.Bundle.toLoci(d,u.root);g.push({loci:I,value:f})}return{kind:"element-loci",layers:g}}c.ofBundle=A;function s(l){let u=[];for(let g=0,m=l.layers.length;g<m;++g){let{loci:p,value:d}=l.layers[g],f=W.Bundle.fromLoci(p);u.push({bundle:f,value:d})}return{kind:"element-loci",layers:u}}c.toBundle=s})(RA||={});var Xu=Yt.BuiltIn({name:"structure-representation-3d",display:"3D Representation",from:te.Molecule.Structure,to:te.Molecule.Structure.Representation3D,params:(e,t)=>{let{registry:r,themes:n}=t.representation.structure,o=r.get(r.default.name);if(!e){let A={help:s=>{let{name:c,params:l}=s,g=n.colorThemeRegistry.get(c).factory({},l);return{description:g.description,legend:g.legend}}};return{type:h.Mapped(r.default.name,r.types,s=>h.Group(r.get(s).getParams(n,Ye.Empty))),colorTheme:h.Mapped(o.defaultColorTheme.name,n.colorThemeRegistry.types,s=>h.Group(n.colorThemeRegistry.get(s).getParams({structure:Ye.Empty})),A),sizeTheme:h.Mapped(o.defaultSizeTheme.name,n.sizeThemeRegistry.types,s=>h.Group(n.sizeThemeRegistry.get(s).getParams({structure:Ye.Empty})))}}let i={structure:e.data},a={help:A=>{let{name:s,params:c}=A,u=n.colorThemeRegistry.get(s).factory(i,c);return{description:u.description,legend:u.legend}}};return{type:h.Mapped(r.default.name,r.getApplicableTypes(e.data),A=>h.Group(r.get(A).getParams(n,e.data))),colorTheme:h.Mapped(o.defaultColorTheme.name,n.colorThemeRegistry.getApplicableTypes(i),A=>h.Group(n.colorThemeRegistry.get(A).getParams(i)),a),sizeTheme:h.Mapped(o.defaultSizeTheme.name,n.sizeThemeRegistry.getApplicableTypes(i),A=>h.Group(n.sizeThemeRegistry.get(A).getParams(i)))}}})({canAutoUpdate({a:e,oldParams:t,newParams:r}){return e.data.elementCount<1e4||t.type.name===r.type.name&&r.type.params.quality!=="custom"},apply({a:e,params:t,cache:r},n){return ve.create("Structure Representation",async o=>{let i={runtime:o,assetManager:n.managers.asset,errorContext:n.errorContext},a=n.representation.structure.registry.get(t.type.name),A=a.getData?.(e.data,t.type.params)||e.data;a.ensureCustomProperties&&await a.ensureCustomProperties.attach(i,A);let s=a.factory({webgl:n.canvas3d?.webgl,...n.representation.structure.themes},a.getParams);await Gi.ensureDependencies(i,n.representation.structure.themes,{structure:A},t),s.setTheme(Gi.create(n.representation.structure.themes,{structure:A},t));let c=t.type.params||{};return await s.createOrUpdate(c,A).runInContext(o),new te.Molecule.Structure.Representation3D({repr:s,sourceData:e.data},{label:a.label})})},update({a:e,b:t,oldParams:r,newParams:n,cache:o},i){return ve.create("Structure Representation",async a=>{if(n.type.name!==r.type.name)return lt.UpdateResult.Recreate;let A=i.representation.structure.registry.get(n.type.name);if(A.mustRecreate?.(r.type.params,n.type.params))return lt.UpdateResult.Recreate;let s=A.getData?.(e.data,n.type.params)||e.data,c={runtime:a,assetManager:i.managers.asset,errorContext:i.errorContext};A.ensureCustomProperties&&await A.ensureCustomProperties.attach(c,s),Gi.releaseDependencies(i.representation.structure.themes,{structure:t.data.sourceData},r),await Gi.ensureDependencies(c,i.representation.structure.themes,{structure:s},n),t.data.repr.setTheme(Gi.create(i.representation.structure.themes,{structure:s},n));let l={...t.data.repr.props,...n.type.params};return await t.data.repr.createOrUpdate(l,s).runInContext(a),t.data.sourceData=e.data,lt.UpdateResult.Updated})},dispose({b:e,params:t},r){if(!e||!t)return;let n=e.data.sourceData,o=r.representation.structure.registry.get(t.type.name);o.ensureCustomProperties&&o.ensureCustomProperties.detach(n),Gi.releaseDependencies(r.representation.structure.themes,{structure:n},t)},interpolate(e,t,r){if(e.colorTheme.name!=="uniform"||t.colorTheme.name!=="uniform")return r<=.5?e:t;let n=e.colorTheme.params.value,o=t.colorTheme.params.value,i=ke.interpolate(n,o,r);return{type:r<=.5?e.type:t.type,colorTheme:{name:"uniform",params:{value:i}},sizeTheme:r<=.5?e.sizeTheme:t.sizeTheme}}}),dgt=Yt.BuiltIn({name:"unwind-structure-assembly-representation-3d",display:"Unwind Assembly 3D Representation",from:te.Molecule.Structure.Representation3D,to:te.Molecule.Structure.Representation3DState,params:{t:h.Numeric(0,{min:0,max:1,step:.01})}})({canAutoUpdate(){return!0},apply({a:e,params:t}){let r=e.data.sourceData,n=new Gh(r);return fX(r,n,t.t),new te.Molecule.Structure.Representation3DState({state:{unitTransforms:n},initialState:{unitTransforms:new Gh(r)},info:r,repr:e.data.repr},{label:`Unwind T = ${t.t.toFixed(2)}`})},update({a:e,b:t,newParams:r,oldParams:n}){let o=t.data.info;if(e.data.sourceData!==o)return lt.UpdateResult.Recreate;if(e.data.repr!==t.data.repr)return lt.UpdateResult.Recreate;if(n.t===r.t)return lt.UpdateResult.Unchanged;let i=t.data.state.unitTransforms;return fX(o,i,r.t),t.label=`Unwind T = ${r.t.toFixed(2)}`,t.data.repr=e.data.repr,lt.UpdateResult.Updated}}),pgt=Yt.BuiltIn({name:"explode-structure-representation-3d",display:"Explode 3D Representation",from:te.Molecule.Structure.Representation3D,to:te.Molecule.Structure.Representation3DState,params:{t:h.Numeric(0,{min:0,max:1,step:.01})}})({canAutoUpdate(){return!0},apply({a:e,params:t}){let r=e.data.sourceData,n=new Gh(r);return BX(r,n,t.t,r.root.boundary.sphere),new te.Molecule.Structure.Representation3DState({state:{unitTransforms:n},initialState:{unitTransforms:new Gh(r)},info:r,repr:e.data.repr},{label:`Explode T = ${t.t.toFixed(2)}`})},update({a:e,b:t,newParams:r,oldParams:n}){let o=e.data.sourceData;if(t.data.info!==o)return lt.UpdateResult.Recreate;if(e.data.repr!==t.data.repr)return lt.UpdateResult.Recreate;if(n.t===r.t)return lt.UpdateResult.Unchanged;let i=t.data.state.unitTransforms;return BX(o,i,r.t,o.root.boundary.sphere),t.label=`Explode T = ${r.t.toFixed(2)}`,t.data.repr=e.data.repr,lt.UpdateResult.Updated}}),fgt=Yt.BuiltIn({name:"spin-structure-representation-3d",display:"Spin 3D Representation",from:te.Molecule.Structure.Representation3D,to:te.Molecule.Structure.Representation3DState,params:{t:h.Numeric(0,{min:0,max:1,step:.01}),...QSe}})({canAutoUpdate(){return!0},apply({a:e,params:t}){let r=e.data.sourceData,n=new Gh(r),{axis:o,origin:i}=IX(r.root,t);return CX(r,n,t.t,o,i),new te.Molecule.Structure.Representation3DState({state:{unitTransforms:n},initialState:{unitTransforms:new Gh(r)},info:r,repr:e.data.repr},{label:`Spin T = ${t.t.toFixed(2)}`})},update({a:e,b:t,newParams:r,oldParams:n}){let o=e.data.sourceData;if(t.data.info!==o)return lt.UpdateResult.Recreate;if(e.data.repr!==t.data.repr)return lt.UpdateResult.Recreate;if(n.t===r.t&&n.axis===r.axis&&n.origin===r.origin)return lt.UpdateResult.Unchanged;let i=t.data.state.unitTransforms,{axis:a,origin:A}=IX(o.root,r);return CX(o,i,r.t,a,A),t.label=`Spin T = ${r.t.toFixed(2)}`,t.data.repr=e.data.repr,lt.UpdateResult.Updated}}),Bgt=Yt.BuiltIn({name:"overpaint-structure-representation-3d-from-script",display:"Overpaint 3D Representation",from:te.Molecule.Structure.Representation3D,to:te.Molecule.Structure.Representation3DState,params:()=>({layers:h.ObjectList({script:h.Script(zo("(sel.atom.all)","mol-script")),color:h.Color(xt.blueviolet),clear:h.Boolean(!1)},e=>`${e.clear?"Clear":ke.toRgbString(e.color)}`,{defaultValue:[{script:zo("(sel.atom.all)","mol-script"),color:xt.blueviolet,clear:!1}]})})})({canAutoUpdate(){return!0},apply({a:e,params:t}){let r=e.data.sourceData,n=e.data.repr.geometryVersion,o=cs.ofScript(t.layers,r);return new te.Molecule.Structure.Representation3DState({state:{overpaint:o},initialState:{overpaint:cs.Empty},info:{structure:r,geometryVersion:n},repr:e.data.repr},{label:`Overpaint (${o.layers.length} Layers)`})},update({a:e,b:t,newParams:r,oldParams:n}){let o=t.data.info,i=e.data.sourceData;if(i!==o.structure)return lt.UpdateResult.Recreate;if(e.data.repr!==t.data.repr)return lt.UpdateResult.Recreate;let a=e.data.repr.geometryVersion;if(a!==o.geometryVersion&&pm(e.data.repr.props))return lt.UpdateResult.Recreate;let A=t.data.state.overpaint,s=cs.ofScript(r.layers,i);return cs.areEqual(A,s)?lt.UpdateResult.Unchanged:(o.geometryVersion=a,t.data.state.overpaint=s,t.data.repr=e.data.repr,t.label=`Overpaint (${s.layers.length} Layers)`,lt.UpdateResult.Updated)}}),VX=Yt.BuiltIn({name:"overpaint-structure-representation-3d-from-bundle",display:"Overpaint 3D Representation",from:te.Molecule.Structure.Representation3D,to:te.Molecule.Structure.Representation3DState,params:()=>({layers:h.ObjectList({bundle:h.Value(W.Bundle.Empty),color:h.Color(xt.blueviolet),clear:h.Boolean(!1)},e=>`${e.clear?"Clear":ke.toRgbString(e.color)}`,{defaultValue:[{bundle:W.Bundle.Empty,color:xt.blueviolet,clear:!1}],isHidden:!0})})})({canAutoUpdate(){return!0},apply({a:e,params:t}){let r=e.data.sourceData,n=e.data.repr.geometryVersion,o=cs.ofBundle(t.layers,r);return new te.Molecule.Structure.Representation3DState({state:{overpaint:o},initialState:{overpaint:cs.Empty},info:{structure:r,geometryVersion:n},repr:e.data.repr},{label:`Overpaint (${o.layers.length} Layers)`})},update({a:e,b:t,newParams:r,oldParams:n}){let o=t.data.info,i=e.data.sourceData;if(i!==o.structure)return lt.UpdateResult.Recreate;if(e.data.repr!==t.data.repr)return lt.UpdateResult.Recreate;let a=e.data.repr.geometryVersion;if(a!==o.geometryVersion&&pm(e.data.repr.props))return lt.UpdateResult.Recreate;let A=t.data.state.overpaint,s=cs.ofBundle(r.layers,i);return cs.areEqual(A,s)?lt.UpdateResult.Unchanged:(o.geometryVersion=a,t.data.state.overpaint=s,t.data.repr=e.data.repr,t.label=`Overpaint (${s.layers.length} Layers)`,lt.UpdateResult.Updated)}}),Igt=Yt.BuiltIn({name:"transparency-structure-representation-3d-from-script",display:"Transparency 3D Representation",from:te.Molecule.Structure.Representation3D,to:te.Molecule.Structure.Representation3DState,params:()=>({layers:h.ObjectList({script:h.Script(zo("(sel.atom.all)","mol-script")),value:h.Numeric(.5,{min:0,max:1,step:.01},{label:"Transparency"})},e=>`Transparency (${e.value})`,{defaultValue:[{script:zo("(sel.atom.all)","mol-script"),value:.5}]})})})({canAutoUpdate(){return!0},apply({a:e,params:t}){let r=e.data.sourceData,n=e.data.repr.geometryVersion,o=ls.ofScript(t.layers,r);return new te.Molecule.Structure.Representation3DState({state:{transparency:o},initialState:{transparency:ls.Empty},info:{structure:r,geometryVersion:n},repr:e.data.repr},{label:`Transparency (${o.layers.length} Layers)`})},update({a:e,b:t,newParams:r,oldParams:n}){let o=t.data.info,i=e.data.sourceData;if(i!==o.structure)return lt.UpdateResult.Recreate;if(e.data.repr!==t.data.repr)return lt.UpdateResult.Recreate;let a=e.data.repr.geometryVersion;if(a!==o.geometryVersion&&pm(e.data.repr.props))return lt.UpdateResult.Recreate;let A=t.data.state.transparency,s=ls.ofScript(r.layers,i);return ls.areEqual(A,s)?lt.UpdateResult.Unchanged:(o.geometryVersion=a,t.data.state.transparency=s,t.data.repr=e.data.repr,t.label=`Transparency (${s.layers.length} Layers)`,lt.UpdateResult.Updated)}}),Cgt=Yt.BuiltIn({name:"transparency-structure-representation-3d-from-bundle",display:"Transparency 3D Representation",from:te.Molecule.Structure.Representation3D,to:te.Molecule.Structure.Representation3DState,params:()=>({layers:h.ObjectList({bundle:h.Value(W.Bundle.Empty),value:h.Numeric(.5,{min:0,max:1,step:.01},{label:"Transparency"})},e=>`Transparency (${e.value})`,{defaultValue:[{bundle:W.Bundle.Empty,value:.5}],isHidden:!0})})})({canAutoUpdate(){return!0},apply({a:e,params:t}){let r=e.data.sourceData,n=e.data.repr.geometryVersion,o=ls.ofBundle(t.layers,r);return new te.Molecule.Structure.Representation3DState({state:{transparency:o},initialState:{transparency:ls.Empty},info:{structure:r,geometryVersion:n},repr:e.data.repr},{label:`Transparency (${o.layers.length} Layers)`})},update({a:e,b:t,newParams:r,oldParams:n}){let o=t.data.info,i=e.data.sourceData;if(i!==o.structure)return lt.UpdateResult.Recreate;if(e.data.repr!==t.data.repr)return lt.UpdateResult.Recreate;let a=e.data.repr.geometryVersion;if(a!==o.geometryVersion&&pm(e.data.repr.props))return lt.UpdateResult.Recreate;let A=t.data.state.transparency,s=ls.ofBundle(r.layers,i);return ls.areEqual(A,s)?lt.UpdateResult.Unchanged:(o.geometryVersion=a,t.data.state.transparency=s,t.data.repr=e.data.repr,t.label=`Transparency (${s.layers.length} Layers)`,lt.UpdateResult.Updated)}}),hgt=Yt.BuiltIn({name:"emissive-structure-representation-3d-from-script",display:"Emissive 3D Representation",from:te.Molecule.Structure.Representation3D,to:te.Molecule.Structure.Representation3DState,params:()=>({layers:h.ObjectList({script:h.Script(zo("(sel.atom.all)","mol-script")),value:h.Numeric(.5,{min:0,max:1,step:.01},{label:"Emissive"})},e=>`Emissive (${e.value})`,{defaultValue:[{script:zo("(sel.atom.all)","mol-script"),value:.5}]})})})({canAutoUpdate(){return!0},apply({a:e,params:t}){let r=e.data.sourceData,n=e.data.repr.geometryVersion,o=gs.ofScript(t.layers,r);return new te.Molecule.Structure.Representation3DState({state:{emissive:o},initialState:{emissive:gs.Empty},info:{structure:r,geometryVersion:n},repr:e.data.repr},{label:`Emissive (${o.layers.length} Layers)`})},update({a:e,b:t,newParams:r,oldParams:n}){let o=t.data.info,i=e.data.sourceData;if(i!==o.structure)return lt.UpdateResult.Recreate;if(e.data.repr!==t.data.repr)return lt.UpdateResult.Recreate;let a=e.data.repr.geometryVersion;if(a!==o.geometryVersion&&pm(e.data.repr.props))return lt.UpdateResult.Recreate;let A=t.data.state.emissive,s=gs.ofScript(r.layers,i);return gs.areEqual(A,s)?lt.UpdateResult.Unchanged:(o.geometryVersion=a,t.data.state.emissive=s,t.data.repr=e.data.repr,t.label=`Emissive (${s.layers.length} Layers)`,lt.UpdateResult.Updated)}}),ygt=Yt.BuiltIn({name:"emissive-structure-representation-3d-from-bundle",display:"Emissive 3D Representation",from:te.Molecule.Structure.Representation3D,to:te.Molecule.Structure.Representation3DState,params:()=>({layers:h.ObjectList({bundle:h.Value(W.Bundle.Empty),value:h.Numeric(.5,{min:0,max:1,step:.01},{label:"Emissive"})},e=>`Emissive (${e.value})`,{defaultValue:[{bundle:W.Bundle.Empty,value:.5}],isHidden:!0})})})({canAutoUpdate(){return!0},apply({a:e,params:t}){let r=e.data.sourceData,n=e.data.repr.geometryVersion,o=gs.ofBundle(t.layers,r);return new te.Molecule.Structure.Representation3DState({state:{emissive:o},initialState:{emissive:gs.Empty},info:{structure:r,geometryVersion:n},repr:e.data.repr},{label:`Emissive (${o.layers.length} Layers)`})},update({a:e,b:t,newParams:r,oldParams:n}){let o=t.data.info,i=e.data.sourceData;if(i!==o.structure)return lt.UpdateResult.Recreate;if(e.data.repr!==t.data.repr)return lt.UpdateResult.Recreate;let a=e.data.repr.geometryVersion;if(a!==o.geometryVersion&&pm(e.data.repr.props))return lt.UpdateResult.Recreate;let A=t.data.state.emissive,s=gs.ofBundle(r.layers,i);return gs.areEqual(A,s)?lt.UpdateResult.Unchanged:(o.geometryVersion=a,t.data.state.emissive=s,t.data.repr=e.data.repr,t.label=`Emissive (${s.layers.length} Layers)`,lt.UpdateResult.Updated)}}),Qgt=Yt.BuiltIn({name:"substance-structure-representation-3d-from-script",display:"Substance 3D Representation",from:te.Molecule.Structure.Representation3D,to:te.Molecule.Structure.Representation3DState,params:()=>({layers:h.ObjectList({script:h.Script(zo("(sel.atom.all)","mol-script")),material:Va.getParam(),clear:h.Boolean(!1)},e=>`${e.clear?"Clear":Va.toString(e.material)}`,{defaultValue:[{script:zo("(sel.atom.all)","mol-script"),material:Va({roughness:1}),clear:!1}]})})})({canAutoUpdate(){return!0},apply({a:e,params:t}){let r=e.data.sourceData,n=e.data.repr.geometryVersion,o=us.ofScript(t.layers,r);return new te.Molecule.Structure.Representation3DState({state:{substance:o},initialState:{substance:us.Empty},info:{structure:r,geometryVersion:n},repr:e.data.repr},{label:`Substance (${o.layers.length} Layers)`})},update({a:e,b:t,newParams:r,oldParams:n}){let o=t.data.info,i=e.data.sourceData;if(i!==o.structure)return lt.UpdateResult.Recreate;if(e.data.repr!==t.data.repr)return lt.UpdateResult.Recreate;let a=e.data.repr.geometryVersion;if(a!==o.geometryVersion&&pm(e.data.repr.props))return lt.UpdateResult.Recreate;let A=t.data.state.substance,s=us.ofScript(r.layers,i);return us.areEqual(A,s)?lt.UpdateResult.Unchanged:(o.geometryVersion=a,t.data.state.substance=s,t.data.repr=e.data.repr,t.label=`Substance (${s.layers.length} Layers)`,lt.UpdateResult.Updated)}}),Egt=Yt.BuiltIn({name:"substance-structure-representation-3d-from-bundle",display:"Substance 3D Representation",from:te.Molecule.Structure.Representation3D,to:te.Molecule.Structure.Representation3DState,params:()=>({layers:h.ObjectList({bundle:h.Value(W.Bundle.Empty),material:Va.getParam(),clear:h.Boolean(!1)},e=>`${e.clear?"Clear":Va.toString(e.material)}`,{defaultValue:[{bundle:W.Bundle.Empty,material:Va({roughness:1}),clear:!1}],isHidden:!0})})})({canAutoUpdate(){return!0},apply({a:e,params:t}){let r=e.data.sourceData,n=e.data.repr.geometryVersion,o=us.ofBundle(t.layers,r);return new te.Molecule.Structure.Representation3DState({state:{substance:o},initialState:{substance:us.Empty},info:{structure:r,geometryVersion:n},repr:e.data.repr},{label:`Substance (${o.layers.length} Layers)`})},update({a:e,b:t,newParams:r,oldParams:n}){let o=t.data.info,i=e.data.sourceData;if(i!==o.structure)return lt.UpdateResult.Recreate;if(e.data.repr!==t.data.repr)return lt.UpdateResult.Recreate;let a=e.data.repr.geometryVersion;if(a!==o.geometryVersion&&pm(e.data.repr.props))return lt.UpdateResult.Recreate;let A=t.data.state.substance,s=us.ofBundle(r.layers,i);return us.areEqual(A,s)?lt.UpdateResult.Unchanged:(o.geometryVersion=a,t.data.state.substance=s,t.data.repr=e.data.repr,t.label=`Substance (${s.layers.length} Layers)`,lt.UpdateResult.Updated)}}),bgt=Yt.BuiltIn({name:"clipping-structure-representation-3d-from-script",display:"Clipping 3D Representation",from:te.Molecule.Structure.Representation3D,to:te.Molecule.Structure.Representation3DState,params:()=>({layers:h.ObjectList({script:h.Script(zo("(sel.atom.all)","mol-script")),groups:h.Converted(e=>si.Groups.toNames(e),e=>si.Groups.fromNames(e),h.MultiSelect(Du(si.Groups.Names),h.objectToOptions(si.Groups.Names)))},e=>`${si.Groups.toNames(e.groups).length} group(s)`,{defaultValue:[{script:zo("(sel.atom.all)","mol-script"),groups:si.Groups.Flag.None}]})})})({canAutoUpdate(){return!0},apply({a:e,params:t}){let r=e.data.sourceData,n=si.ofScript(t.layers,r);return new te.Molecule.Structure.Representation3DState({state:{clipping:n},initialState:{clipping:si.Empty},info:r,repr:e.data.repr},{label:`Clipping (${n.layers.length} Layers)`})},update({a:e,b:t,newParams:r,oldParams:n}){let o=t.data.info;if(e.data.sourceData!==o)return lt.UpdateResult.Recreate;if(e.data.repr!==t.data.repr)return lt.UpdateResult.Recreate;let i=t.data.state.clipping,a=si.ofScript(r.layers,o);return si.areEqual(i,a)?lt.UpdateResult.Unchanged:(t.data.state.clipping=a,t.data.repr=e.data.repr,t.label=`Clipping (${a.layers.length} Layers)`,lt.UpdateResult.Updated)}}),xgt=Yt.BuiltIn({name:"clipping-structure-representation-3d-from-bundle",display:"Clipping 3D Representation",from:te.Molecule.Structure.Representation3D,to:te.Molecule.Structure.Representation3DState,params:()=>({layers:h.ObjectList({bundle:h.Value(W.Bundle.Empty),groups:h.Converted(e=>si.Groups.toNames(e),e=>si.Groups.fromNames(e),h.MultiSelect(Du(si.Groups.Names),h.objectToOptions(si.Groups.Names)))},e=>`${si.Groups.toNames(e.groups).length} group(s)`,{defaultValue:[{bundle:W.Bundle.Empty,groups:si.Groups.Flag.None}],isHidden:!0})})})({canAutoUpdate(){return!0},apply({a:e,params:t}){let r=e.data.sourceData,n=si.ofBundle(t.layers,r);return new te.Molecule.Structure.Representation3DState({state:{clipping:n},initialState:{clipping:si.Empty},info:r,repr:e.data.repr},{label:`Clipping (${n.layers.length} Layers)`})},update({a:e,b:t,newParams:r,oldParams:n}){let o=t.data.info;if(e.data.sourceData!==o)return lt.UpdateResult.Recreate;if(e.data.repr!==t.data.repr)return lt.UpdateResult.Recreate;let i=t.data.state.clipping,a=si.ofBundle(r.layers,o);return si.areEqual(i,a)?lt.UpdateResult.Unchanged:(t.data.state.clipping=a,t.data.repr=e.data.repr,t.label=`Clipping (${a.layers.length} Layers)`,lt.UpdateResult.Updated)}}),Sgt=Yt.BuiltIn({name:"wiggle-structure-representation-3d-from-script",display:"Wiggle 3D Representation",from:te.Molecule.Structure.Representation3D,to:te.Molecule.Structure.Representation3DState,params:()=>({layers:h.ObjectList({script:h.Script(zo("(sel.atom.all)","mol-script")),value:h.Numeric(5,{min:0,max:1,step:.01},{label:"Wiggle"})},e=>`Wiggle (${e.value})`,{defaultValue:[{script:zo("(sel.atom.all)","mol-script"),value:1}]})})})({canAutoUpdate(){return!0},apply({a:e,params:t}){let r=e.data.sourceData,n=e.data.repr.geometryVersion,o=RA.ofScript(t.layers,r);return new te.Molecule.Structure.Representation3DState({state:{wiggle:o},initialState:{wiggle:RA.Empty},info:{structure:r,geometryVersion:n},repr:e.data.repr},{label:`Wiggle (${o.layers.length} Layers)`})},update({a:e,b:t,newParams:r,oldParams:n}){let o=t.data.info,i=e.data.sourceData;if(i!==o.structure)return lt.UpdateResult.Recreate;if(e.data.repr!==t.data.repr)return lt.UpdateResult.Recreate;let a=t.data.state.wiggle,A=RA.ofScript(r.layers,i);return RA.areEqual(a,A)?lt.UpdateResult.Unchanged:(o.geometryVersion=e.data.repr.geometryVersion,t.data.state.wiggle=A,t.data.repr=e.data.repr,t.label=`Wiggle (${A.layers.length} Layers)`,lt.UpdateResult.Updated)}}),Dgt=Yt.BuiltIn({name:"wiggle-structure-representation-3d-from-bundle",display:"Wiggle 3D Representation",from:te.Molecule.Structure.Representation3D,to:te.Molecule.Structure.Representation3DState,params:()=>({layers:h.ObjectList({bundle:h.Value(W.Bundle.Empty),value:h.Numeric(5,{min:0,max:1,step:.01},{label:"Wiggle"})},e=>`Wiggle (${e.value})`,{defaultValue:[{bundle:W.Bundle.Empty,value:1}],isHidden:!0})})})({canAutoUpdate(){return!0},apply({a:e,params:t}){let r=e.data.sourceData,n=e.data.repr.geometryVersion,o=RA.ofBundle(t.layers,r);return new te.Molecule.Structure.Representation3DState({state:{wiggle:o},initialState:{wiggle:RA.Empty},info:{structure:r,geometryVersion:n},repr:e.data.repr},{label:`Wiggle (${o.layers.length} Layers)`})},update({a:e,b:t,newParams:r,oldParams:n}){let o=t.data.info,i=e.data.sourceData;if(i!==o.structure)return lt.UpdateResult.Recreate;if(e.data.repr!==t.data.repr)return lt.UpdateResult.Recreate;let a=t.data.state.wiggle,A=RA.ofBundle(r.layers,i);return RA.areEqual(a,A)?lt.UpdateResult.Unchanged:(o.geometryVersion=e.data.repr.geometryVersion,t.data.state.wiggle=A,t.data.repr=e.data.repr,t.label=`Wiggle (${A.layers.length} Layers)`,lt.UpdateResult.Updated)}}),vgt=Yt.BuiltIn({name:"theme-strength-representation-3d",display:"Theme Strength 3D Representation",from:te.Molecule.Structure.Representation3D,to:te.Molecule.Structure.Representation3DState,params:()=>({overpaintStrength:h.Numeric(1,{min:0,max:1,step:.01}),transparencyStrength:h.Numeric(1,{min:0,max:1,step:.01}),emissiveStrength:h.Numeric(1,{min:0,max:1,step:.01}),substanceStrength:h.Numeric(1,{min:0,max:1,step:.01}),wiggleStrength:h.Numeric(1,{min:0,max:1,step:.01})})})({canAutoUpdate(){return!0},apply({a:e,params:t}){return new te.Molecule.Structure.Representation3DState({state:{themeStrength:{overpaint:t.overpaintStrength,transparency:t.transparencyStrength,emissive:t.emissiveStrength,substance:t.substanceStrength,wiggle:t.wiggleStrength}},initialState:{themeStrength:{overpaint:1,transparency:1,emissive:1,substance:1,wiggle:1}},info:{},repr:e.data.repr},{label:"Theme Strength",description:`${t.overpaintStrength.toFixed(2)}, ${t.transparencyStrength.toFixed(2)}, ${t.emissiveStrength.toFixed(2)}, ${t.substanceStrength.toFixed(2)}, ${t.wiggleStrength.toFixed(2)}`})},update({a:e,b:t,newParams:r,oldParams:n}){return r.overpaintStrength===t.data.state.themeStrength?.overpaint&&r.transparencyStrength===t.data.state.themeStrength?.transparency&&r.emissiveStrength===t.data.state.themeStrength?.emissive&&r.substanceStrength===t.data.state.themeStrength?.substance&&r.wiggleStrength===t.data.state.themeStrength?.wiggle?lt.UpdateResult.Unchanged:(t.data.state.themeStrength={overpaint:r.overpaintStrength,transparency:r.transparencyStrength,emissive:r.emissiveStrength,substance:r.substanceStrength,wiggle:r.wiggleStrength},t.data.repr=e.data.repr,t.label="Theme Strength",t.description=`${r.overpaintStrength.toFixed(2)}, ${r.transparencyStrength.toFixed(2)}, ${r.emissiveStrength.toFixed(2)}, ${r.substanceStrength.toFixed(2)}, ${r.wiggleStrength.toFixed(2)}`,lt.UpdateResult.Updated)},interpolate(e,t,r){return{overpaintStrength:ho(e.overpaintStrength,t.overpaintStrength,r),transparencyStrength:ho(e.transparencyStrength,t.transparencyStrength,r),emissiveStrength:ho(e.emissiveStrength,t.emissiveStrength,r),substanceStrength:ho(e.substanceStrength,t.substanceStrength,r),wiggleStrength:ho(e.wiggleStrength,t.wiggleStrength,r)}}}),mu;(n=>{function e(o,i,a,A,s,c,l,u){let g=o.representation.volume.registry.get(i),m=o.representation.volume.themes.colorThemeRegistry.get(s||g.defaultColorTheme.name),p=o.representation.volume.themes.sizeThemeRegistry.get(l||g.defaultSizeTheme.name),d=h.getDefaultValues(g.getParams(o.representation.volume.themes,a));return{type:{name:i,params:A?{...d,...A}:d},colorTheme:{name:m.name,params:c?{...m.defaultValues,...c}:m.defaultValues},sizeTheme:{name:p.name,params:u?{...p.defaultValues,...u}:p.defaultValues}}}n.getDefaultParams=e;function t(o,i,a,A,s,c,l){let u=o.representation.volume.registry.get(i),g=o.representation.volume.themes.colorThemeRegistry.get(A||u.defaultColorTheme.name),m=o.representation.volume.themes.sizeThemeRegistry.get(c||u.defaultSizeTheme.name);return{type:{name:i,params:a?{...u.defaultValues,...a}:u.defaultValues},colorTheme:{name:u.defaultColorTheme.name,params:s?{...g.defaultValues,...s}:g.defaultValues},sizeTheme:{name:u.defaultSizeTheme.name,params:l?{...m.defaultValues,...l}:m.defaultValues}}}n.getDefaultParamsStatic=t;function r(o){if(o.isoValue)return Ze.IsoValue.toString(o.isoValue);if(o.renderMode?.params?.isoValue)return Ze.IsoValue.toString(o.renderMode?.params?.isoValue)}n.getDescription=r})(mu||={});var _X=Yt.BuiltIn({name:"volume-representation-3d",display:"3D Representation",from:te.Volume.Data,to:te.Volume.Representation3D,params:(e,t)=>{let{registry:r,themes:n}=t.representation.volume,o=r.get(r.default.name);if(!e)return{type:h.Mapped(r.default.name,r.types,a=>h.Group(r.get(a).getParams(n,Ze.One))),colorTheme:h.Mapped(o.defaultColorTheme.name,n.colorThemeRegistry.types,a=>h.Group(n.colorThemeRegistry.get(a).getParams({volume:Ze.One}))),sizeTheme:h.Mapped(o.defaultSizeTheme.name,n.sizeThemeRegistry.types,a=>h.Group(n.sizeThemeRegistry.get(a).getParams({volume:Ze.One})))};let i={volume:e.data};return{type:h.Mapped(r.default.name,r.types,a=>h.Group(r.get(a).getParams(n,e.data))),colorTheme:h.Mapped(o.defaultColorTheme.name,n.colorThemeRegistry.getApplicableTypes(i),a=>h.Group(n.colorThemeRegistry.get(a).getParams(i))),sizeTheme:h.Mapped(o.defaultSizeTheme.name,n.sizeThemeRegistry.getApplicableTypes(i),a=>h.Group(n.sizeThemeRegistry.get(a).getParams(i)))}}})({canAutoUpdate({oldParams:e,newParams:t}){return e.type.name===t.type.name},apply({a:e,params:t},r){return ve.create("Volume Representation",async n=>{let o={runtime:n,assetManager:r.managers.asset,errorContext:r.errorContext},i=r.representation.volume.registry.get(t.type.name);i.ensureCustomProperties&&await i.ensureCustomProperties.attach(o,e.data);let a=i.factory({webgl:r.canvas3d?.webgl,...r.representation.volume.themes},i.getParams);await Gi.ensureDependencies(o,r.representation.volume.themes,{volume:e.data},t),a.setTheme(Gi.create(r.representation.volume.themes,{volume:e.data,locationKinds:i.locationKinds},t));let A=t.type.params||{};return await a.createOrUpdate(A,e.data).runInContext(n),new te.Volume.Representation3D({repr:a,sourceData:e.data},{label:i.label,description:mu.getDescription(A)})})},update({a:e,b:t,oldParams:r,newParams:n},o){return ve.create("Volume Representation",async i=>{if(n.type.name!==r.type.name)return lt.UpdateResult.Recreate;let a=o.representation.volume.registry.get(n.type.name);if(a.mustRecreate?.(r.type.params,n.type.params))return lt.UpdateResult.Recreate;let A={runtime:i,assetManager:o.managers.asset,errorContext:o.errorContext};a.ensureCustomProperties&&await a.ensureCustomProperties.attach(A,e.data),Gi.releaseDependencies(o.representation.volume.themes,{volume:t.data.sourceData},r),await Gi.ensureDependencies(A,o.representation.volume.themes,{volume:e.data},n),t.data.repr.setTheme(Gi.create(o.representation.volume.themes,{volume:e.data,locationKinds:a.locationKinds},n));let s={...t.data.repr.props,...n.type.params};return await t.data.repr.createOrUpdate(s,e.data).runInContext(i),t.data.sourceData=e.data,t.description=mu.getDescription(s),lt.UpdateResult.Updated})},dispose({b:e,params:t},r){if(!e||!t)return;let n=e.data.sourceData,o=r.representation.volume.registry.get(t.type.name);o.ensureCustomProperties&&o.ensureCustomProperties.detach(n),Gi.releaseDependencies(r.representation.volume.themes,{volume:n},t)}});var Fgt=Yt.BuiltIn({name:"shape-representation-3d",display:"3D Representation",from:te.Shape.Provider,to:te.Shape.Representation3D,params:(e,t)=>e?e.data.params:ot.Params})({canAutoUpdate(){return!0},apply({a:e,params:t}){return ve.create("Shape Representation",async r=>{let n={...h.getDefaultValues(e.data.params),...t},o=yi(e.data.getShape,e.data.geometryUtils);return await o.createOrUpdate(n,e.data.data).runInContext(r),new te.Shape.Representation3D({repr:o,sourceData:e.data},{label:e.data.label})})},update({a:e,b:t,newParams:r}){return ve.create("Shape Representation",async n=>{let o={...t.data.repr.props,...r};return await t.data.repr.createOrUpdate(o,e.data.data).runInContext(n),t.data.sourceData=e.data,lt.UpdateResult.Updated})}});var wgt=Yt.BuiltIn({name:"model-unitcell-3d",display:"Model Unit Cell",from:te.Molecule.Model,to:te.Shape.Representation3D,params:()=>({...vX})})({isApplicable:e=>!!Fo.Provider.get(e.data),canAutoUpdate({oldParams:e,newParams:t}){return!0},apply({a:e,params:t},r){return ve.create("Model Unit Cell",async n=>{let o=Fo.Provider.get(e.data);if(!o)return po.Null;let i=FX(e.data,o,t),a=KSe({webgl:r.canvas3d?.webgl,...r.representation.structure.themes},()=>vX);return await a.createOrUpdate(t,i).runInContext(n),new te.Shape.Representation3D({repr:a,sourceData:i},{label:"Unit Cell",description:o.spacegroup.name})})},update({a:e,b:t,newParams:r}){return ve.create("Model Unit Cell",async n=>{let o=Fo.Provider.get(e.data);if(!o)return lt.UpdateResult.Null;let i={...t.data.repr.props,...r},a=FX(e.data,o,i);return await t.data.repr.createOrUpdate(i,a).runInContext(n),t.data.sourceData=a,lt.UpdateResult.Updated})}});var Rgt=Yt.BuiltIn({name:"structure-bounding-box-3d",display:"Bounding Box",from:te.Molecule.Structure,to:te.Shape.Representation3D,params:{radius:h.Numeric(.05,{min:.01,max:4,step:.01},{isEssential:!0}),color:h.Color(xt.red,{isEssential:!0}),...At.Params}})({canAutoUpdate(){return!0},apply({a:e,params:t},r){return ve.create("Bounding Box",async n=>{let o=yi((i,a,A,s)=>{let c=gH(a.box,a.radius,s?.geometry);return Mr.create("Bouding Box",a,c,()=>a.color,()=>1,()=>"Bounding Box")},At.Utils);return await o.createOrUpdate(t,{box:e.data.boundary.box,radius:t.radius,color:t.color}).runInContext(n),new te.Shape.Representation3D({repr:o,sourceData:e.data},{label:"Bounding Box"})})},update({a:e,b:t,oldParams:r,newParams:n},o){return ve.create("Bounding Box",async i=>(await t.data.repr.createOrUpdate(n,{box:e.data.boundary.box,radius:n.radius,color:n.color}).runInContext(i),t.data.sourceData=e.data,lt.UpdateResult.Updated))}});var Ugt=Yt.BuiltIn({name:"structure-selections-distance-3d",display:"3D Distance",from:te.Molecule.Structure.Selections,to:te.Shape.Representation3D,params:()=>({...RX})})({canAutoUpdate({oldParams:e,newParams:t}){return!0},apply({a:e,params:t},r){return ve.create("Structure Distance",async n=>{let o=wW(e.data),i=eDe({webgl:r.canvas3d?.webgl,...r.representation.structure.themes},()=>RX);return await i.createOrUpdate(t,o).runInContext(n),new te.Shape.Representation3D({repr:i,sourceData:o},{label:"Distance"})})},update({a:e,b:t,oldParams:r,newParams:n},o){return ve.create("Structure Distance",async i=>{let a={...t.data.repr.props,...n},A=wW(e.data);return await t.data.repr.createOrUpdate(a,A).runInContext(i),t.data.sourceData=A,lt.UpdateResult.Updated})}});var Lgt=Yt.BuiltIn({name:"structure-selections-angle-3d",display:"3D Angle",from:te.Molecule.Structure.Selections,to:te.Shape.Representation3D,params:()=>({...GX})})({canAutoUpdate({oldParams:e,newParams:t}){return!0},apply({a:e,params:t},r){return ve.create("Structure Angle",async n=>{let o=RW(e.data),i=mDe({webgl:r.canvas3d?.webgl,...r.representation.structure.themes},()=>GX);return await i.createOrUpdate(t,o).runInContext(n),new te.Shape.Representation3D({repr:i,sourceData:o},{label:"Angle"})})},update({a:e,b:t,oldParams:r,newParams:n},o){return ve.create("Structure Angle",async i=>{let a={...t.data.repr.props,...n},A=RW(e.data);return await t.data.repr.createOrUpdate(a,A).runInContext(i),t.data.sourceData=A,lt.UpdateResult.Updated})}});var Tgt=Yt.BuiltIn({name:"structure-selections-dihedral-3d",display:"3D Dihedral",from:te.Molecule.Structure.Selections,to:te.Shape.Representation3D,params:()=>({...NX})})({canAutoUpdate({oldParams:e,newParams:t}){return!0},apply({a:e,params:t},r){return ve.create("Structure Dihedral",async n=>{let o=UW(e.data),i=BDe({webgl:r.canvas3d?.webgl,...r.representation.structure.themes},()=>NX);return await i.createOrUpdate(t,o).runInContext(n),new te.Shape.Representation3D({repr:i,sourceData:o},{label:"Dihedral"})})},update({a:e,b:t,oldParams:r,newParams:n},o){return ve.create("Structure Dihedral",async i=>{let a={...t.data.repr.props,...n},A=UW(e.data);return await t.data.repr.createOrUpdate(a,A).runInContext(i),t.data.sourceData=A,lt.UpdateResult.Updated})}});var Pgt=Yt.BuiltIn({name:"structure-selections-label-3d",display:"3D Label",from:te.Molecule.Structure.Selections,to:te.Shape.Representation3D,params:()=>({...UX})})({canAutoUpdate({oldParams:e,newParams:t}){return!0},apply({a:e,params:t},r){return ve.create("Structure Label",async n=>{let o=LW(e.data),i=rDe({webgl:r.canvas3d?.webgl,...r.representation.structure.themes},()=>UX);await i.createOrUpdate(t,o).runInContext(n);let a=!!(t.snapshotKey?.trim()||t.tooltip?.trim());return i.setState({pickable:a,markerActions:a?Ko.Highlighting:0}),new te.Shape.Representation3D({repr:i,sourceData:o},{label:"Label"})})},update({a:e,b:t,oldParams:r,newParams:n},o){return ve.create("Structure Label",async i=>{let a={...t.data.repr.props,...n},A=LW(e.data);await t.data.repr.createOrUpdate(a,A).runInContext(i),t.data.sourceData=A;let s=!!(n.snapshotKey?.trim()||n.tooltip?.trim());return t.data.repr.setState({pickable:s,markerActions:s?Ko.Highlighting:0}),lt.UpdateResult.Updated})}});var Ggt=Yt.BuiltIn({name:"structure-selections-orientation-3d",display:"3D Orientation",from:te.Molecule.Structure.Selections,to:te.Shape.Representation3D,params:()=>({...PX})})({canAutoUpdate({oldParams:e,newParams:t}){return!0},apply({a:e,params:t},r){return ve.create("Structure Orientation",async n=>{let o=TW(e.data),i=sDe({webgl:r.canvas3d?.webgl,...r.representation.structure.themes},()=>PX);return await i.createOrUpdate(t,o).runInContext(n),new te.Shape.Representation3D({repr:i,sourceData:o},{label:"Orientation"})})},update({a:e,b:t,oldParams:r,newParams:n},o){return ve.create("Structure Orientation",async i=>{let a={...t.data.repr.props,...n},A=TW(e.data);return await t.data.repr.createOrUpdate(a,A).runInContext(i),t.data.sourceData=A,lt.UpdateResult.Updated})}});var Ngt=Yt.BuiltIn({name:"structure-selections-plane-3d",display:"3D Plane",from:te.Molecule.Structure.Selections,to:te.Shape.Representation3D,params:()=>({...HX})})({canAutoUpdate({oldParams:e,newParams:t}){return!0},apply({a:e,params:t},r){return ve.create("Structure Plane",async n=>{let o=PW(e.data),i=UDe({webgl:r.canvas3d?.webgl,...r.representation.structure.themes},()=>HX);return await i.createOrUpdate(t,o).runInContext(n),new te.Shape.Representation3D({repr:i,sourceData:o},{label:"Plane"})})},update({a:e,b:t,oldParams:r,newParams:n},o){return ve.create("Structure Plane",async i=>{let a={...t.data.repr.props,...n},A=PW(e.data);return await t.data.repr.createOrUpdate(a,A).runInContext(i),t.data.sourceData=A,lt.UpdateResult.Updated})}});var ze={get Data(){return X6},get Misc(){return Z6},get Model(){return tX},get Volume(){return lX},get Representation(){return YX},get Shape(){return MX}};function Qo(e,t,r={}){let n;return{label:e,expression:t,description:r.description||"",category:r.category??"Miscellaneous",isHidden:!!r.isHidden,priority:r.priority||0,referencesCurrent:!!r.referencesCurrent,get query(){return n||(n=au(t)),n},ensureCustomProperties:r.ensureCustomProperties,async getSelection(o,i,a){let A=o.managers.structure.selection.getStructure(a),s=A?Qt.Sequence(a,[A]):Qt.Empty(a);return r.ensureCustomProperties&&await r.ensureCustomProperties({runtime:i,assetManager:o.managers.asset},a),n||(n=au(t)),n(new qo(a,{currentSelection:s}))}}}var Mgt=Qo("All",ce.struct.generator.all(),{category:"",priority:1e3}),kgt=Qo("Current Selection",ce.internal.generator.current(),{category:"",referencesCurrent:!0}),Hgt=Qo("Polymer",ce.struct.modifier.union([ce.struct.generator.atomGroups({"entity-test":ce.core.logic.and([ce.core.rel.eq([ce.ammp("entityType"),"polymer"]),ce.core.str.match([ce.re("(polypeptide|cyclic-pseudo-peptide|peptide-like|nucleotide|peptide nucleic acid)","i"),ce.ammp("entitySubtype")])])})]),{category:"Type"}),Vgt=Qo("Trace",ce.struct.modifier.union([ce.struct.combinator.merge([ce.struct.modifier.union([ce.struct.generator.atomGroups({"entity-test":ce.core.rel.eq([ce.ammp("entityType"),"polymer"]),"chain-test":ce.core.set.has([ce.set("sphere","gaussian"),ce.ammp("objectPrimitive")])})]),ce.struct.modifier.union([ce.struct.generator.atomGroups({"entity-test":ce.core.rel.eq([ce.ammp("entityType"),"polymer"]),"chain-test":ce.core.rel.eq([ce.ammp("objectPrimitive"),"atomistic"]),"atom-test":ce.core.set.has([ce.set("CA","P"),ce.ammp("label_atom_id")])})])])]),{category:"Structure Property"}),Lv=ce.core.logic.and([ce.core.rel.eq([ce.ammp("entityType"),"polymer"]),ce.core.str.match([ce.re("(polypeptide|cyclic-pseudo-peptide|peptide-like)","i"),ce.ammp("entitySubtype")])]),pH=ce.core.logic.and([ce.core.rel.eq([ce.ammp("entityType"),"polymer"]),ce.core.str.match([ce.re("(nucleotide|peptide nucleic acid)","i"),ce.ammp("entitySubtype")])]),j0=ce.core.str.match([ce.re("non-polymer|(amino|carboxy) terminus|peptide-like","i"),ce.ammp("chemCompType")]),_gt=Qo("Backbone",ce.struct.modifier.union([ce.struct.combinator.merge([ce.struct.modifier.union([ce.struct.generator.atomGroups({"entity-test":Lv,"chain-test":ce.core.rel.eq([ce.ammp("objectPrimitive"),"atomistic"]),"residue-test":ce.core.logic.not([j0]),"atom-test":ce.core.set.has([ce.set(...lo.toArray(Uu)),ce.ammp("label_atom_id")])})]),ce.struct.modifier.union([ce.struct.generator.atomGroups({"entity-test":pH,"chain-test":ce.core.rel.eq([ce.ammp("objectPrimitive"),"atomistic"]),"residue-test":ce.core.logic.not([j0]),"atom-test":ce.core.set.has([ce.set(...lo.toArray(th)),ce.ammp("label_atom_id")])})])])]),{category:"Structure Property"}),Ygt=Qo("Sidechain",ce.struct.modifier.union([ce.struct.combinator.merge([ce.struct.modifier.union([ce.struct.generator.atomGroups({"entity-test":Lv,"chain-test":ce.core.rel.eq([ce.ammp("objectPrimitive"),"atomistic"]),"residue-test":ce.core.logic.not([j0]),"atom-test":ce.core.logic.or([ce.core.logic.not([ce.core.set.has([ce.set(...lo.toArray(Uu)),ce.ammp("label_atom_id")])])])})]),ce.struct.modifier.union([ce.struct.generator.atomGroups({"entity-test":pH,"chain-test":ce.core.rel.eq([ce.ammp("objectPrimitive"),"atomistic"]),"residue-test":ce.core.logic.not([j0]),"atom-test":ce.core.logic.or([ce.core.logic.not([ce.core.set.has([ce.set(...lo.toArray(th)),ce.ammp("label_atom_id")])])])})])])]),{category:"Structure Property"}),Ogt=Qo("Sidechain with Trace",ce.struct.modifier.union([ce.struct.combinator.merge([ce.struct.modifier.union([ce.struct.generator.atomGroups({"entity-test":Lv,"chain-test":ce.core.rel.eq([ce.ammp("objectPrimitive"),"atomistic"]),"residue-test":ce.core.logic.not([j0]),"atom-test":ce.core.logic.or([ce.core.logic.not([ce.core.set.has([ce.set(...lo.toArray(Uu)),ce.ammp("label_atom_id")])]),ce.core.rel.eq([ce.ammp("label_atom_id"),"CA"]),ce.core.logic.and([ce.core.rel.eq([ce.ammp("auth_comp_id"),"PRO"]),ce.core.rel.eq([ce.ammp("label_atom_id"),"N"])])])})]),ce.struct.modifier.union([ce.struct.generator.atomGroups({"entity-test":pH,"chain-test":ce.core.rel.eq([ce.ammp("objectPrimitive"),"atomistic"]),"residue-test":ce.core.logic.not([j0]),"atom-test":ce.core.logic.or([ce.core.logic.not([ce.core.set.has([ce.set(...lo.toArray(th)),ce.ammp("label_atom_id")])]),ce.core.rel.eq([ce.ammp("label_atom_id"),"P"])])})])])]),{category:"Structure Property"}),Jgt=Qo("Protein",ce.struct.modifier.union([ce.struct.generator.atomGroups({"entity-test":Lv})]),{category:"Type"}),zgt=Qo("Nucleic",ce.struct.modifier.union([ce.struct.generator.atomGroups({"entity-test":pH})]),{category:"Type"}),Kgt=Qo("Helix",ce.struct.modifier.union([ce.struct.generator.atomGroups({"entity-test":Lv,"residue-test":ce.core.flags.hasAny([ce.ammp("secondaryStructureFlags"),ce.core.type.bitflags([vr.Flag.Helix])])})]),{category:"Structure Property",ensureCustomProperties:(e,t)=>dc.attach(e,t)}),jgt=Qo("Beta Strand/Sheet",ce.struct.modifier.union([ce.struct.generator.atomGroups({"entity-test":Lv,"residue-test":ce.core.flags.hasAny([ce.ammp("secondaryStructureFlags"),ce.core.type.bitflags([vr.Flag.Beta])])})]),{category:"Structure Property",ensureCustomProperties:(e,t)=>dc.attach(e,t)}),Wgt=Qo("Water",ce.struct.modifier.union([ce.struct.generator.atomGroups({"entity-test":ce.core.rel.eq([ce.ammp("entityType"),"water"])})]),{category:"Type"}),Xgt=Qo("Ion",ce.struct.modifier.union([ce.struct.generator.atomGroups({"entity-test":ce.core.rel.eq([ce.ammp("entitySubtype"),"ion"])})]),{category:"Type"}),Zgt=Qo("Lipid",ce.struct.modifier.union([ce.struct.generator.atomGroups({"entity-test":ce.core.rel.eq([ce.ammp("entitySubtype"),"lipid"])})]),{category:"Type"}),fH=Qo("Carbohydrate",ce.struct.modifier.union([ce.struct.generator.atomGroups({"entity-test":ce.core.logic.or([ce.core.rel.eq([ce.ammp("entityType"),"branched"]),ce.core.logic.and([ce.core.rel.eq([ce.ammp("entityType"),"non-polymer"]),ce.core.str.match([ce.re("oligosaccharide","i"),ce.ammp("entitySubtype")])])])})]),{category:"Type"}),LDe=Qo("Carbohydrate with Connected",ce.struct.modifier.union([ce.struct.modifier.includeConnected({0:fH.expression,"layer-count":1,"as-whole-residues":!0})]),{category:"Internal",isHidden:!0}),TDe=Qo("Connected to Carbohydrate",ce.struct.modifier.union([ce.struct.modifier.exceptBy({0:LDe.expression,by:fH.expression})]),{category:"Internal",isHidden:!0}),JX=Qo("Ligand",ce.struct.modifier.union([ce.struct.modifier.exceptBy({0:ce.struct.modifier.union([ce.struct.combinator.merge([ce.struct.modifier.union([ce.struct.generator.atomGroups({"entity-test":ce.core.logic.and([ce.core.logic.or([ce.core.rel.eq([ce.ammp("entityType"),"non-polymer"]),ce.core.rel.neq([ce.ammp("entityPrdId"),""])]),ce.core.logic.not([ce.core.str.match([ce.re("(oligosaccharide|lipid|ion)","i"),ce.ammp("entitySubtype")])])]),"chain-test":ce.core.rel.eq([ce.ammp("objectPrimitive"),"atomistic"]),"residue-test":ce.core.logic.not([ce.core.str.match([ce.re("saccharide","i"),ce.ammp("chemCompType")])])})]),ce.struct.modifier.union([ce.struct.generator.atomGroups({"entity-test":ce.core.rel.eq([ce.ammp("entityType"),"polymer"]),"chain-test":ce.core.rel.eq([ce.ammp("objectPrimitive"),"atomistic"]),"residue-test":j0})])])]),by:ce.struct.combinator.merge([ce.struct.modifier.union([ce.struct.generator.atomGroups({"entity-test":ce.core.rel.eq([ce.ammp("entityType"),"polymer"]),"chain-test":ce.core.rel.eq([ce.ammp("objectPrimitive"),"atomistic"]),"residue-test":ce.core.set.has([ce.set(...lo.toArray($B)),ce.ammp("label_comp_id")])})]),ce.struct.generator.atomGroups({"chain-test":ce.core.rel.eq([ce.ammp("objectPrimitive"),"atomistic"]),"residue-test":ce.core.set.has([ce.set(...lo.toArray(Zz)),ce.ammp("label_comp_id")])})])})]),{category:"Type"}),PDe=Qo("Ligand with Connected",ce.struct.modifier.union([ce.struct.modifier.exceptBy({0:ce.struct.modifier.union([ce.struct.modifier.includeConnected({0:JX.expression,"layer-count":1,"as-whole-residues":!0,"bond-test":ce.core.flags.hasAny([ce.struct.bondProperty.flags(),ce.core.type.bitflags([It.Flag.Covalent|It.Flag.MetallicCoordination])])})]),by:fH.expression})]),{category:"Internal",isHidden:!0}),GDe=Qo("Connected to Ligand",ce.struct.modifier.union([ce.struct.modifier.exceptBy({0:PDe.expression,by:JX.expression})]),{category:"Internal",isHidden:!0}),qgt=Qo("Connected to Ligand or Carbohydrate",ce.struct.modifier.union([ce.struct.combinator.merge([TDe.expression,GDe.expression])]),{category:"Internal",isHidden:!0}),$gt=Qo("Disulfide Bridges",ce.struct.modifier.union([ce.struct.combinator.merge([ce.struct.modifier.union([ce.struct.modifier.wholeResidues([ce.struct.filter.isConnectedTo({0:ce.struct.generator.atomGroups({"residue-test":ce.core.set.has([ce.set("CYS"),ce.ammp("auth_comp_id")]),"atom-test":ce.core.set.has([ce.set("SG"),ce.ammp("label_atom_id")])}),target:ce.struct.generator.atomGroups({"residue-test":ce.core.set.has([ce.set("CYS"),ce.ammp("auth_comp_id")]),"atom-test":ce.core.set.has([ce.set("SG"),ce.ammp("label_atom_id")])}),"bond-test":!0})])]),ce.struct.modifier.union([ce.struct.modifier.wholeResidues([ce.struct.modifier.union([ce.struct.generator.bondedAtomicPairs({0:ce.core.flags.hasAny([ce.struct.bondProperty.flags(),ce.core.type.bitflags([It.Flag.Disulfide])])})])])])])]),{category:"Bond Property"}),emt=Qo("NOS Bridges",ce.struct.modifier.union([ce.struct.modifier.wholeResidues([ce.struct.filter.isConnectedTo({0:ce.struct.generator.atomGroups({"residue-test":ce.core.set.has([ce.set("CSO","LYS"),ce.ammp("auth_comp_id")]),"atom-test":ce.core.set.has([ce.set("OD","NZ"),ce.ammp("label_atom_id")])}),target:ce.struct.generator.atomGroups({"residue-test":ce.core.set.has([ce.set("CSO","LYS"),ce.ammp("auth_comp_id")]),"atom-test":ce.core.set.has([ce.set("OD","NZ"),ce.ammp("label_atom_id")])}),"bond-test":!0})])]),{category:"Bond Property"}),tmt=Qo("Non-standard Residues in Polymers",ce.struct.modifier.union([ce.struct.generator.atomGroups({"entity-test":ce.core.rel.eq([ce.ammp("entityType"),"polymer"]),"chain-test":ce.core.rel.eq([ce.ammp("objectPrimitive"),"atomistic"]),"residue-test":ce.ammp("isNonStandard")})]),{category:"Residue Property"}),rmt=Qo("Coarse Elements",ce.struct.modifier.union([ce.struct.generator.atomGroups({"chain-test":ce.core.set.has([ce.set("sphere","gaussian"),ce.ammp("objectPrimitive")])})]),{category:"Type"}),nmt=Qo("Rings in Residues",ce.struct.modifier.union([ce.struct.generator.rings()]),{category:"Residue Property"}),omt=Qo("Aromatic Rings in Residues",ce.struct.modifier.union([ce.struct.generator.rings({"only-aromatic":!0})]),{category:"Residue Property"}),imt=Qo("Surrounding Residues (5 \u212B) of Selection",ce.struct.modifier.union([ce.struct.modifier.exceptBy({0:ce.struct.modifier.includeSurroundings({0:ce.internal.generator.current(),radius:5,"as-whole-residues":!0}),by:ce.internal.generator.current()})]),{description:"Select residues within 5 \u212B of the current selection.",category:"Manipulate Selection",referencesCurrent:!0}),amt=Qo("Surrounding Ligands (5 \u212B) of Selection",ce.struct.modifier.union([ce.struct.modifier.surroundingLigands({0:ce.internal.generator.current(),radius:5,"include-water":!0})]),{description:"Select ligand components within 5 \u212B of the current selection.",category:"Manipulate Selection",referencesCurrent:!0}),Amt=Qo("Surrounding Atoms (5 \u212B) of Selection",ce.struct.modifier.union([ce.struct.modifier.exceptBy({0:ce.struct.modifier.includeSurroundings({0:ce.internal.generator.current(),radius:5,"as-whole-residues":!1}),by:ce.internal.generator.current()})]),{description:"Select atoms within 5 \u212B of the current selection.",category:"Manipulate Selection",referencesCurrent:!0}),smt=Qo("Inverse / Complement of Selection",ce.struct.modifier.union([ce.struct.modifier.exceptBy({0:ce.struct.generator.all(),by:ce.internal.generator.current()})]),{description:"Select everything not in the current selection.",category:"Manipulate Selection",referencesCurrent:!0}),cmt=Qo("Residues Covalently Bonded to Selection",ce.struct.modifier.union([ce.struct.modifier.includeConnected({0:ce.internal.generator.current(),"layer-count":1,"as-whole-residues":!0})]),{description:"Select residues covalently bonded to current selection.",category:"Manipulate Selection",referencesCurrent:!0}),lmt=Qo("Covalently Bonded Component",ce.struct.modifier.union([ce.struct.modifier.includeConnected({0:ce.internal.generator.current(),"fixed-point":!0})]),{description:"Select covalently bonded component based on current selection.",category:"Manipulate Selection",referencesCurrent:!0}),umt=Qo("Residues with Cov. or Metallic Bond to Selection",ce.struct.modifier.union([ce.struct.modifier.includeConnected({0:ce.internal.generator.current(),"layer-count":1,"as-whole-residues":!0,"bond-test":ce.core.flags.hasAny([ce.struct.bondProperty.flags(),ce.core.type.bitflags([It.Flag.Covalent|It.Flag.MetallicCoordination])])})]),{description:"Select residues with covalent or metallic bond to current selection.",category:"Manipulate Selection",referencesCurrent:!0}),gmt=Qo("Whole Residues of Selection",ce.struct.modifier.union([ce.struct.modifier.wholeResidues({0:ce.internal.generator.current()})]),{description:"Expand current selection to whole residues.",category:"Manipulate Selection",referencesCurrent:!0}),mmt=[[["HIS"],"Histidine"],[["ARG"],"Arginine"],[["LYS"],"Lysine"],[["ILE"],"Isoleucine"],[["PHE"],"Phenylalanine"],[["LEU"],"Leucine"],[["TRP"],"Tryptophan"],[["ALA"],"Alanine"],[["MET"],"Methionine"],[["PRO"],"Proline"],[["CYS"],"Cysteine"],[["ASN"],"Asparagine"],[["VAL"],"Valine"],[["GLY"],"Glycine"],[["SER"],"Serine"],[["GLN"],"Glutamine"],[["TYR"],"Tyrosine"],[["ASP"],"Aspartic Acid"],[["GLU"],"Glutamic Acid"],[["THR"],"Threonine"],[["SEC"],"Selenocysteine"],[["PYL"],"Pyrrolysine"],[["UNK"],"Unknown"]].sort((e,t)=>e[1]<t[1]?-1:e[1]>t[1]?1:0),dmt=[[["A","DA"],"Adenosine"],[["C","DC"],"Cytidine"],[["T","DT"],"Thymidine"],[["G","DG"],"Guanosine"],[["I","DI"],"Inosine"],[["U","DU"],"Uridine"],[["N","DN"],"Unknown"]].sort((e,t)=>e[1]<t[1]?-1:e[1]>t[1]?1:0);function OX([e,t],r,n=0){let o=e.length===1&&!NDe.has(e[0])?`[${e[0]}] ${t}`:`${t} (${e.join(", ")})`;return Qo(o,ce.struct.modifier.union([ce.struct.generator.atomGroups({"residue-test":ce.core.set.has([ce.set(...e),ce.ammp("auth_comp_id")])})]),{category:r,priority:n,description:o})}function pmt([e,t],r,n){let o=`${t} (${e.join(", ")})`;return Qo(o,ce.struct.modifier.union([ce.struct.generator.atomGroups({"atom-test":ce.core.set.has([ce.set(...e),ce.acp("elementSymbol")])})]),{category:r,priority:n,description:o})}function fmt([e,t],r,n){let o=`${t}`;return Qo(`${t}`,ce.struct.modifier.union([ce.struct.generator.atomGroups({"entity-test":ce.core.list.equal([ce.list(...e),ce.ammp("entityDescription")])})]),{category:r,priority:n,description:o})}var NDe=lo.unionMany(A2,Xb,Zb,Wb);function MDe(e){let t=new Set;for(let n of e)n.uniqueElementSymbols.forEach(o=>t.add(o));let r=[];return t.forEach(n=>{let o=jge[n]||n;r.push(pmt([[n],o],"Element Symbol",0))}),r}function kDe(e){let t=new Map,r=new Set;for(let o of e){o.uniqueResidueNames.forEach(i=>r.add(i));for(let i of o.models)o.uniqueResidueNames.forEach(a=>{let A=i.properties.chemicalComponentMap.get(a);A&&t.set(a,A.name)})}let n=[];return lo.difference(r,NDe).forEach(o=>{let i=t.get(o)||o;n.push(OX([[o],i],"Ligand/Non-standard Residue",200))}),n}function HDe(e){let t=new Map,r=W.Location.create();for(let o of e){r.structure=o;for(let i of o.unitSymmetryGroups){r.unit=i.units[0],r.element=i.elements[0];let a=Ke.entity.type(r);if(a==="polymer"||a==="branched"){let A=Ke.entity.pdbx_description(r);t.set(A.join(", "),A)}}}let n=[];return t.forEach((o,i)=>{n.push(fmt([o,i],"Polymer/Carbohydrate Entities",300))}),n}var Oi={all:Mgt,current:kgt,polymer:Hgt,trace:Vgt,backbone:_gt,sidechain:Ygt,sidechainWithTrace:Ogt,protein:Jgt,nucleic:zgt,helix:Kgt,beta:jgt,water:Wgt,ion:Xgt,lipid:Zgt,branched:fH,branchedPlusConnected:LDe,branchedConnectedOnly:TDe,ligand:JX,ligandPlusConnected:PDe,ligandConnectedOnly:GDe,connectedOnly:qgt,disulfideBridges:$gt,nosBridges:emt,nonStandardPolymer:tmt,coarse:rmt,ring:nmt,aromaticRing:omt,surroundings:imt,surroundingLigands:amt,surroundingAtoms:Amt,complement:smt,covalentlyBonded:cmt,covalentlyOrMetallicBonded:umt,covalentlyBondedComponent:lmt,wholeResidues:gmt},dH=class{constructor(){this.list=[];this.options=[];this.version=1;this.list.push(...Object.values(Oi),...mmt.map(t=>OX(t,"Amino Acid")),...dmt.map(t=>OX(t,"Nucleic Base"))),this.options.push(...this.list.map(t=>[t,t.label,t.category]))}add(t){this.list.push(t),this.options.push([t,t.label,t.category]),this.version+=1}remove(t){let r=this.list.indexOf(t);r!==-1&&(this.list.splice(r,1),this.options.splice(r,1),this.version+=1)}};var Bmt="Assigns a color based on structure property at a given vertex.",VDe={structure:h.ValueRef(e=>e.state.data.select(fr.Generators.rootsOfType(te.Molecule.Structure)).filter(r=>r.obj?.data).map(r=>[r.transform.ref,r.obj?.label??"<unknown>"]),(e,t)=>t(e)),style:h.MappedStatic("chain-id",{"chain-id":h.Group(vI),"entity-id":h.Group(wI),"entity-source":h.Group(UI),"molecule-type":h.Group(wQ),"model-index":h.Group(TI),"structure-index":h.Group(GI)}),defaultColor:h.Color(13421772),maxDistance:h.Numeric(8,{min:.1,max:24,step:.1},{description:"Maximum distance to search for the nearest structure element. This is done only if the approximate search fails."}),approxMaxDistance:h.Numeric(4,{min:0,max:12,step:.1},{description:"Maximum distance to search for an approximately nearest structure element. This is done before the extact search."}),normalOffset:h.Numeric(0,{min:-10,max:20,step:.1},{description:"Offset vertex position along its normal by given amount."}),backboneOnly:h.Boolean(!1)};function Imt(e,t){switch(t.name){case"chain-id":return FI(e,t.params);case"entity-id":return RI(e,t.params);case"entity-source":return LI(e,t.params);case"molecule-type":return RQ(e,t.params);case"model-index":return PI(e,t.params);case"structure-index":return NI(e,t.params);default:Or(t)}}function _De(e,t){let r;try{r=t.structure.getValue()}catch{}let n,o,i,{maxDistance:a,approxMaxDistance:A,normalOffset:s,defaultColor:c,backboneOnly:l}=t;if(r){let u=Imt({...e,structure:r},t.style),g=$y(),m=$y(),p=r;l&&(p=Qt.unionStructure(Oi.backbone.query(new qo(r))));let d=B(),f=W.Location.create(p);n=(I,C)=>{if(!uQ(I))return c;s!==0?B.scaleAndAdd(d,I.position,I.normal,s):B.copy(d,I.position);let[y,Q,E]=d;if(A>0){let x=p.lookup3d.approxNearest(y,Q,E,A,g);if(x.count>0)return f.unit=x.units[0],f.element=f.unit.elements[x.indices[0]],u.color(f,C)}let b=p.lookup3d.find(y,Q,E,a,m);if(b.count>0){let x=0,S=b.squaredDistances[0];for(let w=1;w<b.count;++w)b.squaredDistances[w]<S&&(S=b.squaredDistances[w],x=w);return f.unit=b.units[x],f.element=f.unit.elements[b.indices[x]],u.color(f,C)}return c},o=u.contextHash,i=u.legend}else n=()=>c;return{factory:_De,granularity:"vertex",preferSmoothing:!0,color:n,props:t,contextHash:o,description:Bmt,legend:i}}var YDe={name:"external-structure",label:"External Structure",category:Br.Misc,factory:_De,getParams:()=>VDe,defaultValues:h.getDefaultValues(VDe),isApplicable:e=>!0};var zX="dark-2",ODe=13421772,Cmt="Gives every volume instance a unique color based on the position (index) of the instance in the list of instances of the volume.",JDe={...Pi({type:"colors",colorList:zX})};function hmt(e){let t=h.clone(JDe);return e.volume&&e.volume.instances.length>Kr[zX].list.length&&(t.palette.defaultValue.name="colors",t.palette.defaultValue.params={...t.palette.defaultValue.params,list:{kind:"interpolate",colors:ns(zX).list}}),t}function zDe(e,t){let r,n;if(e.volume){let o=Yi(e.volume.instances.length,t);n=o.legend;let i=Ze.Cell.isLocation;r=a=>i(a)?o.color(a.instance):ODe}else r=()=>ODe;return{factory:zDe,granularity:"instance",color:r,props:t,description:Cmt,legend:n}}var KDe={name:"volume-instance",label:"Volume Instance",category:Br.Misc,factory:zDe,getParams:hmt,defaultValues:h.getDefaultValues(JDe),isApplicable:e=>!!e.volume};var KA;(l=>{l.Category=Br;function t(u,g,m,p){let d=[];if(u.every(I=>Array.isArray(I))){let I=0;for(let S of u)if(Array.isArray(S)){let w=r0(S[1]);w>I&&(I=w)}let C=Math.pow(10,I),y=[...u];y.sort((S,w)=>S[1]-w[1]);let Q=y.map(S=>S[0]),E=je.ofSortedArray(y.map(S=>S[1])),b=[];for(let S=0,w=E.length-1;S<w;++S)b.push(E[S]+(E[S+1]-E[S])/2);b.push(E[E.length-1]);let x=je.ofSortedArray(b);for(let S=0,w=Math.max(C,u.length);S<w;++S){let R=Uf(S,0,C-1),T=je.findPredecessorIndex(x,R);d[S]=Q[T]}}else for(let I of u)Array.isArray(I)?d.push(I[0]):d.push(I);return{colors:d,filter:g==="set"?"nearest":"linear",domain:m,defaultColor:p}}l.Palette=t,l.PaletteScale=(1<<24)-2,l.EmptyFactory=()=>l.Empty;let o=13421772;l.Empty={factory:l.EmptyFactory,granularity:"uniform",color:()=>o,props:{}};function a(u,g){return u.contextHash===g.contextHash&&u.factory===g.factory&&ka(u.props,g.props)}l.areEqual=a,l.EmptyProvider={name:"",label:"",category:"",factory:l.EmptyFactory,getParams:()=>({}),defaultValues:{},isApplicable:()=>!0};function s(){return new Tv(l.BuiltIn,l.EmptyProvider)}l.createRegistry=s,l.BuiltIn={"atom-id":EEe,"carbohydrate-symbol":oQe,cartoon:VEe,"chain-id":YM,"element-index":dQe,"element-symbol":FQe,"entity-id":fQe,"entity-source":CQe,"external-structure":YDe,"external-volume":MEe,"formal-charge":JEe,hydrophobicity:uk,illustrative:sEe,"model-index":yQe,"molecule-type":UQe,occupancy:gEe,"operator-hkl":BEe,"operator-name":$D,"partial-charge":CEe,"polymer-id":MQe,"polymer-index":YQe,"residue-charge":qQe,"residue-name":zQe,"secondary-structure":eEe,"sequence-id":nEe,"shape-group":uhe,"structure-index":EQe,"trajectory-index":DQe,uncertainty:iEe,"unit-index":xQe,uniform:cCe,"volume-instance":KDe,"volume-segment":FEe,"volume-value":xEe}})(KA||={});var ymt=1,Qmt="Assigns a physical size, i.e. vdW radius for atoms or given radius for coarse spheres.",jDe={scale:h.Numeric(1,{min:.1,max:5,step:.1})};function Emt(e){return jDe}function aU(e,t){return ge.isAtomic(e)?rm(e.model.atomicHierarchy.atoms.type_symbol.value(t)):ge.isSpheres(e)?e.model.coarseConformation.spheres.radius[t]:0}function WDe(e,t){let r=t.scale===void 0?1:t.scale;function n(o){let i;return W.Location.is(o)?i=r*aU(o.unit,o.element):Et.isLocation(o)?i=r*Math.min(aU(o.aUnit,o.aUnit.elements[o.aIndex]),aU(o.bUnit,o.bUnit.elements[o.bIndex])):i=r*ymt,i}return{factory:WDe,granularity:"group",size:n,props:t,description:Qmt}}var XDe={name:"physical",label:"Physical",category:"",factory:WDe,getParams:Emt,defaultValues:h.getDefaultValues(jDe),isApplicable:e=>!!e.structure};var bmt="Assigns a size reflecting the uncertainty or disorder of an element's position, e.g. B-factor or RMSF, depending on the data availability and experimental technique.",qDe={bfactorFactor:h.Numeric(.1,{min:0,max:1,step:.01}),rmsfFactor:h.Numeric(.05,{min:0,max:1,step:.01}),baseSize:h.Numeric(.2,{min:0,max:2,step:.1})};function xmt(e){return qDe}function ZDe(e,t,r){return ge.isAtomic(e)?e.model.atomicConformation.B_iso_or_equiv.value(t)*r.bfactorFactor:ge.isSpheres(e)?e.model.coarseConformation.spheres.rmsf[t]*r.rmsfFactor:0}function $De(e,t){function r(n){let o=t.baseSize;return W.Location.is(n)?o+=ZDe(n.unit,n.element,t):Et.isLocation(n)&&(o+=ZDe(n.aUnit,n.aUnit.elements[n.aIndex],t)),o}return{factory:$De,granularity:"group",size:r,props:t,description:bmt}}var eve={name:"uncertainty",label:"Uncertainty/Disorder",category:"",factory:$De,getParams:xmt,defaultValues:h.getDefaultValues(qDe),isApplicable:e=>!!e.structure&&e.structure.models.some(t=>t.atomicConformation.B_iso_or_equiv.isDefined||t.coarseHierarchy.isDefined)};var KX="Assign size based on the given value of a volume cell.",tve={scale:h.Numeric(1,{min:.01,max:10,step:.01}),transform:h.Select("linear",[["linear","Linear"],["quadratic","Quadratic"],["cubic","Cubic"]],{description:"Linear: value * scale, Quadratic: value * scale^2, Cubic: value * scale^3"}),domain:h.MappedStatic("auto",{custom:h.Interval([0,1],{step:.001,min:0}),auto:h.Group({})})};function Smt(e){return tve}function BH(e,t){if(e.volume){let{min:r,max:n}=e.volume.grid.stats,o=t.domain.name==="custom"?t.domain.params:[r,n],i=t.transform==="cubic"?t.scale**3:t.transform==="quadratic"?t.scale**2:t.scale;if(e.locationKinds?.includes("cell-location")){let{data:a}=e.volume.grid.cells,A=Ze.Cell.isLocation;return{factory:BH,granularity:"group",size:c=>A(c)?$t(Math.abs(a[c.cell]),o[0],o[1])*i:0,props:t,description:KX}}else{let a=jr.makeGetTrilinearlyInterpolated(e.volume.grid,"none");return{factory:BH,granularity:"vertex",size:s=>{if(uQ(s)){let c=a(s.position);return Number.isNaN(c)?0:$t(Math.abs(c),o[0],o[1])*i}else return 0},props:t,description:KX}}}else return{factory:BH,granularity:"uniform",size:()=>t.scale,props:t,description:KX}}var rve={name:"volume-value",label:"Volume Value",category:"",factory:BH,getParams:Smt,defaultValues:h.getDefaultValues(tve),isApplicable:e=>!!e.volume&&!Ze.Segmentation.get(e.volume)};var Qi;(a=>{a.EmptyFactory=()=>a.Empty,a.Empty={factory:a.EmptyFactory,granularity:"uniform",size:()=>1,props:{}};function r(A,s){return A.contextHash===s.contextHash&&A.factory===s.factory&&ka(A.props,s.props)}a.areEqual=r,a.EmptyProvider={name:"",label:"",category:"",factory:a.EmptyFactory,getParams:()=>({}),defaultValues:{},isApplicable:()=>!0};function o(){return new Tv(a.BuiltIn,a.EmptyProvider)}a.createRegistry=o,a.BuiltIn={physical:XDe,"shape-group":che,uncertainty:eve,uniform:uCe,"volume-value":rve}})(Qi||={});var Gi;(o=>{function e(i,a,A,s){s=s||t();let c=A.colorTheme,l=A.sizeTheme;return s.color=i.colorThemeRegistry.create(c.name,a,c.params),s.size=i.sizeThemeRegistry.create(l.name,a,l.params),s}o.create=e;function t(){return{color:KA.Empty,size:Qi.Empty}}o.createEmpty=t;async function r(i,a,A,s){await a.colorThemeRegistry.get(s.colorTheme.name).ensureCustomProperties?.attach(i,A),await a.sizeThemeRegistry.get(s.sizeTheme.name).ensureCustomProperties?.attach(i,A)}o.ensureDependencies=r;function n(i,a,A){i.colorThemeRegistry.get(A.colorTheme.name).ensureCustomProperties?.detach(a),i.sizeThemeRegistry.get(A.sizeTheme.name).ensureCustomProperties?.detach(a)}o.releaseDependencies=n})(Gi||={});function nve(e){return e.map(t=>[t.name,t.provider.label,t.provider.category])}var Tv=class{constructor(t,r){this.emptyProvider=r;this._list=[];this._map=new Map;this._name=new Map;Bi(t,(n,o)=>{if(n.name!==o)throw new Error(`Fix build in themes to have matching names. ${n.name} ${o}`);this.add(n)})}get default(){return this._list[0]}get list(){return this._list}get types(){return nve(this._list)}sort(){this._list.sort((t,r)=>t.provider.category===r.provider.category?t.provider.label<r.provider.label?-1:t.provider.label>r.provider.label?1:0:t.provider.category<r.provider.category?-1:1)}add(t){if(this._map.has(t.name))throw new Error(`${t.name} already registered.`);let r=t.name;this._list.push({name:r,provider:t}),this._map.set(r,t),this._name.set(t,r),this.sort()}remove(t){this._list.splice(this._list.findIndex(n=>n.name===t.name),1);let r=this._map.get(t.name);r&&(this._map.delete(t.name),this._name.delete(r))}has(t){return this._map.has(t.name)}get(t){return this._map.get(t)||this.emptyProvider}getName(t){if(!this._name.has(t))throw new Error(`'${t.label}' is not a registered theme provider.`);return this._name.get(t)}create(t,r,n={}){let o=this.get(t);return o.factory(r,{...h.getDefaultValues(o.getParams(r)),...n})}getApplicableList(t){return this._list.filter(r=>r.provider.isApplicable(t))}getApplicableTypes(t){return nve(this.getApplicableList(t))}clear(){this._list.length=0,this._map.clear(),this._name.clear()}};var Dmt;(t=>{function e(r,n,o){return h.getDefaultValues(r.getParams(n,o))}t.getDefaultParams=e})(Dmt||={});var vmt={name:"",label:"",description:"",factory:()=>Xt.Empty,getParams:()=>({}),defaultValues:{},defaultColorTheme:{name:""},defaultSizeTheme:{name:""},isApplicable:()=>!0};function ove(e){return e.map(t=>[t.name,t.provider.label])}var Pv=class{constructor(){this._list=[];this._map=new Map;this._name=new Map}get default(){return this._list[0]}get types(){return ove(this._list)}add(t){if(this._map.has(t.name))throw new Error(`${t.name} already registered.`);this._list.push({name:t.name,provider:t}),this._map.set(t.name,t),this._name.set(t,t.name)}getName(t){if(!this._name.has(t))throw new Error(`'${t.label}' is not a registered represenatation provider.`);return this._name.get(t)}remove(t){let r=t.name;this._list.splice(this._list.findIndex(o=>o.name===r),1);let n=this._map.get(r);n&&(this._map.delete(r),this._name.delete(n))}get(t){return this._map.get(t)||vmt}get list(){return this._list}getApplicableList(t){return this._list.filter(r=>r.provider.isApplicable(t))}getApplicableTypes(t){return ove(this.getApplicableList(t))}clear(){this._list.length=0,this._map.clear(),this._name.clear()}};var Xt;(c=>{let e;(m=>{function l(p,d){return p.repr===d.repr&&pr.areEqual(p.loci,d.loci)}m.areEqual=l;function u(p){return pr.isEmpty(p.loci)}m.isEmpty=u,m.Empty={loci:Ir}})(e=c.Loci||={});function t(){return{visible:!0,alphaFactor:1,pickable:!0,colorOnly:!1,syncManually:!1,transform:Y.identity(),overpaint:cs.Empty,transparency:ls.Empty,emissive:gs.Empty,substance:us.Empty,wiggle:RA.Empty,clipping:si.Empty,themeStrength:{overpaint:1,transparency:1,emissive:1,substance:1,wiggle:1},markerActions:Ko.All}}c.createState=t;function r(l,u){u.visible!==void 0&&(l.visible=u.visible),u.alphaFactor!==void 0&&(l.alphaFactor=u.alphaFactor),u.pickable!==void 0&&(l.pickable=u.pickable),u.colorOnly!==void 0&&(l.colorOnly=u.colorOnly),u.overpaint!==void 0&&(l.overpaint=u.overpaint),u.transparency!==void 0&&(l.transparency=u.transparency),u.emissive!==void 0&&(l.emissive=u.emissive),u.substance!==void 0&&(l.substance=u.substance),u.wiggle!==void 0&&(l.wiggle=u.wiggle),u.clipping!==void 0&&(l.clipping=u.clipping),u.themeStrength!==void 0&&(l.themeStrength=u.themeStrength),u.syncManually!==void 0&&(l.syncManually=u.syncManually),u.transform!==void 0&&Y.copy(l.transform,u.transform),u.markerActions!==void 0&&(l.markerActions=u.markerActions)}c.updateState=r,c.StateBuilder={create:t,update:r};function i(){return{label:"",groupCount:0,renderObjects:[],geometryVersion:-1,props:{},params:{},updated:new Jn,state:t(),theme:Gi.createEmpty(),createOrUpdate:()=>ve.constant("",void 0),setState:()=>{},setTheme:()=>{},getLoci:()=>Ir,getAllLoci:()=>[],eachLocation:()=>{},mark:()=>!1,destroy:()=>{}}}c.createEmpty=i;class a{constructor(){this.curr=new Set;this.next=new Set;this._version=-1}get version(){return this._version}add(u,g){this.next.add(ko(u,g))}snapshot(){lo.areEqual(this.curr,this.next)||(this._version+=1),[this.curr,this.next]=[this.next,this.curr],this.next.clear()}}c.GeometryState=a;function A(l,u,g,m,p){let d=0,f=new Jn,I=new a,C=m.create(),y=Gi.createEmpty(),Q,E,b,x={},S=Object.keys(p).map((w,R)=>{x[R]=w;let T=p[w](u,g);return T.setState(C),T});return{label:l,updated:f,get groupCount(){let w=0;if(E){let{visuals:R}=E;for(let T=0,L=S.length;T<L;++T)(!R||R.includes(x[T]))&&(w+=S[T].groupCount)}return w},get renderObjects(){let w=[];if(E){let{visuals:R}=E;for(let T=0,L=S.length;T<L;++T)(!R||R.includes(x[T]))&&w.push(...S[T].renderObjects)}return w},get geometryVersion(){return I.version},get props(){return E},get params(){return Q},createOrUpdate:(w={},R)=>{R&&R!==b&&(Q=g(u,R),b=R,E||(E=h.getDefaultValues(Q)));let T=KR(Object.assign({},E,w),b);Object.assign(E,w,T);let{visuals:L}=E;return ve.create(`Creating or updating '${l}' representation`,async F=>{for(let v=0,U=S.length;v<U;++v)(!L||L.includes(x[v]))&&await S[v].createOrUpdate(E,b).runInContext(F),I.add(v,S[v].geometryVersion);I.snapshot(),f.next(d++)})},get state(){return C},get theme(){return y},getLoci:w=>{let{visuals:R}=E;for(let T=0,L=S.length;T<L;++T)if(!R||R.includes(x[T])){let F=S[T].getLoci(w);if(!ga(F))return F}return Ir},getAllLoci:()=>{let w=[],{visuals:R}=E;for(let T=0,L=S.length;T<L;++T)(!R||R.includes(x[T]))&&w.push(...S[T].getAllLoci());return w},eachLocation:w=>{let{visuals:R}=E;for(let T=0,L=S.length;T<L;++T)(!R||R.includes(x[T]))&&S[T].eachLocation(w)},mark:(w,R)=>{let T=!1;for(let L=0,F=S.length;L<F;++L)T=S[L].mark(w,R)||T;return T},setState:w=>{m.update(C,w);for(let R=0,T=S.length;R<T;++R)S[R].setState(w)},setTheme:w=>{y=w;for(let R=0,T=S.length;R<T;++R)S[R].setTheme(w)},destroy(){for(let w=0,R=S.length;w<R;++w)S[w].destroy()}}}c.createMulti=A;function s(l,u){let g=0,m=new Jn,p=new a,d=c.createState(),f=Gi.createEmpty(),I=h.clone(ot.Params),C=h.getDefaultValues(ot.Params);return{label:l,updated:m,get groupCount(){return u.values.uGroupCount.ref.value},get renderObjects(){return[u]},get geometryVersion(){return p.version},get props(){return C},get params(){return I},createOrUpdate:(y={})=>{let Q=KR(Object.assign({},C,y));return Object.assign(C,y,Q),ve.create(`Updating '${l}' representation`,async E=>{p.add(0,u.id),p.snapshot(),m.next(g++)})},get state(){return d},get theme(){return f},getLoci:()=>Ir,getAllLoci:()=>[],eachLocation:()=>{},mark:(y,Q)=>!1,setState:y=>{y.visible!==void 0&&Qn.setVisibility(u,y.visible),y.alphaFactor!==void 0&&Qn.setAlphaFactor(u,y.alphaFactor),y.pickable!==void 0&&Qn.setPickable(u,y.pickable),y.colorOnly!==void 0&&Qn.setColorOnly(u,y.colorOnly),y.overpaint,y.transparency,y.emissive,y.substance,y.wiggle,y.clipping,y.themeStrength!==void 0&&Qn.setThemeStrength(u,y.themeStrength),y.transform!==void 0&&Qn.setTransform(u,y.transform),c.updateState(d,y)},setTheme:()=>{},destroy(){}}}c.fromRenderObject=s})(Xt||={});var Fmt;Object.defineProperty(Xt,"Empty",{get:()=>Fmt??=Xt.createEmpty()});var jX;(t=>{function e(){return{view:Y.identity(),position:B.create(0,0,0),direction:B.create(0,0,-1),up:B.create(0,1,0)}}t.create=e})(jX||={});var IH=class{constructor(){this.removeList=g2();this.removeMap=new Map;this.addList=g2();this.addMap=new Map}get isEmpty(){return this.removeList.count===0&&this.addList.count===0}get size(){return this.removeMap.size+this.addMap.size}add(t){if(this.removeMap.has(t)){let n=this.removeMap.get(t);this.removeMap.delete(t),this.removeList.remove(n)}if(this.addMap.has(t))return;let r=this.addList.addLast(t);this.addMap.set(t,r)}remove(t){if(this.addMap.has(t)){let n=this.addMap.get(t);this.addMap.delete(t),this.addList.remove(n)}if(this.removeMap.has(t))return;let r=this.removeList.addLast(t);this.removeMap.set(t,r)}tryGetRemove(){let t=this.removeList.removeFirst();return t&&this.removeMap.delete(t),t}tryGetAdd(){let t=this.addList.removeFirst();return t&&this.addMap.delete(t),t}};var AU=new qi("98");function ive(e,t,r){AU.reset();for(let n=0,o=e.length;n<o;++n){if(r&&!e[n].state.visible||!e[n].values.drawCount.ref.value)continue;let i=e[n].values.boundingSphere.ref.value;i.radius&&AU.includeSphere(i)}AU.finishedIncludeStep();for(let n=0,o=e.length;n<o;++n){if(r&&!e[n].state.visible||!e[n].values.drawCount.ref.value)continue;let i=e[n].values.boundingSphere.ref.value;i.radius&&AU.radiusSphere(i)}return AU.getSphere(t)}function wmt(e,t){let r=e.getProgram("color").id,n=t.getProgram("color").id,o=e.materialId,i=t.materialId;return r!==n?r-n:o!==i?o-i:e.id-t.id}var Zc;(t=>{function e(r,n="blended",o={dColorMarker:!0,dLightCount:1}){let i=new Map,a=[],A=we(),s=we(),c=[],l=[],u=!0,g=!0,m=!0,p=!0,d=!0,f=!0,I=!0,C=!0,y=!0,Q=0,E=0,b=0,x=0,S=0,w=!1,R=!1,T=jX.create(),{view:L,position:F,direction:v,up:U}=T;function G(O){if(i.has(O))console.warn(`RenderObject with id '${O.id}' already present`);else{let X=yhe(r,O,n,o);a.push(X),O.type==="direct-volume"?l.push(X):c.push(X),i.set(O,X),u=!0,g=!0}}function N(O){let X=i.get(O);X&&(X.dispose(),vu(a,X),vu(c,X),vu(l,X),i.delete(O),u=!0,g=!0)}let k=100;function J(O){let X=co(),Ce=0;for(;;){let Ne=H.tryGetRemove();if(!Ne)break;if(N(Ne),++Ce%k===0&&co()-X>O)return!1}for(;;){let Ne=H.tryGetAdd();if(!Ne)break;if(G(Ne),++Ce%k===0&&co()-X>O)return!1}return a.sort(wmt),m=!0,p=!0,d=!0,f=!0,I=!0,C=!0,y=!0,!0}let H=new IH,z=-1;function _(){let O=23;for(let X=0,Ce=a.length;X<Ce;++X)a[X].state.visible&&(O=31*O+a[X].id|0);return O=gG(O),O===-1&&(O=0),O}function M(){let O=_();return O!==z?(g=!0,m=!0,p=!0,d=!0,f=!0,I=!0,C=!0,y=!0,z=O,!0):!1}function q(){if(c.length===0)return 0;let O=0,X=0;for(let Ce=0,Ne=c.length;Ce<Ne;++Ce)c[Ce].state.visible&&(X+=c[Ce].values.markerAverage.ref.value,O+=1);return O>0?X/O:0}function ne(){if(c.length===0)return 0;let O=0,X=0;for(let Ce=0,Ne=c.length;Ce<Ne;++Ce)c[Ce].state.visible&&(X+=c[Ce].values.emissiveAverage.ref.value+c[Ce].values.uEmissive.ref.value,O+=1);return O>0?X/O:0}function oe(){if(c.length===0)return 0;let O=0,X=0;for(let Ce=0,Ne=c.length;Ce<Ne;++Ce)c[Ce].state.visible&&(X+=c[Ce].values.wiggleAverage.ref.value,O+=1);return O>0?X/O:0}function ae(){if(c.length===0)return 0;let O=0,X=0;for(let Ce=0,Ne=c.length;Ce<Ne;++Ce){let $=c[Ce];if(!$.state.visible)continue;let pe=$t($.values.alpha.ref.value*$.state.alphaFactor,0,1),ye=$.values.dXrayShaded?.ref.value==="on"||$.values.dXrayShaded?.ref.value==="inverted"?.5:1,Be=$.values.dPointStyle?.ref.value==="fuzzy"?.5:1,De=$.values.dGeometryType.ref.value==="text"?.5:1,Te=$.values.dGeometryType.ref.value==="image"?.5:1;X+=(1-$.values.transparencyAverage.ref.value)*pe*ye*Be*De*Te,O+=1}return O>0?X/O:0}function me(){if(c.length===0)return 1;let O=1,X=[];for(let Ce=0,Ne=c.length;Ce<Ne;++Ce){let $=c[Ce];if(!$.state.visible)continue;X.length=0;let pe=$t($.values.alpha.ref.value*$.state.alphaFactor,0,1);pe<1&&X.push(1-pe),($.values.dXrayShaded?.ref.value==="on"||$.values.dXrayShaded?.ref.value==="inverted"||$.values.dPointStyle?.ref.value==="fuzzy"||$.values.dGeometryType.ref.value==="text"||$.values.dGeometryType.ref.value==="image")&&X.push(.5),$.values.transparencyMin.ref.value>0&&X.push($.values.transparencyMin.ref.value),O=Math.min(O,...X)}return O}function Se(){if(c.length===0)return!1;for(let O=0,X=c.length;O<X;++O){let Ce=c[O];if(Ce.state.visible&&(Ce.state.opaque||Ce.state.alphaFactor===1&&Ce.values.alpha.ref.value===1&&Ce.values.transparencyAverage.ref.value!==1||Ce.values.dTransparentBackfaces?.ref.value==="opaque"))return!0}return!1}function ee(){for(let O=0,X=c.length;O<X;++O){let Ce=c[O];if(Ce.state.visible&&((Ce.values.uWiggleAmplitude?.ref.value>0||Ce.values.wiggleAverage.ref.value>0)&&Ce.values.uWiggleSpeed?.ref.value>0&&Ce.values.uWiggleFrequency?.ref.value>0||Ce.values.uTumbleAmplitude?.ref.value>0&&Ce.values.uTumbleSpeed?.ref.value>0&&Ce.values.uTumbleFrequency?.ref.value>0))return!0}return!1}return{view:L,position:F,direction:v,up:U,renderables:a,primitives:{view:L,position:F,direction:v,up:U,renderables:c},volumes:{view:L,position:F,direction:v,up:U,renderables:l},syncVisibility:M,setTransparency:O=>{n=O;for(let X=0,Ce=a.length;X<Ce;++X)a[X].setTransparency(O)},setGlobals:O=>{o=O;for(let X of a)D.updateIfChanged(X.values.dColorMarker,O.dColorMarker),D.updateIfChanged(X.values.dLightCount,O.dLightCount),X.update()},update(O,X){if(O)for(let Ce=0,Ne=O.length;Ce<Ne;++Ce)i.get(O[Ce])?.update();else for(let Ce=0,Ne=a.length;Ce<Ne;++Ce)a[Ce].update();X?M():(u=!0,g=!0),m=!0,p=!0,d=!0,f=!0,I=!0,C=!0,y=!0},add:O=>H.add(O),remove:O=>H.remove(O),commit:(O=Number.MAX_VALUE)=>J(O),get commitQueueSize(){return H.size},get needsCommit(){return!H.isEmpty},has:O=>i.has(O),clear:()=>{for(let O=0,X=a.length;O<X;++O)a[O].dispose();a.length=0,c.length=0,l.length=0,i.clear(),u=!0,g=!0},forEach:O=>{i.forEach(O)},get count(){return a.length},get boundingSphere(){return u&&(ive(a,A,!1),u=!1),A},get boundingSphereVisible(){return g&&(ive(a,s,!0),g=!1),s},get transparency(){return n},get markerAverage(){return m&&(Q=q(),m=!1),Q},get emissiveAverage(){return p&&(E=ne(),p=!1),E},get wiggleAverage(){return d&&(b=oe(),d=!1),b},get opacityAverage(){return f&&(x=ae(),f=!1),x},get transparencyMin(){return I&&(S=me(),I=!1),S},get hasOpaque(){return C&&(w=Se(),C=!1),w},get hasAnimation(){return y&&(R=ee(),y=!1),R}}}t.create=e})(Zc||={});var WX=.36363636363636365,Rmt=6/11,Umt=8/11,Lmt=3/4,Tmt=9/11,Pmt=10/11,Gmt=15/16,Nmt=21/22,Mmt=63/64,CH=1/WX/WX;function kmt(e){return 1-hH(1-e)}function hH(e){return(e=+e)<WX?CH*e*e:e<Umt?CH*(e-=Rmt)*e+Lmt:e<Pmt?CH*(e-=Tmt)*e+Gmt:CH*(e-=Nmt)*e+Mmt}function Hmt(e){return((e*=2)<=1?1-hH(1-e):hH(e-1)+1)/2}function Vmt(e){return 1-Math.sqrt(1-e*e)}function _mt(e){return Math.sqrt(1- --e*e)}function Ymt(e){return((e*=2)<=1?1-Math.sqrt(1-e*e):Math.sqrt(1-(e-=2)*e)+1)/2}function Omt(e){return e*e*e}function Jmt(e){return--e*e*e+1}function zmt(e){return((e*=2)<=1?e*e*e:(e-=2)*e*e+2)/2}function Kmt(e){return Math.pow(2,10*e-10)}function jmt(e){return 1-Math.pow(2,-10*e)}function Wmt(e){return((e*=2)<=1?Math.pow(2,10*e-10):2-Math.pow(2,10-10*e))/2}function Xmt(e){return e*e}function Zmt(e){return e*(2-e)}function qmt(e){return((e*=2)<=1?e*e:--e*(2-e)+1)/2}var ave=Math.PI,Ave=ave/2;function $mt(e){return 1-Math.cos(e*Ave)}function edt(e){return Math.sin(e*Ave)}function tdt(e){return(1-Math.cos(ave*e))/2}var sU={linear:e=>e,"bounce-in":kmt,"bounce-out":hH,"bounce-in-out":Hmt,"circle-in":Vmt,"circle-out":_mt,"circle-in-out":Ymt,"cubic-in":Omt,"cubic-out":Jmt,"cubic-in-out":zmt,"exp-in":Kmt,"exp-out":jmt,"exp-in-out":Wmt,"quad-in":Xmt,"quad-out":Zmt,"quad-in-out":qmt,"sin-in":$mt,"sin-out":edt,"sin-in-out":tdt};function sve(e){return e?typeof e=="function"?e:sU[e]??sU.linear:sU.linear}var Gv=class e{constructor(t){this.camera=t;this.t=0;this.func=e.defaultTransition;this.start=0;this.inTransition=!1;this.durationMs=0;this._source=Io.createDefaultSnapshot();this._target=Io.createDefaultSnapshot();this._options=void 0;this._current=Io.createDefaultSnapshot()}get source(){return this._source}get target(){return this._target}apply(t,r=0,n,o){if((!this.inTransition||r>0)&&Io.copySnapshot(this._source,this.camera.state),this.inTransition||Io.copySnapshot(this._target,this.camera.state),Io.copySnapshot(this._target,t),this._target.radius>this._target.radiusMax&&(this._target.radius=this._target.radiusMax),this._target.radius<.01&&(this._target.radius=.01),this._target.radiusMax<.01&&(this._target.radiusMax=.01),!this.inTransition&&r<=0||typeof t.mode<"u"&&t.mode!==this.camera.state.mode){this.finish(this._target);return}this.inTransition=!0,this.func=n||e.defaultTransition,this._options=o,(!this.inTransition||r>0)&&(this.start=this.t,this.durationMs=r)}tick(t){this.t=t,this.update()}finish(t){Io.copySnapshot(this.camera.state,t),this.inTransition=!1}update(){if(!this.inTransition)return;let t=Math.min((this.t-this.start)/this.durationMs,1);if(t===1){this.finish(this._target);return}this.func(this._current,t,this._source,this._target,this._options),Io.copySnapshot(this.camera.state,this._current)}};(A=>{let e=gr.identity(),t=gr.identity(),r=B(),n=B(),o,i;function a(s,c,l,u,g){let m=l,p=u,d=0,f=1,I=g?.easing,C=g?.keyframes;if(C&&C.length>0){for(let R=0;R<C.length;R++){let T=C[R];if(c>=T.t){m=T.snapshot,d=T.t;break}}for(let R=0;R<C.length;R++){let T=C[R];if(T.t>=c){p=T.snapshot,f=T.t,I=T.easing??I;break}}}let Q=sve(I)((c-d)/(f-d));o||(o=Io.createDefaultSnapshot()),i||(i=Io.createDefaultSnapshot()),Io.copySnapshot(o,l),Io.copySnapshot(o,m),Io.copySnapshot(i,u),Io.copySnapshot(i,p);let E=o,b=i;Io.copySnapshot(s,b),gr.slerp(e,gr.Identity,gr.rotationTo(e,E.up,b.up),Q),B.transformQuat(s.up,E.up,e),B.lerp(s.target,E.target,b.target,Q);let x=B.distance(E.target,E.position),S=B.distance(b.target,b.position),w=ho(x,S,Q);B.sub(r,E.position,E.target),B.normalize(r,r),B.sub(n,b.position,b.target),B.normalize(n,n),gr.rotationTo(t,r,n),gr.slerp(t,gr.Identity,t,Q),B.transformQuat(r,r,t),B.scale(r,r,w),B.add(s.position,s.target,r),s.radius=ho(E.radius,b.radius,Q),s.radiusMax=ho(E.radiusMax,b.radiusMax,Q),s.fov=ho(E.fov,b.fov,Q),s.fog=ho(E.fog,b.fog,Q)}A.defaultTransition=a})(Gv||={});function W0(){return W0.zero()}(m=>{function e(){let p=[.1,0,0];return p[0]=0,p}m.zero=e;function t(p,d,f){let I=e();return I[0]=p,I[1]=d,I[2]=f,I}m.create=t;function r(p,d,f,I){return p[0]=d,p[0]=f,p[0]=I,p}m.set=r;function n(p){let d=e();return d[0]=p[0],d[1]=p[1],d[2]=p[2],d}m.clone=n;function o(p,d){return p[0]=d[0],p[1]=d[1],p[2]=d[2],p}m.copy=o;function i(p){return Array.isArray(p)&&p.length===3}m.is=i;function a(p,d,f){let I=d[0],C=d[4],y=d[8],Q=d[1],E=d[5],b=d[9],x=d[2],S=d[6],w=d[10];switch(f){case"XYZ":p[1]=Math.asin($t(y,-1,1)),Math.abs(y)<.9999999?(p[0]=Math.atan2(-b,w),p[2]=Math.atan2(-C,I)):(p[0]=Math.atan2(S,E),p[2]=0);break;case"YXZ":p[0]=Math.asin(-$t(b,-1,1)),Math.abs(b)<.9999999?(p[1]=Math.atan2(y,w),p[2]=Math.atan2(Q,E)):(p[1]=Math.atan2(-x,I),p[2]=0);break;case"ZXY":p[0]=Math.asin($t(S,-1,1)),Math.abs(S)<.9999999?(p[1]=Math.atan2(-x,w),p[2]=Math.atan2(-C,E)):(p[1]=0,p[2]=Math.atan2(Q,I));break;case"ZYX":p[1]=Math.asin(-$t(x,-1,1)),Math.abs(x)<.9999999?(p[0]=Math.atan2(S,w),p[2]=Math.atan2(Q,I)):(p[0]=0,p[2]=Math.atan2(-C,E));break;case"YZX":p[2]=Math.asin($t(Q,-1,1)),Math.abs(Q)<.9999999?(p[0]=Math.atan2(-b,E),p[1]=Math.atan2(-x,I)):(p[0]=0,p[1]=Math.atan2(y,w));break;case"XZY":p[2]=Math.asin(-$t(C,-1,1)),Math.abs(C)<.9999999?(p[0]=Math.atan2(S,E),p[1]=Math.atan2(y,I)):(p[0]=Math.atan2(-b,w),p[1]=0);break;default:Or(f)}return p}m.fromMat4=a;let A=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0];function s(p,d,f){return Y.fromQuat(A,d),a(p,A,f)}m.fromQuat=s;function c(p,d){return r(p,d[0],d[1],d[2])}m.fromVec3=c;function l(p,d){return p[0]===d[0]&&p[1]===d[1]&&p[2]===d[2]}m.exactEquals=l;function u(p,d,f){return p[0]=d[f+0],p[1]=d[f+1],p[2]=d[f+2],p}m.fromArray=u;function g(p,d,f){return d[f+0]=p[0],d[f+1]=p[1],d[f+2]=p[2],d}m.toArray=g})(W0||={});var cve=lr(),X0=B(),Nv=B(),Mv=B(),lve=B(),uve=B(),Pl=Y.identity(),Io=class e{constructor(t,r=Jo.create(0,0,128,128)){this.view=Y.identity();this.projection=Y.identity();this.projectionView=Y.identity();this.inverseProjectionView=Y.identity();this.headRotation=Y.zero();this.viewEye=Y.zero();this.isAsymmetricProjection=!1;this.state=e.createDefaultSnapshot();this.viewOffset=e.ViewOffset();this.disabled=!1;this.near=1;this.far=1e4;this.fogNear=5e3;this.fogFar=1e4;this.zoom=1;this.forceFull=!1;this.scale=1;this.minTargetDistance=0;this.transition=new Gv(this);this.stateChanged=new _A(this.state);this.changed=new Jn;this.prevProjection=Y.identity();this.prevView=Y.identity();this.deltaDirection=B();this.newPosition=B();this.viewport=r,e.copySnapshot(this.state,t)}get position(){return this.state.position}set position(t){B.copy(this.state.position,t)}get up(){return this.state.up}set up(t){B.copy(this.state.up,t)}get target(){return this.state.target}set target(t){B.copy(this.state.target,t)}update(){let t=this.state;if(t.radiusMax===0)return!1;let r=B.distance(t.position,t.target),n=this.minTargetDistance/this.scale;r<n&&(B.sub(this.deltaDirection,t.target,t.position),B.setMagnitude(this.deltaDirection,this.deltaDirection,n),B.sub(t.position,t.target,this.deltaDirection));let o=2*Math.tan(t.fov/2)*B.distance(t.position,t.target)*this.scale;switch(this.zoom=this.viewport.height/o,odt(this),this.state.mode){case"orthographic":rdt(this);break;case"perspective":ndt(this);break;default:Or(this.state.mode)}let i=!Y.areEqual(this.projection,this.prevProjection,1e-6)||!Y.areEqual(this.view,this.prevView,1e-6);if(i){if(Y.mul(this.projectionView,this.projection,this.view),!Y.tryInvert(this.inverseProjectionView,this.projectionView))return Y.copy(this.view,this.prevView),Y.copy(this.projection,this.prevProjection),Y.mul(this.projectionView,this.projection,this.view),!1;Y.copy(this.prevView,this.view),Y.copy(this.prevProjection,this.projection),this.changed.next()}return i}setState(t,r,n){this.transition.apply(t,r,void 0,n),this.stateChanged.next(t)}getSnapshot(){return e.copySnapshot(e.createDefaultSnapshot(),this.state)}getTargetDistance(t){return Math.max(this.minTargetDistance/this.scale,e.targetDistance(t,this.state.mode,this.state.fov,this.viewport.width,this.viewport.height))}getFocus(t,r,n,o,i){let a=Math.max(r,.01),A=this.getTargetDistance(a);B.sub(this.deltaDirection,i?.target??this.target,i?.position??this.position),o&&B.matchDirection(this.deltaDirection,o,this.deltaDirection),B.setMagnitude(this.deltaDirection,this.deltaDirection,A),B.sub(this.newPosition,t,this.deltaDirection);let s=e.copySnapshot(e.createDefaultSnapshot(),this.state);return s.target=B.clone(t),s.radius=a,s.position=B.clone(this.newPosition),n&&B.matchDirection(s.up,n,s.up),s}getCenter(t,r){B.sub(this.deltaDirection,this.target,this.position),B.sub(this.newPosition,t,this.deltaDirection);let n=e.copySnapshot(e.createDefaultSnapshot(),this.state);return n.target=B.clone(t),n.position=B.clone(this.newPosition),r&&(n.radius=Math.max(r,.01)),n}getInvariantFocus(t,r,n,o){let i=Math.max(r,.01),a=this.getTargetDistance(i);B.copy(this.deltaDirection,o),B.setMagnitude(this.deltaDirection,this.deltaDirection,a),B.sub(this.newPosition,t,this.deltaDirection);let A=e.copySnapshot(e.createDefaultSnapshot(),this.state);return A.target=B.clone(t),A.radius=i,A.position=B.clone(this.newPosition),B.copy(A.up,n),A}focus(t,r,n,o,i){r>0&&this.setState(this.getFocus(t,r,o,i),n)}center(t,r){this.setState(this.getCenter(t),r)}project(t,r){return kM(t,r,this.viewport,this.projectionView)}unproject(t,r){return DI(t,r,this.viewport,this.inverseProjectionView)}getPixelSize(t){this.project(cve,t);let r=cve[3],n=this.viewport.width,o=this.projection[0];return 2/r/(n*Math.abs(o))}getRay(t,r,n){return this.state.mode==="orthographic"?(B.set(t.origin,r,n,0),this.unproject(t.origin,t.origin),B.normalize(t.direction,B.sub(t.direction,this.target,this.position)),B.scaleAndAdd(t.origin,t.origin,t.direction,-this.near)):(B.copy(t.origin,this.state.position),B.scale(t.origin,t.origin,this.scale),B.set(t.direction,r,n,.5),this.unproject(t.direction,t.direction),B.normalize(t.direction,B.sub(t.direction,t.direction,t.origin))),t}getRotation(t){let{position:r,target:n,up:o}=this.state;return B.normalize(X0,B.sub(X0,n,r)),B.normalize(Nv,B.cross(Nv,X0,o)),B.cross(Mv,Nv,X0),Y.setIdentity(Pl),Pl[0]=Nv[0],Pl[1]=Nv[1],Pl[2]=Nv[2],Pl[4]=Mv[0],Pl[5]=Mv[1],Pl[6]=Mv[2],Pl[8]=-X0[0],Pl[9]=-X0[1],Pl[10]=-X0[2],W0.fromMat4(t,Pl,"ZYX")}setRotation(t,r){let n=this.state,o=B.distance(n.position,n.target);Y.fromEuler(Pl,t,"ZYX"),B.set(lve,Pl[8],Pl[9],Pl[10]),B.set(Mv,Pl[4],Pl[5],Pl[6]);let i=e.copySnapshot(e.createDefaultSnapshot(),n);B.scaleAndAdd(i.position,n.target,lve,o),B.copy(i.up,Mv),this.setState(i,r)}getTranslation(t){return B.copy(t,this.state.target)}setTranslation(t,r){let n=this.state;B.sub(uve,t,n.target);let o=e.copySnapshot(e.createDefaultSnapshot(),n);B.add(o.position,n.position,uve),B.copy(o.target,t),this.setState(o,r)}};(A=>{function e(){return{enabled:!1,fullWidth:1,fullHeight:1,offsetX:0,offsetY:0,width:1,height:1}}A.ViewOffset=e;function t(s,c,l,u,g,m,p){s.fullWidth=c,s.fullHeight=l,s.offsetX=u,s.offsetY=g,s.width=m,s.height=p}A.setViewOffset=t;function r(s,c){s.enabled=c.enabled,s.fullWidth=c.fullWidth,s.fullHeight=c.fullHeight,s.offsetX=c.offsetX,s.offsetY=c.offsetY,s.width=c.width,s.height=c.height}A.copyViewOffset=r;function n(s,c,l,u,g){let m=Math.max(s,.01),p=u/g,d=g<u?1:p;return Math.abs(c==="orthographic"?m/d/Math.tan(l/2):m/d/Math.sin(l/2))}A.targetDistance=n;function o(){return{mode:"perspective",fov:Math.PI/4,position:B.create(0,0,100),up:B.create(0,1,0),target:B.create(0,0,0),radius:0,radiusMax:10,fog:50,clipFar:!0,minNear:5,minFar:0}}A.createDefaultSnapshot=o;function i(s,c){return c&&(typeof c.mode<"u"&&(s.mode=c.mode),typeof c.fov<"u"&&(s.fov=c.fov),typeof c.position<"u"&&B.copy(s.position,c.position),typeof c.up<"u"&&B.copy(s.up,c.up),typeof c.target<"u"&&B.copy(s.target,c.target),typeof c.radius<"u"&&(s.radius=c.radius),typeof c.radiusMax<"u"&&(s.radiusMax=c.radiusMax),typeof c.fog<"u"&&(s.fog=c.fog),typeof c.clipFar<"u"&&(s.clipFar=c.clipFar),typeof c.minNear<"u"&&(s.minNear=c.minNear),typeof c.minFar<"u"&&(s.minFar=c.minFar)),s}A.copySnapshot=i;function a(s,c){return s.mode===c.mode&&s.fov===c.fov&&s.radius===c.radius&&s.radiusMax===c.radiusMax&&s.fog===c.fog&&s.clipFar===c.clipFar&&s.minNear===c.minNear&&s.minFar===c.minFar&&B.exactEquals(s.position,c.position)&&B.exactEquals(s.up,c.up)&&B.exactEquals(s.target,c.target)}A.areSnapshotsEqual=a})(Io||={});var yH=B(),QH=B();function gve(e){e.scale===1?Y.lookAt(e.view,e.state.position,e.state.target,e.state.up):(B.scale(yH,e.state.position,e.scale),B.scale(QH,e.state.target,e.scale),Y.lookAt(e.view,yH,QH,e.state.up))}function rdt(e){let{viewport:t,zoom:r,near:n,far:o,viewOffset:i}=e,a=-t.width/2,A=t.width/2,s=t.height/2,c=-t.height/2,l=(A-a)/(2*r),u=(s-c)/(2*r),g=(A+a)/2,m=(s+c)/2,p=g-l,d=g+l,f=m+u,I=m-u;if(i.enabled){let C=r/(i.width/i.fullWidth),y=r/(i.height/i.fullHeight),Q=(A-a)/i.width,E=(s-c)/i.height;p+=Q*(i.offsetX/C),d=p+Q*(i.width/C),f-=E*(i.offsetY/y),I=f-E*(i.height/y)}Y.ortho(e.projection,p,d,f,I,n,o),gve(e)}function ndt(e){let t=e.viewport.width/e.viewport.height,{near:r,far:n,viewOffset:o}=e,i=r*Math.tan(.5*e.state.fov),a=2*i,A=t*a,s=-.5*A;o.enabled&&(s+=o.offsetX*A/o.fullWidth,i-=o.offsetY*a/o.fullHeight,A*=o.width/o.fullWidth,a*=o.height/o.fullHeight),Y.perspective(e.projection,s,s+A,i,i-a,r,n),gve(e)}function odt(e){let{forceFull:t,scale:r}=e,{radius:n,radiusMax:o,mode:i,fog:a,clipFar:A,minNear:s,minFar:c}=e.state;o*=r,c*=r,s*=r,n*=r,t&&(n=o);let l=.01*r;n<l&&(n=l);let u=Math.max(A?n:o,c);B.scale(QH,e.state.target,r),B.scale(yH,e.state.position,r);let g=B.distance(yH,QH),m=t?.01:g-n,p=g+u;t&&(s=m),m=Math.max(Math.min(o,s),m),p=Math.max(s,p),m===p&&(p=m+.01*r);let d=-(50-a)/50,f=g-u*d,I=p;e.near=m,e.far=p,e.fogNear=f,e.fogFar=I}var XX=B(),ZX=B(),mve=B(),qX={maxFps:h.Numeric(30,{min:10,max:60,step:10}),preferAtomPixelPadding:h.Numeric(3,{min:0,max:20,step:1},{description:"Number of extra pixels at which to prefer atoms over bonds."}),convertCoordsToRay:h.Boolean(!1,{description:"Convert screen coordinates to ray for picking."})},EH=class{constructor(t,r,n,o,i,a,A={}){this.canvasIdentify=t;this.canvasAsyncIdentify=r;this.lociGetter=n;this.input=o;this.camera=i;this.controls=a;this.ev=Fg.create();this.events={hover:this.ev(),drag:this.ev(),click:this.ev()};this.startX=-1;this.startY=-1;this.endX=-1;this.endY=-1;this.ray=void 0;this.pickData=void 0;this.position=void 0;this.isInteracting=!1;this.prevLoci=Xt.Loci.Empty;this.prevT=0;this.inside=!1;this.buttons=ya.create(0);this.button=ya.create(0);this.modifiers=as.None;this.props={...h.getDefaultValues(qX),...A},o.drag.subscribe(({x:s,y:c,buttons:l,button:u,modifiers:g})=>{this.isInteracting=!0,this.drag(s,c,l,u,g)}),o.move.subscribe(({x:s,y:c,inside:l,buttons:u,button:g,modifiers:m,onElement:p,ray:d})=>{if(!(!l||this.isInteracting)){if(!p){this.leave();return}this.move(s,c,u,g,m,d)}}),o.leave.subscribe(()=>{this.leave()}),o.click.subscribe(({x:s,y:c,buttons:l,button:u,modifiers:g,ray:m})=>{this.outsideViewport(s,c,m)||this.click(s,c,l,u,g,m)}),o.interactionEnd.subscribe(()=>{this.isInteracting=!1}),o.modifiers.subscribe(s=>{this.modify(s)})}setProps(t){Object.assign(this.props,t)}getTarget(){return this.ray?this.ray:this.props.convertCoordsToRay?this.camera.getRay(nu(),this.endX,this.input.height-this.endY):Le.create(this.endX,this.endY)}handleMove(){(this.startX!==this.endX||this.startY!==this.endY||this.input.pointerLock&&!this.controls.isMoving)&&(this.pickData=this.canvasAsyncIdentify(this.getTarget()),this.startX=this.endX,this.startY=this.endY)}handleClick(){let t=this.canvasIdentify(this.getTarget()),r=this.getLoci(t?.id,t?.position);this.events.click.next({current:r,buttons:this.buttons,button:this.button,modifiers:this.modifiers,page:Le.create(this.endX,this.endY),position:t?.position}),this.prevLoci=r}handleDrag(){(this.startX!==this.endX||this.startY!==this.endY||this.input.pointerLock&&!this.controls.isMoving)&&!this.outsideViewport(this.startX,this.startY,this.ray)&&(this.events.drag.next({current:this.prevLoci,buttons:this.buttons,button:this.button,modifiers:this.modifiers,pageStart:Le.create(this.startX,this.startY),pageEnd:Le.create(this.endX,this.endY)}),this.startX=this.endX,this.startY=this.endY)}tick(t){if(this.inside){if(this.pickData){let r=this.pickData.tryGet();if(r!=="pending"){if(this.position=r?.position,this.inside){let n=this.getLoci(r?.id,r?.position);this.events.hover.next({current:n,buttons:this.buttons,button:this.button,modifiers:this.modifiers,page:Le.create(this.endX,this.endY),position:r?.position}),this.prevLoci=n}this.pickData=void 0}}t-this.prevT>1e3/this.props.maxFps&&(this.prevT=t,this.isInteracting?this.handleDrag():this.handleMove())}}leave(){this.inside=!1,Xt.Loci.isEmpty(this.prevLoci)||(this.prevLoci=Xt.Loci.Empty,this.events.hover.next({current:this.prevLoci,buttons:this.buttons,button:this.button,modifiers:this.modifiers}))}move(t,r,n,o,i,a){this.inside=!0,this.buttons=n,this.button=o,this.modifiers=i,this.ray=a,this.endX=t,this.endY=r}click(t,r,n,o,i,a){this.endX=t,this.endY=r,this.buttons=n,this.button=o,this.modifiers=i,this.ray=a,this.handleClick()}drag(t,r,n,o,i){this.endX=t,this.endY=r,this.buttons=n,this.button=o,this.modifiers=i,this.handleDrag()}modify(t){as.areEqual(t,this.modifiers)||(this.modifiers=t,this.events.hover.next({current:this.prevLoci,buttons:this.buttons,button:this.button,modifiers:this.modifiers,page:Le.create(this.endX,this.endY),position:this.position}))}outsideViewport(t,r,n){if(n)return!1;let{input:o,camera:{viewport:i}}=this;return t*=o.pixelRatio,r*=o.pixelRatio,t>i.x+i.width||o.height-r>i.y+i.height||t<i.x||o.height-r<i.y}getLoci(t,r){let{repr:n,loci:o}=this.lociGetter(t);if(r&&n&&Et.isLoci(o)&&o.bonds.length===2){let{aUnit:i,aIndex:a}=o.bonds[0];i.conformation.position(i.elements[a],XX),B.sub(mve,this.camera.state.position,this.camera.state.target),B.projectPointOnPlane(ZX,r,mve,XX);let A=this.camera.getPixelSize(ZX),s=n.theme.size.size(o.bonds[0])*(n.props.sizeFactor??1);if(n.props.lineSizeAttenuation===!1&&(s*=A/2),s+=this.props.preferAtomPixelPadding*A,B.distance(ZX,XX)<s)return{repr:n,loci:Et.toFirstStructureElementLoci(o)}}return{repr:n,loci:o}}dispose(){this.ev.dispose()}};var dve=`
|
|
precision highp float;
|
|
precision highp int;
|
|
precision highp sampler2D;
|
|
|
|
uniform sampler2D tSsaoDepth;
|
|
uniform sampler2D tSsaoDepthTransparent;
|
|
uniform sampler2D tColor;
|
|
uniform sampler2D tTransparentColor;
|
|
uniform sampler2D tDepthOpaque;
|
|
uniform sampler2D tDepthTransparent;
|
|
uniform sampler2D tShadows;
|
|
uniform sampler2D tOutlines;
|
|
uniform sampler2D tBloom;
|
|
uniform vec2 uTexSize;
|
|
|
|
uniform float uNear;
|
|
uniform float uFar;
|
|
uniform float uFogNear;
|
|
uniform float uFogFar;
|
|
uniform vec3 uFogColor;
|
|
uniform vec3 uOutlineColor;
|
|
uniform vec3 uOcclusionColor;
|
|
uniform bool uTransparentBackground;
|
|
uniform vec2 uOcclusionOffset;
|
|
|
|
#include common
|
|
|
|
float getViewZ(const in float depth) {
|
|
#if dOrthographic == 1
|
|
return orthographicDepthToViewZ(depth, uNear, uFar);
|
|
#else
|
|
return perspectiveDepthToViewZ(depth, uNear, uFar);
|
|
#endif
|
|
}
|
|
|
|
float getDepthOpaque(const in vec2 coords) {
|
|
#ifdef depthTextureSupport
|
|
return texture2D(tDepthOpaque, coords).r;
|
|
#else
|
|
return unpackRGBAToDepth(texture2D(tDepthOpaque, coords));
|
|
#endif
|
|
}
|
|
|
|
float getDepthTransparent(const in vec2 coords) {
|
|
return unpackRGBAToDepthWithAlpha(texture2D(tDepthTransparent, coords)).x;
|
|
}
|
|
|
|
bool isBackground(const in float depth) {
|
|
// (2^24 - 1) / 2^24, max of 24-bit packed depth; also passes raw fp32.
|
|
return depth >= 0.99999994;
|
|
}
|
|
|
|
int squaredOutlineScale = dOutlineScale * dOutlineScale;
|
|
void getOutline(const in vec2 coords, out bool hasOpaque, out bool hasTransparent, out float opaqueDepth, out float transparentDepth, out float alpha) {
|
|
vec2 invTexSize = 1.0 / uTexSize;
|
|
|
|
hasOpaque = false;
|
|
hasTransparent = false;
|
|
opaqueDepth = 1.0;
|
|
transparentDepth = 1.0;
|
|
alpha = 0.0;
|
|
for (int y = -dOutlineScale; y <= dOutlineScale; y++) {
|
|
for (int x = -dOutlineScale; x <= dOutlineScale; x++) {
|
|
if (x * x + y * y > squaredOutlineScale) {
|
|
continue;
|
|
}
|
|
|
|
vec2 sampleCoords = coords + vec2(float(x), float(y)) * invTexSize;
|
|
|
|
vec4 sampleOutlineCombined = texture2D(tOutlines, sampleCoords);
|
|
float sampleOpaqueDepth = unpackRGToUnitInterval(sampleOutlineCombined.gb);
|
|
float sampleTransparentDepth = sampleOutlineCombined.a;
|
|
vec2 sampleFlagWithAlpha = unpack2x4(sampleOutlineCombined.r);
|
|
|
|
float sampleFlag = sampleFlagWithAlpha.x;
|
|
float sampleAlpha = clamp(sampleFlagWithAlpha.y * 0.5, 0.01, 1.0);
|
|
|
|
if ((sampleFlag > 0.20 && sampleFlag < 0.30) || (sampleFlag > 0.70 && sampleFlag < 0.80)) { // transparent || both
|
|
if (sampleOpaqueDepth < opaqueDepth) {
|
|
hasOpaque = true;
|
|
opaqueDepth = sampleOpaqueDepth;
|
|
}
|
|
}
|
|
|
|
if ((((sampleFlag > 0.45 && sampleFlag < 0.55) || (sampleFlag > 0.70 && sampleFlag < 0.80))) && sampleTransparentDepth < transparentDepth) { // transparent || both
|
|
hasTransparent = true;
|
|
transparentDepth = sampleTransparentDepth;
|
|
alpha = sampleAlpha;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
float getSsao(vec2 coords) {
|
|
float rawSsao = unpackRGToUnitInterval(texture2D(tSsaoDepth, coords).xy);
|
|
if (rawSsao > 0.999) {
|
|
return 1.0;
|
|
} else if (rawSsao > 0.001) {
|
|
return rawSsao;
|
|
}
|
|
// treat values close to 0.0 as errors and return no occlusion
|
|
return 1.0;
|
|
}
|
|
|
|
float getSsaoTransparent(vec2 coords) {
|
|
float rawSsao = unpackRGToUnitInterval(texture2D(tSsaoDepthTransparent, coords).xy);
|
|
if (rawSsao > 0.999) {
|
|
return 1.0;
|
|
} else if (rawSsao > 0.001) {
|
|
return rawSsao;
|
|
}
|
|
// treat values close to 0.0 as errors and return no occlusion
|
|
return 1.0;
|
|
}
|
|
|
|
void main(void) {
|
|
vec2 coords = gl_FragCoord.xy / uTexSize;
|
|
vec4 color = texture2D(tColor, coords);
|
|
|
|
float opaqueDepth = getDepthOpaque(coords);
|
|
float transparentDepth = 1.0;
|
|
#ifdef dBlendTransparency
|
|
bool blendTransparency = true;
|
|
vec4 transparentColor = texture2D(tTransparentColor, coords);
|
|
|
|
#if defined(dOutlineEnable) || defined(dOcclusionEnable) && defined(dOcclusionIncludeTransparency)
|
|
transparentDepth = getDepthTransparent(coords);
|
|
#endif
|
|
#endif
|
|
|
|
#if defined(dOcclusionEnable) || defined(dShadowEnable)
|
|
bool isOpaqueBackground = isBackground(opaqueDepth);
|
|
float viewDist = abs(getViewZ(opaqueDepth));
|
|
float fogFactor = smoothstep(uFogNear, uFogFar, viewDist);
|
|
#endif
|
|
|
|
#if defined(dOcclusionEnable)
|
|
if (!isOpaqueBackground) {
|
|
float occlusionFactor = getSsao(coords + uOcclusionOffset);
|
|
|
|
if (!uTransparentBackground) {
|
|
color.rgb = mix(mix(uOcclusionColor, uFogColor, fogFactor), color.rgb, occlusionFactor);
|
|
} else {
|
|
color.rgb = mix(uOcclusionColor * (1.0 - fogFactor), color.rgb, occlusionFactor);
|
|
}
|
|
}
|
|
#if defined(dBlendTransparency) && defined(dOcclusionIncludeTransparency)
|
|
if (!isBackground(transparentDepth)) {
|
|
float viewDist = abs(getViewZ(transparentDepth));
|
|
float fogFactor = smoothstep(uFogNear, uFogFar, viewDist);
|
|
float occlusionFactor = getSsaoTransparent(coords + uOcclusionOffset);
|
|
transparentColor.rgb = mix(uOcclusionColor * (1.0 - fogFactor), transparentColor.rgb, occlusionFactor);
|
|
}
|
|
#endif
|
|
#endif
|
|
|
|
#ifdef dShadowEnable
|
|
if (!isOpaqueBackground) {
|
|
vec4 shadow = texture2D(tShadows, coords);
|
|
if (!uTransparentBackground) {
|
|
color.rgb = mix(mix(vec3(0), uFogColor, fogFactor), color.rgb, shadow.a);
|
|
} else {
|
|
color.rgb = mix(vec3(0) * (1.0 - fogFactor), color.rgb, shadow.a);
|
|
}
|
|
}
|
|
#endif
|
|
|
|
// outline needs to be handled after occlusion and shadow to keep them clean
|
|
#ifdef dOutlineEnable
|
|
bool hasOpaque;
|
|
bool hasTransparent;
|
|
float outlineOpaqueDepth;
|
|
float outlineTransparentDepth;
|
|
float outlineAlpha;
|
|
getOutline(coords, hasOpaque, hasTransparent, outlineOpaqueDepth, outlineTransparentDepth, outlineAlpha);
|
|
|
|
if (hasOpaque) {
|
|
float viewDist = abs(getViewZ(outlineOpaqueDepth));
|
|
float fogFactor = smoothstep(uFogNear, uFogFar, viewDist);
|
|
if (!uTransparentBackground) {
|
|
color.rgb = mix(uOutlineColor, uFogColor, fogFactor);
|
|
} else {
|
|
color.a = 1.0 - fogFactor;
|
|
color.rgb = mix(uOutlineColor, vec3(0.0), fogFactor);
|
|
}
|
|
}
|
|
|
|
#ifdef dBlendTransparency
|
|
if (hasTransparent) {
|
|
if (hasOpaque && outlineOpaqueDepth < outlineTransparentDepth) {
|
|
blendTransparency = false;
|
|
} else {
|
|
float finalOutlineAlpha = clamp(outlineAlpha * 2.0, 0.0, 1.0);
|
|
float viewDist = abs(getViewZ(outlineTransparentDepth));
|
|
float fogFactor = smoothstep(uFogNear, uFogFar, viewDist);
|
|
float finalAlpha = max(transparentColor.a, finalOutlineAlpha * (1.0 - fogFactor));
|
|
transparentColor.a = finalAlpha;
|
|
transparentColor.rgb = uOutlineColor * finalAlpha;
|
|
}
|
|
}
|
|
#endif
|
|
#endif
|
|
|
|
#ifdef dBlendTransparency
|
|
if (blendTransparency) {
|
|
float alpha = transparentColor.a;
|
|
if (alpha != 0.0) {
|
|
// blending
|
|
color = transparentColor + color * (1.0 - alpha);
|
|
}
|
|
}
|
|
#endif
|
|
|
|
#ifdef dBloomEnable
|
|
vec4 bloom = texture2D(tBloom, coords);
|
|
// additive glow over geometry and background alike; alpha just covers the premultiplied rgb
|
|
color.rgb += bloom.rgb;
|
|
color.a = min(max(color.a, max(color.r, max(color.g, color.b))), 1.0);
|
|
#endif
|
|
|
|
gl_FragColor = color;
|
|
}
|
|
`;var pve=`
|
|
precision highp float;
|
|
precision highp int;
|
|
precision highp sampler2D;
|
|
|
|
uniform sampler2D tColor;
|
|
uniform vec2 uTexSizeInv;
|
|
|
|
// adapted from https://github.com/kosua20/Rendu
|
|
// MIT License Copyright (c) 2017 Simon Rodriguez
|
|
|
|
#define QUALITY(q) ((q) < 5 ? 1.0 : ((q) > 5 ? ((q) < 10 ? 2.0 : ((q) < 11 ? 4.0 : 8.0)) : 1.5))
|
|
|
|
float rgb2luma(vec3 rgb){
|
|
return sqrt(dot(rgb, vec3(0.299, 0.587, 0.114)));
|
|
}
|
|
|
|
float sampleLuma(vec2 uv) {
|
|
return rgb2luma(texture2D(tColor, uv).rgb);
|
|
}
|
|
|
|
float sampleLuma(vec2 uv, float uOffset, float vOffset) {
|
|
uv += uTexSizeInv * vec2(uOffset, vOffset);
|
|
return sampleLuma(uv);
|
|
}
|
|
|
|
void main(void) {
|
|
vec2 coords = gl_FragCoord.xy * uTexSizeInv;
|
|
vec2 inverseScreenSize = uTexSizeInv;
|
|
|
|
vec4 colorCenter = texture2D(tColor, coords);
|
|
|
|
// Luma at the current fragment
|
|
float lumaCenter = rgb2luma(colorCenter.rgb);
|
|
|
|
// Luma at the four direct neighbours of the current fragment.
|
|
float lumaDown = sampleLuma(coords, 0.0, -1.0);
|
|
float lumaUp = sampleLuma(coords, 0.0, 1.0);
|
|
float lumaLeft = sampleLuma(coords, -1.0, 0.0);
|
|
float lumaRight = sampleLuma(coords, 1.0, 0.0);
|
|
|
|
// Find the maximum and minimum luma around the current fragment.
|
|
float lumaMin = min(lumaCenter, min(min(lumaDown, lumaUp), min(lumaLeft, lumaRight)));
|
|
float lumaMax = max(lumaCenter, max(max(lumaDown, lumaUp), max(lumaLeft, lumaRight)));
|
|
|
|
// Compute the delta.
|
|
float lumaRange = lumaMax - lumaMin;
|
|
|
|
// If the luma variation is lower that a threshold (or if we are in a really dark area),
|
|
// we are not on an edge, don't perform any AA.
|
|
if (lumaRange < max(dEdgeThresholdMin, lumaMax * dEdgeThresholdMax)) {
|
|
gl_FragColor = colorCenter;
|
|
return;
|
|
}
|
|
|
|
// Query the 4 remaining corners lumas.
|
|
float lumaDownLeft = sampleLuma(coords, -1.0, -1.0);
|
|
float lumaUpRight = sampleLuma(coords, 1.0, 1.0);
|
|
float lumaUpLeft = sampleLuma(coords, -1.0, 1.0);
|
|
float lumaDownRight = sampleLuma(coords, 1.0, -1.0);
|
|
|
|
// Combine the four edges lumas (using intermediary variables for future computations
|
|
// with the same values).
|
|
float lumaDownUp = lumaDown + lumaUp;
|
|
float lumaLeftRight = lumaLeft + lumaRight;
|
|
|
|
// Same for corners
|
|
float lumaLeftCorners = lumaDownLeft + lumaUpLeft;
|
|
float lumaDownCorners = lumaDownLeft + lumaDownRight;
|
|
float lumaRightCorners = lumaDownRight + lumaUpRight;
|
|
float lumaUpCorners = lumaUpRight + lumaUpLeft;
|
|
|
|
// Compute an estimation of the gradient along the horizontal and vertical axis.
|
|
float edgeHorizontal = abs(-2.0 * lumaLeft + lumaLeftCorners) + abs(-2.0 * lumaCenter + lumaDownUp) * 2.0 + abs(-2.0 * lumaRight + lumaRightCorners);
|
|
float edgeVertical = abs(-2.0 * lumaUp + lumaUpCorners) + abs(-2.0 * lumaCenter + lumaLeftRight) * 2.0 + abs(-2.0 * lumaDown + lumaDownCorners);
|
|
|
|
// Is the local edge horizontal or vertical ?
|
|
bool isHorizontal = (edgeHorizontal >= edgeVertical);
|
|
|
|
// Choose the step size (one pixel) accordingly.
|
|
float stepLength = isHorizontal ? inverseScreenSize.y : inverseScreenSize.x;
|
|
|
|
// Select the two neighboring texels lumas in the opposite direction to the local edge.
|
|
float luma1 = isHorizontal ? lumaDown : lumaLeft;
|
|
float luma2 = isHorizontal ? lumaUp : lumaRight;
|
|
// Compute gradients in this direction.
|
|
float gradient1 = luma1 - lumaCenter;
|
|
float gradient2 = luma2 - lumaCenter;
|
|
|
|
// Which direction is the steepest ?
|
|
bool is1Steepest = abs(gradient1) >= abs(gradient2);
|
|
|
|
// Gradient in the corresponding direction, normalized.
|
|
float gradientScaled = 0.25 * max(abs(gradient1), abs(gradient2));
|
|
|
|
// Average luma in the correct direction.
|
|
float lumaLocalAverage = 0.0;
|
|
if(is1Steepest){
|
|
// Switch the direction
|
|
stepLength = -stepLength;
|
|
lumaLocalAverage = 0.5 * (luma1 + lumaCenter);
|
|
} else {
|
|
lumaLocalAverage = 0.5 * (luma2 + lumaCenter);
|
|
}
|
|
|
|
// Shift UV in the correct direction by half a pixel.
|
|
vec2 currentUv = coords;
|
|
if(isHorizontal){
|
|
currentUv.y += stepLength * 0.5;
|
|
} else {
|
|
currentUv.x += stepLength * 0.5;
|
|
}
|
|
|
|
// Compute offset (for each iteration step) in the right direction.
|
|
vec2 offset = isHorizontal ? vec2(inverseScreenSize.x, 0.0) : vec2(0.0, inverseScreenSize.y);
|
|
// Compute UVs to explore on each side of the edge, orthogonally.
|
|
// The QUALITY allows us to step faster.
|
|
vec2 uv1 = currentUv - offset * QUALITY(0);
|
|
vec2 uv2 = currentUv + offset * QUALITY(0);
|
|
|
|
// Read the lumas at both current extremities of the exploration segment,
|
|
// and compute the delta wrt to the local average luma.
|
|
float lumaEnd1 = sampleLuma(uv1);
|
|
float lumaEnd2 = sampleLuma(uv2);
|
|
lumaEnd1 -= lumaLocalAverage;
|
|
lumaEnd2 -= lumaLocalAverage;
|
|
|
|
// If the luma deltas at the current extremities is larger than the local gradient,
|
|
// we have reached the side of the edge.
|
|
bool reached1 = abs(lumaEnd1) >= gradientScaled;
|
|
bool reached2 = abs(lumaEnd2) >= gradientScaled;
|
|
bool reachedBoth = reached1 && reached2;
|
|
|
|
// If the side is not reached, we continue to explore in this direction.
|
|
if(!reached1){
|
|
uv1 -= offset * QUALITY(1);
|
|
}
|
|
if(!reached2){
|
|
uv2 += offset * QUALITY(1);
|
|
}
|
|
|
|
// If both sides have not been reached, continue to explore.
|
|
if(!reachedBoth){
|
|
for(int i = 2; i < dIterations; i++){
|
|
// If needed, read luma in 1st direction, compute delta.
|
|
if(!reached1){
|
|
lumaEnd1 = sampleLuma(uv1);
|
|
lumaEnd1 = lumaEnd1 - lumaLocalAverage;
|
|
}
|
|
// If needed, read luma in opposite direction, compute delta.
|
|
if(!reached2){
|
|
lumaEnd2 = sampleLuma(uv2);
|
|
lumaEnd2 = lumaEnd2 - lumaLocalAverage;
|
|
}
|
|
// If the luma deltas at the current extremities is larger than the local gradient,
|
|
// we have reached the side of the edge.
|
|
reached1 = abs(lumaEnd1) >= gradientScaled;
|
|
reached2 = abs(lumaEnd2) >= gradientScaled;
|
|
reachedBoth = reached1 && reached2;
|
|
|
|
// If the side is not reached, we continue to explore in this direction,
|
|
// with a variable quality.
|
|
if(!reached1){
|
|
uv1 -= offset * QUALITY(i);
|
|
}
|
|
if(!reached2){
|
|
uv2 += offset * QUALITY(i);
|
|
}
|
|
|
|
// If both sides have been reached, stop the exploration.
|
|
if(reachedBoth){
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
// Compute the distances to each side edge of the edge (!).
|
|
float distance1 = isHorizontal ? (coords.x - uv1.x) : (coords.y - uv1.y);
|
|
float distance2 = isHorizontal ? (uv2.x - coords.x) : (uv2.y - coords.y);
|
|
|
|
// In which direction is the side of the edge closer ?
|
|
bool isDirection1 = distance1 < distance2;
|
|
float distanceFinal = min(distance1, distance2);
|
|
|
|
// Thickness of the edge.
|
|
float edgeThickness = (distance1 + distance2);
|
|
|
|
// Is the luma at center smaller than the local average ?
|
|
bool isLumaCenterSmaller = lumaCenter < lumaLocalAverage;
|
|
|
|
// If the luma at center is smaller than at its neighbour,
|
|
// the delta luma at each end should be positive (same variation).
|
|
bool correctVariation1 = (lumaEnd1 < 0.0) != isLumaCenterSmaller;
|
|
bool correctVariation2 = (lumaEnd2 < 0.0) != isLumaCenterSmaller;
|
|
|
|
// Only keep the result in the direction of the closer side of the edge.
|
|
bool correctVariation = isDirection1 ? correctVariation1 : correctVariation2;
|
|
|
|
// UV offset: read in the direction of the closest side of the edge.
|
|
float pixelOffset = - distanceFinal / edgeThickness + 0.5;
|
|
|
|
// If the luma variation is incorrect, do not offset.
|
|
float finalOffset = correctVariation ? pixelOffset : 0.0;
|
|
|
|
// Sub-pixel shifting
|
|
// Full weighted average of the luma over the 3x3 neighborhood.
|
|
float lumaAverage = (1.0 / 12.0) * (2.0 * (lumaDownUp + lumaLeftRight) + lumaLeftCorners + lumaRightCorners);
|
|
// Ratio of the delta between the global average and the center luma,
|
|
// over the luma range in the 3x3 neighborhood.
|
|
float subPixelOffset1 = clamp(abs(lumaAverage - lumaCenter) / lumaRange, 0.0, 1.0);
|
|
float subPixelOffset2 = (-2.0 * subPixelOffset1 + 3.0) * subPixelOffset1 * subPixelOffset1;
|
|
// Compute a sub-pixel offset based on this delta.
|
|
float subPixelOffsetFinal = subPixelOffset2 * subPixelOffset2 * float(dSubpixelQuality);
|
|
|
|
// Pick the biggest of the two offsets.
|
|
finalOffset = max(finalOffset, subPixelOffsetFinal);
|
|
|
|
// Compute the final UV coordinates.
|
|
vec2 finalUv = coords;
|
|
if(isHorizontal){
|
|
finalUv.y += finalOffset * stepLength;
|
|
} else {
|
|
finalUv.x += finalOffset * stepLength;
|
|
}
|
|
|
|
// Read the color at the new UV coordinates, and use it.
|
|
gl_FragColor = texture2D(tColor, finalUv);
|
|
}
|
|
`;var fve={edgeThresholdMin:h.Numeric(.0312,{min:.0312,max:.0833,step:1e-4},{description:"Trims the algorithm from processing darks."}),edgeThresholdMax:h.Numeric(.063,{min:.063,max:.333,step:.001},{description:"The minimum amount of local contrast required to apply algorithm."}),iterations:h.Numeric(12,{min:0,max:16,step:1},{description:"Number of edge exploration steps."}),subpixelQuality:h.Numeric(.3,{min:0,max:1,step:.01},{description:"Choose the amount of sub-pixel aliasing removal."})},bH=class{constructor(t,r){this.webgl=t;this.renderable=Adt(t,r)}updateState(t){let{gl:r,state:n}=this.webgl;n.enable(r.SCISSOR_TEST),n.disable(r.BLEND),n.disable(r.DEPTH_TEST),n.depthMask(!1);let{x:o,y:i,width:a,height:A}=t;n.viewport(o,i,a,A),n.scissor(o,i,a,A),n.clearColor(0,0,0,1),r.clear(r.COLOR_BUFFER_BIT)}setSize(t,r){D.update(this.renderable.values.uTexSizeInv,Le.set(this.renderable.values.uTexSizeInv.ref.value,1/t,1/r))}update(t,r){let{values:n}=this.renderable,{edgeThresholdMin:o,edgeThresholdMax:i,iterations:a,subpixelQuality:A}=r,s=!1;n.tColor.ref.value!==t&&(D.update(this.renderable.values.tColor,t),s=!0),n.dEdgeThresholdMin.ref.value!==o&&(s=!0),D.updateIfChanged(n.dEdgeThresholdMin,o),n.dEdgeThresholdMax.ref.value!==i&&(s=!0),D.updateIfChanged(n.dEdgeThresholdMax,i),n.dIterations.ref.value!==a&&(s=!0),D.updateIfChanged(n.dIterations,a),n.dSubpixelQuality.ref.value!==A&&(s=!0),D.updateIfChanged(n.dSubpixelQuality,A),s&&this.renderable.update()}render(t,r){at&&this.webgl.timer.mark("FxaaPass.render"),r?r.bind():this.webgl.bindDrawingBuffer(),this.updateState(t),this.renderable.render(),at&&this.webgl.timer.markEnd("FxaaPass.render")}},idt={...Wn,tColor:Ft("texture","rgba","ubyte","linear"),uTexSizeInv:Re("v2"),dEdgeThresholdMin:bt("number"),dEdgeThresholdMax:bt("number"),dIterations:bt("number"),dSubpixelQuality:bt("number")},adt=Cn("fxaa",mo,pve);function Adt(e,t){let r=t.getWidth(),n=t.getHeight(),o={...Xn,tColor:D.create(t),uTexSizeInv:D.create(Le.create(1/r,1/n)),dEdgeThresholdMin:D.create(.0312),dEdgeThresholdMax:D.create(.125),dIterations:D.create(12),dSubpixelQuality:D.create(.3)},i={...idt},a=Un(e,"triangles",adt,i,o);return Ln(a,o)}var Bve=`
|
|
precision highp float;
|
|
|
|
attribute vec2 aPosition;
|
|
uniform vec2 uQuadScale;
|
|
|
|
uniform vec2 uTexSizeInv;
|
|
uniform vec4 uViewport;
|
|
|
|
varying vec2 vUv;
|
|
varying vec4 vOffset[2];
|
|
|
|
void SMAANeighborhoodBlendingVS(vec2 texCoord) {
|
|
vOffset[0] = texCoord.xyxy + uTexSizeInv.xyxy * vec4(-1.0, 0.0, 0.0, 1.0); // WebGL port note: Changed sign in W component
|
|
vOffset[1] = texCoord.xyxy + uTexSizeInv.xyxy * vec4(1.0, 0.0, 0.0, -1.0); // WebGL port note: Changed sign in W component
|
|
}
|
|
|
|
void main() {
|
|
vec2 scale = uViewport.zw * uTexSizeInv;
|
|
vec2 shift = uViewport.xy * uTexSizeInv;
|
|
vUv = (aPosition + 1.0) * 0.5 * scale + shift;
|
|
SMAANeighborhoodBlendingVS(vUv);
|
|
vec2 position = aPosition * uQuadScale - vec2(1.0, 1.0) + uQuadScale;
|
|
gl_Position = vec4(position, 0.0, 1.0);
|
|
}
|
|
`;var Ive=`
|
|
precision highp float;
|
|
precision highp int;
|
|
precision highp sampler2D;
|
|
|
|
uniform sampler2D tWeights;
|
|
uniform sampler2D tColor;
|
|
uniform vec2 uTexSizeInv;
|
|
|
|
varying vec2 vUv;
|
|
varying vec4 vOffset[2];
|
|
|
|
vec4 SMAANeighborhoodBlendingPS(vec2 texCoord, vec4 offset[2], sampler2D colorTex, sampler2D blendTex) {
|
|
// Fetch the blending weights for current pixel:
|
|
vec4 a;
|
|
a.xz = texture2D(blendTex, texCoord).xz;
|
|
a.y = texture2D(blendTex, offset[1].zw).g;
|
|
a.w = texture2D(blendTex, offset[1].xy).a;
|
|
|
|
// Is there any blending weight with a value greater than 0.0?
|
|
if (dot(a, vec4(1.0, 1.0, 1.0, 1.0)) < 1e-5) {
|
|
return texture2D(colorTex, texCoord, 0.0);
|
|
} else {
|
|
// Up to 4 lines can be crossing a pixel (one through each edge). We
|
|
// favor blending by choosing the line with the maximum weight for each
|
|
// direction:
|
|
vec2 offset;
|
|
offset.x = a.a > a.b ? a.a : -a.b; // left vs. right
|
|
offset.y = a.g > a.r ? -a.g : a.r; // top vs. bottom // WebGL port note: Changed signs
|
|
|
|
// Then we go in the direction that has the maximum weight:
|
|
if (abs(offset.x) > abs(offset.y)) { // horizontal vs. vertical
|
|
offset.y = 0.0;
|
|
} else {
|
|
offset.x = 0.0;
|
|
}
|
|
|
|
// Fetch the opposite color and lerp by hand:
|
|
vec4 C = texture2D(colorTex, texCoord, 0.0);
|
|
texCoord += sign(offset) * uTexSizeInv;
|
|
vec4 Cop = texture2D(colorTex, texCoord, 0.0);
|
|
float s = abs(offset.x) > abs(offset.y) ? abs(offset.x) : abs(offset.y);
|
|
|
|
// WebGL port note: Added gamma correction
|
|
C.xyz = pow(C.xyz, vec3(2.2));
|
|
Cop.xyz = pow(Cop.xyz, vec3(2.2));
|
|
vec4 mixed = mix(C, Cop, s);
|
|
mixed.xyz = pow(mixed.xyz, vec3(1.0 / 2.2));
|
|
|
|
return mixed;
|
|
}
|
|
}
|
|
|
|
void main() {
|
|
gl_FragColor = SMAANeighborhoodBlendingPS(vUv, vOffset, tColor, tWeights);
|
|
}
|
|
`;var Cve=`
|
|
precision highp float;
|
|
|
|
attribute vec2 aPosition;
|
|
uniform vec2 uQuadScale;
|
|
|
|
uniform vec2 uTexSizeInv;
|
|
uniform vec4 uViewport;
|
|
|
|
varying vec2 vUv;
|
|
varying vec4 vOffset[3];
|
|
varying vec2 vPixCoord;
|
|
|
|
void SMAABlendingWeightCalculationVS(vec2 texCoord) {
|
|
vPixCoord = texCoord / uTexSizeInv;
|
|
|
|
// We will use these offsets for the searches later on (see @PSEUDO_GATHER4):
|
|
vOffset[0] = texCoord.xyxy + uTexSizeInv.xyxy * vec4(-0.25, 0.125, 1.25, 0.125); // WebGL port note: Changed sign in Y and W components
|
|
vOffset[1] = texCoord.xyxy + uTexSizeInv.xyxy * vec4(-0.125, 0.25, -0.125, -1.25); // WebGL port note: Changed sign in Y and W components
|
|
|
|
// And these for the searches, they indicate the ends of the loops:
|
|
vOffset[2] = vec4(vOffset[0].xz, vOffset[1].yw) + vec4(-2.0, 2.0, -2.0, 2.0) * uTexSizeInv.xxyy * float(dMaxSearchSteps);
|
|
}
|
|
|
|
void main() {
|
|
vec2 scale = uViewport.zw * uTexSizeInv;
|
|
vec2 shift = uViewport.xy * uTexSizeInv;
|
|
vUv = (aPosition + 1.0) * 0.5 * scale + shift;
|
|
SMAABlendingWeightCalculationVS(vUv);
|
|
vec2 position = aPosition * uQuadScale - vec2(1.0, 1.0) + uQuadScale;
|
|
gl_Position = vec4(position, 0.0, 1.0);
|
|
}
|
|
`;var hve=`
|
|
precision highp float;
|
|
precision highp int;
|
|
precision highp sampler2D;
|
|
|
|
#define SMAASampleLevelZeroOffset(tex, coord, offset) texture2D(tex, coord + float(offset) * uTexSizeInv, 0.0)
|
|
|
|
#define SMAA_AREATEX_MAX_DISTANCE 16
|
|
#define SMAA_AREATEX_PIXEL_SIZE (1.0 / vec2(160.0, 560.0))
|
|
#define SMAA_AREATEX_SUBTEX_SIZE (1.0 / 7.0)
|
|
|
|
uniform sampler2D tEdges;
|
|
uniform sampler2D tArea;
|
|
uniform sampler2D tSearch;
|
|
uniform vec2 uTexSizeInv;
|
|
|
|
varying vec2 vUv;
|
|
varying vec4 vOffset[3];
|
|
varying vec2 vPixCoord;
|
|
|
|
#if __VERSION__ == 100
|
|
vec2 round(vec2 x) {
|
|
return sign(x) * floor(abs(x) + 0.5);
|
|
}
|
|
#endif
|
|
|
|
float SMAASearchLength(sampler2D searchTex, vec2 e, float bias, float scale) {
|
|
// Not required if searchTex accesses are set to point:
|
|
// float2 SEARCH_TEX_PIXEL_SIZE = 1.0 / float2(66.0, 33.0);
|
|
// e = float2(bias, 0.0) + 0.5 * SEARCH_TEX_PIXEL_SIZE +
|
|
// e * float2(scale, 1.0) * float2(64.0, 32.0) * SEARCH_TEX_PIXEL_SIZE;
|
|
e.r = bias + e.r * scale;
|
|
return 255.0 * texture2D(searchTex, e, 0.0).r;
|
|
}
|
|
|
|
float SMAASearchXLeft(sampler2D edgesTex, sampler2D searchTex, vec2 texCoord, float end) {
|
|
/**
|
|
* @PSEUDO_GATHER4
|
|
* This texCoord has been offset by (-0.25, -0.125) in the vertex shader to
|
|
* sample between edge, thus fetching four edges in a row.
|
|
* Sampling with different offsets in each direction allows to disambiguate
|
|
* which edges are active from the four fetched ones.
|
|
*/
|
|
vec2 e = vec2(0.0, 1.0);
|
|
|
|
for (int i = 0; i < dMaxSearchSteps; i++) { // WebGL port note: Changed while to for
|
|
e = texture2D( edgesTex, texCoord, 0.0).rg;
|
|
texCoord -= vec2(2.0, 0.0) * uTexSizeInv;
|
|
if (!(texCoord.x > end && e.g > 0.8281 && e.r == 0.0)) break;
|
|
}
|
|
|
|
// We correct the previous (-0.25, -0.125) offset we applied:
|
|
texCoord.x += 0.25 * uTexSizeInv.x;
|
|
|
|
// The searches are bias by 1, so adjust the coords accordingly:
|
|
texCoord.x += uTexSizeInv.x;
|
|
|
|
// Disambiguate the length added by the last step:
|
|
texCoord.x += 2.0 * uTexSizeInv.x; // Undo last step
|
|
texCoord.x -= uTexSizeInv.x * SMAASearchLength(searchTex, e, 0.0, 0.5);
|
|
|
|
return texCoord.x;
|
|
}
|
|
|
|
float SMAASearchXRight(sampler2D edgesTex, sampler2D searchTex, vec2 texCoord, float end) {
|
|
vec2 e = vec2( 0.0, 1.0 );
|
|
|
|
for (int i = 0; i < dMaxSearchSteps; i++) { // WebGL port note: Changed while to for
|
|
e = texture2D(edgesTex, texCoord, 0.0).rg;
|
|
texCoord += vec2(2.0, 0.0) * uTexSizeInv;
|
|
if (!(texCoord.x < end && e.g > 0.8281 && e.r == 0.0)) break;
|
|
}
|
|
|
|
texCoord.x -= 0.25 * uTexSizeInv.x;
|
|
texCoord.x -= uTexSizeInv.x;
|
|
texCoord.x -= 2.0 * uTexSizeInv.x;
|
|
texCoord.x += uTexSizeInv.x * SMAASearchLength( searchTex, e, 0.5, 0.5 );
|
|
|
|
return texCoord.x;
|
|
}
|
|
|
|
float SMAASearchYUp(sampler2D edgesTex, sampler2D searchTex, vec2 texCoord, float end) {
|
|
vec2 e = vec2( 1.0, 0.0 );
|
|
|
|
for (int i = 0; i < dMaxSearchSteps; i++) { // WebGL port note: Changed while to for
|
|
e = texture2D(edgesTex, texCoord, 0.0).rg;
|
|
texCoord += vec2(0.0, 2.0) * uTexSizeInv; // WebGL port note: Changed sign
|
|
if (!(texCoord.y > end && e.r > 0.8281 && e.g == 0.0)) break;
|
|
}
|
|
|
|
texCoord.y -= 0.25 * uTexSizeInv.y; // WebGL port note: Changed sign
|
|
texCoord.y -= uTexSizeInv.y; // WebGL port note: Changed sign
|
|
texCoord.y -= 2.0 * uTexSizeInv.y; // WebGL port note: Changed sign
|
|
texCoord.y += uTexSizeInv.y * SMAASearchLength(searchTex, e.gr, 0.0, 0.5); // WebGL port note: Changed sign
|
|
|
|
return texCoord.y;
|
|
}
|
|
|
|
float SMAASearchYDown(sampler2D edgesTex, sampler2D searchTex, vec2 texCoord, float end) {
|
|
vec2 e = vec2( 1.0, 0.0 );
|
|
|
|
for (int i = 0; i < dMaxSearchSteps; i++) { // WebGL port note: Changed while to for
|
|
e = texture2D(edgesTex, texCoord, 0.0).rg;
|
|
texCoord -= vec2( 0.0, 2.0 ) * uTexSizeInv; // WebGL port note: Changed sign
|
|
if (!(texCoord.y < end && e.r > 0.8281 && e.g == 0.0)) break;
|
|
}
|
|
|
|
texCoord.y += 0.25 * uTexSizeInv.y; // WebGL port note: Changed sign
|
|
texCoord.y += uTexSizeInv.y; // WebGL port note: Changed sign
|
|
texCoord.y += 2.0 * uTexSizeInv.y; // WebGL port note: Changed sign
|
|
texCoord.y -= uTexSizeInv.y * SMAASearchLength(searchTex, e.gr, 0.5, 0.5); // WebGL port note: Changed sign
|
|
|
|
return texCoord.y;
|
|
}
|
|
|
|
vec2 SMAAArea(sampler2D areaTex, vec2 dist, float e1, float e2, float offset) {
|
|
// Rounding prevents precision errors of bilinear filtering:
|
|
vec2 texCoord = float(SMAA_AREATEX_MAX_DISTANCE) * round(4.0 * vec2(e1, e2)) + dist;
|
|
|
|
// We do a scale and bias for mapping to texel space:
|
|
texCoord = SMAA_AREATEX_PIXEL_SIZE * texCoord + (0.5 * SMAA_AREATEX_PIXEL_SIZE);
|
|
|
|
// Move to proper place, according to the subpixel offset:
|
|
texCoord.y += SMAA_AREATEX_SUBTEX_SIZE * offset;
|
|
|
|
return texture2D(areaTex, texCoord, 0.0).rg;
|
|
}
|
|
|
|
vec4 SMAABlendingWeightCalculationPS(vec2 texCoord, vec2 pixCoord, vec4 offset[3], sampler2D edgesTex, sampler2D areaTex, sampler2D searchTex, ivec4 subsampleIndices) {
|
|
vec4 weights = vec4(0.0, 0.0, 0.0, 0.0);
|
|
|
|
vec2 e = texture2D(edgesTex, texCoord).rg;
|
|
|
|
if (e.g > 0.0) { // Edge at north
|
|
vec2 d;
|
|
|
|
// Find the distance to the left:
|
|
vec2 coords;
|
|
coords.x = SMAASearchXLeft(edgesTex, searchTex, offset[0].xy, offset[2].x );
|
|
coords.y = offset[1].y; // offset[1].y = texCoord.y - 0.25 * uTexSizeInv.y (@CROSSING_OFFSET)
|
|
d.x = coords.x;
|
|
|
|
// Now fetch the left crossing edges, two at a time using bilinear
|
|
// filtering. Sampling at -0.25 (see @CROSSING_OFFSET) enables to
|
|
// discern what value each edge has:
|
|
float e1 = texture2D(edgesTex, coords, 0.0).r;
|
|
|
|
// Find the distance to the right:
|
|
coords.x = SMAASearchXRight(edgesTex, searchTex, offset[0].zw, offset[2].y);
|
|
d.y = coords.x;
|
|
|
|
// We want the distances to be in pixel units (doing this here allow to
|
|
// better interleave arithmetic and memory accesses):
|
|
d = d / uTexSizeInv.x - pixCoord.x;
|
|
|
|
// SMAAArea below needs a sqrt, as the areas texture is compressed
|
|
// quadratically:
|
|
vec2 sqrt_d = sqrt(abs(d));
|
|
|
|
// Fetch the right crossing edges:
|
|
coords.y -= 1.0 * uTexSizeInv.y; // WebGL port note: Added
|
|
float e2 = SMAASampleLevelZeroOffset(edgesTex, coords, ivec2(1, 0)).r;
|
|
|
|
// Ok, we know how this pattern looks like, now it is time for getting
|
|
// the actual area:
|
|
weights.rg = SMAAArea(areaTex, sqrt_d, e1, e2, float(subsampleIndices.y));
|
|
}
|
|
|
|
if (e.r > 0.0) { // Edge at west
|
|
vec2 d;
|
|
|
|
// Find the distance to the top:
|
|
vec2 coords;
|
|
|
|
coords.y = SMAASearchYUp(edgesTex, searchTex, offset[1].xy, offset[2].z );
|
|
coords.x = offset[0].x; // offset[1].x = texCoord.x - 0.25 * uTexSizeInv.x;
|
|
d.x = coords.y;
|
|
|
|
// Fetch the top crossing edges:
|
|
float e1 = texture2D(edgesTex, coords, 0.0).g;
|
|
|
|
// Find the distance to the bottom:
|
|
coords.y = SMAASearchYDown(edgesTex, searchTex, offset[1].zw, offset[2].w);
|
|
d.y = coords.y;
|
|
|
|
// We want the distances to be in pixel units:
|
|
d = d / uTexSizeInv.y - pixCoord.y;
|
|
|
|
// SMAAArea below needs a sqrt, as the areas texture is compressed
|
|
// quadratically:
|
|
vec2 sqrt_d = sqrt(abs(d));
|
|
|
|
// Fetch the bottom crossing edges:
|
|
coords.y -= 1.0 * uTexSizeInv.y; // WebGL port note: Added
|
|
float e2 = SMAASampleLevelZeroOffset(edgesTex, coords, ivec2(0, 1)).g;
|
|
|
|
// Get the area for this direction:
|
|
weights.ba = SMAAArea(areaTex, sqrt_d, e1, e2, float(subsampleIndices.x));
|
|
}
|
|
|
|
return weights;
|
|
}
|
|
|
|
void main() {
|
|
gl_FragColor = SMAABlendingWeightCalculationPS(vUv, vPixCoord, vOffset, tEdges, tArea, tSearch, ivec4(0.0));
|
|
}
|
|
`;var yve=`
|
|
precision highp float;
|
|
|
|
attribute vec2 aPosition;
|
|
uniform vec2 uQuadScale;
|
|
|
|
uniform vec2 uTexSizeInv;
|
|
uniform vec4 uViewport;
|
|
|
|
varying vec2 vUv;
|
|
varying vec4 vOffset[3];
|
|
|
|
void SMAAEdgeDetectionVS(vec2 texCoord) {
|
|
vOffset[0] = texCoord.xyxy + uTexSizeInv.xyxy * vec4(-1.0, 0.0, 0.0, 1.0); // WebGL port note: Changed sign in W component
|
|
vOffset[1] = texCoord.xyxy + uTexSizeInv.xyxy * vec4(1.0, 0.0, 0.0, -1.0); // WebGL port note: Changed sign in W component
|
|
vOffset[2] = texCoord.xyxy + uTexSizeInv.xyxy * vec4(-2.0, 0.0, 0.0, 2.0); // WebGL port note: Changed sign in W component
|
|
}
|
|
|
|
void main() {
|
|
vec2 scale = uViewport.zw * uTexSizeInv;
|
|
vec2 shift = uViewport.xy * uTexSizeInv;
|
|
vUv = (aPosition + 1.0) * 0.5 * scale + shift;
|
|
SMAAEdgeDetectionVS(vUv);
|
|
vec2 position = aPosition * uQuadScale - vec2(1.0, 1.0) + uQuadScale;
|
|
gl_Position = vec4(position, 0.0, 1.0);
|
|
}
|
|
`;var Qve=`
|
|
precision highp float;
|
|
precision highp int;
|
|
precision highp sampler2D;
|
|
|
|
uniform sampler2D tColor;
|
|
uniform vec2 uTexSizeInv;
|
|
|
|
varying vec2 vUv;
|
|
varying vec4 vOffset[3];
|
|
|
|
vec4 SMAAColorEdgeDetectionPS(vec2 texcoord, vec4 offset[3], sampler2D colorTex) {
|
|
vec2 threshold = vec2(dEdgeThreshold, dEdgeThreshold);
|
|
|
|
// Calculate color deltas:
|
|
vec4 delta;
|
|
vec3 C = texture2D(colorTex, texcoord).rgb;
|
|
|
|
vec3 Cleft = texture2D(colorTex, offset[0].xy).rgb;
|
|
vec3 t = abs(C - Cleft);
|
|
delta.x = max(max(t.r, t.g), t.b);
|
|
|
|
vec3 Ctop = texture2D(colorTex, offset[0].zw).rgb;
|
|
t = abs(C - Ctop);
|
|
delta.y = max(max(t.r, t.g), t.b);
|
|
|
|
// We do the usual threshold:
|
|
vec2 edges = step(threshold, delta.xy);
|
|
|
|
// Then discard if there is no edge:
|
|
if (dot(edges, vec2(1.0, 1.0 )) == 0.0)
|
|
discard;
|
|
|
|
// Calculate right and bottom deltas:
|
|
vec3 Cright = texture2D(colorTex, offset[1].xy).rgb;
|
|
t = abs( C - Cright );
|
|
delta.z = max(max(t.r, t.g), t.b);
|
|
|
|
vec3 Cbottom = texture2D(colorTex, offset[1].zw).rgb;
|
|
t = abs(C - Cbottom);
|
|
delta.w = max(max(t.r, t.g), t.b);
|
|
|
|
// Calculate the maximum delta in the direct neighborhood:
|
|
float maxDelta = max(max(max(delta.x, delta.y), delta.z), delta.w );
|
|
|
|
// Calculate left-left and top-top deltas:
|
|
vec3 Cleftleft = texture2D(colorTex, offset[2].xy).rgb;
|
|
t = abs( C - Cleftleft );
|
|
delta.z = max(max(t.r, t.g), t.b);
|
|
|
|
vec3 Ctoptop = texture2D(colorTex, offset[2].zw).rgb;
|
|
t = abs(C - Ctoptop);
|
|
delta.w = max(max(t.r, t.g), t.b);
|
|
|
|
// Calculate the final maximum delta:
|
|
maxDelta = max(max(maxDelta, delta.z), delta.w);
|
|
|
|
// Local contrast adaptation in action:
|
|
edges.xy *= step(0.5 * maxDelta, delta.xy);
|
|
|
|
return vec4(edges, 0.0, 0.0);
|
|
}
|
|
|
|
void main() {
|
|
gl_FragColor = SMAAColorEdgeDetectionPS(vUv, vOffset, tColor);
|
|
}
|
|
`;var Eve={edgeThreshold:h.Numeric(.1,{min:.05,max:.15,step:.01}),maxSearchSteps:h.Numeric(16,{min:0,max:32,step:1})},xH=class{constructor(t,r){this.webgl=t;this._supported=!1;if(typeof HTMLImageElement>"u"){ir&&console.log('Missing "HTMLImageElement" required for "SMAA"');return}let n=r.getWidth(),o=r.getHeight();this.edgesTarget=t.createRenderTarget(n,o,!1,"uint8","linear"),this.weightsTarget=t.createRenderTarget(n,o,!1,"uint8","linear"),this.edgesRenderable=ldt(t,r),this.weightsRenderable=mdt(t,this.edgesTarget.texture),this.blendRenderable=fdt(t,r,this.weightsTarget.texture),this._supported=!0}get supported(){return this._supported}getByteCount(){return this.supported?this.edgesTarget.getByteCount()+this.weightsTarget.getByteCount():0}updateState(t){let{gl:r,state:n}=this.webgl;n.enable(r.SCISSOR_TEST),n.disable(r.BLEND),n.disable(r.DEPTH_TEST),n.depthMask(!1);let{x:o,y:i,width:a,height:A}=t;n.viewport(o,i,a,A),n.scissor(o,i,a,A),n.colorMask(!0,!0,!0,!0),n.clearColor(0,0,0,1),r.clear(r.COLOR_BUFFER_BIT),D.update(this.edgesRenderable.values.uViewport,Jo.toVec4(this.edgesRenderable.values.uViewport.ref.value,t)),D.update(this.weightsRenderable.values.uViewport,Jo.toVec4(this.weightsRenderable.values.uViewport.ref.value,t)),D.update(this.blendRenderable.values.uViewport,Jo.toVec4(this.blendRenderable.values.uViewport.ref.value,t))}setSize(t,r){let n=this.edgesTarget.getWidth(),o=this.edgesTarget.getHeight();(t!==n||r!==o)&&(this.edgesTarget.setSize(t,r),this.weightsTarget.setSize(t,r),D.update(this.edgesRenderable.values.uTexSizeInv,Le.set(this.edgesRenderable.values.uTexSizeInv.ref.value,1/t,1/r)),D.update(this.weightsRenderable.values.uTexSizeInv,Le.set(this.weightsRenderable.values.uTexSizeInv.ref.value,1/t,1/r)),D.update(this.blendRenderable.values.uTexSizeInv,Le.set(this.blendRenderable.values.uTexSizeInv.ref.value,1/t,1/r)))}update(t,r){let n=!1;this.edgesRenderable.values.tColor.ref.value!==t&&(D.update(this.edgesRenderable.values.tColor,t),n=!0),this.edgesRenderable.values.dEdgeThreshold.ref.value!==r.edgeThreshold&&(D.update(this.edgesRenderable.values.dEdgeThreshold,r.edgeThreshold),n=!0),n&&this.edgesRenderable.update(),this.weightsRenderable.values.dMaxSearchSteps.ref.value!==r.maxSearchSteps&&(D.update(this.weightsRenderable.values.dMaxSearchSteps,r.maxSearchSteps),this.weightsRenderable.update()),this.blendRenderable.values.tColor.ref.value!==t&&(D.update(this.blendRenderable.values.tColor,t),this.blendRenderable.update())}render(t,r){at&&this.webgl.timer.mark("SmaaPass.render"),this.edgesTarget.bind(),this.updateState(t),this.edgesRenderable.render(),this.weightsTarget.bind(),this.updateState(t),this.weightsRenderable.render(),r?r.bind():this.webgl.bindDrawingBuffer(),this.updateState(t),this.blendRenderable.render(),at&&this.webgl.timer.markEnd("SmaaPass.render")}},sdt={...Wn,tColor:Ft("texture","rgba","ubyte","linear"),uTexSizeInv:Re("v2"),uViewport:Re("v4"),dEdgeThreshold:bt("number")},cdt=Cn("smaa-edges",yve,Qve);function ldt(e,t){let r=t.getWidth(),n=t.getHeight(),o={...Xn,tColor:D.create(t),uTexSizeInv:D.create(Le.create(1/r,1/n)),uViewport:D.create(lr()),dEdgeThreshold:D.create(.1)},i={...sdt},a=Un(e,"triangles",cdt,i,o);return Ln(a,o)}var udt={...Wn,tEdges:Ft("texture","rgba","ubyte","linear"),tArea:Ft("texture","rgb","ubyte","linear"),tSearch:Ft("texture","rgba","ubyte","nearest"),uTexSizeInv:Re("v2"),uViewport:Re("v4"),dMaxSearchSteps:bt("number")},gdt=Cn("smaa-weights",Cve,hve);function mdt(e,t){let r=t.getWidth(),n=t.getHeight(),o=e.resources.texture("image-uint8","rgb","ubyte","linear"),i=e.resources.texture("image-uint8","rgba","ubyte","nearest"),a={...Xn,tEdges:D.create(t),tArea:D.create(o),tSearch:D.create(i),uTexSizeInv:D.create(Le.create(1/r,1/n)),uViewport:D.create(lr()),dMaxSearchSteps:D.create(16)};f9(Bdt(),a.tArea,o),f9(Idt(),a.tSearch,i);let A={...udt},s=Un(e,"triangles",gdt,A,a);return Ln(s,a)}var ddt={...Wn,tColor:Ft("texture","rgba","ubyte","linear"),tWeights:Ft("texture","rgba","ubyte","linear"),uTexSizeInv:Re("v2"),uViewport:Re("v4")},pdt=Cn("smaa-blend",Bve,Ive);function fdt(e,t,r){let n=t.getWidth(),o=t.getHeight(),i={...Xn,tColor:D.create(t),tWeights:D.create(r),uTexSizeInv:D.create(Le.create(1/n,1/o)),uViewport:D.create(lr())},a={...ddt},A=Un(e,"triangles",pdt,a,i);return Ln(A,i)}function Bdt(){return"data:image/png;base64,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"}function Idt(){return"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEIAAAAhCAAAAABIXyLAAAAAOElEQVRIx2NgGAWjYBSMglEwEICREYRgFBZBqDCSLA2MGPUIVQETE9iNUAqLR5gIeoQKRgwXjwAAGn4AtaFeYLEAAAAASUVORK5CYII="}var bve=`
|
|
precision mediump float;
|
|
precision mediump samplerCube;
|
|
precision mediump sampler2D;
|
|
|
|
#if defined(dVariant_skybox)
|
|
uniform samplerCube tSkybox;
|
|
uniform mat4 uViewDirectionProjectionInverse;
|
|
uniform float uBlur;
|
|
uniform float uOpacity;
|
|
uniform float uSaturation;
|
|
uniform float uLightness;
|
|
uniform mat3 uRotation;
|
|
#elif defined(dVariant_image)
|
|
uniform sampler2D tImage;
|
|
uniform vec2 uImageScale;
|
|
uniform vec2 uImageOffset;
|
|
uniform float uBlur;
|
|
uniform float uOpacity;
|
|
uniform float uSaturation;
|
|
uniform float uLightness;
|
|
#elif defined(dVariant_horizontalGradient) || defined(dVariant_radialGradient)
|
|
uniform vec3 uGradientColorA;
|
|
uniform vec3 uGradientColorB;
|
|
uniform float uGradientRatio;
|
|
#endif
|
|
|
|
uniform vec2 uTexSize;
|
|
uniform vec4 uViewport;
|
|
uniform bool uViewportAdjusted;
|
|
varying vec4 vPosition;
|
|
|
|
// TODO: add as general pp option to remove banding?
|
|
// Iestyn's RGB dither from http://alex.vlachos.com/graphics/Alex_Vlachos_Advanced_VR_Rendering_GDC2015.pdf
|
|
vec3 ScreenSpaceDither(vec2 vScreenPos) {
|
|
vec3 vDither = vec3(dot(vec2(171.0, 231.0), vScreenPos.xy));
|
|
vDither.rgb = fract(vDither.rgb / vec3(103.0, 71.0, 97.0));
|
|
return vDither.rgb / 255.0;
|
|
}
|
|
|
|
vec3 saturateColor(vec3 c, float amount) {
|
|
// https://www.w3.org/TR/WCAG21/#dfn-relative-luminance
|
|
const vec3 W = vec3(0.2125, 0.7154, 0.0721);
|
|
vec3 intensity = vec3(dot(c, W));
|
|
return mix(intensity, c, 1.0 + amount);
|
|
}
|
|
|
|
vec3 lightenColor(vec3 c, float amount) {
|
|
return c + amount;
|
|
}
|
|
|
|
void main() {
|
|
#if defined(dVariant_skybox)
|
|
vec4 t = uViewDirectionProjectionInverse * vPosition;
|
|
#ifdef enabledShaderTextureLod
|
|
gl_FragColor = textureCubeLodEXT(tSkybox, uRotation * normalize(t.xyz / t.w), uBlur * 8.0);
|
|
#else
|
|
gl_FragColor = textureCube(tSkybox, uRotation * normalize(t.xyz / t.w));
|
|
#endif
|
|
gl_FragColor.a = uOpacity;
|
|
gl_FragColor.rgb = lightenColor(saturateColor(gl_FragColor.rgb, uSaturation), uLightness);
|
|
#elif defined(dVariant_image)
|
|
vec2 coords;
|
|
if (uViewportAdjusted) {
|
|
coords = ((gl_FragCoord.xy - uViewport.xy) * (uTexSize / uViewport.zw) / uImageScale) + uImageOffset;
|
|
} else {
|
|
coords = (gl_FragCoord.xy / uImageScale) + uImageOffset;
|
|
}
|
|
#ifdef enabledShaderTextureLod
|
|
gl_FragColor = texture2DLodEXT(tImage, vec2(coords.x, 1.0 - coords.y), uBlur * 8.0);
|
|
#else
|
|
gl_FragColor = texture2D(tImage, vec2(coords.x, 1.0 - coords.y));
|
|
#endif
|
|
gl_FragColor.a = uOpacity;
|
|
gl_FragColor.rgb = lightenColor(saturateColor(gl_FragColor.rgb, uSaturation), uLightness);
|
|
#elif defined(dVariant_horizontalGradient)
|
|
float d;
|
|
if (uViewportAdjusted) {
|
|
d = ((gl_FragCoord.y - uViewport.y) * (uTexSize.y / uViewport.w) / uTexSize.y) + 1.0 - (uGradientRatio * 2.0);
|
|
} else {
|
|
d = (gl_FragCoord.y / uTexSize.y) + 1.0 - (uGradientRatio * 2.0);
|
|
}
|
|
gl_FragColor = vec4(mix(uGradientColorB, uGradientColorA, clamp(d, 0.0, 1.0)), 1.0);
|
|
gl_FragColor.rgb += ScreenSpaceDither(gl_FragCoord.xy);
|
|
#elif defined(dVariant_radialGradient)
|
|
float d;
|
|
if (uViewportAdjusted) {
|
|
d = distance(vec2(0.5), (gl_FragCoord.xy - uViewport.xy) * (uTexSize / uViewport.zw) / uTexSize) + uGradientRatio - 0.5;
|
|
} else {
|
|
d = distance(vec2(0.5), gl_FragCoord.xy / uTexSize) + uGradientRatio - 0.5;
|
|
}
|
|
gl_FragColor = vec4(mix(uGradientColorB, uGradientColorA, 1.0 - clamp(d, 0.0, 1.0)), 1.0);
|
|
gl_FragColor.rgb += ScreenSpaceDither(gl_FragCoord.xy);
|
|
#endif
|
|
}
|
|
`;var xve=`
|
|
precision mediump float;
|
|
|
|
attribute vec2 aPosition;
|
|
|
|
varying vec4 vPosition;
|
|
|
|
void main() {
|
|
vPosition = vec4(aPosition, 1.0, 1.0);
|
|
gl_Position = vec4(aPosition, 1.0, 1.0);
|
|
}
|
|
`;var wve={opacity:h.Numeric(1,{min:0,max:1,step:.01}),saturation:h.Numeric(0,{min:-1,max:1,step:.01}),lightness:h.Numeric(0,{min:-1,max:1,step:.01})},Cdt={faces:h.MappedStatic("urls",{urls:h.Group({nx:h.Text("",{label:"Negative X / Left"}),ny:h.Text("",{label:"Negative Y / Bottom"}),nz:h.Text("",{label:"Negative Z / Back"}),px:h.Text("",{label:"Positive X / Right"}),py:h.Text("",{label:"Positive Y / Top"}),pz:h.Text("",{label:"Positive Z / Front"})},{isExpanded:!0,label:"URLs"}),files:h.Group({nx:h.File({label:"Negative X / Left",accept:"image/*"}),ny:h.File({label:"Negative Y / Bottom",accept:"image/*"}),nz:h.File({label:"Negative Z / Back",accept:"image/*"}),px:h.File({label:"Positive X / Right",accept:"image/*"}),py:h.File({label:"Positive Y / Top",accept:"image/*"}),pz:h.File({label:"Positive Z / Front",accept:"image/*"})},{isExpanded:!0,label:"Files"})}),blur:h.Numeric(0,{min:0,max:1,step:.01},{description:'Note, this only works in WebGL2 or when "EXT_shader_texture_lod" is available.'}),rotation:h.Group({x:h.Numeric(0,{min:0,max:360,step:1},{immediateUpdate:!0}),y:h.Numeric(0,{min:0,max:360,step:1},{immediateUpdate:!0}),z:h.Numeric(0,{min:0,max:360,step:1},{immediateUpdate:!0})}),...wve},hdt={source:h.MappedStatic("url",{url:h.Text(""),file:h.File({accept:"image/*"})}),blur:h.Numeric(0,{min:0,max:1,step:.01},{description:'Note, this only works in WebGL2 or with power-of-two images and when "EXT_shader_texture_lod" is available.'}),...wve,coverage:h.Select("viewport",h.arrayToOptions(["viewport","canvas"]))},ydt={topColor:h.Color(14540253),bottomColor:h.Color(15658734),ratio:h.Numeric(.5,{min:0,max:1,step:.01}),coverage:h.Select("viewport",h.arrayToOptions(["viewport","canvas"]))},Qdt={centerColor:h.Color(14540253),edgeColor:h.Color(15658734),ratio:h.Numeric(.5,{min:0,max:1,step:.01}),coverage:h.Select("viewport",h.arrayToOptions(["viewport","canvas"]))},DH={variant:h.MappedStatic("off",{off:h.EmptyGroup(),skybox:h.Group(Cdt,{isExpanded:!0}),image:h.Group(hdt,{isExpanded:!0}),horizontalGradient:h.Group(ydt,{isExpanded:!0}),radialGradient:h.Group(Qdt,{isExpanded:!0})},{label:"Environment"})},SH=class{constructor(t,r,n,o){this.webgl=t;this.assetManager=r;this.camera=new Io;this.target=B();this.position=B();this.dir=B();this.bgColor=B();this.renderable=Rdt(t,n,o)}setSize(t,r){let[n,o]=this.renderable.values.uTexSize.ref.value;(t!==n||r!==o)&&D.update(this.renderable.values.uTexSize,Le.set(this.renderable.values.uTexSize.ref.value,t,r))}clearSkybox(){this.skybox!==void 0&&(this.skybox.texture.destroy(),this.skybox.assets.forEach(t=>this.assetManager.release(t)),this.skybox=void 0)}updateSkybox(t,r,n){let o=this.skybox?.props.faces,i=r.faces.params;if(!i.nx||!i.ny||!i.nz||!i.px||!i.py||!i.pz){this.clearSkybox(),n?.(!1);return}if(!this.skybox||!o||!xdt(r.faces,this.skybox.props.faces)){this.clearSkybox();let{texture:c,assets:l}=Sdt(this.webgl,this.assetManager,r.faces,u=>{this.skybox&&(this.skybox.loaded=!u),n?.(!0)});this.skybox={texture:c,props:{...r},assets:l,loaded:!1},D.update(this.renderable.values.tSkybox,c),this.renderable.update()}else n?.(!1);if(!this.skybox)return;let a=t;t.state.mode==="orthographic"&&(this.camera.setState({...t.state,mode:"perspective"}),this.camera.update(),a=this.camera);let A=this.renderable.values.uViewDirectionProjectionInverse.ref.value;Y.isZero(t.headRotation)?(B.sub(this.dir,a.state.position,a.state.target),B.setMagnitude(this.dir,this.dir,.1),B.copy(this.position,this.dir),Y.lookAt(A,this.position,this.target,a.state.up)):Y.invert(A,t.headRotation),Y.mul(A,a.projection,A),Y.invert(A,A),D.update(this.renderable.values.uViewDirectionProjectionInverse,A);let s=this.renderable.values.uRotation.ref.value;Ht.fromEuler(s,W0.create(kr(r.rotation.x),kr(r.rotation.y),kr(r.rotation.z)),"XYZ"),D.update(this.renderable.values.uRotation,s),D.updateIfChanged(this.renderable.values.uBlur,r.blur),D.updateIfChanged(this.renderable.values.uOpacity,r.opacity),D.updateIfChanged(this.renderable.values.uSaturation,r.saturation),D.updateIfChanged(this.renderable.values.uLightness,r.lightness),D.updateIfChanged(this.renderable.values.dVariant,"skybox"),this.renderable.update()}clearImage(){this.image!==void 0&&(this.image.texture.destroy(),this.assetManager.release(this.image.asset),this.image=void 0)}updateImage(t,r){if(!t.source.params){this.clearImage(),r?.(!1);return}if(!this.image||!this.image.props.source.params||!Ddt(t.source,this.image.props.source)){this.clearImage();let{texture:n,asset:o}=vdt(this.webgl,this.assetManager,t.source,i=>{this.image&&(this.image.loaded=!i),r?.(!0)});this.image={texture:n,props:{...t},asset:o,loaded:!1},D.update(this.renderable.values.tImage,n),this.renderable.update()}else r?.(!1);this.image&&(D.updateIfChanged(this.renderable.values.uBlur,t.blur),D.updateIfChanged(this.renderable.values.uOpacity,t.opacity),D.updateIfChanged(this.renderable.values.uSaturation,t.saturation),D.updateIfChanged(this.renderable.values.uLightness,t.lightness),D.updateIfChanged(this.renderable.values.uViewportAdjusted,t.coverage==="viewport"),D.updateIfChanged(this.renderable.values.dVariant,"image"),this.renderable.update())}updateImageScaling(){let t=this.renderable.values,[r,n]=t.uTexSize.ref.value,o=this.image?.texture.getWidth()||0,i=this.image?.texture.getHeight()||0,a=r/n,A=o/i;a<A?D.update(t.uImageScale,Le.set(t.uImageScale.ref.value,o*n/i,n)):D.update(t.uImageScale,Le.set(t.uImageScale.ref.value,r,i*r/o));let[s,c]=t.uImageScale.ref.value,l=s/c;l>a?D.update(t.uImageOffset,Le.set(t.uImageOffset.ref.value,(1-a/l)/2,0)):D.update(t.uImageOffset,Le.set(t.uImageOffset.ref.value,0,(1-l/a)/2))}updateGradient(t,r,n,o,i){D.update(this.renderable.values.uGradientColorA,ke.toVec3Normalized(this.renderable.values.uGradientColorA.ref.value,t)),D.update(this.renderable.values.uGradientColorB,ke.toVec3Normalized(this.renderable.values.uGradientColorB.ref.value,r)),D.updateIfChanged(this.renderable.values.uGradientRatio,n),D.updateIfChanged(this.renderable.values.uViewportAdjusted,i),D.updateIfChanged(this.renderable.values.dVariant,o),this.renderable.update()}update(t,r,n){if(r.variant.name==="off"){this.clearSkybox(),this.clearImage(),n?.(!1);return}else r.variant.name==="skybox"?(this.clearImage(),this.updateSkybox(t,r.variant.params,n)):r.variant.name==="image"?(this.clearSkybox(),this.updateImage(r.variant.params,n)):r.variant.name==="horizontalGradient"?(this.clearSkybox(),this.clearImage(),this.updateGradient(r.variant.params.topColor,r.variant.params.bottomColor,r.variant.params.ratio,r.variant.name,r.variant.params.coverage==="viewport"),n?.(!1)):r.variant.name==="radialGradient"&&(this.clearSkybox(),this.clearImage(),this.updateGradient(r.variant.params.centerColor,r.variant.params.edgeColor,r.variant.params.ratio,r.variant.name,r.variant.params.coverage==="viewport"),n?.(!1));let{x:o,y:i,width:a,height:A}=t.viewport;D.update(this.renderable.values.uViewport,lr.set(this.renderable.values.uViewport.ref.value,o,i,a,A))}_isEnabled(t){return!!(this.skybox&&this.skybox.loaded||this.image&&this.image.loaded||t.variant.name==="horizontalGradient"||t.variant.name==="radialGradient")}isEnabled(t){return t.enabled&&this._isEnabled(t.background)}isReady(){return!!(this.skybox&&this.skybox.loaded||this.image&&this.image.loaded||this.renderable.values.dVariant.ref.value==="horizontalGradient"||this.renderable.values.dVariant.ref.value==="radialGradient")}clear(t,r,n){let{gl:o,state:i}=this.webgl;this._isEnabled(t)?(r?i.clearColor(0,0,0,0):(ke.toVec3Normalized(this.bgColor,n),i.clearColor(this.bgColor[0],this.bgColor[1],this.bgColor[2],1)),o.clear(o.COLOR_BUFFER_BIT),i.enable(o.BLEND),i.blendFuncSeparate(o.SRC_ALPHA,o.ONE_MINUS_SRC_ALPHA,o.ONE,o.ONE_MINUS_SRC_ALPHA)):(ke.toVec3Normalized(this.bgColor,n),i.clearColor(this.bgColor[0],this.bgColor[1],this.bgColor[2],1),o.clear(o.COLOR_BUFFER_BIT))}render(t){!this._isEnabled(t)||!this.isReady()||(this.renderable.values.dVariant.ref.value==="image"&&this.updateImageScaling(),at&&this.webgl.timer.mark("BackgroundPass.render"),this.renderable.render(),at&&this.webgl.timer.markEnd("BackgroundPass.render"))}dispose(){this.clearSkybox(),this.clearImage()}},Sve="background-skybox";function Edt(e,t){return t.name==="urls"?{nx:gn.getUrlAsset(e,t.params.nx),ny:gn.getUrlAsset(e,t.params.ny),nz:gn.getUrlAsset(e,t.params.nz),px:gn.getUrlAsset(e,t.params.px),py:gn.getUrlAsset(e,t.params.py),pz:gn.getUrlAsset(e,t.params.pz)}:{nx:t.params.nx,ny:t.params.ny,nz:t.params.nz,px:t.params.px,py:t.params.py,pz:t.params.pz}}function bdt(e,t){let r=n=>e.resolve(n,"binary").run().then(o=>new Blob([o.data]));return{nx:r(t.nx),ny:r(t.ny),nz:r(t.nz),px:r(t.px),py:r(t.py),pz:r(t.pz)}}function Dve(e){return e.name==="urls"?`${Sve}_${e.params.nx}|${e.params.ny}|${e.params.nz}|${e.params.px}|${e.params.py}|${e.params.pz}`:`${Sve}_${e.params.nx?.id}|${e.params.ny?.id}|${e.params.nz?.id}|${e.params.px?.id}|${e.params.py?.id}|${e.params.pz?.id}`}function xdt(e,t){return Dve(e)===Dve(t)}function Sdt(e,t,r,n){let o=Edt(t,r),i=bdt(t,o),a=[o.nx,o.ny,o.nz,o.px,o.py,o.pz];return typeof HTMLImageElement>"u"?(console.error('Missing "HTMLImageElement" required for background skybox'),n?.(!0),{texture:Ti(),assets:a}):{texture:e.resources.cubeTexture(i,!0,n),assets:a}}var vve="background-image";function Fve(e){return e.name==="url"?`${vve}_${e.params}`:`${vve}_${e.params?.id}`}function Ddt(e,t){return Fve(e)===Fve(t)}function vdt(e,t,r,n){let o=r.name==="url"?t.tryFindFilename(r.params)??gn.getUrlAsset(t,r.params):r.params;if(typeof HTMLImageElement>"u")return console.error('Missing "HTMLImageElement" required for background image'),n?.(!0),{texture:Ti(),asset:o};let i=e.resources.texture("image-uint8","rgba","ubyte","linear"),a=new Image;return a.onload=()=>{i.load(a),(e.isWebGL2||Ly(a.width)&&Ly(a.height))&&i.mipmap(),n?.()},a.onerror=()=>{n?.(!0)},t.resolve(o,"binary").run().then(A=>{let s=new Blob([A.data]);a.src=URL.createObjectURL(s)}),{texture:i,asset:o}}var Fdt={drawCount:go("number"),instanceCount:go("number"),aPosition:Bo("float32",2,0),tSkybox:Ft("texture","rgba","ubyte","linear"),tImage:Ft("texture","rgba","ubyte","linear"),uImageScale:Re("v2"),uImageOffset:Re("v2"),uTexSize:Re("v2"),uViewport:Re("v4"),uViewportAdjusted:Re("b"),uViewDirectionProjectionInverse:Re("m4"),uGradientColorA:Re("v3"),uGradientColorB:Re("v3"),uGradientRatio:Re("f"),uBlur:Re("f"),uOpacity:Re("f"),uSaturation:Re("f"),uLightness:Re("f"),uRotation:Re("m3"),dVariant:bt("string",["skybox","image","verticalGradient","horizontalGradient","radialGradient"])},wdt=Cn("background",xve,bve,{shaderTextureLod:"optional"});function Rdt(e,t,r){let n={drawCount:D.create(6),instanceCount:D.create(1),aPosition:D.create(Z2),tSkybox:D.create(Ti()),tImage:D.create(Ti()),uImageScale:D.create(Le()),uImageOffset:D.create(Le()),uTexSize:D.create(Le.create(t,r)),uViewport:D.create(lr()),uViewportAdjusted:D.create(!0),uViewDirectionProjectionInverse:D.create(Y()),uGradientColorA:D.create(B()),uGradientColorB:D.create(B()),uGradientRatio:D.create(.5),uBlur:D.create(0),uOpacity:D.create(1),uSaturation:D.create(0),uLightness:D.create(0),uRotation:D.create(Ht.identity()),dVariant:D.create("skybox")},o={...Fdt},i=Un(e,"triangles",wdt,o,n);return Ln(i,n)}var Rve=`
|
|
precision mediump float;
|
|
precision mediump sampler2D;
|
|
|
|
uniform sampler2D tColor;
|
|
uniform vec2 uTexSizeInv;
|
|
|
|
uniform float uSharpness;
|
|
|
|
// adapted from https://www.shadertoy.com/view/stXSWB
|
|
|
|
/*
|
|
* FidelityFX Super Resolution scales up a low resolution
|
|
* image, while adding fine detail.
|
|
*
|
|
* MIT Open License
|
|
*
|
|
* https://gpuopen.com/fsr
|
|
*
|
|
* Left: FSR processed
|
|
* Right: Original texture, bilinear interpolation
|
|
*
|
|
* Mouse at top: Sharpness 0 stops (maximum)
|
|
* Mouse at bottom: Sharpness 2 stops (minimum)
|
|
*
|
|
* It works in two passes-
|
|
* EASU upsamples the image with a clamped Lanczos kernel.
|
|
* RCAS sharpens the image at the target resolution.
|
|
*
|
|
* I needed to make a few changes to improve readability and
|
|
* WebGL compatibility in an algorithm I don't fully understand.
|
|
* Expect bugs.
|
|
*
|
|
* Shader not currently running for WebGL1 targets (eg. mobile Safari)
|
|
*
|
|
* There is kind of no point to using FSR in Shadertoy, as it renders buffers
|
|
* at full target resolution. But this might be useful for WebGL based demos
|
|
* running smaller-than-target render buffers.
|
|
*
|
|
* For sharpening with a full resolution render buffer,
|
|
* FidelityFX CAS is a better option.
|
|
* https://www.shadertoy.com/view/ftsXzM
|
|
*
|
|
* For readability and compatibility, these optimisations have been removed:
|
|
* * Fast approximate inverse and inversesqrt
|
|
* * textureGather fetches (not WebGL compatible)
|
|
* * Multiplying by reciprocal instead of division
|
|
*
|
|
* Apologies to AMD for the numerous slowdowns and errors I have introduced.
|
|
*
|
|
*/
|
|
|
|
/***** RCAS *****/
|
|
#define FSR_RCAS_LIMIT (0.25-(1.0/16.0))
|
|
|
|
// Input callback prototypes that need to be implemented by calling shader
|
|
vec4 FsrRcasLoadF(vec2 p);
|
|
//------------------------------------------------------------------------------------------------------------------------------
|
|
void FsrRcasCon(
|
|
out float con,
|
|
// The scale is {0.0 := maximum, to N>0, where N is the number of stops (halving) of the reduction of sharpness}.
|
|
float sharpness
|
|
) {
|
|
// Transform from stops to linear value.
|
|
con = exp2(-sharpness);
|
|
}
|
|
|
|
vec3 FsrRcasF(
|
|
vec2 ip, // Integer pixel position in output.
|
|
float con
|
|
) {
|
|
// Constant generated by RcasSetup().
|
|
// Algorithm uses minimal 3x3 pixel neighborhood.
|
|
// b
|
|
// d e f
|
|
// h
|
|
vec2 sp = vec2(ip);
|
|
vec3 b = FsrRcasLoadF(sp + vec2( 0,-1)).rgb;
|
|
vec3 d = FsrRcasLoadF(sp + vec2(-1, 0)).rgb;
|
|
vec3 e = FsrRcasLoadF(sp).rgb;
|
|
vec3 f = FsrRcasLoadF(sp + vec2( 1, 0)).rgb;
|
|
vec3 h = FsrRcasLoadF(sp + vec2( 0, 1)).rgb;
|
|
|
|
// Luma times 2.
|
|
float bL = b.g + .5 * (b.b + b.r);
|
|
float dL = d.g + .5 * (d.b + d.r);
|
|
float eL = e.g + .5 * (e.b + e.r);
|
|
float fL = f.g + .5 * (f.b + f.r);
|
|
float hL = h.g + .5 * (h.b + h.r);
|
|
|
|
// Noise detection.
|
|
#ifdef dDenoise
|
|
float nz = .25 * (bL + dL + fL + hL) - eL;
|
|
nz=clamp(
|
|
abs(nz)
|
|
/(
|
|
max(max(bL,dL),max(eL,max(fL,hL)))
|
|
-min(min(bL,dL),min(eL,min(fL,hL)))
|
|
),
|
|
0., 1.
|
|
);
|
|
nz=1.-.5*nz;
|
|
#endif
|
|
|
|
// Min and max of ring.
|
|
vec3 mn4 = min(b, min(f, h));
|
|
vec3 mx4 = max(b, max(f, h));
|
|
|
|
// Immediate constants for peak range.
|
|
vec2 peakC = vec2(1., -4.);
|
|
|
|
// Limiters, these need to be high precision RCPs.
|
|
vec3 hitMin = mn4 / (4. * mx4);
|
|
vec3 hitMax = (peakC.x - mx4) / (4.* mn4 + peakC.y);
|
|
vec3 lobeRGB = max(-hitMin, hitMax);
|
|
float lobe = max(
|
|
-FSR_RCAS_LIMIT,
|
|
min(max(lobeRGB.r, max(lobeRGB.g, lobeRGB.b)), 0.)
|
|
)*con;
|
|
|
|
// Apply noise removal.
|
|
#ifdef dDenoise
|
|
lobe *= nz;
|
|
#endif
|
|
|
|
// Resolve, which needs the medium precision rcp approximation to avoid visible tonality changes.
|
|
return (lobe * (b + d + h + f) + e) / (4. * lobe + 1.);
|
|
}
|
|
|
|
|
|
vec4 FsrRcasLoadF(vec2 p) {
|
|
return texture2D(tColor, p * uTexSizeInv);
|
|
}
|
|
|
|
void main() {
|
|
// Set up constants
|
|
float con;
|
|
FsrRcasCon(con, uSharpness);
|
|
|
|
// Perform RCAS pass
|
|
vec3 col = FsrRcasF(gl_FragCoord.xy, con);
|
|
|
|
gl_FragColor = vec4(col, FsrRcasLoadF(gl_FragCoord.xy).a);
|
|
}
|
|
`;var Uve={sharpness:h.Numeric(.5,{min:0,max:1,step:.05}),denoise:h.Boolean(!0)},vH=class{constructor(t,r){this.webgl=t;this.renderable=Tdt(t,r)}updateState(t){let{gl:r,state:n}=this.webgl;n.enable(r.SCISSOR_TEST),n.disable(r.BLEND),n.disable(r.DEPTH_TEST),n.depthMask(!1);let{x:o,y:i,width:a,height:A}=t;n.viewport(o,i,a,A),n.scissor(o,i,a,A),n.clearColor(0,0,0,1),r.clear(r.COLOR_BUFFER_BIT)}setSize(t,r){D.update(this.renderable.values.uTexSizeInv,Le.set(this.renderable.values.uTexSizeInv.ref.value,1/t,1/r))}update(t,r){let{values:n}=this.renderable,{sharpness:o,denoise:i}=r,a=!1;n.tColor.ref.value!==t&&(D.update(this.renderable.values.tColor,t),a=!0),D.updateIfChanged(n.uSharpness,2-2*Math.pow(o,.25)),n.dDenoise.ref.value!==i&&(a=!0),D.updateIfChanged(n.dDenoise,i),a&&this.renderable.update()}render(t,r){at&&this.webgl.timer.mark("CasPass.render"),r?r.bind():this.webgl.bindDrawingBuffer(),this.updateState(t),this.renderable.render(),at&&this.webgl.timer.markEnd("CasPass.render")}},Udt={...Wn,tColor:Ft("texture","rgba","ubyte","linear"),uTexSizeInv:Re("v2"),uSharpness:Re("f"),dDenoise:bt("boolean")},Ldt=Cn("cas",mo,Rve);function Tdt(e,t){let r=t.getWidth(),n=t.getHeight(),o={...Xn,tColor:D.create(t),uTexSizeInv:D.create(Le.create(1/r,1/n)),uSharpness:D.create(.5),dDenoise:D.create(!0)},i={...Udt},a=Un(e,"triangles",Ldt,i,o);return Ln(a,o)}var Lve=`
|
|
precision highp float;
|
|
precision highp int;
|
|
precision highp sampler2D;
|
|
|
|
#include common
|
|
|
|
uniform sampler2D tColor;
|
|
uniform sampler2D tDepthOpaque;
|
|
uniform sampler2D tDepthTransparent;
|
|
|
|
uniform vec2 uTexSize;
|
|
uniform vec4 uBounds;
|
|
|
|
uniform float uBlurSpread;
|
|
uniform float uInFocus;
|
|
uniform float uPPM;
|
|
|
|
uniform float uNear; // Near plane
|
|
uniform float uFar; // Far plane
|
|
|
|
uniform mat4 uInvProjection; // Inverse projection
|
|
uniform mat4 uProjection; // projection
|
|
|
|
uniform int uMode; // 0-planar, 1-spherical
|
|
uniform vec3 uCenter; // Center of focus sphere in view space
|
|
|
|
// Function to convert depth value from depth buffer to view space Z
|
|
float getViewZ(const in float depth) {
|
|
#if dOrthographic == 1
|
|
return orthographicDepthToViewZ(depth, uNear, uFar);
|
|
#else
|
|
return perspectiveDepthToViewZ(depth, uNear, uFar);
|
|
#endif
|
|
}
|
|
|
|
// Retrieve depth from opaque depth texture
|
|
float getDepthOpaque(const in vec2 coords) {
|
|
#ifdef depthTextureSupport
|
|
return texture2D(tDepthOpaque, coords).r;
|
|
#else
|
|
return unpackRGBAToDepth(texture2D(tDepthOpaque, coords));
|
|
#endif
|
|
}
|
|
|
|
// Retrieve depth from transparent depth texture
|
|
float getDepthTransparent(const in vec2 coords) {
|
|
return unpackRGBAToDepthWithAlpha(texture2D(tDepthTransparent, coords)).x;
|
|
}
|
|
|
|
bool isBackground(const in float depth) {
|
|
return depth == 1.0;
|
|
}
|
|
|
|
float getDepth(const in vec2 coords) {
|
|
return min(getDepthOpaque(coords), getDepthTransparent(coords));
|
|
}
|
|
|
|
float getCOC(vec2 uv) {
|
|
float depth = getDepth(uv);
|
|
float viewDist = getViewZ(depth);
|
|
vec3 aposition = screenSpaceToViewSpace(vec3(uv.xy, depth), uInvProjection);
|
|
float focusDist = length(aposition - uCenter);
|
|
float coc = 0.0; // Circle of Confusion
|
|
if (uMode == 0) { // planar Depth of field
|
|
coc = (abs(viewDist) - uInFocus) / uPPM; //focus distance, focus range
|
|
} else if(uMode == 1) { // spherical Depth of field
|
|
coc = focusDist / uPPM ;
|
|
}
|
|
coc = clamp(coc, -1.0, 1.0);
|
|
return coc;
|
|
}
|
|
|
|
// Simple box blur for blurring the image
|
|
vec3 getBlurredImage(vec2 coords) {
|
|
vec4 blurColor = vec4(0);
|
|
vec2 texelSize = vec2(1.0 / uTexSize.x, 1.0 / uTexSize.y);
|
|
float count = 0.0;
|
|
for (int x = 0; x < int(dBlurSize); x++) {
|
|
for (int y = 0; y < int(dBlurSize); y++) {
|
|
vec2 offset = vec2(float(x) - float(dBlurSize) / 2.0, float(y) - float(dBlurSize) / 2.0);
|
|
vec2 uvPixel = coords.xy + offset * texelSize * uBlurSpread;
|
|
float coc = getCOC(uvPixel);
|
|
coc = smoothstep(0.0, 1.0, abs(coc));
|
|
// mix blurColor with new color with weight coc
|
|
blurColor.rgb = blurColor.rgb + texture2D(tColor, uvPixel).xyz * coc;
|
|
count+=coc;
|
|
}
|
|
}
|
|
blurColor = blurColor / count;
|
|
return blurColor.rgb;
|
|
}
|
|
|
|
// simplification from https://catlikecoding.com/unity/tutorials/advanced-rendering/depth-of-field/
|
|
void main() {
|
|
vec2 uv = gl_FragCoord.xy / uTexSize;
|
|
vec4 color = texture2D(tColor, uv);
|
|
float depth = getDepth(uv);
|
|
|
|
float viewDist = getViewZ(depth);
|
|
|
|
vec3 aposition = screenSpaceToViewSpace(vec3(uv.xy, depth), uInvProjection);
|
|
float focusDist = length(aposition - uCenter);
|
|
vec3 blurColor = getBlurredImage(uv);
|
|
|
|
float coc = getCOC(uv); // Circle of Confusion
|
|
|
|
// for debugging the coc
|
|
// color.rgb = (coc < 0.0) ? (1.0 - abs(coc)) * vec3(1.0,0.0,0.0) : vec3(0.0, 1.0 - coc, 0.0) ;//mix(color.rgb, blurColor.rgb, abs(coc));
|
|
color.rgb = mix(color.rgb, blurColor, smoothstep(0.0, 1.0, abs(coc))); // Smooth blending based on CoC
|
|
gl_FragColor = color;
|
|
}
|
|
`;var FH={blurSize:h.Numeric(9,{min:1,max:32,step:1}),blurSpread:h.Numeric(1,{min:0,max:10,step:.1}),inFocus:h.Numeric(0,{min:-5e3,max:5e3,step:1},{description:"Distance from the scene center that will be in focus"}),PPM:h.Numeric(20,{min:0,max:5e3,step:.1},{description:"Size of the area that will be in focus"}),center:h.Select("camera-target",h.arrayToOptions(["scene-center","camera-target"])),mode:h.Select("plane",h.arrayToOptions(["plane","sphere"]))},Pp=class{constructor(t,r,n){this.webgl=t;this.target=t.createRenderTarget(r,n,!1);let o=Ti();this.renderable=Ndt(t,o,o,o)}static isEnabled(t){return t.enabled&&t.dof.name!=="off"}getByteCount(){return this.target.getByteCount()}updateState(t){let{gl:r,state:n}=this.webgl;n.enable(r.SCISSOR_TEST),n.disable(r.BLEND),n.disable(r.DEPTH_TEST),n.depthMask(!1);let{x:o,y:i,width:a,height:A}=t;n.viewport(o,i,a,A),n.scissor(o,i,a,A),n.clearColor(0,0,0,1),r.clear(r.COLOR_BUFFER_BIT)}setSize(t,r){let n=this.target.texture.getWidth(),o=this.target.texture.getHeight();(t!==n||r!==o)&&(this.target.setSize(t,r),D.update(this.renderable.values.uTexSize,Le.set(this.renderable.values.uTexSize.ref.value,t,r)))}update(t,r,n,o,i,a){let A=!1;this.renderable.values.tColor.ref.value!==r&&(D.update(this.renderable.values.tColor,r),A=!0),this.renderable.values.tDepthOpaque.ref.value!==n&&(D.update(this.renderable.values.tDepthOpaque,n),A=!0),this.renderable.values.tDepthTransparent.ref.value!==o&&(D.update(this.renderable.values.tDepthTransparent,o),A=!0);let s=t.state.mode==="orthographic"?1:0,c=this.renderable.values.uInvProjection.ref.value;Y.invert(c,t.projection);let[l,u]=this.renderable.values.uTexSize.ref.value,g=t.viewport;D.update(this.renderable.values.uProjection,t.projection),D.update(this.renderable.values.uInvProjection,c),D.update(this.renderable.values.uMode,i.mode==="sphere"?1:0),lr.set(this.renderable.values.uBounds.ref.value,g.x/l,g.y/u,(g.x+g.width)/l,(g.y+g.height)/u),D.update(this.renderable.values.uBounds,this.renderable.values.uBounds.ref.value),D.updateIfChanged(this.renderable.values.uNear,t.near),D.updateIfChanged(this.renderable.values.uFar,t.far),D.updateIfChanged(this.renderable.values.dOrthographic,s);let m=Math.round(i.blurSize*this.webgl.pixelRatio);this.renderable.values.dBlurSize.ref.value!==m&&(D.update(this.renderable.values.dBlurSize,m),A=!0);let p=i.center==="scene-center"?a.center:t.state.target,f=B.distance(t.state.position,p)+i.inFocus;D.updateIfChanged(this.renderable.values.uInFocus,f*t.scale);let I=this.renderable.values.uCenter.ref.value;B.transformMat4(I,p,t.view),D.update(this.renderable.values.uCenter,I),D.updateIfChanged(this.renderable.values.uBlurSpread,i.blurSpread),D.updateIfChanged(this.renderable.values.uPPM,i.PPM*t.scale),A&&this.renderable.update()}render(t,r){at&&this.webgl.timer.mark("DofPass.render"),r?r.bind():this.webgl.bindDrawingBuffer(),this.updateState(t),this.renderable.render(),at&&this.webgl.timer.markEnd("DofPass.render")}},Pdt={...Wn,tDepthOpaque:Ft("texture","rgba","ubyte","nearest"),tDepthTransparent:Ft("texture","rgba","ubyte","nearest"),tColor:Ft("texture","rgba","ubyte","nearest"),uTexSize:Re("v2"),uProjection:Re("m4"),uInvProjection:Re("m4"),uBounds:Re("v4"),uCenter:Re("v3"),uMode:Re("i"),dOrthographic:bt("number"),uNear:Re("f"),uFar:Re("f"),dBlurSize:bt("number"),uBlurSpread:Re("f"),uInFocus:Re("f"),uPPM:Re("f")},Gdt=Cn("dof",mo,Lve);function Ndt(e,t,r,n){let o=t.getWidth(),i=t.getHeight(),a={...Xn,tDepthOpaque:D.create(r),tDepthTransparent:D.create(n),tColor:D.create(t),uTexSize:D.create(Le.create(o,i)),uProjection:D.create(Y.identity()),uInvProjection:D.create(Y.identity()),uBounds:D.create(lr()),uCenter:D.create(B()),uMode:D.create(0),dOrthographic:D.create(0),uNear:D.create(1),uFar:D.create(1e4),dBlurSize:D.create(5),uBlurSpread:D.create(300),uInFocus:D.create(20),uPPM:D.create(20)},A={...Pdt},s=Un(e,"triangles",Gdt,A,a);return Ln(s,a)}var Tve=`
|
|
precision highp float;
|
|
precision highp int;
|
|
precision highp sampler2D;
|
|
|
|
uniform vec2 uTexSizeInv;
|
|
|
|
uniform sampler2D tBlur1;
|
|
uniform sampler2D tBlur2;
|
|
uniform sampler2D tBlur3;
|
|
uniform sampler2D tBlur4;
|
|
uniform sampler2D tBlur5;
|
|
uniform float uBloomStrength;
|
|
uniform float uBloomRadius;
|
|
uniform float uBloomFactors[5];
|
|
uniform vec3 uBloomTints[5];
|
|
|
|
float lerpBloomFactor(const in float factor) {
|
|
float mirrorFactor = 1.2 - factor;
|
|
return mix(factor, mirrorFactor, uBloomRadius);
|
|
}
|
|
|
|
void main(void) {
|
|
vec2 coords = gl_FragCoord.xy * uTexSizeInv;
|
|
|
|
gl_FragColor = uBloomStrength * (
|
|
lerpBloomFactor(uBloomFactors[0]) * vec4(uBloomTints[0], 1.0) * texture2D(tBlur1, coords) +
|
|
lerpBloomFactor(uBloomFactors[1]) * vec4(uBloomTints[1], 1.0) * texture2D(tBlur2, coords) +
|
|
lerpBloomFactor(uBloomFactors[2]) * vec4(uBloomTints[2], 1.0) * texture2D(tBlur3, coords) +
|
|
lerpBloomFactor(uBloomFactors[3]) * vec4(uBloomTints[3], 1.0) * texture2D(tBlur4, coords) +
|
|
lerpBloomFactor(uBloomFactors[4]) * vec4(uBloomTints[4], 1.0) * texture2D(tBlur5, coords)
|
|
);
|
|
}
|
|
`;var Pve=`
|
|
precision highp float;
|
|
precision highp int;
|
|
precision highp sampler2D;
|
|
|
|
uniform sampler2D tColorOpaque;
|
|
uniform sampler2D tColorTransparent;
|
|
uniform sampler2D tEmissive;
|
|
uniform sampler2D tDepthOpaque;
|
|
uniform sampler2D tDepthTransparent;
|
|
uniform vec2 uTexSizeInv;
|
|
|
|
uniform vec3 uDefaultColor;
|
|
uniform float uDefaultOpacity;
|
|
uniform float uLuminosityThreshold;
|
|
uniform float uSmoothWidth;
|
|
|
|
uniform float uNear;
|
|
uniform float uFar;
|
|
uniform float uIsOrtho;
|
|
uniform float uFogNear;
|
|
uniform float uFogFar;
|
|
uniform bool uOpaqueFogged;
|
|
|
|
#include common
|
|
|
|
float getDepthOpaque(const in vec2 coords) {
|
|
#ifdef depthTextureSupport
|
|
return texture2D(tDepthOpaque, coords).r;
|
|
#else
|
|
return unpackRGBAToDepth(texture2D(tDepthOpaque, coords));
|
|
#endif
|
|
}
|
|
|
|
float getDepthTransparent(const in vec2 coords) {
|
|
return unpackRGBAToDepthWithAlpha(texture2D(tDepthTransparent, coords)).x;
|
|
}
|
|
|
|
float getDepth(const in vec2 coords) {
|
|
return min(getDepthOpaque(coords), getDepthTransparent(coords));
|
|
}
|
|
|
|
bool isBackground(const in float depth) {
|
|
// (2^24 - 1) / 2^24, max of 24-bit packed depth; also passes raw fp32.
|
|
return depth >= 0.99999994;
|
|
}
|
|
|
|
void main(void) {
|
|
vec2 coords = gl_FragCoord.xy * uTexSizeInv;
|
|
vec4 opaqueTexel = texture2D(tColorOpaque, coords);
|
|
vec4 transparentTexel = texture2D(tColorTransparent, coords);
|
|
// fog illumination's un-fogged opaque seed by the opaque depth, matching standard's per-layer fog
|
|
if (!uOpaqueFogged) {
|
|
opaqueTexel.rgb *= 1.0 - smoothstep(uFogNear, uFogFar, abs(depthToViewZ(uIsOrtho, getDepthOpaque(coords), uNear, uFar)));
|
|
}
|
|
// PMA OVER composite, matches postprocessing's final transparency blend.
|
|
vec4 texel = transparentTexel + opaqueTexel * (1.0 - transparentTexel.a);
|
|
float emissive = texture2D(tEmissive, coords).a;
|
|
float depth = getDepth(coords);
|
|
|
|
if (isBackground(depth)) {
|
|
gl_FragColor = vec4(0.0, 0.0, 0.0, 0.0);
|
|
return;
|
|
}
|
|
|
|
vec4 outputColor = vec4(uDefaultColor.rgb, uDefaultOpacity);
|
|
|
|
#if defined(dMode_luminosity)
|
|
vec3 luma = vec3(0.299, 0.587, 0.114);
|
|
float v = dot(texel.xyz, luma);
|
|
float alpha = smoothstep(uLuminosityThreshold, uLuminosityThreshold + uSmoothWidth, v);
|
|
|
|
gl_FragColor = mix(outputColor, texel, alpha);
|
|
#elif defined(dMode_emissive)
|
|
// the prepass already holds the fogged emissive color, free of lighting/exposure
|
|
gl_FragColor = texture2D(tEmissive, coords);
|
|
#endif
|
|
}
|
|
`;var Gve=`
|
|
precision highp float;
|
|
precision highp int;
|
|
precision highp sampler2D;
|
|
|
|
uniform sampler2D tInput;
|
|
uniform vec2 uTexSizeInv;
|
|
|
|
uniform vec2 uDirection;
|
|
uniform float uGaussianCoefficients[dKernelRadius];
|
|
|
|
void main(void) {
|
|
vec2 coords = gl_FragCoord.xy * uTexSizeInv;
|
|
float weightSum = uGaussianCoefficients[0];
|
|
vec4 diffuseSum = texture2D(tInput, coords) * weightSum;
|
|
|
|
for(int i = 1; i < dKernelRadius; ++i) {
|
|
float x = float(i);
|
|
float w = uGaussianCoefficients[i];
|
|
vec2 offset = uDirection * uTexSizeInv * x;
|
|
vec4 sample1 = texture2D(tInput, coords + offset);
|
|
vec4 sample2 = texture2D(tInput, coords - offset);
|
|
diffuseSum += (sample1 + sample2) * w;
|
|
weightSum += 2.0 * w;
|
|
}
|
|
|
|
gl_FragColor = diffuseSum / weightSum;
|
|
}
|
|
`;var $X=5,wH={strength:h.Numeric(1,{min:0,max:3,step:.1}),radius:h.Numeric(0,{min:0,max:1,step:.01}),threshold:h.Numeric(0,{min:0,max:1,step:.01},{description:"Luminosity threshold",hideIf:e=>e.mode==="emissive"}),mode:h.Select("emissive",[["luminosity","Luminosity"],["emissive","Emissive"]]),transparency:h.Boolean(!0,{description:"Include transparent objects in emissive bloom",hideIf:e=>e.mode!=="emissive"})},Lm=class{constructor(t,r,n){this.webgl=t;this.horizontalBlurTargets=[];this.verticalBlurTargets=[];this.emissiveTarget=t.createRenderTarget(r,n,!0,"uint8","linear","rgba"),this.luminosityTarget=t.createRenderTarget(r,n,!1,"uint8","linear"),this.compositeTarget=t.createRenderTarget(r,n,!1,"uint8","linear");let o=Math.round(r/2),i=Math.round(n/2);for(let A=0;A<$X;++A)this.horizontalBlurTargets[A]=t.createRenderTarget(o,i,!1,"uint8","linear"),this.verticalBlurTargets[A]=t.createRenderTarget(o,i,!1,"uint8","linear"),o=Math.round(o/2),i=Math.round(i/2);let a=Ti();this.luminosityRenderable=Hdt(t,a,a,a,a,a),this.blurRenderable=Kdt(t,a),this.compositeRenderable=Xdt(t,r,n,this.verticalBlurTargets[0].texture,this.verticalBlurTargets[1].texture,this.verticalBlurTargets[2].texture,this.verticalBlurTargets[3].texture,this.verticalBlurTargets[4].texture)}static isEnabled(t){return t.enabled&&t.bloom.name==="on"}getByteCount(){return this.emissiveTarget.getByteCount()+this.luminosityTarget.getByteCount()+this.compositeTarget.getByteCount()+this.horizontalBlurTargets.reduce((t,r)=>t+r.getByteCount(),0)+this.verticalBlurTargets.reduce((t,r)=>t+r.getByteCount(),0)}setSize(t,r){let n=this.luminosityTarget.getWidth(),o=this.luminosityTarget.getHeight();if(t!==n||r!==o){this.emissiveTarget.setSize(t,r),this.luminosityTarget.setSize(t,r),this.compositeTarget.setSize(t,r);let i=Math.round(t/2),a=Math.round(r/2);for(let A=0;A<$X;++A)this.horizontalBlurTargets[A].setSize(i,a),this.verticalBlurTargets[A].setSize(i,a),i=Math.round(i/2),a=Math.round(a/2);D.update(this.luminosityRenderable.values.uTexSizeInv,Le.set(this.luminosityRenderable.values.uTexSizeInv.ref.value,1/t,1/r)),D.update(this.compositeRenderable.values.uTexSizeInv,Le.set(this.compositeRenderable.values.uTexSizeInv.ref.value,1/t,1/r))}}update(t,r,n,o,i,a,A,s){let c=!1;this.luminosityRenderable.values.tColorOpaque.ref.value!==t&&(D.update(this.luminosityRenderable.values.tColorOpaque,t),c=!0),this.luminosityRenderable.values.tColorTransparent.ref.value!==r&&(D.update(this.luminosityRenderable.values.tColorTransparent,r),c=!0),this.luminosityRenderable.values.tEmissive.ref.value!==n&&(D.update(this.luminosityRenderable.values.tEmissive,n),c=!0),this.luminosityRenderable.values.tDepthOpaque.ref.value!==o&&(D.update(this.luminosityRenderable.values.tDepthOpaque,o),c=!0),this.luminosityRenderable.values.tDepthTransparent.ref.value!==i&&(D.update(this.luminosityRenderable.values.tDepthTransparent,i),c=!0),this.luminosityRenderable.values.dMode.ref.value!==a.mode&&(D.update(this.luminosityRenderable.values.dMode,a.mode),c=!0),D.updateIfChanged(this.luminosityRenderable.values.uLuminosityThreshold,a.threshold),D.updateIfChanged(this.luminosityRenderable.values.uNear,A.near),D.updateIfChanged(this.luminosityRenderable.values.uFar,A.far),D.updateIfChanged(this.luminosityRenderable.values.uIsOrtho,A.state.mode==="orthographic"?1:0),D.updateIfChanged(this.luminosityRenderable.values.uFogNear,A.fogNear),D.updateIfChanged(this.luminosityRenderable.values.uFogFar,A.fogFar),D.updateIfChanged(this.luminosityRenderable.values.uOpaqueFogged,s),c&&this.luminosityRenderable.update(),D.updateIfChanged(this.compositeRenderable.values.uBloomRadius,a.radius),D.updateIfChanged(this.compositeRenderable.values.uBloomStrength,a.strength)}render(t){at&&this.webgl.timer.mark("BloomPass.render");let{gl:r,state:n}=this.webgl,{x:o,y:i,width:a,height:A}=t;n.viewport(o,i,a,A),n.scissor(o,i,a,A),n.enable(r.SCISSOR_TEST),n.disable(r.BLEND),n.disable(r.DEPTH_TEST),n.depthMask(!1),this.luminosityTarget.bind(),this.luminosityRenderable.render();for(let s=0;s<$X;++s){let c=this.horizontalBlurTargets[s].getWidth(),l=this.horizontalBlurTargets[s].getHeight();n.viewport(0,0,c,l),n.scissor(0,0,c,l),D.update(this.blurRenderable.values.dKernelRadius,eZ[s]),D.update(this.blurRenderable.values.uGaussianCoefficients,_dt(eZ[s])),D.update(this.blurRenderable.values.uTexSizeInv,Le.set(this.blurRenderable.values.uTexSizeInv.ref.value,1/c,1/l)),this.horizontalBlurTargets[s].bind(),D.update(this.blurRenderable.values.tInput,s===0?this.luminosityTarget.texture:this.verticalBlurTargets[s-1].texture),D.update(this.blurRenderable.values.uDirection,Ydt),this.blurRenderable.update(),this.blurRenderable.render(),this.verticalBlurTargets[s].bind(),D.update(this.blurRenderable.values.tInput,this.horizontalBlurTargets[s].texture),D.update(this.blurRenderable.values.uDirection,Odt),this.blurRenderable.update(),this.blurRenderable.render()}n.viewport(o,i,a,A),n.scissor(o,i,a,A),this.compositeTarget.bind(),this.compositeRenderable.update(),this.compositeRenderable.render(),at&&this.webgl.timer.markEnd("BloomPass.render")}},Mdt={...Wn,tColorOpaque:Ft("texture","rgba","ubyte","linear"),tColorTransparent:Ft("texture","rgba","ubyte","linear"),tEmissive:Ft("texture","rgba","ubyte","linear"),tDepthOpaque:Ft("texture","rgba","ubyte","nearest"),tDepthTransparent:Ft("texture","rgba","ubyte","nearest"),uTexSizeInv:Re("v2"),uDefaultColor:Re("v3"),uDefaultOpacity:Re("f"),uLuminosityThreshold:Re("f"),uSmoothWidth:Re("f"),uNear:Re("f"),uFar:Re("f"),uIsOrtho:Re("f"),uFogNear:Re("f"),uFogFar:Re("f"),uOpaqueFogged:Re("b"),dMode:bt("string",["luminosity","emissive"])},kdt=Cn("Bloom Luminosity",mo,Pve);function Hdt(e,t,r,n,o,i){let a=t.getWidth(),A=t.getHeight(),s={...Xn,tColorOpaque:D.create(t),tColorTransparent:D.create(r),tEmissive:D.create(n),tDepthOpaque:D.create(o),tDepthTransparent:D.create(i),uTexSizeInv:D.create(Le.create(1/a,1/A)),uDefaultColor:D.create(B()),uDefaultOpacity:D.create(0),uLuminosityThreshold:D.create(0),uSmoothWidth:D.create(1),uNear:D.create(1),uFar:D.create(1e4),uIsOrtho:D.create(0),uFogNear:D.create(1e4),uFogFar:D.create(1e4),uOpaqueFogged:D.create(!0),dMode:D.create("emissive")},c={...Mdt},l=Un(e,"triangles",kdt,c,s);return Ln(l,s)}function Vdt(e){let t=[];for(let r=0;r<e;++r)t.push(.39894*Math.exp(-.5*r*r/(e*e))/e);return t}var _dt=Tu(Vdt),eZ=[3,5,7,9,11],Ydt=Le.create(1,0),Odt=Le.create(0,1),Jdt={...Wn,tInput:Ft("texture","rgba","ubyte","linear"),uTexSizeInv:Re("v2"),uDirection:Re("v2"),uGaussianCoefficients:Re("f[]"),dKernelRadius:bt("number")},zdt=Cn("Bloom Blur",mo,Gve);function Kdt(e,t){let r=t.getWidth(),n=t.getHeight(),o={...Xn,tInput:D.create(t),uTexSizeInv:D.create(Le.create(1/r,1/n)),uDirection:D.create(Le()),uGaussianCoefficients:D.create([]),dKernelRadius:D.create(eZ[0])},i={...Jdt},a=Un(e,"triangles",zdt,i,o);return Ln(a,o)}var jdt={...Wn,tBlur1:Ft("texture","rgba","ubyte","linear"),tBlur2:Ft("texture","rgba","ubyte","linear"),tBlur3:Ft("texture","rgba","ubyte","linear"),tBlur4:Ft("texture","rgba","ubyte","linear"),tBlur5:Ft("texture","rgba","ubyte","linear"),uTexSizeInv:Re("v2"),uBloomStrength:Re("f"),uBloomRadius:Re("f"),uBloomFactors:Re("f[]"),uBloomTints:Re("v3[]")},Wdt=Cn("Bloom Composite",mo,Tve);function Xdt(e,t,r,n,o,i,a,A){let s={...Xn,uTexSizeInv:D.create(Le.create(1/t,1/r)),tBlur1:D.create(n),tBlur2:D.create(o),tBlur3:D.create(i),tBlur4:D.create(a),tBlur5:D.create(A),uBloomStrength:D.create(1),uBloomRadius:D.create(0),uBloomFactors:D.create([1,.8,.6,.4,.2]),uBloomTints:D.create(new Array(15).fill(1))},c={...jdt},l=Un(e,"triangles",Wdt,c,s);return Ln(l,s)}var Nve=`
|
|
precision highp float;
|
|
precision highp int;
|
|
precision highp sampler2D;
|
|
|
|
uniform sampler2D tDepthOpaque;
|
|
uniform sampler2D tDepthTransparent;
|
|
uniform vec2 uTexSize;
|
|
|
|
uniform float uNear;
|
|
uniform float uFar;
|
|
uniform mat4 uInvProjection;
|
|
|
|
uniform float uOutlineThreshold;
|
|
|
|
#include common
|
|
|
|
float getViewZ(const in float depth) {
|
|
#if dOrthographic == 1
|
|
return orthographicDepthToViewZ(depth, uNear, uFar);
|
|
#else
|
|
return perspectiveDepthToViewZ(depth, uNear, uFar);
|
|
#endif
|
|
}
|
|
|
|
float getDepthOpaque(const in vec2 coords) {
|
|
#ifdef depthTextureSupport
|
|
return texture2D(tDepthOpaque, coords).r;
|
|
#else
|
|
return unpackRGBAToDepth(texture2D(tDepthOpaque, coords));
|
|
#endif
|
|
}
|
|
|
|
vec2 getDepthTransparentWithAlpha(const in vec2 coords) {
|
|
#ifdef dTransparentOutline
|
|
return unpackRGBAToDepthWithAlpha(texture2D(tDepthTransparent, coords));
|
|
#else
|
|
return vec2(1.0, 0.0);
|
|
#endif
|
|
}
|
|
|
|
bool isBackground(const in float depth) {
|
|
return depth == 1.0;
|
|
}
|
|
|
|
float getPixelSize(const in vec2 coords, const in float depth) {
|
|
vec3 viewPos0 = screenSpaceToViewSpace(vec3(coords, depth), uInvProjection);
|
|
vec3 viewPos1 = screenSpaceToViewSpace(vec3(coords + vec2(1.0, 0.0) / uTexSize, depth), uInvProjection);
|
|
return distance(viewPos0, viewPos1);
|
|
}
|
|
|
|
void main(void) {
|
|
float backgroundViewZ = 2.0 * uFar;
|
|
|
|
vec2 coords = gl_FragCoord.xy / uTexSize;
|
|
vec2 invTexSize = 1.0 / uTexSize;
|
|
|
|
float selfDepthOpaque = getDepthOpaque(coords);
|
|
float selfViewZOpaque = isBackground(selfDepthOpaque) ? backgroundViewZ : getViewZ(selfDepthOpaque);
|
|
float pixelSizeOpaque = getPixelSize(coords, selfDepthOpaque) * uOutlineThreshold;
|
|
|
|
vec2 selfDepthTransparentWithAlpha = getDepthTransparentWithAlpha(coords);
|
|
float selfDepthTransparent = selfDepthTransparentWithAlpha.x;
|
|
float selfViewZTransparent = isBackground(selfDepthTransparent) ? backgroundViewZ : getViewZ(selfDepthTransparent);
|
|
float pixelSizeTransparent = getPixelSize(coords, selfDepthTransparent) * uOutlineThreshold;
|
|
|
|
float bestOpaqueDepth = 1.0;
|
|
float bestTransparentDepth = 1.0;
|
|
float bestTransparentAlpha = 0.0;
|
|
|
|
float opaqueOutlineFlag = 0.0;
|
|
float transparentOutlineFlag = 0.0;
|
|
|
|
for (int y = -1; y <= 1; y++) {
|
|
for (int x = -1; x <= 1; x++) {
|
|
vec2 sampleCoords = coords + vec2(float(x), float(y)) * invTexSize;
|
|
|
|
// Opaque
|
|
float sampleDepthOpaque = getDepthOpaque(sampleCoords);
|
|
float sampleViewZOpaque = isBackground(sampleDepthOpaque) ? backgroundViewZ : getViewZ(sampleDepthOpaque);
|
|
if (abs(selfViewZOpaque - sampleViewZOpaque) > pixelSizeOpaque && selfDepthOpaque > sampleDepthOpaque && sampleDepthOpaque <= bestOpaqueDepth) {
|
|
bestOpaqueDepth = sampleDepthOpaque;
|
|
opaqueOutlineFlag = 1.0;
|
|
}
|
|
|
|
// Transparent
|
|
vec2 sampleDepthTransparentWithAlpha = getDepthTransparentWithAlpha(sampleCoords);
|
|
float sampleDepthTransparent = sampleDepthTransparentWithAlpha.x;
|
|
float sampleAlphaTransparent = sampleDepthTransparentWithAlpha.y;
|
|
float sampleViewZTransparent = isBackground(sampleDepthTransparent) ? backgroundViewZ : getViewZ(sampleDepthTransparent);
|
|
if (abs(selfViewZTransparent - sampleViewZTransparent) > pixelSizeTransparent && selfDepthTransparent > sampleDepthTransparent && sampleDepthTransparent <= bestTransparentDepth) {
|
|
bestTransparentDepth = sampleDepthTransparent;
|
|
bestTransparentAlpha = sampleAlphaTransparent;
|
|
transparentOutlineFlag = 1.0;
|
|
}
|
|
}
|
|
}
|
|
|
|
if (transparentOutlineFlag > 0.0 && abs(selfViewZOpaque - getViewZ(bestTransparentDepth)) < pixelSizeOpaque) { // Disable transparent outline close to opaque elements
|
|
transparentOutlineFlag = 0.0;
|
|
}
|
|
|
|
// lazy curvature veto: only compute if an outline was found and center is not background
|
|
const float kCurvatureGate = 0.75;
|
|
vec2 dx = vec2(invTexSize.x, 0.0);
|
|
vec2 dy = vec2(0.0, invTexSize.y);
|
|
|
|
if (opaqueOutlineFlag > 0.0 && !isBackground(selfDepthOpaque)) {
|
|
float dL = getDepthOpaque(coords - dx);
|
|
float dR = getDepthOpaque(coords + dx);
|
|
float dU = getDepthOpaque(coords + dy);
|
|
float dD = getDepthOpaque(coords - dy);
|
|
|
|
float vzL = isBackground(dL) ? backgroundViewZ : getViewZ(dL);
|
|
float vzR = isBackground(dR) ? backgroundViewZ : getViewZ(dR);
|
|
float vzU = isBackground(dU) ? backgroundViewZ : getViewZ(dU);
|
|
float vzD = isBackground(dD) ? backgroundViewZ : getViewZ(dD);
|
|
|
|
float ddx = abs(vzL + vzR - 2.0 * selfViewZOpaque);
|
|
float ddy = abs(vzU + vzD - 2.0 * selfViewZOpaque);
|
|
float curvOpaque = max(ddx, ddy);
|
|
|
|
if (curvOpaque < pixelSizeOpaque * kCurvatureGate) {
|
|
opaqueOutlineFlag = 0.0;
|
|
bestOpaqueDepth = 1.0;
|
|
}
|
|
}
|
|
|
|
if (transparentOutlineFlag > 0.0 && !isBackground(selfDepthTransparent)) {
|
|
vec2 daL = getDepthTransparentWithAlpha(coords - dx);
|
|
vec2 daR = getDepthTransparentWithAlpha(coords + dx);
|
|
vec2 daU = getDepthTransparentWithAlpha(coords + dy);
|
|
vec2 daD = getDepthTransparentWithAlpha(coords - dy);
|
|
|
|
float dL = daL.x;
|
|
float dR = daR.x;
|
|
float dU = daU.x;
|
|
float dD = daD.x;
|
|
|
|
float vzL = isBackground(dL) ? backgroundViewZ : getViewZ(dL);
|
|
float vzR = isBackground(dR) ? backgroundViewZ : getViewZ(dR);
|
|
float vzU = isBackground(dU) ? backgroundViewZ : getViewZ(dU);
|
|
float vzD = isBackground(dD) ? backgroundViewZ : getViewZ(dD);
|
|
|
|
float ddx = abs(vzL + vzR - 2.0 * selfViewZTransparent);
|
|
float ddy = abs(vzU + vzD - 2.0 * selfViewZTransparent);
|
|
float curvTransparent = max(ddx, ddy);
|
|
|
|
if (curvTransparent < pixelSizeTransparent * kCurvatureGate) {
|
|
transparentOutlineFlag = 0.0;
|
|
bestTransparentDepth = 1.0;
|
|
bestTransparentAlpha = 0.0;
|
|
}
|
|
}
|
|
|
|
vec2 depthPacked; // Pack depth in G/B channels
|
|
float outlineTypeFlag = 0.0;
|
|
if (opaqueOutlineFlag > 0.0 && transparentOutlineFlag > 0.0) {
|
|
outlineTypeFlag = 0.75; // Both
|
|
depthPacked = packUnitIntervalToRG(bestOpaqueDepth);
|
|
} else if (transparentOutlineFlag > 0.0) {
|
|
outlineTypeFlag = 0.5; // Transparent only
|
|
depthPacked = packUnitIntervalToRG(bestTransparentDepth);
|
|
} else if (opaqueOutlineFlag > 0.0) {
|
|
outlineTypeFlag = 0.25; // Opaque only
|
|
depthPacked = packUnitIntervalToRG(bestOpaqueDepth);
|
|
}
|
|
|
|
float alpha = clamp(bestTransparentAlpha, 0.0, 0.5) * 2.0; // limiting to range [0.0, 0.5] to improve alpha precision since we don't need a wider range
|
|
float packedFlagWithAlpha = pack2x4(vec2(outlineTypeFlag, alpha)); // pack outlineType with alpha
|
|
gl_FragColor = vec4(packedFlagWithAlpha, depthPacked.x, depthPacked.y, bestTransparentDepth);
|
|
}
|
|
`;var RH={scale:h.Numeric(1,{min:1,max:5,step:1}),threshold:h.Numeric(.33,{min:.01,max:1,step:.01}),color:h.Color(0),includeTransparent:h.Boolean(!0,{description:"Whether to show outline for transparent objects"})},OI=class{constructor(t,r,n,o,i){this.webgl=t;this.target=t.createRenderTarget(r,n,!1),this.renderable=qdt(t,i,o,!0)}static isEnabled(t){return t.enabled&&t.outline.name!=="off"}getByteCount(){return this.target.getByteCount()}setSize(t,r){let[n,o]=this.renderable.values.uTexSize.ref.value;(t!==n||r!==o)&&(this.target.setSize(t,r),D.update(this.renderable.values.uTexSize,Le.set(this.renderable.values.uTexSize.ref.value,t,r)))}update(t,r,n,o){let i=!1,a=t.state.mode==="orthographic"?1:0,A=this.renderable.values.uInvProjection.ref.value;Y.invert(A,t.projection);let s=r.includeTransparent??!0,c=Math.max(1,Math.round(r.scale*this.webgl.pixelRatio))-1,l=50*r.threshold*this.webgl.pixelRatio;return D.updateIfChanged(this.renderable.values.uNear,t.near),D.updateIfChanged(this.renderable.values.uFar,t.far),D.update(this.renderable.values.uInvProjection,A),this.renderable.values.dTransparentOutline.ref.value!==s&&(i=!0,D.update(this.renderable.values.dTransparentOutline,s)),this.renderable.values.dOrthographic.ref.value!==a&&(i=!0,D.update(this.renderable.values.dOrthographic,a)),D.updateIfChanged(this.renderable.values.uOutlineThreshold,l),this.renderable.values.tDepthTransparent.ref.value!==n&&(i=!0,D.update(this.renderable.values.tDepthTransparent,n)),this.renderable.values.tDepthOpaque.ref.value!==o&&(i=!0,D.update(this.renderable.values.tDepthOpaque,o)),i&&this.renderable.update(),{transparentOutline:s,outlineScale:c}}render(){at&&this.webgl.timer.mark("OutlinePass.render"),this.target.bind(),this.renderable.render(),at&&this.webgl.timer.markEnd("OutlinePass.render")}},Zdt={...Wn,tDepthOpaque:Ft("texture","rgba","ubyte","nearest"),tDepthTransparent:Ft("texture","rgba","ubyte","nearest"),uTexSize:Re("v2"),dOrthographic:bt("number"),uNear:Re("f"),uFar:Re("f"),uInvProjection:Re("m4"),uOutlineThreshold:Re("f"),dTransparentOutline:bt("boolean")};function qdt(e,t,r,n){let o=t.getWidth(),i=t.getHeight(),a={...Xn,tDepthOpaque:D.create(t),tDepthTransparent:D.create(r),uTexSize:D.create(Le.create(o,i)),dOrthographic:D.create(0),uNear:D.create(1),uFar:D.create(1e4),uInvProjection:D.create(Y.identity()),uOutlineThreshold:D.create(.33),dTransparentOutline:D.create(n)},A={...Zdt},s=Cn("outlines",mo,Nve),c=Un(e,"triangles",s,A,a);return Ln(c,a)}var Mve=`
|
|
precision highp float;
|
|
precision highp int;
|
|
precision highp sampler2D;
|
|
|
|
#include common
|
|
|
|
uniform sampler2D tDepth;
|
|
uniform vec2 uTexSize;
|
|
uniform vec4 uBounds;
|
|
|
|
uniform float uNear;
|
|
uniform float uFar;
|
|
|
|
#if dLightCount != 0
|
|
uniform vec3 uLightDirection[dLightCount];
|
|
uniform vec3 uLightColor[dLightCount];
|
|
#endif
|
|
|
|
uniform vec3 uAmbientColor;
|
|
|
|
uniform mat4 uProjection;
|
|
uniform mat4 uInvProjection;
|
|
|
|
uniform float uMaxDistance;
|
|
uniform float uTolerance;
|
|
|
|
// Map full [0,1] coords -> bounds [0,1] coords
|
|
vec2 fullCoordsToBoundsCoords(vec2 fullCoords) {
|
|
return (fullCoords - uBounds.xy) / (uBounds.zw - uBounds.xy);
|
|
}
|
|
|
|
// Map bounds [0,1] coords -> full [0,1] coords
|
|
vec2 boundsCoordsToFullCoords(vec2 boundsCoords) {
|
|
return uBounds.xy + (uBounds.zw - uBounds.xy) * boundsCoords;
|
|
}
|
|
|
|
bool isBackground(const in float depth) {
|
|
return depth == 1.0;
|
|
}
|
|
|
|
bool outsideBounds(const in vec2 p) {
|
|
return p.x < uBounds.x || p.y < uBounds.y || p.x > uBounds.z || p.y > uBounds.w;
|
|
}
|
|
|
|
float getViewZ(const in float depth) {
|
|
#if dOrthographic == 1
|
|
return orthographicDepthToViewZ(depth, uNear, uFar);
|
|
#else
|
|
return perspectiveDepthToViewZ(depth, uNear, uFar);
|
|
#endif
|
|
}
|
|
|
|
float getDepth(const in vec2 coords) {
|
|
#ifdef depthTextureSupport
|
|
return texture2D(tDepth, coords).r;
|
|
#else
|
|
return unpackRGBAToDepth(texture2D(tDepth, coords));
|
|
#endif
|
|
}
|
|
|
|
float screenFade(const in vec2 coords) {
|
|
vec2 c = (coords - uBounds.xy) / (uBounds.zw - uBounds.xy);
|
|
vec2 fade = max(12.0 * abs(c - 0.5) - 5.0, vec2(0.0));
|
|
return saturate(1.0 - dot(fade, fade));
|
|
}
|
|
|
|
// based on https://panoskarabelas.com/posts/screen_space_shadows/
|
|
vec3 screenSpaceShadow(const in vec3 position, const in vec3 lightDirection, const in vec3 lightColor, const in float stepLength) {
|
|
// Ray position and direction (in view-space)
|
|
vec3 rayPos = position;
|
|
vec3 rayDir = -lightDirection;
|
|
|
|
// Compute ray step
|
|
vec3 rayStep = rayDir * stepLength;
|
|
|
|
// Ray march towards the light
|
|
vec4 rayCoords = vec4(0.0);
|
|
for (int i = 0; i < dSteps; ++i) {
|
|
// Step the ray
|
|
rayPos += rayStep;
|
|
|
|
rayCoords = uProjection * vec4(rayPos, 1.0);
|
|
rayCoords.xyz = (rayCoords.xyz / rayCoords.w) * 0.5 + 0.5;
|
|
rayCoords.xy = boundsCoordsToFullCoords(rayCoords.xy);
|
|
|
|
if (outsideBounds(rayCoords.xy)) {
|
|
return lightColor;
|
|
}
|
|
|
|
// Compute the difference between the ray's and the camera's depth
|
|
float depth = getDepth(rayCoords.xy);
|
|
float viewZ = getViewZ(depth);
|
|
float zDelta = rayPos.z - viewZ;
|
|
|
|
if (zDelta < uTolerance) {
|
|
// Fade out as we approach the edges of the screen
|
|
return mix(vec3(0.0), lightColor, 1.0 - screenFade(rayCoords.xy));
|
|
}
|
|
}
|
|
|
|
return lightColor;
|
|
}
|
|
|
|
void main(void) {
|
|
vec2 invTexSize = 1.0 / uTexSize;
|
|
vec2 selfCoords = gl_FragCoord.xy * invTexSize;
|
|
float selfDepth = getDepth(selfCoords);
|
|
|
|
if (isBackground(selfDepth)) {
|
|
gl_FragColor = vec4(0.0);
|
|
return;
|
|
}
|
|
|
|
vec2 selfBoundsCoords = fullCoordsToBoundsCoords(selfCoords);
|
|
if (any(lessThan(selfBoundsCoords, vec2(0.0))) || any(greaterThan(selfBoundsCoords, vec2(1.0)))) {
|
|
gl_FragColor = vec4(0.0);
|
|
return;
|
|
}
|
|
|
|
vec3 selfViewPos = screenSpaceToViewSpace(vec3(selfBoundsCoords, selfDepth), uInvProjection);
|
|
float stepLength = uMaxDistance / float(dSteps);
|
|
|
|
float l = length(uAmbientColor);
|
|
float a = l;
|
|
#if dLightCount != 0
|
|
vec3 s;
|
|
#pragma unroll_loop_start
|
|
for (int i = 0; i < dLightCount; ++i) {
|
|
s = screenSpaceShadow(selfViewPos, uLightDirection[i], uLightColor[i], stepLength);
|
|
l += length(s);
|
|
a += length(uLightColor[i]);
|
|
}
|
|
#pragma unroll_loop_end
|
|
#endif
|
|
|
|
gl_FragColor = vec4(l / a);
|
|
}
|
|
`;var UH={steps:h.Numeric(1,{min:1,max:64,step:1}),maxDistance:h.Numeric(3,{min:0,max:256,step:1}),tolerance:h.Numeric(1,{min:0,max:10,step:.1})},kv=class{constructor(t,r,n,o){this.webgl=t;this.invProjection=Y.identity();this.invHeadRotation=Y.identity();this.target=t.createRenderTarget(r,n,!1),this.renderable=ept(t,o)}static isEnabled(t){return t.enabled&&t.shadow.name!=="off"}getByteCount(){return this.target.getByteCount()}setSize(t,r){let[n,o]=this.renderable.values.uTexSize.ref.value;(t!==n||r!==o)&&(this.target.setSize(t,r),D.update(this.renderable.values.uTexSize,Le.set(this.renderable.values.uTexSize.ref.value,t,r)))}update(t,r,n,o){let i=!1,a=t.state.mode==="orthographic"?1:0,[A,s]=this.renderable.values.uTexSize.ref.value,c=t.viewport;D.update(this.renderable.values.uProjection,t.projection),D.update(this.renderable.values.uInvProjection,Y.invert(this.invProjection,t.projection)),lr.set(this.renderable.values.uBounds.ref.value,c.x/A,c.y/s,(c.x+c.width)/A,(c.y+c.height)/s),D.update(this.renderable.values.uBounds,this.renderable.values.uBounds.ref.value),D.updateIfChanged(this.renderable.values.uNear,t.near),D.updateIfChanged(this.renderable.values.uFar,t.far),this.renderable.values.dOrthographic.ref.value!==a&&(D.update(this.renderable.values.dOrthographic,a),i=!0),D.updateIfChanged(this.renderable.values.uMaxDistance,o.maxDistance*t.scale),D.updateIfChanged(this.renderable.values.uTolerance,o.tolerance*t.scale),this.renderable.values.dSteps.ref.value!==o.steps&&(D.update(this.renderable.values.dSteps,o.steps),i=!0),!Y.isZero(t.headRotation)?D.update(this.renderable.values.uLightDirection,r6(r,Y.invert(this.invHeadRotation,t.headRotation))):D.update(this.renderable.values.uLightDirection,r.direction),D.update(this.renderable.values.uLightColor,r.color),this.renderable.values.dLightCount.ref.value!==r.count&&(D.update(this.renderable.values.dLightCount,r.count),i=!0),D.update(this.renderable.values.uAmbientColor,n),i&&this.renderable.update()}render(){at&&this.webgl.timer.mark("ShadowPass.render"),this.target.bind(),this.renderable.render(),at&&this.webgl.timer.markEnd("ShadowPass.render")}},$dt={...Wn,tDepth:Ft("texture","rgba","ubyte","nearest"),uTexSize:Re("v2"),uProjection:Re("m4"),uInvProjection:Re("m4"),uBounds:Re("v4"),dOrthographic:bt("number"),uNear:Re("f"),uFar:Re("f"),dSteps:bt("number"),uMaxDistance:Re("f"),uTolerance:Re("f"),uLightDirection:Re("v3[]"),uLightColor:Re("v3[]"),dLightCount:bt("number"),uAmbientColor:Re("v3")};function ept(e,t){let r=t.getWidth(),n=t.getHeight(),o={...Xn,tDepth:D.create(t),uTexSize:D.create(Le.create(r,n)),uProjection:D.create(Y.identity()),uInvProjection:D.create(Y.identity()),uBounds:D.create(lr()),dOrthographic:D.create(0),uNear:D.create(1),uFar:D.create(1e4),dSteps:D.create(1),uMaxDistance:D.create(3),uTolerance:D.create(1),uLightDirection:D.create([]),uLightColor:D.create([]),dLightCount:D.create(0),uAmbientColor:D.create(B())},i={...$dt},a=Cn("shadows",mo,Mve),A=Un(e,"triangles",a,i,o);return Ln(A,o)}var kve=`
|
|
precision highp float;
|
|
precision highp int;
|
|
precision highp sampler2D;
|
|
|
|
#include common
|
|
|
|
|
|
uniform sampler2D tDepth;
|
|
uniform sampler2D tDepthHalf;
|
|
uniform sampler2D tDepthQuarter;
|
|
|
|
#if defined(dIncludeTransparent)
|
|
uniform sampler2D tDepthTransparent;
|
|
uniform sampler2D tDepthHalfTransparent;
|
|
uniform sampler2D tDepthQuarterTransparent;
|
|
#endif
|
|
|
|
uniform int uTransparencyFlag;
|
|
|
|
uniform vec2 uTexSize;
|
|
uniform vec4 uBounds;
|
|
|
|
uniform vec3 uSamples[dNSamples];
|
|
|
|
uniform mat4 uProjection;
|
|
uniform mat4 uInvProjection;
|
|
|
|
#ifdef dMultiScale
|
|
uniform float uLevelRadius[dLevels];
|
|
uniform float uLevelBias[dLevels];
|
|
uniform float uNearThreshold;
|
|
uniform float uFarThreshold;
|
|
#else
|
|
uniform float uRadius;
|
|
#endif
|
|
uniform float uBias;
|
|
|
|
float smootherstep(float edge0, float edge1, float x) {
|
|
x = clamp((x - edge0) / (edge1 - edge0), 0.0, 1.0);
|
|
return x * x * x * (x * (x * 6.0 - 15.0) + 10.0);
|
|
}
|
|
|
|
float noise(const in vec2 coords) {
|
|
float a = 12.9898;
|
|
float b = 78.233;
|
|
float c = 43758.5453;
|
|
float dt = dot(coords, vec2(a,b));
|
|
float sn = mod(dt, PI);
|
|
return abs(fract(sin(sn) * c)); // is abs necessary?
|
|
}
|
|
|
|
vec2 getNoiseVec2(const in vec2 coords) {
|
|
return vec2(noise(coords), noise(coords + vec2(PI, 2.71828)));
|
|
}
|
|
|
|
bool isBackground(const in float depth) {
|
|
return depth == 1.0;
|
|
}
|
|
|
|
bool isOutsideBounds(const in vec2 coords) {
|
|
return coords.x < uBounds.x || coords.x > uBounds.z || coords.y < uBounds.y || coords.y > uBounds.w;
|
|
}
|
|
|
|
float getDepth(const in vec2 coords, const in int transparentFlag) {
|
|
if (transparentFlag == 1){
|
|
#if defined(dIncludeTransparent)
|
|
return unpackRGBAToDepthWithAlpha(texture2D(tDepthTransparent, coords)).x;
|
|
#else
|
|
return 1.0;
|
|
#endif
|
|
} else {
|
|
#ifdef depthTextureSupport
|
|
return texture2D(tDepth, coords).r;
|
|
#else
|
|
return unpackRGBAToDepth(texture2D(tDepth, coords));
|
|
#endif
|
|
}
|
|
}
|
|
|
|
#if defined(dIncludeTransparent)
|
|
vec2 getDepthTransparentWithAlpha(const in vec2 coords){
|
|
return unpackRGBAToDepthWithAlpha(texture2D(tDepthTransparent, coords));
|
|
}
|
|
#endif
|
|
|
|
#define dQuarterThreshold 0.1
|
|
#define dHalfThreshold 0.05
|
|
|
|
float getMappedDepth(const in vec2 coords, const in vec2 selfCoords) {
|
|
float d = distance(coords, selfCoords);
|
|
#ifdef depthTextureSupport
|
|
if (d > dQuarterThreshold) {
|
|
return texture2D(tDepthQuarter, coords).r;
|
|
} else if (d > dHalfThreshold) {
|
|
return texture2D(tDepthHalf, coords).r;
|
|
} else {
|
|
return texture2D(tDepth, coords).r;
|
|
}
|
|
#else
|
|
if (d > dQuarterThreshold) {
|
|
return unpackRGBAToDepth(texture2D(tDepthQuarter, coords));
|
|
} else if (d > dHalfThreshold) {
|
|
return unpackRGBAToDepth(texture2D(tDepthHalf, coords));
|
|
} else {
|
|
return unpackRGBAToDepth(texture2D(tDepth, coords));
|
|
}
|
|
#endif
|
|
}
|
|
|
|
#if defined(dIncludeTransparent)
|
|
vec2 getMappedDepthTransparentWithAlpha(const in vec2 coords, const in vec2 selfCoords) {
|
|
float d = distance(coords, selfCoords);
|
|
if (d > dQuarterThreshold) {
|
|
return unpackRGBAToDepthWithAlpha(texture2D(tDepthQuarterTransparent, coords));
|
|
} else if (d > dHalfThreshold) {
|
|
return unpackRGBAToDepthWithAlpha(texture2D(tDepthHalfTransparent, coords));
|
|
} else {
|
|
return unpackRGBAToDepthWithAlpha(texture2D(tDepthTransparent, coords));
|
|
}
|
|
}
|
|
#endif
|
|
|
|
// adapted from https://gist.github.com/bgolus/a07ed65602c009d5e2f753826e8078a0
|
|
vec3 viewNormalAtPixelPositionAccurate(const in vec2 vpos, const in int transparentFlag) {
|
|
// current pixel's depth
|
|
float c = getDepth(vpos, transparentFlag);
|
|
|
|
// get current pixel's view space position
|
|
vec3 viewSpacePos_c = screenSpaceToViewSpace(vec3(vpos, c), uInvProjection);
|
|
|
|
// get view space position at 1 pixel offsets in each major direction
|
|
vec3 viewSpacePos_l = screenSpaceToViewSpace(vec3(vpos + vec2(-1.0, 0.0) / uTexSize, getDepth(vpos + vec2(-1.0, 0.0) / uTexSize, transparentFlag)), uInvProjection);
|
|
vec3 viewSpacePos_r = screenSpaceToViewSpace(vec3(vpos + vec2( 1.0, 0.0) / uTexSize, getDepth(vpos + vec2( 1.0, 0.0) / uTexSize, transparentFlag)), uInvProjection);
|
|
vec3 viewSpacePos_d = screenSpaceToViewSpace(vec3(vpos + vec2( 0.0,-1.0) / uTexSize, getDepth(vpos + vec2( 0.0,-1.0) / uTexSize, transparentFlag)), uInvProjection);
|
|
vec3 viewSpacePos_u = screenSpaceToViewSpace(vec3(vpos + vec2( 0.0, 1.0) / uTexSize, getDepth(vpos + vec2( 0.0, 1.0) / uTexSize, transparentFlag)), uInvProjection);
|
|
|
|
// get the difference between the current and each offset position
|
|
vec3 l = viewSpacePos_c - viewSpacePos_l;
|
|
vec3 r = viewSpacePos_r - viewSpacePos_c;
|
|
vec3 d = viewSpacePos_c - viewSpacePos_d;
|
|
vec3 u = viewSpacePos_u - viewSpacePos_c;
|
|
|
|
// get depth values at 1 & 2 pixels offsets from current along the horizontal axis
|
|
vec4 H = vec4(
|
|
getDepth(vpos + vec2(-1.0, 0.0) / uTexSize, transparentFlag),
|
|
getDepth(vpos + vec2( 1.0, 0.0) / uTexSize, transparentFlag),
|
|
getDepth(vpos + vec2(-2.0, 0.0) / uTexSize, transparentFlag),
|
|
getDepth(vpos + vec2( 2.0, 0.0) / uTexSize, transparentFlag)
|
|
);
|
|
|
|
// get depth values at 1 & 2 pixels offsets from current along the vertical axis
|
|
vec4 V = vec4(
|
|
getDepth(vpos + vec2(0.0,-1.0) / uTexSize, transparentFlag),
|
|
getDepth(vpos + vec2(0.0, 1.0) / uTexSize, transparentFlag),
|
|
getDepth(vpos + vec2(0.0,-2.0) / uTexSize, transparentFlag),
|
|
getDepth(vpos + vec2(0.0, 2.0) / uTexSize, transparentFlag)
|
|
);
|
|
|
|
// current pixel's depth difference from slope of offset depth samples
|
|
// differs from original article because we're using non-linear depth values
|
|
// see article's comments
|
|
vec2 he = abs((2.0 * H.xy - H.zw) - c);
|
|
vec2 ve = abs((2.0 * V.xy - V.zw) - c);
|
|
|
|
// pick horizontal and vertical diff with the smallest depth difference from slopes
|
|
vec3 hDeriv = he.x < he.y ? l : r;
|
|
vec3 vDeriv = ve.x < ve.y ? d : u;
|
|
|
|
// get view space normal from the cross product of the best derivatives
|
|
vec3 viewNormal = normalize(cross(hDeriv, vDeriv));
|
|
|
|
return viewNormal;
|
|
}
|
|
|
|
float getPixelSize(const in vec2 coords, const in float depth) {
|
|
vec3 viewPos0 = screenSpaceToViewSpace(vec3(coords, depth), uInvProjection);
|
|
vec3 viewPos1 = screenSpaceToViewSpace(vec3(coords + vec2(1.0, 0.0) / uTexSize, depth), uInvProjection);
|
|
return distance(viewPos0, viewPos1);
|
|
}
|
|
|
|
// StarCraft II Ambient Occlusion by [Filion and McNaughton 2008]
|
|
void main(void) {
|
|
vec2 invTexSize = 1.0 / uTexSize;
|
|
vec2 selfCoords = gl_FragCoord.xy * invTexSize;
|
|
float selfDepth = getDepth(selfCoords, uTransparencyFlag);
|
|
vec2 selfPackedDepth = packUnitIntervalToRG(selfDepth);
|
|
|
|
if (isBackground(selfDepth)) {
|
|
gl_FragColor = vec4(packUnitIntervalToRG(1.0), selfPackedDepth);
|
|
return;
|
|
}
|
|
|
|
vec3 selfViewNormal = viewNormalAtPixelPositionAccurate(selfCoords, uTransparencyFlag);
|
|
vec3 selfViewPos = screenSpaceToViewSpace(vec3(selfCoords, selfDepth), uInvProjection);
|
|
|
|
vec3 randomVec = normalize(vec3(getNoiseVec2(selfCoords) * 2.0 - 1.0, 0.0));
|
|
vec3 tangent = normalize(randomVec - selfViewNormal * dot(randomVec, selfViewNormal));
|
|
vec3 bitangent = cross(selfViewNormal, tangent);
|
|
mat3 TBN = mat3(tangent, bitangent, selfViewNormal);
|
|
|
|
float occlusion = 0.0;
|
|
#ifdef dMultiScale
|
|
float pixelSize = getPixelSize(selfCoords, selfDepth);
|
|
|
|
for(int l = 0; l < dLevels; l++) {
|
|
// TODO: smooth transition
|
|
if (pixelSize * uNearThreshold > uLevelRadius[l]) continue;
|
|
if (pixelSize * uFarThreshold < uLevelRadius[l]) continue;
|
|
|
|
float nSamples = float(dNSamples);
|
|
float levelOcclusion = 0.0;
|
|
for(int i = 0; i < dNSamples; i++) {
|
|
// get sample position:
|
|
vec3 sampleViewPos = TBN * uSamples[i];
|
|
sampleViewPos = selfViewPos + sampleViewPos * uLevelRadius[l];
|
|
|
|
// project sample position:
|
|
vec4 offset = vec4(sampleViewPos, 1.0);
|
|
offset = uProjection * offset;
|
|
offset.xyz = (offset.xyz / offset.w) * 0.5 + 0.5;
|
|
if (isOutsideBounds(offset.xy)) {
|
|
nSamples -= 1.0;
|
|
continue;
|
|
}
|
|
|
|
// get sample depth:
|
|
float sampleOcc = 0.0;
|
|
#ifdef dIllumination
|
|
if (uTransparencyFlag == 1) {
|
|
#endif
|
|
float sampleDepth = getMappedDepth(offset.xy, selfCoords);
|
|
if (!isBackground(sampleDepth)) {
|
|
float sampleViewZ = screenSpaceToViewSpace(vec3(offset.xy, sampleDepth), uInvProjection).z;
|
|
sampleOcc = step(sampleViewPos.z + 0.025, sampleViewZ) * smootherstep(0.0, 1.0, uLevelRadius[l] / abs(selfViewPos.z - sampleViewZ)) * uLevelBias[l];
|
|
}
|
|
#ifdef dIllumination
|
|
}
|
|
#endif
|
|
#if defined(dIncludeTransparent)
|
|
vec2 sampleDepthWithAlpha = getMappedDepthTransparentWithAlpha(offset.xy, selfCoords);
|
|
if (!isBackground(sampleDepthWithAlpha.x)) {
|
|
float sampleViewZWithAlpha = screenSpaceToViewSpace(vec3(offset.xy, sampleDepthWithAlpha.x), uInvProjection).z;
|
|
sampleOcc = max(sampleOcc, step(sampleViewPos.z + 0.025, sampleViewZWithAlpha) * smootherstep(0.0, 1.0, uLevelRadius[l] / abs(selfViewPos.z - sampleViewZWithAlpha)) * uLevelBias[l] * sampleDepthWithAlpha.y);
|
|
}
|
|
#endif
|
|
|
|
levelOcclusion += sampleOcc;
|
|
}
|
|
levelOcclusion /= nSamples;
|
|
occlusion = max(occlusion, levelOcclusion);
|
|
}
|
|
#else
|
|
float nSamples = float(dNSamples);
|
|
for(int i = 0; i < dNSamples; i++) {
|
|
vec3 sampleViewPos = TBN * uSamples[i];
|
|
sampleViewPos = selfViewPos + sampleViewPos * uRadius;
|
|
|
|
vec4 offset = vec4(sampleViewPos, 1.0);
|
|
offset = uProjection * offset;
|
|
offset.xyz = (offset.xyz / offset.w) * 0.5 + 0.5;
|
|
if (isOutsideBounds(offset.xy)) {
|
|
nSamples -= 1.0;
|
|
continue;
|
|
}
|
|
|
|
float sampleOcc = 0.0;
|
|
#ifdef dIllumination
|
|
if (uTransparencyFlag == 1) {
|
|
#endif
|
|
// NOTE: using getMappedDepth here causes issues on some mobile devices
|
|
float sampleDepth = getDepth(offset.xy, 0);
|
|
if (!isBackground(sampleDepth)) {
|
|
float sampleViewZ = screenSpaceToViewSpace(vec3(offset.xy, sampleDepth), uInvProjection).z;
|
|
sampleOcc = step(sampleViewPos.z + 0.025, sampleViewZ) * smootherstep(0.0, 1.0, uRadius / abs(selfViewPos.z - sampleViewZ));
|
|
}
|
|
#ifdef dIllumination
|
|
}
|
|
#endif
|
|
#if defined(dIncludeTransparent)
|
|
vec2 sampleDepthWithAlpha = getDepthTransparentWithAlpha(offset.xy);
|
|
if (!isBackground(sampleDepthWithAlpha.x)) {
|
|
float sampleViewZWithAlpha = screenSpaceToViewSpace(vec3(offset.xy, sampleDepthWithAlpha.x), uInvProjection).z;
|
|
sampleOcc = max(sampleOcc, step(sampleViewPos.z + 0.025, sampleViewZWithAlpha) * smootherstep(0.0, 1.0, uRadius / abs(selfViewPos.z - sampleViewZWithAlpha)) * sampleDepthWithAlpha.y);
|
|
}
|
|
#endif
|
|
|
|
occlusion += sampleOcc;
|
|
}
|
|
|
|
occlusion /= nSamples;
|
|
#endif
|
|
occlusion = 1.0 - (uBias * occlusion);
|
|
|
|
vec2 packedOcclusion = packUnitIntervalToRG(clamp(occlusion, 0.01, 1.0));
|
|
|
|
gl_FragColor = vec4(packedOcclusion, selfPackedDepth);
|
|
}
|
|
`;var Hve=`
|
|
precision highp float;
|
|
precision highp int;
|
|
precision highp sampler2D;
|
|
|
|
uniform sampler2D tSsaoDepth;
|
|
uniform vec2 uTexSize;
|
|
uniform vec4 uBounds;
|
|
|
|
uniform float uKernel[dOcclusionKernelSize];
|
|
uniform float uBlurDepthBias;
|
|
|
|
uniform float uBlurDirectionX;
|
|
uniform float uBlurDirectionY;
|
|
|
|
uniform mat4 uInvProjection;
|
|
uniform float uNear;
|
|
uniform float uFar;
|
|
|
|
#include common
|
|
|
|
float getViewZ(const in float depth) {
|
|
#if dOrthographic == 1
|
|
return orthographicDepthToViewZ(depth, uNear, uFar);
|
|
#else
|
|
return perspectiveDepthToViewZ(depth, uNear, uFar);
|
|
#endif
|
|
}
|
|
|
|
bool isBackground(const in float depth) {
|
|
return depth == 1.0;
|
|
}
|
|
|
|
bool isNearClip(const in float depth) {
|
|
return depth == 0.0;
|
|
}
|
|
|
|
bool outsideBounds(const in vec2 p) {
|
|
return p.x < uBounds.x || p.y < uBounds.y || p.x > uBounds.z || p.y > uBounds.w;
|
|
}
|
|
|
|
float getPixelSize(const in vec2 coords, const in float depth) {
|
|
vec3 viewPos0 = screenSpaceToViewSpace(vec3(coords, depth), uInvProjection);
|
|
vec3 viewPos1 = screenSpaceToViewSpace(vec3(coords + vec2(1.0, 0.0) / uTexSize, depth), uInvProjection);
|
|
return distance(viewPos0, viewPos1);
|
|
}
|
|
|
|
void main(void) {
|
|
vec2 coords = gl_FragCoord.xy / uTexSize;
|
|
|
|
vec2 packedDepth = texture2D(tSsaoDepth, coords).zw;
|
|
|
|
if (outsideBounds(coords)) {
|
|
gl_FragColor = vec4(packUnitIntervalToRG(1.0), packedDepth);
|
|
return;
|
|
}
|
|
|
|
float selfDepth = unpackRGToUnitInterval(packedDepth);
|
|
// (if background and if second pass) or if near clip
|
|
if ((isBackground(selfDepth) && uBlurDirectionY != 0.0) || isNearClip(selfDepth)) {
|
|
gl_FragColor = vec4(packUnitIntervalToRG(1.0), packedDepth);
|
|
return;
|
|
}
|
|
|
|
float selfViewZ = getViewZ(selfDepth);
|
|
float pixelSize = getPixelSize(coords, selfDepth);
|
|
|
|
vec2 offset = vec2(uBlurDirectionX, uBlurDirectionY) / uTexSize;
|
|
|
|
float sum = 0.0;
|
|
float kernelSum = 0.0;
|
|
const int halfKernelSize = dOcclusionKernelSize / 2;
|
|
// only if kernelSize is odd
|
|
for (int i = -halfKernelSize; i <= halfKernelSize; i++) {
|
|
if (abs(float(i)) > 1.0 && abs(float(i)) * pixelSize > 0.8) continue;
|
|
|
|
vec2 sampleCoords = coords + float(i) * offset;
|
|
if (outsideBounds(sampleCoords)) {
|
|
continue;
|
|
}
|
|
|
|
vec4 sampleSsaoDepth = texture2D(tSsaoDepth, sampleCoords);
|
|
|
|
float sampleDepth = unpackRGToUnitInterval(sampleSsaoDepth.zw);
|
|
if (isBackground(sampleDepth) || isNearClip(sampleDepth)) {
|
|
continue;
|
|
}
|
|
|
|
float sampleViewZ = getViewZ(sampleDepth);
|
|
if (abs(selfViewZ - sampleViewZ) >= uBlurDepthBias) {
|
|
continue;
|
|
}
|
|
|
|
float kernel = uKernel[int(abs(float(i)))]; // abs is not defined for int in webgl1
|
|
float sampleValue = unpackRGToUnitInterval(sampleSsaoDepth.xy);
|
|
|
|
sum += kernel * sampleValue;
|
|
kernelSum += kernel;
|
|
}
|
|
gl_FragColor = vec4(packUnitIntervalToRG(sum / kernelSum), packedDepth);
|
|
}
|
|
`;var PH={samples:h.Numeric(32,{min:1,max:256,step:1}),multiScale:h.MappedStatic("off",{on:h.Group({levels:h.ObjectList({radius:h.Numeric(5,{min:0,max:20,step:.1},{description:"Final occlusion radius is 2^x"}),bias:h.Numeric(1,{min:0,max:3,step:.1})},e=>`${e.radius}, ${e.bias}`,{defaultValue:[{radius:2,bias:1},{radius:5,bias:1},{radius:8,bias:1},{radius:11,bias:1}]}),nearThreshold:h.Numeric(10,{min:0,max:50,step:1}),farThreshold:h.Numeric(1500,{min:0,max:1e4,step:100})}),off:h.Group({})},{cycle:!0}),radius:h.Numeric(5,{min:0,max:20,step:.1},{description:"Final occlusion radius is 2^x",hideIf:e=>e?.multiScale.name==="on"}),bias:h.Numeric(.8,{min:0,max:3,step:.1}),blurKernelSize:h.Numeric(15,{min:1,max:25,step:2}),blurDepthBias:h.Numeric(.5,{min:0,max:1,step:.01}),resolutionScale:h.Numeric(1,{min:.1,max:1,step:.05},{description:"Adjust resolution of occlusion calculation"}),color:h.Color(0),transparentThreshold:h.Numeric(.4,{min:0,max:1,step:.05})};function tpt(e,t,r){let n=e.length,{radius:o,bias:i}=r||{radius:new Array(n*3).fill(0),bias:new Array(n*3).fill(0)};e=e.slice().sort((a,A)=>a.radius-A.radius);for(let a=0;a<n;++a){let A=e[a];o[a]=Math.pow(2,A.radius)*t,i[a]=A.bias}return{count:n,radius:o,bias:i}}var oB=class e{constructor(t,r,n,o,i,a){this.webgl=t;this.invProjection=Y.identity();this.levelsCameraScale=-1;let{textureFloatLinear:A}=t.extensions;this.depthTextureOpaque=i,this.depthTextureTransparent=a,this.nSamples=1,this.blurKernelSize=1,this.ssaoScale=this.calcSsaoScale(1),this.texSize=[r,n],this.levels=[],this.framebuffer=t.resources.framebuffer(),this.blurFirstPassFramebuffer=t.resources.framebuffer(),this.blurSecondPassFramebuffer=t.resources.framebuffer();let s=Math.floor(r*this.ssaoScale),c=Math.floor(n*this.ssaoScale),l=Math.max(1,Math.floor(s*.5)),u=Math.max(1,Math.floor(c*.5)),g=Math.max(1,Math.floor(s*.25)),m=Math.max(1,Math.floor(c*.25)),p=A?"linear":"nearest";this.downsampledDepthTargetOpaque=o?t.createRenderTarget(s,c,!1,"uint8","linear","rgba"):t.createRenderTarget(s,c,!1,"float32",p,t.isWebGL2?"alpha":"rgba"),this.downsampleDepthRenderableOpaque=id(t,i);let d=this.getDepthTexture();this.depthHalfTargetOpaque=o?t.createRenderTarget(l,u,!1,"uint8","linear","rgba"):t.createRenderTarget(l,u,!1,"float32",p,t.isWebGL2?"alpha":"rgba"),this.depthHalfRenderableOpaque=id(t,d),this.depthQuarterTargetOpaque=o?t.createRenderTarget(g,m,!1,"uint8","linear","rgba"):t.createRenderTarget(g,m,!1,"float32",p,t.isWebGL2?"alpha":"rgba"),this.depthQuarterRenderableOpaque=id(t,this.depthHalfTargetOpaque.texture),this.downsampledDepthTargetTransparent=t.createRenderTarget(s,c,!1,"uint8","linear","rgba"),this.downsampleDepthRenderableTransparent=id(t,a);let f=this.getTransparentDepthTexture();this.depthHalfTargetTransparent=t.createRenderTarget(l,u,!1,"uint8","linear","rgba"),this.depthHalfRenderableTransparent=id(t,f),this.depthQuarterTargetTransparent=t.createRenderTarget(g,m,!1,"uint8","linear","rgba"),this.depthQuarterRenderableTransparent=id(t,this.depthHalfTargetTransparent.texture),this.ssaoDepthTexture=t.resources.texture("image-uint8","rgba","ubyte","linear"),this.ssaoDepthTexture.define(s,c),this.ssaoDepthTexture.attachFramebuffer(this.framebuffer,"color0"),this.ssaoDepthTransparentTexture=t.resources.texture("image-uint8","rgba","ubyte","linear"),this.ssaoDepthTransparentTexture.define(s,c),this.depthBlurProxyTexture=t.resources.texture("image-uint8","rgba","ubyte","linear"),this.depthBlurProxyTexture.define(s,c),this.depthBlurProxyTexture.attachFramebuffer(this.blurFirstPassFramebuffer,"color0"),this.renderable=npt(t,d,this.depthHalfTargetOpaque.texture,this.depthQuarterTargetOpaque.texture,f,this.depthHalfTargetTransparent.texture,this.depthQuarterTargetTransparent.texture),this.blurFirstPassRenderable=Vve(t,this.ssaoDepthTransparentTexture,"horizontal"),this.blurSecondPassRenderable=Vve(t,this.depthBlurProxyTexture,"vertical")}static isEnabled(t){return t.enabled&&t.occlusion.name!=="off"}static isTransparentEnabled(t,r){return t.opacityAverage<1&&t.transparencyMin<r.transparentThreshold}calcSsaoScale(t){return Math.min(1,1/this.webgl.pixelRatio)*t}getDepthTexture(){return this.ssaoScale===1?this.depthTextureOpaque:this.downsampledDepthTargetOpaque.texture}getTransparentDepthTexture(){return this.ssaoScale===1?this.depthTextureTransparent:this.downsampledDepthTargetTransparent.texture}getByteCount(){return this.downsampledDepthTargetOpaque.getByteCount()+this.depthHalfTargetOpaque.getByteCount()+this.depthQuarterTargetOpaque.getByteCount()+this.downsampledDepthTargetTransparent.getByteCount()+this.depthHalfTargetTransparent.getByteCount()+this.depthQuarterTargetTransparent.getByteCount()+this.ssaoDepthTexture.getByteCount()+this.ssaoDepthTransparentTexture.getByteCount()+this.depthBlurProxyTexture.getByteCount()}setSize(t,r){let[n,o]=this.texSize,i=this.calcSsaoScale(1);if(t!==n||r!==o||this.ssaoScale!==i){this.texSize.splice(0,2,t,r);let a=Math.floor(t*this.ssaoScale),A=Math.floor(r*this.ssaoScale);this.ssaoDepthTexture.define(a,A),this.ssaoDepthTransparentTexture.define(a,A),this.depthBlurProxyTexture.define(a,A);let s=Math.max(1,Math.floor(a*.5)),c=Math.max(1,Math.floor(A*.5)),l=Math.max(1,Math.floor(a*.25)),u=Math.max(1,Math.floor(A*.25));this.downsampledDepthTargetOpaque.setSize(a,A),this.depthHalfTargetOpaque.setSize(s,c),this.depthQuarterTargetOpaque.setSize(l,u),D.update(this.downsampleDepthRenderableOpaque.values.uTexSize,Le.set(this.downsampleDepthRenderableOpaque.values.uTexSize.ref.value,a,A)),D.update(this.depthHalfRenderableOpaque.values.uTexSize,Le.set(this.depthHalfRenderableOpaque.values.uTexSize.ref.value,s,c)),D.update(this.depthQuarterRenderableOpaque.values.uTexSize,Le.set(this.depthQuarterRenderableOpaque.values.uTexSize.ref.value,l,u)),this.downsampledDepthTargetTransparent.setSize(a,A),this.depthHalfTargetTransparent.setSize(s,c),this.depthQuarterTargetTransparent.setSize(l,u),D.update(this.downsampleDepthRenderableTransparent.values.uTexSize,Le.set(this.downsampleDepthRenderableTransparent.values.uTexSize.ref.value,a,A)),D.update(this.depthHalfRenderableTransparent.values.uTexSize,Le.set(this.depthHalfRenderableTransparent.values.uTexSize.ref.value,s,c)),D.update(this.depthQuarterRenderableTransparent.values.uTexSize,Le.set(this.depthQuarterRenderableTransparent.values.uTexSize.ref.value,l,u)),D.update(this.renderable.values.uTexSize,Le.set(this.renderable.values.uTexSize.ref.value,a,A)),D.update(this.blurFirstPassRenderable.values.uTexSize,Le.set(this.blurFirstPassRenderable.values.uTexSize.ref.value,a,A)),D.update(this.blurSecondPassRenderable.values.uTexSize,Le.set(this.blurSecondPassRenderable.values.uTexSize.ref.value,a,A));let g=this.getDepthTexture(),m=this.getTransparentDepthTexture();D.update(this.depthHalfRenderableOpaque.values.tColor,g),D.update(this.depthHalfRenderableTransparent.values.tColor,m),D.update(this.renderable.values.tDepth,g),D.update(this.renderable.values.tDepthTransparent,m),this.depthHalfRenderableOpaque.update(),this.depthHalfRenderableTransparent.update(),this.renderable.update()}}reset(){this.ssaoDepthTexture.attachFramebuffer(this.framebuffer,"color0"),this.depthBlurProxyTexture.attachFramebuffer(this.blurFirstPassFramebuffer,"color0")}update(t,r,n,o=!1){let i=!1,a=!1,A=!1,s=t.state.mode==="orthographic"?1:0,c=Y.invert(this.invProjection,t.projection),[l,u]=this.texSize,g=t.viewport;D.update(this.renderable.values.uProjection,t.projection),D.update(this.renderable.values.uInvProjection,c);let m=this.renderable.values.uBounds,p=this.ssaoScale;lr.set(m.ref.value,Math.floor(g.x*p)/(l*p),Math.floor(g.y*p)/(u*p),Math.ceil((g.x+g.width)*p)/(l*p),Math.ceil((g.y+g.height)*p)/(u*p)),D.update(m,m.ref.value),D.update(this.blurFirstPassRenderable.values.uBounds,m.ref.value),D.update(this.blurSecondPassRenderable.values.uBounds,m.ref.value),D.updateIfChanged(this.blurFirstPassRenderable.values.uNear,t.near),D.updateIfChanged(this.blurSecondPassRenderable.values.uNear,t.near),D.updateIfChanged(this.blurFirstPassRenderable.values.uFar,t.far),D.updateIfChanged(this.blurSecondPassRenderable.values.uFar,t.far),D.update(this.blurFirstPassRenderable.values.uInvProjection,c),D.update(this.blurSecondPassRenderable.values.uInvProjection,c),D.update(this.blurFirstPassRenderable.values.uBlurDepthBias,n.blurDepthBias*t.scale),D.update(this.blurSecondPassRenderable.values.uBlurDepthBias,n.blurDepthBias*t.scale),this.blurFirstPassRenderable.values.dOrthographic.ref.value!==s&&(a=!0,D.update(this.blurFirstPassRenderable.values.dOrthographic,s),D.update(this.blurSecondPassRenderable.values.dOrthographic,s));let d=e.isTransparentEnabled(r,n);this.renderable.values.dIncludeTransparent.ref.value!==d&&(i=!0,D.update(this.renderable.values.dIncludeTransparent,d)),this.renderable.values.dIllumination.ref.value!==o&&(i=!0,D.update(this.renderable.values.dIllumination,o)),this.nSamples!==n.samples&&(i=!0,this.nSamples=n.samples,D.update(this.renderable.values.uSamples,Ove(this.nSamples)),D.updateIfChanged(this.renderable.values.dNSamples,this.nSamples));let f=n.multiScale.name==="on";if(this.renderable.values.dMultiScale.ref.value!==f&&(i=!0,D.update(this.renderable.values.dMultiScale,f)),n.multiScale.name==="on"){let C=n.multiScale.params;if(this.levelsCameraScale!==t.scale||!ka(this.levels,C.levels)){i=!0,this.levelsCameraScale=t.scale,this.levels=C.levels;let y=tpt(C.levels,t.scale);D.updateIfChanged(this.renderable.values.dLevels,y.count),D.update(this.renderable.values.uLevelRadius,y.radius),D.update(this.renderable.values.uLevelBias,y.bias)}D.updateIfChanged(this.renderable.values.uNearThreshold,C.nearThreshold),D.updateIfChanged(this.renderable.values.uFarThreshold,C.farThreshold)}else D.updateIfChanged(this.renderable.values.uRadius,Math.pow(2,n.radius)*t.scale);if(D.updateIfChanged(this.renderable.values.uBias,n.bias),this.blurKernelSize!==n.blurKernelSize){a=!0,this.blurKernelSize=n.blurKernelSize;let C=Yve(this.blurKernelSize);D.update(this.blurFirstPassRenderable.values.uKernel,C),D.update(this.blurSecondPassRenderable.values.uKernel,C),D.update(this.blurFirstPassRenderable.values.dOcclusionKernelSize,this.blurKernelSize),D.update(this.blurSecondPassRenderable.values.dOcclusionKernelSize,this.blurKernelSize)}let I=this.calcSsaoScale(n.resolutionScale);if(this.ssaoScale!==I){i=!0,A=!0,this.ssaoScale=I;let C=Math.floor(l*this.ssaoScale),y=Math.floor(u*this.ssaoScale);this.ssaoDepthTexture.define(C,y),this.ssaoDepthTransparentTexture.define(C,y),this.depthBlurProxyTexture.define(C,y);let Q=Math.floor(C*.5),E=Math.floor(y*.5),b=Math.floor(C*.25),x=Math.floor(y*.25);this.downsampledDepthTargetOpaque.setSize(C,y),this.depthHalfTargetOpaque.setSize(Q,E),this.depthQuarterTargetOpaque.setSize(b,x);let S=this.getDepthTexture();D.update(this.depthHalfRenderableOpaque.values.tColor,S),D.update(this.renderable.values.tDepth,S),D.update(this.renderable.values.tDepthHalf,this.depthHalfTargetOpaque.texture),D.update(this.renderable.values.tDepthQuarter,this.depthQuarterTargetOpaque.texture),D.update(this.downsampleDepthRenderableOpaque.values.uTexSize,Le.set(this.downsampleDepthRenderableOpaque.values.uTexSize.ref.value,C,y)),D.update(this.depthHalfRenderableOpaque.values.uTexSize,Le.set(this.depthHalfRenderableOpaque.values.uTexSize.ref.value,Q,E)),D.update(this.depthQuarterRenderableOpaque.values.uTexSize,Le.set(this.depthQuarterRenderableOpaque.values.uTexSize.ref.value,b,x)),this.downsampledDepthTargetTransparent.setSize(C,y),this.depthHalfTargetTransparent.setSize(Q,E),this.depthQuarterTargetTransparent.setSize(b,x);let w=this.getTransparentDepthTexture();D.update(this.depthHalfRenderableTransparent.values.tColor,w),D.update(this.renderable.values.tDepthTransparent,w),D.update(this.renderable.values.tDepthHalfTransparent,this.depthHalfTargetTransparent.texture),D.update(this.renderable.values.tDepthQuarterTransparent,this.depthQuarterTargetTransparent.texture),D.update(this.downsampleDepthRenderableTransparent.values.uTexSize,Le.set(this.downsampleDepthRenderableTransparent.values.uTexSize.ref.value,C,y)),D.update(this.depthHalfRenderableTransparent.values.uTexSize,Le.set(this.depthHalfRenderableTransparent.values.uTexSize.ref.value,Q,E)),D.update(this.depthQuarterRenderableTransparent.values.uTexSize,Le.set(this.depthQuarterRenderableTransparent.values.uTexSize.ref.value,b,x)),D.update(this.renderable.values.uTexSize,Le.set(this.renderable.values.uTexSize.ref.value,C,y)),D.update(this.blurFirstPassRenderable.values.uTexSize,Le.set(this.blurFirstPassRenderable.values.uTexSize.ref.value,C,y)),D.update(this.blurSecondPassRenderable.values.uTexSize,Le.set(this.blurSecondPassRenderable.values.uTexSize.ref.value,C,y))}i&&this.renderable.update(),a&&(this.blurFirstPassRenderable.update(),this.blurSecondPassRenderable.update()),A&&(this.depthHalfRenderableOpaque.update(),this.depthHalfRenderableTransparent.update())}render(t){at&&this.webgl.timer.mark("SSAO.render");let{state:r}=this.webgl,{x:n,y:o,width:i,height:a}=t.viewport,A=this.renderable.values.dIncludeTransparent.ref.value,s=this.renderable.values.dMultiScale.ref.value,c=Math.floor(n*this.ssaoScale),l=Math.floor(o*this.ssaoScale),u=Math.ceil(i*this.ssaoScale),g=Math.ceil(a*this.ssaoScale);if(r.viewport(c,l,u,g),r.scissor(c,l,u,g),this.ssaoScale<1&&(at&&this.webgl.timer.mark("SSAO.downsample"),this.downsampledDepthTargetOpaque.bind(),this.downsampleDepthRenderableOpaque.render(),A&&(this.downsampledDepthTargetTransparent.bind(),this.downsampleDepthRenderableTransparent.render()),at&&this.webgl.timer.markEnd("SSAO.downsample")),s){let m=Math.floor(c*.5),p=Math.floor(l*.5),d=Math.ceil(u*.5),f=Math.ceil(g*.5);r.viewport(m,p,d,f),r.scissor(m,p,d,f),at&&this.webgl.timer.mark("SSAO.half"),this.depthHalfTargetOpaque.bind(),this.depthHalfRenderableOpaque.render(),A&&(this.depthHalfTargetTransparent.bind(),this.depthHalfRenderableTransparent.render()),at&&this.webgl.timer.markEnd("SSAO.half");let I=Math.floor(c*.25),C=Math.floor(l*.25),y=Math.ceil(u*.25),Q=Math.ceil(g*.25);r.viewport(I,C,y,Q),r.scissor(I,C,y,Q),at&&this.webgl.timer.mark("SSAO.quarter"),this.depthQuarterTargetOpaque.bind(),this.depthQuarterRenderableOpaque.render(),A&&(this.depthQuarterTargetTransparent.bind(),this.depthQuarterRenderableTransparent.render()),at&&this.webgl.timer.markEnd("SSAO.quarter"),r.viewport(c,l,u,g),r.scissor(c,l,u,g)}at&&this.webgl.timer.mark("SSAO.opaque"),this.ssaoDepthTexture.attachFramebuffer(this.framebuffer,"color0"),D.update(this.renderable.values.uTransparencyFlag,0),this.framebuffer.bind(),this.renderable.render(),at&&this.webgl.timer.markEnd("SSAO.opaque"),at&&this.webgl.timer.mark("SSAO.blurOpaque"),D.update(this.blurFirstPassRenderable.values.tSsaoDepth,this.ssaoDepthTexture),this.blurFirstPassRenderable.update(),this.blurFirstPassFramebuffer.bind(),this.blurFirstPassRenderable.render(),this.ssaoDepthTexture.attachFramebuffer(this.blurSecondPassFramebuffer,"color0"),this.blurSecondPassFramebuffer.bind(),this.blurSecondPassRenderable.render(),at&&this.webgl.timer.markEnd("SSAO.blurOpaque"),A&&(at&&this.webgl.timer.mark("SSAO.transparent "),this.ssaoDepthTransparentTexture.attachFramebuffer(this.framebuffer,"color0"),D.update(this.renderable.values.uTransparencyFlag,1),this.framebuffer.bind(),this.renderable.render(),at&&this.webgl.timer.markEnd("SSAO.transparent "),at&&this.webgl.timer.mark("SSAO.blurTransparent "),D.update(this.blurFirstPassRenderable.values.tSsaoDepth,this.ssaoDepthTransparentTexture),this.blurFirstPassRenderable.update(),this.blurFirstPassFramebuffer.bind(),this.blurFirstPassRenderable.render(),this.ssaoDepthTransparentTexture.attachFramebuffer(this.blurSecondPassFramebuffer,"color0"),this.blurSecondPassFramebuffer.bind(),this.blurSecondPassRenderable.render(),at&&this.webgl.timer.markEnd("SSAO.blurTransparent ")),at&&this.webgl.timer.markEnd("SSAO.render")}},rpt={...Wn,tDepth:Ft("texture","rgba","ubyte","linear"),tDepthHalf:Ft("texture","rgba","ubyte","linear"),tDepthQuarter:Ft("texture","rgba","ubyte","linear"),dIllumination:bt("boolean"),uTransparencyFlag:Re("i"),dIncludeTransparent:bt("boolean"),tDepthTransparent:Ft("texture","rgba","ubyte","linear"),tDepthHalfTransparent:Ft("texture","rgba","ubyte","linear"),tDepthQuarterTransparent:Ft("texture","rgba","ubyte","linear"),uSamples:Re("v3[]"),dNSamples:bt("number"),uProjection:Re("m4"),uInvProjection:Re("m4"),uBounds:Re("v4"),uTexSize:Re("v2"),uRadius:Re("f"),uBias:Re("f"),dMultiScale:bt("boolean"),dLevels:bt("number"),uLevelRadius:Re("f[]"),uLevelBias:Re("f[]"),uNearThreshold:Re("f"),uFarThreshold:Re("f")};function npt(e,t,r,n,o,i,a){let A={...Xn,tDepth:D.create(t),tDepthHalf:D.create(r),tDepthQuarter:D.create(n),dIllumination:D.create(!1),dIncludeTransparent:D.create(!0),uTransparencyFlag:D.create(0),tDepthTransparent:D.create(o),tDepthHalfTransparent:D.create(i),tDepthQuarterTransparent:D.create(a),uSamples:D.create(Ove(32)),dNSamples:D.create(32),uProjection:D.create(Y.identity()),uInvProjection:D.create(Y.identity()),uBounds:D.create(lr()),uTexSize:D.create(Le.create(e.gl.drawingBufferWidth,e.gl.drawingBufferHeight)),uRadius:D.create(Math.pow(2,5)),uBias:D.create(.8),dMultiScale:D.create(!1),dLevels:D.create(3),uLevelRadius:D.create([Math.pow(2,2),Math.pow(2,5),Math.pow(2,8)]),uLevelBias:D.create([.8,.8,.8]),uNearThreshold:D.create(10),uFarThreshold:D.create(1500)},s={...rpt},c=Cn("ssao",mo,kve),l=Un(e,"triangles",c,s,A);return Ln(l,A)}var opt={...Wn,tSsaoDepth:Ft("texture","rgba","ubyte","nearest"),uTexSize:Re("v2"),uKernel:Re("f[]"),dOcclusionKernelSize:bt("number"),uBlurDepthBias:Re("f"),uBlurDirectionX:Re("f"),uBlurDirectionY:Re("f"),uInvProjection:Re("m4"),uNear:Re("f"),uFar:Re("f"),uBounds:Re("v4"),dOrthographic:bt("number")};function Vve(e,t,r){let n={...Xn,tSsaoDepth:D.create(t),uTexSize:D.create(Le.create(t.getWidth(),t.getHeight())),uKernel:D.create(Yve(15)),dOcclusionKernelSize:D.create(15),uBlurDepthBias:D.create(.5),uBlurDirectionX:D.create(r==="horizontal"?1:0),uBlurDirectionY:D.create(r==="vertical"?1:0),uInvProjection:D.create(Y.identity()),uNear:D.create(0),uFar:D.create(1e4),uBounds:D.create(lr()),dOrthographic:D.create(0)},o={...opt},i=Cn("ssao_blur",mo,Hve),a=Un(e,"triangles",i,o,n);return Ln(a,n)}function Yve(e){let t=e/3,r=Math.floor((e+1)/2),n=[];for(let o=0;o<r;o++)n.push(1/(Math.sqrt(2*Math.PI)*t)*Math.exp(-o*o/(2*t*t)));return n}var LH=new Yy;function _ve(){let e=B();for(;;){let t=LH.float()*2-1,r=LH.float()*2-1;if(t*t+r*r<1){let n=2*Math.sqrt(1-t*t-r*r)*(LH.float()<.5?-1:1);B.set(e,t,r,n),B.normalize(e,e),B.scale(e,e,LH.float());break}}return e[2]<0&&(e[2]=-e[2]),e}function ipt(e,t){if(t.length>=e)return t;t.length===0&&t.push(_ve());let r=Math.max(10,Math.min(30,Math.floor(e/10)));for(let n=t.length;n<e;n++){let o,i=-1;for(let a=0;a<r;a++){let A=_ve(),s=1/0;for(let c of t){let l=B.distance(A,c);s=Math.min(s,l)}s>i&&(i=s,o=A)}t.push(o)}return t}var TH=[];function apt(e){return TH.length<e&&(TH=ipt(e,TH)),TH}function Ove(e){let t=apt(e),r=[];for(let n=0;n<e;n++){let o=(n*n+2*n+1)/(e*e);o=.1+o*(1-.1),r.push(t[n][0]*o),r.push(t[n][1]*o),r.push(t[n][2]*o)}return r}var Apt={...Wn,tSsaoDepth:Ft("texture","rgba","ubyte","nearest"),tSsaoDepthTransparent:Ft("texture","rgba","ubyte","nearest"),tColor:Ft("texture","rgba","ubyte","nearest"),tTransparentColor:Ft("texture","rgba","ubyte","nearest"),dBlendTransparency:bt("boolean"),tDepthOpaque:Ft("texture","rgba","ubyte","nearest"),tDepthTransparent:Ft("texture","rgba","ubyte","nearest"),tShadows:Ft("texture","rgba","ubyte","nearest"),tOutlines:Ft("texture","rgba","ubyte","nearest"),tBloom:Ft("texture","rgba","ubyte","linear"),dBloomEnable:bt("boolean"),uTexSize:Re("v2"),dOrthographic:bt("number"),uNear:Re("f"),uFar:Re("f"),uFogNear:Re("f"),uFogFar:Re("f"),uFogColor:Re("v3"),uOutlineColor:Re("v3"),uOcclusionColor:Re("v3"),uTransparentBackground:Re("b"),dOcclusionEnable:bt("boolean"),dOcclusionSingleDepth:bt("boolean"),dOcclusionIncludeOpacity:bt("boolean"),dOcclusionIncludeTransparency:bt("boolean"),uOcclusionOffset:Re("v2"),dShadowEnable:bt("boolean"),dOutlineEnable:bt("boolean"),dOutlineScale:bt("number"),dTransparentOutline:bt("boolean")};function spt(e,t,r,n,o,i,a,A,s,c,l){let u={...Xn,tSsaoDepth:D.create(A),tSsaoDepthTransparent:D.create(s),tColor:D.create(t),tTransparentColor:D.create(r),dBlendTransparency:D.create(!0),tDepthOpaque:D.create(n),tDepthTransparent:D.create(o),tShadows:D.create(i),tOutlines:D.create(a),tBloom:D.create(c),dBloomEnable:D.create(!1),uTexSize:D.create(Le.create(t.getWidth(),t.getHeight())),dOrthographic:D.create(0),uNear:D.create(1),uFar:D.create(1e4),uFogNear:D.create(1e4),uFogFar:D.create(1e4),uFogColor:D.create(B.create(1,1,1)),uOutlineColor:D.create(B.create(0,0,0)),uOcclusionColor:D.create(B.create(0,0,0)),uTransparentBackground:D.create(!1),dOcclusionEnable:D.create(!0),dOcclusionSingleDepth:D.create(!1),dOcclusionIncludeOpacity:D.create(!0),dOcclusionIncludeTransparency:D.create(!1),uOcclusionOffset:D.create(Le.create(0,0)),dShadowEnable:D.create(!1),dOutlineEnable:D.create(!1),dOutlineScale:D.create(1),dTransparentOutline:D.create(l)},g={...Apt},m=Cn("postprocessing",mo,dve),p=Un(e,"triangles",m,g,u);return Ln(p,u)}var Hv={enabled:h.Boolean(!0),occlusion:h.MappedStatic("on",{on:h.Group(PH),off:h.Group({})},{cycle:!0,description:"Darken occluded crevices with the ambient occlusion effect",hideIf:e=>e.enabled===!1}),shadow:h.MappedStatic("off",{on:h.Group(UH),off:h.Group({})},{cycle:!0,description:"Simplistic shadows",hideIf:e=>e.enabled===!1}),outline:h.MappedStatic("off",{on:h.Group(RH),off:h.Group({})},{cycle:!0,description:"Draw outline around 3D objects",hideIf:e=>e.enabled===!1}),dof:h.MappedStatic("off",{on:h.Group(FH),off:h.Group({})},{cycle:!0,description:"DOF",hideIf:e=>e.enabled===!1}),antialiasing:h.MappedStatic("smaa",{fxaa:h.Group(fve),smaa:h.Group(Eve),off:h.Group({})},{options:[["fxaa","FXAA"],["smaa","SMAA"],["off","Off"]],description:"Smooth pixel edges",hideIf:e=>e.enabled===!1}),sharpening:h.MappedStatic("off",{on:h.Group(Uve),off:h.Group({})},{cycle:!0,description:"Contrast Adaptive Sharpening",hideIf:e=>e.enabled===!1}),background:h.Group(DH,{isFlat:!0,hideIf:e=>e.enabled===!1}),bloom:h.MappedStatic("on",{on:h.Group(wH),off:h.Group({})},{cycle:!0,description:"Bloom",hideIf:e=>e.enabled===!1})},ms=class e{constructor(t,r,n){this.webgl=t;this.drawPass=n;this.occlusionOffset=[0,0];this.transparentBackground=!1;let{colorTarget:o,transparentColorTarget:i,depthTextureOpaque:a,depthTextureTransparent:A,packedDepth:s}=n,c=o.getWidth(),l=o.getHeight();this.target=t.createRenderTarget(c,l,!1,"uint8","linear"),this.ssao=new oB(t,c,l,s,a,A),this.shadow=new kv(t,c,l,a),this.outline=new OI(t,c,l,A,a),this.bloom=new Lm(t,c,l),this.renderable=spt(t,o.texture,i.texture,a,A,this.shadow.target.texture,this.outline.target.texture,this.ssao.ssaoDepthTexture,this.ssao.ssaoDepthTransparentTexture,this.bloom.compositeTarget.texture,!0),this.background=new SH(t,r,c,l)}static isEnabled(t){return t.enabled&&(oB.isEnabled(t)||kv.isEnabled(t)||OI.isEnabled(t)||t.background.variant.name!=="off"||Lm.isEnabled(t))}static isTransparentDepthRequired(t,r){return r.enabled&&(Pp.isEnabled(r)||OI.isEnabled(r)&&e.isTransparentOutlineEnabled(r)||oB.isEnabled(r)&&e.isTransparentSsaoEnabled(t,r)||Lm.isEnabled(r))&&t.opacityAverage<1}static isTransparentOutlineEnabled(t){return t.enabled&&OI.isEnabled(t)&&(t.outline.params.includeTransparent??!0)}static isTransparentSsaoEnabled(t,r){return r.enabled&&oB.isEnabled(r)&&oB.isTransparentEnabled(t,r.occlusion.params)}static isSsaoEnabled(t){return t.enabled&&oB.isEnabled(t)}getByteCount(){return this.target.getByteCount()+this.ssao.getByteCount()+this.shadow.getByteCount()+this.outline.getByteCount()+this.bloom.getByteCount()}setSize(t,r){let[n,o]=this.renderable.values.uTexSize.ref.value;(t!==n||r!==o)&&(this.target.setSize(t,r),D.update(this.renderable.values.uTexSize,Le.set(this.renderable.values.uTexSize.ref.value,t,r))),this.ssao.setSize(t,r),this.shadow.setSize(t,r),this.outline.setSize(t,r),this.bloom.setSize(t,r),this.background.setSize(t,r)}reset(){this.ssao.reset()}updateState(t,r,n,o,i,a,A){let s=!1,c=t.state.mode==="orthographic"?1:0,l=OI.isEnabled(i),u=kv.isEnabled(i),g=oB.isEnabled(i);if(g){let f=i.occlusion.params;this.ssao.update(t,r,f);let I=oB.isTransparentEnabled(r,f);this.renderable.values.dOcclusionIncludeTransparency.ref.value!==I&&(s=!0,D.update(this.renderable.values.dOcclusionIncludeTransparency,I)),D.update(this.renderable.values.uOcclusionColor,ke.toVec3Normalized(this.renderable.values.uOcclusionColor.ref.value,f.color))}if(u&&this.shadow.update(t,a,A,i.shadow.params),l){let f=i.outline.params,{transparentOutline:I,outlineScale:C}=this.outline.update(t,f,this.drawPass.depthTextureTransparent,this.drawPass.depthTextureOpaque);D.update(this.renderable.values.uOutlineColor,ke.toVec3Normalized(this.renderable.values.uOutlineColor.ref.value,f.color)),this.renderable.values.dOutlineScale.ref.value!==C&&(s=!0,D.update(this.renderable.values.dOutlineScale,C)),this.renderable.values.dTransparentOutline.ref.value!==I&&(s=!0,D.update(this.renderable.values.dTransparentOutline,I))}D.updateIfChanged(this.renderable.values.uFar,t.far),D.updateIfChanged(this.renderable.values.uNear,t.near),D.updateIfChanged(this.renderable.values.uFogFar,t.fogFar),D.updateIfChanged(this.renderable.values.uFogNear,t.fogNear),D.update(this.renderable.values.uFogColor,ke.toVec3Normalized(this.renderable.values.uFogColor.ref.value,o)),D.updateIfChanged(this.renderable.values.uTransparentBackground,n),this.renderable.values.dOrthographic.ref.value!==c&&(s=!0,D.update(this.renderable.values.dOrthographic,c)),this.renderable.values.dOutlineEnable.ref.value!==l&&(s=!0,D.update(this.renderable.values.dOutlineEnable,l)),this.renderable.values.dShadowEnable.ref.value!==u&&(s=!0,D.update(this.renderable.values.dShadowEnable,u)),this.renderable.values.dOcclusionEnable.ref.value!==g&&(s=!0,D.update(this.renderable.values.dOcclusionEnable,g));let m=r.opacityAverage<1;this.renderable.values.dBlendTransparency.ref.value!==m&&(s=!0,D.update(this.renderable.values.dBlendTransparency,m)),s&&this.renderable.update();let{gl:p,state:d}=this.webgl;d.enable(p.SCISSOR_TEST),d.disable(p.BLEND),d.disable(p.DEPTH_TEST),d.depthMask(!1)}setOcclusionOffset(t,r){this.occlusionOffset[0]=t,this.occlusionOffset[1]=r,D.update(this.renderable.values.uOcclusionOffset,Le.set(this.renderable.values.uOcclusionOffset.ref.value,t,r))}setTransparentBackground(t){this.transparentBackground=t}render(t,r,n,o,i,a,A,s,c=!1){at&&this.webgl.timer.mark("PostprocessingPass.render"),this.updateState(t,r,o,i,a,A,s),this.renderable.values.dBloomEnable.ref.value!==c&&(D.update(this.renderable.values.dBloomEnable,c),this.renderable.update());let l=this.background.isEnabled(a)||c&&!this.transparentBackground,{gl:u,state:g}=this.webgl,{x:m,y:p,width:d,height:f}=t.viewport;a.occlusion.name==="on"&&this.occlusionOffset[0]===0&&this.occlusionOffset[1]===0&&this.ssao.render(t),g.viewport(m,p,d,f),g.scissor(m,p,d,f),a.outline.name==="on"&&this.outline.render(),a.shadow.name==="on"&&this.shadow.render(),n?this.webgl.bindDrawingBuffer():this.target.bind(),this.background.update(t,a.background),this.background.clear(a.background,this.transparentBackground,i),this.background.render(a.background),l&&(g.enable(u.BLEND),g.blendFuncSeparate(u.ONE,u.ONE_MINUS_SRC_ALPHA,u.ONE,u.ONE_MINUS_SRC_ALPHA)),this.renderable.render(),at&&this.webgl.timer.markEnd("PostprocessingPass.render")}},JI=class{static isEnabled(t){return t.enabled&&(t.antialiasing.name!=="off"||t.sharpening.name!=="off")}constructor(t,r,n){this.target=t.createRenderTarget(r,n,!1),this.internalTarget=t.createRenderTarget(r,n,!1),this.fxaa=new bH(t,this.target.texture),this.smaa=new xH(t,this.target.texture),this.cas=new vH(t,this.target.texture)}getByteCount(){return this.target.getByteCount()+this.internalTarget.getByteCount()+this.smaa.getByteCount()}setSize(t,r){let n=this.target.texture.getWidth(),o=this.target.texture.getHeight();(t!==n||r!==o)&&(this.target.setSize(t,r),this.internalTarget.setSize(t,r),this.fxaa.setSize(t,r),this.smaa.supported&&this.smaa.setSize(t,r),this.cas.setSize(t,r))}_renderFxaa(t,r,n,o){o.antialiasing.name==="fxaa"&&(this.fxaa.update(r,o.antialiasing.params),this.fxaa.render(t.viewport,n))}_renderSmaa(t,r,n,o){o.antialiasing.name==="smaa"&&(this.smaa.update(r,o.antialiasing.params),this.smaa.render(t.viewport,n))}_renderAntialiasing(t,r,n,o){o.antialiasing.name==="fxaa"?this._renderFxaa(t,r,n,o):o.antialiasing.name==="smaa"&&this._renderSmaa(t,r,n,o)}_renderCas(t,r,n,o){o.sharpening.name==="on"&&(o.antialiasing.name!=="off"&&(r=this.internalTarget.texture),this.cas.update(r,o.sharpening.params),this.cas.render(t.viewport,n))}render(t,r,n,o){if(o.antialiasing.name==="off"&&o.sharpening.name==="off")return;if(o.antialiasing.name==="smaa"&&!this.smaa.supported){console.error('SMAA not supported, missing "HTMLImageElement"');return}let i=n===!0?void 0:n===!1?this.target:n;o.sharpening.name==="off"?this._renderAntialiasing(t,r,i,o):o.antialiasing.name==="off"?this._renderCas(t,r,i,o):(this._renderAntialiasing(t,r,this.internalTarget,o),this._renderCas(t,r,i,o))}};var GH=`
|
|
precision highp float;
|
|
precision highp sampler2D;
|
|
|
|
uniform sampler2D tColor;
|
|
uniform vec2 uTexSize;
|
|
uniform float uWeight;
|
|
|
|
void main() {
|
|
vec2 coords = gl_FragCoord.xy / uTexSize;
|
|
gl_FragColor = texture2D(tColor, coords) * uWeight;
|
|
}
|
|
`;var cpt={...Wn,tColor:Ft("texture","rgba","ubyte","nearest"),uTexSize:Re("v2"),uWeight:Re("f")},lpt=Cn("compose",mo,GH);function upt(e,t){let r={...Xn,tColor:D.create(t),uTexSize:D.create(Le.create(t.getWidth(),t.getHeight())),uWeight:D.create(1)},n={...cpt},o=Un(e,"triangles",lpt,n,r);return Ln(o,r)}var NH={mode:h.Select("temporal",[["off","Off"],["on","On"],["temporal","Temporal"]]),sampleLevel:h.Numeric(2,{min:0,max:5,step:1},{description:"Take level^2 samples."}),reduceFlicker:h.Boolean(!0,{description:'Reduce flicker in "temporal" mode.'}),reuseOcclusion:h.Boolean(!0,{description:"Reuse occlusion data. It is faster but has some artefacts."})},Hh=class{constructor(t,r){this.webgl=t;this.drawPass=r;let{colorBufferFloat:n,textureFloat:o,colorBufferHalfFloat:i,textureHalfFloat:a}=t.extensions,A=r.colorTarget.getWidth(),s=r.colorTarget.getHeight();this.colorTarget=t.createRenderTarget(A,s,!1);let c=i&&a?"fp16":n&&o?"float32":"uint8";this.composeTarget=t.createRenderTarget(A,s,!1,c),this.holdTarget=t.createRenderTarget(A,s,!1),this.compose=upt(t,r.colorTarget.texture)}static isEnabled(t){return t.mode!=="off"}getByteCount(){return this.colorTarget.getByteCount()+this.composeTarget.getByteCount()+this.holdTarget.getByteCount()}syncSize(){let t=this.drawPass.colorTarget.getWidth(),r=this.drawPass.colorTarget.getHeight(),[n,o]=this.compose.values.uTexSize.ref.value;(t!==n||r!==o)&&(this.colorTarget.setSize(t,r),this.composeTarget.setSize(t,r),this.holdTarget.setSize(t,r),D.update(this.compose.values.uTexSize,Le.set(this.compose.values.uTexSize.ref.value,t,r)))}render(t,r,n,o,i){return n.multiSample.mode==="temporal"&&!i?this.renderTemporalMultiSample(t,r,n,o):(this.renderMultiSample(r,o,n),-2)}bindOutputTarget(t){t?this.webgl.bindDrawingBuffer():this.colorTarget.bind()}renderMultiSample(t,r,n){let{camera:o}=t,{compose:i,composeTarget:a,drawPass:A,webgl:s}=this,{gl:c,state:l}=s;at&&s.timer.mark("MultiSamplePass.renderMultiSample");let u=cU[Math.max(0,Math.min(n.multiSample.sampleLevel,5))],{x:g,y:m,width:p,height:d}=o.viewport,f=1/u.length,I=1/32;o.viewOffset.enabled=!0,D.update(i.values.tColor,A.getColorTarget(n.postprocessing).texture),i.update();for(let C=0;C<u.length;++C){let y=u[C];Io.setViewOffset(o.viewOffset,p,d,y[0],y[1],p,d),o.update();let Q=-.5+(C+.5)/u.length,E=f+I*Q;D.update(i.values.uWeight,E),C===0||!n.multiSample.reuseOcclusion?A.postprocessing.setOcclusionOffset(0,0):A.postprocessing.setOcclusionOffset(y[0]/p,y[1]/d),A.render(t,n,!1),a.bind(),l.enable(c.BLEND),l.blendEquationSeparate(c.FUNC_ADD,c.FUNC_ADD),l.blendFuncSeparate(c.ONE,c.ONE,c.ONE,c.ONE),l.disable(c.DEPTH_TEST),l.depthMask(!1),l.viewport(g,m,p,d),l.scissor(g,m,p,d),C===0&&(l.clearColor(0,0,0,0),c.clear(c.COLOR_BUFFER_BIT)),i.render()}A.postprocessing.setOcclusionOffset(0,0),D.update(i.values.uWeight,1),D.update(i.values.tColor,a.texture),i.update(),this.bindOutputTarget(r),l.viewport(g,m,p,d),l.scissor(g,m,p,d),l.disable(c.BLEND),i.render(),o.viewOffset.enabled=!1,o.update(),at&&s.timer.markEnd("MultiSamplePass.renderMultiSample")}renderTemporalMultiSample(t,r,n,o){let{camera:i}=r,{compose:a,composeTarget:A,holdTarget:s,drawPass:c,webgl:l}=this,{gl:u,state:g}=l;at&&l.timer.mark("MultiSamplePass.renderTemporalMultiSample");let m=cU[Math.max(0,Math.min(n.multiSample.sampleLevel,5))];if(t===-2||t>=m.length)return-2;let{x:p,y:d,width:f,height:I}=i.viewport,C=1/m.length;if(t===-1)c.render(r,n,!1),D.update(a.values.uWeight,1),D.update(a.values.tColor,c.getColorTarget(n.postprocessing).texture),a.update(),s.bind(),g.disable(u.BLEND),g.disable(u.DEPTH_TEST),g.depthMask(!1),g.viewport(p,d,f,I),g.scissor(p,d,f,I),a.render(),t+=1;else{i.viewOffset.enabled=!0,D.update(a.values.tColor,c.getColorTarget(n.postprocessing).texture),D.update(a.values.uWeight,C),a.update();let Q=Math.pow(2,Math.max(0,n.multiSample.sampleLevel-2));for(let E=0;E<Q;++E){let b=m[t];if(Io.setViewOffset(i.viewOffset,f,I,b[0],b[1],f,I),i.update(),t===0||!n.multiSample.reuseOcclusion?c.postprocessing.setOcclusionOffset(0,0):c.postprocessing.setOcclusionOffset(b[0]/f,b[1]/I),c.render(r,n,!1),A.bind(),g.enable(u.BLEND),g.blendEquationSeparate(u.FUNC_ADD,u.FUNC_ADD),g.blendFuncSeparate(u.ONE,u.ONE,u.ONE,u.ONE),g.disable(u.DEPTH_TEST),g.depthMask(!1),g.viewport(p,d,f,I),g.scissor(p,d,f,I),t===0&&(g.clearColor(0,0,0,0),u.clear(u.COLOR_BUFFER_BIT)),a.render(),t+=1,t>=m.length)break}}c.postprocessing.setOcclusionOffset(0,0),this.bindOutputTarget(o),g.viewport(p,d,f,I),g.scissor(p,d,f,I);let y=t*C;return y>0&&(D.update(a.values.uWeight,1),D.update(a.values.tColor,A.texture),a.update(),g.disable(u.BLEND),a.render()),y<1&&(D.update(a.values.uWeight,1-y),D.update(a.values.tColor,s.texture),a.update(),y===0?g.disable(u.BLEND):g.enable(u.BLEND),a.render()),i.viewOffset.enabled=!1,i.update(),at&&l.timer.markEnd("MultiSamplePass.renderTemporalMultiSample"),t>=m.length?-2:t}},cU=[[[0,0]],[[0,0],[-4,-4]],[[0,0],[6,-2],[-6,2],[2,6]],[[0,0],[-1,3],[5,1],[-3,-5],[-5,5],[-7,-1],[3,7],[7,-7]],[[0,0],[-1,-3],[-3,2],[4,-1],[-5,-2],[2,5],[5,3],[3,-5],[-2,6],[0,-7],[-4,-6],[-6,4],[-8,0],[7,-4],[6,7],[-7,-8]],[[0,0],[-7,-5],[-3,-5],[-5,-4],[-1,-4],[-2,-2],[-6,-1],[-4,0],[-7,1],[-1,2],[-6,3],[-3,3],[-7,6],[-3,6],[-5,7],[-1,7],[5,-7],[1,-6],[6,-5],[4,-4],[2,-3],[7,-2],[1,-1],[4,-1],[2,1],[6,2],[0,4],[4,4],[2,5],[7,5],[5,6],[3,7]]];cU.forEach(e=>{e.forEach(t=>{t[0]*=.0625,t[1]*=.0625})});var Vv=class{constructor(t){this.multiSamplePass=t;this.sampleIndex=-2}update(t,r){return t&&(this.sampleIndex=-1),r.mode==="temporal"?this.sampleIndex!==-2:!1}render(t,r,n,o){return this.sampleIndex=this.multiSamplePass.render(this.sampleIndex,t,r,n,!!o),this.sampleIndex<0}};var zve={pickPadding:1,maxAsyncReadLag:5},_v=class{constructor(t,r,n,o){this.webgl=t;this.width=r;this.height=n;this.pickScale=o;let i=o/t.pixelRatio;this.pickWidth=Math.ceil(r*i),this.pickHeight=Math.ceil(n*i);let{resources:a,extensions:{drawBuffers:A},gl:s}=t;A?(this.objectPickTexture=a.texture("image-uint8","rgba","ubyte","nearest"),this.objectPickTexture.define(this.pickWidth,this.pickHeight),this.instancePickTexture=a.texture("image-uint8","rgba","ubyte","nearest"),this.instancePickTexture.define(this.pickWidth,this.pickHeight),this.groupPickTexture=a.texture("image-uint8","rgba","ubyte","nearest"),this.groupPickTexture.define(this.pickWidth,this.pickHeight),this.depthPickTexture=a.texture("image-uint8","rgba","ubyte","nearest"),this.depthPickTexture.define(this.pickWidth,this.pickHeight),this.framebuffer=a.framebuffer(),this.objectPickFramebuffer=a.framebuffer(),this.instancePickFramebuffer=a.framebuffer(),this.groupPickFramebuffer=a.framebuffer(),this.depthPickFramebuffer=a.framebuffer(),this.framebuffer.bind(),A.drawBuffers([A.COLOR_ATTACHMENT0,A.COLOR_ATTACHMENT1,A.COLOR_ATTACHMENT2,A.COLOR_ATTACHMENT3]),this.objectPickTexture.attachFramebuffer(this.framebuffer,"color0"),this.instancePickTexture.attachFramebuffer(this.framebuffer,"color1"),this.groupPickTexture.attachFramebuffer(this.framebuffer,"color2"),this.depthPickTexture.attachFramebuffer(this.framebuffer,"color3"),this.depthRenderbuffer=mr(s)?a.renderbuffer("depth32f","depth",this.pickWidth,this.pickHeight):a.renderbuffer("depth16","depth",this.pickWidth,this.pickHeight),this.depthRenderbuffer.attachFramebuffer(this.framebuffer),this.objectPickTexture.attachFramebuffer(this.objectPickFramebuffer,"color0"),this.instancePickTexture.attachFramebuffer(this.instancePickFramebuffer,"color0"),this.groupPickTexture.attachFramebuffer(this.groupPickFramebuffer,"color0"),this.depthPickTexture.attachFramebuffer(this.depthPickFramebuffer,"color0")):(this.objectPickTarget=t.createRenderTarget(this.pickWidth,this.pickHeight),this.instancePickTarget=t.createRenderTarget(this.pickWidth,this.pickHeight),this.groupPickTarget=t.createRenderTarget(this.pickWidth,this.pickHeight),this.depthPickTarget=t.createRenderTarget(this.pickWidth,this.pickHeight))}getByteCount(){return this.webgl.extensions.drawBuffers?this.objectPickTexture.getByteCount()+this.instancePickTexture.getByteCount()+this.groupPickTexture.getByteCount()+this.depthPickTexture.getByteCount()+this.depthRenderbuffer.getByteCount():this.objectPickTarget.getByteCount()+this.instancePickTarget.getByteCount()+this.groupPickTarget.getByteCount()+this.depthPickTarget.getByteCount()}dispose(){this.webgl.extensions.drawBuffers?(this.framebuffer.destroy(),this.objectPickTexture.destroy(),this.instancePickTexture.destroy(),this.groupPickTexture.destroy(),this.depthPickTexture.destroy(),this.objectPickFramebuffer.destroy(),this.instancePickFramebuffer.destroy(),this.groupPickFramebuffer.destroy(),this.depthPickFramebuffer.destroy(),this.depthRenderbuffer.destroy()):(this.objectPickTarget.destroy(),this.instancePickTarget.destroy(),this.groupPickTarget.destroy(),this.depthPickTarget.destroy())}get pickRatio(){return this.pickScale/this.webgl.pixelRatio}setPickScale(t){this.pickScale=t,this.setSize(this.width,this.height)}bindObject(){this.webgl.extensions.drawBuffers?this.objectPickFramebuffer.bind():this.objectPickTarget.bind()}bindInstance(){this.webgl.extensions.drawBuffers?this.instancePickFramebuffer.bind():this.instancePickTarget.bind()}bindGroup(){this.webgl.extensions.drawBuffers?this.groupPickFramebuffer.bind():this.groupPickTarget.bind()}bindDepth(){this.webgl.extensions.drawBuffers?this.depthPickFramebuffer.bind():this.depthPickTarget.bind()}get drawingBufferHeight(){return this.height}setSize(t,r){this.width=t,this.height=r;let n=this.pickScale/this.webgl.pixelRatio,o=Math.ceil(this.width*n),i=Math.ceil(this.height*n);(o!==this.pickWidth||i!==this.pickHeight)&&(this.pickWidth=o,this.pickHeight=i,this.webgl.extensions.drawBuffers?(this.objectPickTexture.define(this.pickWidth,this.pickHeight),this.instancePickTexture.define(this.pickWidth,this.pickHeight),this.groupPickTexture.define(this.pickWidth,this.pickHeight),this.depthPickTexture.define(this.pickWidth,this.pickHeight),this.depthRenderbuffer.setSize(this.pickWidth,this.pickHeight)):(this.objectPickTarget.setSize(this.pickWidth,this.pickHeight),this.instancePickTarget.setSize(this.pickWidth,this.pickHeight),this.groupPickTarget.setSize(this.pickWidth,this.pickHeight),this.depthPickTarget.setSize(this.pickWidth,this.pickHeight)))}reset(){let{drawBuffers:t}=this.webgl.extensions;t&&(this.framebuffer.bind(),t.drawBuffers([t.COLOR_ATTACHMENT0,t.COLOR_ATTACHMENT1,t.COLOR_ATTACHMENT2,t.COLOR_ATTACHMENT3]),this.objectPickTexture.attachFramebuffer(this.framebuffer,"color0"),this.instancePickTexture.attachFramebuffer(this.framebuffer,"color1"),this.groupPickTexture.attachFramebuffer(this.framebuffer,"color2"),this.depthPickTexture.attachFramebuffer(this.framebuffer,"color3"),this.depthRenderbuffer.attachFramebuffer(this.framebuffer),this.objectPickTexture.attachFramebuffer(this.objectPickFramebuffer,"color0"),this.instancePickTexture.attachFramebuffer(this.instancePickFramebuffer,"color0"),this.groupPickTexture.attachFramebuffer(this.groupPickFramebuffer,"color0"),this.depthPickTexture.attachFramebuffer(this.depthPickFramebuffer,"color0"))}renderVariant(t,r,n,o,i,a){t.clear(!1),t.update(r,n),t.renderPick(n.primitives,r,i,a),o.handle.isEnabled&&t.renderPick(o.handle.scene,r,i,a),o.camera.isEnabled&&(o.camera.update(r),t.update(o.camera.camera,o.camera.scene),t.renderPick(o.camera.scene,o.camera.camera,i,a))}render(t,r,n,o){this.webgl.extensions.drawBuffers?(this.framebuffer.bind(),this.renderVariant(t,r,n,o,"pick",0)):(this.objectPickTarget.bind(),this.renderVariant(t,r,n,o,"pick",1),this.instancePickTarget.bind(),this.renderVariant(t,r,n,o,"pick",2),this.groupPickTarget.bind(),this.renderVariant(t,r,n,o,"pick",3),this.depthPickTarget.bind(),this.renderVariant(t,r,n,o,"depth",0))}},Jve=!1;function MH(e){return e.isWebGL2?!0:(ir&&!Jve&&(console.log("WebGL2 required for async picking. Falling back to synchronous picking."),Jve=!0),!1)}var Yv=class{constructor(t,r,n=5){this.webgl=t;this.pickPass=r;this.maxAsyncReadLag=n;this.viewport=Jo.create(0,0,0,0);this.fenceSync=null;this.fenceTimestamp=0;this.ready=!1;this.lag=0;t.isWebGL2&&(this.objectBuffer=t.resources.pixelPack("rgba","ubyte"),this.instanceBuffer=t.resources.pixelPack("rgba","ubyte"),this.groupBuffer=t.resources.pixelPack("rgba","ubyte"),this.depthBuffer=t.resources.pixelPack("rgba","ubyte")),this.setup()}setup(){let t=this.viewport.width*this.viewport.height*4;(!this.object||this.object.length!==t)&&(this.object=new Uint8Array(t),this.instance=new Uint8Array(t),this.group=new Uint8Array(t),this.depth=new Uint8Array(t))}setViewport(t,r,n,o){Jo.set(this.viewport,t,r,n,o),this.setup()}read(){at&&this.webgl.timer.mark("PickBuffers.read");let{x:t,y:r,width:n,height:o}=this.viewport;this.pickPass.bindObject(),this.webgl.readPixels(t,r,n,o,this.object),this.pickPass.bindInstance(),this.webgl.readPixels(t,r,n,o,this.instance),this.pickPass.bindGroup(),this.webgl.readPixels(t,r,n,o,this.group),this.pickPass.bindDepth(),this.webgl.readPixels(t,r,n,o,this.depth),this.ready=!0,at&&this.webgl.timer.markEnd("PickBuffers.read")}asyncRead(){let{gl:t}=this.webgl;if(!mr(t))return;at&&this.webgl.timer.mark("PickBuffers.asyncRead"),this.fenceSync!==null&&t.deleteSync(this.fenceSync);let{x:r,y:n,width:o,height:i}=this.viewport;this.pickPass.bindObject(),this.objectBuffer.read(r,n,o,i),this.pickPass.bindInstance(),this.instanceBuffer.read(r,n,o,i),this.pickPass.bindGroup(),this.groupBuffer.read(r,n,o,i),this.pickPass.bindDepth(),this.depthBuffer.read(r,n,o,i),this.fenceTimestamp=co(),this.fenceSync=t.fenceSync(t.SYNC_GPU_COMMANDS_COMPLETE,0),t.flush(),this.ready=!1,at&&this.webgl.timer.markEnd("PickBuffers.asyncRead")}check(){if(this.ready)return 1;if(this.fenceSync===null)return 2;let{gl:t}=this.webgl;if(!mr(t))return 2;let r=t.clientWaitSync(this.fenceSync,0,0);return r===t.WAIT_FAILED||this.lag>=this.maxAsyncReadLag?r!==t.WAIT_FAILED&&co()-this.fenceTimestamp<1e3/60?(this.lag+=1,0):(t.deleteSync(this.fenceSync),this.fenceSync=null,this.lag=0,this.ready=!1,2):r===t.TIMEOUT_EXPIRED?(this.lag+=1,0):(this.objectBuffer.getSubData(this.object),this.instanceBuffer.getSubData(this.instance),this.groupBuffer.getSubData(this.group),this.depthBuffer.getSubData(this.depth),t.deleteSync(this.fenceSync),this.fenceSync=null,this.lag=0,this.ready=!0,1)}getIdx(t,r){return(r*this.viewport.width+t)*4}getDepth(t,r){if(!this.ready)return-1;let n=this.getIdx(t,r),o=this.depth;return kCe(o[n],o[n+1],o[n+2],o[n+3])}getId(t,r,n){if(!this.ready)return-1;let o=this.getIdx(t,r);return mp(n[o],n[o+1],n[o+2])}getObjectId(t,r){return this.getId(t,r,this.object)}getInstanceId(t,r){return this.getId(t,r,this.instance)}getGroupId(t,r){return this.getId(t,r,this.group)}getPickingId(t,r){let n=this.getObjectId(t,r);if(n===-1||n===Ai.Null)return;let o=this.getInstanceId(t,r);if(o===-1||o===Ai.Null)return;let i=this.getGroupId(t,r);if(i!==-1)return{objectId:n,instanceId:o,groupId:i}}reset(){this.fenceSync=null,this.ready=!1,this.lag=0,this.fenceTimestamp=0}dispose(){let{gl:t}=this.webgl;mr(t)&&(this.objectBuffer.destroy(),this.instanceBuffer.destroy(),this.groupBuffer.destroy(),this.depthBuffer.destroy(),this.fenceSync!==null&&(t.deleteSync(this.fenceSync),this.fenceSync=null))}};var rZ={eyeSeparation:h.Numeric(.062,{min:.02,max:.1,step:.001},{description:"Distance between left and right camera."}),focus:h.Numeric(10,{min:1,max:20,step:.1},{description:"Apparent object distance."})},gpt=h.getDefaultValues(rZ);var iB=class{constructor(t,r={}){this.parent=t;this.left=new kH;this.right=new kH;this.props={...gpt,...r}}get viewport(){return this.parent.viewport}get viewOffset(){return this.parent.viewOffset}setProps(t){Object.assign(this.props,t)}update(t){this.parent.update(),t?dpt(this.parent,this.left,this.right,t):mpt(this.parent,this.props,this.left,this.right)}};(t=>{function e(r){return"left"in r&&"right"in r}t.is=e})(iB||={});var kH=class{constructor(){this.viewport=Jo.create(0,0,0,0);this.view=Y();this.projection=Y();this.projectionView=Y();this.inverseProjectionView=Y();this.headRotation=Y();this.viewEye=Y();this.isAsymmetricProjection=!0;this.state=Io.createDefaultSnapshot();this.viewOffset=Io.ViewOffset();this.far=0;this.near=0;this.fogFar=0;this.fogNear=0;this.forceFull=!1;this.scale=0;this.minTargetDistance=0;this.disabled=!1}getRay(t,r,n){return Y.getTranslation(t.origin,Y.invert(Y(),this.view)),B.set(t.direction,r,n,.5),DI(t.direction,t.direction,this.viewport,this.inverseProjectionView),B.normalize(t.direction,B.sub(t.direction,t.direction,t.origin)),t}},Kve=Y.identity(),jve=Y.identity();function tZ(e,t){Jo.copy(t.viewport,e.viewport),Y.copy(t.view,e.view),Y.copy(t.projection,e.projection),Y.copy(t.headRotation,e.headRotation),Io.copySnapshot(t.state,e.state),Io.copyViewOffset(t.viewOffset,e.viewOffset),t.far=e.far,t.near=e.near,t.fogFar=e.fogFar,t.fogNear=e.fogNear,t.forceFull=e.forceFull,t.scale=e.scale,t.minTargetDistance=e.minTargetDistance}function mpt(e,t,r,n){tZ(e,r),tZ(e,n);let o=Math.floor(e.viewport.width/2),i=o/e.viewport.height;r.viewport.width=o,n.viewport.x+=o,n.viewport.width-=o;let a=t.eyeSeparation/2,A=a*e.near/t.focus,s=e.near*Math.tan(e.state.fov*.5),c,l;Kve[12]=-a,jve[12]=a,c=-s*i+A,l=s*i+A,r.projection[0]=2*e.near/(l-c),r.projection[8]=(l+c)/(l-c),Y.mul(r.view,r.view,Kve),Y.mul(r.projectionView,r.projection,r.view),Y.invert(r.inverseProjectionView,r.projectionView),c=-s*i-A,l=s*i-A,n.projection[0]=2*e.near/(l-c),n.projection[8]=(l+c)/(l-c),Y.mul(n.view,n.view,jve),Y.mul(n.projectionView,n.projection,n.view),Y.invert(n.inverseProjectionView,n.projectionView),r.disabled=!1,n.disabled=!1}function dpt(e,t,r,n){Wve(e,t,n.pose.views[0],n.layer),n.pose.views.length===1?r.disabled=!0:Wve(e,r,n.pose.views[1],n.layer)}function Wve(e,t,r,n){tZ(e,t);let o=n.getViewport(r);Jo.set(t.viewport,o.x,o.y,o.width,o.height),Y.fromArray(t.projection,r.projectionMatrix,0),Y.fromArray(t.view,r.transform.inverse.matrix,0),Y.mul(t.projectionView,t.projection,t.view),Y.invert(t.inverseProjectionView,t.projectionView),t.disabled=!1}var HH=class{constructor(t,r,n,o,i,a,A){this.webgl=t;this.renderer=r;this.scene=n;this.helper=o;this.pickPass=i;this.dirty=!0;this.buffers=new Yv(this.webgl,this.pickPass);this.viewport=Jo();this.setViewport(a.x,a.y,a.width,a.height),this.pickPadding=A.pickPadding,MH(t)||(this.asyncIdentify=(s,c,l)=>({tryGet:()=>this.identify(s,c,l)}))}setViewport(t,r,n,o){Jo.set(this.viewport,t,r,n,o),this.update()}setPickPadding(t){this.pickPadding!==t&&(this.pickPadding=t,this.update())}update(){let{x:t,y:r,width:n,height:o}=this.viewport;this.pickRatio=this.pickPass.pickRatio,this.pickX=Math.ceil(t*this.pickRatio),this.pickY=Math.ceil(r*this.pickRatio);let i=Math.floor(n*this.pickRatio),a=Math.floor(o*this.pickRatio);(i!==this.pickWidth||a!==this.pickHeight)&&(this.pickWidth=i,this.pickHeight=a,this.halfPickWidth=Math.floor(this.pickWidth/2),this.buffers.setViewport(this.pickX,this.pickY,this.pickWidth,this.pickHeight)),this.spiral=tG(Math.ceil(this.pickRatio*this.pickPadding)),this.dirty=!0}render(t){at&&this.webgl.timer.mark("PickHelper.render",{captureStats:!0});let{pickX:r,pickY:n,pickWidth:o,pickHeight:i,halfPickWidth:a}=this,{renderer:A,scene:s,helper:c}=this;A.setTransparentBackground(!1),A.setDrawingBufferSize(o,i),A.setPixelRatio(this.pickRatio),iB.is(t)?(A.setViewport(r,n,a,i),this.pickPass.render(A,t.left,s,c),A.setViewport(r+a,n,o-a,i),this.pickPass.render(A,t.right,s,c)):(A.setViewport(r,n,o,i),this.pickPass.render(A,t,s,c)),this.dirty=!1,at&&this.webgl.timer.markEnd("PickHelper.render")}identifyInternal(t,r,n){if(this.webgl.isContextLost)return;let{webgl:o,pickRatio:i}=this;if(o.isContextLost)return;t*=o.pixelRatio,r*=o.pixelRatio,r=this.pickPass.drawingBufferHeight-r;let{viewport:a}=this;if(t<a.x||r<a.y||t>a.x+a.width||r>a.y+a.height)return;let A=t-a.x,s=r-a.y,c=Math.floor(A*i),l=Math.floor(s*i),u=this.buffers.getPickingId(c,l);if(u===void 0)return;let g=this.buffers.getDepth(c,l),m=B.create(t,r,g);if(iB.is(n)){let p=Math.floor(a.width/2);t>a.x+p?(m[0]=a.x+(A-p)*2,DI(m,m,a,n.right.inverseProjectionView)):(m[0]=a.x+A*2,DI(m,m,a,n.left.inverseProjectionView))}else DI(m,m,a,n.inverseProjectionView);return{id:u,position:m}}prepare(){this.pickRatio!==this.pickPass.pickRatio&&this.update()}getPickData(t,r,n){for(let o of this.spiral){let i=this.identifyInternal(t+o[0],r+o[1],n);if(i)return i}}identify(t,r,n){return this.prepare(),this.dirty&&(at&&this.webgl.timer.mark("PickHelper.identify"),this.webgl.resources.finalizePrograms(["pick"],!0),this.render(n),this.buffers.read(),at&&this.webgl.timer.markEnd("PickHelper.identify")),this.getPickData(t,r,n)}asyncIdentify(t,r,n){return this.prepare(),this.dirty&&(at&&this.webgl.timer.mark("PickHelper.asyncIdentify"),this.render(n),this.buffers.asyncRead(),at&&this.webgl.timer.markEnd("PickHelper.asyncIdentify")),{tryGet:()=>{let o=this.buffers.check();if(o===1)return this.getPickData(t,r,n);if(o===0)return"pending";o===2&&(this.dirty=!0)}}}reset(){this.buffers.reset(),this.dirty=!0}dispose(){this.buffers.dispose()}};var Xve=`
|
|
precision highp float;
|
|
|
|
uniform sampler2D tWboitA;
|
|
uniform sampler2D tWboitB;
|
|
uniform vec2 uTexSize;
|
|
|
|
void main() {
|
|
vec2 coords = gl_FragCoord.xy / uTexSize;
|
|
|
|
vec4 accum = texture2D(tWboitA, coords);
|
|
float r = 1.0 - accum.a;
|
|
|
|
accum.a = texture2D(tWboitB, coords).r;
|
|
// divisor needs to allow very small values for nice fading
|
|
gl_FragColor = vec4(accum.rgb / clamp(accum.a, 0.00000001, 50000.0), r);
|
|
}
|
|
`;var fpt={...Wn,tWboitA:Ft("texture","rgba","float","nearest"),tWboitB:Ft("texture","rgba","float","nearest"),uTexSize:Re("v2")},Bpt=Cn("evaluate-wboit",mo,Xve);function Ipt(e,t,r){let n={...Xn,tWboitA:D.create(t),tWboitB:D.create(r),uTexSize:D.create(Le.create(t.getWidth(),t.getHeight()))},o={...fpt},i=Un(e,"triangles",Bpt,o,n);return Ln(i,n)}var VH=class e{constructor(t,r,n){this.webgl=t;this._supported=!1;if(!e.isSupported(t))return;let{resources:o,gl:i}=t;this.textureA=o.texture("image-float32","rgba","float","nearest"),this.textureA.define(r,n),this.textureB=o.texture("image-float32","rgba","float","nearest"),this.textureB.define(r,n),this.depthRenderbuffer=mr(i)?o.renderbuffer("depth32f","depth",r,n):o.renderbuffer("depth16","depth",r,n),this.renderable=Ipt(t,this.textureA,this.textureB),this.framebuffer=o.framebuffer(),this._supported=!0,this._init()}get supported(){return this._supported}getByteCount(){return this._supported?this.textureA.getByteCount()+this.textureB.getByteCount()+this.depthRenderbuffer.getByteCount():0}bind(){let{state:t,gl:r}=this.webgl;this.framebuffer.bind(),t.clearColor(0,0,0,1),r.clear(r.COLOR_BUFFER_BIT),t.disable(r.DEPTH_TEST),t.blendFuncSeparate(r.ONE,r.ONE,r.ZERO,r.ONE_MINUS_SRC_ALPHA),t.enable(r.BLEND)}render(){at&&this.webgl.timer.mark("WboitPass.render");let{state:t,gl:r}=this.webgl;t.blendFuncSeparate(r.SRC_ALPHA,r.ONE_MINUS_SRC_ALPHA,r.ONE,r.ONE_MINUS_SRC_ALPHA),t.enable(r.BLEND),this.renderable.update(),this.renderable.render(),at&&this.webgl.timer.markEnd("WboitPass.render")}setSize(t,r){let[n,o]=this.renderable.values.uTexSize.ref.value;(t!==n||r!==o)&&(this.textureA.define(t,r),this.textureB.define(t,r),this.depthRenderbuffer.setSize(t,r),D.update(this.renderable.values.uTexSize,Le.set(this.renderable.values.uTexSize.ref.value,t,r)))}reset(){this._supported&&this._init()}_init(){let{extensions:{drawBuffers:t}}=this.webgl;this.framebuffer.bind(),t.drawBuffers([t.COLOR_ATTACHMENT0,t.COLOR_ATTACHMENT1]),this.textureA.attachFramebuffer(this.framebuffer,"color0"),this.textureB.attachFramebuffer(this.framebuffer,"color1"),this.depthRenderbuffer.attachFramebuffer(this.framebuffer)}static isSupported(t){let{extensions:{drawBuffers:r,textureFloat:n,colorBufferFloat:o,depthTexture:i}}=t;if(!n||!o||!i||!r){if(ir){let a=[];n||a.push("textureFloat"),o||a.push("colorBufferFloat"),i||a.push("depthTexture"),r||a.push("drawBuffers"),console.log(`Missing "${a.join('", "')}" extensions required for "wboit"`)}return!1}else return!0}};var Zve=`
|
|
precision highp float;
|
|
|
|
uniform sampler2D tDpoitFrontColor;
|
|
uniform vec2 uTexSize;
|
|
|
|
void main() {
|
|
vec2 coords = gl_FragCoord.xy / uTexSize;
|
|
gl_FragColor = texture2D(tDpoitFrontColor, coords);
|
|
}
|
|
`;var qve=`
|
|
precision highp float;
|
|
|
|
uniform sampler2D tDpoitBackColor;
|
|
uniform vec2 uTexSize;
|
|
|
|
void main() {
|
|
vec2 coords = gl_FragCoord.xy / uTexSize;
|
|
gl_FragColor = texture2D(tDpoitBackColor, coords);
|
|
if (gl_FragColor.a == 0.0) {
|
|
discard;
|
|
}
|
|
}
|
|
`;var Cpt={...Wn,tDpoitBackColor:Ft("texture","rgba","float","nearest"),uTexSize:Re("v2")},hpt=Cn("blend-back-dpoit",mo,qve);function ypt(e,t){let r={...Xn,tDpoitBackColor:D.create(t),uTexSize:D.create(Le.create(t.getWidth(),t.getHeight()))},n={...Cpt},o=Un(e,"triangles",hpt,n,r);return Ln(o,r)}var Qpt={...Wn,tDpoitFrontColor:Ft("texture","rgba","float","nearest"),uTexSize:Re("v2")},Ept=Cn("evaluate-dpoit",mo,Zve);function bpt(e,t){let r={...Xn,tDpoitFrontColor:D.create(t),uTexSize:D.create(Le.create(t.getWidth(),t.getHeight()))},n={...Qpt},o=Un(e,"triangles",Ept,n,r);return Ln(o,r)}var _H=class e{constructor(t,r,n){this.webgl=t;this.DEPTH_CLEAR_VALUE=-99999;this.MAX_DEPTH=1;this.MIN_DEPTH=0;this.passCount=0;this._supported=!1;if(!e.isSupported(t))return;let{resources:o,extensions:{colorBufferHalfFloat:i,textureHalfFloat:a}}=t;mr(t.gl)?(this.depthTextures=[o.texture("image-float32","rg","float","nearest"),o.texture("image-float32","rg","float","nearest")],this.colorFrontTextures=i&&a?[o.texture("image-float16","rgba","fp16","nearest"),o.texture("image-float16","rgba","fp16","nearest")]:[o.texture("image-float32","rgba","float","nearest"),o.texture("image-float32","rgba","float","nearest")],this.colorBackTextures=i&&a?[o.texture("image-float16","rgba","fp16","nearest"),o.texture("image-float16","rgba","fp16","nearest")]:[o.texture("image-float32","rgba","float","nearest"),o.texture("image-float32","rgba","float","nearest")]):(this.depthTextures=[o.texture("image-float32","rgba","float","nearest"),o.texture("image-float32","rgba","float","nearest")],this.colorFrontTextures=[o.texture("image-float32","rgba","float","nearest"),o.texture("image-float32","rgba","float","nearest")],this.colorBackTextures=[o.texture("image-float32","rgba","float","nearest"),o.texture("image-float32","rgba","float","nearest")]),this.depthTextures[0].define(r,n),this.depthTextures[1].define(r,n),this.colorFrontTextures[0].define(r,n),this.colorFrontTextures[1].define(r,n),this.colorBackTextures[0].define(r,n),this.colorBackTextures[1].define(r,n),this.depthFramebuffers=[o.framebuffer(),o.framebuffer()],this.colorFramebuffers=[o.framebuffer(),o.framebuffer()],this.blendBackRenderable=ypt(t,this.colorBackTextures[0]),this.renderable=bpt(t,this.colorFrontTextures[0]),this._supported=!0,this._init()}get supported(){return this._supported}getByteCount(){return this._supported?this.depthTextures[0].getByteCount()+this.depthTextures[1].getByteCount()+this.colorFrontTextures[0].getByteCount()+this.colorFrontTextures[1].getByteCount()+this.colorBackTextures[0].getByteCount()+this.colorBackTextures[1].getByteCount():0}bind(){let{state:t,gl:r,extensions:{blendMinMax:n}}=this.webgl;return this.passCount=0,this.depthFramebuffers[0].bind(),t.clearColor(this.DEPTH_CLEAR_VALUE,this.DEPTH_CLEAR_VALUE,0,0),r.clear(r.COLOR_BUFFER_BIT),this.depthFramebuffers[1].bind(),t.clearColor(-this.MIN_DEPTH,this.MAX_DEPTH,0,0),r.clear(r.COLOR_BUFFER_BIT),this.colorFramebuffers[0].bind(),t.clearColor(0,0,0,0),r.clear(r.COLOR_BUFFER_BIT),this.colorFramebuffers[1].bind(),t.clearColor(0,0,0,0),r.clear(r.COLOR_BUFFER_BIT),this.depthFramebuffers[0].bind(),t.blendEquation(n.MAX),t.depthMask(!1),{depth:this.depthTextures[1],frontColor:this.colorFrontTextures[1],backColor:this.colorBackTextures[1]}}bindDualDepthPeeling(){let{state:t,gl:r,extensions:{blendMinMax:n}}=this.webgl;return this.readId=this.passCount%2,this.writeId=1-this.readId,this.passCount+=1,this.depthFramebuffers[this.writeId].bind(),t.clearColor(this.DEPTH_CLEAR_VALUE,this.DEPTH_CLEAR_VALUE,0,0),r.clear(r.COLOR_BUFFER_BIT),this.colorFramebuffers[this.writeId].bind(),t.clearColor(0,0,0,0),r.clear(r.COLOR_BUFFER_BIT),this.depthFramebuffers[this.writeId].bind(),t.blendEquation(n.MAX),t.depthMask(!1),{depth:this.depthTextures[this.readId],frontColor:this.colorFrontTextures[this.readId],backColor:this.colorBackTextures[this.readId]}}renderBlendBack(){at&&this.webgl.timer.mark("DpoitPass.renderBlendBack");let{state:t,gl:r}=this.webgl;t.blendEquation(r.FUNC_ADD),t.blendFuncSeparate(r.SRC_ALPHA,r.ONE_MINUS_SRC_ALPHA,r.ONE,r.ONE_MINUS_SRC_ALPHA),D.update(this.blendBackRenderable.values.tDpoitBackColor,this.colorBackTextures[this.writeId]),this.blendBackRenderable.update(),this.blendBackRenderable.render(),at&&this.webgl.timer.markEnd("DpoitPass.renderBlendBack")}render(){at&&this.webgl.timer.mark("DpoitPass.render");let{state:t,gl:r}=this.webgl;t.blendEquation(r.FUNC_ADD),t.blendFunc(r.ONE,r.ONE_MINUS_SRC_ALPHA),D.update(this.renderable.values.tDpoitFrontColor,this.colorFrontTextures[this.writeId]),this.renderable.update(),this.renderable.render(),at&&this.webgl.timer.markEnd("DpoitPass.render")}setSize(t,r){let[n,o]=this.renderable.values.uTexSize.ref.value;if(t!==n||r!==o){for(let i=0;i<2;i++)this.depthTextures[i].define(t,r),this.colorFrontTextures[i].define(t,r),this.colorBackTextures[i].define(t,r);D.update(this.renderable.values.uTexSize,Le.set(this.renderable.values.uTexSize.ref.value,t,r)),D.update(this.blendBackRenderable.values.uTexSize,Le.set(this.blendBackRenderable.values.uTexSize.ref.value,t,r))}}reset(){this._supported&&this._init()}_init(){let{extensions:{drawBuffers:t}}=this.webgl;for(let r=0;r<2;r++)this.depthFramebuffers[r].bind(),t.drawBuffers([t.COLOR_ATTACHMENT0,t.COLOR_ATTACHMENT1,t.COLOR_ATTACHMENT2]),this.colorFrontTextures[r].attachFramebuffer(this.depthFramebuffers[r],"color0"),this.colorBackTextures[r].attachFramebuffer(this.depthFramebuffers[r],"color1"),this.depthTextures[r].attachFramebuffer(this.depthFramebuffers[r],"color2"),this.colorFramebuffers[r].bind(),t.drawBuffers([t.COLOR_ATTACHMENT0,t.COLOR_ATTACHMENT1]),this.colorFrontTextures[r].attachFramebuffer(this.colorFramebuffers[r],"color0"),this.colorBackTextures[r].attachFramebuffer(this.colorFramebuffers[r],"color1")}static isSupported(t){let{extensions:{drawBuffers:r,textureFloat:n,colorBufferFloat:o,depthTexture:i,blendMinMax:a}}=t;if(!n||!o||!i||!r||!a){if(ir){let A=[];n||A.push("textureFloat"),o||A.push("colorBufferFloat"),i||A.push("depthTexture"),r||A.push("drawBuffers"),a||A.push("blendMinMax"),console.log(`Missing "${A.join('", "')}" extensions required for "dpoit"`)}return!1}else return!0}};var $ve=`
|
|
precision highp float;
|
|
precision highp sampler2D;
|
|
|
|
uniform vec2 uTexSizeInv;
|
|
uniform sampler2D tEdgeTexture;
|
|
uniform vec3 uHighlightEdgeColor;
|
|
uniform vec3 uSelectEdgeColor;
|
|
uniform float uHighlightEdgeStrength;
|
|
uniform float uSelectEdgeStrength;
|
|
uniform float uGhostEdgeStrength;
|
|
uniform float uInnerEdgeFactor;
|
|
|
|
void main() {
|
|
vec2 coords = gl_FragCoord.xy * uTexSizeInv;
|
|
vec4 edgeValue = texture2D(tEdgeTexture, coords);
|
|
if (edgeValue.a > 0.0) {
|
|
vec3 edgeColor = edgeValue.b == 1.0 ? uHighlightEdgeColor : uSelectEdgeColor;
|
|
gl_FragColor.rgb = edgeValue.g > 0.0 ? edgeColor : edgeColor * uInnerEdgeFactor;
|
|
gl_FragColor.a = (edgeValue.r == 1.0 ? uGhostEdgeStrength : 1.0) * edgeValue.a;
|
|
float edgeStrength = edgeValue.b == 1.0 ? uHighlightEdgeStrength : uSelectEdgeStrength;
|
|
gl_FragColor.a *= edgeStrength;
|
|
} else {
|
|
gl_FragColor = vec4(0.0);
|
|
}
|
|
}
|
|
`;var eFe=`
|
|
precision highp float;
|
|
precision highp sampler2D;
|
|
|
|
uniform sampler2D tMaskTexture;
|
|
uniform vec2 uTexSizeInv;
|
|
|
|
void main() {
|
|
vec2 coords = gl_FragCoord.xy * uTexSizeInv;
|
|
vec4 offset = vec4(float(dEdgeScale), 0.0, 0.0, float(dEdgeScale)) * vec4(uTexSizeInv, uTexSizeInv);
|
|
vec4 c0 = texture2D(tMaskTexture, coords);
|
|
vec4 c1 = texture2D(tMaskTexture, coords + offset.xy);
|
|
vec4 c2 = texture2D(tMaskTexture, coords - offset.xy);
|
|
vec4 c3 = texture2D(tMaskTexture, coords + offset.yw);
|
|
vec4 c4 = texture2D(tMaskTexture, coords - offset.yw);
|
|
float diff1 = (c1.r - c2.r) * 0.5;
|
|
float diff2 = (c3.r - c4.r) * 0.5;
|
|
float d = length(vec2(diff1, diff2));
|
|
if (d <= 0.0)
|
|
discard;
|
|
float a1 = min(c1.g, c2.g);
|
|
float a2 = min(c3.g, c4.g);
|
|
float visibility = min(a1, a2) > 0.001 ? 1.0 : 0.0;
|
|
float mask = c0.r;
|
|
float marker = min(c1.b, min(c2.b, min(c3.b, c4.b)));
|
|
float fogAlpha = min(c1.a, min(c2.a, min(c3.a, c4.a)));
|
|
gl_FragColor = vec4(visibility, mask, marker, fogAlpha);
|
|
}
|
|
`;var YH={enabled:h.Boolean(!0),highlightEdgeColor:h.Color(ke.darken(ke.fromNormalizedRgb(1,.4,.6),1)),selectEdgeColor:h.Color(ke.darken(ke.fromNormalizedRgb(.2,1,.1),1)),edgeScale:h.Numeric(1,{min:1,max:3,step:1},{description:"Thickness of the edge."}),highlightEdgeStrength:h.Numeric(1,{min:0,max:1,step:.1}),selectEdgeStrength:h.Numeric(1,{min:0,max:1,step:.1}),ghostEdgeStrength:h.Numeric(.3,{min:0,max:1,step:.1},{description:"Opacity of the hidden edges that are covered by other geometry. When set to 1, one less geometry render pass is done."}),innerEdgeFactor:h.Numeric(1.5,{min:0,max:3,step:.1},{description:"Factor to multiply the inner edge color with - for added contrast."})},zI=class{constructor(t,r,n){this.webgl=t;this.depthTarget=t.createRenderTarget(r,n),this.maskTarget=t.createRenderTarget(r,n),this.edgesTarget=t.createRenderTarget(r,n),this.edge=Dpt(t,this.maskTarget.texture),this.overlay=wpt(t,this.edgesTarget.texture)}static isEnabled(t){return t.enabled}getByteCount(){return this.depthTarget.getByteCount()+this.maskTarget.getByteCount()+this.edgesTarget.getByteCount()}setEdgeState(t){let{gl:r,state:n}=this.webgl;n.enable(r.SCISSOR_TEST),n.enable(r.BLEND),n.blendFunc(r.ONE,r.ONE),n.blendEquation(r.FUNC_ADD),n.disable(r.DEPTH_TEST),n.depthMask(!1);let{x:o,y:i,width:a,height:A}=t;n.viewport(o,i,a,A),n.scissor(o,i,a,A),n.clearColor(0,0,0,0),r.clear(r.COLOR_BUFFER_BIT)}setOverlayState(t){let{gl:r,state:n}=this.webgl;n.enable(r.SCISSOR_TEST),n.enable(r.BLEND),n.blendFunc(r.SRC_ALPHA,r.ONE_MINUS_SRC_ALPHA),n.blendEquation(r.FUNC_ADD),n.disable(r.DEPTH_TEST),n.depthMask(!1);let{x:o,y:i,width:a,height:A}=t;n.viewport(o,i,a,A),n.scissor(o,i,a,A)}setSize(t,r){let n=this.depthTarget.getWidth(),o=this.depthTarget.getHeight();(t!==n||r!==o)&&(this.depthTarget.setSize(t,r),this.maskTarget.setSize(t,r),this.edgesTarget.setSize(t,r),D.update(this.edge.values.uTexSizeInv,Le.set(this.edge.values.uTexSizeInv.ref.value,1/t,1/r)),D.update(this.overlay.values.uTexSizeInv,Le.set(this.overlay.values.uTexSizeInv.ref.value,1/t,1/r)))}update(t){let{highlightEdgeColor:r,selectEdgeColor:n,edgeScale:o,innerEdgeFactor:i,ghostEdgeStrength:a,highlightEdgeStrength:A,selectEdgeStrength:s}=t,{values:c}=this.edge,l=Math.max(1,Math.round(o*this.webgl.pixelRatio));c.dEdgeScale.ref.value!==l&&(D.update(c.dEdgeScale,l),this.edge.update());let{values:u}=this.overlay;D.update(u.uHighlightEdgeColor,ke.toVec3Normalized(u.uHighlightEdgeColor.ref.value,r)),D.update(u.uSelectEdgeColor,ke.toVec3Normalized(u.uSelectEdgeColor.ref.value,n)),D.updateIfChanged(u.uInnerEdgeFactor,i),D.updateIfChanged(u.uGhostEdgeStrength,a),D.updateIfChanged(u.uHighlightEdgeStrength,A),D.updateIfChanged(u.uSelectEdgeStrength,s)}render(t,r){at&&this.webgl.timer.mark("MarkingPass.render"),this.edgesTarget.bind(),this.setEdgeState(t),this.edge.render(),r.bind(),this.setOverlayState(t),this.overlay.render(),at&&this.webgl.timer.markEnd("MarkingPass.render")}},xpt={...Wn,tMaskTexture:Ft("texture","rgba","ubyte","linear"),uTexSizeInv:Re("v2"),dEdgeScale:bt("number")},Spt=Cn("edge",mo,eFe);function Dpt(e,t){let r=t.getWidth(),n=t.getHeight(),o={...Xn,tMaskTexture:D.create(t),uTexSizeInv:D.create(Le.create(1/r,1/n)),dEdgeScale:D.create(1)},i={...xpt},a=Un(e,"triangles",Spt,i,o);return Ln(a,o)}var vpt={...Wn,tEdgeTexture:Ft("texture","rgba","ubyte","linear"),uTexSizeInv:Re("v2"),uHighlightEdgeColor:Re("v3"),uSelectEdgeColor:Re("v3"),uHighlightEdgeStrength:Re("f"),uSelectEdgeStrength:Re("f"),uGhostEdgeStrength:Re("f"),uInnerEdgeFactor:Re("f")},Fpt=Cn("overlay",mo,$ve);function wpt(e,t){let r=t.getWidth(),n=t.getHeight(),o={...Xn,tEdgeTexture:D.create(t),uTexSizeInv:D.create(Le.create(1/r,1/n)),uHighlightEdgeColor:D.create(B()),uSelectEdgeColor:D.create(B()),uHighlightEdgeStrength:D.create(1),uSelectEdgeStrength:D.create(1),uGhostEdgeStrength:D.create(0),uInnerEdgeFactor:D.create(0)},i={...vpt},a=Un(e,"triangles",Fpt,i,o);return Ln(a,o)}var Ov=class{constructor(t,r,n,o,i){this.webgl=t;this.transparencyMode="blended";let{extensions:a,resources:A,isWebGL2:s}=t;this.drawTarget=t.createDrawTarget(),this.colorTarget=t.createRenderTarget(n,o,!0,"uint8","linear"),this.transparentColorTarget=t.createRenderTarget(n,o,!1,"uint8","linear"),this.packedDepth=!a.depthTexture,this.depthTargetTransparent=t.createRenderTarget(n,o),this.depthTextureTransparent=this.depthTargetTransparent.texture,this.depthTargetOpaque=this.packedDepth?t.createRenderTarget(n,o):null,this.depthTextureOpaque=this.depthTargetOpaque?this.depthTargetOpaque.texture:A.texture("image-depth","depth",s?"float":"ushort","nearest"),this.packedDepth||this.depthTextureOpaque.define(n,o),this.wboit=new VH(t,n,o),this.dpoit=new _H(t,n,o),this.marking=new zI(t,n,o),this.postprocessing=new ms(t,r,this),this.antialiasing=new JI(t,n,o),this.dof=new Pp(t,n,o),this.copyFboTarget=id(t,this.colorTarget.texture),this.copyFboPostprocessing=id(t,this.postprocessing.target.texture),this.setTransparency(i)}setTransparency(t){t==="wboit"?(this.transparencyMode=this.wboit.supported?"wboit":"blended",ir&&!this.wboit.supported&&console.log('Missing "wboit" support, falling back to "blended".')):t==="dpoit"?(this.transparencyMode=this.dpoit.supported?"dpoit":"blended",ir&&!this.dpoit.supported&&console.log('Missing "dpoit" support, falling back to "blended".')):this.transparencyMode="blended",this.depthTextureOpaque.detachFramebuffer(this.postprocessing.target.framebuffer,"depth")}get transparency(){return this.transparencyMode}getByteCount(){return this.drawTarget.getByteCount()+this.colorTarget.getByteCount()+this.transparentColorTarget.getByteCount()+this.depthTargetTransparent.getByteCount()+(this.depthTargetOpaque?this.depthTargetOpaque.getByteCount():this.depthTextureOpaque.getByteCount())+this.wboit.getByteCount()+this.dpoit.getByteCount()+this.marking.getByteCount()+this.postprocessing.getByteCount()+this.antialiasing.getByteCount()+this.dof.getByteCount()}reset(){this.wboit.reset(),this.dpoit.reset(),this.postprocessing.reset()}setSize(t,r){let n=this.colorTarget.getWidth(),o=this.colorTarget.getHeight();(t!==n||r!==o)&&(this.colorTarget.setSize(t,r),this.depthTargetTransparent.setSize(t,r),this.transparentColorTarget.setSize(t,r),this.depthTargetOpaque?this.depthTargetOpaque.setSize(t,r):this.depthTextureOpaque.define(t,r),D.update(this.copyFboTarget.values.uTexSize,Le.set(this.copyFboTarget.values.uTexSize.ref.value,t,r)),D.update(this.copyFboPostprocessing.values.uTexSize,Le.set(this.copyFboPostprocessing.values.uTexSize.ref.value,t,r))),this.wboit.supported&&this.wboit.setSize(t,r),this.dpoit.supported&&this.dpoit.setSize(t,r),this.marking.setSize(t,r),this.postprocessing.setSize(t,r),this.antialiasing.setSize(t,r),this.dof.setSize(t,r)}renderEmissiveBloom(t,r,n,o){let i=this.postprocessing.bloom;i.emissiveTarget.bind(),t.clear(!1,!0,!0);let a=!this.packedDepth;a&&this.depthTextureOpaque.attachFramebuffer(i.emissiveTarget.framebuffer,"depth"),t.renderEmissiveOpaque(n.primitives,r,this.depthTextureTransparent,a),o&&n.opacityAverage<1&&t.renderEmissiveTransparent(n.primitives,r,this.depthTextureTransparent),a&&(this.depthTextureOpaque.detachFramebuffer(i.emissiveTarget.framebuffer,"depth"),i.emissiveTarget.depthRenderbuffer?.attachFramebuffer(i.emissiveTarget.framebuffer))}_renderBloom(t,r,n,o){if(!Lm.isEnabled(o)||o.bloom.name!=="on")return!1;let i=this.postprocessing.bloom,a=o.bloom.params,A=a.mode==="emissive";return A&&n.emissiveAverage===0?!1:(A&&this.renderEmissiveBloom(t,r,n,a.transparency),n.opacityAverage>=1&&(this.transparentColorTarget.bind(),t.clear(!1,!1,!0),this.depthTargetTransparent.bind(),t.clearDepth(!0)),i.update(this.colorTarget.texture,this.transparentColorTarget.texture,i.emissiveTarget.texture,this.depthTextureOpaque,this.depthTextureTransparent,a,r,!0),i.render(r.viewport),!0)}_renderDpoit(t,r,n,o,i,a){if(!this.dpoit.supported)throw new Error("expected dpoit to be supported");this.depthTextureOpaque.attachFramebuffer(this.colorTarget.framebuffer,"depth"),t.clear(!0),n.hasOpaque&&t.renderOpaque(n.primitives,r),this.depthTextureOpaque.detachFramebuffer(this.colorTarget.framebuffer,"depth"),ms.isTransparentDepthRequired(n,a)&&(this.depthTargetTransparent.bind(),t.clearDepth(!0),n.opacityAverage<1&&t.renderDepthTransparent(n.primitives,r,this.depthTextureOpaque));let A=ms.isEnabled(a);if(n.opacityAverage<1){let s=A?this.transparentColorTarget:this.colorTarget;A&&(s.bind(),t.clear(!1,!1,!0));let c=this.dpoit.bind();t.renderDpoitTransparent(n.primitives,r,this.depthTextureOpaque,c);for(let l=0;l<o;l++){at&&this.webgl.timer.mark("DpoitPass.layer");let u=this.dpoit.bindDualDepthPeeling();t.renderDpoitTransparent(n.primitives,r,this.depthTextureOpaque,u),o>1&&(s.bind(),this.dpoit.renderBlendBack()),at&&this.webgl.timer.markEnd("DpoitPass.layer")}s.bind(),this.dpoit.render()}ms.isEnabled(a)&&this.postprocessing.render(r,n,!1,i,t.props.backgroundColor,a,t.light,t.ambientColor,this._renderBloom(t,r,n,a)),n.volumes.renderables.length>0&&t.renderVolume(n.volumes,r,this.depthTextureOpaque)}_renderWboit(t,r,n,o,i){if(!this.wboit.supported)throw new Error("expected wboit to be supported");this.depthTextureOpaque.attachFramebuffer(this.colorTarget.framebuffer,"depth"),t.clear(!0),n.hasOpaque&&t.renderOpaque(n.primitives,r),ms.isTransparentDepthRequired(n,i)&&(this.depthTargetTransparent.bind(),t.clearDepth(!0),n.opacityAverage<1&&t.renderDepthTransparent(n.primitives,r,this.depthTextureOpaque));let a=ms.isEnabled(i);if(n.opacityAverage<1){let A=a?this.transparentColorTarget:this.colorTarget;a&&(A.bind(),t.clear(!1,!1,!0)),this.wboit.bind(),t.renderWboitTransparent(n.primitives,r,this.depthTextureOpaque),A.bind(),this.wboit.render()}ms.isEnabled(i)&&this.postprocessing.render(r,n,!1,o,t.props.backgroundColor,i,t.light,t.ambientColor,this._renderBloom(t,r,n,i)),n.volumes.renderables.length>0&&(this.wboit.bind(),t.renderWboitTransparent(n.volumes,r,this.depthTextureOpaque),(a?this.postprocessing.target:this.colorTarget).bind(),this.wboit.render())}_renderBlended(t,r,n,o,i,a){if(o?this.drawTarget.bind():this.packedDepth?this.colorTarget.bind():this.depthTextureOpaque.attachFramebuffer(this.colorTarget.framebuffer,"depth"),t.clear(!0),n.hasOpaque&&t.renderOpaque(n.primitives,r),o)n.opacityAverage<1&&t.renderBlendedTransparent(n.primitives,r);else{this.depthTargetOpaque&&(this.depthTargetOpaque.bind(),t.clearDepth(!0),t.renderDepthOpaque(n.primitives,r),this.colorTarget.bind()),ms.isTransparentDepthRequired(n,a)&&(this.depthTargetTransparent.bind(),t.clearDepth(!0),n.opacityAverage<1&&t.renderDepthTransparent(n.primitives,r,this.depthTextureOpaque));let A=ms.isEnabled(a);if(n.opacityAverage<1&&(A&&(this.transparentColorTarget.bind(),t.clear(!1,!1,!0),this.packedDepth?this.colorTarget.depthRenderbuffer?.attachFramebuffer(this.transparentColorTarget.framebuffer):this.depthTextureOpaque.attachFramebuffer(this.transparentColorTarget.framebuffer,"depth")),t.renderBlendedTransparent(n.primitives,r),A&&(this.packedDepth?this.colorTarget.depthRenderbuffer?.detachFramebuffer(this.transparentColorTarget.framebuffer):this.depthTextureOpaque.detachFramebuffer(this.transparentColorTarget.framebuffer,"depth"))),A&&(this.packedDepth?this.colorTarget.depthRenderbuffer?.detachFramebuffer(this.postprocessing.target.framebuffer):this.depthTextureOpaque.detachFramebuffer(this.postprocessing.target.framebuffer,"depth"),this.postprocessing.render(r,n,!1,i,t.props.backgroundColor,a,t.light,t.ambientColor,this._renderBloom(t,r,n,a)),this.packedDepth?this.colorTarget.depthRenderbuffer?.attachFramebuffer(this.postprocessing.target.framebuffer):this.depthTextureOpaque.attachFramebuffer(this.postprocessing.target.framebuffer,"depth")),n.volumes.renderables.length>0){let s=ms.isEnabled(a)?this.postprocessing.target:this.colorTarget;this.packedDepth?this.colorTarget.depthRenderbuffer?.detachFramebuffer(s.framebuffer):this.depthTextureOpaque.detachFramebuffer(s.framebuffer,"depth"),s.bind(),t.renderVolume(n.volumes,r,this.depthTextureOpaque),this.packedDepth?this.colorTarget.depthRenderbuffer?.attachFramebuffer(s.framebuffer):this.depthTextureOpaque.attachFramebuffer(s.framebuffer,"depth"),s.bind()}}}_render(t,r,n,o,i,a,A){if(r.disabled)return;let s=n.volumes.renderables.length>0,c=ms.isEnabled(A.postprocessing),l=JI.isEnabled(A.postprocessing),u=zI.isEnabled(A.marking),g=Pp.isEnabled(A.postprocessing),{x:m,y:p,width:d,height:f}=r.viewport;t.setViewport(m,p,d,f),t.update(r,n),a&&!l&&i&&!c&&(this.drawTarget.bind(),t.clear(!1));let I=!1;this.transparencyMode==="wboit"&&this.wboit.supported?(this._renderWboit(t,r,n,a,A.postprocessing),I=!0):this.transparencyMode==="dpoit"&&this.dpoit.supported?(this._renderDpoit(t,r,n,A.dpoitIterations,a,A.postprocessing),I=!0):this._renderBlended(t,r,n,!s&&!c&&!l&&i,a,A.postprocessing);let C=c?this.postprocessing.target:!i||s||I?this.colorTarget:this.drawTarget;if(u&&n.markerAverage>0){let Q=A.marking.ghostEdgeStrength<1;Q&&n.markerAverage!==1&&(this.marking.depthTarget.bind(),t.clear(!1,!0),t.renderMarkingDepth(n.primitives,r)),this.marking.maskTarget.bind(),t.clear(!1,!0),t.renderMarkingMask(n.primitives,r,Q?this.marking.depthTarget.texture:null),this.marking.update(A.marking),this.marking.render(r.viewport,C)}else C.bind();if(o.debug.isEnabled||o.pointer.isEnabled){if(this.packedDepth||this.depthTextureOpaque.attachFramebuffer(C.framebuffer,"depth"),o.debug.isEnabled){o.debug.syncVisibility();for(let Q of o.debug.scenes)t.renderBlended(Q,r)}o.pointer.isEnabled&&(o.pointer.setCamera(r),t.update(o.pointer.camera,o.pointer.scene),t.renderBlended(o.pointer.scene,o.pointer.camera)),this.packedDepth||this.depthTextureOpaque.detachFramebuffer(C.framebuffer,"depth")}o.handle.isEnabled&&t.renderBlended(o.handle.scene,r),o.camera.isEnabled&&(o.camera.update(r),t.update(o.camera.camera,o.camera.scene),t.renderBlended(o.camera.scene,o.camera.camera));let y=!1;if(l){let Q=ms.isEnabled(A.postprocessing)?this.postprocessing.target.texture:this.colorTarget.texture;this.antialiasing.render(r,Q,i&&!g,A.postprocessing)}else i&&!Pp.isEnabled(A.postprocessing)&&(y=!0);if(g&&A.postprocessing.dof.name==="on"){let Q=JI.isEnabled(A.postprocessing)?this.antialiasing.target.texture:ms.isEnabled(A.postprocessing)?this.postprocessing.target.texture:this.colorTarget.texture;this.dof.update(r,Q,this.depthTargetOpaque?.texture||this.depthTextureOpaque,this.depthTextureTransparent,A.postprocessing.dof.params,n.boundingSphereVisible),this.dof.render(r.viewport,i?void 0:this.getColorTarget(A.postprocessing))}else i&&!JI.isEnabled(A.postprocessing)&&(y=!0);y&&(this.drawTarget.bind(),this.webgl.state.disable(this.webgl.gl.DEPTH_TEST),c?this.copyFboPostprocessing.render():(s||I)&&this.copyFboTarget.render()),this.webgl.gl.flush()}render(t,r,n){at&&this.webgl.timer.mark("DrawPass.render");let{renderer:o,camera:i,scene:a,helper:A}=t;this.postprocessing.setTransparentBackground(r.transparentBackground);let s=r.postprocessing,c=this.postprocessing.background.isEnabled(s),l=!r.transparentBackground&&!c&&Lm.isEnabled(s)&&s.bloom.name==="on"&&!(s.bloom.params.mode==="emissive"&&a.emissiveAverage===0),u=r.transparentBackground||c||l;o.setTransparentBackground(u),o.setDrawingBufferSize(this.colorTarget.getWidth(),this.colorTarget.getHeight()),o.setPixelRatio(this.webgl.pixelRatio),iB.is(i)?(at&&this.webgl.timer.mark("StereoCamera.left"),this._render(o,i.left,a,A,n,u,r),at&&this.webgl.timer.markEnd("StereoCamera.left"),at&&this.webgl.timer.mark("StereoCamera.right"),this._render(o,i.right,a,A,n,u,r),at&&this.webgl.timer.markEnd("StereoCamera.right")):this._render(o,i,a,A,n,u,r),at&&this.webgl.timer.markEnd("DrawPass.render")}getColorTarget(t){return Pp.isEnabled(t)?this.dof.target:JI.isEnabled(t)?this.antialiasing.target:ms.isEnabled(t)?this.postprocessing.target:this.colorTarget}};var lU;(n=>{function e(o,i,a){return{array:o,width:i,height:a}}n.create=e;function t(o){let{array:i,width:a,height:A}=o,s=i.length/(a*A),c=a*s;for(let l=0,u=A/2;l<u;++l)for(let g=0,m=c;g<m;++g){let p=l*c+g,d=(A-l-1)*c+g,f=i[p];i[p]=i[d],i[d]=f}return o}n.flipY=t;function r(o){let{array:i}=o,a=i instanceof Uint8Array?255:1;for(let A=0,s=i.length;A<s;A+=4){let c=i[A+3]/a;c!==0&&(i[A]=Math.min(a,i[A]/c),i[A+1]=Math.min(a,i[A+1]/c),i[A+2]=Math.min(a,i[A+2]/c))}return o}n.divideByAlpha=r})(lU||={});var Rpt={alpha:h.Numeric(.51,{min:0,max:1,step:.01},{isEssential:!0,label:"Opacity"}),colorX:h.Color(xt.red,{isEssential:!0}),colorY:h.Color(xt.green,{isEssential:!0}),colorZ:h.Color(xt.blue,{isEssential:!0}),scale:h.Numeric(.33,{min:.1,max:2,step:.1},{isEssential:!0}),location:h.Select("bottom-left",h.arrayToOptions(["bottom-left","bottom-right","top-left","top-right"])),locationOffsetX:h.Numeric(0),locationOffsetY:h.Numeric(0),originColor:h.Color(xt.grey),radiusScale:h.Numeric(.075,{min:.01,max:.3,step:.001}),showPlanes:h.Boolean(!0),planeColorXY:h.Color(xt.grey,{label:"Plane Color XY"}),planeColorXZ:h.Color(xt.grey,{label:"Plane Color XZ"}),planeColorYZ:h.Color(xt.grey,{label:"Plane Color YZ"}),showLabels:h.Boolean(!1),labelX:h.Text("X"),labelY:h.Text("Y"),labelZ:h.Text("Z"),labelColorX:h.Color(xt.grey),labelColorY:h.Color(xt.grey),labelColorZ:h.Color(xt.grey),labelOpacity:h.Numeric(1,{min:0,max:1,step:.01}),labelScale:h.Numeric(.25,{min:.1,max:1,step:.01})},YQ={axes:h.MappedStatic("on",{on:h.Group(Rpt),off:h.Group({})},{cycle:!0,description:"Show camera orientation axes"})},Jv=class{constructor(t,r={}){this.webgl=t;this.props={axes:{name:"off",params:{}}};this.pixelRatio=1;this.eachGroup=(t,r)=>{if(!OH(t))return!1;let n=!1;if(this.meshRenderObject){let o=this.meshRenderObject.values.uGroupCount.ref.value;for(let{groupId:i,instanceId:a}of t.elements){let A=a*o+i;r(Ue.ofSingleton(A))&&(n=!0)}}if(this.textRenderObject){let o=this.textRenderObject.values.uGroupCount.ref.value;for(let{groupId:i,instanceId:a}of t.elements){let A=a*o+i;r(Ue.ofSingleton(A))&&(n=!0)}}return n};this.scene=Zc.create(t,"blended"),this.camera=new Io,B.set(this.camera.up,0,1,0),B.set(this.camera.target,0,0,0),this.setProps(r)}setProps(t){this.props=Wc(this.props,r=>{if(t.axes!==void 0&&(r.axes.name=t.axes.name,t.axes.name==="on")){this.scene.clear(),this.pixelRatio=this.webgl.pixelRatio;let n={...t.axes.params,scale:t.axes.params.scale*this.pixelRatio,labelScale:t.axes.params.labelScale*this.pixelRatio};this.meshRenderObject=Npt(n),this.scene.add(this.meshRenderObject),t.axes.params.showLabels?(this.textRenderObject=Hpt(n),this.scene.add(this.textRenderObject)):this.textRenderObject=void 0,this.scene.commit(),B.set(this.camera.position,0,0,n.scale*200),Y.lookAt(this.camera.view,this.camera.position,this.camera.target,this.camera.up),r.axes.params={...t.axes.params}}})}get isEnabled(){return this.props.axes.name==="on"}getLoci(t){let{objectId:r,groupId:n,instanceId:o}=t;return(!this.meshRenderObject||r!==this.meshRenderObject.id)&&(!this.textRenderObject||r!==this.textRenderObject.id)||n===0?Ir:Lpt(this,n,o)}mark(t,r){return!Ko.is(Ko.Highlighting,r)||!uA(t)&&(!OH(t)||t.data!==this)?!1:Qn.mark(this.meshRenderObject,t,r,this.eachGroup)||Qn.mark(this.textRenderObject,t,r,this.eachGroup)}update(t){if(!this.meshRenderObject||this.props.axes.name==="off")return;this.pixelRatio!==this.webgl.pixelRatio&&this.setProps(this.props),Tpt(this.camera,t.viewport,t.viewOffset),Y.extractRotation(this.scene.view,t.view);let r=this.textRenderObject?this.textRenderObject.values.boundingSphere.ref.value.radius:this.meshRenderObject.values.boundingSphere.ref.value.radius,n=this.props.axes.params.location,o=this.props.axes.params.locationOffsetX*this.pixelRatio,i=this.props.axes.params.locationOffsetY*this.pixelRatio;n==="bottom-left"?Y.setTranslation(this.scene.view,B.create(-t.viewport.width/2+r+o,-t.viewport.height/2+r+i,0)):n==="bottom-right"?Y.setTranslation(this.scene.view,B.create(t.viewport.width/2-r-o,-t.viewport.height/2+r+i,0)):n==="top-left"?Y.setTranslation(this.scene.view,B.create(-t.viewport.width/2+r+o,t.viewport.height/2-r-i,0)):n==="top-right"?Y.setTranslation(this.scene.view,B.create(t.viewport.width/2-r-o,t.viewport.height/2-r-i,0)):Or(n)}};function Upt(e,t){let r=t.props.axes,n=r.name==="on"?r.params.labelX:"X",o=r.name==="on"?r.params.labelY:"Y",i=r.name==="on"?r.params.labelZ:"Z";switch(e){case 1:return`${n} Axis`;case 2:return`${o} Axis`;case 3:return`${i} Axis`;case 4:return`${n}${o} Plane`;case 5:return`${n}${i} Plane`;case 6:return`${o}${i} Plane`;case 7:return"Origin";default:return"Axes"}}function Lpt(e,t,r){return ec("camera-axes",e,[{groupId:t,instanceId:r}],void 0,()=>Upt(t,e))}function OH(e){return e.kind==="data-loci"&&e.tag==="camera-axes"}function Tpt(e,t,r){let{near:n,far:o}=e,i=-t.width/2,a=t.width/2,A=t.height/2,s=-t.height/2,c=(a-i)/2,l=(A-s)/2,u=(a+i)/2,g=(A+s)/2,m=u-c,p=u+c,d=g+l,f=g-l;if(r.enabled){let I=(a-i)/r.width,C=(A-s)/r.height;m+=I*r.offsetX,p=m+I*r.width,d-=C*r.offsetY,f=d-C*r.height}Y.ortho(e.projection,m,p,d,f,n,o)}function Ppt(e,t){let r=We.createState(512,256,t),n=100*e.scale,o=e.radiusScale*n,i=e.showLabels?100*e.labelScale/3:0,a=B.scale(B(),B.unitX,n-i),A=B.scale(B(),B.unitY,n-i),s=B.scale(B(),B.unitZ,n-i),c={radiusTop:o,radiusBottom:o,radialSegments:32};if(r.currentGroup=7,cn(r,B.origin,o,2),r.currentGroup=1,cn(r,a,o,2),Sn(r,B.origin,a,1,c),r.currentGroup=2,cn(r,A,o,2),Sn(r,B.origin,A,1,c),r.currentGroup=3,cn(r,s,o,2),Sn(r,B.origin,s,1,c),e.showPlanes){B.scale(a,a,.5),B.scale(A,A,.5),B.scale(s,s,.5),r.currentGroup=4,We.addTriangle(r,B.origin,a,A),We.addTriangle(r,B.origin,A,a);let l=B.add(B(),a,A);We.addTriangle(r,l,a,A),We.addTriangle(r,l,A,a),r.currentGroup=5,We.addTriangle(r,B.origin,a,s),We.addTriangle(r,B.origin,s,a);let u=B.add(B(),a,s);We.addTriangle(r,u,a,s),We.addTriangle(r,u,s,a),r.currentGroup=6,We.addTriangle(r,B.origin,A,s),We.addTriangle(r,B.origin,s,A);let g=B.add(B(),A,s);We.addTriangle(r,g,A,s),We.addTriangle(r,g,s,A)}return We.getMesh(r)}function Gpt(e,t){let r=100*e.scale,n=Ppt(e,t?.geometry);n.setBoundingSphere(we.create(B.create(r/2,r/2,r/2),r+r/4));let o=i=>{switch(i){case 1:return e.colorX;case 2:return e.colorY;case 3:return e.colorZ;case 4:return e.planeColorXY;case 5:return e.planeColorXZ;case 6:return e.planeColorYZ;case 7:return e.originColor;default:return xt.grey}};return Mr.create("axes-mesh",{},n,o,()=>1,()=>"")}function Npt(e){let t=Gpt(e);return Mr.createRenderObject(t,{...h.getDefaultValues(At.Params),...e,ignoreLight:!0,cellSize:0})}function Mpt(e,t){let r=rc.create(e,8,8,t),n=100*e.scale,o=B.scale(B(),B.unitX,n),i=B.scale(B(),B.unitY,n),a=B.scale(B(),B.unitZ,n),A=100*e.labelScale;return r.add(e.labelX,o[0],o[1],o[2],0,A,1),r.add(e.labelY,i[0],i[1],i[2],0,A,2),r.add(e.labelZ,a[0],a[1],a[2],0,A,3),r.getText()}function kpt(e,t){let r=100*e.scale,n=Mpt(e,t?.geometry);n.setBoundingSphere(we.create(B.create(r/2,r/2,r/2),r));let o=i=>{switch(i){case 1:return e.labelColorX;case 2:return e.labelColorY;case 3:return e.labelColorZ;default:return xt.grey}};return Mr.create("axes-text",{},n,o,()=>1,()=>"")}function Hpt(e){let t=kpt(e);return Mr.createRenderObject(t,{...h.getDefaultValues(tA.Params),...e,alpha:e.labelOpacity,cellSize:0})}var tFe=`
|
|
precision highp float;
|
|
precision highp sampler2D;
|
|
|
|
uniform sampler2D tShaded;
|
|
uniform sampler2D tColor;
|
|
uniform sampler2D tNormal;
|
|
uniform sampler2D tTransparentColor;
|
|
uniform sampler2D tSsaoDepth;
|
|
uniform sampler2D tSsaoDepthTransparent;
|
|
uniform sampler2D tDepthOpaque;
|
|
uniform sampler2D tDepthTransparent;
|
|
uniform sampler2D tOutlines;
|
|
uniform sampler2D tBloom;
|
|
uniform vec2 uTexSize;
|
|
|
|
uniform float uNear;
|
|
uniform float uFar;
|
|
uniform float uFogNear;
|
|
uniform float uFogFar;
|
|
uniform vec3 uFogColor;
|
|
uniform vec3 uOutlineColor;
|
|
uniform vec3 uOcclusionColor;
|
|
uniform bool uTransparentBackground;
|
|
|
|
uniform float uDenoiseThreshold;
|
|
|
|
#include common
|
|
|
|
float getViewZ(const in float depth) {
|
|
#if dOrthographic == 1
|
|
return orthographicDepthToViewZ(depth, uNear, uFar);
|
|
#else
|
|
return perspectiveDepthToViewZ(depth, uNear, uFar);
|
|
#endif
|
|
}
|
|
|
|
float getDepthOpaque(const in vec2 coords) {
|
|
#ifdef depthTextureSupport
|
|
return texture2D(tDepthOpaque, coords).r;
|
|
#else
|
|
return unpackRGBAToDepth(texture2D(tDepthOpaque, coords));
|
|
#endif
|
|
}
|
|
|
|
float getDepthTransparent(const in vec2 coords) {
|
|
#if defined(dTransparentOutline) || defined(dOcclusionEnable) || defined(dBloomEnable)
|
|
return unpackRGBAToDepthWithAlpha(texture2D(tDepthTransparent, coords)).x;
|
|
#else
|
|
return 1.0;
|
|
#endif
|
|
}
|
|
|
|
bool isBackground(const in float depth) {
|
|
// (2^24 - 1) / 2^24, max of 24-bit packed depth; also passes raw fp32.
|
|
return depth >= 0.99999994;
|
|
}
|
|
|
|
float getSsao(vec2 coords) {
|
|
float rawSsao = unpackRGToUnitInterval(texture2D(tSsaoDepth, coords).xy);
|
|
if (rawSsao > 0.999) {
|
|
return 1.0;
|
|
} else if (rawSsao > 0.001) {
|
|
return rawSsao;
|
|
}
|
|
// treat values close to 0.0 as errors and return no occlusion
|
|
return 1.0;
|
|
}
|
|
|
|
float getSsaoTransparent(vec2 coords) {
|
|
float rawSsao = unpackRGToUnitInterval(texture2D(tSsaoDepthTransparent, coords).xy);
|
|
if (rawSsao > 0.999) {
|
|
return 1.0;
|
|
} else if (rawSsao > 0.001) {
|
|
return rawSsao;
|
|
}
|
|
// treat values close to 0.0 as errors and return no occlusion
|
|
return 1.0;
|
|
}
|
|
|
|
//
|
|
|
|
// TODO: investigate
|
|
// https://interplayoflight.wordpress.com/2022/03/26/raytraced-global-illumination-denoising/
|
|
|
|
//
|
|
|
|
#define INV_SQRT_OF_2PI 0.39894228040143267793994605993439 // 1.0/SQRT_OF_2PI
|
|
#define INV_PI 0.31830988618379067153776752674503
|
|
|
|
// https://github.com/BrutPitt/glslSmartDeNoise
|
|
//
|
|
// smartDeNoise - parameters
|
|
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
//
|
|
// sampler2D tex - sampler image / texture
|
|
// vec2 uv - actual fragment coord
|
|
// float sigma > 0 - sigma Standard Deviation
|
|
// float kSigma >= 0 - sigma coefficient
|
|
// kSigma * sigma --> radius of the circular kernel
|
|
// float threshold - edge sharpening threshold
|
|
|
|
float NormalWeightStrength = 6.0;
|
|
|
|
vec4 smartDeNoise(sampler2D tex, vec2 uv) {
|
|
float sigma = 3.0;
|
|
float kSigma = 2.0;
|
|
float threshold = uDenoiseThreshold;
|
|
|
|
vec4 centrPx = texture2D(tex, uv);
|
|
if (threshold == 0.0) return centrPx;
|
|
|
|
float invSigmaQx2 = 0.5 / (sigma * sigma); // 1.0 / (sigma^2 * 2.0)
|
|
float invSigmaQx2PI = INV_PI * invSigmaQx2; // 1.0 / (sqrt(PI) * sigma)
|
|
|
|
float invThresholdSqx2 = 0.5 / (threshold * threshold); // 1.0 / (sigma^2 * 2.0)
|
|
float invThresholdSqrt2PI = INV_SQRT_OF_2PI / threshold; // 1.0 / (sqrt(2*PI) * sigma)
|
|
|
|
float zBuff = 0.0;
|
|
vec4 aBuff = vec4(0.0);
|
|
|
|
vec3 normal = texture2D(tNormal, uv).xyz;
|
|
|
|
for (int x = -6; x <= 6; ++x) {
|
|
for (int y = -6; y <= 6; ++y) {
|
|
vec2 d = vec2(float(x), float(y));
|
|
|
|
float blurFactor = exp(-dot(d , d) * invSigmaQx2) * invSigmaQx2PI;
|
|
vec2 uvSample = uv + d / uTexSize;
|
|
|
|
vec3 normalSample = texture2D(tNormal, uvSample).xyz;
|
|
float normalW = saturate(dot(normal, normalSample));
|
|
normalW = pow(normalW, NormalWeightStrength);
|
|
blurFactor *= normalW;
|
|
|
|
vec4 walkPx = texture2D(tex, uvSample);
|
|
|
|
vec4 dC = walkPx - centrPx;
|
|
float deltaFactor = exp(-dot(dC, dC) * invThresholdSqx2) * invThresholdSqrt2PI * blurFactor;
|
|
|
|
zBuff += deltaFactor;
|
|
aBuff += deltaFactor * walkPx;
|
|
}
|
|
}
|
|
|
|
if (zBuff <= EPSILON) {
|
|
return centrPx;
|
|
}
|
|
|
|
return aBuff / zBuff;
|
|
}
|
|
|
|
int squaredOutlineScale = dOutlineScale * dOutlineScale;
|
|
void getOutline(const in vec2 coords, out bool hasOpaque, out bool hasTransparent, out float opaqueDepth, out float transparentDepth, out float alpha) {
|
|
vec2 invTexSize = 1.0 / uTexSize;
|
|
|
|
hasOpaque = false;
|
|
hasTransparent = false;
|
|
opaqueDepth = 1.0;
|
|
transparentDepth = 1.0;
|
|
alpha = 0.0;
|
|
for (int y = -dOutlineScale; y <= dOutlineScale; y++) {
|
|
for (int x = -dOutlineScale; x <= dOutlineScale; x++) {
|
|
if (x * x + y * y > squaredOutlineScale) {
|
|
continue;
|
|
}
|
|
|
|
vec2 sampleCoords = coords + vec2(float(x), float(y)) * invTexSize;
|
|
|
|
vec4 sampleOutlineCombined = texture2D(tOutlines, sampleCoords);
|
|
float sampleOpaqueDepth = unpackRGToUnitInterval(sampleOutlineCombined.gb);
|
|
float sampleTransparentDepth = sampleOutlineCombined.a;
|
|
vec2 sampleFlagWithAlpha = unpack2x4(sampleOutlineCombined.r);
|
|
|
|
float sampleFlag = sampleFlagWithAlpha.x;
|
|
float sampleAlpha = clamp(sampleFlagWithAlpha.y * 0.5, 0.01, 1.0);
|
|
|
|
if ((sampleFlag > 0.20 && sampleFlag < 0.30) || (sampleFlag > 0.70 && sampleFlag < 0.80)) { // transparent || both
|
|
if (sampleOpaqueDepth < opaqueDepth) {
|
|
hasOpaque = true;
|
|
opaqueDepth = sampleOpaqueDepth;
|
|
}
|
|
}
|
|
|
|
if ((((sampleFlag > 0.45 && sampleFlag < 0.55) || (sampleFlag > 0.70 && sampleFlag < 0.80))) && sampleTransparentDepth < transparentDepth) { // transparent || both
|
|
hasTransparent = true;
|
|
transparentDepth = sampleTransparentDepth;
|
|
alpha = sampleAlpha;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
void main() {
|
|
vec2 coords = gl_FragCoord.xy / uTexSize;
|
|
|
|
#ifdef dDenoise
|
|
vec4 color = smartDeNoise(tColor, coords);
|
|
#else
|
|
vec4 color = texture2D(tColor, coords);
|
|
#endif
|
|
|
|
float opaqueDepth = getDepthOpaque(coords);
|
|
float backgroundViewZ = 2.0 * uFar;
|
|
float opaqueSelfViewZ = isBackground(opaqueDepth) ? backgroundViewZ : getViewZ(opaqueDepth);
|
|
float fogFactor = smoothstep(uFogNear, uFogFar, abs(opaqueSelfViewZ));
|
|
float fogAlpha = 1.0 - fogFactor;
|
|
|
|
float transparentDepth = 1.0;
|
|
#ifdef dBlendTransparency
|
|
bool blendTransparency = true;
|
|
vec4 transparentColor = texture2D(tTransparentColor, coords);
|
|
|
|
transparentDepth = getDepthTransparent(coords);
|
|
#endif
|
|
|
|
float alpha = 1.0;
|
|
if (!uTransparentBackground) {
|
|
// mix opaque objects with background color
|
|
color.rgb = mix(color.rgb, uFogColor, fogFactor);
|
|
} else {
|
|
// pre-multiplied alpha expected for transparent background
|
|
alpha = fogAlpha;
|
|
color.rgb *= fogAlpha;
|
|
}
|
|
|
|
#if defined(dOcclusionEnable)
|
|
if (!isBackground(opaqueDepth)) {
|
|
float occlusionFactor = getSsao(coords);
|
|
|
|
if (!uTransparentBackground) {
|
|
color.rgb = mix(mix(uOcclusionColor, uFogColor, fogFactor), color.rgb, occlusionFactor);
|
|
} else {
|
|
color.rgb = mix(uOcclusionColor * (1.0 - fogFactor), color.rgb, occlusionFactor);
|
|
}
|
|
}
|
|
#ifdef dBlendTransparency
|
|
if (!isBackground(transparentDepth)) {
|
|
float viewDist = abs(getViewZ(transparentDepth));
|
|
float fogFactor = smoothstep(uFogNear, uFogFar, viewDist);
|
|
float occlusionFactor = getSsaoTransparent(coords);
|
|
transparentColor.rgb = mix(uOcclusionColor * (1.0 - fogFactor), transparentColor.rgb, occlusionFactor);
|
|
}
|
|
#endif
|
|
#endif
|
|
|
|
#ifdef dOutlineEnable
|
|
bool hasOpaque;
|
|
bool hasTransparent;
|
|
float outlineOpaqueDepth;
|
|
float outlineTransparentDepth;
|
|
float outlineAlpha;
|
|
getOutline(coords, hasOpaque, hasTransparent, outlineOpaqueDepth, outlineTransparentDepth, outlineAlpha);
|
|
|
|
if (hasOpaque) {
|
|
float viewDist = abs(getViewZ(outlineOpaqueDepth));
|
|
float fogFactor = smoothstep(uFogNear, uFogFar, viewDist);
|
|
if (!uTransparentBackground) {
|
|
color.rgb = mix(uOutlineColor, uFogColor, fogFactor);
|
|
} else {
|
|
alpha = 1.0 - fogFactor;
|
|
color.rgb = mix(uOutlineColor, vec3(0.0), fogFactor);
|
|
}
|
|
}
|
|
|
|
#ifdef dBlendTransparency
|
|
if (hasTransparent) {
|
|
if (hasOpaque && outlineOpaqueDepth < outlineTransparentDepth) {
|
|
blendTransparency = false;
|
|
} else {
|
|
float finalOutlineAlpha = clamp(outlineAlpha * 2.0, 0.0, 1.0);
|
|
float viewDist = abs(getViewZ(outlineTransparentDepth));
|
|
float fogFactor = smoothstep(uFogNear, uFogFar, viewDist);
|
|
float finalAlpha = max(transparentColor.a, finalOutlineAlpha * (1.0 - fogFactor));
|
|
transparentColor.a = finalAlpha;
|
|
transparentColor.rgb = uOutlineColor * finalAlpha;
|
|
}
|
|
}
|
|
#endif
|
|
#endif
|
|
|
|
#ifdef dBlendTransparency
|
|
if (blendTransparency) {
|
|
if (transparentColor.a != 0.0) {
|
|
// blending
|
|
color = transparentColor + color * (1.0 - transparentColor.a);
|
|
alpha = transparentColor.a + alpha * (1.0 - transparentColor.a);
|
|
}
|
|
}
|
|
#endif
|
|
|
|
#ifdef dBloomEnable
|
|
vec4 bloom = texture2D(tBloom, coords);
|
|
// additive glow over geometry and background alike; alpha just covers the premultiplied rgb
|
|
color.rgb += bloom.rgb;
|
|
alpha = min(max(alpha, max(color.r, max(color.g, color.b))), 1.0);
|
|
#endif
|
|
|
|
gl_FragColor = vec4(color.rgb, alpha);
|
|
}
|
|
`;var rFe=`
|
|
precision highp int;
|
|
precision highp float;
|
|
precision highp sampler2D;
|
|
|
|
uniform sampler2D tColor;
|
|
uniform sampler2D tNormal;
|
|
uniform sampler2D tShaded;
|
|
uniform sampler2D tThickness;
|
|
uniform sampler2D tAccumulate;
|
|
uniform sampler2D tDepth;
|
|
uniform vec2 uTexSize;
|
|
uniform vec4 uBounds;
|
|
|
|
uniform float uNear;
|
|
uniform float uFar;
|
|
uniform float uFogNear;
|
|
uniform float uFogFar;
|
|
uniform vec3 uFogColor;
|
|
|
|
#if dLightCount != 0
|
|
uniform vec3 uLightDirection[dLightCount];
|
|
uniform vec3 uLightColor[dLightCount];
|
|
#endif
|
|
uniform vec3 uAmbientColor;
|
|
uniform vec3 uLightStrength;
|
|
|
|
uniform int uFrameNo;
|
|
|
|
uniform float uRayDistance;
|
|
uniform float uMinThickness;
|
|
uniform float uThicknessFactor;
|
|
uniform float uThickness;
|
|
|
|
uniform float uShadowSoftness;
|
|
uniform float uShadowThickness;
|
|
|
|
uniform mat4 uProjection;
|
|
uniform mat4 uInvProjection;
|
|
|
|
#include common
|
|
|
|
// parts adapted from
|
|
// - https://blog.demofox.org/2020/05/25/casual-shadertoy-path-tracing-1-basic-camera-diffuse-emissive/
|
|
// - https://github.com/0beqz/realism-effects/blob/v2-debug/src/ssgi/shader/ssgi.frag
|
|
|
|
//
|
|
|
|
// after a hit, it moves the ray this far along the normal away from a surface.
|
|
// Helps prevent incorrect intersections when rays bounce off of objects.
|
|
#define RayPosNormalNudge 0.0001
|
|
|
|
#if __VERSION__ == 100
|
|
#define StateType float
|
|
|
|
// from https://www.shadertoy.com/view/4djSRW
|
|
float hash14(vec4 p4) {
|
|
p4 = fract(p4 * vec4(0.1031, 0.1030, 0.0973, 0.1099));
|
|
p4 += dot(p4, p4.wzxy + 33.33);
|
|
return fract((p4.x + p4.y) * (p4.z + p4.w));
|
|
}
|
|
|
|
float randomFloat(inout float state) {
|
|
state += 0.06711056;
|
|
return 1.0 - hash14(vec4(gl_FragCoord.xy, float(uFrameNo), state));
|
|
}
|
|
#else
|
|
#define StateType uint
|
|
|
|
// https://www.pcg-random.org/
|
|
// https://jcgt.org/published/0009/03/02/
|
|
uint pcg(inout uint seed) {
|
|
seed = seed * 747796405u + 2891336453u;
|
|
uint word = ((seed >> ((seed >> 28u) + 4u)) ^ seed) * 277803737u;
|
|
return (word >> 22u) ^ word;
|
|
}
|
|
|
|
float randomFloat(inout uint state) {
|
|
return float(pcg(state)) / 4294967296.0;
|
|
}
|
|
#endif
|
|
|
|
vec3 randomUnitVector(inout StateType state) {
|
|
float z = randomFloat(state) * 2.0 - 1.0;
|
|
float a = randomFloat(state) * TWO_PI;
|
|
float r = sqrt(1.0 - z * z);
|
|
float x = r * cos(a);
|
|
float y = r * sin(a);
|
|
return vec3(x, y, z);
|
|
}
|
|
|
|
struct RayHitInfo {
|
|
bool missed;
|
|
vec3 position;
|
|
vec3 normal;
|
|
vec3 color;
|
|
vec3 emissive;
|
|
};
|
|
|
|
//
|
|
|
|
float getDepth(const in vec2 coords) {
|
|
vec2 c = vec2(clamp(coords.x, uBounds.x, uBounds.z), clamp(coords.y, uBounds.y, uBounds.w));
|
|
return texture2D(tDepth, c).r;
|
|
}
|
|
|
|
float getThickness(const in vec2 coords) {
|
|
vec2 c = vec2(clamp(coords.x, uBounds.x, uBounds.z), clamp(coords.y, uBounds.y, uBounds.w));
|
|
return unpackRGBAToDepth(texture2D(tThickness, c));
|
|
}
|
|
|
|
bool isBackground(const in float depth) {
|
|
return depth == 1.0;
|
|
}
|
|
|
|
float getViewZ(const in float depth) {
|
|
#if dOrthographic == 1
|
|
return orthographicDepthToViewZ(depth, uNear, uFar);
|
|
#else
|
|
return perspectiveDepthToViewZ(depth, uNear, uFar);
|
|
#endif
|
|
}
|
|
|
|
vec2 viewSpaceToScreenSpace(const vec3 position) {
|
|
vec4 projectedCoord = uProjection * vec4(position, 1.0);
|
|
projectedCoord.xy /= projectedCoord.w;
|
|
// [-1, 1] --> [0, 1] (NDC to screen position)
|
|
projectedCoord.xy = projectedCoord.xy * 0.5 + 0.5;
|
|
return projectedCoord.xy;
|
|
}
|
|
|
|
vec2 binarySearch(inout vec3 dir, inout vec3 hitPos) {
|
|
float rayHitDepthDifference;
|
|
vec2 coords;
|
|
|
|
dir *= 0.5;
|
|
hitPos -= dir;
|
|
|
|
for (int i = 0; i < dRefineSteps; i++) {
|
|
coords = viewSpaceToScreenSpace(hitPos);
|
|
float depth = getDepth(coords);
|
|
float z = getViewZ(depth);
|
|
rayHitDepthDifference = z - hitPos.z;
|
|
|
|
dir *= 0.5;
|
|
if (rayHitDepthDifference >= 0.0) {
|
|
hitPos -= dir;
|
|
} else {
|
|
hitPos += dir;
|
|
}
|
|
}
|
|
|
|
coords = viewSpaceToScreenSpace(hitPos);
|
|
|
|
return coords;
|
|
}
|
|
|
|
float calculateGrowthFactor(float begin, float end, float steps) {
|
|
return pow(end / begin, 1.0 / steps);
|
|
}
|
|
|
|
vec2 rayMarch(in vec3 dir, in float thickness, inout vec3 hitPos, out bool missed) {
|
|
float rayHitDepthDifference;
|
|
vec2 coords;
|
|
|
|
float begin = float(dFirstStepSize);
|
|
dir *= begin;
|
|
missed = false;
|
|
float gf = calculateGrowthFactor(begin, uRayDistance, float(dSteps));
|
|
|
|
for (int i = 1; i < dSteps; i++) {
|
|
hitPos += dir;
|
|
dir *= gf;
|
|
|
|
coords = viewSpaceToScreenSpace(hitPos);
|
|
float depth = getDepth(coords);
|
|
float z = getViewZ(depth);
|
|
rayHitDepthDifference = z - hitPos.z;
|
|
|
|
if (thickness == 0.0) {
|
|
#ifdef dThicknessMode_auto
|
|
thickness = max(uMinThickness, (getViewZ(getThickness(coords)) - z) * uThicknessFactor * texture2D(tColor, coords).a);
|
|
#else
|
|
thickness = uThickness;
|
|
#endif
|
|
}
|
|
|
|
if (rayHitDepthDifference >= 0.0 && rayHitDepthDifference < thickness) {
|
|
if (dRefineSteps == 0) {
|
|
return coords;
|
|
} else {
|
|
return binarySearch(dir, hitPos);
|
|
}
|
|
}
|
|
}
|
|
|
|
missed = true;
|
|
|
|
return coords;
|
|
}
|
|
|
|
//
|
|
|
|
void trace(in vec3 rayPos, in vec3 rayDir, inout RayHitInfo hitInfo) {
|
|
vec3 hitPos = vec3(rayPos);
|
|
bool missed;
|
|
vec2 coords;
|
|
coords = rayMarch(rayDir, 0.0, hitPos, missed);
|
|
|
|
hitInfo.missed = missed;
|
|
hitInfo.position = hitPos;
|
|
hitInfo.normal = -texture2D(tNormal, coords).rgb;
|
|
hitInfo.color = texture2D(tColor, coords).rgb;
|
|
hitInfo.emissive = texture2D(tColor, coords).rgb * texture2D(tNormal, coords).a * 2.0;
|
|
|
|
float depth = getDepth(coords);
|
|
if (isBackground(depth)) {
|
|
hitInfo.emissive = vec3(0.0);
|
|
}
|
|
}
|
|
|
|
vec3 viewPos;
|
|
|
|
vec3 colorForRay(in vec3 startRayPos, in vec3 startRayDir, inout StateType rngState) {
|
|
vec3 ret = vec3(0.0, 0.0, 0.0);
|
|
|
|
vec3 throughput = vec3(1.0, 1.0, 1.0);
|
|
vec3 rayPos = startRayPos;
|
|
vec3 rayDir = startRayDir;
|
|
|
|
RayHitInfo hitInfo;
|
|
RayHitInfo prevHitInfo;
|
|
|
|
for (int bounceIndex = 0; bounceIndex <= dBounces; ++bounceIndex) {
|
|
// shoot a ray out into the world
|
|
if (bounceIndex == 0) {
|
|
vec2 coords = gl_FragCoord.xy / uTexSize;
|
|
float depth = getDepth(coords);
|
|
|
|
hitInfo.missed = false;
|
|
hitInfo.position = screenSpaceToViewSpace(vec3(coords, depth), uInvProjection);
|
|
hitInfo.normal = -texture2D(tNormal, coords).rgb;
|
|
hitInfo.color = texture2D(tShaded, coords).rgb;
|
|
hitInfo.emissive = texture2D(tColor, coords).rgb * texture2D(tNormal, coords).a;
|
|
|
|
// shadow
|
|
#ifdef dShadowEnable
|
|
#if dLightCount != 0
|
|
vec3 directLight = vec3(uAmbientColor);
|
|
#pragma unroll_loop_start
|
|
bool missed;
|
|
vec3 hitPos;
|
|
for (int i = 0; i < dLightCount; ++i) {
|
|
missed = false;
|
|
hitPos = viewPos + hitInfo.normal * RayPosNormalNudge;
|
|
hitPos += -uLightDirection[i] * (randomFloat(rngState));
|
|
rayMarch(-uLightDirection[i] + randomUnitVector(rngState) * uShadowSoftness, uShadowThickness, hitPos, missed);
|
|
if (missed) directLight += uLightColor[i];
|
|
}
|
|
#pragma unroll_loop_end
|
|
hitInfo.color *= directLight / uLightStrength;
|
|
#endif
|
|
#endif
|
|
|
|
if (hitInfo.normal == vec3(0.0)) {
|
|
hitInfo.missed = true;
|
|
}
|
|
} else {
|
|
prevHitInfo = hitInfo;
|
|
trace(rayPos, rayDir, hitInfo);
|
|
}
|
|
|
|
// if the ray missed, we are done
|
|
if (hitInfo.missed) {
|
|
vec3 accIrradiance = vec3(1.0);
|
|
#ifdef dGlow
|
|
if (bounceIndex > 1) {
|
|
accIrradiance = uLightStrength;
|
|
}
|
|
#else
|
|
if (bounceIndex > 1) {
|
|
accIrradiance = uAmbientColor;
|
|
#if dLightCount != 0
|
|
#pragma unroll_loop_start
|
|
float dotNL;
|
|
vec3 irradiance;
|
|
for (int i = 0; i < dLightCount; ++i) {
|
|
dotNL = saturate(dot(prevHitInfo.normal, -uLightDirection[i]));
|
|
irradiance = dotNL * uLightColor[i];
|
|
accIrradiance += irradiance;
|
|
}
|
|
#pragma unroll_loop_end
|
|
#endif
|
|
}
|
|
#endif
|
|
ret += prevHitInfo.color * accIrradiance * throughput;
|
|
break;
|
|
}
|
|
|
|
// add emissive light
|
|
ret += hitInfo.emissive * throughput;
|
|
|
|
// update the ray position
|
|
rayPos = hitInfo.position + hitInfo.normal * RayPosNormalNudge;
|
|
|
|
// new ray direction from normal oriented cosine weighted hemisphere sample
|
|
rayDir = normalize(hitInfo.normal + randomUnitVector(rngState));
|
|
|
|
if (bounceIndex == 0) {
|
|
continue;
|
|
}
|
|
|
|
// update the colorMultiplier.
|
|
throughput *= hitInfo.color;
|
|
|
|
// Russian Roulette
|
|
// As the throughput gets smaller, the ray is more likely to get terminated early.
|
|
// Survivors have their value boosted to make up for fewer samples being in the average.
|
|
{
|
|
float p = max(throughput.r, max(throughput.g, throughput.b));
|
|
if (randomFloat(rngState) > p)
|
|
break;
|
|
|
|
// Add the energy we 'lose' by randomly terminating paths
|
|
throughput *= 1.0 / p;
|
|
}
|
|
}
|
|
|
|
// return pixel color
|
|
return ret;
|
|
}
|
|
|
|
void main() {
|
|
vec2 coords = gl_FragCoord.xy / uTexSize;
|
|
float depth = getDepth(coords);
|
|
|
|
if (isBackground(depth)) {
|
|
gl_FragColor = texture2D(tColor, coords);
|
|
return;
|
|
}
|
|
|
|
#if __VERSION__ == 100
|
|
float rngState = 26699.0;
|
|
#else
|
|
// initialize a random number state based on gl_FragCoord and uFrameNo
|
|
uint rngState = uint(uint(gl_FragCoord.x) * 1973u + uint(gl_FragCoord.y) * 9277u + uint(uFrameNo) * 26699u) | 1u;
|
|
#endif
|
|
|
|
vec3 cameraPos = vec3(0.0, 0.0, 0.0);
|
|
viewPos = screenSpaceToViewSpace(vec3(coords, depth), uInvProjection);
|
|
vec3 rayDir = normalize(viewPos);
|
|
|
|
// raytrace for this pixel
|
|
vec3 color = vec3(0.0, 0.0, 0.0);
|
|
for (int index = 0; index < int(dRendersPerFrame); ++index) {
|
|
color += colorForRay(cameraPos, rayDir, rngState) / float(dRendersPerFrame);
|
|
}
|
|
|
|
// average the frames together
|
|
vec4 lastFrameColor = texture2D(tAccumulate, coords);
|
|
float blend = (uFrameNo < 1 || lastFrameColor.a == 0.0) ? 1.0 : 1.0 / (1.0 + (1.0 / lastFrameColor.a));
|
|
color = mix(lastFrameColor.rgb, color, blend);
|
|
|
|
// show the result
|
|
gl_FragColor = vec4(color, blend);
|
|
}
|
|
`;var nFe=`
|
|
precision highp float;
|
|
precision highp sampler2D;
|
|
|
|
uniform sampler2D tColor;
|
|
uniform vec2 uTexSize;
|
|
uniform float uWeight;
|
|
|
|
void main() {
|
|
vec2 coords = gl_FragCoord.xy / uTexSize;
|
|
gl_FragColor = texture2D(tColor, coords) * uWeight;
|
|
}
|
|
`;var oFe={rendersPerFrame:h.Interval([1,16],{min:1,max:64,step:1},{description:"Number of rays per pixel each frame. May be adjusted to reach targetFps but will stay within given interval."}),targetFps:h.Numeric(30,{min:0,max:120,step:.1},{description:"Target FPS per frame. If observed FPS is lower or higher, some parameters may get adjusted."}),steps:h.Numeric(32,{min:1,max:1024,step:1}),firstStepSize:h.Numeric(.01,{min:.001,max:1,step:.001}),refineSteps:h.Numeric(4,{min:0,max:8,step:1},{description:"Number of refine steps per ray hit. May be lower to reach targetFps."}),rayDistance:h.Numeric(256,{min:1,max:8192,step:1},{description:"Maximum distance a ray can travel (in world units)."}),thicknessMode:h.Select("auto",h.arrayToOptions(["auto","fixed"])),minThickness:h.Numeric(.5,{min:.1,max:16,step:.1},{hideIf:e=>e.thicknessMode==="fixed"}),thicknessFactor:h.Numeric(1,{min:.1,max:2,step:.05},{hideIf:e=>e.thicknessMode==="fixed"}),thickness:h.Numeric(4,{min:.1,max:512,step:.1},{hideIf:e=>e.thicknessMode==="auto"}),bounces:h.Numeric(4,{min:1,max:32,step:1},{description:"Number of bounces for each ray."}),glow:h.Boolean(!0,{description:"Bounced rays always get the full light. This produces a slight glowing effect."}),shadowEnable:h.Boolean(!1),shadowSoftness:h.Numeric(.1,{min:.01,max:1,step:.01}),shadowThickness:h.Numeric(.5,{min:.1,max:32,step:.1})},JH=class{constructor(t,r){this.webgl=t;this.drawPass=r;this.clearAdjustedProps=!0;this.prevTime=0;this.currTime=0;this.rendersPerFrame=1;this.refineSteps=1;this.steps=16;let{extensions:{drawBuffers:n,colorBufferHalfFloat:o,textureHalfFloat:i},resources:a,isWebGL2:A}=t,{depthTextureOpaque:s}=r,c=s.getWidth(),l=s.getHeight();A?(this.shadedTextureOpaque=a.texture("image-uint8","rgba","ubyte","nearest"),this.shadedTextureOpaque.define(c,l),this.normalTextureOpaque=o&&i?a.texture("image-float16","rgba","fp16","nearest"):a.texture("image-float32","rgba","float","nearest"),this.normalTextureOpaque.define(c,l),this.colorTextureOpaque=a.texture("image-uint8","rgba","ubyte","nearest"),this.colorTextureOpaque.define(c,l)):(this.shadedTextureOpaque=a.texture("image-float32","rgba","float","nearest"),this.shadedTextureOpaque.define(c,l),this.normalTextureOpaque=a.texture("image-float32","rgba","float","nearest"),this.normalTextureOpaque.define(c,l),this.colorTextureOpaque=a.texture("image-float32","rgba","float","nearest"),this.colorTextureOpaque.define(c,l)),this.framebuffer=a.framebuffer(),this.framebuffer.bind(),n.drawBuffers([n.COLOR_ATTACHMENT0,n.COLOR_ATTACHMENT1,n.COLOR_ATTACHMENT2]),this.shadedTextureOpaque.attachFramebuffer(this.framebuffer,"color0"),this.normalTextureOpaque.attachFramebuffer(this.framebuffer,"color1"),this.colorTextureOpaque.attachFramebuffer(this.framebuffer,"color2"),this.thicknessTarget=t.createRenderTarget(c,l,!0,"uint8","nearest"),this.holdTarget=t.createRenderTarget(c,l,!1,"float32"),this.accumulateTarget=t.createRenderTarget(c,l,!1,"float32"),this.composeTarget=t.createRenderTarget(c,l,!1,"uint8","linear"),this.traceRenderable=Ypt(t,this.colorTextureOpaque,this.normalTextureOpaque,this.shadedTextureOpaque,this.thicknessTarget.texture,this.accumulateTarget.texture,this.drawPass.depthTextureOpaque),this.accumulateRenderable=zpt(t,this.holdTarget.texture)}getByteCount(){return this.thicknessTarget.getByteCount()+this.holdTarget.getByteCount()+this.accumulateTarget.getByteCount()+this.composeTarget.getByteCount()+this.colorTextureOpaque.getByteCount()+this.normalTextureOpaque.getByteCount()+this.shadedTextureOpaque.getByteCount()}renderInput(t,r,n,o){at&&this.webgl.timer.mark("TracePass.renderInput");let{gl:i,state:a}=this.webgl;this.framebuffer.bind(),this.drawPass.depthTextureOpaque.attachFramebuffer(this.framebuffer,"depth"),t.clear(!0),t.renderTracing(n.primitives,r),o.thicknessMode==="auto"&&(this.thicknessTarget.bind(),a.clearColor(0,0,0,0),i.clear(i.COLOR_BUFFER_BIT|i.DEPTH_BUFFER_BIT),t.renderDepthOpaqueBack(n.primitives,r)),at&&this.webgl.timer.markEnd("TracePass.renderInput")}setSize(t,r){let n=this.composeTarget.getWidth(),o=this.composeTarget.getHeight();(t!==n||r!==o)&&(this.thicknessTarget.setSize(t,r),this.holdTarget.setSize(t,r),this.accumulateTarget.setSize(t,r),this.composeTarget.setSize(t,r),this.colorTextureOpaque.define(t,r),this.normalTextureOpaque.define(t,r),this.shadedTextureOpaque.define(t,r),D.update(this.traceRenderable.values.uTexSize,Le.set(this.traceRenderable.values.uTexSize.ref.value,t,r)),D.update(this.accumulateRenderable.values.uTexSize,Le.set(this.accumulateRenderable.values.uTexSize.ref.value,t,r)))}reset(){let{drawBuffers:t}=this.webgl.extensions;this.framebuffer.bind(),t.drawBuffers([t.COLOR_ATTACHMENT0,t.COLOR_ATTACHMENT1,t.COLOR_ATTACHMENT2]),this.shadedTextureOpaque.attachFramebuffer(this.framebuffer,"color0"),this.normalTextureOpaque.attachFramebuffer(this.framebuffer,"color1"),this.colorTextureOpaque.attachFramebuffer(this.framebuffer,"color2"),this.restart(!0)}restart(t=!1){let{gl:r,state:n}=this.webgl;this.accumulateTarget.bind(),n.clearColor(0,0,0,0),r.clear(r.COLOR_BUFFER_BIT),this.composeTarget.bind(),n.clearColor(0,0,0,0),r.clear(r.COLOR_BUFFER_BIT),t&&(this.prevTime=0,this.currTime=0,this.clearAdjustedProps=!0)}increaseAdjustedProps(t){this.steps+=1,this.steps>t.steps&&(this.refineSteps+=1),this.refineSteps>t.refineSteps&&(this.rendersPerFrame+=1)}decreaseAdjustedProps(t){let r=Math.min(1,t.refineSteps);this.rendersPerFrame-=1,this.rendersPerFrame<1&&(this.refineSteps-=1),this.refineSteps<r&&(this.steps-=1)}getAdjustedProps(t,r){this.currTime=co();let n=Math.min(1,t.refineSteps),o=Math.round(t.steps/2);if(this.clearAdjustedProps&&(this.rendersPerFrame=t.rendersPerFrame[0],this.refineSteps=n,this.steps=o,this.clearAdjustedProps=!1),r>0){let i=1e3/t.targetFps,a=this.currTime-this.prevTime,A=Math.round(a/i);if(A>=2)for(;A>0;)this.decreaseAdjustedProps(t),A-=1;else a<i?this.increaseAdjustedProps(t):a>i+.5&&this.decreaseAdjustedProps(t)}return this.prevTime=this.currTime,this.rendersPerFrame=$t(this.rendersPerFrame,t.rendersPerFrame[0],t.rendersPerFrame[1]),this.refineSteps=$t(this.refineSteps,n,t.refineSteps),this.steps=$t(this.steps,o,t.steps),{rendersPerFrame:r===0?Math.ceil(this.rendersPerFrame/2):this.rendersPerFrame,refineSteps:r===0?n:this.refineSteps,steps:r===0?o:this.steps}}render(t,r,n,o,i){let{rendersPerFrame:a,refineSteps:A,steps:s}=this.getAdjustedProps(n,o);at&&this.webgl.timer.mark("TracePass.render",{note:`${a} rendersPerFrame, ${A} refineSteps, ${s} steps`});let{renderer:c,camera:l,scene:u}=t,{gl:g,state:m}=this.webgl,{x:p,y:d,width:f,height:I}=l.viewport;(o===0||i)&&(c.setTransparentBackground(r),c.setDrawingBufferSize(this.composeTarget.getWidth(),this.composeTarget.getHeight()),c.setPixelRatio(this.webgl.pixelRatio),c.setViewport(p,d,f,I),c.update(l,u),this.renderInput(c,l,u,n)),m.disable(g.BLEND),m.disable(g.DEPTH_TEST),m.disable(g.CULL_FACE),m.depthMask(!1),m.viewport(p,d,f,I),m.scissor(p,d,f,I);let C=Y.identity();Y.invert(C,l.projection);let y=l.state.mode==="orthographic"?1:0,[Q,E]=this.traceRenderable.values.uTexSize.ref.value,b=l.viewport,x=B();B.scale(x,ke.toArrayNormalized(c.props.ambientColor,x,0),c.props.ambientIntensity);let S=B.clone(x);for(let R=0,T=c.light.count;R<T;++R){let L=B.fromArray(B(),c.light.color,R*3);B.add(S,S,L)}this.holdTarget.bind();let w=!1;D.update(this.traceRenderable.values.uFrameNo,o),this.traceRenderable.values.dRendersPerFrame.ref.value!==a&&(D.update(this.traceRenderable.values.dRendersPerFrame,a),w=!0),D.update(this.traceRenderable.values.uProjection,l.projection),D.update(this.traceRenderable.values.uInvProjection,C),lr.set(this.traceRenderable.values.uBounds.ref.value,b.x/Q,b.y/E,(b.x+b.width)/Q,(b.y+b.height)/E),D.update(this.traceRenderable.values.uBounds,this.traceRenderable.values.uBounds.ref.value),D.updateIfChanged(this.traceRenderable.values.uNear,l.near),D.updateIfChanged(this.traceRenderable.values.uFar,l.far),D.updateIfChanged(this.traceRenderable.values.uFogFar,l.fogFar),D.updateIfChanged(this.traceRenderable.values.uFogNear,l.fogNear),D.update(this.traceRenderable.values.uFogColor,ke.toVec3Normalized(this.traceRenderable.values.uFogColor.ref.value,c.props.backgroundColor)),this.traceRenderable.values.dOrthographic.ref.value!==y&&(D.update(this.traceRenderable.values.dOrthographic,y),w=!0),D.update(this.traceRenderable.values.uLightDirection,c.light.direction),D.update(this.traceRenderable.values.uLightColor,c.light.color),this.traceRenderable.values.dLightCount.ref.value!==c.light.count&&(D.update(this.traceRenderable.values.dLightCount,c.light.count),w=!0),D.update(this.traceRenderable.values.uAmbientColor,x),D.update(this.traceRenderable.values.uLightStrength,S),this.traceRenderable.values.dGlow.ref.value!==n.glow&&(D.update(this.traceRenderable.values.dGlow,n.glow),w=!0),this.traceRenderable.values.dBounces.ref.value!==n.bounces&&(D.update(this.traceRenderable.values.dBounces,n.bounces),w=!0),this.traceRenderable.values.dSteps.ref.value!==s&&(D.update(this.traceRenderable.values.dSteps,s),w=!0),this.traceRenderable.values.dFirstStepSize.ref.value!==n.firstStepSize&&(D.update(this.traceRenderable.values.dFirstStepSize,n.firstStepSize),w=!0),this.traceRenderable.values.dRefineSteps.ref.value!==A&&(D.update(this.traceRenderable.values.dRefineSteps,A),w=!0),D.updateIfChanged(this.traceRenderable.values.uRayDistance,n.rayDistance),this.traceRenderable.values.dThicknessMode.ref.value!==n.thicknessMode&&(D.update(this.traceRenderable.values.dThicknessMode,n.thicknessMode),w=!0),D.updateIfChanged(this.traceRenderable.values.uMinThickness,n.minThickness),D.updateIfChanged(this.traceRenderable.values.uThicknessFactor,n.thicknessFactor),D.updateIfChanged(this.traceRenderable.values.uThickness,n.thickness),this.traceRenderable.values.dShadowEnable.ref.value!==n.shadowEnable&&(D.update(this.traceRenderable.values.dShadowEnable,n.shadowEnable),w=!0),D.updateIfChanged(this.traceRenderable.values.uShadowSoftness,n.shadowSoftness),D.updateIfChanged(this.traceRenderable.values.uShadowThickness,n.shadowThickness),w&&this.traceRenderable.update(),at&&this.webgl.timer.mark("TracePass.renderTrace"),this.traceRenderable.render(),at&&this.webgl.timer.markEnd("TracePass.renderTrace"),this.accumulateTarget.bind(),this.accumulateRenderable.render(),at&&this.webgl.timer.markEnd("TracePass.render")}},Vpt={...Wn,tColor:Ft("texture","rgba","ubyte","nearest"),tNormal:Ft("texture","rgba","ubyte","nearest"),tShaded:Ft("texture","rgba","ubyte","nearest"),tThickness:Ft("texture","rgba","ubyte","nearest"),tAccumulate:Ft("texture","rgba","ubyte","nearest"),tDepth:Ft("texture","rgba","ubyte","nearest"),uTexSize:Re("v2"),dOrthographic:bt("number"),uNear:Re("f"),uFar:Re("f"),uFogNear:Re("f"),uFogFar:Re("f"),uFogColor:Re("v3"),uProjection:Re("m4"),uInvProjection:Re("m4"),uBounds:Re("v4"),uLightDirection:Re("v3[]"),uLightColor:Re("v3[]"),dLightCount:bt("number"),uAmbientColor:Re("v3"),uLightStrength:Re("v3"),uFrameNo:Re("i"),dRendersPerFrame:bt("number"),dGlow:bt("boolean"),dBounces:bt("number"),dSteps:bt("number"),dFirstStepSize:bt("number"),dRefineSteps:bt("number"),uRayDistance:Re("f"),dThicknessMode:bt("string"),uMinThickness:Re("f"),uThicknessFactor:Re("f"),uThickness:Re("f"),dShadowEnable:bt("boolean"),uShadowSoftness:Re("f"),uShadowThickness:Re("f")},_pt=Cn("trace",mo,rFe);function Ypt(e,t,r,n,o,i,a){let A={...Xn,tColor:D.create(t),tNormal:D.create(r),tShaded:D.create(n),tThickness:D.create(o),tAccumulate:D.create(i),tDepth:D.create(a),uTexSize:D.create(Le.create(t.getWidth(),t.getHeight())),dOrthographic:D.create(0),uNear:D.create(1),uFar:D.create(1e4),uFogNear:D.create(1e4),uFogFar:D.create(1e4),uFogColor:D.create(B.create(1,1,1)),uProjection:D.create(Y.identity()),uInvProjection:D.create(Y.identity()),uBounds:D.create(lr()),uLightDirection:D.create([]),uLightColor:D.create([]),dLightCount:D.create(0),uAmbientColor:D.create(B()),uLightStrength:D.create(B.create(1,1,1)),uFrameNo:D.create(0),dRendersPerFrame:D.create(1),dGlow:D.create(!0),dBounces:D.create(4),dSteps:D.create(32),dFirstStepSize:D.create(.01),dRefineSteps:D.create(4),uRayDistance:D.create(256),dThicknessMode:D.create("auto"),uMinThickness:D.create(.5),uThicknessFactor:D.create(1),uThickness:D.create(4),dShadowEnable:D.create(!1),uShadowSoftness:D.create(.1),uShadowThickness:D.create(.1)},s={...Vpt},c=Un(e,"triangles",_pt,s,A);return Ln(c,A)}var Opt={...Wn,tColor:Ft("texture","rgba","ubyte","nearest"),uTexSize:Re("v2"),uWeight:Re("f")},Jpt=Cn("accumulate",mo,nFe);function zpt(e,t){let r={...Xn,tColor:D.create(t),uTexSize:D.create(Le.create(t.getWidth(),t.getHeight())),uWeight:D.create(1)},n={...Opt},o=Un(e,"triangles",Jpt,n,r);return Ln(o,r)}var iFe=!1;function aFe(e){let{drawBuffers:t,textureFloat:r,colorBufferFloat:n,depthTexture:o}=e.extensions;if(!r||!n||!o||!t){if(ir&&!iFe){let i=[];r||i.push("textureFloat"),n||i.push("colorBufferFloat"),o||i.push("depthTexture"),t||i.push("drawBuffers"),console.log(`Missing "${i.join('", "')}" extensions required for "illumination"`),iFe=!0}return!1}else return!0}var zH={enabled:h.Boolean(!1),maxIterations:h.Numeric(5,{min:0,max:16,step:1},{description:"Maximum number of tracing iterations. Final iteration count is 2^x."}),denoise:h.Boolean(!0),denoiseThreshold:h.Interval([.15,1],{min:0,max:4,step:.01},{description:"Threshold for denoising. Automatically adjusted within given interval based on current iteration."}),ignoreOutline:h.Boolean(!0,{description:"Ignore outline in illumination pass where it is generally not needed for visual clarity. Useful when illumination is often toggled on/off."}),...oFe},Vh=class e{constructor(t,r){this.webgl=t;this.drawPass=r;this._iteration=0;this._supported=!1;this.prevSampleIndex=-1;if(!e.isSupported(t))return;let{colorTarget:n}=r,o=n.getWidth(),i=n.getHeight();this.tracing=new JH(t,this.drawPass),this.transparentTarget=t.createRenderTarget(o,i,!1,"uint8","nearest"),this.outputTarget=t.createRenderTarget(o,i,!1,"uint8","linear"),this.copyRenderable=id(t,this.transparentTarget.texture),this.composeRenderable=Wpt(t,this.tracing.accumulateTarget.texture,this.tracing.normalTextureOpaque,this.tracing.colorTextureOpaque,this.drawPass.depthTextureOpaque,this.drawPass.depthTargetTransparent.texture,this.drawPass.postprocessing.outline.target.texture,this.transparentTarget.texture,this.drawPass.postprocessing.ssao.ssaoDepthTexture,this.drawPass.postprocessing.ssao.ssaoDepthTransparentTexture,this.drawPass.postprocessing.bloom.compositeTarget.texture,!1),this.multiSampleComposeTarget=t.createRenderTarget(o,i,!1,"float32"),this.multiSampleHoldTarget=t.createRenderTarget(o,i,!1),this.multiSampleAccumulateTarget=t.createRenderTarget(o,i,!1,"float32"),this.multiSampleCompose=qpt(t,this.outputTarget.texture),this._supported=!0}get iteration(){return this._iteration}get colorTarget(){return this._colorTarget}get supported(){return this._supported}getByteCount(){return this._supported?this.tracing.getByteCount()+this.transparentTarget.getByteCount()+this.outputTarget.getByteCount()+this.multiSampleComposeTarget.getByteCount()+this.multiSampleHoldTarget.getByteCount()+this.multiSampleAccumulateTarget.getByteCount():0}getMaxIterations(t){return Math.pow(2,t.maxIterations)}static isSupported(t){return aFe(t)}static isEnabled(t,r){return r.enabled&&aFe(t)}renderInput(t,r,n,o){at&&this.webgl.timer.mark("IlluminationPass.renderInput");let{gl:i,state:a}=this.webgl,A=zI.isEnabled(o.marking),s=n.opacityAverage<1||n.volumes.renderables.length>0,c=A&&n.markerAverage>0;this.transparentTarget.bind(),a.clearColor(0,0,0,0),i.clear(i.COLOR_BUFFER_BIT);let l=ms.isTransparentOutlineEnabled(o.postprocessing)&&!o.illumination.ignoreOutline,u=Pp.isEnabled(o.postprocessing),g=ms.isTransparentSsaoEnabled(n,o.postprocessing),m=Lm.isEnabled(o.postprocessing);if((l||u||g||m)&&(this.drawPass.depthTargetTransparent.bind(),t.clearDepth(!0)),s){if(this.drawPass.transparency==="wboit")this.drawPass.wboit.bind(),t.renderWboitTransparent(n.primitives,r,this.drawPass.depthTextureOpaque),n.volumes.renderables.length>0&&t.renderWboitTransparent(n.volumes,r,this.drawPass.depthTextureOpaque),this.transparentTarget.bind(),this.drawPass.wboit.render();else if(this.drawPass.transparency==="dpoit"){let p=this.drawPass.dpoit.bind();t.renderDpoitTransparent(n.primitives,r,this.drawPass.depthTextureOpaque,p);for(let d=0,f=o.dpoitIterations;d<f;d++){at&&this.webgl.timer.mark("DpoitPass.layer");let I=this.drawPass.dpoit.bindDualDepthPeeling();t.renderDpoitTransparent(n.primitives,r,this.drawPass.depthTextureOpaque,I),f>1&&(this.transparentTarget.bind(),this.drawPass.dpoit.renderBlendBack()),at&&this.webgl.timer.markEnd("DpoitPass.layer")}this.transparentTarget.bind(),this.drawPass.dpoit.render(),n.volumes.renderables.length>0&&t.renderVolume(n.volumes,r,this.drawPass.depthTextureOpaque)}else this.transparentTarget.bind(),this.drawPass.depthTextureOpaque.attachFramebuffer(this.transparentTarget.framebuffer,"depth"),t.renderBlendedTransparent(n.primitives,r),this.drawPass.depthTextureOpaque.detachFramebuffer(this.transparentTarget.framebuffer,"depth"),n.volumes.renderables.length>0&&t.renderVolume(n.volumes,r,this.drawPass.depthTextureOpaque);(l||u||g||m)&&(this.drawPass.depthTargetTransparent.bind(),n.opacityAverage<1&&t.renderDepthTransparent(n.primitives,r,this.drawPass.depthTextureOpaque)),g&&(this.drawPass.postprocessing.ssao.update(r,n,o.postprocessing.occlusion.params,!0),this.drawPass.postprocessing.ssao.render(r))}if(c){let p=o.marking.ghostEdgeStrength<1;p&&n.markerAverage!==1&&(this.drawPass.marking.depthTarget.bind(),t.clear(!1,!0),t.renderMarkingDepth(n.primitives,r)),this.drawPass.marking.maskTarget.bind(),t.clear(!1,!0),t.renderMarkingMask(n.primitives,r,p?this.drawPass.marking.depthTarget.texture:null),this.drawPass.marking.update(o.marking),this.drawPass.marking.render(r.viewport,this.transparentTarget)}this.tracing.composeTarget.bind(),a.clearColor(0,0,0,0),i.clear(i.COLOR_BUFFER_BIT),at&&this.webgl.timer.markEnd("IlluminationPass.renderInput")}shouldRender(t){return this._supported&&t.enabled&&this._iteration<this.getMaxIterations(t)}setSize(t,r){if(!this._supported)return;let n=this.outputTarget.getWidth(),o=this.outputTarget.getHeight();(t!==n||r!==o)&&(this.tracing.setSize(t,r),this.transparentTarget.setSize(t,r),this.outputTarget.setSize(t,r),D.update(this.copyRenderable.values.uTexSize,Le.set(this.copyRenderable.values.uTexSize.ref.value,t,r)),D.update(this.composeRenderable.values.uTexSize,Le.set(this.composeRenderable.values.uTexSize.ref.value,t,r)),this.multiSampleComposeTarget.setSize(t,r),this.multiSampleHoldTarget.setSize(t,r),this.multiSampleAccumulateTarget.setSize(t,r),D.update(this.multiSampleCompose.values.uTexSize,Le.set(this.multiSampleCompose.values.uTexSize.ref.value,t,r))),this.drawPass.setSize(t,r)}reset(){this._supported&&(this.tracing.reset(),this._iteration=0,this.prevSampleIndex=-1)}restart(t=!1){this._supported&&(this.tracing.restart(t),this._iteration=0,this.prevSampleIndex=-1)}renderInternal(t,r,n,o){if(!this.shouldRender(r.illumination))return;at&&this.webgl.timer.mark("IlluminationPass.render",{note:`iteration ${this._iteration+1} of ${this.getMaxIterations(r.illumination)}`}),this.tracing.render(t,r.transparentBackground,r.illumination,this._iteration,o);let{renderer:i,camera:a,scene:A,helper:s}=t,{gl:c,state:l}=this.webgl,{x:u,y:g,width:m,height:p}=a.viewport;if(this._iteration===0||o){if(i.setTransparentBackground(r.transparentBackground),i.setDrawingBufferSize(this.tracing.composeTarget.getWidth(),this.tracing.composeTarget.getHeight()),i.setPixelRatio(this.webgl.pixelRatio),i.setViewport(u,g,m,p),i.update(a,A),this.renderInput(i,a,A,r),this.transparentTarget.bind(),s.debug.isEnabled||s.pointer.isEnabled){if(this.drawPass.depthTextureOpaque.attachFramebuffer(this.transparentTarget.framebuffer,"depth"),s.debug.isEnabled){s.debug.syncVisibility();for(let G of s.debug.scenes)i.renderBlended(G,a)}s.pointer.isEnabled&&(s.pointer.setCamera(a),i.update(s.pointer.camera,s.pointer.scene),i.renderBlended(s.pointer.scene,s.pointer.camera)),this.drawPass.depthTextureOpaque.detachFramebuffer(this.transparentTarget.framebuffer,"depth")}s.handle.isEnabled&&i.renderBlended(s.handle.scene,a),s.camera.isEnabled&&(s.camera.update(a),i.update(s.camera.camera,s.camera.scene),i.renderBlended(s.camera.scene,s.camera.camera))}l.disable(c.BLEND),l.disable(c.DEPTH_TEST),l.disable(c.CULL_FACE),l.depthMask(!1),l.viewport(u,g,m,p),l.scissor(u,g,m,p);let d=a.state.mode==="orthographic"?1:0,f=JI.isEnabled(r.postprocessing),I=OI.isEnabled(r.postprocessing)&&!r.illumination.ignoreOutline,C=ms.isTransparentSsaoEnabled(A,r.postprocessing),y=Lm.isEnabled(r.postprocessing),Q=Pp.isEnabled(r.postprocessing),E=zI.isEnabled(r.marking),b=A.opacityAverage<1||A.volumes.renderables.length>0,x=E&&A.markerAverage>0,S=!1;if(this.composeRenderable.values.dOutlineEnable.ref.value!==I&&(S=!0,D.update(this.composeRenderable.values.dOutlineEnable,I)),I&&r.postprocessing.outline.name==="on"){let{transparentOutline:G,outlineScale:N}=this.drawPass.postprocessing.outline.update(a,r.postprocessing.outline.params,this.drawPass.depthTargetTransparent.texture,this.drawPass.depthTextureOpaque);this.drawPass.postprocessing.outline.render(),D.update(this.composeRenderable.values.uOutlineColor,ke.toVec3Normalized(this.composeRenderable.values.uOutlineColor.ref.value,r.postprocessing.outline.params.color)),this.composeRenderable.values.dOutlineScale.ref.value!==N&&(S=!0,D.update(this.composeRenderable.values.dOutlineScale,N)),this.composeRenderable.values.dTransparentOutline.ref.value!==G&&(S=!0,D.update(this.composeRenderable.values.dTransparentOutline,G))}this.composeRenderable.values.dOcclusionEnable.ref.value!==C&&(S=!0,D.update(this.composeRenderable.values.dOcclusionEnable,C)),C&&r.postprocessing.occlusion.name==="on"&&D.update(this.composeRenderable.values.uOcclusionColor,ke.toVec3Normalized(this.composeRenderable.values.uOcclusionColor.ref.value,r.postprocessing.occlusion.params.color));let w=b||x;this.composeRenderable.values.dBlendTransparency.ref.value!==w&&(S=!0,D.update(this.composeRenderable.values.dBlendTransparency,w)),D.updateIfChanged(this.composeRenderable.values.uNear,a.near),D.updateIfChanged(this.composeRenderable.values.uFar,a.far),D.updateIfChanged(this.composeRenderable.values.uFogFar,a.fogFar),D.updateIfChanged(this.composeRenderable.values.uFogNear,a.fogNear),D.update(this.composeRenderable.values.uFogColor,ke.toVec3Normalized(this.composeRenderable.values.uFogColor.ref.value,i.props.backgroundColor)),this.composeRenderable.values.dOrthographic.ref.value!==d&&(D.update(this.composeRenderable.values.dOrthographic,d),S=!0),i.setDrawingBufferSize(this.tracing.composeTarget.getWidth(),this.tracing.composeTarget.getHeight()),i.setPixelRatio(this.webgl.pixelRatio),i.setViewport(u,g,m,p),i.update(a,A);let R=!1;if(y&&r.postprocessing.bloom.name==="on"){let G=r.postprocessing.bloom.params,N=this.drawPass.postprocessing.bloom,k=G.mode==="emissive";k&&A.emissiveAverage===0||(k&&this.drawPass.renderEmissiveBloom(i,a,A,G.transparency),A.opacityAverage>=1&&(this.transparentTarget.bind(),i.clear(!1,!1,!0),this.drawPass.depthTargetTransparent.bind(),i.clearDepth(!0)),N.update(this.tracing.shadedTextureOpaque,this.transparentTarget.texture,N.emissiveTarget.texture,this.drawPass.depthTextureOpaque,this.drawPass.depthTextureTransparent,G,a,!1),N.render(a.viewport),R=!0)}this.composeRenderable.values.dBloomEnable.ref.value!==R&&(S=!0,D.update(this.composeRenderable.values.dBloomEnable,R)),n&&!f&&!Q?this.webgl.bindDrawingBuffer():this.tracing.composeTarget.bind(),this._colorTarget=this.tracing.composeTarget,this.drawPass.postprocessing.background.update(a,r.postprocessing.background),this.drawPass.postprocessing.background.clear(r.postprocessing.background,r.transparentBackground,i.props.backgroundColor),this.drawPass.postprocessing.background.render(r.postprocessing.background);let F=this.drawPass.postprocessing.background.isEnabled(r.postprocessing)||R&&!r.transparentBackground;D.updateIfChanged(this.composeRenderable.values.uTransparentBackground,r.transparentBackground||F),this.composeRenderable.values.dDenoise.ref.value!==r.illumination.denoise&&(D.update(this.composeRenderable.values.dDenoise,r.illumination.denoise),S=!0);let v=r.multiSample.mode==="on"?r.illumination.denoiseThreshold[0]:ho(r.illumination.denoiseThreshold[1],r.illumination.denoiseThreshold[0],$t(this.iteration/(this.getMaxIterations(r.illumination)/2),0,1));D.updateIfChanged(this.composeRenderable.values.uDenoiseThreshold,v),S&&this.composeRenderable.update(),F&&(l.enable(c.BLEND),l.blendFuncSeparate(c.ONE,c.ONE_MINUS_SRC_ALPHA,c.ONE,c.ONE_MINUS_SRC_ALPHA)),this.composeRenderable.render();let U=this.outputTarget;if(f){let G=n&&!Q;this.drawPass.antialiasing.render(a,this.tracing.composeTarget.texture,G?!0:this.outputTarget,r.postprocessing),G||(this._colorTarget=this.outputTarget,U=this.tracing.composeTarget)}Q&&r.postprocessing.dof.name==="on"&&(this.drawPass.dof.update(a,this._colorTarget.texture,this.drawPass.depthTextureOpaque,this.drawPass.depthTargetTransparent.texture,r.postprocessing.dof.params,A.boundingSphereVisible),this.drawPass.dof.render(a.viewport,n?void 0:U),n||(this._colorTarget=U)),this._iteration+=1,at&&this.webgl.timer.markEnd("IlluminationPass.render"),this.webgl.gl.flush()}renderMultiSample(t,r,n){let{camera:o}=t,{multiSampleCompose:i,multiSampleComposeTarget:a,multiSampleHoldTarget:A,webgl:s}=this,{gl:c,state:l}=s,u=cU[Math.max(0,Math.min(r.multiSample.sampleLevel,5))],g=this.getMaxIterations(r.illumination),m=Math.min(this._iteration,g),p=Math.floor(m/g*u.length);at&&s.timer.mark("IlluminationPass.renderMultiSample",{note:`sampleIndex ${p+1} of ${u.length}`});let{x:d,y:f,width:I,height:C}=o.viewport,y=1/g;if(m===0)this.renderInternal(t,r,!1,!0),D.update(i.values.uWeight,1),D.update(i.values.tColor,this._colorTarget.texture),i.update(),A.bind(),l.disable(c.BLEND),l.disable(c.DEPTH_TEST),l.depthMask(!1),l.viewport(d,f,I,C),l.scissor(d,f,I,C),i.render();else{o.viewOffset.enabled=!0,D.update(i.values.tColor,this._colorTarget.texture),D.update(i.values.uWeight,y),i.update();let E=u[p];Io.setViewOffset(o.viewOffset,I,C,E[0],E[1],I,C),o.update(),this.renderInternal(t,r,!1,this.prevSampleIndex!==p),a.bind(),l.enable(c.BLEND),l.blendEquationSeparate(c.FUNC_ADD,c.FUNC_ADD),l.blendFuncSeparate(c.ONE,c.ONE,c.ONE,c.ONE),l.disable(c.DEPTH_TEST),l.depthMask(!1),l.viewport(d,f,I,C),l.scissor(d,f,I,C),m===1&&(l.clearColor(0,0,0,0),c.clear(c.COLOR_BUFFER_BIT)),i.render()}this.prevSampleIndex=p,n?this.webgl.bindDrawingBuffer():this.multiSampleAccumulateTarget.bind(),l.viewport(d,f,I,C),l.scissor(d,f,I,C);let Q=m*y;Q>0&&(D.update(i.values.uWeight,1),D.update(i.values.tColor,a.texture),i.update(),l.disable(c.BLEND),i.render()),Q<1&&(D.update(i.values.uWeight,1-Q),D.update(i.values.tColor,A.texture),i.update(),Q===0?l.disable(c.BLEND):l.enable(c.BLEND),i.render()),n||(l.disable(c.BLEND),this.colorTarget.bind(),this.copyRenderable.values.tColor.ref.value!==this.multiSampleAccumulateTarget.texture&&(D.update(this.copyRenderable.values.tColor,this.multiSampleAccumulateTarget.texture),this.copyRenderable.update()),this.copyRenderable.render()),o.viewOffset.enabled=!1,o.update(),at&&s.timer.markEnd("IlluminationPass.renderMultiSample")}render(t,r,n){this._supported&&(r.multiSample.mode==="on"?this.renderMultiSample(t,r,n):this.renderInternal(t,r,n,!1))}},Kpt={...Wn,tColor:Ft("texture","rgba","ubyte","nearest"),tNormal:Ft("texture","rgba","ubyte","nearest"),tShaded:Ft("texture","rgba","ubyte","nearest"),tTransparentColor:Ft("texture","rgba","ubyte","nearest"),dBlendTransparency:bt("boolean"),tSsaoDepth:Ft("texture","rgba","ubyte","nearest"),tSsaoDepthTransparent:Ft("texture","rgba","ubyte","nearest"),tDepthOpaque:Ft("texture","rgba","ubyte","nearest"),tDepthTransparent:Ft("texture","rgba","ubyte","nearest"),tOutlines:Ft("texture","rgba","ubyte","nearest"),tBloom:Ft("texture","rgba","ubyte","linear"),dBloomEnable:bt("boolean"),uTexSize:Re("v2"),dDenoise:bt("boolean"),uDenoiseThreshold:Re("f"),dOrthographic:bt("number"),uNear:Re("f"),uFar:Re("f"),uFogNear:Re("f"),uFogFar:Re("f"),uFogColor:Re("v3"),uOutlineColor:Re("v3"),uOcclusionColor:Re("v3"),uTransparentBackground:Re("b"),dOcclusionEnable:bt("boolean"),dOutlineEnable:bt("boolean"),dOutlineScale:bt("number"),dTransparentOutline:bt("boolean")},jpt=Cn("compose",mo,tFe);function Wpt(e,t,r,n,o,i,a,A,s,c,l,u){let g={...Xn,tColor:D.create(t),tNormal:D.create(r),tShaded:D.create(n),tTransparentColor:D.create(A),dBlendTransparency:D.create(!0),tSsaoDepth:D.create(s),tSsaoDepthTransparent:D.create(c),tDepthOpaque:D.create(o),tDepthTransparent:D.create(i),tOutlines:D.create(a),tBloom:D.create(l),dBloomEnable:D.create(!1),uTexSize:D.create(Le.create(t.getWidth(),t.getHeight())),dDenoise:D.create(!0),uDenoiseThreshold:D.create(.1),dOrthographic:D.create(0),uNear:D.create(1),uFar:D.create(1e4),uFogNear:D.create(1e4),uFogFar:D.create(1e4),uFogColor:D.create(B.create(1,1,1)),uOutlineColor:D.create(B.create(0,0,0)),uOcclusionColor:D.create(B.create(0,0,0)),uTransparentBackground:D.create(!1),dOcclusionEnable:D.create(!1),dOutlineEnable:D.create(!1),dOutlineScale:D.create(1),dTransparentOutline:D.create(u)},m={...Kpt},p=Un(e,"triangles",jpt,m,g);return Ln(p,g)}var Xpt={...Wn,tColor:Ft("texture","rgba","ubyte","nearest"),uTexSize:Re("v2"),uWeight:Re("f")},Zpt=Cn("compose",mo,GH);function qpt(e,t){let r={...Xn,tColor:D.create(t),uTexSize:D.create(Le.create(t.getWidth(),t.getHeight())),uWeight:D.create(1)},n={...Xpt},o=Un(e,"triangles",Zpt,n,r);return Ln(o,r)}var zv=class e{constructor(t,r){this.webgl=t;this.scene=r;this.required=[]}static ensureRequired(t,r,n){let o=new e(t,r);o.updateRequired(n),o.finalizeRequired(!0)}updateRequired(t){this.required.length=0,this.required.push("color"),Vh.isEnabled(this.webgl,t.illumination)&&this.required.push("tracing"),zI.isEnabled(t.marking)&&this.scene.markerAverage>0&&this.required.push("marking"),Lm.isEnabled(t.postprocessing)&&this.scene.emissiveAverage>0&&this.required.push("emissive"),(ms.isTransparentDepthRequired(this.scene,t.postprocessing)||!this.webgl.extensions.drawBuffers||!this.webgl.extensions.depthTexture||Vh.isEnabled(this.webgl,t.illumination))&&this.required.push("depth"),this.webgl.resources.linkPrograms(this.required)}finalizeRequired(t){return this.finalize(this.required,t)}finalize(t,r){return this.webgl.resources.finalizePrograms(t,r)}};var $pt={transparentBackground:h.Boolean(!1),dpoitIterations:h.Numeric(2,{min:1,max:10,step:1}),multiSample:h.Group(NH),postprocessing:h.Group(Hv),marking:h.Group(YH),illumination:h.Group(zH),cameraHelper:h.Group(YQ),renderer:h.Group(ZD)},KH=class{constructor(t,r,n,o,i,a,A){this.webgl=t;this.renderer=n;this.scene=o;this.camera=i;this._width=0;this._height=0;this._camera=new Io;this.props={...h.getDefaultValues($pt),...A},this.drawPass=new Ov(t,r,128,128,o.transparency),this.illuminationPass=new Vh(t,this.drawPass),this.multiSamplePass=new Hh(t,this.drawPass),this.multiSampleHelper=new Vv(this.multiSamplePass),this.helper={camera:new Jv(t,this.props.cameraHelper),debug:a.debug,handle:a.handle,pointer:a.pointer},this.setSize(1024,768)}get colorTarget(){return this._colorTarget}get width(){return this._width}get height(){return this._height}getByteCount(){return this.drawPass.getByteCount()+this.illuminationPass.getByteCount()+this.multiSamplePass.getByteCount()}updateBackground(){return new Promise(t=>{this.drawPass.postprocessing.background.update(this.camera,this.props.postprocessing.background,()=>{t()})})}setSize(t,r){t===this._width&&r===this._height||(this._width=t,this._height=r,this.drawPass.setSize(t,r),this.illuminationPass.setSize(t,r),this.multiSamplePass.syncSize())}setProps(t={}){Object.assign(this.props,t),t.cameraHelper&&this.helper.camera.setProps(t.cameraHelper)}async render(t){this.drawPass.setTransparency(this.scene.transparency),zv.ensureRequired(this.webgl,this.scene,this.props),Io.copySnapshot(this._camera.state,this.camera.state),Jo.set(this._camera.viewport,0,0,this._width,this._height),this._camera.update(),this.renderer.setOcclusionTest(null);let r={renderer:this.renderer,camera:this._camera,scene:this.scene,helper:this.helper};if(this.illuminationPass.supported&&this.props.illumination.enabled){for(await t.update({message:"Tracing...",current:1,max:this.illuminationPass.getMaxIterations(this.props.illumination)}),this.illuminationPass.restart(!0);this.illuminationPass.shouldRender(this.props.illumination);)at&&this.webgl.timer.mark("ImagePass.render",{captureStats:!0}),this.illuminationPass.render(r,this.props,!1),at&&this.webgl.timer.markEnd("ImagePass.render"),t.shouldUpdate&&await t.update({current:this.illuminationPass.iteration}),await this.webgl.waitForGpuCommandsComplete();this._colorTarget=this.illuminationPass.colorTarget}else at&&this.webgl.timer.mark("ImagePass.render",{captureStats:!0}),Hh.isEnabled(this.props.multiSample)?(this.multiSampleHelper.render(r,this.props,!1),this._colorTarget=this.multiSamplePass.colorTarget):(this.drawPass.render(r,this.props,!1),this._colorTarget=this.drawPass.getColorTarget(this.props.postprocessing)),at&&this.webgl.timer.markEnd("ImagePass.render");if(at){let n=this.webgl.timer.resolve();if(n)for(let o of n)J2([o])}ir&&console.log(`image pass byte count ${(this.getByteCount()/1024/1024).toFixed(3)} MiB`)}async getImageData(t,r,n,o){this.setSize(r,n),await this.render(t),this.colorTarget.bind();let i=o?.width??r,a=o?.height??n,A=new Uint8Array(i*a*4);o?this.webgl.readPixels(o.x,n-o.y-o.height,i,a,A):this.webgl.readPixels(0,0,i,a,A);let s=lU.create(A,i,a);return lU.flipY(s),lU.divideByAlpha(s),new ImageData(new Uint8ClampedArray(A),i,a)}};var eft={...At.Params,alpha:{...At.Params.alpha,defaultValue:1},ignoreLight:{...At.Params.ignoreLight,defaultValue:!0},colorX:h.Color(xt.red,{isEssential:!0}),colorY:h.Color(xt.green,{isEssential:!0}),colorZ:h.Color(xt.blue,{isEssential:!0}),scale:h.Numeric(.33,{min:.1,max:2,step:.1},{isEssential:!0})},WH={handle:h.MappedStatic("off",{on:h.Group(eft),off:h.Group({})},{cycle:!0,description:"Show handle tool"})},jH=class{constructor(t,r={}){this.webgl=t;this.props={handle:{name:"off",params:{}}};this.pixelRatio=1;this._transform=Y();this.eachGroup=(t,r)=>{if(!this.renderObject||!AFe(t))return!1;let n=!1,o=this.renderObject.values.uGroupCount.ref.value,{elements:i}=t;for(let{groupId:a,instanceId:A}of i){let s=A*o+a;r(Ue.ofSingleton(s))&&(n=!0)}return n};this.scene=Zc.create(t,"blended"),this.setProps(r)}getBoundingSphere(t,r){return this.renderObject&&(we.copy(t,this.renderObject.values.invariantBoundingSphere.ref.value),Y.fromArray(this._transform,this.renderObject.values.aTransform.ref.value,r*16),we.transform(t,t,this._transform)),t}setProps(t){this.props=Wc(this.props,r=>{if(t.handle!==void 0&&(r.handle.name=t.handle.name,t.handle.name==="on")){this.scene.clear(),this.pixelRatio=this.webgl.pixelRatio;let n={...t.handle.params,scale:t.handle.params.scale*this.webgl.pixelRatio,cellSize:0};this.renderObject=oft(n),this.scene.add(this.renderObject),this.scene.commit(),r.handle.params={...t.handle.params}}})}get isEnabled(){return this.props.handle.name==="on"}update(t,r,n){this.renderObject&&(this.pixelRatio!==this.webgl.pixelRatio&&this.setProps(this.props),Y.setTranslation(this.renderObject.values.aTransform.ref.value,r),Y.fromMat3(this.renderObject.values.aTransform.ref.value,n),D.update(this.renderObject.values.aTransform,this.renderObject.values.aTransform.ref.value),this.scene.update([this.renderObject],!0))}getLoci(t){let{objectId:r,groupId:n,instanceId:o}=t;return!this.renderObject||r!==this.renderObject.id?Ir:rft(this,n,o)}mark(t,r){return!Ko.is(Ko.Highlighting,r)||!uA(t)&&(!AFe(t)||t.data!==this)?!1:Qn.mark(this.renderObject,t,r,this.eachGroup)}};function tft(e,t){let r=We.createState(512,256,t),n=.05*e,o=B.scale(B(),B.unitX,e),i=B.scale(B(),B.unitY,e),a=B.scale(B(),B.unitZ,e),A={radiusTop:n,radiusBottom:n,radialSegments:32};return r.currentGroup=Z0.TranslateScreenXY,cn(r,B.origin,n*3,2),r.currentGroup=Z0.TranslateObjectX,cn(r,o,n,2),Sn(r,B.origin,o,1,A),r.currentGroup=Z0.TranslateObjectY,cn(r,i,n,2),Sn(r,B.origin,i,1,A),r.currentGroup=Z0.TranslateObjectZ,cn(r,a,n,2),Sn(r,B.origin,a,1,A),We.getMesh(r)}var Z0={None:0,TranslateScreenXY:1,TranslateObjectX:3,TranslateObjectY:4,TranslateObjectZ:5};function rft(e,t,r){return ec("handle",e,[{groupId:t,instanceId:r}],n=>e.getBoundingSphere(n,r),()=>`Handle Helper | Group Id ${t} | Instance Id ${r}`)}function AFe(e){return e.kind==="data-loci"&&e.tag==="handle"}function nft(e,t){let r=10*e.scale,n=tft(r,t?.geometry);n.setBoundingSphere(we.create(B.create(r/2,r/2,r/2),r+r/4));let o=i=>{switch(i){case Z0.TranslateObjectX:return e.colorX;case Z0.TranslateObjectY:return e.colorY;case Z0.TranslateObjectZ:return e.colorZ;default:return xt.grey}};return Mr.create("handle",{},n,o,()=>1,()=>"")}function oft(e){let t=nft(e);return Mr.createRenderObject(t,e)}var XH=class{constructor(t,r){this.entries=new Map;this.ctx=t,this.parent=r}register(t,r){this.entries.has(t)&&(ir&&console.warn(`Debug helper with name '${t}' already exists, replacing.`),this.entries.get(t).clear()),this.entries.set(t,r)}unregister(t){let r=this.entries.get(t);r&&(r.clear(),this.entries.delete(t))}get scenes(){return Array.from(this.entries.values()).map(t=>t.scene)}update(){this.entries.forEach(t=>{t.isEnabled&&t.update()})}syncVisibility(){this.entries.forEach(t=>{t.syncVisibility()})}clear(){this.entries.forEach(t=>{t.clear()})}get isEnabled(){let t=!1;return this.entries.forEach(r=>{r.isEnabled&&(t=!0)}),t}setProps(t){this.entries.forEach(r=>{r.setProps(t)})}};var uU={...At.Params,enabled:h.Select("off",h.arrayToOptions(["on","off"]),{isEssential:!0}),ignoreLight:{...At.Params.ignoreLight,defaultValue:!0},color:h.Color(xt.grey,{isEssential:!0}),hitColor:h.Color(xt.pink,{isEssential:!0})},ZH=class{constructor(t,r={}){this.pixelScale=1;this.modelScale=1;this.pointers=[];this.points=[];this.hit=void 0;this.scene=Zc.create(t,"blended"),this.props={...h.getDefaultValues(uU),...r},this.camera=new Io,this.shape=sFe(this.getData(),this.props),this.renderObject=Aft(this.shape,this.props),this.scene.add(this.renderObject)}setProps(t){Object.assign(this.props,t),this.isEnabled&&this.update(this.pointers,this.points,this.hit)}ensureEnabled(){this.props.enabled!=="on"&&(this.props.enabled="on")}get isEnabled(){return this.props.enabled==="on"}setCamera(t){Io.copySnapshot(this.camera.state,t.state),Jo.copy(this.camera.viewport,t.viewport),Y.copy(this.camera.view,t.view),Y.copy(this.camera.projection,t.projection),Y.copy(this.camera.projectionView,t.projectionView),Y.copy(this.camera.headRotation,t.headRotation),Io.copyViewOffset(this.camera.viewOffset,t.viewOffset),this.camera.far=t.far,this.camera.near=t.near,this.camera.fogFar=t.fogFar,this.camera.fogNear=t.fogNear,this.camera.forceFull=t.forceFull,this.camera.scale=1,this.modelScale=t.scale}update(t,r,n){if(this.pointers=t,this.points=r,this.hit=n,this.props.enabled!=="on"){this.renderObject&&(this.renderObject.state.visible=!1);return}this.shape=sFe(this.getData(),this.props,this.shape),D.updateIfChanged(this.renderObject.values.drawCount,lA.getDrawCount(this.shape.geometry)),D.updateIfChanged(this.renderObject.values.uVertexCount,lA.getVertexCount(this.shape.geometry)),D.updateIfChanged(this.renderObject.values.uGroupCount,2),At.Utils.updateBoundingSphere(this.renderObject.values,this.shape.geometry),At.Utils.updateValues(this.renderObject.values,this.props),At.Utils.updateRenderableState(this.renderObject.state,this.props),this.renderObject.state.visible=!0,this.scene.update(void 0,!1),this.scene.commit()}getData(){return{pointers:this.pointers,points:this.points,hit:this.hit,modelScale:this.modelScale,camera:this.camera,pixels:12}}};var ift=B();function nZ(e,t,r,n){let o=B.scale(ift,r.state.position,n),i=B.distance(e,o);return 2*Math.tan(r.state.fov/2)*i/r.viewport.height*t}function aft(e,t){let r=We.createState(512,256,t),n=5e-4,o={radiusTop:n,radiusBottom:n,radialSegments:32},{modelScale:i,camera:a,pixels:A}=e;r.currentGroup=0;for(let s of e.pointers){HSe(r,s,.2,o);let c=nZ(s.origin,A,a,i);cn(r,s.origin,c,1)}for(let s of e.points){let c=nZ(s,A,a,i);cn(r,s,c,1)}if(e.hit){r.currentGroup=1;let s=nZ(e.hit,A,a,i);cn(r,e.hit,s,1)}return We.getMesh(r)}function sFe(e,t,r){let n=aft(e,r?.geometry),o=i=>i===1?t.hitColor:t.color;return Mr.create("pointer-mesh",e,n,o,()=>1,()=>"",void 0,2)}function Aft(e,t){return Mr.createRenderObject(e,{...h.getDefaultValues(At.Params),...t,ignoreLight:t.ignoreLight,cellSize:0})}var sft={camera:h.Group({helper:h.Group(YQ)}),handle:h.Group(WH),pointer:h.Group(uU)},cft=h.getDefaultValues(sft),qH=class{constructor(t,r,n={}){let o={...cft,...n};this.debug=new XH(t,r),this.camera=new Jv(t,o.camera.helper),this.handle=new jH(t,o.handle),this.pointer=new ZH(t,o.pointer)}};var $H=class{constructor(t,r,n={}){this.webgl=t;let o=this.webgl.getDrawingBufferSize();this.draw=new Ov(t,r,o.width,o.height,n.transparency||"blended"),this.pick=new _v(t,o.width,o.height,n.pickScale||.25),this.multiSample=new Hh(t,this.draw),this.illumination=new Vh(t,this.draw)}getByteCount(){return this.draw.getByteCount()+this.pick.getByteCount()+this.multiSample.getByteCount()+this.illumination.getByteCount()}setPickScale(t){this.pick.setPickScale(t)}setTransparency(t){this.draw.setTransparency(t)}updateSize(){let t=this.webgl.getDrawingBufferSize(),r=Math.max(t.width,2),n=Math.max(t.height,2);this.draw.setSize(r,n),this.pick.setSize(r,n),this.multiSample.syncSize(),this.illumination.setSize(r,n)}};var cFe=`
|
|
precision highp float;
|
|
precision highp sampler2D;
|
|
|
|
uniform sampler2D tPreviousLevel;
|
|
uniform vec2 uInvSize;
|
|
uniform vec2 uOffset;
|
|
|
|
void main(void) {
|
|
vec2 position = gl_FragCoord.xy * uInvSize + uOffset;
|
|
|
|
float x = texture(tPreviousLevel, position).r;
|
|
float y = textureOffset(tPreviousLevel, position, ivec2(-1, 0)).r;
|
|
float z = textureOffset(tPreviousLevel, position, ivec2(-1, -1)).r;
|
|
float w = textureOffset(tPreviousLevel, position, ivec2(0, -1)).r;
|
|
|
|
gl_FragColor = vec4(max(max(x, y), max(z, w)));
|
|
}
|
|
`;var lft={...Wn,tPreviousLevel:Ft("texture","alpha","float","nearest"),uInvSize:Re("v2"),uOffset:Re("v2")},uft=Cn("hi-z",mo,cFe);function lFe(e,t){let r={...Xn,tPreviousLevel:D.create(t),uInvSize:D.create(Le()),uOffset:D.create(Le())},n={...lft},o=Un(e,"triangles",uft,n,r);return Ln(o,r)}var uFe=new ArrayBuffer(4),xan=new Int32Array(uFe),San=new Float32Array(uFe);var gFe=new ArrayBuffer(4),gft=new Int32Array(gFe),mft=new Float32Array(gFe);function dft(e){let t=e<-126?-126:e;return gft[0]=(1<<23)*(t+126.94269504),mft[0]}function mFe(e){return dft(1.44269504*e)}var dFe=new ArrayBuffer(8),Dan=new Int32Array(dFe),van=new Float32Array(dFe);var pFe=new ArrayBuffer(4),pft=new Int32Array(pFe),fft=new Float32Array(pFe);function fFe(e){return fft[0]=e,pft[0]*11920928955078125e-23-126.94269504}var Fan=Math.PI/2,wan=2*Math.PI,Ran=1/(2*Math.PI),Uan=2/Math.PI,Lan=4/Math.PI,Tan=4/(Math.PI*Math.PI),Pan=Math.PI/2-2*Math.PI;var BFe=new ArrayBuffer(16),Gan=new Int32Array(BFe),Nan=new Float32Array(BFe);var IFe=new ArrayBuffer(8),Man=new Int32Array(IFe),kan=new Float32Array(IFe);var CFe=new ArrayBuffer(4),Han=new Int32Array(CFe),Van=new Float32Array(CFe);var _an=Math.PI/4;var Bft=B.transformMat4,hFe=lr.set,Ift=fFe;function Cft(e,t,r){return t*r/((r-t)*e-r)}function hft(e,t,r){return e*(t-r)-t}function eV(e,t,r,n){return n[11]===-1?Cft(e,t,r):hft(e,t,r)}function yft(e,t,r,n){let o=t[0]*r,i=t[1]*r,a=t[2]*r,A=t[2]*t[2]-r*r,s=Math.sqrt(t[0]*t[0]+A),c=(s*t[0]-a)/(s*t[2]+o)*n[0],l=(s*t[0]+a)/(s*t[2]-o)*n[0],u=Math.sqrt(t[1]*t[1]+A),g=(u*t[1]-a)/(u*t[2]+i)*n[5],m=(u*t[1]+a)/(u*t[2]-i)*n[5];return hFe(e,l*-.5+.5,g*.5+.5,c*-.5+.5,m*.5+.5)}function Qft(e,t,r,n){let o=n[0],i=n[5],a=(t[0]+r)*o,A=(t[0]-r)*o,s=(t[1]+r)*i,c=(t[1]-r)*i;return hFe(e,A*.5+.5,s*-.5+.5,a*.5+.5,c*-.5+.5)}function Eft(e,t,r,n){return n[11]===-1?yft(e,t,r,n):Qft(e,t,r,n)}var oZ={enabled:h.Boolean(!1,{description:"Hierarchical Z-buffer occlusion culling. Only available for WebGL2."}),maxFrameLag:h.Numeric(10,{min:1,max:30,step:1},{description:"Maximum number of frames to wait for Z-buffer data."}),minLevel:h.Numeric(3,{min:1,max:10,step:1})},tV=class{constructor(t,r,n,o){this.webgl=t;this.drawPass=r;this.viewport=Jo();this.near=0;this.far=0;this.view=Y();this.projection=Y();this.nextNear=0;this.nextFar=0;this.nextView=Y();this.nextProjection=Y();this.aabb=lr();this.vp=B();this.levelData=[];this.sync=null;this.buffer=new Float32Array(0);this.frameLag=0;this.ready=!1;this.isOccluded=t=>{if(!this.supported||!this.props.enabled||!this.ready)return!1;let{vp:r,r:n}=this.transform(t),{near:o,far:i,projection:a}=this,A=r[2]+n;if(-A<o)return!1;let{aabb:s,w:c,h:l,lod:u}=this.project(r,n);if(u>=this.levelData.length||u<this.props.minLevel)return!1;let{offset:g,size:m}=this.levelData[u],p=s[0]+c/2,d=s[1]+l/2,f=m[0],I=p*f,C=d*f,y=Math.floor(I),Q=Math.ceil(C),E=this.tex.getWidth();if(y+1>=f||Q+1>=f)return!1;let b=(f-Q-1)*E+y+g;if(A>eV(this.buffer[b],o,i,a)||A>eV(this.buffer[b+1],o,i,a))return!1;let x=(f-Q+1-1)*E+y+g;return!(A>eV(this.buffer[x],o,i,a)||A>eV(this.buffer[x+1],o,i,a))};this.props={...h.getDefaultValues(oZ),...o};let{gl:i,extensions:a}=t;if(!mr(i)||!a.colorBufferFloat){ir&&console.log('Missing webgl2 and/or colorBufferFloat support required for "Hi-Z"'),this.supported=!1;return}this.fb=t.resources.framebuffer(),this.tex=t.resources.texture("image-float32","alpha","float","nearest"),this.tex.attachFramebuffer(this.fb,0);let A=i.getParameter(i.IMPLEMENTATION_COLOR_READ_FORMAT),s=i.getParameter(i.IMPLEMENTATION_COLOR_READ_TYPE);if(A!==i.RED||s!==i.FLOAT){ir&&console.log('Missing red/float reading support required for "Hi-Z"'),this.supported=!1;return}this.supported=!0,this.buf=t.resources.pixelPack("alpha","float"),this.renderable=lFe(t,this.drawPass.depthTextureOpaque),ir&&n&&this.initDebug(n)}getByteCount(){return this.supported?this.tex.getByteCount()+this.buf.getByteCount()+this.levelData.reduce((t,r)=>t+r.texture.getByteCount(),0):0}clear(){if(!this.supported)return;let{gl:t}=this.webgl;mr(t)&&(this.sync!==null&&(t.deleteSync(this.sync),this.sync=null),this.frameLag=0,this.ready=!1,this.debug&&(this.debug.rect.style.display="none",this.debug.container.style.display="none"))}render(t){if(!this.supported||!this.props.enabled)return;let{gl:r,state:n}=this.webgl;if(!mr(r)||this.sync!==null)return;this.nextNear=t.near,this.nextFar=t.far,Y.copy(this.nextView,t.view),Y.copy(this.nextProjection,t.projection),at&&this.webgl.timer.mark("hi-Z"),n.disable(r.CULL_FACE),n.disable(r.BLEND),n.disable(r.DEPTH_TEST),n.disable(r.SCISSOR_TEST),n.depthMask(!1),n.colorMask(!0,!0,!0,!0),n.clearColor(0,0,0,0);let o=this.renderable.values,i=Math.pow(2,Math.ceil(Math.log(Math.max(r.drawingBufferWidth,r.drawingBufferHeight))/Math.log(2))-1);for(let s=0,c=this.levelData.length;s<c;++s){let l=this.levelData[s];l.framebuffer.bind(),s>0?(D.update(o.uInvSize,l.invSize),D.update(o.uOffset,Le.set(o.uOffset.ref.value,0,0)),D.update(o.tPreviousLevel,this.levelData[s-1].texture)):(D.update(o.uInvSize,Le.set(o.uInvSize.ref.value,1/i,1/i)),D.update(o.uOffset,Le.set(o.uOffset.ref.value,this.viewport.x/r.drawingBufferWidth,this.viewport.y/r.drawingBufferHeight)),D.update(o.tPreviousLevel,this.drawPass.depthTextureOpaque)),n.currentRenderItemId=-1,n.viewport(0,0,l.size[0],l.size[1]),r.clear(r.COLOR_BUFFER_BIT),this.renderable.update(),this.renderable.render(),s>=this.props.minLevel&&(this.tex.bind(0),r.copyTexSubImage2D(r.TEXTURE_2D,0,l.offset,0,0,0,l.size[0],l.size[1]),this.tex.unbind(0))}this.tex.attachFramebuffer(this.fb,0);let a=this.tex.getWidth(),A=this.tex.getHeight();this.buf.read(0,0,a,A),this.sync=r.fenceSync(r.SYNC_GPU_COMMANDS_COMPLETE,0),r.flush(),at&&this.webgl.timer.markEnd("hi-Z")}tick(){if(!this.supported||!this.props.enabled||this.sync===null)return;let{gl:t}=this.webgl;if(!mr(t))return;let r=t.clientWaitSync(this.sync,0,0);r===t.WAIT_FAILED||this.frameLag>=this.props.maxFrameLag?(t.deleteSync(this.sync),this.sync=null,this.frameLag=0,this.ready=!1):r===t.TIMEOUT_EXPIRED?this.frameLag+=1:(this.buf.getSubData(this.buffer),t.deleteSync(this.sync),this.sync=null,this.frameLag=0,this.ready=!0,this.near=this.nextNear,this.far=this.nextFar,Y.copy(this.view,this.nextView),Y.copy(this.projection,this.nextProjection))}transform(t){let{view:r,vp:n}=this;Bft(n,t.center,r);let o=t.radius*1.2+1.52;return{vp:n,r:o}}project(t,r){let{projection:n,aabb:o,viewport:i}=this;Eft(o,t,r,n);let a=o[2]-o[0],A=o[3]-o[1],s=Math.max(a*i.width,A*i.height),c=Math.ceil(Ift(s/2));return{aabb:o,w:a,h:A,pr:s,lod:c}}setViewport(t,r,n,o){if(!this.supported)return;n=Math.max(n,2),o=Math.max(o,2),Jo.set(this.viewport,t,r,n,o);let i=Math.ceil(Math.log(Math.max(n,o))/Math.log(2));if(i===this.levelData.length)return;let{minLevel:a}=this.props;this.buffer=new Float32Array(Math.pow(2,i-a)*Math.pow(2,i-1-a)),this.tex.define(Math.pow(2,i-a),Math.pow(2,i-1-a));for(let s of this.levelData)s.framebuffer.destroy(),s.texture.destroy();this.levelData.length=0;for(let s=0;s<i;++s){let c=this.webgl.resources.framebuffer(),l=Math.pow(2,i-s-1),u=Le.create(l,l),g=Le.create(1/l,1/l),m=this.webgl.resources.texture("image-float32","alpha","float","nearest");m.define(l,l),m.attachFramebuffer(c,0),this.levelData.push({texture:m,framebuffer:c,size:u,invSize:g,offset:0})}let A=0;for(let s=0,c=i;s<c;++s){let l=this.levelData[s];s>=a&&(this.levelData[s].offset=A,A+=l.size[0])}this.clear()}setProps(t){if(this.supported)if(this.props.minLevel!==t.minLevel){Object.assign(this.props,t);let{x:r,y:n,width:o,height:i}=this.viewport;this.setViewport(r,n,o,i)}else Object.assign(this.props,t),this.props.enabled||this.clear()}initDebug(t){if(!t.parentElement)return;let r=document.createElement("div");Object.assign(r.style,{display:"block",position:"absolute",pointerEvents:"none"}),t.parentElement.appendChild(r);let n=document.createElement("canvas"),o=n.getContext("2d");if(!o)throw new Error("Could not create canvas 2d context");Object.assign(n.style,{width:"100%",height:"100%",imageRendering:"pixelated",position:"relative",pointerEvents:"none"}),r.appendChild(n);let i=document.createElement("div");Object.assign(i.style,{display:"none",position:"absolute",pointerEvents:"none"}),t.parentElement.appendChild(i),this.debug={container:r,canvas:n,ctx:o,rect:i}}canDebug(t){return this.supported&&this.props.enabled&&this.ready&&!!this.debug}showRect(t,r){if(!this.canDebug(this.debug))return;let{gl:{drawingBufferHeight:n},pixelRatio:o}=this.webgl,{viewport:{x:i,y:a,width:A,height:s}}=this,c=(t[0]*A+i)/o,l=(t[1]*s-a)/o,u=(t[2]*A+i)/o,g=(t[3]*s-a)/o,m=(n-s)/o;Object.assign(this.debug.rect.style,{border:r?"solid red":"solid green",display:"block",left:`${c}px`,top:`${l+m}px`,width:`${u-c}px`,height:`${g-l}px`})}showBuffer(t){if(!this.canDebug(this.debug))return;if(t>=this.levelData.length||t<this.props.minLevel){this.debug.container.style.display="none";return}let{offset:r,size:[n,o]}=this.levelData[t],i=this.tex.getWidth(),a=new Uint8ClampedArray(n*o*4);a.fill(255);for(let m=0;m<o;++m)for(let p=0;p<n;++p){let d=(o-m-1)*n+p,f=this.buffer[m*i+p+r]*255;a[d*4+0]=f,a[d*4+3]=255-f}let A=new ImageData(a,n,o);this.debug.canvas.width=A.width,this.debug.canvas.height=A.height,this.debug.ctx.putImageData(A,0,0);let{viewport:{x:s,y:c,width:l,height:u},webgl:{pixelRatio:g}}=this;Object.assign(this.debug.container.style,{display:"block",bottom:`${c/g}px`,left:`${s/g}px`,width:`${l/g}px`,height:`${u/g}px`})}debugOcclusion(t){if(!this.canDebug(this.debug))return;if(!t){this.debug.rect.style.display="none",this.debug.container.style.display="none";return}let r=this.isOccluded(t),{vp:n,r:o}=this.transform(t),{aabb:i,lod:a}=this.project(n,o);this.showRect(i,r),this.showBuffer(a)}reset(){this.sync=null,this.ready=!1,this.frameLag=0,this.levelData.length=0;let{x:t,y:r,width:n,height:o}=this.viewport;this.setViewport(t,r,n,o)}dispose(){if(this.supported){this.clear(),this.fb.destroy(),this.tex.destroy(),this.buf.destroy(),this.renderable.dispose();for(let t of this.levelData)t.framebuffer.destroy(),t.texture.destroy()}}};var bft=ya,xft=Gt.Trigger,yFe=Gt.TriggerKey;function Sft(e){let t=Y.getDecomposition(e);return new XRRigidTransform(B.toObj(t.position),gr.toObj(t.quaternion))}function QFe(e,t){let r=B.fromObj(e.transform.position),n=Y.fromArray(Y(),e.transform.matrix,0),o=Y.getDecomposition(n),i=Y.fromQuat(Y(),o.quaternion),a=B.transformMat4(B(),B.negUnitZ,i),A=nu.create(r,a);return t&&nu.transform(A,A,Y.invert(Y(),t)),A}var Dft={exit:Gt([yFe("GamepadB")]),togglePassthrough:Gt([yFe("GamepadA")]),gestureScale:Gt([xft(bft.Flag.Trigger)])},iZ={bindings:Dft},aZ={minTargetDistance:h.Numeric(.4,{min:.001,max:1,step:.001}),disablePostprocessing:h.Boolean(!0),resolutionScale:h.Numeric(1,{min:.1,max:2,step:.1}),sceneRadiusInMeters:h.Numeric(.25,{min:.01,max:2,step:.01},{description:"The radius of the scene bounding sphere in meters, used to set the initial camera scale."})},rV=class{constructor(t,r,n,o,i,a,A,s={},c={}){this.webgl=t;this.input=r;this.scene=n;this.camera=o;this.stereoCamera=i;this.pointerHelper=a;this.interactionHelper=A;this.togglePassthrough=new Jn;this.sessionChanged=new Jn;this.isSupported=new _A(!1);this.xrSession=void 0;this.xrRefSpace=void 0;this.scaleFactor=1;this.prevScale=0;this.prevInput={};this.hit=void 0;this.checkSupported=async()=>{if(!navigator.xr){this.isSupported.next(!1);return}try{let[t,r]=await Promise.all([navigator.xr.isSessionSupported("immersive-ar"),navigator.xr.isSessionSupported("immersive-vr")]);this.isSupported.next(t||r)}catch(t){ir&&console.warn(t),this.isSupported.next(!1)}};this.props={...h.getDefaultValues(aZ),...s},this.attribs={...iZ,...c},this.hoverSub=this.interactionHelper.events.hover.subscribe(({position:l})=>{this.hit=l}),this.sessionChangedSub=t.xr.changed.subscribe(async()=>{await this.setSession(t.xr.session),this.sessionChanged.next()}),this.checkSupported(),navigator.xr?.addEventListener("devicechange",this.checkSupported),this.keyUpSub=r.keyUp.subscribe(({code:l,modifiers:u,key:g})=>{let m=this.attribs.bindings;Gt.matchKey(m.exit,l,u,g)&&this.end(),Gt.matchKey(m.togglePassthrough,l,u,g)&&this.togglePassthrough.next()}),this.gestureSub=r.gesture.subscribe(({scale:l,button:u,modifiers:g})=>{let m=this.attribs.bindings;Gt.match(m.gestureScale,u,g)&&this.setScaleFactor(l)})}get session(){return this.xrSession}setProps(t){Object.assign(this.props,t)}setAttribs(t){Object.assign(this.attribs,t)}intersect(t,r,n,o){let i=B(),a=QFe(o,r);if(ai.intersectRay3D(i,n,a)){let{height:A}=t.viewport,s=kM(lr(),i,t.viewport,t.projectionView),c=Le.create(Math.floor(s[0]),A-Math.floor(s[1]));return{point:i,screen:c}}}setScaleFactor(t){this.scaleFactor=t}resetScale(){this.scaleFactor=1,this.prevScale=0}update(t){let{xrSession:r,xrRefSpace:n,input:o,camera:i,stereoCamera:a,pointerHelper:A}=this;if(!t||!r||!n)return!1;i.scale=i.scale*this.scaleFactor,this.prevScale=i.scale;let s=B.sub(B(),i.position,i.target);B.scaleAndAdd(i.position,i.position,s,1-this.scaleFactor),this.scaleFactor=1;let c=Sft(i.view),l=n.getOffsetReferenceSpace(c),u=t.getViewerPose(l);if(!u)return!1;let g=t.getViewerPose(n);if(g){let w=gr.fromObj(g.transform.orientation);Y.fromQuat(i.headRotation,w)}let{depthFar:m,depthNear:p,baseLayer:d}=r.renderState;if(!d)return!1;(m!==i.far||p!==i.near)&&r.updateRenderState({depthNear:i.near,depthFar:i.far}),a.update({pose:u,layer:d});let f=a.left,I=B.scale(B(),f.state.target,f.scale),C=Y.getTranslation(B(),Y.invert(Y(),f.view)),y=B.sub(B(),C,I),Q=ai.fromNormalAndCoplanarPoint(ai(),y,I),E=[],b=[],x=[],S=[];if(r.inputSources)for(let w of r.inputSources){if(w.targetRayMode==="screen"){if(w.gamepad){let{axes:me}=w.gamepad,{width:Se,height:ee}=f.viewport,O=(me[0]+1)/2*Se,X=(me[1]+1)/2*ee,Ce=f.getRay(nu(),O,ee-X);S.push({x:O,y:X,ray:Ce})}continue}if(w.targetRayMode!=="tracked-pointer")continue;let{handedness:R,targetRaySpace:T,gamepad:L}=w;if(!R)continue;let F=t.getPose(T,n);if(!F)continue;let v=QFe(F,i.view);E.push(v);let U=we.scaleNX(we(),this.scene.boundingSphereVisible,f.scale),G=B();nu.intersectSphere3D(G,v,U)&&b.push(G);let N=ya.create(ya.Flag.None);L?.buttons[0]?.pressed&&(N|=ya.Flag.Primary),L?.buttons[1]?.pressed&&(N|=ya.Flag.Secondary),L?.buttons[3]?.pressed&&(N|=ya.Flag.Auxilary),L?.buttons[4]?.pressed&&(N|=ya.Flag.Forth),L?.buttons[5]?.pressed&&(N|=ya.Flag.Five);let k=R==="left"?this.prevInput.left:this.prevInput.right,J=this.intersect(f,i.view,Q,F),H=k?this.intersect(f,i.view,Q,k.targetRayPose):void 0,[z,_]=J?.screen??[0,0],[M,q]=H?.screen??[z,_],ne=Le.set(Le(),z-M,_-q);Le.setMagnitude(ne,ne,Math.min(100,Le.magnitude(ne)));let[oe,ae]=Le.round(ne,ne);x.push({handedness:R,buttons:N,x:z,y:_,dx:oe,dy:ae,ray:v,axes:L?.axes}),R==="left"?this.prevInput.left={targetRayPose:F}:this.prevInput.right={targetRayPose:F}}else this.prevInput.left=void 0,this.prevInput.right=void 0;return o.updateTrackedPointers(x),o.updateScreenTouches(S),A.ensureEnabled(),A.update(E,b,this.hit),!0}async setSession(t){if(this.xrSession!==t)if(await this.webgl.xr.set(t,{resolutionScale:this.props.resolutionScale}),this.xrSession=this.webgl.xr.session,this.prevInput={},this.hit=void 0,this.xrSession){this.xrRefSpace=await this.xrSession.requestReferenceSpace("local"),this.pointerHelper.setProps({enabled:"on"});let r=this.prevScale;if(r===0){let{radius:n}=this.scene.boundingSphereVisible;r=n?1/n*this.props.sceneRadiusInMeters:.01}this.camera.forceFull=!0,this.camera.scale=r,this.camera.minTargetDistance=this.props.minTargetDistance,this.prevScale=r}else this.xrRefSpace=void 0,Y.setZero(this.camera.headRotation),this.pointerHelper.setProps({enabled:"off"}),this.camera.forceFull=!1,this.camera.scale=1,this.camera.minTargetDistance=0}async end(){await this.webgl.xr.end()}async request(){if(!navigator.xr)return;let t=await navigator.xr.isSessionSupported("immersive-ar")?await navigator.xr.requestSession("immersive-ar"):await navigator.xr.requestSession("immersive-vr");await this.setSession(t)}dispose(){this.hoverSub.unsubscribe(),this.keyUpSub.unsubscribe(),this.gestureSub.unsubscribe(),this.sessionChangedSub.unsubscribe(),this.togglePassthrough.complete(),this.sessionChanged.complete(),this.isSupported.complete(),navigator.xr?.removeEventListener("devicechange",this.checkSupported)}};var nV=class{constructor(t,r,n,o,i){this.webgl=t;this.renderer=r;this.scene=n;this.helper=o;this.viewport=Jo();this.sphere=we();let a=i.pickPadding*2+1;this.camera=new Io,this.pickPass=new _v(t,a,a,1),this.buffers=new Yv(this.webgl,this.pickPass,i.maxAsyncReadLag),this.pickPadding=i.pickPadding,this.update(),MH(t)||(this.asyncIdentify=(A,s)=>({tryGet:()=>this.identify(A,s)}))}setPickPadding(t){this.pickPadding!==t&&(this.pickPadding=t,this.update())}update(){let t=this.pickPadding*2+1;Jo.set(this.viewport,0,0,t,t),this.buffers.setViewport(0,0,t,t),this.spiral=tG(this.pickPadding),this.size=t,this.pickPass.setSize(t,t)}render(t){at&&this.webgl.timer.mark("RayHelper.render",{captureStats:!0});let{renderer:r,scene:n,helper:o}=this;r.setTransparentBackground(!1),r.setDrawingBufferSize(this.size,this.size),r.setPixelRatio(1),r.setViewport(0,0,this.size,this.size),this.pickPass.render(r,t,n,o),at&&this.webgl.timer.markEnd("RayHelper.render")}identifyInternal(t,r){if(this.webgl.isContextLost)return;let{viewport:n}=this,o=this.buffers.getPickingId(t,r);if(o===void 0)return;let i=this.buffers.getDepth(t,r),a=B.create(t,r,i);return DI(a,a,n,this.camera.inverseProjectionView),{id:o,position:a}}prepare(t,r){this.camera.far=r.far,this.camera.near=r.near,this.camera.fogFar=r.fogFar,this.camera.fogNear=r.fogNear,this.camera.forceFull=r.forceFull,this.camera.scale=r.scale,Jo.copy(this.camera.viewport,this.viewport),Io.copySnapshot(this.camera.state,{...r.state,mode:"orthographic"}),vft(this.camera,t,r.up),Y.mul(this.camera.projectionView,this.camera.projection,this.camera.view),Y.tryInvert(this.camera.inverseProjectionView,this.camera.projectionView),Y.copy(this.camera.viewEye,r.view)}getPickData(){let t=this.pickPadding;for(let r of this.spiral){let n=this.identifyInternal(t+r[0],t+r[1]);if(n)return n}}intersectsScene(t,r){return we.scaleNX(this.sphere,this.scene.boundingSphereVisible,r),nu.isInsideSphere3D(t,this.sphere)||nu.isIntersectingSphere3D(t,this.sphere)}identify(t,r){if(this.intersectsScene(t,r.scale))return this.prepare(t,r),at&&this.webgl.timer.mark("RayHelper.identify"),this.render(this.camera),this.buffers.read(),at&&this.webgl.timer.markEnd("RayHelper.identify"),this.getPickData()}asyncIdentify(t,r){if(this.intersectsScene(t,r.scale))return this.prepare(t,r),at&&this.webgl.timer.mark("RayHelper.asyncIdentify"),this.render(this.camera),this.buffers.asyncRead(),at&&this.webgl.timer.markEnd("RayHelper.asyncIdentify"),{tryGet:()=>{let n=this.buffers.check();if(n===1)return this.getPickData();if(n===0)return"pending"}}}reset(){this.buffers.reset(),this.pickPass.reset()}dispose(){this.buffers.dispose(),this.pickPass.dispose()}};function vft(e,t,r){let{near:n,far:o,viewport:i}=e,a=2*Math.tan(kr(.1)/2)*B.distance(e.position,e.target)*e.scale,A=i.height/a,s=-i.width/2,c=i.width/2,l=i.height/2,u=-i.height/2,g=(c-s)/(2*A),m=(l-u)/(2*A),p=(c+s)/2,d=(l+u)/2,f=p-g,I=p+g,C=d+m,y=d-m;Y.ortho(e.projection,f,I,C,y,n,o);let Q=B.normalize(B(),t.direction),E=gr.fromUnitVec3(gr(),Q,B.negUnitZ);gr.invert(E,E);let b=B.clone(t.origin),x=B.add(B(),b,Q);Y.lookAt(e.view,b,x,r)}var AZ={intensity:h.Numeric(15,{min:1,max:100,step:1})},ds={camera:h.Group({mode:h.Select("perspective",h.arrayToOptions(["perspective","orthographic"]),{label:"Camera"}),helper:h.Group(YQ,{isFlat:!0}),stereo:h.MappedStatic("off",{on:h.Group(rZ),off:h.Group({})},{cycle:!0,hideIf:e=>e?.mode!=="perspective"}),fov:h.Numeric(45,{min:10,max:130,step:1},{label:"Field of View"}),manualReset:h.Boolean(!1,{isHidden:!0})},{pivot:"mode"}),cameraFog:h.MappedStatic("on",{on:h.Group(AZ),off:h.Group({})},{cycle:!0,description:"Show fog in the distance"}),cameraClipping:h.Group({radius:h.Numeric(100,{min:0,max:99,step:1},{label:"Clipping",description:"How much of the scene to show."}),far:h.Boolean(!0,{description:"Hide scene in the distance"}),minNear:h.Numeric(1,{min:.1,max:100,step:.1},{description:"Minimal allowed distance of near clipping plane from the camera. Note, may cause performance issues rendering impostors when set too small and cause issues with outline rendering when too close to 0."})},{pivot:"radius"}),viewport:h.MappedStatic("canvas",{canvas:h.Group({}),"static-frame":h.Group({x:h.Numeric(0),y:h.Numeric(0),width:h.Numeric(128),height:h.Numeric(128)}),"relative-frame":h.Group({x:h.Numeric(.33,{min:0,max:1,step:.01}),y:h.Numeric(.33,{min:0,max:1,step:.01}),width:h.Numeric(.5,{min:.01,max:1,step:.01}),height:h.Numeric(.5,{min:.01,max:1,step:.01})})}),cameraResetDurationMs:h.Numeric(250,{min:0,max:1e3,step:1},{description:"The time it takes to reset the camera."}),sceneRadiusFactor:h.Numeric(1,{min:1,max:10,step:.1}),transparentBackground:h.Boolean(!1),checkeredTransparentBackground:h.Boolean(!1),dpoitIterations:h.Numeric(2,{min:1,max:10,step:1}),pickPadding:h.Numeric(3,{min:0,max:10,step:1},{description:"Extra pixels to around target to check in case target is empty."}),userInteractionReleaseMs:h.Numeric(250,{min:0,max:1e3,step:1},{description:"The time before the user is not considered interacting anymore."}),multiSample:h.Group(NH),postprocessing:h.Group(Hv),marking:h.Group(YH),illumination:h.Group(zH),hiZ:h.Group(oZ),renderer:h.Group(ZD),trackball:h.Group(hR),interaction:h.Group(qX),handle:h.Group(WH),pointer:h.Group(uU),xr:h.Group(aZ,{label:"XR"})},Sd=h.getDefaultValues(ds),Fft={trackball:o6,xr:iZ};var aB;(o=>{o.DefaultAttribs={powerPreference:"high-performance",failIfMajorPerformanceCaveat:!1,antialias:!0,preserveDrawingBuffer:!0,preferWebGl1:!1,handleResize:()=>{}},o.Params={resolutionMode:h.Select("auto",h.arrayToOptions(["auto","scaled","native"])),pixelScale:h.Numeric(1,{min:.1,max:2,step:.05}),pickScale:h.Numeric(.25,{min:.1,max:1,step:.05}),transparency:h.Select("wboit",[["blended","Blended"],["wboit","Weighted, Blended"],["dpoit","Depth Peeling"]])},o.DefaultProps=h.getDefaultValues(o.Params);function n(i,a,A={},s={}){let c={...o.DefaultAttribs,...A},l={...o.DefaultProps,...s},{powerPreference:u,failIfMajorPerformanceCaveat:g,antialias:m,preserveDrawingBuffer:p,preferWebGl1:d}=c,f=YIe(i,{powerPreference:u,failIfMajorPerformanceCaveat:g,antialias:m,preserveDrawingBuffer:p,alpha:!0,depth:!0,premultipliedAlpha:!0,preferWebGl1:d});if(f===null)throw new Error("Could not create a WebGL rendering context");let I=()=>{let F=l.pixelScale/(typeof window<"u"&&window?.devicePixelRatio||1);return l.resolutionMode==="auto"?Kxe()?F:l.pixelScale:l.resolutionMode==="native"?l.pixelScale:F},C=()=>{let F=I();b.setPixelScale(F),x.setPixelScale(F)},{pickScale:y,transparency:Q}=l,E=I(),b=$8.fromElement(i,{pixelScale:E,preventGestures:!0}),x=jIe(f,{pixelScale:E}),S=new $H(x,a,{pickScale:y,transparency:Q});if(ir){let F=f.getExtension("WEBGL_lose_context");F&&i.addEventListener("mousedown",v=>{x.isContextLost||!v.shiftKey||!v.ctrlKey||!v.altKey||(ir&&console.log("lose context"),F.loseContext(),setTimeout(()=>{x.isContextLost&&(ir&&console.log("restore context"),F.restoreContext())},1e3))},!1)}let w=new Jn,R=F=>{x.setContextLost(),F.preventDefault(),ir&&console.log("context lost"),w.next(co())},T=()=>{x.isContextLost&&(x.handleContextRestored(()=>{S.draw.reset(),S.pick.reset(),S.illumination.reset()}),ir&&console.log("context restored"))};i.addEventListener("webglcontextlost",R,!1),i.addEventListener("webglcontextrestored",T,!1);let L=new _A(void 0);return{canvas:i,webgl:x,input:b,passes:S,attribs:c,get props(){return{...l}},contextLost:w,contextRestored:x.contextRestored,assetManager:a,changed:L,get pixelScale(){return I()},syncPixelScale:C,setProps:F=>{if(!F)return;let v=!1,U=!1;F.resolutionMode!==void 0&&F.resolutionMode!==l.resolutionMode&&(l.resolutionMode=F.resolutionMode,U=!0),F.pixelScale!==void 0&&F.pixelScale!==l.pixelScale&&(l.pixelScale=F.pixelScale,U=!0),U&&(C(),c.handleResize(),v=!0),F.pickScale!==void 0&&F.pickScale!==l.pickScale&&(l.pickScale=F.pickScale,S.setPickScale(F.pickScale),v=!0),F.transparency!==void 0&&F.transparency!==l.transparency&&(l.transparency=F.transparency,S.setTransparency(F.transparency),v=!0),v&&L.next(void 0)},dispose:F=>{b.dispose(),i.removeEventListener("webglcontextlost",R,!1),i.removeEventListener("webglcontextrestored",T,!1),x.destroy(F),w.complete(),L.complete()}}}o.fromCanvas=n})(aB||={});var wft=typeof window<"u"?window.requestAnimationFrame:e=>setImmediate(()=>e(Date.now())),EFe=typeof window<"u"?window.cancelAnimationFrame:e=>clearImmediate(e);function bFe(e,t){t.transparentBackground&&t.checkeredTransparentBackground?Object.assign(e.style,{"background-image":"linear-gradient(45deg, lightgrey 25%, transparent 25%, transparent 75%, lightgrey 75%, lightgrey), linear-gradient(45deg, lightgrey 25%, transparent 25%, transparent 75%, lightgrey 75%, lightgrey)","background-size":"60px 60px","background-position":"0 0, 30px 30px"}):Object.assign(e.style,{"background-image":"","background-size":"","background-position":""})}var sZ;(t=>{function e(r,n={},o={}){let{webgl:i,input:a,passes:A,assetManager:s,canvas:c,contextLost:l}=r,u={...ii(Sd),...ii(n)},g={...ii(Fft),...ii(o)},m=new Map,p=new Map,d=new _A(0),f=new Jn,I=co(),C=new _A(0),y=new _A(0),Q=new _A(0),{contextRestored:E}=i,b=0,x=0,S=128,w=128,R=!1,T=0;bFe(c,u),he();let L=Zc.create(i,A.draw.transparency,{dColorMarker:u.renderer.colorMarker,dLightCount:u.renderer.light?.length});function F(){return L.boundingSphere.radius*u.sceneRadiusFactor}let v=new Io({position:B.create(0,0,100),mode:u.camera.mode,fog:u.cameraFog.name==="on"?u.cameraFog.params.intensity:0,clipFar:u.cameraClipping.far,minNear:u.cameraClipping.minNear,fov:kr(u.camera.fov)},{x:b,y:x,width:S,height:w}),U=new iB(v,u.camera.stereo.params),G=i6.create(a,v,L,u.trackball,g.trackball),N=new qH(i,L,u),k=new tV(i,A.draw,c,u.hiZ),J=n6.create(i,u.renderer);J.setOcclusionTest(k.isOccluded);let H=new zv(i,L);H.updateRequired(u);let z={pickPadding:u.pickPadding,maxAsyncReadLag:zve.maxAsyncReadLag},_=new HH(i,J,L,N,A.pick,{x:b,y:x,width:S,height:w},z),M=new nV(i,J,L,N,z),q=new EH(oi,pa,De,a,v,G,u.interaction),ne=new Vv(A.multiSample);A.draw.postprocessing.background.update(v,u.postprocessing.background,ie=>{ie&&tt()});let oe=!1,ae={durationMs:void 0,snapshot:void 0,keyframes:void 0,easing:void 0},me=!1;function Se(){return{transparency:r.props.transparency,transparentBackground:u.transparentBackground,hiZ:k.props.enabled,postprocessing:u.postprocessing.enabled,axes:ii(N.camera.props.axes)}}let ee=Se();function O(){Object.assign(ee,Se())}function X(){u.postprocessing.enabled=ee.postprocessing,u.transparentBackground=ee.transparentBackground,r.setProps({transparency:ee.transparency}),k.setProps({enabled:ee.hiZ}),N.camera.setProps({axes:ee.axes})}function Ce(){u.postprocessing.enabled=!Ne.props.disablePostprocessing,r.setProps({transparency:"blended"}),k.setProps({enabled:!1}),N.camera.setProps({axes:{name:"off",params:{}}}),Ne.session?.environmentBlendMode==="alpha-blend"&&(u.transparentBackground=pe)}let Ne=new rV(i,a,L,v,U,N.pointer,q,u.xr,g.xr),$={request:async()=>{try{await Ne.request()}catch(ie){console.error(ie),$.requestFailed.next(ie)}},end:()=>Ne.end(),isSupported:new _A(!1),isPresenting:new _A(!1),requestFailed:new Jn},pe=!1,ye=[Ne.isSupported.subscribe(ie=>$.isSupported.next(ie)),Ne.togglePassthrough.subscribe(()=>{Ne.session?.environmentBlendMode==="alpha-blend"&&(pe=!u.transparentBackground)}),Ne.sessionChanged.subscribe(()=>{me=!0,Ne.session?(O(),pe=Ne.session?.environmentBlendMode==="alpha-blend",Ce()):X(),Zo(),$.isPresenting.next(!!Ne.session)})],Be=!0;function De(ie){let He=Ir,Me=Xt.Empty;if(ie){let $e=N.camera.getLoci(ie);if($e!==Ir)return{loci:$e,repr:Me};He=N.handle.getLoci(ie),m.forEach((Jt,Tr)=>{let xr=Tr.getLoci(ie);ga(xr)||(ga(He)||console.warn("found another loci, this should not happen"),He=xr,Me=Tr)})}return{loci:He,repr:Me}}let Te=[];function be(ie,He){Te.push([ie,He])}function Fe(){let ie=!1;for(let[He,Me]of Te)ie=Ae(He,Me)||ie;return Te=[],ie&&(L.update(void 0,!0),N.handle.scene.update(void 0,!0),N.camera.scene.update(void 0,!0),H.updateRequired(u),H.finalizeRequired(!0),f.next()),ie}function Ae(ie,He){let{repr:Me,loci:$e}=ie,Jt=!1;return Me?Jt=Me.mark($e,He)||Jt:m.forEach((Tr,xr)=>{Jt=xr.mark($e,He)||Jt}),Jt=N.handle.mark($e,He)||Jt,Jt=N.camera.mark($e,He)||Jt,Jt}function fe(ie,He){if(i.isContextLost||i.xr.session&&!He)return!1;let Me=!1;me&&(br(!1),me=!1,Me=!0);let $e=i.getDrawingBufferSize();if(b>$e.width||b+S<0||x>$e.height||x+w<0)return!1;He&&(Ce(),u.transparentBackground=pe);let Jt=Fe()&&(J.props.colorMarker||u.marking.enabled),Tr=!1;G.update(T);let xr=v.update(),_e=Ne.update(He);if(!_e&&He)return!1;let zt=J.props.enableAnimation&&L.hasAnimation,Ur=ie||xr||Me||R||_e||zt;if(R=!1,A.illumination.supported&&u.illumination.enabled&&!He){if((Ur||Jt)&&(J.setOcclusionTest(null),A.illumination.restart()),A.illumination.shouldRender(u.illumination)&&(!ao&&L.count>0||A.illumination.iteration===0||u.userInteractionReleaseMs===0)){at&&i.timer.mark("Canvas3D.render",{captureStats:!0});let Pr={renderer:J,camera:v,scene:L,helper:N};A.illumination.render(Pr,u,!0),at&&i.timer.markEnd("Canvas3D.render"),_.dirty=_.dirty||Ur,Tr=!0}}else{let Pr=ne.update(Jt||Ur,u.multiSample)&&!He;if(Ur||Pr||Jt){J.setOcclusionTest(k.isOccluded);let Si=v;(u.camera.stereo.name==="on"||_e)&&(_e||U.update(),Si=U),at&&i.timer.mark("Canvas3D.render",{captureStats:!0});let va={renderer:J,camera:Si,scene:L,helper:N};if(Hh.isEnabled(u.multiSample)&&!He){let Qs=u.multiSample.reduceFlicker&&!xr&&Jt&&!G.isAnimating;ne.render(va,u,!0,Qs)}else A.draw.render(va,u,!0);k.render(v),at&&i.timer.markEnd("Canvas3D.render"),_.dirty=_.dirty||Ur,Tr=!0}}return Tr}let Qe=!1,Ie=!1,le=!1;function Oe(ie){if(!(Ie||le)){if(!H.finalizeRequired(ie?.isSynchronous)){R=!0;return}fe(!!ie?.force,ie?.xrFrame)&&Be&&C.next(co()-I)}}function tt(){R=!0}let it=0;function Rt(ie,He){le||i.xr.session&&!He?.xrFrame||(T=ie,J.setTime((T-I)/1e3),io(He?.isSynchronous),He?.updateControls&&G.update(T),v.transition.tick(T),k.tick(),!He?.manualDraw&&(Oe({isSynchronous:He?.isSynchronous,xrFrame:He?.xrFrame}),!v.transition.inTransition&&!i.isContextLost&&q.tick(T)))}let Mt;function Bt(ie){return Mt=ie,i.xr.session?i.xr.session.requestAnimationFrame(ie):wft(ie)}function Zt(ie){Mt=void 0,i.xr.session?i.xr.session.cancelAnimationFrame(ie):EFe(ie)}function Nr(ie,He){Rt(co(),{xrFrame:He}),it=Bt(Nr)}function un(ie){I=ie,G.start(ie)}function xn(){Ie=!1,G.start(co()),it===0&&Nr(0)}function On(ie=!1){Ie=ie,it!==0&&(Zt(it),it=0)}function Zo(){Ie=!1,Mt&&Bt(Mt)}function oi(ie){if(!i.isContextLost){if(H.finalize(["pick"],!0),"origin"in ie)return M.identify(ie,v);{let He=u.camera.stereo.name==="on"?U:v;return _.identify(ie[0],ie[1],He)}}}function pa(ie){if(!i.isContextLost){if(H.finalize(["pick"],!0),"origin"in ie)return M.asyncIdentify(ie,v);{let He=u.camera.stereo.name==="on"?U:v;return _.asyncIdentify(ie[0],ie[1],He)}}}function io(ie=!1){let He=wt(ie);H.updateRequired(u),He&&(j(),Qe&&(N.debug.isEnabled&&N.debug.update(),Oe({force:!0}),Qe=!1),y.next(co()))}function j(){if(!oe)return;$.isPresenting.value||Ne.resetScale();let ie=L.boundingSphereVisible,{center:He,radius:Me}=ie,$e=G.props.autoAdjustMinMaxDistance;if($e.name==="on"){let Jt=$e.params.minDistanceFactor*Me+$e.params.minDistancePadding,Tr=Math.max($e.params.maxDistanceFactor*Me,$e.params.maxDistanceMin);G.setProps({minDistance:Jt,maxDistance:Tr})}if(Me>0){let Jt=ae.durationMs===void 0?u.cameraResetDurationMs:ae.durationMs,Tr=v.getFocus(He,Me),xr=typeof ae.snapshot=="function"?ae.snapshot(L,v):ae.snapshot,_e=xr?{...Tr,...xr}:Tr;v.setState({..._e,radiusMax:F()},Jt,{keyframes:ae.keyframes,easing:ae.easing})}ae.durationMs=void 0,ae.snapshot=void 0,ae.keyframes=void 0,ae.easing=void 0,oe=!1}let ue=we(),et=we();function gt(){if(v.state.radiusMax===0)return!0;if(v.transition.inTransition||ae.snapshot)return!1;let ie=!0,He=!0;we.set(et,v.state.target,v.state.radius);for(let Me of L.renderables){if(!Me.state.visible)continue;let $e=Me.values.boundingSphere.ref.value;if(!$e.radius)continue;He=!1;let Jt=B.distance(et.center,$e.center);if((Jt>et.radius||Jt>$e.radius||$e.radius>v.state.radiusMax)&&!we.includes(ue,$e))return!0;we.overlaps(et,$e)&&(ie=!1)}return ie||!He&&et.radius<=.1}let ht=250;function wt(ie){return L.needsCommit?(we.copy(ue,L.boundingSphereVisible),k.clear(),L.commit(ie?void 0:ht)?(Q.next(0),N.debug.isEnabled&&N.debug.update(),!u.camera.manualReset&&(d.value===0||gt())&&(oe=!0),ue.radius===0&&(ae.durationMs=0),u.camera.manualReset||v.setState({radiusMax:F()},0),d.next(m.size),ir&&Ut(),!0):(Q.next(L.commitQueueSize),!1)):!0}function Ut(){let ie=L.renderables.map(_e=>({drawCount:_e.values.drawCount.ref.value,instanceCount:_e.values.instanceCount.ref.value,materialId:_e.materialId,renderItemId:_e.id,geometryType:_e.values.dGeometryType.ref.value,"byteCount [MiB]":yge(_e.getByteCount()/1024/1024,3)}));console.groupCollapsed(`${ie.length} RenderItems`),ie.length<=64?console.table(ie):console.log(ie),console.log(JSON.stringify(i.stats,void 0,4));let{texture:He,cubeTexture:Me,attribute:$e,elements:Jt,pixelPack:Tr,renderbuffer:xr}=i.resources.getByteCounts();console.log(JSON.stringify({texture:`${(He/1024/1024).toFixed(3)} MiB`,cubeTexture:`${(Me/1024/1024).toFixed(3)} MiB`,attribute:`${($e/1024/1024).toFixed(3)} MiB`,elements:`${(Jt/1024/1024).toFixed(3)} MiB`,pixelPack:`${(Tr/1024/1024).toFixed(3)} MiB`,renderbuffer:`${(xr/1024/1024).toFixed(3)} MiB`},void 0,4)),console.log(JSON.stringify({renderables:`${(L.renderables.reduce((_e,zt)=>_e+zt.getByteCount(),0)/1024/1024).toFixed(3)} MiB`,passes:{draw:`${(A.draw.getByteCount()/1024/1024).toFixed(3)} MiB`,illumination:`${(A.illumination.getByteCount()/1024/1024).toFixed(3)} MiB`,pick:`${(A.pick.getByteCount()/1024/1024).toFixed(3)} MiB`,hiZ:`${(k.getByteCount()/1024/1024).toFixed(3)} MiB`}},void 0,4)),at&&console.log(JSON.stringify(i.timer.formatedStats(),void 0,4)),console.groupEnd()}function Wt(ie){Kt(ie);let He=m.get(ie),Me=new Set;ie.renderObjects.forEach($e=>Me.add($e)),He?lo.areEqual(Me,He)||(Me.forEach($e=>{He.has($e)||L.add($e)}),He.forEach($e=>{Me.has($e)||L.remove($e)})):ie.renderObjects.forEach($e=>L.add($e)),m.set(ie,Me),L.update(ie.renderObjects,!1),Qe=!0,ir&&Ut()}function qt(ie){Ot(ie);let He=m.get(ie);He&&(He.forEach(Me=>L.remove(Me)),m.delete(ie),Qe=!0,ir&&Ut())}function Kt(ie){p.has(ie)||p.set(ie,ie.updated.subscribe(He=>{ie.state.syncManually||Wt(ie)}))}function Ot(ie){let He=p.get(ie);He&&(He.unsubscribe(),p.delete(ie))}function Ar(){let ie=L.boundingSphere.radius>0?100-Math.round(v.transition.target.radius/F()*100):0;return{camera:{mode:v.state.mode,helper:{...N.camera.props},stereo:{...u.camera.stereo},fov:Math.round(yA(v.state.fov)),manualReset:!!u.camera.manualReset},cameraFog:v.state.fog>0?{name:"on",params:{intensity:v.state.fog}}:{name:"off",params:{}},cameraClipping:{far:v.state.clipFar,radius:ie,minNear:v.state.minNear},cameraResetDurationMs:u.cameraResetDurationMs,sceneRadiusFactor:u.sceneRadiusFactor,transparentBackground:u.transparentBackground,checkeredTransparentBackground:u.checkeredTransparentBackground,dpoitIterations:u.dpoitIterations,pickPadding:u.pickPadding,userInteractionReleaseMs:u.userInteractionReleaseMs,viewport:u.viewport,postprocessing:{...u.postprocessing},marking:{...u.marking},multiSample:{...u.multiSample},illumination:{...u.illumination},hiZ:{...k.props},renderer:{...J.props},trackball:{...G.props},interaction:{...q.props},handle:{...N.handle.props},pointer:{...N.pointer.props},xr:{...Ne.props}}}let cr=l?.subscribe(()=>{le=!0,_.dirty=!0}),rr=E.subscribe(()=>{_.reset(),M.reset(),k.reset(),L.forEach(ie=>{ie.values.meta?.ref.value.reset&&(ie.values.meta.ref.value.reset(),ie.update())}),le=!1,Oe({force:!0}),Oe({force:!0})}),yr=new _A(0);function br(ie=!0){A.updateSize(),he(),Ge(),ie&&tt(),yr.next(+new Date)}Oce(Ut);let nr=r.changed?.subscribe(()=>{L.setTransparency(A.draw.transparency),tt()}),se=!1,ao=!1,Yr=[a.drag.subscribe(()=>{se=!0}),a.interactionEnd.subscribe(()=>{se=!1}),ml(a.drag,a.pinch,a.wheel,a.interactionEnd).subscribe(()=>{f.next()}),f.subscribe(()=>{ao=!0}),f.pipe(cp(u.userInteractionReleaseMs)).subscribe(()=>{ao=se,!se&&A.illumination.supported&&u.illumination.enabled&&tt()})];if(ir&&c){let ie,He=Me=>{let $e=Me&&pr.getBoundingSphere(pr.normalize(Me,"residue"));k.debugOcclusion($e)};a.click.subscribe(Me=>{if(!Me.modifiers.control||Me.button!==2)return;let $e=oi(Le.create(Me.x,Me.y));if(!$e){ie=void 0,He(ie);return}ie=De($e.id).loci,He(ie)}),C.subscribe(()=>{setTimeout(()=>{He(ie)},100)})}return{webgl:i,add:Wt,remove:qt,commit:io,update:(ie,He)=>{if(ie){if(!m.has(ie))return;L.update(ie.renderObjects,!!He)}else L.update(void 0,!!He);Qe=!0},clear:()=>{p.forEach(ie=>ie.unsubscribe()),p.clear(),m.clear(),L.clear(),N.debug.clear(),tt(),d.next(m.size)},syncVisibility:()=>{v.state.radiusMax===0&&(oe=!0,ae.durationMs=0),L.syncVisibility()&&N.debug.isEnabled&&N.debug.update(),tt()},requestDraw:tt,tick:Rt,animate:xn,resetTime:un,pause:On,resume:Zo,requestAnimationFrame:Bt,cancelAnimationFrame:Zt,identify:oi,asyncIdentify:pa,mark:be,getLoci:De,handleResize:br,requestResize:()=>{me=!0},requestCameraReset:ie=>{Object.assign(ae,ie),oe=!0},camera:v,boundingSphere:L.boundingSphere,boundingSphereVisible:L.boundingSphereVisible,get notifyDidDraw(){return Be},set notifyDidDraw(ie){Be=ie},didDraw:C,commited:y,commitQueueSize:Q,reprCount:d,resized:yr,setProps:(ie,He=!1)=>{let Me=typeof ie=="function"?Wc(Ar(),ie):ie;Me.sceneRadiusFactor!==void 0&&(u.sceneRadiusFactor=Me.sceneRadiusFactor,v.setState({radiusMax:F()},0));let $e=Object.create(null);Me.camera&&Me.camera.mode!==void 0&&Me.camera.mode!==v.state.mode&&($e.mode=Me.camera.mode);let Jt=Math.round(yA(v.state.fov));if(Me.camera&&Me.camera.fov!==void 0&&Me.camera.fov!==Jt&&($e.fov=kr(Me.camera.fov)),Me.cameraFog!==void 0&&Me.cameraFog.params){let Tr=Me.cameraFog.name==="on"?Me.cameraFog.params.intensity:0;Tr!==v.state.fog&&($e.fog=Tr)}if(Me.cameraClipping!==void 0&&(Me.cameraClipping.far!==void 0&&Me.cameraClipping.far!==v.state.clipFar&&($e.clipFar=Me.cameraClipping.far),Me.cameraClipping.minNear!==void 0&&Me.cameraClipping.minNear!==v.state.minNear&&($e.minNear=Me.cameraClipping.minNear),Me.cameraClipping.radius!==void 0)){let Tr=F()/100*(100-Me.cameraClipping.radius);Tr>0&&Tr!==$e.radius&&($e.radius=Math.max(Tr,.01))}Object.keys($e).length>0&&v.setState($e),Me.camera?.helper&&N.camera.setProps(Me.camera.helper),Me.camera?.manualReset!==void 0&&(u.camera.manualReset=Me.camera.manualReset),Me.camera?.stereo!==void 0&&(Object.assign(u.camera.stereo,Me.camera.stereo),U.setProps(u.camera.stereo.params)),Me.cameraResetDurationMs!==void 0&&(u.cameraResetDurationMs=Me.cameraResetDurationMs),Me.transparentBackground!==void 0&&(u.transparentBackground=Me.transparentBackground),Me.checkeredTransparentBackground!==void 0&&(u.checkeredTransparentBackground=Me.checkeredTransparentBackground),Me.dpoitIterations!==void 0&&(u.dpoitIterations=Me.dpoitIterations),Me.pickPadding!==void 0&&(u.pickPadding=Me.pickPadding,_.setPickPadding(u.pickPadding)),Me.userInteractionReleaseMs!==void 0&&(u.userInteractionReleaseMs=Me.userInteractionReleaseMs),Me.viewport!==void 0&&(u.viewport===Me.viewport||u.viewport.name===Me.viewport.name&&Gb(u.viewport.params,Me.viewport.params)||(u.viewport=Me.viewport,he(),Ge())),Me.postprocessing?.background&&(Object.assign(u.postprocessing.background,Me.postprocessing.background),A.draw.postprocessing.background.update(v,u.postprocessing.background,Tr=>{Tr&&!He&&tt()})),Me.postprocessing&&Object.assign(u.postprocessing,Me.postprocessing),Me.marking&&Object.assign(u.marking,Me.marking),Me.illumination&&Object.assign(u.illumination,Me.illumination),Me.multiSample&&Object.assign(u.multiSample,Me.multiSample),Me.hiZ&&k.setProps(Me.hiZ),Me.renderer&&(L.setGlobals({dColorMarker:Me.renderer.colorMarker??J.props.colorMarker,dLightCount:Me.renderer.light?.length??J.props.light.length}),J.setProps(Me.renderer)),Me.trackball&&G.setProps(Me.trackball),Me.interaction&&q.setProps(Me.interaction),Me.handle&&N.handle.setProps(Me.handle),Me.pointer&&N.pointer.setProps(Me.pointer),Me.xr&&Ne.setProps(Me.xr),$e.mode==="orthographic"&&(u.camera.stereo.name="off"),("transparentBackground"in Me||"checkeredTransparentBackground"in Me||Me.renderer&&"backgroundColor"in Me.renderer)&&bFe(c,u),H.updateRequired(u),He||tt()},setAttribs:ie=>{ie.trackball&&G.setAttribs(ie.trackball),ie.xr&&Ne.setAttribs(ie.xr)},getImagePass:(ie={})=>new KH(i,s,J,L,v,N,ie),getRenderObjects(){let ie=[];return L.forEach((He,Me)=>ie.push(Me)),ie},get props(){return Ar()},get attribs(){return{trackball:G.attribs,xr:Ne.attribs}},get input(){return a},get stats(){return J.stats},get interaction(){return q.events},debugRegistry:N.debug,xr:$,dispose:()=>{cr?.unsubscribe(),rr.unsubscribe(),nr?.unsubscribe();for(let ie of ye)ie.unsubscribe();ye.length=0;for(let ie of Yr)ie.unsubscribe();Yr.length=0,EFe(it),Mt=void 0,Te=[],L.clear(),N.debug.clear(),G.dispose(),J.dispose(),q.dispose(),k.dispose(),_.dispose(),M.dispose(),Ne.dispose(),d.complete(),f.complete(),C.complete(),yr.complete(),y.complete(),Q.complete(),$.isPresenting.complete(),$.isSupported.complete(),$.requestFailed.complete(),Jce(Ut)}};function he(){let ie=b,He=x,Me=S,$e=w,Jt=i.getDrawingBufferSize();u.viewport.name==="canvas"?(b=0,x=0,S=Jt.width,w=Jt.height):u.viewport.name==="static-frame"?(b=u.viewport.params.x*i.pixelRatio,w=u.viewport.params.height*i.pixelRatio,x=Jt.height-w-u.viewport.params.y*i.pixelRatio,S=u.viewport.params.width*i.pixelRatio):u.viewport.name==="relative-frame"&&(b=Math.round(u.viewport.params.x*Jt.width),w=Math.round(u.viewport.params.height*Jt.height),x=Math.round(Jt.height-w-u.viewport.params.y*Jt.height),S=Math.round(u.viewport.params.width*Jt.width)),(ie!==b||He!==x||Me!==S||$e!==w)&&(R=!0)}function Ge(){_.setViewport(b,x,S,w),J.setViewport(b,x,S,w),Jo.set(v.viewport,b,x,S,w),Jo.set(G.viewport,b,x,S,w),k.setViewport(b,x,S,w)}}t.create=e})(sZ||={});function Rft(e,t,r,n=1){e.width=Math.round(window.devicePixelRatio*n*t),e.height=Math.round(window.devicePixelRatio*n*r),Object.assign(e.style,{width:`${t}px`,height:`${r}px`})}function xFe(e,t,r=1){let n=window.innerWidth,o=window.innerHeight;t!==document.body&&(n=t.offsetWidth,o=t.offsetHeight),Rft(e,n,o,r)}function Uft(e,t,r,n){let o=atob(e.toDataURL(r,n).split(",")[1]),i=o.length,a=i>>2,A=new Uint8Array(i),s=new Uint32Array(A.buffer,0,a),c=0;for(let u=0;u<a;++u)s[u]=o.charCodeAt(c++)|o.charCodeAt(c++)<<8|o.charCodeAt(c++)<<16|o.charCodeAt(c++)<<24;let l=i&3;for(;l--;)A[c]=o.charCodeAt(c++);t(new Blob([A],{type:r||"image/png"}))}async function gU(e,t,r){return new Promise((n,o)=>{let i=a=>{a?n(a):o("no blob returned")};HTMLCanvasElement.prototype.toBlob?e.toBlob(i,t,r):Uft(e,i,t,r)})}var mU;(t=>{class e{constructor(){this.providers=Cc().asMutable();this.defaultAutoAttachValues=new Map}getParams(n){let o={},i=[],a=[];if(n){let A=this.providers.values();for(;;){let s=A.next();if(s.done)break;let c=s.value;c.isApplicable(n)&&(c.isHidden||(i.push([c.descriptor.name,c.label]),this.defaultAutoAttachValues.get(c.descriptor.name)&&a.push(c.descriptor.name)),o[c.descriptor.name]=h.Group({...c.getParams(n)},{label:c.label,isHidden:c.isHidden}))}}return{autoAttach:h.MultiSelect(a,i),properties:h.Group(o,{isFlat:!0})}}setDefaultAutoAttach(n,o){this.defaultAutoAttachValues.set(n,o)}get(n){if(!this.providers.get(n))throw new Error(`Custom property '${n}' is not registered.`);return this.providers.get(n)}register(n,o){this.providers.set(n.descriptor.name,n),this.defaultAutoAttachValues.set(n.descriptor.name,o)}unregister(n){this.providers.delete(n),this.defaultAutoAttachValues.delete(n)}}t.Registry=e})(mU||={});var Lft=["gz","zip"];function _h(e){let t=e,r="",n=t.lastIndexOf("?"),o=n!==-1?t.substring(n):"";t=t.substring(0,n===-1?t.length:n);let i=t.replace(/^.*[\\/]/,""),a=i.substring(0,i.lastIndexOf(".")),A=i.split("."),s=A.length>1?(A.pop()||"").toLowerCase():"",c=t.match(/^(.+):\/\/(.+)$/);c&&(r=c[1].toLowerCase(),t=c[2]||"");let l=t.substring(0,t.lastIndexOf("/")+1);if(Lft.includes(s)){let u=t.length-s.length-1;s=(t.substring(0,u).split(".").pop()||"").toLowerCase();let g=a.length-s.length-1;a=a.substring(0,g)}return{path:t,name:i,ext:s,base:a,dir:l,protocol:r,query:o}}var oV=class{constructor(t){this.plugin=t}get dataState(){return this.plugin.state.data}rawData(t,r){return this.dataState.build().toRoot().apply(_6,t,r).commit({revertOnError:!0})}download(t,r){return this.dataState.build().toRoot().apply(G0,t,r).commit({revertOnError:!0})}downloadBlob(t,r){return this.dataState.build().toRoot().apply(V6,t,r).commit({revertOnError:!0})}async readFile(t,r){let n=await this.dataState.build().toRoot().apply(Y6,t,r).commit({revertOnError:!0}),o=_h(t.file?.file?.name??"");return{data:n,fileInfo:o}}};function OQ(e,t,r={}){let n=r;return typeof n.type=="string"||typeof n.color=="string"||typeof n.size=="string"?Tft(e,t||Ye.Empty,r):DFe(e,t||Ye.Empty,r)}function SFe(e,t){let{themes:r}=e.representation.structure;return t?r.colorThemeRegistry.getApplicableTypes({structure:t}):r.colorThemeRegistry.types}function dU(e,t,r,n,o){let{registry:i,themes:a}=e.representation.structure,A=i.get(r||i.default.name),s=a.colorThemeRegistry.get(n||A.defaultColorTheme.name),c=h.getDefaultValues(s.getParams({structure:t||Ye.Empty}));return s.name===A.defaultColorTheme.name&&Object.assign(c,A.defaultColorTheme.props),{name:s.name,params:Object.assign(c,o)}}function cZ(e,t,r,n,o){let{registry:i,themes:a}=e.representation.structure,A=i.get(r||i.default.name),s=a.sizeThemeRegistry.get(n||A.defaultSizeTheme.name),c=h.getDefaultValues(s.getParams({structure:t||Ye.Empty}));return s.name===A.defaultSizeTheme.name&&Object.assign(c,A.defaultSizeTheme.props),{name:s.name,params:Object.assign(c,o)}}function Tft(e,t,r){let n=r.type&&e.representation.structure.registry.get(r.type)||e.representation.structure.registry.default.provider,o=r.color&&e.representation.structure.themes.colorThemeRegistry.get(r.color)||e.representation.structure.themes.colorThemeRegistry.get(n.defaultColorTheme.name),i=r.size&&e.representation.structure.themes.sizeThemeRegistry.get(r.size)||e.representation.structure.themes.sizeThemeRegistry.get(n.defaultSizeTheme.name);return DFe(e,t,{type:n,typeParams:r.typeParams,color:o,colorParams:r.colorParams,size:i,sizeParams:r.sizeParams})}function DFe(e,t,r={}){let{themes:n}=e.representation.structure,o={structure:t},i=r.type||e.representation.structure.registry.default.provider,a=h.getDefaultValues(i.getParams(n,t)),A=Object.assign(a,r.typeParams),s=r.color||n.colorThemeRegistry.get(i.defaultColorTheme.name),c=h.getDefaultValues(s.getParams(o));s.name===i.defaultColorTheme.name&&Object.assign(c,i.defaultColorTheme.props);let l=Object.assign(c,r.colorParams),u=r.size||n.sizeThemeRegistry.get(i.defaultSizeTheme.name),g=h.getDefaultValues(u.getParams(o));u.name===i.defaultSizeTheme.name&&Object.assign(g,i.defaultSizeTheme.props);let m=Object.assign(g,r.sizeParams);return{type:{name:i.name,params:A},colorTheme:{name:s.name,params:l},sizeTheme:{name:u.name,params:m}}}var lZ={get defaultTransparency(){return uX()?"blended":"wboit"},get preferWebGl1(){return typeof navigator>"u"||typeof window>"u"?!1:["Version/15.1 Safari","Version/15.2 Safari","Version/15.3 Safari"].some(t=>navigator.userAgent.indexOf(t)>0)?!0:uX()}};var Gp=class{constructor(t,r){this.key=t;this.defaultValue=r}toString(){return this.key}valueOf(){return this.key}};function wi(e,t){return new Gp(e,t)}var jt={item:wi,General:{IsBusyTimeoutMs:wi("plugin-config.is-busy-timeout",750),DisableAntialiasing:wi("plugin-config.disable-antialiasing",!1),DisablePreserveDrawingBuffer:wi("plugin-config.disable-preserve-drawing-buffer",!1),PixelScale:wi("plugin-config.pixel-scale",1),PickScale:wi("plugin-config.pick-scale",.25),Transparency:wi("plugin-config.transparency",lZ.defaultTransparency),PreferWebGl1:wi("plugin-config.prefer-webgl1",lZ.preferWebGl1),AllowMajorPerformanceCaveat:wi("plugin-config.allow-major-performance-caveat",!1),PowerPreference:wi("plugin-config.power-preference","high-performance"),ResolutionMode:wi("plugin-config.resolution-mode","auto")},State:{DefaultServer:wi("plugin-state.server","https://webchem.ncbr.muni.cz/molstar-state"),CurrentServer:wi("plugin-state.server","https://webchem.ncbr.muni.cz/molstar-state"),HistoryCapacity:wi("history-capacity.server",5)},VolumeStreaming:{Enabled:wi("volume-streaming.enabled",!0),DefaultServer:wi("volume-streaming.server","https://ds.litemol.org"),CanStream:wi("volume-streaming.can-stream",(e,t)=>e.models.length===1&&_t.probablyHasDensityMap(e.models[0])),EmdbHeaderServer:wi("volume-streaming.emdb-header-server","https://files.wwpdb.org/pub/emdb/structures")},Viewport:{ShowReset:wi("viewer.show-reset-button",!0),ShowExpand:wi("viewer.show-expand-button",!0),ShowToggleFullscreen:wi("viewer.show-toggle-fullscreen-button",!0),ShowControls:wi("viewer.show-controls-button",!0),ShowSettings:wi("viewer.show-settings-button",!0),ShowSelectionMode:wi("viewer.show-selection-model-button",!0),ShowAnimation:wi("viewer.show-animation-button",!0),ShowTrajectoryControls:wi("viewer.show-trajectory-controls",!0),ShowScreenshotControls:wi("viewer.show-screenshot-controls",!0),ShowIllumination:wi("viewer.show-illumination-button",!0),ShowXR:wi("viewer.show-xr","always")},Download:{DefaultPdbProvider:wi("download.default-pdb-provider","pdbe"),DefaultEmdbProvider:wi("download.default-emdb-provider","pdbe")},Structure:{SizeThresholds:wi("structure.size-thresholds",Ye.DefaultSizeThresholds),DefaultRepresentationPreset:wi("structure.default-representation-preset","preset-structure-representation-auto"),DefaultRepresentationPresetParams:wi("structure.default-representation-preset-params",{}),SaccharideCompIdMapType:wi("structure.saccharide-comp-id-map-type","default")},Background:{Styles:wi("background.styles",[])}},iV=class{constructor(t){this._config=new Map;t&&t.forEach(([r,n])=>this._config.set(r,n))}get(t){return this._config.has(t)?this._config.get(t):t.defaultValue}set(t,r){this._config.set(t,r)}delete(t){this._config.delete(t)}};function Eo(e,t,r,n){let o=0,{webgl:i}=t,a=new Jn,A=new Xt.GeometryState,s=FA(),c=[],l=Vn.create(),u,g,m,p,d=Gi.createEmpty();function f(S={},w){return w&&w!==g&&(m=r(t,w),g=w,p||(p=h.getDefaultValues(m))),p=Object.assign({},p,S),ve.create("Creating or updating ComplexRepresentation",async R=>{let T=!1;u?u.mustRecreate?.(g,p,i)&&(u.destroy(),u=n(s,g,p,i),T=!0):(u=n(s,g,p,i),T=!0);let L=u.createOrUpdate({webgl:i,runtime:R},d,p,w);L&&await L,T&&E(l),c.length=0,u&&u.renderObject&&(c.push(u.renderObject),A.add(u.renderObject.id,u.geometryVersion)),A.snapshot(),o+=1,a.next(o)})}function I(S){return u?u.getLoci(S):Ir}function C(){return[Ye.Loci(g.child??g)]}function y(S){u?.eachLocation(S)}function Q(S,w){if(!g||!Ko.is(l.markerActions,w))return!1;if(Ye.isLoci(S)||W.Loci.is(S)||Et.isLoci(S)){if(!Ye.areRootsEquivalent(S.structure,g))return!1;S=pr.remap(S,g),(Ye.isLoci(S)||W.Loci.is(S)&&W.Loci.isWholeStructure(S))&&(S=Bp)}else if(!uA(S)&&!b0(S))return!1;return pr.isEmpty(S)?!1:u?u.mark(S,w):!1}function E(S){if(Vn.update(l,S),S.visible!==void 0&&u&&u.setVisibility(S.visible&&(l.unitTransforms===null||l.unitTransforms.isIdentity)),S.alphaFactor!==void 0&&u&&u.setAlphaFactor(S.alphaFactor),S.pickable!==void 0&&u&&u.setPickable(S.pickable),S.overpaint!==void 0&&u){let w=cs.remap(S.overpaint,g);u.setOverpaint(w,i)}if(S.transparency!==void 0&&u){let w=ls.remap(S.transparency,g);u.setTransparency(w,i)}if(S.emissive!==void 0&&u){let w=gs.remap(S.emissive,g);u.setEmissive(w,i)}if(S.substance!==void 0&&u){let w=us.remap(S.substance,g);u.setSubstance(w,i)}if(S.clipping!==void 0&&u){let w=si.remap(S.clipping,g);u.setClipping(w)}if(S.wiggle!==void 0&&u){let w=RA.remap(S.wiggle,g);u.setWiggle(w,i)}S.themeStrength!==void 0&&u&&u.setThemeStrength(S.themeStrength),S.transform!==void 0&&u&&u.setTransform(S.transform),S.unitTransforms!==void 0&&u&&u.setVisibility(l.visible&&(S.unitTransforms===null||S.unitTransforms.isIdentity))}function b(S){d=S}function x(){u&&u.destroy()}return{label:e,get groupCount(){return u?u.groupCount:0},get props(){return p},get params(){return m},get state(){return l},get theme(){return d},get geometryVersion(){return A.version},renderObjects:c,updated:a,createOrUpdate:f,setState:E,setTheme:b,getLoci:I,getAllLoci:C,eachLocation:y,mark:Q,destroy:x}}function zn(e,t){return e.model.atomicHierarchy.atoms.type_symbol.value(e.elements[t])}function aV(e,t){return e.model.atomicHierarchy.atoms.pdbx_formal_charge.value(e.elements[t])}function JQ(e,t){return e.model.atomicHierarchy.atoms.label_atom_id.value(e.elements[t])}function pU(e,t){return e.model.atomicHierarchy.atoms.label_alt_id.value(e.elements[t])}function fU(e,t){return e.model.atomicHierarchy.atoms.label_comp_id.value(e.elements[t])}function Pft(e,t,r){let n=0,o=e.interUnitBonds.getEdgeIndices(r,t.id);for(let i=0,a=o.length;i<a;++i){let A=e.interUnitBonds.edges[o[i]];It.isCovalent(A.props.flag)&&(n+=1)}return n}function Gft(e,t){let r=0,{offset:n,edgeProps:{flags:o}}=e.bonds;for(let i=n[t],a=n[t+1];i<a;++i)It.isCovalent(o[i])&&(r+=1);return r}function Zu(e,t,r){return Pft(e,t,r)+Gft(t,r)}function qc(e,t,r,n){let o=0;return nc(e,t,r,(i,a)=>{zn(i,a)===n&&(o+=1)}),o}function Nft(e,t,r){let{offset:n,b:o,edgeProps:{flags:i}}=e.bonds;It.is;for(let a=n[t],A=n[t+1];a<A;++a)if(o[a]===r&&It.isCovalent(i[a]))return!0;return!1}function Mft(e,t,r,n,o){let i=e.interUnitBonds.getEdge(r,t.id,o,n.id);return i&&It.isCovalent(i.props.flag)}function vFe(e,t,r,n,o){return t===n?Nft(t,r,o):Mft(e,t,r,n,o)}function kft(e,t,r,n){let o=e.interUnitBonds.getEdgeIndices(r,t.id);for(let i=0,a=o.length;i<a;++i){let A=e.interUnitBonds.edges[o[i]],s=e.unitMap.get(A.unitB);It.isCovalent(A.props.flag)&&n(s,A.indexB)}}function q0(e,t,r){let{offset:n,b:o,edgeProps:{flags:i}}=e.bonds;for(let a=n[t],A=n[t+1];a<A;++a)It.isCovalent(i[a])&&r(e,o[a])}function nc(e,t,r,n){kft(e,t,r,n),q0(t,r,n)}function FFe(e,t,r){return zn(t,r)==="N"&&Zu(e,t,r)===4&&qc(e,t,r,"H")===0}function wFe(e,t,r){return zn(t,r)==="S"&&qc(e,t,r,"O")===3}function RFe(e,t,r){return zn(t,r)==="S"&&qc(e,t,r,"O")===4}function uZ(e,t,r){return zn(t,r)==="P"&&qc(e,t,r,"O")===Zu(e,t,r)}function UFe(e,t,r){let n=0;return zn(t,r)==="C"&&qc(e,t,r,"O")===2&&qc(e,t,r,"C")===1&&nc(e,t,r,(o,i)=>{zn(o,i)==="O"&&Zu(e,o,i)-qc(e,o,i,"H")===1&&(n+=1)}),n===2}function LFe(e,t,r){let n=0;return zn(t,r)==="C"&&Zu(e,t,r)===3&&qc(e,t,r,"N")===3&&nc(e,t,r,(o,i)=>{Zu(e,o,i)-qc(e,o,i,"H")===1&&(n+=1)}),n===2}function TFe(e,t,r){let n=0;return zn(t,r)==="C"&&Zu(e,t,r)===3&&qc(e,t,r,"N")===2&&qc(e,t,r,"C")===1&&nc(e,t,r,(o,i)=>{Zu(e,o,i)-qc(e,o,i,"H")===1&&(n+=1)}),n===2}var Hft=new Set(["N","O","S","F","CL","BR","I"]);function Vft(e){return Hft.has(e)}function PFe(e,t,r){let n=!1;return nc(e,t,r,(o,i)=>{Vft(zn(o,i))&&(n=!0)}),n}var _ft=Y.toArray,AV=!1;function Kv(e){if(!e)ir&&!AV&&(console.warn('WebGL required for "sphere impostors". Falling back to "sphere mesh".'),AV=!0);else if(!e.extensions.fragDepth||!e.extensions.textureFloat){if(ir&&!AV){let t=[];e.extensions.fragDepth||t.push("fragDepth"),e.extensions.textureFloat||t.push("textureFloat"),console.warn(`Missing "${t.join('", "')}" extensions required for "sphere impostors". Falling back to "sphere mesh".`),AV=!0}}else return!0;return!1}var sV=!1;function zQ(e){if(!e)ir&&!sV&&(console.warn('WebGL required for "cylinder impostors". Falling back to "cylinder mesh".'),sV=!0);else{if(e.extensions.fragDepth)return!0;if(ir&&!sV){let t=[];e.extensions.fragDepth||t.push("fragDepth"),console.warn(`Missing "${t.join('", "')}" extensions required for "cylinder impostors". Falling back to "cylinder mesh".`),sV=!0}}return!1}function cV(e,t,r){let{elements:n,model:o}=t;if(Ee.indexOf(n,r)!==-1){let{index:i,offsets:a}=o.atomicHierarchy.residueAtomSegments,A=i[r],s=[];for(let l=a[A],u=a[A+1];l<u;++l){let g=Ee.indexOf(n,l);g!==-1&&s.push(g)}let c=Ee.ofSortedArray(je.ofSortedArray(s));return W.Loci(e,[{unit:t,indices:c}])}return Ir}function GFe(e,t,r){let{elements:n,model:o}=t,{label_alt_id:i}=o.atomicHierarchy.atoms,a=i.value(r);if(Ee.indexOf(n,r)!==-1){let{index:A}=o.atomicHierarchy.residueAtomSegments,s=A[r];return KQ(e,t,s,a)}return W.Loci(e,[])}function KQ(e,t,r,n){let{elements:o,model:i}=t,{label_alt_id:a}=i.atomicHierarchy.atoms,{offsets:A}=i.atomicHierarchy.residueAtomSegments,s=[];for(let l=A[r],u=A[r+1];l<u;++l){let g=Ee.indexOf(o,l);if(g!==-1){let m=a.value(l);(n===m||m==="")&&s.push(g)}}let c=Ee.ofSortedArray(je.ofSortedArray(s));return W.Loci(e,[{unit:t,indices:c}])}function gZ(e,t,r,n,o,i){let{child:a}=e.structure,A=t&&a?e.group.units.filter(u=>a.unitMap.has(u.id)):e.group.units,s=A.length,c=s*16,l=i&&i.aTransform.ref.value.length>=c?i.aTransform.ref.value:new Float32Array(c);for(let u=0;u<s;u++)_ft(A[u].conformation.operator.matrix,l,u*16);return y0(l,s,r,n,o,i)}var Yft={atomic:{},spheres:{},gaussians:{}},NFe=h.objectToOptions(Yft);function MFe(e,t){for(let r=0,n=e.length;r<n;++r)if(ge.isAtomic(t)&&e[r]==="atomic"||ge.isSpheres(t)&&e[r]==="spheres"||ge.isGaussians(t)&&e[r]==="gaussians")return!0;return!1}var kFe=5e8;function mZ(e,t,r=kFe){let n=Ct.size(B(),e);B.ceil(n,n),n.sort((A,s)=>s-A);let o=Math.floor(Math.cbrt(r)*Math.cbrt(r)),i=n[0]*n[1],a=Math.ceil(i/(t*t));return{area:i,areaCells:a,maxAreaCells:o}}function Np(e,t,r=kFe){let{area:n,areaCells:o,maxAreaCells:i}=mZ(e,t.resolution,r),a=o>i?Math.sqrt(n/i):t.resolution;return{...t,resolution:a}}function Oft(e){switch(e.kind){case ge.Kind.Atomic:return e.model.atomicConformation;case ge.Kind.Spheres:return e.model.coarseConformation.spheres;case ge.Kind.Gaussians:return e.model.coarseConformation.gaussians}}var $0={ignoreHydrogens:h.Boolean(!1,{description:"Whether or not to include hydrogen atoms in the surface calculation."}),ignoreHydrogensVariant:h.Select("all",h.arrayToOptions(["all","non-polar"])),traceOnly:h.Boolean(!1,{description:"Whether or not to only use trace atoms in the surface calculation."}),includeParent:h.Boolean(!1,{description:"Include elements of the parent structure in surface calculation to get a surface patch of the current structure. Note that this disables GPU support."})},Vcn=h.getDefaultValues($0),Jft=B();function HFe(e,t,r,n){return B.squaredDistance(B.set(Jft,e,t,r),n)}function zft(e,t,r){let n=0,o=t.length;for(let i=0,a=r.length;i<a;++i){let A=je.indexOfInRange(t,r[i],n,o);A===-1?e[i]=-2:(e[i]=A,n=A)}}function jv(e,t,r,n){let{ignoreHydrogens:o,ignoreHydrogensVariant:i,traceOnly:a,includeParent:A}=n,s=A?e.root.unitMap.get(t.id):t,c=A&&s!==t,{x:l,y:u,z:g}=Oft(s),{elements:m}=s,{center:p,radius:d}=t.boundary.sphere,f=(4+1.5)*2,I=(d+f)*(d+f),C,y;if(o||a||c){let S=[],w=[];for(let R=0,T=m.length;R<T;++R){let L=m[R];o&&Ug(e,s,L,i)||a&&!lV(s,L)||c&&HFe(l[L],u[L],g[L],p)>I||(S.push(L),w.push(R))}C=je.ofSortedArray(S),y=w}else C=m,y=QA(new Int32Array(C.length));A&&s!==t&&zft(y,t.elements,C);let Q={indices:C,x:l,y:u,z:g,id:y},E=c?rd(Q):t.boundary,b=W.Location.create(e,s);return{position:Q,boundary:E,radius:S=>(b.element=S,r.size(b))}}function Wv(e,t,r){let{ignoreHydrogens:n,ignoreHydrogensVariant:o,traceOnly:i,includeParent:a}=r,A=a&&!!e.parent,s=W.Location.create(e.root),{center:c,radius:l}=e.boundary.sphere,u=(4+1.5)*2,g=(l+u)*(l+u),m,p,d,f,I,C;if(n||i||A){let{getSerialIndex:b}=e.serialMapping,x=A?e.root.units:e.units,S=[],w=[],R=[],T=[],L=[];for(let F=0,v=x.length;F<v;++F){let U=x[F],{elements:G,conformation:N}=U,k=e.unitMap.get(U.id);s.unit=U;for(let J=0,H=G.length;J<H;++J){let z=G[J];if(n&&Ug(e,U,z,o)||i&&!lV(U,z))continue;let _=N.x(z),M=N.y(z),q=N.z(z);A&&HFe(_,M,q,c)>g||(S.push(_),w.push(M),R.push(q),s.element=z,T.push(t.size(s)),A?(k?je.indexOf(k.elements,z):-1)===-1?L.push(-2):L.push(b(k,z)):L.push(b(U,z)))}}m=S,p=w,d=R,f=T,I=L,C=Ee.ofRange(0,I.length)}else{let{elementCount:b}=e,x=new Float32Array(b),S=new Float32Array(b),w=new Float32Array(b),R=new Float32Array(b);for(let T=0,L=0,F=e.units.length;T<F;++T){let v=e.units[T],{elements:U,conformation:G}=v;s.unit=v;for(let N=0,k=U.length;N<k;++N){let J=U[N],H=L+N;x[H]=G.x(J),S[H]=G.y(J),w[H]=G.z(J),s.element=J,R[H]=t.size(s)}L+=U.length}m=x,p=S,d=w,f=R,I=QA(new Uint32Array(b)),C=Ee.ofRange(0,I.length)}let y={indices:C,x:m,y:p,z:d,id:I},Q=A?rd(y):e.boundary;return{position:y,boundary:Q,radius:b=>f[b]}}var Kft=Hb.H;function Ug(e,t,r,n){if(ge.isCoarse(t)||t.model.atomicHierarchy.derived.atom.atomicNumber[r]!==Kft)return!1;if(n==="all")return!0;let o=PFe(e,t,je.indexOf(t.elements,r));return!!(o&&n==="polar"||!o&&n==="non-polar")}function lV(e,t){if(ge.isCoarse(e))return!0;let r=e.model.atomicHierarchy.atoms.label_atom_id.value(t);return r==="CA"||r==="BB"||r==="P"}function AB(e){return h.MultiSelect(e,NFe,{description:"For which kinds of units/chains to show the representation visuals."})}var yc={unitKinds:AB(["atomic","spheres"]),includeParent:h.Boolean(!1,{isHidden:!0})},uV={...At.Params},gV={...rA.Params},mV={..._a.Params},dV={...Ds.Params},pV={...Zr.Params},fV={...tA.Params},BV={...yl.Params},IV={...Fs.Params},CV={...lu.Params};function jft(e,t,r,n,o,i){let{createValues:a,createRenderableState:A}=lA.getUtils(t),s=DD(),c=a(t,s,r,n,o),l=A(o);return $s(t.kind,c,l,i)}function KI(e,t){let{defaultProps:r,createGeometry:n,createLocationIterator:o,getLoci:i,eachLocation:a,setUpdateState:A,mustRecreate:s,processValues:c,dispose:l}=e,{updateValues:u,updateBoundingSphere:g,updateRenderableState:m,createPositionIterator:p}=e.geometryUtils,d=Qd.create(),f={loci:Ir,action:0,status:-1},I,C,y,Q,E=Object.assign({},r),b=Gi.createEmpty(),x,S,w=-1,R,T;function L(k,J,H){if(!H&&!x)throw new Error("missing structure");if(C=Object.assign({},E,J),y=k,Q=H,Qd.reset(d),!I||!x){d.createNew=!0,d.createGeometry=!0;return}A(d,C,E,y,b,Q,x),Ye.areEquivalent(Q,x)||(d.createGeometry=!0),Ye.areHierarchiesEqual(Q,x)||(d.updateTransform=!0,d.createGeometry=!0),KA.areEqual(k.color,b.color)||(d.updateColor=!0),Qi.areEqual(k.size,b.size)||(d.updateSize=!0),ka(C.unitKinds,E.unitKinds)||(d.createGeometry=!0),x.child!==Q.child&&(d.createGeometry=!0,d.updateTransform=!0),C.instanceGranularity!==E.instanceGranularity&&(d.updateTransform=!0),d.updateSize&&!("uSize"in I.values)&&(d.createGeometry=!0),d.createGeometry&&(d.updateColor=!0,d.updateSize=!0)}function F(k){if(d.createNew)if(R=o(Q,C),k)I=jft(Q,k,R,y,C,t),T=p(k,I.values);else throw new Error("expected geometry to be given");else{if(!I)throw new Error("expected renderObject to be available");if((d.updateColor||d.updateSize||d.updateTransform)&&(R=o(Q,C)),d.updateTransform){let{instanceCount:J,groupCount:H}=R;vi(C.instanceGranularity,H,J)?ei(J,"instance",I.values):ei(J*H,"groupInstance",I.values)}if(d.createGeometry)if(k)D.updateIfChanged(I.values.drawCount,lA.getDrawCount(k)),D.updateIfChanged(I.values.uVertexCount,lA.getVertexCount(k)),D.updateIfChanged(I.values.uGroupCount,R.groupCount);else throw new Error("expected geometry to be given");(d.updateTransform||d.createGeometry)&&(g(I.values,k||S),T=p(S,I.values)),d.updateSize&&"uSize"in I.values&&hl(R,T,y.size,I.values),d.updateColor&&cA(R,T,y.color,I.values),u(I.values,C),m(I.state,C)}E=C,b=y,x=Q,k&&(S=k,w+=1)}function v(k){return!!(uA(k)||Ye.isLoci(k)&&Ye.areRootsEquivalent(k.structure,x)||W.Loci.is(k)&&Ye.areRootsEquivalent(k.structure,x)&&W.Loci.isWholeStructure(k))}function U(k,J,H){let z=!1;return!W.Loci.is(k)&&!Et.isLoci(k)||!Ye.areEquivalent(k.structure,J)?!1:(H(Ue.ofSingleton(0))&&(z=!0),z)}function G(k,J,H){let z=vi(E.instanceGranularity,R.groupCount,R.instanceCount);return v(k)?J(z?Ue.ofBounds(0,R.instanceCount):Ue.ofBounds(0,R.groupCount*R.instanceCount)):z?U(k,x,J):a(k,x,J,H)}function N(k){I&&c?.(I.values,S,E,b,k.webgl)}return{get groupCount(){return R?R.count:0},get renderObject(){return R&&R.count?I:void 0},get geometryVersion(){return w},createOrUpdate(k,J,H={},z){if(L(J,H,z||x),d.createGeometry){let _=n(k,Q,y,C,S);if(Uy(_))return _.then(M=>{F(M),N(k)});F(_)}else F();N(k)},getLoci(k){return I?(vi(E.instanceGranularity,R.groupCount,R.instanceCount)&&(k={...k,groupId:Ai.Null}),i(k,x,I.id)):Ir},eachLocation(k){for(R.reset();R.hasNext;){let{location:J,isSecondary:H}=R.move();k(J,H)}},mark(k,J){return Qn.mark(I,k,J,G,f)},setVisibility(k){Qn.setVisibility(I,k)},setAlphaFactor(k){Qn.setAlphaFactor(I,k)},setPickable(k){Qn.setPickable(I,k)},setColorOnly(k){Qn.setColorOnly(I,k)},setTransform(k,J){Qn.setTransform(I,k,J)},setOverpaint(k,J){let H={geometry:S,props:E,webgl:J};Qn.setOverpaint(I,k,G,!0,H)},setTransparency(k,J){let H={geometry:S,props:E,webgl:J};Qn.setTransparency(I,k,G,!0,H)},setEmissive(k,J){let H={geometry:S,props:E,webgl:J};Qn.setEmissive(I,k,G,!0,H)},setSubstance(k,J){let H={geometry:S,props:E,webgl:J};Qn.setSubstance(I,k,G,!0,H)},setClipping(k){Qn.setClipping(I,k,G,!0)},setWiggle(k,J){Qn.setWiggle(I,k,G,!0)},setThemeStrength(k){Qn.setThemeStrength(I,k)},destroy(){l?.(S),I&&(I.state.disposed=!0,I=void 0)},mustRecreate:s}}var Us={...uV,...yc};function Oa(e,t){return KI({...e,setUpdateState:(r,n,o,i,a,A,s)=>{e.setUpdateState(r,n,o,i,a,A,s),Qi.areEqual(i.size,a.size)||(r.createGeometry=!0)},geometryUtils:At.Utils},t)}var VFe={...gV,...yc};function _Fe(e,t){return KI({...e,setUpdateState:(r,n,o,i,a,A,s)=>{e.setUpdateState(r,n,o,i,a,A,s),Qi.areEqual(i.size,a.size)||(r.updateSize=!0)},geometryUtils:rA.Utils},t)}var hV={...mV,...yc};function yV(e,t){return KI({...e,setUpdateState:(r,n,o,i,a,A,s)=>{e.setUpdateState(r,n,o,i,a,A,s),Qi.areEqual(i.size,a.size)||(r.updateSize=!0)},geometryUtils:_a.Utils},t)}var YFe={...dV,...yc};function OFe(e,t){return KI({...e,setUpdateState:(r,n,o,i,a,A,s)=>{e.setUpdateState(r,n,o,i,a,A,s),Qi.areEqual(i.size,a.size)||(r.updateSize=!0)},geometryUtils:Ds.Utils},t)}var jI={...pV,...yc};function WI(e,t){return KI({...e,setUpdateState:(r,n,o,i,a,A,s)=>{e.setUpdateState(r,n,o,i,a,A,s),Qi.areEqual(i.size,a.size)||(r.updateSize=!0)},geometryUtils:Zr.Utils},t)}var JFe={...fV,...yc};function Xv(e,t){return KI({...e,setUpdateState:(r,n,o,i,a,A,s)=>{e.setUpdateState(r,n,o,i,a,A,s),Qi.areEqual(i.size,a.size)||(r.updateSize=!0),n.background!==o.background&&(r.createGeometry=!0),n.backgroundMargin!==o.backgroundMargin&&(r.createGeometry=!0),n.tether!==o.tether&&(r.createGeometry=!0),n.tetherLength!==o.tetherLength&&(r.createGeometry=!0),n.tetherBaseWidth!==o.tetherBaseWidth&&(r.createGeometry=!0),n.attachment!==o.attachment&&(r.createGeometry=!0),n.fontFamily!==o.fontFamily&&(r.createGeometry=!0),n.fontQuality!==o.fontQuality&&(r.createGeometry=!0),n.fontStyle!==o.fontStyle&&(r.createGeometry=!0),n.fontVariant!==o.fontVariant&&(r.createGeometry=!0),n.fontWeight!==o.fontWeight&&(r.createGeometry=!0)},geometryUtils:tA.Utils},t)}var zFe={...BV,...yc};function KFe(e,t){return KI({...e,setUpdateState:(r,n,o,i,a,A,s)=>{e.setUpdateState(r,n,o,i,a,A,s),Qi.areEqual(i.size,a.size)||(r.createGeometry=!0)},geometryUtils:yl.Utils},t)}var jFe={...IV,...yc};function WFe(e,t){return KI({...e,setUpdateState:(r,n,o,i,a,A,s)=>{e.setUpdateState(r,n,o,i,a,A,s),Qi.areEqual(i.size,a.size)||(r.createGeometry=!0)},geometryUtils:Fs.Utils},t)}var XFe={...CV,...yc};function ZFe(e,t){return KI({...e,setUpdateState:(r,n,o,i,a,A,s)=>{e.setUpdateState(r,n,o,i,a,A,s),Qi.areEqual(i.size,a.size)||(r.createGeometry=!0)},geometryUtils:lu.Utils},t)}var QV=class{constructor(t,r){this.hashCode=t;this.areEqual=r;this.buckets=new Map}set(t,r){let n=this.hashCode(t),o=this.buckets.get(n);o||(o=[],this.buckets.set(n,o));for(let i=0;i<o.length;i++)if(this.areEqual(o[i].key,t)){o[i].value=r;return}o.push({key:t,value:r})}get(t){let r=this.hashCode(t),n=this.buckets.get(r);if(n){for(let o of n)if(this.areEqual(o.key,t))return o.value}}delete(t){let r=this.hashCode(t),n=this.buckets.get(r);if(!n)return!1;for(let o=0;o<n.length;o++)if(this.areEqual(n[o].key,t))return n.splice(o,1),n.length===0&&this.buckets.delete(r),!0;return!1}forEach(t){for(let r of this.buckets.values())for(let n of r)t(n.value,n.key)}clear(){this.buckets.clear()}};function qFe(){return new QV(e=>lc(e.hashCode,e.transformHash),ge.SymmetryGroup.areInvariantElementsEqual)}function fo(e,t,r,n){let o=0,{webgl:i}=t,a=new Jn,A=FA(),s=[],c=new Xt.GeometryState,l=Vn.create(),u=qFe(),g,m,p,d,f=Gi.createEmpty();function I(R={},T){return T&&T!==g&&(p=r(t,T),d||(d=h.getDefaultValues(p))),d=Object.assign({},d,R),ve.create("Creating or updating UnitsRepresentation",async L=>{if(!g&&!T)throw new Error("missing structure");if(T&&!g){m=Jc.computeChildAwareTransformGroups(T);for(let F=0;F<m.length;F++){let v=m[F],U=n(A,T,d,i),G=U.createOrUpdate({webgl:i,runtime:L},f,d,{group:v,structure:T});G&&await G,b(U,v,l),u.set(v,{visual:U,group:v}),L.shouldUpdate&&await L.update({message:"Creating or updating UnitsVisual",current:F,max:m.length})}}else if(T&&(!Ye.areUnitIdsAndIndicesEqual(T,g)||T.child!==g.child)){m=Jc.computeChildAwareTransformGroups(T);let F=u;u=qFe();for(let v=0;v<m.length;v++){let U=m[v],G=F.get(U);if(G){let{visual:N}=G;if(N.mustRecreate?.({group:U,structure:T},d,i)){N.destroy(),N=n(A,T,d,i);let k=N.createOrUpdate({webgl:i,runtime:L},f,d,{group:U,structure:T});k&&await k,b(N,U,l)}else{let k=N.createOrUpdate({webgl:i,runtime:L},f,d,{group:U,structure:T});k&&await k}if(u.set(U,{visual:N,group:U}),F.delete(U),N.renderObject){let k=N.renderObject.values.tMarker.ref.value.array;NQ(k,Ue.ofBounds(0,k.length),2)}}else{let N=n(A,T,d,i),k=N.createOrUpdate({webgl:i,runtime:L},f,d,{group:U,structure:T});k&&await k,b(N,U,l),u.set(U,{visual:N,group:U})}L.shouldUpdate&&await L.update({message:"Creating or updating UnitsVisual",current:v,max:m.length})}F.forEach(({visual:v})=>{v.destroy()})}else if(T&&T!==g&&Ye.areUnitIdsAndIndicesEqual(T,g)){m=Jc.computeChildAwareTransformGroups(T);for(let F=0;F<m.length;F++){let v=m[F],U=u.get(v);if(U){let{visual:G}=U;if(G.mustRecreate?.({group:v,structure:T},d,t.webgl)){G.destroy(),G=n(A,T,d,t.webgl),U.visual=G;let N=G.createOrUpdate({webgl:i,runtime:L},f,d,{group:v,structure:T});N&&await N,b(G,v,l)}else{let N=G.createOrUpdate({webgl:i,runtime:L},f,d,{group:v,structure:T});N&&await N}U.group=v}else throw new Error(`expected to find visual for hashCode ${v.hashCode}`);L.shouldUpdate&&await L.update({message:"Creating or updating UnitsVisual",current:F,max:m.length})}}else{let F=[];u.forEach(v=>F.push(v));for(let v=0,U=F.length;v<U;++v){let{visual:G,group:N}=F[v];if(G.mustRecreate?.({group:N,structure:g},d,t.webgl)){G.destroy(),G=n(A,g,d,i),F[v].visual=G;let k=G.createOrUpdate({webgl:i,runtime:L},f,d,{group:N,structure:g});k&&await k,b(G,N,l)}else{let k=G.createOrUpdate({webgl:i,runtime:L},f,d);k&&await k}L.shouldUpdate&&await L.update({message:"Creating or updating UnitsVisual",current:v,max:U})}}s.length=0,u.forEach(({visual:F})=>{F.renderObject&&(s.push(F.renderObject),c.add(F.renderObject.id,F.geometryVersion))}),c.snapshot(),T&&(g=T),a.next(o++)})}function C(R){let T=Ir;return u.forEach(({visual:L})=>{let F=L.getLoci(R);ga(F)||(T=F)}),T}function y(R){u.forEach(({visual:T})=>{T.eachLocation(R)})}function Q(){return[Ye.Loci(g.child??g)]}function E(R,T){if(!g||!Ko.is(l.markerActions,T))return!1;if(Ye.isLoci(R)||W.Loci.is(R)||Et.isLoci(R)){if(!Ye.areRootsEquivalent(R.structure,g))return!1;R=pr.remap(R,g),(Ye.isLoci(R)||W.Loci.is(R)&&W.Loci.isWholeStructure(R))&&(R=Bp)}else if(!uA(R)&&!b0(R))return!1;if(pr.isEmpty(R))return!1;let L=!1;return u.forEach(({visual:F})=>{L=F.mark(R,T)||L}),L}function b(R,T,L){let{visible:F,alphaFactor:v,pickable:U,overpaint:G,transparency:N,emissive:k,substance:J,clipping:H,wiggle:z,themeStrength:_,transform:M,unitTransforms:q}=L;F!==void 0&&R.setVisibility(F),v!==void 0&&R.setAlphaFactor(v),U!==void 0&&R.setPickable(U),G!==void 0&&R.setOverpaint(G,i),N!==void 0&&R.setTransparency(N,i),k!==void 0&&R.setEmissive(k,i),J!==void 0&&R.setSubstance(J,i),H!==void 0&&R.setClipping(H),z!==void 0&&R.setWiggle(z,i),_!==void 0&&R.setThemeStrength(_),M!==void 0&&(M!==l.transform||!Y.areEqual(M,l.transform,1e-6))&&R.setTransform(M),q!==void 0&&(q?R.setTransform(void 0,q.getSymmetryGroupTransforms(T)):q!==l.unitTransforms&&R.setTransform(void 0,null))}function x(R){let{visible:T,alphaFactor:L,pickable:F,overpaint:v,transparency:U,emissive:G,substance:N,clipping:k,wiggle:J,themeStrength:H,transform:z,unitTransforms:_,syncManually:M,markerActions:q}=R,ne={};T!==void 0&&(ne.visible=T),L!==void 0&&(ne.alphaFactor=L),F!==void 0&&(ne.pickable=F),v!==void 0&&g&&(ne.overpaint=cs.remap(v,g)),U!==void 0&&g&&(ne.transparency=ls.remap(U,g)),G!==void 0&&g&&(ne.emissive=gs.remap(G,g)),N!==void 0&&g&&(ne.substance=us.remap(N,g)),k!==void 0&&g&&(ne.clipping=si.remap(k,g)),J!==void 0&&g&&(ne.wiggle=RA.remap(J,g)),H!==void 0&&(ne.themeStrength=H),z!==void 0&&!Y.areEqual(z,l.transform,1e-6)&&(ne.transform=z),(_!==l.unitTransforms||_?.version!==l.unitTransformsVersion)&&(ne.unitTransforms=_,l.unitTransformsVersion=_?_?.version:-1),M!==void 0&&(ne.syncManually=M),q!==void 0&&(ne.markerActions=q),u.forEach(({visual:oe,group:ae})=>b(oe,ae,ne)),Vn.update(l,ne)}function S(R){f=R}function w(){u.forEach(({visual:R})=>R.destroy()),u.clear()}return{label:e,get groupCount(){let R=0;return u.forEach(({visual:T})=>{T.renderObject&&(R+=T.groupCount)}),R},get geometryVersion(){return c.version},get props(){return d},get params(){return p},get state(){return l},get theme(){return f},renderObjects:s,updated:a,createOrUpdate:I,setState:x,setTheme:S,getLoci:C,getAllLoci:Q,eachLocation:y,mark:E,destroy:w}}function Wft(e,t,r,n,o,i){let{createValues:a,createRenderableState:A}=lA.getUtils(t),s=gZ(e,o.includeParent,t.boundingSphere,o.cellSize,o.batchSize),c=a(t,s,r,n,o),l=A(o);return $s(t.kind,c,l,i)}function jQ(e,t){let{defaultProps:r,createGeometry:n,createLocationIterator:o,getLoci:i,eachLocation:a,setUpdateState:A,initUpdateState:s,mustRecreate:c,processValues:l,dispose:u}=e,{createEmpty:g,updateValues:m,updateBoundingSphere:p,updateRenderableState:d,createPositionIterator:f}=e.geometryUtils,I=Qd.create(),C={loci:Ir,action:0,status:-1},y,Q=Object.assign({},r),E=Gi.createEmpty(),b,x,S,w,R,T=-1,L,F;function v(z,_,M){if(!M&&!w)throw new Error("missing structureGroup");if(Q=_,E=z,b=M,Qd.reset(I),!y||!w){s?.(I,Q,E,b),I.createNew=!0,I.createGeometry=!0;return}A(I,Q,x,E,S,b,w),Ye.areHierarchiesEqual(w.structure,b.structure)||(I.updateTransform=!0,I.updateColor=!0,I.updateSize=!0),KA.areEqual(E.color,S.color)||(I.updateColor=!0),Qi.areEqual(E.size,S.size)||(I.updateSize=!0),w.structure.child!==b.structure.child&&(I.createGeometry=!0,I.updateTransform=!0),(Q.instanceGranularity!==x.instanceGranularity||Q.cellSize!==x.cellSize||Q.batchSize!==x.batchSize)&&(I.updateTransform=!0),ka(Q.unitKinds,x.unitKinds)||(I.createGeometry=!0),b.group.transformHash!==w.group.transformHash&&(b.group.units.length!==w.group.units.length||I.updateColor?I.updateTransform=!0:I.updateMatrix=!0);let q=b.group.units[0],ne=w.group.units[0];ge.areOperatorsEqual(q,ne)||(I.updateTransform=!0),ge.areConformationsEqual(q,ne)||(I.createGeometry=!0),I.updateTransform&&(I.updateMatrix=!0),I.updateSize&&!("uSize"in y.values)&&(I.createGeometry=!0),(I.createGeometry||I.updateTransform)&&(w.structure.hashCode!==b.structure.hashCode&&(I.updateColor=!0,I.updateSize=!0),(E.color.granularity.startsWith("vertex")||y.values.dColorType.ref.value.startsWith("vertex")||E.color.granularity.startsWith("volume")||y.values.dColorType.ref.value.startsWith("volume"))&&(I.updateColor=!0))}function U(z){if(I.createNew)if(L=o(b,Q),z)y=Wft(b,z,L,E,Q,t),F=f(z,y.values);else throw new Error("expected geometry to be given");else{if(!y)throw new Error("expected renderObject to be available");if((I.updateColor||I.updateSize||I.updateTransform)&&(L=o(b,Q)),I.updateTransform){let{instanceCount:_,groupCount:M}=L;vi(Q.instanceGranularity,M,_)?ei(_,"instance",y.values):ei(_*M,"groupInstance",y.values)}if(I.updateMatrix&&(gZ(b,Q.includeParent,z?.boundingSphere||y.values.invariantBoundingSphere.ref.value,Q.cellSize,Q.batchSize,y.values),"lodLevels"in y.values&&D.update(y.values.lodLevels,y.values.lodLevels.ref.value)),I.createGeometry)if(z)D.updateIfChanged(y.values.drawCount,lA.getDrawCount(z)),D.updateIfChanged(y.values.uVertexCount,lA.getVertexCount(z)),D.updateIfChanged(y.values.uGroupCount,L.groupCount);else throw new Error("expected geometry to be given");(I.updateTransform||I.createGeometry)&&(p(y.values,z||R),F=f(z||R,y.values)),I.updateSize&&"uSize"in y.values&&hl(L,F,E.size,y.values),I.updateColor&&cA(L,F,E.color,y.values),m(y.values,Q),d(y.state,Q)}x=Q,S=E,w=b,z&&(R=z,T+=1)}function G(z,_,M,q,ne,oe){return MFe(ne.unitKinds,_)?n(z,_,M,q,ne,oe):g(oe)}function N(z){return!!(uA(z)||Ye.isLoci(z)&&Ye.areRootsEquivalent(z.structure,w.structure)||W.Loci.is(z)&&Ye.areRootsEquivalent(z.structure,w.structure)&&W.Loci.isWholeStructure(z))}function k(z,_,M){let q=!1;if(Et.isLoci(z)){let{structure:ne,group:oe}=_;if(!Ye.areEquivalent(z.structure,ne))return!1;for(let ae of z.bonds){if(ae.aUnit!==ae.bUnit)continue;let me=oe.unitIndexMap.get(ae.aUnit.id);me!==void 0&&M(Ue.ofSingleton(me))&&(q=!0)}}else if(W.Loci.is(z)){let{structure:ne,group:oe}=_;if(!Ye.areEquivalent(z.structure,ne))return!1;for(let ae of z.elements){let me=oe.unitIndexMap.get(ae.unit.id);me!==void 0&&M(Ue.ofSingleton(me))&&(q=!0)}}return q}function J(z,_,M){let q=vi(x.instanceGranularity,L.groupCount,L.instanceCount);return N(z)?_(q?Ue.ofBounds(0,L.instanceCount):Ue.ofBounds(0,L.groupCount*L.instanceCount)):q?k(z,w,_):a(z,w,_,M)}function H(z){y&&l?.(y.values,R,x,S,z.webgl)}return{get groupCount(){return L?L.count:0},get renderObject(){return L&&L.count?y:void 0},get geometryVersion(){return T},createOrUpdate(z,_,M,q){if(v(_,M,q||w),I.createGeometry){let ne=G(z,b.group.units[0],b.structure,E,Q,R);if(Uy(ne))return ne.then(oe=>{U(oe),H(z)});U(ne)}else U();H(z)},getLoci(z){return y?(vi(x.instanceGranularity,L.groupCount,L.instanceCount)&&(z={...z,groupId:Ai.Null}),i(z,w,y.id)):Ir},eachLocation(z){for(L.reset();L.hasNext;){let{location:_,isSecondary:M}=L.move();z(_,M)}},mark(z,_){let M=!0;if(W.Loci.is(z)){M=!1;let{invariantId:q}=w.group.units[0];for(let ne of z.elements)if(ne.unit.invariantId===q){M=!0;break}}return M?Qn.mark(y,z,_,J,C):!1},setVisibility(z){Qn.setVisibility(y,z)},setAlphaFactor(z){Qn.setAlphaFactor(y,z)},setPickable(z){Qn.setPickable(y,z)},setColorOnly(z){Qn.setColorOnly(y,z)},setTransform(z,_){Qn.setTransform(y,z,_)},setOverpaint(z,_){let M={geometry:R,props:x,webgl:_};Qn.setOverpaint(y,z,J,!0,M)},setTransparency(z,_){let M={geometry:R,props:x,webgl:_};Qn.setTransparency(y,z,J,!0,M)},setEmissive(z,_){let M={geometry:R,props:x,webgl:_};Qn.setEmissive(y,z,J,!0,M)},setSubstance(z,_){let M={geometry:R,props:x,webgl:_};Qn.setSubstance(y,z,J,!0,M)},setClipping(z){Qn.setClipping(y,z,J,!0)},setWiggle(z,_){Qn.setWiggle(y,z,J,!0)},setThemeStrength(z){Qn.setThemeStrength(y,z)},destroy(){u?.(R),y&&(y.state.disposed=!0,y=void 0)},mustRecreate:c}}var bo={...uV,...yc};function Vo(e,t){return jQ({...e,setUpdateState:(r,n,o,i,a,A,s)=>{e.setUpdateState(r,n,o,i,a,A,s),Qi.areEqual(i.size,a.size)||(r.createGeometry=!0)},geometryUtils:At.Utils},t)}var Zv={...gV,...yc};function qv(e,t){return jQ({...e,setUpdateState:(r,n,o,i,a,A,s)=>{e.setUpdateState(r,n,o,i,a,A,s),Qi.areEqual(i.size,a.size)||(r.updateSize=!0)},geometryUtils:rA.Utils},t)}var $v={...mV,...yc};function eF(e,t){return jQ({...e,setUpdateState:(r,n,o,i,a,A,s)=>{e.setUpdateState(r,n,o,i,a,A,s),Qi.areEqual(i.size,a.size)||(r.updateSize=!0)},geometryUtils:_a.Utils},t)}var $Fe={...dV,...yc};function e1e(e,t){return jQ({...e,setUpdateState:(r,n,o,i,a,A,s)=>{e.setUpdateState(r,n,o,i,a,A,s),Qi.areEqual(i.size,a.size)||(r.updateSize=!0)},geometryUtils:Ds.Utils},t)}var WQ={...pV,...yc};function XQ(e,t){return jQ({...e,setUpdateState:(r,n,o,i,a,A,s)=>{e.setUpdateState(r,n,o,i,a,A,s),Qi.areEqual(i.size,a.size)||(r.updateSize=!0)},geometryUtils:Zr.Utils},t)}var jun={...fV,...yc};var t1e={...BV,...yc};function r1e(e,t){return jQ({...e,setUpdateState:(r,n,o,i,a,A,s)=>{e.setUpdateState(r,n,o,i,a,A,s),Qi.areEqual(i.size,a.size)||(r.createGeometry=!0)},geometryUtils:yl.Utils},t)}var n1e={...IV,...yc};function o1e(e,t){return jQ({...e,setUpdateState:(r,n,o,i,a,A,s)=>{e.setUpdateState(r,n,o,i,a,A,s),Qi.areEqual(i.size,a.size)||(r.createGeometry=!0)},geometryUtils:Fs.Utils},t)}var Wun={...CV,...yc};var Vn={create:()=>({...Xt.createState(),unitTransforms:null,unitTransformsVersion:-1}),update:(e,t)=>{Xt.updateState(e,t),t.unitTransforms!==void 0&&(e.unitTransforms=t.unitTransforms)}};function i1e(e){switch(e){case 0:return"Spherical";case 1:return"Terminal";case 2:return"Linear";case 3:return"Trigonal";case 4:return"Tetrahedral";case 5:return"Trigonal Bi-Pyramidal";case 6:return"Octahedral";case 7:return"Square Planar";case 8:return"Unknown"}}function ex(e){switch(e){case 0:return 0;case 1:return 1;case 2:return 2;case 3:return 3;case 4:return 4;default:return 8}}var dZ=new Map([[2,kr(180)],[3,kr(120)],[4,kr(109.4721)],[6,kr(90)]]),rF=B(),tF=B(),sB=B(),ZQ=B(),XI=B();function nF(e,t,r,n,o,i=!0){let a=[],A=[];return t.conformation.position(t.elements[r],sB),n.conformation.position(n.elements[o],ZQ),B.sub(rF,ZQ,sB),nc(e,t,r,(s,c)=>{zn(s,c)!=="H"?(s.conformation.position(s.elements[c],XI),B.sub(tF,XI,sB),a.push(B.angle(rF,tF))):i||(s.conformation.position(s.elements[c],XI),B.sub(tF,XI,sB),A.push(B.angle(rF,tF)))}),[a,A]}function pZ(e,t,r,n,o){t.conformation.position(t.elements[r],sB),n.conformation.position(n.elements[o],ZQ),B.sub(rF,ZQ,sB);let i=[B(),B()],a=0,A,s;if(nc(e,t,r,(c,l)=>{a>1||zn(c,l)!=="H"&&(A=c,s=l,c.conformation.position(c.elements[l],XI),B.sub(i[a++],XI,sB))}),a===1&&A&&s&&nc(e,A,s,(c,l)=>{a>1||c===t&&l===r||zn(c,l)!=="H"&&(c.conformation.position(c.elements[l],XI),B.sub(i[a++],XI,sB))}),a===2)return B.cross(tF,i[0],i[1]),Math.abs(Math.PI/2-B.angle(tF,rF))}function a1e(e,t,r,n,o){let i=r;t.conformation.position(t.elements[r],sB),n.conformation.position(n.elements[o],ZQ),B.sub(rF,ZQ,sB);let a=B.squaredDistance(sB,ZQ);return nc(e,t,r,(A,s)=>{if(zn(A,s)==="H"){A.conformation.position(A.elements[s],XI);let c=B.squaredDistance(XI,ZQ);c<a&&(a=c,i=s)}}),i}var fZ=new Et.ElementBondIterator,BZ=new Et.ElementBondIterator;function Zft(e,t,r){let n=zn(t,r),o=n==="O"||n==="N";if(o&&Zu(e,t,r)===4)return!1;for(fZ.setElement(e,t,r);fZ.hasNext;){let i=fZ.move();if(i.order>1)return!0;if(o){let a=zn(i.otherUnit,i.otherIndex);for(BZ.setElement(e,i.otherUnit,i.otherIndex);BZ.hasNext;){let A=BZ.move();if(A.order>1){if((a==="P"||a==="S")&&zn(A.otherUnit,A.otherIndex)==="O")continue;return!0}}}}return!1}function qft(e,t,r){let n=0,{offset:o,edgeProps:{flags:i,order:a}}=t.bonds;for(let A=o[r],s=o[r+1];A<s;++A)It.isCovalent(i[A])&&(n+=a[A]);return e.interUnitBonds.getEdgeIndices(r,t.id).forEach(A=>{let s=e.interUnitBonds.edges[A];It.isCovalent(s.props.flag)&&(n+=s.props.order)}),n}var oF=new Et.ElementBondIterator,IZ=new Et.ElementBondIterator;function $ft(e,t,r,n,o){let i=qc(e,t,r,"H"),a=zn(t,r),A=aV(t,r),s=n.assignCharge==="always"||n.assignCharge==="auto"&&A===0,c=n.assignH==="always"||n.assignH==="auto"&&!o&&i===0,l=Zu(e,t,r),u=qft(e,t,r),g=Zft(e,t,r),m=u-l>0,p=0,d=8;switch(a){case"H":s&&(l===0?(A=1,d=0):l===1&&(A=0,d=1));break;case"C":s&&(A=0),c&&(p=Math.max(0,4-u-Math.abs(A))),d=ex(l+p+Math.max(0,-A));break;case"N":if(s)if(!c)A=u-3;else if(g&&u<4)l-i===1&&u-i===2?A=1:A=0;else for(oF.setElement(e,t,r);oF.hasNext;){let f=oF.move(),I=zn(f.otherUnit,f.otherIndex);if(I==="S"||h2(I)){A=0;break}else A=1}c&&(p=Math.max(0,3-u+A)),g&&!m?d=ex(l+p-A):d=ex(l+p+1-A);break;case"O":if(s&&(c||(A=u-2),u===1)){oF.setElement(e,t,r);e:for(;oF.hasNext;){let f=oF.move();for(IZ.setElement(e,f.otherUnit,f.otherIndex);IZ.hasNext;){let I=IZ.move();if(!(I.otherUnit===t&&I.otherIndex===r)&&zn(I.otherUnit,I.otherIndex)==="O"&&I.order===2){A=-1;break e}}}}c&&(p=Math.max(0,2-u+A)),g&&!m?d=ex(l+p-A+1):d=ex(l+p-A+2);break;case"S":s&&(c||(u<=3&&qc(e,t,r,"O")===0?A=u-2:A=0)),c&&u<2&&(p=Math.max(0,2-u+A)),u<=3&&(d=ex(l+p-A+2));break;case"F":case"CL":case"BR":case"I":case"AT":s&&(A=u-1);break;case"LI":case"NA":case"K":case"RB":case"CS":case"FR":s&&(A=1-u);break;case"BE":case"MG":case"CA":case"SR":case"BA":case"RA":s&&(A=2-u);break;default:ir&&console.warn("Requested charge, protonation for an unhandled element",a)}return[A,p,p+i,d]}function eBt(e,t,r){let n=t.elements.length,o=new Int8Array(n),i=new Int8Array(n),a=new Int8Array(n),A=new Int8Array(n),s=!!e.parent,c;if(s){let u=e.root.unitMap.get(t.id);if(c=je.indicesOf(u.elements,t.elements),c.length!==t.elements.length)throw new Error("expected to find an index for every element");t=u,e=e.root}let l=!1;for(let u=0;u<n;++u){let g=s?c[u]:u;if(zn(t,g)==="H"){l=!0;break}}for(let u=0;u<n;++u){let g=s?c[u]:u,[m,p,d,f]=$ft(e,t,g,r,l);o[u]=m,i[u]=p,a[u]=d,A[u]=f}return{charge:o,implicitH:i,totalH:a,idealGeometry:A}}var CZ={assignCharge:h.Select("auto",[["always","always"],["auto","auto"],["never","never"]]),assignH:h.Select("auto",[["always","always"],["auto","auto"],["never","never"]])};async function A1e(e,t,r){let n={...h.getDefaultValues(CZ),...r},o=new Map,i=`valence-model-${JSON.stringify(n)}`;for(let a=0,A=t.units.length;a<A;++a){let s=t.units[a];if(ge.isAtomic(s)){let c;s.transientCache.has(i)?c=s.transientCache.get(i):(c=eBt(t,s,n),s.transientCache.set(i,c)),o.set(s.id,c)}}return o}var hZ={...CZ},ZI=eA.createProvider({label:"Valence Model",descriptor:{name:"molstar_computed_valence_model"},type:"local",defaultParams:hZ,getParams:e=>hZ,isApplicable:e=>!0,obtain:async(e,t,r)=>{let n={...h.getDefaultValues(hZ),...r};return{value:await A1e(e.runtime,t,n)}}});var ti;(l=>{function e(u,g,m,p){return B.set(u,p.x[m],p.y[m],p.z[m]),B.transformMat4(u,u,g.conformation.operator.matrix),u}l.setPosition=e;function t(u,g){let m=new Int32Array(g+1),p=new Int32Array(g),d=new Int32Array(g),{members:f,count:I,offsets:C}=u;for(let E=0,b=C[I];E<b;++E)++d[f[E]];let y=0;for(let E=0;E<g;E++)m[E]=y,y+=d[E];m[g]=y;let Q=new Int32Array(y);for(let E=0;E<I;++E)for(let b=C[E],x=C[E+1];b<x;++b){let S=f[b],w=m[S]+p[S];Q[w]=E,++p[S]}return{indices:Q,offsets:m}}l.createElementsIndex=t;function r(u,g){let m,p;return{...g,get lookup3d(){if(!m){let d={x:g.x,y:g.y,z:g.z,indices:Ee.ofBounds(0,g.count)};m=ou(d,rd(d))}return m},get elementsIndex(){return p||(p=t(g,u))},subset:d=>n(g,d)}}l.create=r;function n(u,g){let m,{count:p,types:d}=u,f=[];for(let C=0;C<p;++C)g.has(d[C])&&f.push(C);let I=je.ofSortedArray(f);return{indices:I,get lookup3d(){if(!m){let C={x:u.x,y:u.y,z:u.z,indices:I};m=ou(C,rd(C))}return m}}}l.createSubset=n;function o(u,g,m){let p=ZI.get(u).value;if(!p||!p.has(g.id))throw new Error("valence model required");return{unit:g,types:m.types,feature:-1,x:m.x,y:m.y,z:m.z,members:m.members,offsets:m.offsets,idealGeometry:p.get(g.id).idealGeometry}}l.Info=o;function i(u,g){return B.set(u,g.x[g.feature],g.y[g.feature],g.z[g.feature]),B.transformMat4(u,u,g.unit.conformation.operator.matrix),u}l.position=i;let a=B(),A=B();function s(u,g){let m=u.members[u.offsets[u.feature]],p=g.members[g.offsets[g.feature]];return u.unit.conformation.position(u.unit.elements[m],a),g.unit.conformation.position(g.unit.elements[p],A),B.distance(a,A)}l.distance=s;function c(u,g){return{types:new Set(u),add:g}}l.Provider=c})(ti||={});var yZ;(t=>{function e(r=2048,n=1024,o){let i=qe.create(Float32Array,1,n,o?o.x:r),a=qe.create(Float32Array,1,n,o?o.y:r),A=qe.create(Float32Array,1,n,o?o.z:r),s=qe.create(Uint8Array,1,n,o?o.types:r),c=qe.create(Uint8Array,1,n,o?o.groups:r),l=qe.create(Uint32Array,1,n,o?o.offsets:r),u=qe.create(Uint32Array,1,n,o?o.members:r),g={x:0,y:0,z:0,offset:0,count:0};return{startState:()=>{g.x=0,g.y=0,g.z=0,g.offset=u.elementCount,g.count=0},pushMember:(m,p,d,f)=>{qe.add(u,f),g.x+=m,g.y+=p,g.z+=d,g.count+=1},markMember:m=>{qe.add(u,m)},finishState:(m,p)=>{let{count:d}=g;d!==0&&(qe.add(s,m),qe.add(c,p),qe.add(i,g.x/d),qe.add(a,g.y/d),qe.add(A,g.z/d),qe.add(l,g.offset))},add:(m,p,d,f,I,C)=>{qe.add(s,m),qe.add(c,p),qe.add(i,d),qe.add(a,f),qe.add(A,I),qe.add(l,u.elementCount),qe.add(u,C)},getFeatures:m=>{qe.add(l,u.elementCount);let p=qe.compact(i,!0),d=qe.compact(a,!0),f=qe.compact(A,!0),I=i.elementCount;return ti.create(m,{x:p,y:d,z:f,count:I,types:qe.compact(s,!0),groups:qe.compact(c,!0),offsets:qe.compact(l,!0),members:qe.compact(u,!0)})}}}t.create=e})(yZ||={});var QZ;(t=>{function e(r,n,o){let i=new Int32Array(o+1),a=new Int32Array(o),A=new Int32Array(o),{members:s,offsets:c}=n;for(let g=0,m=r.edgeCount*2;g<m;++g){let p=r.a[g],d=r.b[g];if(!(p>d)){for(let f=c[p],I=c[p+1];f<I;++f)++A[s[f]];for(let f=c[d],I=c[d+1];f<I;++f)++A[s[f]]}}let l=0;for(let g=0;g<o;g++)i[g]=l,l+=A[g];i[o]=l;let u=new Int32Array(l);for(let g=0,m=r.edgeCount*2;g<m;++g){let p=r.a[g],d=r.b[g];if(!(p>d)){for(let f=c[p],I=c[p+1];f<I;++f){let C=s[f],y=i[C]+a[C];u[y]=g,++a[C]}for(let f=c[d],I=c[d+1];f<I;++f){let C=s[f],y=i[C]+a[C];u[y]=g,++a[C]}}}return{indices:u,offsets:i}}t.createElementsIndex=e})(QZ||={});var EV=class extends Pu{getContactIndicesForElement(t,r){return this.elementKeyIndex.get(this.getElementKey(t,r.id))||[]}getElementKey(t,r){return`${t}|${r}`}constructor(t,r){super(t),this.elementKeyIndex=new Map;for(let n=0,o=this.edges.length;n<o;++n){let{unitA:i,indexA:a}=this.edges[n],{offsets:A,members:s}=r.get(i);for(let c=A[a],l=A[a+1];c<l;++c){let u=this.getElementKey(s[c],i),g=this.elementKeyIndex.get(u);g===void 0?this.elementKeyIndex.set(u,[n]):g.push(n)}}}};function bV(e){switch(e){case 4:return"Hydrogen Bond";case 6:return"Hydrophobic Contact";case 5:return"Halogen Bond";case 1:return"Ionic Interaction";case 7:return"Metal Coordination";case 2:return"Cation-Pi Interaction";case 3:return"Pi Stacking";case 8:return"Weak Hydrogen Bond";case 9:return"Water Bridge";case 0:return"Unknown Interaction"}}function s1e(e){switch(e){case 0:return"None";case 1:return"Positive Charge";case 2:return"Negative Charge";case 3:return"Aromatic Ring";case 4:return"Hydrogen Donor";case 5:return"Hydrogen Acceptor";case 6:return"Halogen Donor";case 7:return"Halogen Acceptor";case 8:return"HydrophobicAtom";case 9:return"Weak Hydrogen Donor";case 10:return"Ionic Type Partner";case 11:return"Dative Bond Partner";case 12:return"Transition Metal";case 13:return"Ionic Type Metal"}}function c1e(e){switch(e){case 0:return"None";case 1:return"Quaternary Amine";case 2:return"Tertiary Amine";case 3:return"Sulfonium";case 4:return"Sulfonic Acid";case 5:return"Sulfate";case 6:return"Phosphate";case 7:return"Halocarbon";case 8:return"Guanidine";case 9:return"Acetamidine";case 10:return"Carboxylate"}}var EZ;(t=>{function e(r,n){let o=[],i=[],a=[];return{add(A,s,c){o[o.length]=A,i[i.length]=s,a[a.length]=c},getContacts(){let A=new fa.EdgeBuilder(r.count,o,i),s=new Int8Array(A.slotCount),c=new Int8Array(A.slotCount);for(let m=0,p=A.edgeCount;m<p;m++)A.addNextEdge(),A.assignProperty(s,a[m]);let l=A.createGraph({type:s,flag:c}),u;return Object.defineProperty(l,"elementsIndex",{get:()=>u||(u=QZ.createElementsIndex(l,r,n))})}}}t.create=e})(EZ||={});var bZ;(t=>{function e(){let r=new Pu.Builder;return{startUnitPair(n,o){r.startUnitPair(n.id,o.id)},finishUnitPair(){r.finishUnitPair()},add(n,o,i){r.add(n,o,{type:i,flag:0})},getContacts(n){return new EV(r.getMap(),n)}}}t.create=e})(bZ||={});var g1e={lineOfSightDistFactor:h.Numeric(1,{min:0,max:3,step:.1})},tBt=3;function m1e(e,t,r){let n=t.members[t.offsets[t.feature]],o=r.members[r.offsets[r.feature]];if(n===o&&t.unit===r.unit)return!1;let i=pU(t.unit,n),a=pU(r.unit,o);return!(i&&a&&i!==a||t.unit===r.unit&&t.unit.model.atomicHierarchy.residueAtomSegments.count>1&&t.unit.residueIndex[t.unit.elements[n]]===r.unit.residueIndex[r.unit.elements[o]]||vFe(e,t.unit,n,r.unit,o))}function l1e(e,t,r,n){let o=pU(e,t),i=pU(r,n);return o&&i&&o!==i}function u1e(e,t){let{feature:r,offsets:n,members:o}=t;for(let i=n[r],a=n[r+1];i<a;++i)if(o[i]===e)return!0;return!1}var qQ=B(),xZ=B(),SZ=B(),rBt=$y();function d1e(e,t,r,n){let o=t.feature,i=r.feature,a=t.members[t.offsets[o]],A=r.members[r.offsets[i]];ti.position(xZ,t),ti.position(SZ,r),B.scale(qQ,B.add(qQ,xZ,SZ),.5);let s=n*tBt,{count:c,indices:l,units:u,squaredDistances:g}=e.lookup3d.find(qQ[0],qQ[1],qQ[2],s,rBt);if(c===0)return!0;for(let m=0;m<c;++m){let p=l[m],d=u[m];if(!ge.isAtomic(d))continue;let f=zn(d,p);if(f==="H")continue;let I=rm(f);if(!(I*I*n*n<=g[m])&&!(l1e(d,p,t.unit,a)||l1e(d,p,r.unit,A))&&!(t.unit===d&&u1e(p,t)||r.unit===d&&u1e(p,r))&&(d.conformation.position(d.elements[p],qQ),!(B.squaredDistance(qQ,xZ)<1||B.squaredDistance(qQ,SZ)<1)))return!1}return!0}function p1e(e,t,r,n,o,i){for(let a of o)nBt(e,t,r,n,a,i)}function nBt(e,t,r,n,o,i){let{x:a,y:A,z:s}=r,{lookup3d:c,indices:l}=r.subset(o.requiredFeatures),u=ti.Info(e,t,r),g={...u},m=i.lineOfSightDistFactor;for(let p=0,d=Ee.size(l);p<d;++p){let f=Ee.getAt(l,p),{count:I,indices:C,squaredDistances:y}=c.find(a[f],A[f],s[f],o.maxDistance);if(I!==0){u.feature=f;for(let Q=0;Q<I;++Q){let E=Ee.getAt(l,C[Q]);if(E<=f||(g.feature=E,!m1e(e,u,g)))continue;let b=o.getType(e,u,g,y[Q]);b&&d1e(e,u,g,m)&&n.add(f,E,b)}}}}var oBt=Y();function f1e(e,t,r,n,o,i,a,A){let{count:s,x:c,y:l,z:u}=r,{lookup3d:g}=o,m=Y.mul(oBt,n.conformation.operator.inverse,t.conformation.operator.matrix),p=!Y.isIdentity(m),d=B(),f=Math.max(...a.map(x=>x.maxDistance)),{center:I,radius:C}=g.boundary.sphere,y=(C+f)*(C+f),Q=A.lineOfSightDistFactor,E=ti.Info(e,t,r),b=ti.Info(e,n,o);i.startUnitPair(t,n);for(let x=0;x<s;++x){if(B.set(d,c[x],l[x],u[x]),p&&B.transformMat4(d,d,m),B.squaredDistance(d,I)>y)continue;let{indices:S,count:w,squaredDistances:R}=g.find(d[0],d[1],d[2],f);if(w!==0){E.feature=x;for(let T=0;T<w;++T){let L=S[T];if(b.feature=L,!m1e(e,E,b))continue;let F=R[T];for(let v of a)if(F<v.maxDistance*v.maxDistance){let U=v.getType(e,E,b,F);if(U&&d1e(e,E,b,Q)){i.add(x,L,U);break}}}}}i.finishUnitPair()}var iBt={distanceMax:h.Numeric(4,{min:1,max:5,step:.1}),angleMax:h.Numeric(30,{min:0,max:60,step:1})},aBt=["CL","BR","I","AT"];function ABt(e,t,r){let{elements:n}=t,{x:o,y:i,z:a}=t.model.atomicConformation;for(let A=0,s=n.length;A<s;++A){let c=zn(t,A);aBt.includes(c)&&r.add(6,0,o[n[A]],i[n[A]],a[n[A]],A)}}var sBt=["N","O","S"],cBt=["C","N","P","S"];function lBt(e,t,r){let{elements:n}=t,{x:o,y:i,z:a}=t.model.atomicConformation;for(let A=0,s=n.length;A<s;++A){let c=zn(t,A);if(sBt.includes(c)){let l=!1;nc(e,t,A,(u,g)=>{cBt.includes(zn(u,g))&&(l=!0)}),l&&r.add(7,0,o[n[A]],i[n[A]],a[n[A]],A)}}}function uBt(e,t){return e===7&&t===6||e===6&&t===7}var gBt=kr(180),mBt=kr(120);function dBt(e){return{angleMax:kr(e.angleMax)}}function pBt(e,t,r,n){let o=t.types[t.feature],i=r.types[r.feature];if(!uBt(o,i))return;let[a,A]=o===6?[t,r]:[r,t],s=a.members[a.offsets[a.feature]],c=A.members[A.offsets[A.feature]],[l]=nF(e,a.unit,s,A.unit,c);if(l.length!==1||gBt-l[0]>n.angleMax)return;let[u]=nF(e,A.unit,c,a.unit,s);if(u.length!==0&&!u.some(g=>mBt-g>n.angleMax))return 5}var B1e=ti.Provider([6],ABt),I1e=ti.Provider([7],lBt),C1e={name:"halogen-bonds",params:iBt,createTester:e=>{let t=dBt(e);return{maxDistance:e.distanceMax,requiredFeatures:new Set([6,7]),getType:(r,n,o)=>pBt(r,n,o,t)}}};var E1e={distanceMax:h.Numeric(3.5,{min:1,max:5,step:.1}),backbone:h.Boolean(!0,{description:"Include backbone-to-backbone hydrogen bonds"}),accAngleDevMax:h.Numeric(45,{min:0,max:180,step:1},{description:"Max deviation from ideal acceptor angle"}),ignoreHydrogens:h.Boolean(!1,{description:"Ignore explicit hydrogens in geometric constraints"}),donAngleDevMax:h.Numeric(45,{min:0,max:180,step:1},{description:"Max deviation from ideal donor angle"}),accOutOfPlaneAngleMax:h.Numeric(90,{min:0,max:180,step:1}),donOutOfPlaneAngleMax:h.Numeric(45,{min:0,max:180,step:1})},fBt={...E1e,water:h.Boolean(!1,{description:"Include water-to-water hydrogen bonds"}),sulfurDistanceMax:h.Numeric(4.1,{min:1,max:5,step:.1})},BBt={...E1e};function DZ(e,t){let r=ZI.get(e).value;if(!r)throw Error("expected valence model to be available");let n=r.get(t.id);if(!n)throw Error("expected valence model for unit to be available");return n}function IBt(e,t,r){let{totalH:n}=DZ(e,t),{elements:o}=t,{x:i,y:a,z:A}=t.model.atomicConformation;for(let s=0,c=o.length;s<c;++s){let l=zn(t,s);(b1e(t,s)||n[s]>0&&(l==="N"||l==="O"||l==="S"))&&r.add(4,0,i[o[s]],a[o[s]],A[o[s]],s)}}function CBt(e,t,r){let{totalH:n}=DZ(e,t),{elements:o}=t,{x:i,y:a,z:A}=t.model.atomicConformation;for(let s=0,c=o.length;s<c;++s)zn(t,s)==="C"&&n[s]>0&&(qc(e,t,s,"N")>0||qc(e,t,s,"O")>0||hBt(t,s))&&r.add(9,0,i[o[s]],a[o[s]],A[o[s]],s)}function hBt(e,t){let{elementAromaticRingIndices:r,all:n}=e.rings,o=r.get(t);if(o===void 0)return!1;for(let i=0,a=o.length;i<a;++i){let A=n[o[i]];for(let s=0,c=A.length;s<c;++s){let l=zn(e,A[s]);if(l==="N"||l==="O")return!0}}return!1}function yBt(e,t,r){let{charge:n,implicitH:o,idealGeometry:i}=DZ(e,t),{elements:a}=t,{x:A,y:s,z:c}=t.model.atomicConformation,l=u=>{r.add(5,0,A[a[u]],s[a[u]],c[a[u]],u)};for(let u=0,g=a.length;u<g;++u){let m=zn(t,u);if(m==="O")l(u);else if(m==="N"){if(b1e(t,u))l(u);else if(n[u]<1){let p=Zu(e,t,u)+o[u],d=i[u];(d===4&&p<4||d===3&&p<3||d===2&&p<2)&&l(u)}}else if(m==="S"){let p=fU(t,u);(p==="CYS"||p==="MET"||aV(t,u)===-1)&&l(u)}}}function h1e(e,t){return e.model.atomicHierarchy.derived.residue.moleculeType[e.residueIndex[e.elements[t]]]===2}function y1e(e,t){return Uu.has(JQ(e,t))}function QBt(e,t){return e.rings.elementRingIndices.has(t)}function b1e(e,t){return fU(e,t)==="HIS"&&zn(e,t)==="N"&&QBt(e,t)}function EBt(e,t,r,n){return y1e(e,t)&&y1e(r,n)}function bBt(e,t,r,n){return h1e(e,t)&&h1e(r,n)}function xBt(e,t){return e===5&&t===4||e===4&&t===5}function SBt(e,t){return e===9&&t===5||e===5&&t===9}function x1e(e){return{ignoreHydrogens:e.ignoreHydrogens,includeBackbone:e.backbone,maxAccAngleDev:kr(e.accAngleDevMax),maxDonAngleDev:kr(e.donAngleDevMax),maxAccOutOfPlaneAngle:kr(e.accOutOfPlaneAngleMax),maxDonOutOfPlaneAngle:kr(e.donOutOfPlaneAngleMax)}}function DBt(e){return{...x1e(e),includeWater:e.water,maxSulfurDistSq:e.sulfurDistanceMax*e.sulfurDistanceMax,maxDistSq:e.distanceMax*e.distanceMax}}var Q1e=kr(120);function BU(e,t,r,n){let o=t.members[t.offsets[t.feature]],i=r.members[r.offsets[r.feature]];if(!n.includeBackbone&&EBt(t.unit,o,r.unit,i))return;let[a,A]=nF(e,t.unit,o,r.unit,i,n.ignoreHydrogens),s=dZ.get(t.idealGeometry[o])||Q1e;if(a.some(m=>Math.abs(s-m)>n.maxDonAngleDev)||A.length&&!A.some(m=>m<n.maxDonAngleDev))return;if(t.idealGeometry[o]===3){let m=pZ(e,t.unit,o,r.unit,i);if(m!==void 0&&m>n.maxDonOutOfPlaneAngle)return}let c=o;!n.ignoreHydrogens&&A.length>0&&(c=a1e(e,t.unit,o,r.unit,i));let[l,u]=nF(e,r.unit,i,t.unit,c,n.ignoreHydrogens),g=dZ.get(r.idealGeometry[i])||Q1e;if(!l.some(m=>g-m>n.maxAccAngleDev)&&!u.some(m=>g-m>n.maxAccAngleDev)){if(r.idealGeometry[i]===3){let m=pZ(e,r.unit,i,t.unit,o);if(m!==void 0&&m>n.maxAccOutOfPlaneAngle)return}return!0}}function vBt(e,t,r,n,o){let i=t.types[t.feature],a=r.types[r.feature];if(!xBt(i,a))return;let[A,s]=a===5?[t,r]:[r,t],c=A.members[A.offsets[A.feature]],l=s.members[s.offsets[s.feature]],u=zn(A.unit,c)==="S"||zn(s.unit,l)==="S"?o.maxSulfurDistSq:o.maxDistSq;if(!(n>u)&&!(!o.includeWater&&bBt(A.unit,c,s.unit,l))&&BU(e,A,s,o))return 4}function FBt(e,t,r,n,o){let i=t.types[t.feature],a=r.types[r.feature];if(!SBt(i,a))return;let[A,s]=a===5?[t,r]:[r,t];if(BU(e,A,s,o))return 8}var S1e=ti.Provider([4],IBt),D1e=ti.Provider([9],CBt),v1e=ti.Provider([5],yBt),F1e={name:"hydrogen-bonds",params:fBt,createTester:e=>{let t=Math.max(e.distanceMax,e.sulfurDistanceMax),r=DBt(e);return{maxDistance:t,requiredFeatures:new Set([4,5]),getType:(n,o,i,a)=>vBt(n,o,i,a,r)}}},w1e={name:"weak-hydrogen-bonds",params:BBt,createTester:e=>{let t=x1e(e);return{maxDistance:e.distanceMax,requiredFeatures:new Set([9,5]),getType:(r,n,o,i)=>FBt(r,n,o,i,t)}}};var wBt={backbone:h.Boolean(!0,{description:"Include backbone hydrogen bonds"}),ignoreHydrogens:h.Boolean(!0,{description:"Ignore explicit hydrogens in geometric constraints"}),legDistMin:h.Numeric(2.5,{min:1,max:4,step:.1},{description:"Minimum leg distance (\xC5)"}),legDistMax:h.Numeric(4.1,{min:1,max:6,step:.1},{description:"Maximum leg distance (\xC5)"}),donAngleDevMax:h.Numeric(80,{min:0,max:180,step:1},{description:"Max deviation from ideal donor angle"}),accAngleDevMax:h.Numeric(50,{min:0,max:180,step:1},{description:"Max deviation from ideal acceptor angle"}),donOutOfPlaneAngleMax:h.Numeric(45,{min:0,max:180,step:1}),accOutOfPlaneAngleMax:h.Numeric(90,{min:0,max:180,step:1}),omegaMin:h.Numeric(71,{min:0,max:180,step:1},{description:"Minimum A\u2013W\u2013B angle (\xB0)"}),omegaMax:h.Numeric(140,{min:0,max:180,step:1},{description:"Maximum A\u2013W\u2013B angle (\xB0)"})},U1e={requiredFeatures:new Set([4,5]),params:wBt,find:NBt};function R1e(e,t){return e.model.atomicHierarchy.derived.residue.moleculeType[e.residueIndex[e.elements[t]]]===2}function RBt(e,t){let r=e.elements[t],n=e.model.atomicHierarchy.derived.residue.moleculeType[e.residueIndex[r]];if(n!==5&&n!==6&&n!==7)return!1;let o=e.model.atomicHierarchy.atoms.label_atom_id.value(r);return n===5?Uu.has(o):th.has(o)}var UBt=$y();function DV(e,t){return ko(e,t)}function LBt(e,t,r){return e.get(t)?.get(r)}function TBt(e,t,r,n){let o=e.get(t);o===void 0&&(o=new Map,e.set(t,o)),o.set(r,n)}function PBt(e){let t=[];for(let r of e.values())for(let n of r.values())t.push(n);return t}function GBt(e,t,r,n,o){let i=e.x-t[0],a=e.y-t[1],A=e.z-t[2],s=r.x-t[0],c=r.y-t[1],l=r.z-t[2],u=i*i+a*a+A*A,g=s*s+c*c+l*l;if(u===0||g===0)return!1;let m=(i*s+a*c+A*l)/Math.sqrt(u*g);return m<=n&&m>=o}function NBt(e,t,r){let n={ignoreHydrogens:r.ignoreHydrogens,includeBackbone:r.backbone,maxAccAngleDev:kr(r.accAngleDevMax),maxDonAngleDev:kr(r.donAngleDevMax),maxAccOutOfPlaneAngle:kr(r.accOutOfPlaneAngleMax),maxDonOutOfPlaneAngle:kr(r.donOutOfPlaneAngleMax)},o=r.legDistMin*r.legDistMin,i=r.legDistMax*r.legDistMax,a=kr(r.omegaMin),A=kr(r.omegaMax);if(a>A)return[];let s=Math.cos(a),c=Math.cos(A),l=new Map,u=B(),g=B();for(let m of e.units){if(!ge.isAtomic(m))continue;let p=t.get(m.id);if(!p||p.count===0)continue;let d=new Map;for(let C=0;C<p.count;C++){let y=p.members[p.offsets[C]];if(!R1e(m,y))continue;let Q=p.types[C];if(Q!==5&&Q!==4)continue;let E=d.get(y);E||d.set(y,E={acc:void 0,don:void 0}),Q===5?E.acc=C:E.don=C}if(d.size===0)continue;let f=ti.Info(e,m,p),I=ti.Info(e,m,p);for(let[C,{acc:y,don:Q}]of d){if(y===void 0||Q===void 0)continue;m.conformation.position(m.elements[C],u),f.feature=y,I.feature=Q;let{count:E,indices:b,units:x}=e.lookup3d.find(u[0],u[1],u[2],r.legDistMax,UBt),S=[],w=[],R=new Set,T=new Set;for(let L=0;L<E;L++){let F=x[L];if(!ge.isAtomic(F))continue;let v=F,U=b[L];if(v===m&&U===C||R1e(v,U))continue;let G=t.get(v.id);if(!G||G.count===0)continue;let N=ti.Info(e,v,G),{indices:k,offsets:J}=G.elementsIndex;for(let H=J[U],z=J[U+1];H<z;H++){let _=k[H],M=G.types[_];if(M!==4&&M!==5)continue;let q=G.members[G.offsets[_]];if(!r.backbone&&RBt(v,q))continue;v.conformation.position(v.elements[q],g);let ne=B.squaredDistance(g,u);if(!(ne<o||ne>i))if(N.feature=_,M===4){let oe=DV(v.id,_);if(R.has(oe))continue;BU(e,N,f,n)&&(R.add(oe),S.push({unit:v,featureIdx:_,memberIdx:q,x:g[0],y:g[1],z:g[2],distSq:ne}))}else{let oe=DV(v.id,_);if(T.has(oe))continue;BU(e,I,N,n)&&(T.add(oe),w.push({unit:v,featureIdx:_,memberIdx:q,x:g[0],y:g[1],z:g[2],distSq:ne}))}}}for(let L of S)for(let F of w){if(L.unit===F.unit&&L.memberIdx===F.memberIdx||!GBt(L,u,F,s,c))continue;let v=L.distSq+F.distSq,U=DV(L.unit.id,L.featureIdx),G=DV(F.unit.id,F.featureIdx),N=LBt(l,U,G);(!N||v<N.combinedDistSq)&&TBt(l,U,G,{contact:{unitA:L.unit.id,indexA:L.featureIdx,unitB:F.unit.id,indexB:F.featureIdx,unitM:m.id,indexMA:y,indexMB:Q,props:{type:9,flag:0}},combinedDistSq:v})}}}return PBt(l).map(m=>m.contact)}var MBt={distanceMax:h.Numeric(5,{min:0,max:8,step:.1})},kBt={distanceMax:h.Numeric(5.5,{min:1,max:8,step:.1}),offsetMax:h.Numeric(2,{min:0,max:4,step:.1}),angleDevMax:h.Numeric(30,{min:0,max:180,step:1})},HBt={distanceMax:h.Numeric(6,{min:1,max:8,step:.1}),offsetMax:h.Numeric(2,{min:0,max:4,step:.1})},VBt=["ARG","HIS","LYS"],_Bt=["GLU","ASP"];function G1e(e,t){let r=ZI.get(e).value;if(!r)throw Error("expected valence model to be available");let n=r.get(t.id);if(!n)throw Error("expected valence model for unit to be available");return n}function YBt(e,t,r){let{charge:n}=G1e(e,t),{elements:o}=t,{x:i,y:a,z:A}=t.model.atomicConformation,s=new Set,{label_comp_id:c}=t.model.atomicHierarchy.atoms,l=sr.transientSegments(t.model.atomicHierarchy.residueAtomSegments,o);for(;l.hasNext;){let{index:u,start:g,end:m}=l.move(),p=c.value(t.model.atomicHierarchy.residueAtomSegments.offsets[u]);if(VBt.includes(p)){r.startState();for(let d=g;d<m;++d)zn(t,d)==="N"&&!Uu.has(JQ(t,d))&&r.pushMember(i[o[d]],a[o[d]],A[o[d]],d);r.finishState(1,0)}else if(!$B.has(p)){s.clear();for(let d=g;d<m;++d){let f=0;if(LFe(e,t,d))f=8;else if(TFe(e,t,d))f=9;else if(FFe(e,t,d)){f=1,r.startState(),s.add(d),r.pushMember(i[o[d]],a[o[d]],A[o[d]],d),q0(t,d,(I,C)=>{s.add(C),r.markMember(C)}),r.finishState(1,f);continue}f&&(r.startState(),q0(t,d,(I,C)=>{zn(t,C)==="N"&&(s.add(C),r.pushMember(i[o[C]],a[o[C]],A[o[C]],C))}),r.finishState(1,f))}for(let d=g;d<m;++d)n[d]>0&&!s.has(d)&&r.add(1,0,i[o[d]],a[o[d]],A[o[d]],d)}}}function OBt(e,t,r){let{charge:n}=G1e(e,t),{elements:o}=t,{x:i,y:a,z:A}=t.model.atomicConformation,s=new Set,{label_comp_id:c}=t.model.atomicHierarchy.atoms,l=sr.transientSegments(t.model.atomicHierarchy.residueAtomSegments,o);for(;l.hasNext;){let{index:u,start:g,end:m}=l.move(),p=c.value(t.model.atomicHierarchy.residueAtomSegments.offsets[u]);if(_Bt.includes(p)){r.startState();for(let d=g;d<m;++d)zn(t,d)==="O"&&!Uu.has(JQ(t,d))&&r.pushMember(i[o[d]],a[o[d]],A[o[d]],d);r.finishState(2,0)}else if(Ky.has(p))for(let d=g;d<m;++d)uZ(e,t,d)&&(r.startState(),nc(e,t,d,(f,I)=>{zn(t,I)==="O"&&r.pushMember(i[o[I]],a[o[I]],A[o[I]],I)}),r.finishState(2,6));else if(!$B.has(p)){for(let d=g;d<m;++d){r.startState(),zn(t,d)==="N"&&!Uu.has(JQ(t,d))&&r.pushMember(i[o[d]],a[o[d]],A[o[d]],d),r.finishState(2,0);let f=0;wFe(e,t,d)?f=4:uZ(e,t,d)?f=6:RFe(e,t,d)?f=5:UFe(e,t,d)&&(f=10),f&&(r.startState(),nc(e,t,d,(I,C)=>{zn(t,C)==="O"&&(s.add(C),r.pushMember(i[o[C]],a[o[C]],A[o[C]],C))}),r.finishState(2,f))}for(let d=g;d<m;++d)n[d]<0&&!s.has(d)&&r.add(2,0,i[o[d]],a[o[d]],A[o[d]],d)}}}function JBt(e,t,r){let{elements:n}=t,{x:o,y:i,z:a}=t.model.atomicConformation;for(let A of t.rings.aromaticRings){let s=t.rings.all[A];r.startState();for(let c=0,l=s.length;c<l;++c){let u=s[c];r.pushMember(o[n[u]],i[n[u]],a[n[u]],u)}r.finishState(3,0)}}function zBt(e,t){return e===2&&t===1||e===1&&t===2}function KBt(e,t){return e===3&&t===3}function jBt(e,t){return e===3&&t===1||e===1&&t===3}var L1e=B(),T1e=B();function WBt(e,t,r){let{feature:n,offsets:o,members:i}=e,{feature:a,offsets:A,members:s}=t;for(let c=o[n],l=o[n+1];c<l;++c){let u=i[c];e.unit.conformation.position(e.unit.elements[u],L1e);for(let g=A[a],m=A[a+1];g<m;++g){let p=s[g];if(t.unit.conformation.position(t.unit.elements[p],T1e),B.squaredDistance(L1e,T1e)<r)return!0}}return!1}var FV=B(),iF=B(),wV=B(),vV=B();function FZ(e,t){let{unit:r,feature:n,offsets:o,members:i}=t,{elements:a}=r,A=o[n];return t.unit.conformation.position(a[i[A]],FV),t.unit.conformation.position(a[i[A+1]],iF),t.unit.conformation.position(a[i[A+2]],wV),B.triangleNormal(e,FV,iF,wV)}var wZ=function(e,t,r){return ti.position(FV,e),ti.position(iF,t),B.sub(wV,FV,iF),B.projectOnPlane(vV,wV,r),B.add(vV,vV,iF),B.distance(vV,iF)};function XBt(e){return{distanceMaxSq:e.distanceMax*e.distanceMax}}function ZBt(e){return{offsetMax:e.offsetMax,angleDevMax:kr(e.angleDevMax)}}function qBt(e){return{offsetMax:e.offsetMax}}var $Bt=kr(180),P1e=kr(90),IU=B(),vZ=B();function eIt(e,t,r,n,o){let i=t.types[t.feature],a=r.types[r.feature];if(zBt(i,a)&&WBt(t,r,o.distanceMaxSq))return 1}function tIt(e,t,r,n,o){let i=t.types[t.feature],a=r.types[r.feature];if(KBt(i,a)){FZ(IU,t),FZ(vZ,r);let A=B.angle(IU,vZ);if(Math.min(wZ(t,r,vZ),wZ(r,t,IU))<=o.offsetMax){if(A<=o.angleDevMax||A>=$Bt-o.angleDevMax)return 3;if(A<=o.angleDevMax+P1e&&A>=P1e-o.angleDevMax)return 3}}}function rIt(e,t,r,n,o){let i=t.types[t.feature],a=r.types[r.feature];if(jBt(i,a)){let[A,s]=i===3?[t,r]:[r,t];if(FZ(IU,A),wZ(s,A,IU)<=o.offsetMax)return 2}}var N1e=ti.Provider([2],OBt),M1e=ti.Provider([1],YBt),k1e=ti.Provider([3],JBt),H1e={name:"ionic",params:MBt,createTester:e=>{let t=XBt(e);return{maxDistance:e.distanceMax,requiredFeatures:new Set([2,1]),getType:(r,n,o,i)=>eIt(r,n,o,i,t)}}},V1e={name:"pi-stacking",params:kBt,createTester:e=>{let t=ZBt(e);return{maxDistance:e.distanceMax,requiredFeatures:new Set([3]),getType:(r,n,o,i)=>tIt(r,n,o,i,t)}}},_1e={name:"cation-pi",params:HBt,createTester:e=>{let t=qBt(e);return{maxDistance:e.distanceMax,requiredFeatures:new Set([3,1]),getType:(r,n,o,i)=>rIt(r,n,o,i,t)}}};var nIt={distanceMax:h.Numeric(4,{min:1,max:5,step:.1})};function oIt(e,t,r){let{elements:n}=t,{x:o,y:i,z:a}=t.model.atomicConformation;for(let A=0,s=n.length;A<s;++A){let c=zn(t,A),l=!1;c==="C"?(l=!0,nc(e,t,A,(u,g)=>{let m=zn(u,g);m!=="C"&&m!=="H"&&(l=!1)})):c==="F"&&(l=!0),l&&r.add(8,0,o[n[A]],i[n[A]],a[n[A]],A)}}function iIt(e,t){return e===8&&t===8}function aIt(e,t,r,n){let o=t.types[t.feature],i=r.types[r.feature];if(!iIt(o,i))return;let a=t.members[t.offsets[t.feature]],A=r.members[r.offsets[r.feature]];if(!(zn(t.unit,a)==="F"&&zn(r.unit,A)==="F"))return 6}var Y1e=ti.Provider([8],oIt),O1e={name:"hydrophobic",params:nIt,createTester:e=>({maxDistance:e.distanceMax,requiredFeatures:new Set([8]),getType:(t,r,n,o)=>aIt(t,r,n,o)})};var AIt={distanceMax:h.Numeric(3,{min:1,max:5,step:.1})},sIt=["LI","NA","K","RB","CS","MG","CA","SR","BA","AL","GA","IN","TL","SC","SN","PB","BI","SB","HG"];function cIt(e,t,r){let{elements:n}=t,{x:o,y:i,z:a}=t.model.atomicConformation;for(let A=0,s=n.length;A<s;++A){let c=zn(t,A),l=0;sIt.includes(c)?l=13:(EK(c)||c==="ZN"||c==="CD")&&(l=12),l&&r.add(l,0,o[n[A]],i[n[A]],a[n[A]],A)}}function J1e(e){return!Uu.has(e)}function lIt(e){return Uu.has(e)}function uIt(e){return th.has(e)}function gIt(e,t,r){let{elements:n}=t,{x:o,y:i,z:a}=t.model.atomicConformation;for(let A=0,s=n.length;A<s;++A){let c=zn(t,A),l=fU(t,A),u=JQ(t,A),g=!1,m=!1,p=zy.has(l),d=Ky.has(l);!p&&!d?QK(c)||c==="O"||c==="S"?(g=!0,m=!0):c==="N"&&(g=!0):p?c==="O"?(["ASP","GLU","SER","THR","TYR","ASN","GLN"].includes(l)&&J1e(u)||lIt(u))&&(g=!0,m=!0):c==="S"&&(l==="CYS"||l==="MET")?(g=!0,m=!0):c==="N"&&l==="HIS"&&J1e(u)&&(g=!0):d&&(c==="O"&&uIt(u)?(g=!0,m=!0):["N3","N4","N7"].includes(u)?g=!0:["O2","O4","O6"].includes(u)&&(g=!0,m=!0)),g&&r.add(11,0,o[n[A]],i[n[A]],a[n[A]],A),m&&r.add(10,0,o[n[A]],i[n[A]],a[n[A]],A)}}function z1e(e,t){if(e===12)return t===11||t===12;if(e===13)return t===10}function mIt(e,t,r,n){let o=t.types[t.feature],i=r.types[r.feature];if(!(!z1e(o,i)&&!z1e(i,o)))return 7}var K1e=ti.Provider([13,12],cIt),j1e=ti.Provider([10,11],gIt),W1e={name:"metal-coordination",params:AIt,createTester:e=>({maxDistance:e.distanceMax,requiredFeatures:new Set([13,12,10,11]),getType:(t,r,n,o)=>mIt(t,r,n,o)})};function X1e(e,t){let{contacts:r,unitsContacts:n,unitsFeatures:o}=t,i=[dIt(e,t),pIt(e,t),fIt(e,t),BIt(e,t),IIt(e,t),CIt(e,t)];for(let A=0,s=r.edgeCount;A<s;++A){let c=r.edges[A],l=e.unitMap.get(c.unitA),u=e.unitMap.get(c.unitB),g=ti.Info(e,l,o.get(c.unitA));g.feature=c.indexA;let m=ti.Info(e,u,o.get(c.unitB));m.feature=c.indexB;for(let p of i)p.isApplicable(c.props.type)&&p.handleInterContact(A,g,m)}let a=n.keys();for(;;){let{done:A,value:s}=a.next();if(A)break;let c=n.get(s),l=o.get(s),u=e.unitMap.get(s);if(!ge.isAtomic(u))continue;let g=ti.Info(e,u,l),m=ti.Info(e,u,l);for(let p of i)p.startUnit(u,c,l);for(let p=0,d=c.edgeCount*2;p<d;++p){g.feature=c.a[p],m.feature=c.b[p];for(let f of i)f.isApplicable(c.edgeProps.type[p])&&f.handleIntraContact(p,g,m)}}}function dIt(e,t){let{contacts:r}=t,n=function(c,l,u,g,m){let[p,d]=g.get(u)||[1/0,-1];c<p?(d!==-1&&m(d),g.set(u,[c,l])):m(l)};function o(c,l,u,g,m){let p=l.members[l.offsets[l.feature]],d=u.members[u.offsets[u.feature]],f=l.unit.getResidueIndex(p),I=u.unit.getResidueIndex(d),C=`${p}|${l.unit.id}|${I}|${u.unit.id}|A`,y=`${d}|${u.unit.id}|${f}|${l.unit.id}|B`,Q=ti.distance(l,u);n(Q,c,C,g,m),n(Q,c,y,g,m)}let i=new Map,a=c=>r.edges[c].props.flag=1,A,s;return{isApplicable:c=>c===6,handleInterContact:(c,l,u)=>{o(c,l,u,i,a)},startUnit:(c,l,u)=>{A=new Map,s=g=>l.edgeProps.flag[g]=1},handleIntraContact:(c,l,u)=>{o(c,l,u,A,s)}}}function pIt(e,t){let{contacts:r}=t,n=(o,i)=>{let a=o.types[o.feature]===9?i:o,A=a.members[a.offsets[a.feature]],{edgeProps:{type:s},elementsIndex:{offsets:c,indices:l}}=t.unitsContacts.get(a.unit.id);for(let g=c[A],m=c[A+1];g<m;++g)if(s[l[g]]===4)return!0;let u=r.getEdgeIndices(a.feature,a.unit.id);for(let g=0,m=u.length;g<m;++g)if(r.edges[u[g]].props.type===4)return!0;return!1};return{isApplicable:o=>o===8,handleInterContact:(o,i,a)=>{n(i,a)&&(r.edges[o].props.flag=1)},startUnit:()=>{},handleIntraContact:(o,i,a)=>{if(n(i,a)){let{flag:A}=t.unitsContacts.get(i.unit.id).edgeProps;A[o]=1}}}}function RZ(e,t,r,n,o){let{offsets:i,feature:a}=r,{offsets:A,feature:s}=n;for(let c=i[a],l=i[a+1];c<l;++c){let u=r.members[c],g=o.getContactIndicesForElement(u,r.unit);for(let m=0,p=g.length;m<p;++m){let d=g[m];if(e.includes(o.edges[d].props.type))for(let f=A[s],I=A[s+1];f<I;++f){let C=n.members[f];if(o.getContactIndicesForElement(C,n.unit).includes(d)){o.edges[t].props.flag=1;return}}}}}function UZ(e,t,r,n,o){let{edgeProps:{type:i,flag:a},elementsIndex:{offsets:A,indices:s}}=o,{offsets:c,feature:l}=r,{offsets:u,feature:g}=n;for(let m=c[l],p=c[l+1];m<p;++m){let d=r.members[m];for(let f=A[d],I=A[d+1];f<I;++f){let C=s[f];if(e.includes(i[C]))for(let y=u[g],Q=u[g+1];y<Q;++y){let E=n.members[y];for(let b=A[E],x=A[E+1];b<x;++b)if(C===s[b]){a[t]=1;return}}}}}function fIt(e,t){let{contacts:r}=t;return{isApplicable:n=>n===1,handleInterContact:(n,o,i)=>{RZ([4,8],n,o,i,r)},startUnit:()=>{},handleIntraContact:(n,o,i)=>{UZ([4,8],n,o,i,t.unitsContacts.get(o.unit.id))}}}function BIt(e,t){let{contacts:r}=t;return{isApplicable:n=>n===6||n===2,handleInterContact:(n,o,i)=>{RZ([3],n,o,i,r)},startUnit:()=>{},handleIntraContact:(n,o,i)=>{UZ([3],n,o,i,t.unitsContacts.get(o.unit.id))}}}function IIt(e,t){let{contacts:r}=t;return{isApplicable:n=>n===1,handleInterContact:(n,o,i)=>{RZ([7],n,o,i,r)},startUnit:()=>{},handleIntraContact:(n,o,i)=>{UZ([7],n,o,i,t.unitsContacts.get(o.unit.id))}}}function CIt(e,t){let{contacts:r,bridges:n,unitsFeatures:o}=t;function i(g,m){return ko(g,m)}function a(g,m){return g.members[g.offsets[m]]}function A(g,m,p,d,f){let I=i(m,p),C=i(d,f),y=g.get(I);y===void 0&&(y=new Set,g.set(I,y)),y.add(C);let Q=g.get(C);Q===void 0&&(Q=new Set,g.set(C,Q)),Q.add(I)}function s(g,m,p,d,f){return g.get(i(m,p))?.has(i(d,f))===!0}function c(g,m,p){let{offsets:d,members:f,feature:I}=m,{offsets:C,members:y,feature:Q}=p;for(let E=d[I],b=d[I+1];E<b;++E){let x=f[E];for(let S=C[Q],w=C[Q+1];S<w;++S){let R=y[S];if(s(g,m.unit.id,x,p.unit.id,R))return!0}}return!1}let l=new Map;for(let g of n){if(g.props.type!==9)continue;let m=o.get(g.unitA),p=o.get(g.unitM),d=o.get(g.unitB);if(!m||!p||!d)continue;let f=a(m,g.indexA),I=a(p,g.indexMA),C=a(p,g.indexMB),y=a(d,g.indexB);A(l,g.unitA,f,g.unitM,I),A(l,g.unitM,C,g.unitB,y)}let u;return{isApplicable:g=>l.size>0&&g===4,handleInterContact:(g,m,p)=>{c(l,m,p)&&(r.edges[g].props.flag=1)},startUnit:(g,m)=>{u=m},handleIntraContact:(g,m,p)=>{u&&c(l,m,p)&&(u.edgeProps.flag[g]=1)}}}var cB;(c=>{function e(l,u,g,m,p,d){return _f("interactions",{structure:u,interactions:l},{unitA:g,indexA:m,unitB:p,indexB:d})}c.Location=e;function t(l){return!!l&&l.kind==="data-location"&&l.tag==="interactions"}c.isLocation=t;function r(l,u){return l.data.structure===u.data.structure&&l.data.interactions===u.data.interactions&&l.element.indexA===u.element.indexA&&l.element.indexB===u.element.indexB&&l.element.unitA===u.element.unitA&&l.element.unitB===u.element.unitB}c.areLocationsEqual=r;function n(l,u){let{unitA:g,indexA:m,unitB:p,indexB:d}=u,{contacts:f,unitsContacts:I}=l;if(g===p){let C=I.get(g.id),y=C.getDirectedEdgeIndex(m,d);return bV(C.edgeProps.type[y])}else{let C=f.getEdgeIndex(m,g.id,d,p.id);return bV(f.edges[C].props.type)}}function o(l){return n(l.data.interactions,l.element)}c.locationLabel=o;function i(l,u,g){return ec("interactions",{structure:l,interactions:u},g,m=>A(u,g,m),()=>s(l,u,g))}c.Loci=i;function a(l){return!!l&&l.kind==="data-loci"&&l.tag==="interactions"}c.isLoci=a;function A(l,u,g){let{unitsFeatures:m}=l;return gc.fromPairProvider(u.length,(p,d,f)=>{let I=u[p];ti.setPosition(d,I.unitA,I.indexA,m.get(I.unitA.id)),ti.setPosition(f,I.unitB,I.indexB,m.get(I.unitB.id))},g)}c.getBoundingSphere=A;function s(l,u,g){let m=g[0];if(m===void 0)return"";let{unitA:p,indexA:d,unitB:f,indexB:I}=m,{unitsFeatures:C}=u,{members:y,offsets:Q}=C.get(p.id),{members:E,offsets:b}=C.get(f.id),x={granularity:"element"};return(Q[d+1]-Q[d]>1||b[I+1]-b[I]>1)&&(x.granularity="residue"),[n(u,m),kQ(Et.Location(l,p,y[Q[d]],l,f,E[b[I]]),x)].join("</br>")}c.getLabel=s})(cB||={});var tx;(a=>{function e(A,s=0){return _f("bridges",A,{bridgeIndex:s})}a.Location=e;function t(A){return!!A&&A.kind==="data-location"&&A.tag==="bridges"}a.isLocation=t;function r(A,s){return ec("bridges",A,s,c=>i(A,s,c),()=>o(A,s))}a.Loci=r;function n(A){return!!A&&A.kind==="data-loci"&&A.tag==="bridges"}a.isLoci=n;function o(A,s){let c=s[0];if(c===void 0)return"";let{structure:l,bridges:u,unitsFeatures:g}=A,m=u[c.bridgeIndex],p=l.unitMap.get(m.unitA),d=g.get(m.unitA),f=l.unitMap.get(m.unitM),I=g.get(m.unitM),C=l.unitMap.get(m.unitB),y=g.get(m.unitB),Q={granularity:"element"};return(d.offsets[m.indexA+1]-d.offsets[m.indexA]>1||y.offsets[m.indexB+1]-y.offsets[m.indexB]>1)&&(Q.granularity="residue"),[bV(m.props.type),Fv({loci:[W.Loci(l,[{unit:p,indices:Ee.ofSingleton(d.members[d.offsets[m.indexA]])}]),W.Loci(l,[{unit:f,indices:Ee.ofSingleton(I.members[I.offsets[m.indexMA]])}]),W.Loci(l,[{unit:C,indices:Ee.ofSingleton(y.members[y.offsets[m.indexB]])}])]},Q)].join("</br>")}function i(A,s,c){return gc.fromPairProvider(s.length*2,(l,u,g)=>{let m=A.bridges[s[l>>1].bridgeIndex],p=A.structure.unitMap.get(m.unitA),d=A.unitsFeatures.get(m.unitA),f=A.structure.unitMap.get(m.unitM),I=A.unitsFeatures.get(m.unitM),C=A.structure.unitMap.get(m.unitB),y=A.unitsFeatures.get(m.unitB),Q=d.members[d.offsets[m.indexA]],E=I.members[I.offsets[m.indexMA]],b=y.members[y.offsets[m.indexB]];(l&1)===0?(p.conformation.position(p.elements[Q],u),f.conformation.position(f.elements[E],g)):(f.conformation.position(f.elements[E],u),C.conformation.position(C.elements[b],g))},c)}})(tx||={});var hIt=[S1e,D1e,v1e,N1e,M1e,k1e,B1e,I1e,Y1e,K1e,j1e],RV={ionic:H1e,"pi-stacking":V1e,"cation-pi":_1e,"halogen-bonds":C1e,"hydrogen-bonds":F1e,"weak-hydrogen-bonds":w1e,hydrophobic:O1e,"metal-coordination":W1e};function yIt(e=[]){let t=Object.create(null);return Object.keys(RV).forEach(r=>{t[r]=h.MappedStatic(e.includes(r)?"on":"off",{on:h.Group(RV[r].params),off:h.Group({})},{cycle:!0})}),t}var QIt=yIt(["cation-pi","pi-stacking","hydrogen-bonds","halogen-bonds","metal-coordination"]),aF={"water-bridges":U1e};function EIt(e=[]){let t=Object.create(null);return Object.keys(aF).forEach(r=>{t[r]=h.MappedStatic(e.includes(r)?"on":"off",{on:h.Group(aF[r].params),off:h.Group({})},{cycle:!0})}),t}var bIt=EIt([]),LZ={providers:h.Group(QIt,{isFlat:!0}),bridges:h.Group(bIt,{isFlat:!0}),contacts:h.Group(g1e,{label:"Advanced Options"})};async function Z1e(e,t,r,n){let o={...h.getDefaultValues(LZ),...r},i=JSON.stringify(o);await ZI.attach(e,t);let a=[];Du(RV).forEach(p=>{let{name:d,params:f}=o.providers[p];d==="on"&&a.push(RV[p].createTester(f))});let A=new Set;a.forEach(p=>lo.add(A,p.requiredFeatures)),Du(aF).forEach(p=>{o.bridges[p].name==="on"&&lo.add(A,aF[p].requiredFeatures)});let s=hIt.filter(p=>lo.areIntersecting(A,p.types)),c=_c.Mutable(),l=_c.Mutable();for(let p=0,d=t.unitSymmetryGroups.length;p<d;++p){let f=t.unitSymmetryGroups[p];e.runtime.shouldUpdate&&await e.runtime.update({message:"computing interactions",current:p,max:d});let I=xIt(t,f.units[0],s,i);for(let y=0,Q=f.units.length;y<Q;++y){let E=f.units[y];c.set(E.id,I)}if(n?.skipIntraContacts)continue;let C=SIt(t,f.units[0],I,a,o.contacts);for(let y=0,Q=f.units.length;y<Q;++y){let E=f.units[y];l.set(E.id,C)}}let u=vIt(t,c,a,o.contacts,n),g=DIt(t,c,o.bridges),m={unitsFeatures:c,unitsContacts:l,contacts:u,bridges:g};return X1e(t,m),m}function xIt(e,t,r,n){let o=`features-${n}`;if(t.transientCache.has(o))return t.transientCache.get(o);let i=t.elements.length,a=yZ.create(i,i/2);if(ge.isAtomic(t))for(let s of r)s.add(e,t,a);let A=a.getFeatures(i);return t.transientCache.set(o,A),A}function SIt(e,t,r,n,o){let i=EZ.create(r,t.elements.length);return ge.isAtomic(t)&&p1e(e,t,r,i,n,o),i.getContacts()}function DIt(e,t,r){let n=[];return Du(aF).forEach(o=>{let{name:i,params:a}=r[o];if(i==="on")for(let A of aF[o].find(e,t,a))n.push(A)}),n}function vIt(e,t,r,n,o){let i=bZ.create();return Ye.eachUnitPair(e,(a,A)=>{let s=t.get(a.id),c=t.get(A.id);f1e(e,a,s,A,c,i,r,n)},{maxRadius:Math.max(...r.map(a=>a.maxDistance)),validUnit:a=>ge.isAtomic(a),validUnitPair:(a,A)=>o?.unitPairTest?o.unitPairTest(a,A):Ye.validUnitPair(e,a,A)}),i.getContacts(t)}var TZ={...LZ},ci=eA.createProvider({label:"Interactions",descriptor:{name:"molstar_computed_interactions"},type:"local",defaultParams:TZ,getParams:e=>TZ,isApplicable:e=>!e.isCoarseGrained,obtain:async(e,t,r)=>{let n={...h.getDefaultValues(TZ),...r};return{value:await Z1e(e,t,n)}}});var Oh=B(),AF=B(),CU=B(),UV=qe.add,q1e=qe.add3,rx;(t=>{function e(r=2048,n=1024,o){let i=qe.create(Float32Array,1,n,o?o.groupBuffer.ref.value:r),a=qe.create(Float32Array,3,n,o?o.startBuffer.ref.value:r),A=qe.create(Float32Array,3,n,o?o.endBuffer.ref.value:r),s=qe.create(Float32Array,1,n,o?o.scaleBuffer.ref.value:r),c=qe.create(Float32Array,1,n,o?o.capBuffer.ref.value:r),l=qe.create(Float32Array,1,n,o?o.colorModeBuffer.ref.value:r),u=(m,p,d,f,I,C,y,Q,E,b,x)=>{for(let S=0;S<6;++S)q1e(a,m,p,d),q1e(A,f,I,C),UV(i,x),UV(s,y),UV(c,(Q?1:0)+(E?2:0)),UV(l,b)},g=(m,p,d,f,I,C,y,Q,E)=>{let b=B.distance(m,p),x=d%2!==0,S=Math.floor((d+1)/2),w=b/(d+.5),R=2;B.setMagnitude(CU,B.sub(CU,p,m),w),B.copy(Oh,m);for(let T=0;T<S;++T)B.add(Oh,Oh,CU),x&&T===S-1?(B.copy(AF,p),y||(C=!1)):B.add(AF,Oh,CU),Q&&(R=B.distance(m,AF)/(b*2)),u(Oh[0],Oh[1],Oh[2],AF[0],AF[1],AF[2],f,I,C,R,E),B.add(Oh,Oh,CU)};return{add:u,addFixedCountDashes:g,addFixedLengthDashes:(m,p,d,f,I,C,y,Q)=>{let E=B.distance(m,p);g(m,p,E/d,f,I,C,!0,y,Q)},getCylinders:()=>{let m=i.elementCount/6,p=qe.compact(i,!0),d=qe.compact(a,!0),f=qe.compact(A,!0),I=qe.compact(s,!0),C=qe.compact(c,!0),y=qe.compact(l,!0),Q=o&&m<=o.cylinderCount?o.mappingBuffer.ref.value:new Float32Array(m*18),E=o&&m<=o.cylinderCount?o.indexBuffer.ref.value:new Uint32Array(m*12);return(!o||m>o.cylinderCount)&&FIt(m,Q,E),_a.create(Q,E,p,d,f,I,C,y,m,o)}}}t.create=e})(rx||={});function FIt(e,t,r){for(let n=0;n<e;++n){let o=n*18;t[o]=-1,t[o+1]=1,t[o+2]=-1,t[o+3]=-1,t[o+4]=-1,t[o+5]=-1,t[o+6]=1,t[o+7]=1,t[o+8]=-1,t[o+9]=1,t[o+10]=1,t[o+11]=1,t[o+12]=1,t[o+13]=-1,t[o+14]=-1,t[o+15]=1,t[o+16]=-1,t[o+17]=1}for(let n=0;n<e;++n){let o=n*6,i=n*12;r[i]=o,r[i+1]=o+1,r[i+2]=o+2,r[i+3]=o+1,r[i+4]=o+4,r[i+5]=o+2,r[i+6]=o+2,r[i+7]=o+4,r[i+8]=o+3,r[i+9]=o+4,r[i+10]=o+5,r[i+11]=o+3}}var Nl={linkScale:h.Numeric(.45,{min:0,max:1,step:.01}),linkSpacing:h.Numeric(1,{min:0,max:2,step:.01}),linkCap:h.Boolean(!1),aromaticScale:h.Numeric(.3,{min:0,max:1,step:.01}),aromaticSpacing:h.Numeric(1.5,{min:0,max:3,step:.01}),aromaticDashCount:h.Numeric(2,{min:1,max:6,step:1}),dashCount:h.Numeric(4,{min:0,max:10,step:1}),dashScale:h.Numeric(.8,{min:0,max:2,step:.1}),dashCap:h.Boolean(!0),stubCap:h.Boolean(!0),radialSegments:h.Numeric(16,{min:2,max:56,step:2},ot.CustomQualityParamInfo),colorMode:h.Select("default",h.arrayToOptions(["default","interpolate"]),ot.ShadingCategory)},dpn=h.getDefaultValues(Nl),PZ={linkScale:h.Numeric(.5,{min:0,max:1,step:.1}),linkSpacing:h.Numeric(.1,{min:0,max:2,step:.01}),aromaticDashCount:h.Numeric(2,{min:1,max:6,step:1}),dashCount:h.Numeric(4,{min:0,max:10,step:1})},ppn=h.getDefaultValues(PZ),Ji=B(),eE=B(),Mp=B(),wIt=B.create(0,1,0);function GZ(e,t,r,n){B.normalize(eE,B.sub(eE,t,r)),n!==null?B.sub(Mp,t,n):B.copy(Mp,t),B.normalize(Mp,Mp);let o=B.dot(eE,Mp);return 1-Math.abs(o)<1e-5&&(B.set(Mp,1,0,0),o=B.dot(eE,Mp),1-Math.abs(o)<1e-5&&(B.set(Mp,0,1,0),o=B.dot(eE,Mp))),B.setMagnitude(eE,eE,o),B.sub(Mp,Mp,eE),B.normalize(e,Mp)}var LV={linkCount:0,position:()=>{},radius:()=>0};var lB=B.scale,aA=B.add,ps=B.sub,Gl=B.setMagnitude,RIt=B.dot;function Qc(e,t,r,n){let{linkCount:o,referencePosition:i,position:a,style:A,radius:s,ignore:c,stub:l}=t;if(!o)return{mesh:At.createEmpty(n)};let{radialSegments:u,stubCap:g}=r,m=n?.hasBoundingSphere()?we.clone(n.boundingSphere):void 0,p=u*2*o*2,d=We.createState(p,p/4,n),f=B(),I=0,C=0,y={builderState:d,props:r,assignNonAdjustedPosition:(b,x)=>{a(b,x,C,!1)},referencePosition:i?()=>i(C):void 0},Q={a:B(),b:B(),group:0,linkStub:!1,linkStyle:0,linkRadius:0};for(let b=o;C<b;++C)c&&c(C)||(a(Q.a,Q.b,C,!0),aA(f,f,Q.a),aA(f,f,Q.b),I+=2,Q.group=C,Q.linkStub=g&&(l?l(C):!1),Q.linkRadius=s(C),Q.linkStyle=A?A(C):0,LIt(y,Q));let E=We.getMesh(d);return I===0?{mesh:E}:(B.scale(f,f,1/I),m&&B.distance(f,m.center)/m.radius<.1?{mesh:E,boundingSphere:m}:{mesh:E})}var UIt={cylinderProps:{radiusTop:1,radiusBottom:1,radialSegments:8,topCap:!1,bottomCap:!1},vShift:B(),va:B(),vb:B()};function LIt(e,t){let{builderState:r,props:n,assignNonAdjustedPosition:o,referencePosition:i}=e,{linkRadius:a,linkStub:A,linkStyle:s,a:c,b:l}=t,{linkScale:u,linkSpacing:g,radialSegments:m,linkCap:p,aromaticScale:d,aromaticSpacing:f,aromaticDashCount:I,dashCount:C,dashScale:y,dashCap:Q}=n,{cylinderProps:E,vShift:b,va:x,vb:S}=UIt;E.radialSegments=m,B.copy(x,c),B.copy(S,l),ps(Ji,S,x);let w=RIt(Ji,wIt)>0,[R,T]=w?[A,p]:[p,A];if(r.currentGroup=t.group,s===0)E.radiusTop=E.radiusBottom=a,E.topCap=R,E.bottomCap=T,Sn(r,x,S,.5,E);else if(s===1)E.radiusTop=E.radiusBottom=a*y,E.topCap=E.bottomCap=Q,Rm(r,x,S,.5,C,A,E);else if(s===2||s===3||s===4||s===5||s===7||s===8){let L=s===2||s===3?2:s===4||s===5?3:1.5,F=a*(u/(.5*L)),v=(a-F)*g;if(GZ(b,x,S,i?i():null),E.topCap=R,E.bottomCap=T,s===7||s===8){E.radiusTop=E.radiusBottom=a,Sn(r,x,S,.5,E);let U=a+d*a+d*a*f;o&&o(x,S),Gl(Ji,ps(Ji,S,x),a*.5),aA(x,x,Ji),ps(S,S,Ji),E.radiusTop=E.radiusBottom=a*d,E.topCap=E.bottomCap=Q,Gl(b,b,U),ps(x,x,b),ps(S,S,b),Rm(r,x,S,.5,I,A,E),s===8&&(Gl(b,b,U*2),aA(x,x,b),aA(S,S,b),Rm(r,x,S,.5,I,A,E))}else if(s===3||s===5){let U=a+F+u*a*g;Gl(b,b,U),E.radiusTop=E.radiusBottom=a,Sn(r,x,S,.5,E),lB(Ji,Ji,g*u*.2),aA(x,x,Ji),ps(S,S,Ji),E.radiusTop=E.radiusBottom=F,E.topCap=w?A:Q,E.bottomCap=w?Q:A,Gl(b,b,U),ps(x,x,b),ps(S,S,b),Sn(r,x,S,.5,E),L===3&&(Gl(b,b,U*2),aA(x,x,b),aA(S,S,b),Sn(r,x,S,.5,E))}else Gl(b,b,v),E.radiusTop=E.radiusBottom=F,L===3&&Sn(r,x,S,.5,E),VSe(r,x,S,.5,b,E)}else s===6&&(lB(Ji,Ji,.475),aA(x,x,Ji),ps(S,S,Ji),E.radiusTop=E.radiusBottom=a,E.topCap=R,E.bottomCap=T,Sn(r,x,S,.5,E))}function hU(e,t,r,n){let{linkCount:o,referencePosition:i,position:a,style:A,radius:s,ignore:c,stub:l}=t;if(!o)return{cylinders:_a.createEmpty(n)};let{linkScale:u,linkSpacing:g,linkCap:m,aromaticScale:p,aromaticSpacing:d,aromaticDashCount:f,dashCount:I,dashScale:C,dashCap:y,stubCap:Q,colorMode:E}=r,b=E==="interpolate",x=b===!0?3:2,S=n?.hasBoundingSphere()?we.clone(n.boundingSphere):void 0,w=o*2,R=rx.create(w,w/4,n),T=B(),L=B(),F=B(),v=B(),U=B(),G=0;for(let k=0,J=o;k<J;++k){if(c&&c(k))continue;a(T,L,k,!0),aA(U,U,T),aA(U,U,L),G+=2;let H=s(k),z=A?A(k):0,_=Q&&(l?l(k):!1);if(z===0)lB(F,aA(F,T,L),.5),R.add(T[0],T[1],T[2],F[0],F[1],F[2],1,m,_,x,k);else if(z===1)lB(F,aA(F,T,L),.5),R.addFixedCountDashes(T,F,I,C,y,y,_,b,k);else if(z===2||z===3||z===4||z===5||z===7||z===8){let M=z===2||z===3?2:z===4||z===5?3:1.5,q=u/(.5*M),ne=(H-q*H)*g;if(lB(F,aA(F,T,L),.5),GZ(v,T,L,i?i(k):null),z===7||z===8){R.add(T[0],T[1],T[2],F[0],F[1],F[2],1,m,_,x,k);let oe=H+p*H+p*H*d;a(T,L,k,!1),Gl(Ji,ps(Ji,L,T),H*.5),aA(T,T,Ji),Gl(v,v,oe),ps(T,T,v),ps(F,F,v),R.addFixedCountDashes(T,F,f,p,y,y,_,b,k),z===8&&(Gl(v,v,oe*2),aA(T,T,v),aA(F,F,v),R.addFixedCountDashes(T,F,f,p,y,y,_,b,k))}else if(z===3||z===5){let oe=H+q*H+u*H*g;Gl(v,v,oe),R.add(T[0],T[1],T[2],F[0],F[1],F[2],1,m,_,x,k),Gl(Ji,ps(Ji,T,F),H/1.5),ps(T,T,Ji),M===3&&R.add(T[0]+v[0],T[1]+v[1],T[2]+v[2],F[0]+v[0],F[1]+v[1],F[2]+v[2],q,m,_,x,k),R.add(T[0]-v[0],T[1]-v[1],T[2]-v[2],F[0]-v[0],F[1]-v[1],F[2]-v[2],q,y,_,x,k)}else Gl(v,v,ne),M===3&&R.add(T[0],T[1],T[2],F[0],F[1],F[2],q,m,_,x,k),R.add(T[0]+v[0],T[1]+v[1],T[2]+v[2],F[0]+v[0],F[1]+v[1],F[2]+v[2],q,m,_,x,k),R.add(T[0]-v[0],T[1]-v[1],T[2]-v[2],F[0]-v[0],F[1]-v[1],F[2]-v[2],q,m,_,x,k)}else z===6&&(lB(Ji,ps(Ji,F,T),.475),aA(T,T,Ji),ps(F,F,Ji),R.add(T[0],T[1],T[2],F[0],F[1],F[2],1,m,_,x,k))}let N=R.getCylinders();return G===0?{cylinders:N}:(B.scale(U,U,1/G),S&&B.distance(U,S.center)/S.radius<.1?{cylinders:N,boundingSphere:S}:{cylinders:N})}function yU(e,t,r,n){let{linkCount:o,referencePosition:i,position:a,style:A,ignore:s}=t;if(!o)return{lines:Zr.createEmpty(n)};let{linkScale:c,linkSpacing:l,aromaticDashCount:u,dashCount:g}=r,m=n?.hasBoundingSphere()?we.clone(n.boundingSphere):void 0,p=o*2,d=Ii.create(p,p/4,n),f=B(),I=B(),C=B(),y=B(),Q=B(),E=0,b=4.5,x=3;for(let w=0,R=o;w<R;++w){if(s&&s(w))continue;a(f,I,w,!0),aA(Q,Q,f),aA(Q,Q,I),E+=2;let T=A?A(w):0;if(T===0)lB(C,aA(C,f,I),.5),d.add(f[0],f[1],f[2],C[0],C[1],C[2],w);else if(T===1)lB(C,aA(C,f,I),.5),d.addFixedCountDashes(f,C,g,w);else if(T===2||T===3||T===4||T===5||T===7||T===8){let L=T===2||T===3?2:T===4||T===5?3:1.5,v=(1-1*(c/(.5*L)))*l;if(lB(C,aA(C,f,I),.5),GZ(y,f,I,i?i(w):null),T===7||T===8){d.add(f[0],f[1],f[2],C[0],C[1],C[2],w);let U=v*b;Gl(Ji,ps(Ji,I,f),U*.5),aA(f,f,Ji),Gl(y,y,U),ps(f,f,y),ps(C,C,y),d.addFixedCountDashes(f,C,u,w),T===8&&(Gl(y,y,U*2),aA(f,f,y),aA(C,C,y),d.addFixedCountDashes(f,C,u,w))}else T===3||T===5?(Gl(y,y,v*x),d.add(f[0],f[1],f[2],C[0],C[1],C[2],w),lB(Ji,ps(Ji,f,C),l*c),ps(f,f,Ji),L===3&&d.add(f[0]+y[0],f[1]+y[1],f[2]+y[2],C[0]+y[0],C[1]+y[1],C[2]+y[2],w),d.add(f[0]-y[0],f[1]-y[1],f[2]-y[2],C[0]-y[0],C[1]-y[1],C[2]-y[2],w)):(Gl(y,y,v*1.5),L===3&&d.add(f[0],f[1],f[2],C[0],C[1],C[2],w),d.add(f[0]+y[0],f[1]+y[1],f[2]+y[2],C[0]+y[0],C[1]+y[1],C[2]+y[2],w),d.add(f[0]-y[0],f[1]-y[1],f[2]-y[2],C[0]-y[0],C[1]-y[1],C[2]-y[2],w))}else T===6&&(lB(Ji,ps(Ji,C,f),.475),aA(f,f,Ji),ps(C,C,Ji),d.add(f[0],f[1],f[2],C[0],C[1],C[2],w))}let S=d.getLines();return E===0?{lines:S}:(B.scale(Q,Q,1/E),m&&B.distance(Q,m.center)/m.radius<.1?{lines:S,boundingSphere:m}:{lines:S})}var sF={sizeFactor:h.Numeric(.3,{min:0,max:10,step:.01}),dashCount:h.Numeric(6,{min:1,max:10,step:1}),dashScale:h.Numeric(.4,{min:0,max:2,step:.1}),ignoreHydrogens:h.Boolean(!1),ignoreHydrogensVariant:h.Select("all",h.arrayToOptions(["all","non-polar"])),includeParent:h.Boolean(!1),parentDisplay:h.Select("stub",h.arrayToOptions(["stub","full","between"]),{description:'Only has an effect when "includeParent" is enabled. "Stub" shows just the child side of interactions to the parent. "Full" shows both sides of interactions to the parent. "Between" shows only interactions to the parent.'})};async function TIt(e,t,r,n,o,i){if(!ge.isAtomic(t))return At.createEmpty(i);let{child:a}=r,A=a?.unitMap.get(t.id);if(a&&!A)return At.createEmpty(i);let s=W.Location.create(r,t),c=ci.get(r).value,l=c.unitsFeatures.get(t.id),u=c.unitsContacts.get(t.id),{x:g,y:m,z:p,members:d,offsets:f,types:I}=l,{edgeCount:C,a:y,b:Q,edgeProps:{flag:E,type:b}}=u,{sizeFactor:x,ignoreHydrogens:S,ignoreHydrogensVariant:w,parentDisplay:R}=o;if(!C)return At.createEmpty(i);let{elements:T,conformation:L}=t,F=B(),v=B(),U=B(),G={linkCount:C*2,position:(J,H,z)=>{let _=b[z];if((!S||w!=="all")&&(_===4||_===8&&w!=="non-polar")){let M=d[f[y[z]]],q=d[f[Q[z]]];L.invariantPosition(T[M],v),L.invariantPosition(T[q],U);let ne=B.distance(v,U),oe=ne;B.copy(J,v),B.copy(H,U);let ae=_===4?4:9;I[f[y[z]]]===ae?q0(t,M,(Se,ee)=>{if(Ug(r,t,T[ee],"all")){L.invariantPosition(T[ee],F);let O=B.distance(F,U);O<ne&&(ne=O,B.copy(J,F))}}):q0(t,q,(Se,ee)=>{if(Ug(r,t,T[ee],"all")){L.invariantPosition(T[ee],F);let O=B.distance(F,v);O<oe&&(oe=O,B.copy(H,F))}})}else B.set(J,g[y[z]],m[y[z]],p[y[z]]),B.set(H,g[Q[z]],m[Q[z]],p[Q[z]])},style:J=>1,radius:J=>{s.element=T[d[f[y[J]]]];let H=n.size.size(s);s.element=T[d[f[Q[J]]]];let z=n.size.size(s);return Math.min(H,z)*x},ignore:J=>{if(E[J]===1)return!0;if(A)if(R==="stub"){let H=y[J];for(let z=f[H],_=f[H+1];z<_;++z){let M=T[d[f[z]]];if(!je.has(A.elements,M))return!0}}else if(R==="full"||R==="between"){let H=!1,z=!1,_=y[J];for(let q=f[_],ne=f[_+1];q<ne;++q){let oe=T[d[f[q]]];je.has(A.elements,oe)||(H=!0)}let M=Q[J];for(let q=f[M],ne=f[M+1];q<ne;++q){let oe=T[d[f[q]]];je.has(A.elements,oe)||(z=!0)}return R==="full"?H&&z:H===z}else Or(R);return!1}},{mesh:N,boundingSphere:k}=Qc(e,G,o,i);if(k)N.setBoundingSphere(k);else if(N.triangleCount>0){let J=we.expand(we(),(A??t).boundary.sphere,1*x);N.setBoundingSphere(J)}return N}var MZ={...bo,...Nl,...sF};function $1e(e){return Vo({defaultProps:h.getDefaultValues(MZ),createGeometry:TIt,createLocationIterator:NIt,getLoci:PIt,eachLocation:GIt,setUpdateState:(t,r,n,o,i,a,A)=>{t.createGeometry=r.sizeFactor!==n.sizeFactor||r.dashCount!==n.dashCount||r.dashScale!==n.dashScale||r.dashCap!==n.dashCap||r.radialSegments!==n.radialSegments||r.ignoreHydrogens!==n.ignoreHydrogens||r.ignoreHydrogensVariant!==n.ignoreHydrogensVariant||r.parentDisplay!==n.parentDisplay;let s=ci.get(a.structure).version;t.info.interactionsHash!==s&&(t.createGeometry=!0,t.updateTransform=!0,t.updateColor=!0,t.info.interactionsHash=s)}},e)}function PIt(e,t,r){let{objectId:n,instanceId:o,groupId:i}=e;if(r===n){let{structure:a,group:A}=t,s=a.unitMap.get(A.units[o].id),c=ci.get(a).value,{a:l,b:u}=c.unitsContacts.get(s.id);return cB.Loci(a,c,[{unitA:s,indexA:l[i],unitB:s,indexB:u[i]},{unitA:s,indexA:u[i],unitB:s,indexB:l[i]}])}return Ir}var NZ=new Set;function GIt(e,t,r,n){let o=!1;if(cB.isLoci(e)){let{structure:i,group:a}=t;if(!Ye.areEquivalent(e.data.structure,i))return!1;let A=ci.get(i).value;if(e.data.interactions!==A)return!1;let s=a.units[0],c=A.unitsContacts.get(s.id),l=c.edgeCount*2;for(let u of e.elements){if(u.unitA!==u.unitB)continue;let g=a.unitIndexMap.get(u.unitA.id);if(g!==void 0){let m=c.getDirectedEdgeIndex(u.indexA,u.indexB);m!==-1&&r(Ue.ofSingleton(g*l+m))&&(o=!0)}}}else if(W.Loci.is(e)){let{structure:i,group:a}=t;if(!Ye.areEquivalent(e.structure,i))return!1;let A=ci.get(i).value;if(!A)return!1;let s=a.units[0],c=A.unitsContacts.get(s.id),l=A.unitsFeatures.get(s.id),u=c.edgeCount*2,{offset:g}=c,{offsets:m,indices:p}=l.elementsIndex,{members:d,offsets:f}=l;for(let I of e.elements){let C=a.unitIndexMap.get(I.unit.id);C!==void 0&&(Ee.forEach(I.indices,y=>{for(let Q=m[y],E=m[y+1];Q<E;++Q){let b=p[Q];for(let x=g[b],S=g[b+1];x<S;++x)NZ.add(x)}}),NZ.forEach(y=>{if(n){let Q=c.a[y];for(let b=f[Q],x=f[Q+1];b<x;++b)if(!Ee.has(I.indices,d[b]))return;let E=c.b[y];for(let b=f[E],x=f[E+1];b<x;++b)if(!Ee.has(I.indices,d[b]))return}r(Ue.ofSingleton(C*u+y))&&(o=!0)}),NZ.clear())}}return o}function NIt(e){let{structure:t,group:r}=e,n=r.units[0],o=ci.get(t).value,i=o.unitsContacts.get(n.id),a=i.edgeCount*2,A=r.units.length,s=cB.Location(o,t),{element:c}=s;return rn(a,A,1,(u,g)=>{let m=r.units[g];return c.unitA=m,c.indexA=i.a[u],c.unitB=m,c.indexB=i.b[u],s})}function MIt(e,t,r,n,o){if(!t.hasAtomic)return At.createEmpty(o);let i=W.Location.create(t),a=ci.get(t).value,{contacts:A,unitsFeatures:s}=a,{edgeCount:c,edges:l}=A,{sizeFactor:u,ignoreHydrogens:g,ignoreHydrogensVariant:m,parentDisplay:p}=n;if(!c)return At.createEmpty(o);let{child:d}=t,f=B(),I=B(),C=B(),y={linkCount:c,position:(b,x,S)=>{let{unitA:w,indexA:R,unitB:T,indexB:L,props:{type:F}}=l[S],v=s.get(w),U=s.get(T),G=t.unitMap.get(w),N=t.unitMap.get(T);if((!g||m!=="all")&&(F===4||F===8&&m!=="non-polar")){let k=v.members[v.offsets[R]],J=U.members[U.offsets[L]];G.conformation.position(G.elements[k],I),N.conformation.position(N.elements[J],C);let H=B.distance(I,C),z=H;B.copy(b,I),B.copy(x,C);let _=F===4?4:9;v.types[v.offsets[R]]===_?nc(t,G,k,(q,ne)=>{let oe=q.elements[ne];if(Ug(t,q,oe,"all")){q.conformation.position(oe,f);let ae=B.distance(f,C);ae<H&&(H=ae,B.copy(b,f))}}):nc(t,N,J,(q,ne)=>{let oe=q.elements[ne];if(Ug(t,q,oe,"all")){q.conformation.position(oe,f);let ae=B.distance(f,I);ae<z&&(z=ae,B.copy(x,f))}})}else B.set(b,v.x[R],v.y[R],v.z[R]),B.transformMat4(b,b,G.conformation.operator.matrix),B.set(x,U.x[L],U.y[L],U.z[L]),B.transformMat4(x,x,N.conformation.operator.matrix)},style:b=>1,radius:b=>{let x=l[b],S=s.get(x.unitA);i.unit=t.unitMap.get(x.unitA),i.element=i.unit.elements[S.members[S.offsets[x.indexA]]];let w=r.size.size(i),R=s.get(x.unitB);i.unit=t.unitMap.get(x.unitB),i.element=i.unit.elements[R.members[R.offsets[x.indexB]]];let T=r.size.size(i);return Math.min(w,T)*u},ignore:b=>{if(l[b].props.flag===1)return!0;if(d){let x=l[b];if(p==="stub"){let S=d.unitMap.get(x.unitA);if(!S)return!0;let w=t.unitMap.get(x.unitA),{offsets:R,members:T}=s.get(x.unitA);for(let L=R[x.indexA],F=R[x.indexA+1];L<F;++L){let v=w.elements[T[L]];if(!je.has(S.elements,v))return!0}}else if(p==="full"||p==="between"){let S=!1,w=!1,R=d.unitMap.get(x.unitA);if(!R)S=!0;else{let L=t.unitMap.get(x.unitA),{offsets:F,members:v}=s.get(x.unitA);for(let U=F[x.indexA],G=F[x.indexA+1];U<G;++U){let N=L.elements[v[U]];je.has(R.elements,N)||(S=!0)}}let T=d.unitMap.get(x.unitB);if(!T)w=!0;else{let L=t.unitMap.get(x.unitB),{offsets:F,members:v}=s.get(x.unitB);for(let U=F[x.indexB],G=F[x.indexB+1];U<G;++U){let N=L.elements[v[U]];je.has(T.elements,N)||(w=!0)}}return p==="full"?S&&w:S===w}else Or(p)}return!1}},{mesh:Q,boundingSphere:E}=Qc(e,y,n,o);if(E)Q.setBoundingSphere(E);else if(Q.triangleCount>0){let{child:b}=t,x=we.expand(we(),(b??t).boundary.sphere,1*u);Q.setBoundingSphere(x)}return Q}var HZ={...Us,...Nl,...sF};function ewe(e){return Oa({defaultProps:h.getDefaultValues(HZ),createGeometry:MIt,createLocationIterator:VIt,getLoci:kIt,eachLocation:HIt,setUpdateState:(t,r,n,o,i,a,A)=>{t.createGeometry=r.sizeFactor!==n.sizeFactor||r.dashCount!==n.dashCount||r.dashScale!==n.dashScale||r.dashCap!==n.dashCap||r.radialSegments!==n.radialSegments||r.ignoreHydrogens!==n.ignoreHydrogens||r.ignoreHydrogensVariant!==n.ignoreHydrogensVariant||r.parentDisplay!==n.parentDisplay;let s=ci.get(a).version;t.info.interactionsHash!==s&&(t.createGeometry=!0,t.updateTransform=!0,t.updateColor=!0,t.info.interactionsHash=s)}},e)}function kIt(e,t,r){let{objectId:n,groupId:o}=e;if(r===n){let i=ci.get(t).value,a=i.contacts.edges[o],A=t.unitMap.get(a.unitA),s=t.unitMap.get(a.unitB);return cB.Loci(t,i,[{unitA:A,indexA:a.indexA,unitB:s,indexB:a.indexB},{unitA:s,indexA:a.indexB,unitB:A,indexB:a.indexA}])}return Ir}var TV=new Map,kZ=new Set;function HIt(e,t,r,n){let o=!1;if(cB.isLoci(e)){if(!Ye.areEquivalent(e.data.structure,t))return!1;let i=ci.get(t).value;if(e.data.interactions!==i)return!1;let{contacts:a}=i;for(let A of e.elements){let s=a.getEdgeIndex(A.indexA,A.unitA.id,A.indexB,A.unitB.id);s!==-1&&r(Ue.ofSingleton(s))&&(o=!0)}}else if(W.Loci.is(e)){if(!Ye.areEquivalent(e.structure,t)||n&&e.elements.length===1)return!1;let i=ci.get(t).value;if(!i)return!1;let{contacts:a,unitsFeatures:A}=i;for(let s of e.elements)TV.set(s.unit.id,s.indices);for(let s of e.elements){let{unit:c}=s;ge.isAtomic(c)&&Ee.forEach(s.indices,l=>{for(let u of a.getContactIndicesForElement(l,c))kZ.add(u)})}kZ.forEach(s=>{if(n){let{indexA:c,unitA:l,indexB:u,unitB:g}=a.edges[s],m=TV.get(l),p=TV.get(g);if(!m||!p)return;let{offsets:d,members:f}=A.get(l);for(let y=d[c],Q=d[c+1];y<Q;++y)if(!Ee.has(m,f[y]))return;let{offsets:I,members:C}=A.get(g);for(let y=I[u],Q=I[u+1];y<Q;++y)if(!Ee.has(p,C[y]))return}r(Ue.ofSingleton(s))&&(o=!0)}),TV.clear(),kZ.clear()}return o}function VIt(e){let t=ci.get(e).value,{contacts:r}=t,n=r.edgeCount,o=1,i=cB.Location(t,e),{element:a}=i;return rn(n,o,1,s=>{let c=r.edges[s];return a.unitA=e.unitMap.get(c.unitA),a.indexA=c.indexA,a.unitB=e.unitMap.get(c.unitB),a.indexB=c.indexB,i},!0)}var twe=new WeakMap;function VZ(e){let t=twe.get(e);if(t)return t;let r=e.length,n=new Int32Array(r),o=new Int32Array(r),i=new Map,a=new Map;for(let s=0;s<r;s++){let c=e[s],l=`${c.unitA}|${c.indexA}|${c.unitM}|${c.indexMA}`,u=`${c.unitM}|${c.indexMB}|${c.unitB}|${c.indexB}`,g=i.get(l);g===void 0&&(g=s,i.set(l,s)),n[s]=g;let m=a.get(u);m===void 0&&(m=s,a.set(u,s)),o[s]=m}let A={endpointA:n,endpointB:o};return twe.set(e,A),A}function lF(e,t){return e.members[e.offsets[t]]}function rE(e,t,r,n){let o=lF(t,r);e.conformation.position(e.elements[o],n)}function PV(e,t,r,n,o){let i=e.unitMap.get(r),a=lF(n,o);t.unit=i,t.element=i.elements[a]}function rwe(e,t,r,n){let o=!1,i=r.endpointA[e];return n(Ue.ofSingleton(i))&&(o=!0),n(Ue.ofSingleton(i+t))&&(o=!0),o}function nwe(e,t,r,n){let o=!1,i=r.endpointB[e];return n(Ue.ofSingleton(i+2*t))&&(o=!0),n(Ue.ofSingleton(i+3*t))&&(o=!0),o}function _It(e,t,r,n,o){if(!t.hasAtomic)return At.createEmpty(o);let i=ci.get(t).value;if(!i)return At.createEmpty(o);let{bridges:a,unitsFeatures:A}=i,s=a.length;if(!s)return At.createEmpty(o);let c=W.Location.create(t),{sizeFactor:l}=n,u=VZ(a),g={linkCount:4*s,position:(d,f,I)=>{let C=a[I%s],y=t.unitMap.get(C.unitM),Q=A.get(C.unitM),E=Math.floor(I/s);if(E===0){let b=t.unitMap.get(C.unitA),x=A.get(C.unitA);rE(b,x,C.indexA,d),rE(y,Q,C.indexMA,f)}else if(E===1){let b=t.unitMap.get(C.unitA),x=A.get(C.unitA);rE(y,Q,C.indexMA,d),rE(b,x,C.indexA,f)}else if(E===2){let b=t.unitMap.get(C.unitB),x=A.get(C.unitB);rE(y,Q,C.indexMB,d),rE(b,x,C.indexB,f)}else{let b=t.unitMap.get(C.unitB),x=A.get(C.unitB);rE(b,x,C.indexB,d),rE(y,Q,C.indexMB,f)}},ignore:d=>{let f=d%s;return Math.floor(d/s)<=1?u.endpointA[f]!==f:u.endpointB[f]!==f},style:d=>1,radius:d=>{let f=a[d%s];if(Math.floor(d/s)<=1){let y=A.get(f.unitA),Q=A.get(f.unitM);PV(t,c,f.unitA,y,f.indexA);let E=r.size.size(c);PV(t,c,f.unitM,Q,f.indexMA);let b=r.size.size(c);return Math.min(E,b)*l}else{let y=A.get(f.unitM),Q=A.get(f.unitB);PV(t,c,f.unitM,y,f.indexMB);let E=r.size.size(c);PV(t,c,f.unitB,Q,f.indexB);let b=r.size.size(c);return Math.min(E,b)*l}}},{mesh:m,boundingSphere:p}=Qc(e,g,n,o);if(p)m.setBoundingSphere(p);else if(m.triangleCount>0){let d=we.expand(we(),t.boundary.sphere,l);m.setBoundingSphere(d)}return m}var _Z={...Us,...Nl,...sF};function owe(e){return Oa({defaultProps:h.getDefaultValues(_Z),createGeometry:_It,createLocationIterator:JIt,getLoci:YIt,eachLocation:OIt,setUpdateState:(t,r,n,o,i,a,A)=>{t.createGeometry=r.sizeFactor!==n.sizeFactor||r.dashCount!==n.dashCount||r.dashScale!==n.dashScale||r.dashCap!==n.dashCap||r.radialSegments!==n.radialSegments||o.size!==i.size;let s=ci.get(a).version;t.info.interactionsHash!==s&&(t.createGeometry=!0,t.updateTransform=!0,t.updateColor=!0,t.info.interactionsHash=s)}},e)}function YIt(e,t,r){let{objectId:n,groupId:o}=e;if(r!==n)return Ir;let i=ci.get(t).value;if(!i)return Ir;let{bridges:a,unitsFeatures:A}=i,s=a.length;if(!s||o<0||o>=4*s)return Ir;let c=o%s;return tx.Loci({structure:t,bridges:a,unitsFeatures:A},[{bridgeIndex:c}])}var cF=new Map;function OIt(e,t,r,n){let o=!1;if(tx.isLoci(e)){if(!Ye.areEquivalent(e.data.structure,t))return!1;let i=ci.get(t).value;if(!i)return!1;let{bridges:a}=i,A=a.length;if(!A)return!1;let s=VZ(a);for(let c of e.elements)c.bridgeIndex<0||c.bridgeIndex>=A||(rwe(c.bridgeIndex,A,s,r)&&(o=!0),nwe(c.bridgeIndex,A,s,r)&&(o=!0))}else if(W.Loci.is(e)){if(!Ye.areEquivalent(e.structure,t))return!1;let i=ci.get(t).value;if(!i)return!1;let{bridges:a,unitsFeatures:A}=i,s=a.length;if(!s)return!1;let c=VZ(a);cF.clear();for(let l of e.elements)cF.set(l.unit.id,l.indices);for(let l=0;l<s;l++){let u=a[l],g=cF.get(u.unitA),m=cF.get(u.unitM),p=cF.get(u.unitB);if(!g&&!m&&!p)continue;let d=!1;if(g){let C=A.get(u.unitA),y=lF(C,u.indexA);d=Ee.has(g,y)}let f=!1;if(m){let C=A.get(u.unitM),y=lF(C,u.indexMA),Q=lF(C,u.indexMB);f=Ee.has(m,y)||Ee.has(m,Q)}let I=!1;if(p){let C=A.get(u.unitB),y=lF(C,u.indexB);I=Ee.has(p,y)}(d||f)&&rwe(l,s,c,r)&&(o=!0),(I||f)&&nwe(l,s,c,r)&&(o=!0)}cF.clear()}return o}function JIt(e){let t=ci.get(e).value;if(!t)return rn(0,1,1,()=>vA,!0);let{bridges:r,unitsFeatures:n}=t,o=r.length,i=4*o,a=1,A={structure:e,bridges:r,unitsFeatures:n},s=tx.Location(A),{element:c}=s;return rn(i,a,1,u=>(c.bridgeIndex=o===0?0:u%o,s),!0)}var iwe={"intra-unit":(e,t)=>fo("Intra-unit interactions cylinder",e,t,$1e),"inter-unit":(e,t)=>Eo("Inter-unit interactions cylinder",e,t,ewe),bridge:(e,t)=>Eo("Bridge cylinder",e,t,owe)},awe={...MZ,...HZ,..._Z,unitKinds:AB(["atomic"]),sizeFactor:h.Numeric(.2,{min:.01,max:1,step:.01}),visuals:h.MultiSelect(["intra-unit","inter-unit","bridge"],h.objectToOptions(iwe))};function zIt(e,t){return h.clone(awe)}function KIt(e,t){return Xt.createMulti("Interactions",e,t,Vn,iwe)}var uF={name:"interactions",label:"Non-covalent Interactions",description:"Displays non-covalent interactions as dashed cylinders.",factory:KIt,getParams:zIt,defaultValues:h.getDefaultValues(awe),defaultColorTheme:{name:"interaction-type"},defaultSizeTheme:{name:"uniform"},isApplicable:e=>e.elementCount>0&&ci.isApplicable(e),ensureCustomProperties:{attach:(e,t)=>ci.attach(e,t,void 0,!0),detach:e=>ci.ref(e,!1)},getData:(e,t)=>t.includeParent?e.asParent():e,mustRecreate:(e,t)=>e.includeParent!==t.includeParent};var OZ=13421772,jIt="Assigns colors according the interaction type of a link.",Ml={HydrogenBond:2851770,Hydrophobic:8421504,HalogenBond:4259775,Ionic:15779860,MetalCoordination:9191577,CationPi:16744448,PiStacking:9220966,WeakHydrogenBond:12967404,WaterBridge:52462},WIt=[["Hydrogen Bond",Ml.HydrogenBond],["Hydrophobic",Ml.Hydrophobic],["Halogen Bond",Ml.HalogenBond],["Ionic",Ml.Ionic],["Metal Coordination",Ml.MetalCoordination],["Cation Pi",Ml.CationPi],["Pi Stacking",Ml.PiStacking],["Weak HydrogenBond",Ml.WeakHydrogenBond],["Water Bridge",Ml.WaterBridge]];function YZ(e){switch(e){case 4:return Ml.HydrogenBond;case 6:return Ml.Hydrophobic;case 5:return Ml.HalogenBond;case 1:return Ml.Ionic;case 7:return Ml.MetalCoordination;case 2:return Ml.CationPi;case 3:return Ml.PiStacking;case 8:return Ml.WeakHydrogenBond;case 9:return Ml.WaterBridge;case 0:return OZ}}var Awe={};function XIt(e){return Awe}function swe(e,t){let r,n=e.structure?ci.get(e.structure):void 0,o=n?lc(n.id,n.version):-1;return n&&n.value?r=i=>{if(cB.isLocation(i)){let{unitsContacts:a,contacts:A}=i.data.interactions,{unitA:s,unitB:c,indexA:l,indexB:u}=i.element;if(s===c){let g=a.get(s.id),m=g.getDirectedEdgeIndex(l,u);return YZ(g.edgeProps.type[m])}else{let g=A.getEdgeIndex(l,s.id,u,c.id);return YZ(A.edges[g].props.type)}}return tx.isLocation(i)?YZ(i.data.bridges[i.element.bridgeIndex].props.type):OZ}:r=()=>OZ,{factory:swe,granularity:"group",color:r,props:t,contextHash:o,description:jIt,legend:Ba(WIt)}}var QU={name:"interaction-type",label:"Interaction Type",category:Br.Misc,factory:swe,getParams:XIt,defaultValues:h.getDefaultValues(Awe),isApplicable:e=>!!e.structure,ensureCustomProperties:{attach:(e,t)=>t.structure?ci.attach(e,t.structure,void 0,!0):Promise.resolve(),detach:e=>e.structure&&ci.ref(e.structure,!1)}};var er;(u=>{class e extends te.Create({name:"Root",typeClass:"Root"}){}u.Root=e;class t extends te.Create({name:"Category",typeClass:"Object"}){}u.Category=t;class r extends te.CreateBehavior({name:"Behavior"}){}u.Behavior=r,u.Categories={common:"Common",representation:"Representation",interaction:"Interaction","custom-props":"Custom Properties",misc:"Miscellaneous"},u.CreateCategory=Yt.BuiltIn({name:"create-behavior-category",display:{name:"Behavior Category"},from:e,to:t,params:{label:h.Text("",{isHidden:!0})}})({apply({params:g}){return new t({},{label:g.label})}});let i=new Map;function a(g){return i.get(g.id)}u.getCategoryId=a;function A(g){let m=Yt.CreateBuiltIn({name:g.name,display:g.display,from:[e],to:[r],params:g.params,apply({params:p},d){let f=g.label?g.label(p):{label:g.display.name,description:g.display.description};return new r(new g.ctor(d,p),f)},update({b:p,newParams:d}){return ve.create("Update Behavior",async()=>p.data.update?await p.data.update(d)?lt.UpdateResult.Updated:lt.UpdateResult.Unchanged:lt.UpdateResult.Unchanged)},canAutoUpdate:g.canAutoUpdate});return i.set(m.id,g.category),m}u.create=A;function s(g,m){return class{constructor(p){this.ctx=p;this.sub=void 0}register(){this.sub=g.subscribe(this.ctx,p=>m(p,this.ctx))}dispose(){this.sub&&this.sub.unsubscribe(),this.sub=void 0}}}u.simpleCommandHandler=s;class c{constructor(m,p){this.ctx=m;this.params=p;this.subs=[]}subscribeCommand(m,p){this.subs.push(m.subscribe(this.ctx,p))}subscribeObservable(m,p){this.subs.push(m.subscribe(p))}track(m){this.subs.push(m)}dispose(){for(let m of this.subs)m.unsubscribe();this.subs=[]}update(m){return KB(m,this.params)?!1:(this.params=m,!0)}}u.Handler=c;class l{constructor(m,p){this.plugin=m;this.params=p;this.subs=[]}subscribeCommand(m,p){this.subs.push(m.subscribe(this.plugin,p))}subscribeObservable(m,p){let d=m.subscribe(p);return this.subs.push(d),{unsubscribe:()=>{let f=this.subs.indexOf(d);f>=0&&(this.subs.splice(f,1),d.unsubscribe())}}}dispose(){for(let m of this.subs)m.unsubscribe();this.subs=[]}}u.WithSubscribers=l})(er||={});var zZ={};ki(zZ,{ApplyAction:()=>pwe,ClearHighlights:()=>hwe,Highlight:()=>Cwe,RemoveObject:()=>fwe,SetCurrentObject:()=>mwe,Snapshots:()=>ywe,SyncBehaviors:()=>gwe,ToggleExpanded:()=>Bwe,ToggleVisibility:()=>Iwe,Update:()=>dwe,registerDefault:()=>qIt,setSubtreeVisibility:()=>Tm});var du=class{constructor(){this.subs=void 0}subscribe(t,r){if(!t)return{unsubscribe:()=>{}};typeof this.subs>"u"&&(this.subs=[]);let n=t.subscribe(r);return this.subs.push(n),{unsubscribe:()=>{n&&this.subs&&vu(this.subs,n)&&(n.unsubscribe(),n=void 0)}}}get ev(){return this._ev||(this._ev=Fg.create())}dispose(){if(this._ev&&this._ev.dispose(),this.subs){for(let t of this.subs)t.unsubscribe();this.subs=void 0}}},Ec=class extends du{updateState(...t){let r=this.state,n=Tce(r,t);return n!==r?(this._state=n,!0):!1}get state(){return this._state}constructor(t){super(),this._state=t}};function ea(){let e=((t,r)=>t.commands.dispatch(e,r||{}));return e.subscribe=(t,r)=>t.commands.subscribe(e,r),e.id=Hn.create22(),e}var GV=class{constructor(){this.subs=new Map;this.disposing=!1}subscribe(t,r){let n=this.subs.get(t.id);return n||(n=[],this.subs.set(t.id,n)),n.push(r),{unsubscribe:()=>{let o=this.subs.get(t.id);if(!o)return;let i=o.indexOf(r);if(!(i<0)){for(let a=i+1;a<o.length;a++)o[a-1]=o[a];o.pop()}}}}dispatch(t,r){return new Promise((n,o)=>{if(this.disposing){o("disposed");return}if(!this.subs.get(t.id)){n();return}this.resolve({cmd:t,params:r,resolve:n,reject:o})})}dispose(){this.subs.clear()}async resolve(t){let r=this.subs.get(t.cmd.id);if(!r){t.resolve();return}try{for(let n of r)await n(t.params);t.resolve()}catch(n){t.reject(n)}}};var yt={State:{SetCurrentObject:ea(),ApplyAction:ea(),Update:ea(),RemoveObject:ea(),ToggleExpanded:ea(),ToggleVisibility:ea(),Snapshots:{Add:ea(),Replace:ea(),Move:ea(),Remove:ea(),Apply:ea(),Clear:ea(),Upload:ea(),Fetch:ea(),DownloadToFile:ea(),OpenFile:ea(),OpenUrl:ea()}},Interactivity:{Object:{Highlight:ea()},Structure:{Highlight:ea(),Select:ea()},ClearHighlights:ea()},Layout:{Update:ea()},Toast:{Show:ea(),Hide:ea()},Camera:{Reset:ea(),SetSnapshot:ea(),Focus:ea(),FocusObject:ea(),OrientAxes:ea(),ResetAxes:ea()},Canvas3D:{SetSettings:ea(),ResetSettings:ea()}};var bc;(r=>{function e(n){return n}r.create=e;function t(n,o){if(o.customDurationMs)return o.customDurationMs;let i=o.definition.getDuration?.(o.params,n);if(i?.kind==="fixed")return i.durationMs}r.getDuration=t})(bc||={});async function nE(e,t,r=!1){if(t.data&&await e.runTask(e.state.data.setSnapshot(t.data)),t.canvas3d?.props){let n=h.normalizeParams(ds,t.canvas3d.props,"children");(t.camera?.current||t.camera?.focus)&&(n.camera=void 0,n.cameraClipping=void 0,n.cameraFog=void 0),e.canvas3d?.setProps(n)}t.camera?.current?e.canvas3d?.requestCameraReset({snapshot:t.camera.current,durationMs:r||t.camera.transitionStyle==="instant"?0:t.camera.transitionDurationInMs}):t.camera?.focus&&e.managers.camera.focusObject({...t.camera.focus,durationMs:r||t.camera.transitionStyle==="instant"?0:t.camera.transitionDurationInMs})}var cwe=bc.create({name:"built-in.animate-state-snapshots",display:{name:"State Snapshots"},isExportable:!0,params:()=>({}),canApply(e){let t=e.managers.snapshot.state.entries;return t.size<1?{canApply:!1,reason:"At least 1 state required."}:t.some(r=>!!r?.snapshot.startAnimation)?{canApply:!1,reason:"Nested animations not supported."}:{canApply:e.managers.snapshot.state.entries.size>0}},setup(e,t,r){let n=r.managers.snapshot.state.entries.get(0);nE(r,n.snapshot,!0)},getDuration:(e,t)=>({kind:"fixed",durationMs:t.managers.snapshot.state.entries.toArray().reduce((r,n)=>r+(n.snapshot.durationInMs??0),0)}),initialState:(e,t)=>{let r=t.managers.snapshot.state.entries.toArray();return{totalDuration:r.reduce((n,o)=>n+(o.snapshot.durationInMs??0),0),snapshots:r,currentIndex:0,currentTransitionFrame:0}},async apply(e,t,r){if(t.current>=e.totalDuration)return{kind:"finished"};let n=0,o=0,i=0;for(let l of e.snapshots){if(i=t.current-n,n+=l.snapshot.durationInMs??0,t.current<n)break;o++}if(o>=e.snapshots.length)return{kind:"finished"};let{transition:a,camera:A,canvas3d:s}=e.snapshots[o].snapshot,c=kl.getStateTransitionFrameIndex(e.snapshots[o].snapshot,i);return a&&c!==void 0?o===e.currentIndex&&c===e.currentTransitionFrame?{kind:"skip"}:(c===0||o!==e.currentIndex?await nE(r.plugin,{...a.frames[c],camera:A,canvas3d:s}):await nE(r.plugin,a.frames[c]),{kind:"next",state:{...e,currentIndex:o,currentAnimationFrame:c}}):o===e.currentIndex?{kind:"skip"}:(await nE(r.plugin,e.snapshots[o].snapshot),{kind:"next",state:{...e,currentIndex:o,currentAnimationFrame:void 0}})}}),qI=bc.create({name:"built-in.animate-state-snapshot-transition",display:{name:"State Snapshot Transition"},isExportable:!0,params:()=>({}),canApply(e){let{snapshot:t}=e.managers,{current:r}=t;return r?.snapshot.transition?{canApply:!0}:{canApply:!1,reason:"No transition found"}},setup(e,t,r){let{current:n}=r.managers.snapshot;n&&nE(r,n.snapshot.transition?.frames[0]??n.snapshot,!0)},getDuration:(e,t)=>{let{current:r}=t.managers.snapshot;return r?.snapshot.transition?r.snapshot.transition?.loop?{kind:"infinite"}:{kind:"fixed",durationMs:kl.getStateTransitionDuration(r.snapshot)??0}:{kind:"fixed",durationMs:0}},initialState:(e,t)=>{let{current:r}=t.managers.snapshot;if(r)return{totalDuration:r.snapshot.transition?.loop?Number.MAX_VALUE:kl.getStateTransitionDuration(r.snapshot)??0,snapshots:[r],currentIndex:0,currentTransitionFrame:void 0,isInitial:!0}},async apply(e,t,r){let n=e.snapshots[0]?.snapshot;if(t.current>=e.totalDuration){if(n?.transition&&e.isInitial){let s=n.transition.frames.length-1;r.plugin.managers.snapshot.setSnapshotAnimationFrame(e.totalDuration,!1),await nE(r.plugin,n.transition.frames[s])}return{kind:"finished"}}if(!n)return{kind:"finished"};let{transition:o,camera:i,canvas3d:a}=n,A=kl.getStateTransitionFrameIndex(n,t.current);return!o||A===void 0?{kind:"finished"}:A===e.currentTransitionFrame?{kind:"skip"}:(r.plugin.managers.snapshot.setSnapshotAnimationFrame(t.current,!1),A===0?await nE(r.plugin,{...o.frames[A],camera:i,canvas3d:a}):await nE(r.plugin,o.frames[A]),{kind:"next",state:{...e,currentAnimationFrame:A,isInitial:!1}})}});var kl=class e extends du{constructor(r){super();this.plugin=r;this.data=bm.create(new te.Root({}),{runTask:this.plugin.runTask,globalContext:this.plugin,historyCapacity:this.plugin.config.get(jt.State.HistoryCapacity)});this.behaviors=bm.create(new er.Root({}),{runTask:this.plugin.runTask,globalContext:this.plugin,rootState:{isLocked:!0}});this.events={cell:{stateUpdated:ml(this.data.events.cell.stateUpdated,this.behaviors.events.cell.stateUpdated),created:ml(this.data.events.cell.created,this.behaviors.events.cell.created),removed:ml(this.data.events.cell.removed,this.behaviors.events.cell.removed)},object:{created:ml(this.data.events.object.created,this.behaviors.events.object.created),removed:ml(this.data.events.object.removed,this.behaviors.events.object.removed),updated:ml(this.data.events.object.updated,this.behaviors.events.object.updated)}};this.snapshotParams=this.ev.behavior(e.DefaultSnapshotParams);this.setSnapshotParams=r=>{this.snapshotParams.next({...e.DefaultSnapshotParams,...r})}}get animation(){return this.plugin.managers.animation}getSnapshot(r){let n={...this.snapshotParams.value,...r};return{id:Hn.create22(),data:n.data?this.data.getSnapshot():void 0,behaviour:n.behavior?this.behaviors.getSnapshot():void 0,animation:n.animation?this.animation.getSnapshot():void 0,startAnimation:n.startAnimation?!!n.startAnimation:void 0,camera:n.camera?{current:this.plugin.canvas3d.camera.getSnapshot(),transitionStyle:n.cameraTransition.name,transitionDurationInMs:n?.cameraTransition?.name==="animate"?n.cameraTransition.params.durationInMs:void 0}:void 0,canvas3dContext:n.canvas3dContext?{props:this.plugin.canvas3dContext?.props}:void 0,canvas3d:n.canvas3d?{props:this.plugin.canvas3d?.props}:void 0,interactivity:n.interactivity?{props:this.plugin.managers.interactivity.props}:void 0,structureFocus:this.plugin.managers.structure.focus.getSnapshot(),structureSelection:n.structureSelection?this.plugin.managers.structure.selection.getSnapshot():void 0,structureComponentManager:n.componentManager?{options:this.plugin.managers.structure.component.state.options}:void 0,durationInMs:n?.durationInMs}}async setSnapshot(r){if(await this.animation.stop(),r.structureComponentManager?.options&&this.plugin.managers.structure.component._setSnapshotState(r.structureComponentManager?.options),r.behaviour&&await this.plugin.runTask(this.behaviors.setSnapshot(r.behaviour)),r.data&&await this.plugin.runTask(this.data.setSnapshot(r.data)),r.canvas3d?.props){let n=h.normalizeParams(ds,r.canvas3d.props,"children");(r.camera?.current||r.camera?.focus)&&(n.camera=void 0,n.cameraClipping=void 0,n.cameraFog=void 0),await yt.Canvas3D.SetSettings(this.plugin,{settings:n})}if(r.canvas3dContext?.props){let n=h.normalizeParams(aB.Params,r.canvas3dContext.props,"children");this.plugin.canvas3dContext?.setProps(n)}if(r.interactivity&&r.interactivity.props&&this.plugin.managers.interactivity.setProps(r.interactivity.props),r.structureFocus&&this.plugin.managers.structure.focus.setSnapshot(r.structureFocus),r.structureSelection&&this.plugin.managers.structure.selection.setSnapshot(r.structureSelection),r.animation&&this.animation.setSnapshot(r.animation),r.camera?.current?yt.Camera.Reset(this.plugin,{snapshot:r.camera.current,durationMs:r.camera.transitionStyle==="animate"?r.camera.transitionDurationInMs:void 0}):r.camera?.focus&&yt.Camera.FocusObject(this.plugin,{...r.camera.focus,durationMs:r.camera.transitionStyle==="animate"?r.camera.transitionDurationInMs:void 0}),typeof r?.onLoadMarkdownCommands=="object"&&Object.keys(r.onLoadMarkdownCommands).length>0&&this.plugin.managers.markdownExtensions.tryExecute("click",r.onLoadMarkdownCommands),r.startAnimation){this.animation.start();return}r.transition?.autoplay&&(await Pf.immediatePromise(),this.animation.play(qI,{}))}async setAnimationSnapshot(r,n){await this.animation.stopStateTransitionAnimation();let{transition:o}=r;if(!o)return;let i=Math.min(n,o.frames.length-1),a=o.frames[i]??r.data;if(a.data&&await this.plugin.runTask(this.data.setSnapshot(a.data)),a.canvas3d?.props){let A=h.normalizeParams(ds,a.canvas3d.props,"children");this.plugin.canvas3d?.setProps(A)}a.camera?.current&&yt.Camera.Reset(this.plugin,{snapshot:a.camera.current,durationMs:a.camera.transitionStyle==="animate"?a.camera.transitionDurationInMs:void 0}),!n&&typeof r?.onLoadMarkdownCommands=="object"&&Object.keys(r.onLoadMarkdownCommands).length>0&&this.plugin.managers.markdownExtensions.tryExecute("click",r.onLoadMarkdownCommands)}updateTransform(r,n,o,i){let a=r.build().to(n).update(o);return yt.State.Update(this.plugin,{state:r,tree:a,options:{canUndo:i}})}hasBehavior(r){return this.behaviors.tree.transforms.has(r.id)}updateBehavior(r,n){let o=this.behaviors.build();if(this.behaviors.tree.transforms.has(r.id))o.to(r.id).update(n);else{let i=r.createDefaultParams(void 0,this.plugin);o.to(er.getCategoryId(r)).apply(r,Wc(i,n),{ref:r.id})}return this.plugin.runTask(this.behaviors.updateTree(o))}dispose(){this.behaviors.cells.forEach(r=>{er.Behavior.is(r.obj)&&(r.obj.data.unregister?.(),r.obj.data.dispose?.())}),super.dispose(),this.data.dispose(),this.behaviors.dispose(),this.animation.dispose()}};(a=>{a.SnapshotParams={durationInMs:h.Numeric(1500,{min:100,max:15e3,step:100},{label:"Duration in ms"}),data:h.Boolean(!0),behavior:h.Boolean(!1),structureSelection:h.Boolean(!1),componentManager:h.Boolean(!0),animation:h.Boolean(!0),startAnimation:h.Boolean(!1),canvas3d:h.Boolean(!0),canvas3dContext:h.Boolean(!0),interactivity:h.Boolean(!0),camera:h.Boolean(!0),cameraTransition:h.MappedStatic("animate",{animate:h.Group({durationInMs:h.Numeric(250,{min:100,max:5e3,step:500},{label:"Duration in ms"})}),instant:h.Group({})},{options:[["animate","Animate"],["instant","Instant"]]}),image:h.Boolean(!1)},a.DefaultSnapshotParams=h.getDefaultValues(a.SnapshotParams),a.getMinFrameDuration=VA(A=>{if(!A)return 1e3/60;let{transition:s}=A;if(!s)return 1e3/60;let c=1/0;for(let l of s.frames)l.durationInMs>0&&l.durationInMs<c&&(c=l.durationInMs);return Number.isFinite(c)?c:1e3/60}),a.getStateTransitionDuration=VA(A=>{if(!A)return;let{transition:s}=A;if(!s)return;let c=0;for(let l=0;l<s.frames.length;l++){let u=s.frames[l];c+=u.durationInMs}return c}),a.getStateTransitionFrameTime=VA((A,s)=>{if(!A||s===void 0)return 0;let{transition:c}=A;if(!c)return 0;let l=0;for(let u=0;u<s&&!(c.frames.length<=u);u++){let g=c.frames[u];l+=g.durationInMs}return l});function i(A,s){let{transition:c}=A;if(!c?.frames.length)return;let l=s;c.loop&&(l%=(0,a.getStateTransitionDuration)(A)??1);let u=0;if(l<=c.frames[0].durationInMs)return 0;for(let g=0;g<c.frames.length;g++){if(u>=l)return g;let m=c.frames[g];u+=m.durationInMs}return c.frames.length-1}a.getStateTransitionFrameIndex=i})(kl||={});var kp="5.11.0",lwe=new Date(1784437138178);var NV=class{constructor(){this.queue=[]}run(t){this.queue.length<2?this.queue.push(t):this.queue[this.queue.length-1]=t,this.queue.length===1&&this.next()}async next(){for(;this.queue.length>0;)try{let t=this.queue[0];await t()}catch(t){console.error("Error in SingleTaskQueue execution:",t)}finally{this.queue.shift()}}};var Hp=class e extends Ec{constructor(r){super({current:void 0,entries:xI(),isPlaying:!1,nextSnapshotDelayInMs:e.DefaultNextSnapshotDelayInMs});this.plugin=r;this.entryMap=new Map;this.defaultSnapshotId=void 0;this.events={changed:this.ev(),opened:this.ev()};this.animationFrameQueue=new NV;this.timeoutHandle=void 0;this.next=async()=>{this.timeoutHandle=void 0;let r=this.getNextId(this.state.current,1);if(!r||r===this.state.current){this.stop();return}let n=this.setCurrent(r);await this.plugin.state.setSnapshot(n);let o=typeof n.durationInMs<"u"?n.durationInMs:this.state.nextSnapshotDelayInMs;this.state.isPlaying&&(this.timeoutHandle=setTimeout(this.next,o))}}static{this.DefaultNextSnapshotDelayInMs=1500}updateState(r){return"current"in r&&!("currentAnimationTimeMs"in r)?super.updateState({...r,currentAnimationTimeMs:0}):super.updateState(r)}get current(){let r=this.state.current;return this.state.entries.find(n=>n.snapshot.id===r)}getIndex(r){return this.state.entries.indexOf(r)}getEntry(r){if(r)return this.entryMap.get(r)}remove(r){let n=this.entryMap.get(r);n&&(n?.image&&this.plugin.managers.asset.delete(n.image),this.entryMap.delete(r),this.updateState({current:this.state.current===r?void 0:this.state.current,entries:this.state.entries.delete(this.getIndex(n))}),this.events.changed.next(void 0))}add(r){this.entryMap.set(r.snapshot.id,r),this.updateState({current:r.snapshot.id,entries:this.state.entries.push(r)}),this.events.changed.next(void 0)}replace(r,n,o){let i=this.getEntry(r);if(!i)return;this.defaultSnapshotId=void 0,i?.image&&this.plugin.managers.asset.delete(i.image);let a=this.getIndex(i),A=e.Entry(n,{key:o?.key??i.key,name:o?.name??i.name,description:o?.description??i.description,descriptionFormat:o?.descriptionFormat??i.descriptionFormat,image:o?.image});this.entryMap.set(n.id,A),this.updateState({current:A.snapshot.id,entries:this.state.entries.set(a,A)}),this.events.changed.next(void 0)}move(r,n){let o=this.state.entries.size;if(o<2)return;let i=this.getEntry(r);if(!i)return;let a=this.getIndex(i),A=(a+n)%o;A<0&&(A+=o);let s=this.state.entries.get(A),c=this.state.entries.asMutable();c.set(A,i),c.set(a,s),this.updateState({current:i.snapshot.id,entries:c.asImmutable()}),this.events.changed.next(void 0)}update(r,n){let o=this.getIndex(r);if(o<0)return;let i=this.state.entries.set(o,{...r,key:n.key?.trim()||void 0,name:n.name?.trim()||void 0,description:n.description?.trim()||void 0,descriptionFormat:n.descriptionFormat});this.updateState({entries:i}),this.entryMap.set(r.snapshot.id,this.state.entries.get(o)),this.events.changed.next(void 0)}clear(){this.state.entries.size!==0&&(this.entryMap.forEach(r=>{r?.image&&this.plugin.managers.asset.delete(r.image)}),this.entryMap.clear(),this.updateState({current:void 0,entries:xI()}),this.events.changed.next(void 0))}applyKey(r){let n=this.state.entries.find(o=>o.key===r);n&&(this.updateState({current:n.snapshot.id}),this.events.changed.next(void 0),this.plugin.state.setSnapshot(n.snapshot))}setCurrent(r){let n=this.getEntry(r);return n&&(this.updateState({current:r}),this.events.changed.next(void 0)),n&&n.snapshot}setSnapshotAnimationFrame(r,n=!1){let o=this.getEntry(this.state.current);if(!o)return;let i=kl.getStateTransitionFrameIndex(o.snapshot,r)??0;return this.updateState({currentAnimationTimeMs:r})&&this.events.changed.next(void 0),n&&this.animationFrameQueue.run(()=>this.plugin.state.setAnimationSnapshot(o.snapshot,i??0)),i}getNextId(r,n){let o=this.state.entries.size;if(!r){if(o===0)return;let A=n===-1?o-1:0;return this.state.entries.get(A).snapshot.id}let i=this.getEntry(r);if(!i)return;let a=this.getIndex(i);if(!(a<0))return a=(a+n)%o,a<0&&(a+=o),this.state.entries.get(a).snapshot.id}applyNext(r){let n=this.getNextId(this.state.current,r);if(n){let o=this.setCurrent(n);if(o)return this.plugin.state.setSnapshot(o)}}async setStateSnapshot(r){this.clear();let n=xI().asMutable();for(let A of r.entries)this.entryMap.set(A.snapshot.id,A),n.push(A);let o=r.current?r.current:r.entries.length>0?r.entries[0].snapshot.id:void 0;if(this.updateState({current:o,entries:n.asImmutable(),isPlaying:!1,nextSnapshotDelayInMs:r.playback?r.playback.nextSnapshotDelayInMs:e.DefaultNextSnapshotDelayInMs}),this.events.changed.next(void 0),!o)return;let i=this.getEntry(o),a=i&&i.snapshot;if(a)return await this.plugin.state.setSnapshot(a),r.playback?.isPlaying&&this.play({delayFirst:!0}),a}async syncCurrent(r){let n=this.state.entries.size===0,o=this.state.entries.size===1&&this.state.current&&(!this.defaultSnapshotId||this.state.current===this.defaultSnapshotId);if(!n&&!o)return;let i=this.plugin.state.getSnapshot(r?.params),a=r?.params?.image??this.plugin.state.snapshotParams.value.image?await e.getCanvasImageAsset(this.plugin,`${i.id}-image.png`):void 0;if(n)this.add(e.Entry(i,{name:r?.name,description:r?.description,descriptionFormat:r?.descriptionFormat,image:a}));else if(o){let A=this.getEntry(this.state.current);A?.image&&this.plugin.managers.asset.delete(A.image),this.replace(this.state.current,i,{image:a})}this.defaultSnapshotId=i.id}async getStateSnapshot(r){await this.syncCurrent(r);let n=this.state.entries.valueSeq().toArray();for(let o=0;o<n.length;o++)n[o]._transientData&&(n[o]={...n[o]},delete n[o]._transientData);return{timestamp:+new Date,version:kp,name:r&&r.name,description:r&&r.description,current:this.state.current,playback:{isPlaying:!!(r&&r.playOnLoad),nextSnapshotDelayInMs:this.state.nextSnapshotDelayInMs},entries:n}}async serialize(r){let n=JSON.stringify(await this.getStateSnapshot({params:r?.params}),null,2);if(!r?.type||r.type==="json"||r.type==="molj")return new Blob([n],{type:"application/json;charset=utf-8"});{let o=new Uint8Array(Xy(n));nI(o,0,n);let i={"state.json":o},a=[];for(let{asset:s,file:c}of this.plugin.managers.asset.assets)a.push([s.id,s]),i[`assets/${s.id}`]=new Uint8Array(await c.arrayBuffer());if(a.length>0){let s=JSON.stringify(a,null,2),c=new Uint8Array(Xy(s));nI(c,0,s),i["assets.json"]=c}let A=await this.plugin.runTask(sN(i));return new Blob([A],{type:"application/zip"})}}async open(r){try{let n=r.name.toLowerCase();if(n.endsWith("json")||n.endsWith("molj")){let o=await this.plugin.runTask(sI(r,"string")),i=JSON.parse(am.toString(o));e.isStateSnapshot(i)?await this.setStateSnapshot(i):e.isStateSnapshot(i.data)?await this.setStateSnapshot(i.data):await this.plugin.state.setSnapshot(i)}else{let o=await this.plugin.runTask(sI(r,"zip")),i=Object.create(null);Bi(o,(s,c)=>{if(c==="state.json"||c==="assets.json")return;let l=c.substring(c.indexOf("/")+1);i[l]=s});let a=new File([o["state.json"]],"state.json"),A=await this.plugin.runTask(sI(a,"json"));if(o["assets.json"]){let s=new File([o["assets.json"]],"assets.json"),c=await this.plugin.runTask(sI(s,"json"));for(let[l,u]of c)this.plugin.managers.asset.set(u,new File([i[l]],u.name))}await this.setStateSnapshot(A)}this.events.opened.next(void 0)}catch(n){console.error(n),this.plugin.log.error("Error reading state")}}async startPlayback(){let{current:r}=this;if(r)if(r.snapshot.transition){let n=this.setCurrent(this.state.current);await this.plugin.state.setSnapshot(n);let o=typeof n.durationInMs<"u"?n.durationInMs:this.state.nextSnapshotDelayInMs;this.state.isPlaying&&(this.timeoutHandle=setTimeout(this.next,o))}else return this.next()}async play(r){if(this.state.isPlaying&&!r?.delayFirst)if(r?.restart)await this.stop();else return;if(this.updateState({isPlaying:!0}),r?.delayFirst){let n=this.getEntry(this.state.current);if(!n){this.next();return}this.events.changed.next(void 0);let o=n.snapshot,i=typeof o.durationInMs<"u"?o.durationInMs:this.state.nextSnapshotDelayInMs;this.timeoutHandle=setTimeout(this.next,i)}else this.startPlayback()}async stop(){await this.plugin.managers.animation.stop(),this.updateState({isPlaying:!1}),typeof this.timeoutHandle<"u"&&clearTimeout(this.timeoutHandle),this.timeoutHandle=void 0,this.events.changed.next(void 0)}async togglePlay(){this.state.isPlaying?(await this.stop(),this.plugin.managers.markdownExtensions.audio.pause()):await this.play()}dispose(){super.dispose(),this.entryMap.clear()}};(n=>{function e(o,i){return{timestamp:+new Date,snapshot:o,...i}}n.Entry=e;function t(o){let i=o;return!!i&&!!i.timestamp&&!!i.entries}n.isStateSnapshot=t;async function r(o,i){let a=ve.create("Render Screenshot",async A=>{if(!o.helpers.viewportScreenshot)return;let s=await o.helpers.viewportScreenshot.getPreview(A,512);if(!s)return;let c=await gU(s.canvas,"png"),l=new File([c],i),u={kind:"file",id:Hn.create22(),name:i};return o.managers.asset.set(u,l),u});return o.runTask(a)}n.getCanvasImageAsset=r})(Hp||={});function JZ(e){return e.toISOString().replace(/T/," ").replace(/\..+/,"")}function MV(){let e=new Date,t=e.getFullYear(),r=e.getMonth()+1,n=e.getDate(),o=e.getHours(),i=e.getMinutes(),a=e.getSeconds();return t+"-"+r+"-"+n+"-"+o+"-"+i+"-"+a}function ZIt(e){window.open(e,"_blank")||(window.location.href=e)}function uwe(e){try{e.dispatchEvent(new MouseEvent("click"))}catch{let r=document.createEvent("MouseEvents");r.initMouseEvent("click",!0,!0,window,0,0,0,80,20,!1,!1,!1,!1,0,null),e.dispatchEvent(r)}}function uB(e,t="download"){if(e)if("download"in HTMLAnchorElement.prototype){let r=document.createElement("a");r.download=t,r.rel="noopener",typeof e=="string"?(r.href=e,uwe(r)):(r.href=URL.createObjectURL(e),setTimeout(()=>URL.revokeObjectURL(r.href),4e4),setTimeout(()=>uwe(r)))}else if(typeof navigator<"u"&&navigator.msSaveOrOpenBlob)navigator.msSaveOrOpenBlob(e,t);else{let r=window.navigator.userAgent,n=/Safari/i.test(r),o=/CriOS\/[\d]+/.test(r),i=a=>{ZIt(o?a:a.replace(/^data:[^;]*;/,"data:attachment/file;"))};if((n||o)&&FileReader)if(e instanceof Blob){let a=new FileReader;a.onloadend=()=>i(a.result),a.readAsDataURL(e)}else i(e);else{let a=URL.createObjectURL(typeof e=="string"?new Blob([e]):e);location.href=a,setTimeout(()=>URL.revokeObjectURL(a),4e4)}}}function oE(e,t){return`${e}${e[e.length-1]==="/"||t[0]==="/"?"":"/"}${t}`}function qIt(e){gwe(e),mwe(e),dwe(e),pwe(e),fwe(e),Bwe(e),Iwe(e),Cwe(e),hwe(e),ywe(e)}function gwe(e){e.state.events.object.created.subscribe(t=>{te.isBehavior(t.obj)&&t.obj.data.register(t.ref)}),e.state.events.object.removed.subscribe(t=>{te.isBehavior(t.obj)&&(t.obj.data.unregister?.(),t.obj.data.dispose?.())}),e.state.events.object.updated.subscribe(t=>{t.action==="recreate"&&(t.oldObj&&te.isBehavior(t.oldObj)&&(t.oldObj.data.unregister?.(),t.oldObj.data.dispose?.()),t.obj&&te.isBehavior(t.obj)&&t.obj.data.register(t.ref))})}function mwe(e){yt.State.SetCurrentObject.subscribe(e,({state:t,ref:r})=>t.setCurrent(r))}function dwe(e){yt.State.Update.subscribe(e,({state:t,tree:r,options:n})=>e.runTask(t.updateTree(r,n)))}function pwe(e){yt.State.ApplyAction.subscribe(e,({state:t,action:r,ref:n})=>e.runTask(t.applyAction(r.action,r.params,n)))}function fwe(e){function t(r,n){let o=r.build().delete(n);return e.runTask(r.updateTree(o))}yt.State.RemoveObject.subscribe(e,({state:r,ref:n,removeParentGhosts:o})=>{if(o){let i=r.tree,a=i.transforms.get(n);if(a.parent===n)return t(r,n);for(;;){let A=i.children.get(a.parent);if(a.parent===a.ref||A.size>1)return t(r,a.ref);let s=i.transforms.get(a.parent);if(!s.state.isGhost)return t(r,a.ref);a=s}}else return t(r,n)})}function Bwe(e){yt.State.ToggleExpanded.subscribe(e,({state:t,ref:r})=>t.updateCellState(r,({isCollapsed:n})=>({isCollapsed:!n})))}function Iwe(e){yt.State.ToggleVisibility.subscribe(e,({state:t,ref:r})=>Tm(t,r,!t.cells.get(r).state.isHidden))}function Tm(e,t,r){Ho.doPreOrder(e.tree,e.transforms.get(t),{state:e,value:r},$It)}function $It(e,t,r){r.state.updateCellState(e.ref,{isHidden:r.value})}function Cwe(e){yt.Interactivity.Object.Highlight.subscribe(e,({state:t,ref:r})=>{if(!e.canvas3d||e.isBusy)return;e.managers.interactivity.lociHighlights.clearHighlights();let n=typeof r=="string"?[r]:r;for(let o of n){let i=t.cells.get(o);if(i){if(te.Molecule.Structure.is(i.obj))e.managers.interactivity.lociHighlights.highlight({loci:Ye.Loci(i.obj.data)},!1);else if(i&&te.isRepresentation3D(i.obj)){let{repr:a}=i.obj.data;for(let A of a.getAllLoci())e.managers.interactivity.lociHighlights.highlight({loci:A,repr:a},!1)}else if(te.Molecule.Structure.Selections.is(i.obj))for(let a of i.obj.data)e.managers.interactivity.lociHighlights.highlight({loci:a.loci},!1)}}})}function hwe(e){yt.Interactivity.ClearHighlights.subscribe(e,()=>{e.managers.interactivity.lociHighlights.clearHighlights()})}function ywe(e){e.config.set(jt.State.CurrentServer,e.config.get(jt.State.DefaultServer)),yt.State.Snapshots.Clear.subscribe(e,()=>{e.managers.snapshot.clear()}),yt.State.Snapshots.Remove.subscribe(e,({id:t})=>{e.managers.snapshot.remove(t)}),yt.State.Snapshots.Add.subscribe(e,async({key:t,name:r,description:n,descriptionFormat:o,params:i})=>{let a=e.state.getSnapshot(i),A=i?.image??e.state.snapshotParams.value.image?await Hp.getCanvasImageAsset(e,`${a.id}-image.png`):void 0,s=Hp.Entry(a,{key:t,name:r,description:n,descriptionFormat:o,image:A});e.managers.snapshot.add(s)}),yt.State.Snapshots.Replace.subscribe(e,async({id:t,params:r})=>{let n=e.state.getSnapshot(r),o=r?.image??e.state.snapshotParams.value.image?await Hp.getCanvasImageAsset(e,`${n.id}-image.png`):void 0;e.managers.snapshot.replace(t,e.state.getSnapshot(r),{image:o})}),yt.State.Snapshots.Move.subscribe(e,({id:t,dir:r})=>{e.managers.snapshot.move(t,r)}),yt.State.Snapshots.Apply.subscribe(e,({id:t})=>{let r=e.managers.snapshot.setCurrent(t);if(r)return e.state.setSnapshot(r)}),yt.State.Snapshots.Upload.subscribe(e,async({name:t,description:r,playOnLoad:n,serverUrl:o,params:i})=>fetch(oE(o,`set?name=${encodeURIComponent(t||"")}&description=${encodeURIComponent(r||"")}`),{method:"POST",mode:"cors",referrer:"no-referrer",headers:{"Content-Type":"application/json; charset=utf-8"},body:JSON.stringify(await e.managers.snapshot.getStateSnapshot({name:t,description:r,playOnLoad:n}))})),yt.State.Snapshots.Fetch.subscribe(e,async({url:t})=>{let r=await e.runTask(e.fetch({url:t,type:"json"}));await e.managers.snapshot.setStateSnapshot(r.data)}),yt.State.Snapshots.DownloadToFile.subscribe(e,async({name:t,type:r,params:n})=>{let o=`mol-star_state_${t||MV()}.${r==="json"?"molj":"molx"}`,i=await e.managers.snapshot.serialize({type:r,params:n});uB(i,`${o}`)}),yt.State.Snapshots.OpenFile.subscribe(e,({file:t})=>e.managers.snapshot.open(t)),yt.State.Snapshots.OpenUrl.subscribe(e,async({url:t,type:r})=>{let n=await e.runTask(e.fetch({url:t,type:"binary"}));return e.managers.snapshot.open(new File([n],`state.${r}`))})}var jZ={};ki(jZ,{SyncRepresentationToCanvas:()=>Qwe,SyncStructureRepresentation3DState:()=>Ewe,UpdateRepresentationVisibility:()=>bwe,registerDefault:()=>eCt});function eCt(e){Qwe(e),Ewe(e),bwe(e)}function Qwe(e){let t=e.state.data.events;t.object.created.subscribe(r=>{te.isRepresentation3D(r.obj)&&(KZ(r.state.cells.get(r.ref),r.obj.data.repr),r.obj.data.repr.setState({syncManually:!0}),e.canvas3d?.add(r.obj.data.repr))}),t.object.updated.subscribe(r=>{r.oldObj&&te.isRepresentation3D(r.oldObj)&&(e.canvas3d?.remove(r.oldObj.data.repr),r.oldObj.data.repr.destroy()),te.isRepresentation3D(r.obj)&&(KZ(r.state.cells.get(r.ref),r.obj.data.repr),r.action==="recreate"&&r.obj.data.repr.setState({syncManually:!0}),e.canvas3d?.add(r.obj.data.repr))}),t.object.removed.subscribe(r=>{te.isRepresentation3D(r.obj)&&(e.canvas3d?.remove(r.obj.data.repr),r.obj.data.repr.destroy())})}function Ewe(e){let t=e.state.data.events;t.object.created.subscribe(r=>{if(!te.Molecule.Structure.Representation3DState.is(r.obj))return;let n=r.obj.data;n.repr.setState(n.state),e.canvas3d?.update(n.repr)}),t.object.updated.subscribe(r=>{if(!te.Molecule.Structure.Representation3DState.is(r.obj))return;let n=r.obj.data;n.repr.setState(n.state),e.canvas3d?.update(n.repr)}),t.object.removed.subscribe(r=>{if(!te.Molecule.Structure.Representation3DState.is(r.obj))return;let n=r.obj.data;n.repr.setState(n.initialState),e.canvas3d?.update(n.repr)})}function bwe(e){e.state.data.events.cell.stateUpdated.subscribe(t=>{let r=t.state.cells.get(t.ref);te.isRepresentation3D(r.obj)&&KZ(r,r.obj.data.repr)&&e.canvas3d?.syncVisibility()})}function KZ(e,t){return t.state.visible===!!e.state.isHidden?(t.setState({visible:!e.state.isHidden}),!0):!1}var WZ={};ki(WZ,{Focus:()=>Dwe,FocusObject:()=>vwe,OrientAxes:()=>Fwe,Reset:()=>xwe,ResetAxes:()=>wwe,SetSnapshot:()=>Swe,registerDefault:()=>tCt});function tCt(e){xwe(e),Dwe(e),vwe(e),Swe(e),Fwe(e),wwe(e)}function xwe(e){yt.Camera.Reset.subscribe(e,t=>{e.managers.camera.reset(t?.snapshot,t?.durationMs)})}function Swe(e){yt.Camera.SetSnapshot.subscribe(e,({snapshot:t,durationMs:r})=>{e.managers.camera.setSnapshot(t,r)})}function Dwe(e){yt.Camera.Focus.subscribe(e,({center:t,radius:r,durationMs:n})=>{e.managers.camera.focusSphere({center:t,radius:r},{durationMs:n}),e.events.canvas3d.settingsUpdated.next(void 0)})}function vwe(e){yt.Camera.FocusObject.subscribe(e,async t=>{e.managers.camera.focusObject(t)})}function Fwe(e){yt.Camera.OrientAxes.subscribe(e,({structures:t,durationMs:r})=>{e.managers.camera.orientAxes(t,r)})}function wwe(e){yt.Camera.ResetAxes.subscribe(e,({durationMs:t})=>{e.managers.camera.resetAxes(t)})}var XZ={};ki(XZ,{Canvas3DSetSettings:()=>Rwe,registerDefault:()=>rCt});function rCt(e){Rwe(e)}function Rwe(e){yt.Canvas3D.ResetSettings.subscribe(e,()=>{e.canvas3d?.setProps(Sd),e.events.canvas3d.settingsUpdated.next(void 0)}),yt.Canvas3D.SetSettings.subscribe(e,t=>{e.canvas3d&&(e.canvas3d?.setProps(t.settings),e.events.canvas3d.settingsUpdated.next(void 0))})}var qZ={};ki(qZ,{DefaultFocusLociBindings:()=>Lwe,DefaultLociLabelProvider:()=>ACt,DefaultSelectLociBindings:()=>Uwe,FocusLoci:()=>nx,HighlightLoci:()=>iCt,SelectLoci:()=>ZZ});var $I=ya,tC=as,eC=Gt.Trigger,nCt={hoverHighlightOnly:Gt([eC($I.Flag.None)],"Highlight","Hover element using ${triggers}"),hoverHighlightOnlyExtend:Gt([eC($I.Flag.None,tC.create({shift:!0}))],"Extend highlight","From selected to hovered element along polymer using ${triggers}")},oCt={bindings:h.Value(nCt,{isHidden:!0}),ignore:h.Value([],{isHidden:!0}),preferAtoms:h.Boolean(!1,{description:"Always prefer atoms over bonds"}),mark:h.Boolean(!0)},iCt=er.create({name:"representation-highlight-loci",category:"interaction",ctor:class extends er.Handler{constructor(){super(...arguments);this.lociMarkProvider=(t,r)=>{!this.ctx.canvas3d||!this.params.mark||this.ctx.canvas3d.mark(t,r)}}getLoci(t){return this.params.preferAtoms&&Et.isLoci(t)&&t.bonds.length===2?Et.toFirstStructureElementLoci(t):t}register(){this.subscribeObservable(this.ctx.behaviors.interaction.hover,({current:t,buttons:r,modifiers:n})=>{if(!this.ctx.canvas3d||this.ctx.isBusy)return;let o=this.getLoci(t.loci);if(this.params.ignore.includes(o.kind)){this.ctx.managers.interactivity.lociHighlights.highlightOnly({repr:t.repr,loci:Ir});return}let i=!1;Gt.match(this.params.bindings.hoverHighlightOnly,r,n)&&(this.ctx.managers.interactivity.lociHighlights.highlightOnly({loci:o}),i=!0),Gt.match(this.params.bindings.hoverHighlightOnlyExtend,r,n)&&(this.ctx.managers.interactivity.lociHighlights.highlightOnlyExtend({loci:o}),i=!0),i||this.ctx.managers.interactivity.lociHighlights.highlightOnly({repr:t.repr,loci:Ir})}),this.ctx.managers.interactivity.lociHighlights.addProvider(this.lociMarkProvider)}unregister(){this.ctx.managers.interactivity.lociHighlights.removeProvider(this.lociMarkProvider)}},params:()=>oCt,display:{name:"Highlight Loci on Canvas"}}),Uwe={clickSelect:Gt.Empty,clickSelectOnly:Gt.Empty,clickToggle:Gt([eC($I.Flag.Primary,tC.create())],"Toggle selection","Click on element using ${triggers}"),clickToggleExtend:Gt([eC($I.Flag.Primary,tC.create({shift:!0}))],"Toggle extended selection","Click on element using ${triggers} to extend selection along polymer"),clickDeselect:Gt.Empty,clickDeselectAllOnEmpty:Gt([eC($I.Flag.Primary,tC.create())],"Deselect all","Click on nothing using ${triggers}")},aCt={bindings:h.Value(Uwe,{isHidden:!0}),ignore:h.Value([],{isHidden:!0}),preferAtoms:h.Boolean(!1,{description:"Always prefer atoms over bonds"}),mark:h.Boolean(!0)},ZZ=er.create({name:"representation-select-loci",category:"interaction",ctor:class extends er.Handler{constructor(t,r){super(t,r);this.lociMarkProvider=(t,r)=>{!this.ctx.canvas3d||!this.params.mark||this.ctx.canvas3d.mark({loci:t.loci},r)};this.spine=new P0.Impl(t.state.data.cells)}getLoci(t){return this.params.preferAtoms&&Et.isLoci(t)&&t.bonds.length===2?Et.toFirstStructureElementLoci(t):t}applySelectMark(t,r){let n=this.ctx.state.data.cells.get(t);if(n&&te.isRepresentation3D(n.obj)){this.spine.current=n;let o=this.spine.getRootOfType(te.Molecule.Structure);if(o){r&&this.lociMarkProvider({loci:Ye.Loci(o.data)},8);let i=this.ctx.managers.structure.selection.getLoci(o.data);this.lociMarkProvider({loci:i},4)}}}register(){let t=o=>pr.isEmpty(o),r=o=>!pr.isEmpty(o),n=[["clickSelect",o=>this.ctx.managers.interactivity.lociSelects.select(o),r],["clickToggle",o=>this.ctx.managers.interactivity.lociSelects.toggle(o),r],["clickToggleExtend",o=>this.ctx.managers.interactivity.lociSelects.toggleExtend(o),r],["clickSelectOnly",o=>this.ctx.managers.interactivity.lociSelects.selectOnly(o),r],["clickDeselect",o=>this.ctx.managers.interactivity.lociSelects.deselect(o),r],["clickDeselectAllOnEmpty",()=>this.ctx.managers.interactivity.lociSelects.deselectAll(),t]];n.sort((o,i)=>{let a=this.params.bindings[o[0]],A=this.params.bindings[i[0]],s=a.triggers.length===0?0:Es(a.triggers.map(l=>tC.size(l.modifiers)));return(A.triggers.length===0?0:Es(A.triggers.map(l=>tC.size(l.modifiers))))-s}),this.subscribeObservable(this.ctx.behaviors.interaction.click,({current:o,button:i,modifiers:a})=>{if(!this.ctx.canvas3d||this.ctx.isBusy||!this.ctx.selectionMode)return;let A=this.getLoci(o.loci);if(!this.params.ignore.includes(A.kind)){for(let[s,c,l]of n)if(Gt.match(this.params.bindings[s],i,a)&&(!l||l(A))){c({repr:o.repr,loci:A});break}}}),this.ctx.managers.interactivity.lociSelects.addProvider(this.lociMarkProvider),this.subscribeObservable(this.ctx.state.events.object.created,({ref:o})=>this.applySelectMark(o)),this.subscribeObservable(this.ctx.state.events.object.updated,({ref:o,obj:i,oldObj:a,oldData:A,action:s})=>{let c=this.ctx.state.data.cells.get(o);if(c&&te.Molecule.Structure.is(c.obj)){let l=i.data,u=s==="recreate"?a?.data:s==="in-place"?A:void 0;if(u&&Ye.areEquivalent(l,u)&&Ye.areHierarchiesEqual(l,u))return;let g=this.ctx.state.data.select(fr.children(o).ofType(te.Molecule.Structure.Representation3D));for(let m of g)this.applySelectMark(m.transform.ref,!0)}})}unregister(){this.ctx.managers.interactivity.lociSelects.removeProvider(this.lociMarkProvider)}},params:()=>aCt,display:{name:"Select Loci on Canvas"}}),ACt=er.create({name:"default-loci-label-provider",category:"interaction",ctor:class{constructor(e){this.ctx=e;this.f={label:e=>{let t=[];if(W.Loci.is(e)){let r=new Set;for(let{unit:n}of e.elements){let o=W.Location.create(e.structure,n,n.elements[0]),i=Ke.entity.pdbx_description(o).join(", ");r.add(i)}r.size===1&&r.forEach(n=>t.push(n))}return t.push(Um(e)),t.filter(r=>!!r).join("</br>")},group:e=>e.toString().replace(/Model [0-9]+/g,"Models"),priority:100}}register(){this.ctx.managers.lociLabels.addProvider(this.f)}unregister(){this.ctx.managers.lociLabels.removeProvider(this.f)}},display:{name:"Provide Default Loci Label"}}),Lwe={clickFocus:Gt([eC($I.Flag.Primary,tC.create()),eC($I.Flag.Trigger)],"Representation Focus","Click element using ${triggers}"),clickFocusAdd:Gt([eC($I.Flag.Primary,tC.create({control:!0})),eC($I.Flag.Primary,tC.create({meta:!0}))],"Representation Focus Add","Click element using ${triggers}"),clickFocusExtend:Gt([eC($I.Flag.Primary,tC.create({shift:!0}))],"Representation Focus Extend","Click on element using ${triggers}"),clickFocusSelectMode:Gt([],"Representation Focus (Selection Mode)","Click element using ${triggers}"),clickFocusAddSelectMode:Gt([],"Representation Focus Add (Selection Mode)","Click element using ${triggers}"),clickFocusExtendSelectMode:Gt([],"Representation Focus Extend (Selection Mode)","Click on element using ${triggers}")},sCt={bindings:h.Value(Lwe,{isHidden:!0})},nx=er.create({name:"representation-focus-loci",category:"interaction",ctor:class extends er.Handler{register(){this.subscribeObservable(this.ctx.behaviors.interaction.click,({current:e,button:t,modifiers:r})=>{let{clickFocus:n,clickFocusAdd:o,clickFocusExtend:i,clickFocusSelectMode:a,clickFocusAddSelectMode:A,clickFocusExtendSelectMode:s}=this.params.bindings,c=this.ctx.selectionMode?a:n,l=Gt.match(c,t,r),u=this.ctx.selectionMode?A:o,g=Gt.match(u,t,r),m=this.ctx.selectionMode?s:i,p=Gt.match(m,t,r);if(!l&&!g&&!p)return;let d=e.repr?.props?.snapshotKey?.trim()??"";if(!this.ctx.selectionMode&&l&&d){this.ctx.managers.snapshot.applyKey(d);return}let f=e.repr?.props?.markdownCommands;if(!this.ctx.selectionMode&&l&&typeof f=="object"&&Object.keys(f).length>0){this.ctx.managers.markdownExtensions.tryExecute("click",f);return}let{granularity:I}=this.ctx.managers.interactivity.props;if(I!=="residue"&&I!=="element")return;let C=pr.normalize(e.loci,"residue"),y=this.ctx.managers.structure.focus.current;if(y&&pr.areEqual(y.loci,C))this.ctx.managers.structure.focus.clear();else if(l)this.ctx.managers.structure.focus.setFromLoci(C);else{p?this.ctx.managers.structure.focus.extendFromLoci(C):this.ctx.managers.structure.focus.toggleFromLoci(C);let Q=this.ctx.managers.structure.focus.current?.loci;Q&&this.ctx.managers.camera.focusLoci(Q)}})}},params:()=>sCt,display:{name:"Representation Focus Loci on Canvas"}});var eq={};ki(eq,{CameraAxisHelper:()=>uCt,CameraControls:()=>mCt,DefaultClickResetCameraOnEmpty:()=>kV,DefaultClickResetCameraOnEmptySelectMode:()=>HV,DefaultFocusLociBindings:()=>Twe,FocusLoci:()=>lCt,NoPrimaryFocusLociBindings:()=>$Z});var pu=ya,Lg=as,fu=Gt.Trigger,EU=Gt.TriggerKey,kV=Gt([fu(pu.Flag.Primary,Lg.create()),fu(pu.Flag.Secondary,Lg.create()),fu(pu.Flag.Primary,Lg.create({control:!0})),fu(pu.Flag.Trigger)],"Reset camera focus","Click on nothing using ${triggers}"),HV=Gt([fu(pu.Flag.Secondary,Lg.create()),fu(pu.Flag.Primary,Lg.create({control:!0}))],"Reset camera focus (Selection Mode)","Click on nothing using ${triggers}"),Twe={clickCenterFocus:Gt([fu(pu.Flag.Primary,Lg.create()),fu(pu.Flag.Secondary,Lg.create()),fu(pu.Flag.Primary,Lg.create({control:!0})),fu(pu.Flag.Trigger)],"Camera center and focus","Click element using ${triggers}"),clickCenterFocusSelectMode:Gt([fu(pu.Flag.Secondary,Lg.create()),fu(pu.Flag.Primary,Lg.create({control:!0}))],"Camera center and focus (Selection Mode)","Click element using ${triggers}"),clickResetCameraOnEmpty:kV,clickResetCameraOnEmptySelectMode:HV},$Z={clickCenterFocus:Gt([fu(pu.Flag.Secondary,Lg.create()),fu(pu.Flag.Primary,Lg.create({control:!0})),fu(pu.Flag.Trigger)],"Camera center and focus","Click element using ${triggers}"),clickCenterFocusSelectMode:Gt([fu(pu.Flag.Secondary,Lg.create()),fu(pu.Flag.Primary,Lg.create({control:!0}))],"Camera center and focus (Selection Mode)","Click element using ${triggers}"),clickResetCameraOnEmpty:kV,clickResetCameraOnEmptySelectMode:HV},cCt={minRadius:h.Numeric(8,{min:1,max:50,step:1}),extraRadius:h.Numeric(4,{min:1,max:50,step:1},{description:"Value added to the bounding-sphere radius of the Loci"}),durationMs:h.Numeric(250,{min:0,max:1e3,step:1},{description:"Camera transition duration"}),bindings:h.Value(Twe,{isHidden:!0})},lCt=er.create({name:"camera-focus-loci",category:"interaction",ctor:class extends er.Handler{register(){this.subscribeObservable(this.ctx.behaviors.interaction.click,({current:e,button:t,modifiers:r})=>{if(!this.ctx.canvas3d)return;let n=this.ctx.selectionMode?this.params.bindings.clickCenterFocusSelectMode:this.params.bindings.clickCenterFocus,o=this.ctx.selectionMode?this.params.bindings.clickResetCameraOnEmptySelectMode??HV:this.params.bindings.clickResetCameraOnEmpty??kV;if(pr.isEmpty(e.loci)&&Gt.match(o,t,r)){yt.Camera.Reset(this.ctx,{});return}let i=e.repr?.props?.snapshotKey?.trim()??"",a=e.repr?.props?.markdownCommands;if(!(i||typeof a=="object"&&Object.keys(a).length>0)&&Gt.match(n,t,r)){let A=pr.normalize(e.loci,this.ctx.managers.interactivity.props.granularity);this.ctx.managers.camera.focusLoci(A,this.params)}})}},params:()=>cCt,display:{name:"Camera Focus Loci on Canvas"}}),uCt=er.create({name:"camera-axis-helper",category:"interaction",ctor:class extends er.Handler{register(){let e=0,t=0;this.subscribeObservable(this.ctx.behaviors.interaction.click,({current:r})=>{if(!this.ctx.canvas3d||!OH(r.loci))return;let n=r.loci.elements[0].groupId;if(n===0){e=0,t=0;return}let{camera:o}=this.ctx.canvas3d,i,a;if(n>=1&&n<=3){e=0,t=0;let A=B.sub(B(),o.target,o.position),s=B.cross(B(),A,o.up);a=B(),a[n-1]=1,i=B.cross(B(),a,s),B.magnitude(i)===0&&(i=A)}else e===n?t=(t+1)%2:(e=n,t=0),n===4?(a=t?B.unitX:B.unitY,i=B.negUnitZ):n===5?(a=t?B.unitX:B.unitZ,i=B.negUnitY):(a=t?B.unitY:B.unitZ,i=B.negUnitX);this.ctx.canvas3d.requestCameraReset({snapshot:(A,s)=>s.getInvariantFocus(A.boundingSphereVisible.center,A.boundingSphereVisible.radius,a,i)})})}},params:()=>({}),display:{name:"Camera Axis Helper"}}),Pwe={keySpinAnimation:Gt([EU("I")],"Spin Animation","Press ${triggers}"),keyRockAnimation:Gt([EU("O")],"Rock Animation","Press ${triggers}"),keyToggleFlyMode:Gt([EU("Space",Lg.create({shift:!0}))],"Toggle Fly Mode","Press ${triggers}"),keyResetView:Gt([EU("T")],"Reset View","Press ${triggers}"),keyGlobalIllumination:Gt([EU("G")],"Global Illumination","Press ${triggers}")},gCt={bindings:h.Value(Pwe,{isHidden:!0})},mCt=er.create({name:"camera-controls",category:"interaction",ctor:class extends er.Handler{register(){this.subscribeObservable(this.ctx.behaviors.interaction.key,({code:e,key:t,modifiers:r})=>{if(!this.ctx.canvas3d)return;let n={...Pwe,...this.params.bindings},o=this.ctx.canvas3d.props.trackball,i=this.ctx.canvas3d.props.illumination;if(Gt.matchKey(n.keySpinAnimation,e,r,t)){let a=o.animate.name!=="spin"?"spin":"off";a==="off"?yt.Canvas3D.SetSettings(this.ctx,{settings:{trackball:{...o,animate:{name:a,params:{}}}}}):yt.Canvas3D.SetSettings(this.ctx,{settings:{trackball:{...o,animate:{name:a,params:{speed:.1,axis:B.create(0,-1,0)}}}}})}if(Gt.matchKey(n.keyRockAnimation,e,r,t)){let a=o.animate.name!=="rock"?"rock":"off";a==="off"?yt.Canvas3D.SetSettings(this.ctx,{settings:{trackball:{...o,animate:{name:a,params:{}}}}}):yt.Canvas3D.SetSettings(this.ctx,{settings:{trackball:{...o,animate:{name:a,params:{speed:.3,angle:10,axis:B.create(0,-1,0)}}}}})}if(Gt.matchKey(n.keyToggleFlyMode,e,r,t)){let a=!o.flyMode;yt.Canvas3D.SetSettings(this.ctx,{settings:{trackball:{...o,flyMode:a}}}),this.ctx.canvas3dContext?.canvas&&(this.ctx.canvas3dContext.canvas.style.cursor=a?"crosshair":"unset")}Gt.matchKey(n.keyResetView,e,r,t)&&yt.Camera.Reset(this.ctx,{}),Gt.matchKey(n.keyGlobalIllumination,e,r,t)&&yt.Canvas3D.SetSettings(this.ctx,{settings:{illumination:{...i,enabled:!i.enabled}}})})}},params:()=>gCt,display:{name:"Camera Controls on Canvas"}});var tq={};ki(tq,{SnapshotControls:()=>fCt});var VV=as,gF=Gt.TriggerKey,dCt={next:Gt([gF("ArrowRight",VV.create({control:!0})),gF("GamepadY")]),previous:Gt([gF("ArrowLeft",VV.create({control:!0})),gF("GamepadX")]),first:Gt([gF("ArrowUp",VV.create({control:!0}))]),last:Gt([gF("ArrowDown",VV.create({control:!0}))])},pCt={bindings:h.Value(dCt,{isHidden:!0})},fCt=er.create({name:"snapshot-controls",category:"interaction",ctor:class extends er.Handler{register(){this.subscribeObservable(this.ctx.behaviors.interaction.keyReleased,({code:e,modifiers:t,key:r})=>{if(!this.ctx.canvas3d||this.ctx.isBusy)return;let n=this.params.bindings,{snapshot:o}=this.ctx.managers;if(Gt.matchKey(n.next,e,t,r)&&o.applyNext(1),Gt.matchKey(n.previous,e,t,r)&&o.applyNext(-1),Gt.matchKey(n.first,e,t,r)){let i=o.state.entries.get(0),a=o.setCurrent(i.snapshot.id);if(a)return this.ctx.state.setSnapshot(a)}if(Gt.matchKey(n.last,e,t,r)){let i=o.state.entries.get(o.state.entries.size-1),a=o.setCurrent(i.snapshot.id);if(a)return this.ctx.state.setSnapshot(a)}})}},params:()=>pCt,display:{name:"Snapshot Controls"}});var Eq={};ki(Eq,{AccessibleSurfaceArea:()=>Jwe,BestDatabaseSequenceMapping:()=>Zwe,CrossLinkRestraint:()=>i2e,Interactions:()=>zwe,SecondaryStructure:()=>Kwe,Streamlines:()=>Q2e,StructureInfo:()=>Gwe,ValenceModel:()=>jwe});var Gwe=er.create({name:"structure-info-prop",category:"custom-props",display:{name:"Structure Info"},ctor:class extends er.Handler{get maxModelIndex(){let e=-1,t=this.ctx.state.data.select(fr.Generators.rootsOfType(te.Molecule.Model));for(let r of t){let n=r.obj?.data&&_t.Index.get(r.obj?.data).value;n!==void 0&&n>e&&(e=n)}return e}get maxStructureIndex(){let e=-1,t=this.ctx.state.data.select(fr.Generators.rootsOfType(te.Molecule.Structure));for(let r of t){let n=r.obj?.data&&Ye.Index.get(r.obj?.data).value;n!==void 0&&n>e&&(e=n)}return e}get asymIdOffset(){let e=0,t=0,r=this.ctx.state.data.select(fr.Generators.rootsOfType(te.Molecule.Model));for(let n of r){let o=n.obj?.data;if(o){let i=_t.AsymIdCount.get(o),a=_t.AsymIdOffset.get(o).value;i!==void 0&&a!==void 0&&(e=Math.max(e,a.auth+i.auth),t=Math.max(t,a.label+i.label))}}return{auth:e,label:t}}setModelMaxIndex(){let e=this.maxModelIndex,t=this.ctx.state.data.select(fr.Generators.rootsOfType(te.Molecule.Model));for(let r of t){let n=r.obj?.data;n&&_t.MaxIndex.get(n).value!==e&&_t.MaxIndex.set(n,{value:e},e)}}setStructureMaxIndex(){let e=this.maxModelIndex,t=this.ctx.state.data.select(fr.Generators.rootsOfType(te.Molecule.Structure));for(let r of t){let n=r.obj?.data;n&&Ye.MaxIndex.get(n).value!==e&&Ye.MaxIndex.set(n,{value:e},e)}}handleModel(e,t){if(_t.Index.get(e).value===void 0){let n=(t&&_t.Index.get(t).value)??this.maxModelIndex+1;_t.Index.set(e,{value:n},n)}if(_t.AsymIdOffset.get(e).value===void 0){let n=(t&&_t.AsymIdOffset.get(t).value)??{...this.asymIdOffset};_t.AsymIdOffset.set(e,{value:n},n)}}handleStructure(e,t){if(e.parent!==void 0||Ye.Index.get(e).value!==void 0)return;let n=(t&&Ye.Index.get(t).value)??this.maxStructureIndex+1;Ye.Index.set(e,{value:n},n)}handle(e,t,r){te.Molecule.Structure.is(t)?!this.ctx.state.data.tree.transforms.get(e).transformer.definition.isDecorator&&t.data.parent===void 0&&this.handleStructure(t.data,r?.data):te.Molecule.Model.is(t)&&(this.ctx.state.data.tree.transforms.get(e).transformer.definition.isDecorator||this.handleModel(t.data,r?.data))}register(){this.ctx.customModelProperties.register(_t.AsymIdOffset,!0),this.ctx.customModelProperties.register(_t.Index,!0),this.ctx.customModelProperties.register(_t.MaxIndex,!0),this.ctx.customStructureProperties.register(Ye.Index,!0),this.ctx.customStructureProperties.register(Ye.MaxIndex,!0),this.subscribeObservable(this.ctx.state.data.events.object.created,e=>{this.handle(e.ref,e.obj),this.setModelMaxIndex(),this.setStructureMaxIndex()}),this.subscribeObservable(this.ctx.state.data.events.object.updated,e=>{this.handle(e.ref,e.obj,e.oldObj)})}unregister(){this.ctx.customModelProperties.unregister(_t.AsymIdOffset.descriptor.name),this.ctx.customModelProperties.unregister(_t.Index.descriptor.name),this.ctx.customModelProperties.unregister(_t.MaxIndex.descriptor.name),this.ctx.customStructureProperties.unregister(Ye.Index.descriptor.name),this.ctx.customStructureProperties.unregister(Ye.MaxIndex.descriptor.name)}}});var gB=[-1,1.76,1.87,1.65,1.5,1.4,1.85,1.8,1.6,1.4],_V={ALA:121,ARG:265,ASN:187,ASP:187,CYS:148,GLU:214,GLN:214,GLY:97,HIS:216,ILE:195,LEU:191,LYS:230,MET:203,PHE:228,PRO:154,SER:143,THR:163,TRP:264,TYR:255,VAL:165},Nwe=121;function Mwe(e){let{key:t}=Ke.residue,{type_symbol:r,label_atom_id:n,label_comp_id:o}=Ke.atom,{structure:i,atomRadiusType:a,serialResidueIndex:A}=e,s=W.Location.create(i),c=0,l=0,u=-1;s.structure=i;for(let g=0,m=0,p=i.units.length;g<p;++g){let d=i.units[g],{elements:f}=d;s.unit=d,c=-1;for(let I=0,C=f.length;I<C;++I){let y=f[I],Q=m+I;s.element=y,l=t(s),c!==l&&++u,c=l;let E=n(s),b=qy(d,y);if(b===2||!e.nonPolymer&&!rh(b)){a[Q]=0,A[Q]=-1;continue}let x=r(s),S=im(x);if(tp(S)){a[Q]=0,A[Q]=u;continue}let w=o(s);if(e.traceOnly&&(E!=="CA"&&E!=="BB"||!_V[w])){a[Q]=0,A[Q]=u;continue}qa(b)?a[Q]=ICt(E,x,w):b===5?a[Q]=BCt(E,x,w):a[Q]=rq(x),A[Q]=u}m+=f.length}}function BCt(e,t,r){switch(t){case"O":return 5;case"S":return 6;case"N":return e==="NZ"?4:3;case"C":switch(e){case"C":case"CE1":case"CE2":case"CE3":case"CH2":case"CZ":case"CZ2":case"CZ3":return 1;case"CA":case"CB":case"CE":case"CG1":case"CG2":return 2;default:switch(r){case"PHE":case"TRP":case"TYR":case"HIS":case"ASP":case"ASN":return 1;case"PRO":case"LYS":case"ARG":case"MET":case"ILE":case"LEU":return 2;case"GLU":case"GLN":return e==="CD"?1:2}}}return rq(t)}function ICt(e,t,r){switch(t){case"C":return 7;case"N":return 8;case"P":return 9;case"O":return 5}return rq(t)}function rq(e){let t=rm(e),r=gB.indexOf(t);return r===-1&&(r=gB.length,gB[r]=t),r}var kwe=5e3;async function Hwe(e,t){let{atomRadiusType:r}=t;for(let n=0;n<r.length;n+=kwe)e.shouldUpdate&&await e.update({message:"Computing per residue surface accessibility...",current:n,max:r.length}),CCt(t,n,Math.min(n+kwe,r.length))}function CCt(e,t,r){let{structure:n,atomRadiusType:o,serialResidueIndex:i,area:a,spherePoints:A,scalingConstant:s,maxLookupRadius:c,probeSize:l}=e,{lookup3d:u,serialMapping:g,unitIndexMap:m,units:p}=n,{cumulativeUnitElementCount:d,elementIndices:f,unitIndices:I}=g;for(let C=t;C<r;++C){let y=gB[o[C]];if(y===gB[0])continue;let Q=p[I[C]],E=f[C],b=Q.conformation.x(E),x=Q.conformation.y(E),S=Q.conformation.z(E),{count:w,units:R,indices:T,squaredDistances:L}=u.find(b,x,S,c),F=l+y,v=l+F,U=[];for(let N=0;N<w;++N){let k=R[N],J=d[m.get(k.id)]+T[N],H=f[J],z=gB[o[J]];if(Q===k&&E===H||z===gB[0])continue;let _=l+z;if(L[N]<(v+z)*(v+z)){let M=f[J];U[U.length]=[L[N],(L[N]+F*F-_*_)/(2*F),k.conformation.x(M)-b,k.conformation.y(M)-x,k.conformation.z(M)-S]}}U.sort((N,k)=>N[0]-k[0]);let G=0;e:for(let N=0;N<A.length;++N){let[k,J,H]=A[N];for(let z=0;z<U.length;++z){let[,_,M,q,ne]=U[z];if(k*M+J*q+H*ne>_)continue e}++G}a[i[C]]+=s*G*F*F}}var nq={numberOfSpherePoints:h.Numeric(92,{min:12,max:360,step:1},{description:"Number of sphere points to sample per atom: 92 (original paper), 960 (BioJava), 3000 (EPPIC) - see Shrake A, Rupley JA: Environment and exposure to solvent of protein atoms. Lysozyme and insulin. J Mol Biol 1973."}),probeSize:h.Numeric(1.4,{min:.1,max:4,step:.01},{description:"Corresponds to the size of a water molecule: 1.4 (original paper), 1.5 (occassionally used)"}),nonPolymer:h.Boolean(!1,{description:"Include non-polymer atoms as occluders."}),traceOnly:h.Boolean(!1,{description:"Compute only using alpha-carbons, if true increase probeSize accordingly (e.g., 4 A). Considers only canonical amino acids."})};var Vp;(l=>{function e(u,g={}){let m={...h.getDefaultValues(nq),...g};return ve.create("Compute Accessible Surface Area",async p=>await t(p,u,m))}l.compute=e;async function t(u,g,m){let p=r(g,m);Mwe(p),await Hwe(u,p);let{area:d,serialResidueIndex:f}=p;return{area:d,serialResidueIndex:f}}function r(u,g){let{elementCount:m,atomicResidueCount:p}=u,{probeSize:d,nonPolymer:f,traceOnly:I,numberOfSpherePoints:C}=g;return{structure:u,probeSize:d,nonPolymer:f,traceOnly:I,spherePoints:n(C),scalingConstant:4*Math.PI/C,maxLookupRadius:2*g.probeSize+2*gB[2],atomRadiusType:new Int8Array(m),serialResidueIndex:new Int32Array(m),area:new Float32Array(p)}}function n(u){let g=[],m=Math.PI*(3-Math.sqrt(5)),p=2/u;for(let d=0;d<u;++d){let f=d*p-1+p/2,I=Math.sqrt(1-f*f),C=d*m;g[g.length]=B.create(Math.cos(C)*I,f,Math.sin(C)*I)}return g}let o;(p=>(p[p.NA=0]="NA",p[p.Buried=1]="Buried",p[p.Accessible=2]="Accessible"))(o=l.Flags||={}),l.Flag={NA:0,Buried:1,Accessible:2};function a(u,g){let m=_V[u]||Nwe;return g/m}l.normalize=a;function A(u,g){let{area:m,serialResidueIndex:p}=g,d=p[je.indexOf(je.ofSortedArray(u.structure.root.serialMapping.elementIndices),u.element)];return d===-1?-1:m[d]}l.getValue=A;function s(u,g){let m=A(u,g);return m===-1?-1:a(Ke.atom.label_comp_id(u),m)}l.getNormalizedValue=s;function c(u,g){let m=s(u,g);return m===-1?0:m<.16?1:2}l.getFlag=c})(Vp||={});var bU={...nq},YV={isBuried:qs.Dynamic(iu("computed","accessible-surface-area.is-buried",Je.Bool),e=>{if(!ge.isAtomic(e.element.unit))return!1;let t=Pm.get(e.element.structure).value;return t?Vp.getFlag(e.element,t)===Vp.Flags.Buried:!1}),isAccessible:qs.Dynamic(iu("computed","accessible-surface-area.is-accessible",Je.Bool),e=>{if(!ge.isAtomic(e.element.unit))return!1;let t=Pm.get(e.element.structure).value;return t?Vp.getFlag(e.element,t)===Vp.Flags.Accessible:!1})},Pm=eA.createProvider({label:"Accessible Surface Area",descriptor:{name:"molstar_accessible_surface_area",symbols:YV},type:"root",defaultParams:bU,getParams:e=>bU,isApplicable:e=>!0,obtain:async(e,t,r)=>{let n={...h.getDefaultValues(bU),...r};return{value:await Vp.compute(t,n).runInContext(e.runtime)}}});var oq=16448250,hCt="Assigns a color based on the relative accessible surface area of a residue.",Vwe={list:h.ColorList("yellow-green-blue",{presetKind:"scale"})};function yCt(e){return Vwe}function _we(e,t){let r,n=oa.create({listOrName:t.list.colors,minLabel:"buried",maxLabel:"exposed",domain:[0,1]}),o=e.structure&&Pm.get(e.structure),i=o?lc(o.id,o.version):-1;if(o?.value&&e.structure){let a=W.Location.create(e.structure),A=o.value,s=c=>{let l=Vp.getNormalizedValue(c,A);return l===-1?oq:n.color(l)};r=c=>W.Location.is(c)&&ge.isAtomic(c.unit)?s(c):Et.isLocation(c)?(a.unit=c.aUnit,a.element=c.aUnit.elements[c.aIndex],s(a)):oq}else r=()=>oq;return{factory:_we,granularity:"group",preferSmoothing:!0,color:r,props:t,contextHash:i,description:hCt,legend:n?n.legend:void 0}}var iq={name:"accessible-surface-area",label:"Accessible Surface Area",category:Br.Residue,factory:_we,getParams:yCt,defaultValues:h.getDefaultValues(Vwe),isApplicable:e=>!!e.structure,ensureCustomProperties:{attach:(e,t)=>t.structure?Pm.attach(e,t.structure,void 0,!0):Promise.resolve(),detach:e=>e.structure&&Pm.ref(e.structure,!1)}};var Jwe=er.create({name:"computed-accessible-surface-area-prop",category:"custom-props",display:{name:"Accessible Surface Area"},ctor:class extends er.Handler{constructor(){super(...arguments);this.provider=Pm;this.labelProvider={label:t=>{if(this.params.showTooltip)return QCt(t)}}}update(t){let r=this.params.autoAttach!==t.autoAttach||this.params.showTooltip!==t.showTooltip;return this.params.autoAttach=t.autoAttach,this.params.showTooltip=t.showTooltip,this.ctx.customStructureProperties.setDefaultAutoAttach(this.provider.descriptor.name,this.params.autoAttach),r}register(){Zs.addCustomProp(this.provider.descriptor),this.ctx.customStructureProperties.register(this.provider,this.params.autoAttach),this.ctx.representation.structure.themes.colorThemeRegistry.add(iq),this.ctx.managers.lociLabels.addProvider(this.labelProvider),this.ctx.query.structure.registry.add(Ywe),this.ctx.query.structure.registry.add(Owe)}unregister(){Zs.removeCustomProp(this.provider.descriptor),this.ctx.customStructureProperties.unregister(this.provider.descriptor.name),this.ctx.representation.structure.themes.colorThemeRegistry.remove(iq),this.ctx.managers.lociLabels.removeProvider(this.labelProvider),this.ctx.query.structure.registry.remove(Ywe),this.ctx.query.structure.registry.remove(Owe)}},params:()=>({autoAttach:h.Boolean(!1),showTooltip:h.Boolean(!0)})});function QCt(e){if(e.kind==="element-loci"){if(e.elements.length===0)return;let t=Pm.get(e.structure).value;if(!t||e.structure.customPropertyDescriptors.hasReference(Pm.descriptor))return;let{getSerialIndex:r}=e.structure.root.serialMapping,{area:n,serialResidueIndex:o}=t,i=new Set,a=0;for(let{indices:s,unit:c}of e.elements){let{elements:l}=c;Ee.forEach(s,u=>{let g=o[r(c,l[u])];g!==-1&&!i.has(g)&&(a+=n[g],i.add(g))})}return i.size===0?void 0:`Accessible Surface Area ${`<small>(${i.size} ${i.size>1?"Residues sum":"Residue"})</small>`}: ${a.toFixed(2)} \u212B<sup>2</sup>`}else if(e.kind==="structure-loci"){let t=Pm.get(e.structure).value;return!t||e.structure.customPropertyDescriptors.hasReference(Pm.descriptor)?void 0:`Accessible Surface Area <small>(Whole Structure)</small>: ${Az(t.area).toFixed(2)} \u212B<sup>2</sup>`}}var Ywe=Qo("Buried Protein Residues",ce.struct.modifier.union([ce.struct.modifier.wholeResidues([ce.struct.modifier.union([ce.struct.generator.atomGroups({"chain-test":ce.core.rel.eq([ce.ammp("objectPrimitive"),"atomistic"]),"residue-test":YV.isBuried.symbol()})])])]),{description:"Select buried protein residues.",category:"Residue Property",ensureCustomProperties:(e,t)=>Pm.attach(e,t)}),Owe=Qo("Accessible Protein Residues",ce.struct.modifier.union([ce.struct.modifier.wholeResidues([ce.struct.modifier.union([ce.struct.generator.atomGroups({"chain-test":ce.core.rel.eq([ce.ammp("objectPrimitive"),"atomistic"]),"residue-test":YV.isAccessible.symbol()})])])]),{description:"Select accessible protein residues.",category:"Residue Property",ensureCustomProperties:(e,t)=>Pm.attach(e,t)});var zwe=er.create({name:"computed-interactions-prop",category:"custom-props",display:{name:"Interactions"},ctor:class extends er.Handler{constructor(){super(...arguments);this.provider=ci;this.labelProvider={label:t=>{if(this.params.showTooltip)switch(t.kind){case"element-loci":if(t.elements.length===0)return;let r=[],n=this.getStructures(t.structure);for(let o of n){let i=this.provider.get(o).value;if(!i)continue;let a=W.Loci.remap(t,o);if(a.elements.length!==1)continue;let A=a.elements[0];if(Ee.size(A.indices)!==1)continue;let s=i.unitsFeatures.get(A.unit.id);if(!s)continue;let c=[],l=[],u=[],g=Ee.start(A.indices),{types:m,groups:p,elementsIndex:{indices:d,offsets:f}}=s;for(let I=f[g],C=f[g+1];I<C;++I){let y=d[I],Q=m[y],E=p[y];Q&&c.push(s1e(Q)),E&&l.push(c1e(E))}c.length&&u.push(`<small>Types</small> ${c.join(", ")}`),l.length&&u.push(`<small>Groups</small> ${l.join(", ")}`),u.length&&r.push(`Interaction Feature: ${u.join(" | ")}`)}return r.length?r.join("<br/>"):void 0;default:return}}}}getStructures(t){let r=[],n=this.ctx.helpers.substructureParent.get(t);if(n){let i=this.ctx.state.data.select(fr.Generators.ofType(te.Molecule.Structure,n.transform.ref));for(let a of i)a.obj&&Po(r,a.obj.data)}return r}update(t){let r=this.params.autoAttach!==t.autoAttach||this.params.showTooltip!==t.showTooltip;return this.params.autoAttach=t.autoAttach,this.params.showTooltip=t.showTooltip,this.ctx.customStructureProperties.setDefaultAutoAttach(this.provider.descriptor.name,this.params.autoAttach),r}register(){this.ctx.customStructureProperties.register(this.provider,this.params.autoAttach),this.ctx.representation.structure.themes.colorThemeRegistry.add(QU),this.ctx.managers.lociLabels.addProvider(this.labelProvider),this.ctx.representation.structure.registry.add(uF)}unregister(){this.ctx.customStructureProperties.unregister(this.provider.descriptor.name),this.ctx.representation.structure.themes.colorThemeRegistry.remove(QU),this.ctx.managers.lociLabels.removeProvider(this.labelProvider),this.ctx.representation.structure.registry.remove(uF)}},params:()=>({autoAttach:h.Boolean(!1),showTooltip:h.Boolean(!0)})});var Kwe=er.create({name:"computed-secondary-structure-prop",category:"custom-props",display:{name:"Secondary Structure"},ctor:class extends er.Handler{constructor(){super(...arguments);this.provider=dc}update(t){let r=this.params.autoAttach!==t.autoAttach;return this.params.autoAttach=t.autoAttach,this.ctx.customStructureProperties.setDefaultAutoAttach(this.provider.descriptor.name,this.params.autoAttach),r}register(){this.ctx.customStructureProperties.register(this.provider,this.params.autoAttach)}unregister(){this.ctx.customStructureProperties.unregister(this.provider.descriptor.name)}},params:()=>({autoAttach:h.Boolean(!1)})});var jwe=er.create({name:"computed-valence-model-prop",category:"custom-props",display:{name:"Valence Model"},ctor:class extends er.Handler{constructor(){super(...arguments);this.provider=ZI;this.labelProvider={label:t=>{if(this.params.showTooltip)switch(t.kind){case"element-loci":if(t.elements.length===0)return;let r=[],n=this.getStructures(t.structure);for(let o of n){let i=this.provider.get(o).value;if(!i)continue;let a=W.Loci.remap(t,o);if(a.elements.length!==1)continue;let A=a.elements[0];if(Ee.size(A.indices)!==1)continue;let s=i.get(A.unit.id);if(!s)continue;let c=Ee.start(A.indices),l=s.charge[c],u=s.idealGeometry[c],g=s.implicitH[c],m=s.totalH[c];r.push(`Valence Model: <small>Charge</small> ${l} | <small>Ideal Geometry</small> ${i1e(u)} | <small>Implicit H</small> ${g} | <small>Total H</small> ${m}`)}return r.length?r.join("<br/>"):void 0;default:return}}}}getStructures(t){let r=[],n=this.ctx.helpers.substructureParent.get(t);if(n){let i=this.ctx.state.data.select(fr.Generators.ofType(te.Molecule.Structure,n.transform.ref));for(let a of i)a.obj&&Po(r,a.obj.data)}return r}update(t){let r=this.params.autoAttach!==t.autoAttach||this.params.showTooltip!==t.showTooltip;return this.params.autoAttach=t.autoAttach,this.params.showTooltip=t.showTooltip,this.ctx.customStructureProperties.setDefaultAutoAttach(this.provider.descriptor.name,this.params.autoAttach),r}register(){this.ctx.customStructureProperties.register(this.provider,this.params.autoAttach),this.ctx.managers.lociLabels.addProvider(this.labelProvider)}unregister(){this.ctx.customStructureProperties.unregister(this.provider.descriptor.name),this.ctx.managers.lociLabels.removeProvider(this.labelProvider)}},params:()=>({autoAttach:h.Boolean(!1),showTooltip:h.Boolean(!0)})});var Aq=16448250,ECt="Assigns a color based on SIFTS mapping.",xU=new Map,Wwe={...Pi({type:"colors",colorList:"set-1"})};function bCt(e){return Wwe}function Xwe(e,t){let r;if(e.structure){for(let A of e.structure.models){let s=Mu.Provider.get(A).value;if(s)for(let c of s.accession)!c||xU.has(c)||xU.set(c,xU.size)}let n=W.Location.create(e.structure),o=Yi(xU.size+1,t,{valueLabel:A=>`${A}`}),i=new Map,a=A=>{let s=Mu.getKey(A);if(!s)return Aq;if(i.has(s))return i.get(s);let c=o.color(xU.get(s));return i.set(s,c),c};r=A=>W.Location.is(A)&&ge.isAtomic(A.unit)?a(A):Et.isLocation(A)?(n.unit=A.aUnit,n.element=A.aUnit.elements[A.aIndex],a(n)):Aq}else r=()=>Aq;return{factory:Xwe,granularity:"group",preferSmoothing:!0,color:r,props:t,description:ECt}}var sq={name:"sifts-mapping",label:"SIFTS Mapping",category:Br.Residue,factory:Xwe,getParams:bCt,defaultValues:h.getDefaultValues(Wwe),isApplicable:e=>!!e.structure?.models.some(t=>Mu.Provider.isApplicable(t)),ensureCustomProperties:{attach:async(e,t)=>{if(t.structure)for(let r of t.structure.models)await Mu.Provider.attach(e,r,void 0,!0)},detach:e=>{if(e.structure)for(let t of e.structure.models)Mu.Provider.ref(t,!1)}}};var Zwe=er.create({name:"sifts-mapping-prop",category:"custom-props",display:{name:"SIFTS Mapping"},ctor:class extends er.Handler{constructor(){super(...arguments);this.provider=Mu.Provider;this.labelProvider={label:t=>{if(this.params.showTooltip)return xCt(t)}}}update(t){let r=this.params.autoAttach!==t.autoAttach||this.params.showTooltip!==t.showTooltip;return this.params.autoAttach=t.autoAttach,this.params.showTooltip=t.showTooltip,this.ctx.customStructureProperties.setDefaultAutoAttach(this.provider.descriptor.name,this.params.autoAttach),r}register(){this.ctx.customModelProperties.register(this.provider,this.params.autoAttach),this.ctx.representation.structure.themes.colorThemeRegistry.add(sq),this.ctx.managers.lociLabels.addProvider(this.labelProvider)}unregister(){this.ctx.customModelProperties.unregister(this.provider.descriptor.name),this.ctx.representation.structure.themes.colorThemeRegistry.remove(sq),this.ctx.managers.lociLabels.removeProvider(this.labelProvider)}},params:()=>({autoAttach:h.Boolean(!0),showTooltip:h.Boolean(!0)})});function xCt(e){if(e.kind==="element-loci"){if(e.elements.length===0)return;let t=e.elements[0],r=t.unit,n=W.Location.create(e.structure,r,r.elements[Ee.getAt(t.indices,0)]);return Mu.getLabel(n)}}var rC;(n=>{n.Descriptor={name:"ihm_cross_link_restraint"},n.Provider=Ws.create(n.Descriptor);function r(o,i){let a={entity_id:o.entity_id_1,asym_id:o.asym_id_1,seq_id:o.seq_id_1,atom_id:o.atom_id_1},A={entity_id:o.entity_id_2,asym_id:o.asym_id_2,seq_id:o.seq_id_2,atom_id:o.atom_id_2};function s(d,f,I){let C=d.get(f);C?C.push(I):d.set(f,[I])}function c(d,f){let I=f.entity_id.value(d),C=f.asym_id.value(d),y=f.seq_id.value(d);if(o.model_granularity.value(d)==="by-atom"){let Q=i.atomicHierarchy.index.findAtom({auth_seq_id:y,label_asym_id:C,label_atom_id:f.atom_id.value(d),label_entity_id:I});Q>=0&&s(u,Q,d)}else if(i.coarseHierarchy.isDefined){let Q=i.coarseHierarchy.spheres.findSequenceKey(I,C,y);if(Q>=0)s(g,Q,d);else{let E=i.coarseHierarchy.gaussians.findSequenceKey(I,C,y);E>=0&&s(m,E,d)}}}function l(d){switch(d){case ge.Kind.Atomic:return u;case ge.Kind.Spheres:return g;case ge.Kind.Gaussians:return m}}let u=new Map,g=new Map,m=new Map,p=[];for(let d=0;d<o._rowCount;++d)c(d,a),c(d,A);return{getIndicesByElement:(d,f)=>{let C=l(f).get(d);return C!==void 0?C:p},data:o}}n.fromTable=r})(rC||={});var SCt=[];function qwe(e,t,r,n){return`${e}|${t.id}|${r}|${n.id}`}var SU=class{constructor(t){this.pairs=t;let r=new Map;this.pairs.forEach((n,o)=>{let i=qwe(n.indexA,n.unitA,n.indexB,n.unitB),a=r.get(i);a?a.push(o):r.set(i,[o])}),this.count=t.length,this.pairKeyIndices=r}getPairIndices(t,r,n,o){let i=qwe(t,r,n,o);return this.pairKeyIndices.get(i)||SCt}getPairs(t,r,n,o){return this.getPairIndices(t,r,n,o).map(a=>this.pairs[a])}};var mB=eA.createProvider({label:"Cross Link Restraint",descriptor:{name:"integrative-cross-link-restraint"},type:"local",defaultParams:{},getParams:e=>({}),isApplicable:e=>e.models.some(t=>!!rC.Provider.get(t)),obtain:async(e,t,r)=>({value:FCt(t)})});var _p;(p=>{let e;(f=>f.CrossLinkRestraint="cross-link-restraint")(e=p.Tag||={});function t(d){return d.models.some(f=>!!rC.Provider.get(f))}p.isApplicable=t;let r=B(),n=B();function o(d){return d.unitA.conformation.position(d.unitA.elements[d.indexA],r),d.unitB.conformation.position(d.unitB.elements[d.indexB],n),B.distance(r,n)}p.distance=o;function i(d,f,I){return _f("cross-link-restraints",{structure:f,crossLinkRestraints:d},I)}p.Location=i;function a(d){return!!d&&d.kind==="data-location"&&d.tag==="cross-link-restraints"}p.isLocation=a;function A(d,f){return d.data.structure===f.data.structure&&d.data.crossLinkRestraints===f.data.crossLinkRestraints&&d.element===f.element}p.areLocationsEqual=A;function s(d,f){let I=d.pairs[f];return`Cross Link Restraint | Type: ${I.restraintType} | Threshold: ${I.distanceThreshold} \u212B | Psi: ${I.psi} | Sigma 1: ${I.sigma1} | Sigma 2: ${I.sigma2} | Distance: ${o(I).toFixed(2)} \u212B`}function c(d){return s(d.data.crossLinkRestraints,d.element)}p.locationLabel=c;function l(d,f,I){return ec("cross-link-restraints",{structure:d,crossLinkRestraints:f},I,C=>g(f,I,C),()=>m(d,f,I))}p.Loci=l;function u(d){return!!d&&d.kind==="data-loci"&&d.tag==="interactions"}p.isLoci=u;function g(d,f,I){return gc.fromPairProvider(f.length,(C,y,Q)=>{let E=d.pairs[f[C]];E.unitA.conformation.position(E.unitA.elements[E.indexA],y),E.unitB.conformation.position(E.unitB.elements[E.indexB],Q)},I)}p.getBoundingSphere=g;function m(d,f,I){let C=I[0];if(C===void 0)return"";let y=f.pairs[C];return[s(f,C),kQ(Et.Location(d,y.unitA,y.indexA,d,y.unitB,y.indexB))].join("</br>")}p.getLabel=m})(_p||={});function $we(e,t,r){let{elements:n}=t,o=n.length,i=t.kind;for(let a=0;a<o;a++){let A=n[a];r.getIndicesByElement(A,i).forEach(s=>e.set(s,a))}}function DCt(e,t,r){if(t.model!==r.model||t.model.sourceData.kind!=="mmCIF")return;let n=rC.Provider.get(t.model);if(!n)return;let o=new Map,i=new Map;$we(o,t,n),$we(i,r,n),o.forEach((a,A)=>{let s=i.get(A);s!==void 0&&e.push(OV(t,a,r,s,n,A),OV(r,s,t,a,n,A))})}function vCt(e,t){if(t.model.sourceData.kind!=="mmCIF")return;let r=rC.Provider.get(t.model);if(!r)return;let{elements:n}=t,o=n.length,i=t.kind,a=new Map;for(let A=0;A<o;A++){let s=n[A];r.getIndicesByElement(s,i).forEach(c=>{let l=a.get(c);l?l.push(A):a.set(c,[A])})}a.forEach((A,s)=>{if(A.length<2)return;let[c,l]=A;e.push(OV(t,c,t,l,r,s),OV(t,l,t,c,r,s))})}function OV(e,t,r,n,o,i){return{unitA:e,indexA:t,unitB:r,indexB:n,restraintType:o.data.restraint_type.value(i),distanceThreshold:o.data.distance_threshold.value(i),psi:o.data.psi.value(i),sigma1:o.data.sigma_1.value(i),sigma2:o.data.sigma_2.value(i)}}function FCt(e){let t=[];if(!e.models.some(n=>rC.Provider.get(n)))return new SU(t);let r=e.units.length;for(let n=0;n<r;++n){let o=e.units[n];vCt(t,o);for(let i=n+1;i<r;++i){let a=e.units[i];o.model===a.model&&DCt(t,o,a)}}return new SU(t)}function wCt(e,t,r,n,o){let i=mB.get(t).value;if(!i.count)return At.createEmpty(o);let{sizeFactor:a}=n,A=W.Location.create(t),s={linkCount:i.count,position:(u,g,m)=>{let p=i.pairs[m],d=p.unitA,f=p.unitB;d.conformation.position(d.elements[p.indexA],u),f.conformation.position(f.elements[p.indexB],g)},radius:u=>{let g=i.pairs[u];return A.unit=g.unitA,A.element=g.unitA.elements[g.indexA],r.size.size(A)*a}},{mesh:c,boundingSphere:l}=Qc(e,s,n,o);if(l)c.setBoundingSphere(l);else if(c.triangleCount>0){let u=we.expand(we(),t.boundary.sphere,1*a);c.setBoundingSphere(u)}return c}var e2e={...Us,...Nl,sizeFactor:h.Numeric(.5,{min:0,max:10,step:.1})};function RCt(e){return Oa({defaultProps:h.getDefaultValues(e2e),createGeometry:wCt,createLocationIterator:UCt,getLoci:LCt,eachLocation:TCt,setUpdateState:(t,r,n)=>{t.createGeometry=r.sizeFactor!==n.sizeFactor||r.radialSegments!==n.radialSegments||r.linkCap!==n.linkCap}},e)}function UCt(e){let t=mB.get(e).value,{pairs:r}=t,n=r.length,o=1,i=_p.Location(t,e);return rn(n,o,1,A=>(i.element=A,i),!0)}function LCt(e,t,r){let{objectId:n,groupId:o}=e;if(r===n){let i=mB.get(t).value;if(i.pairs[o])return _p.Loci(t,i,[o])}return Ir}function TCt(e,t,r){let n=!1;if(_p.isLoci(e)){if(!Ye.areEquivalent(e.data.structure,t))return!1;let o=mB.get(t).value;if(e.data.crossLinkRestraints!==o)return!1;for(let i of e.elements)r(Ue.ofSingleton(i))&&(n=!0)}return n}var PCt={"cross-link-restraint":(e,t)=>Eo("Cross-link restraint",e,t,RCt)},t2e={...e2e};function GCt(e,t){return h.clone(t2e)}function NCt(e,t){return Xt.createMulti("CrossLinkRestraint",e,t,Vn,PCt)}var cq={name:_p.Tag.CrossLinkRestraint,label:"Cross Link Restraint",description:"Displays cross-link restraints.",factory:NCt,getParams:GCt,defaultValues:h.getDefaultValues(t2e),defaultColorTheme:{name:_p.Tag.CrossLinkRestraint},defaultSizeTheme:{name:"uniform"},isApplicable:e=>_p.isApplicable(e),ensureCustomProperties:{attach:(e,t)=>mB.attach(e,t,void 0,!0),detach:e=>mB.ref(e,!1)}};var r2e=13421772,MCt="Colors cross-links by the deviation of the observed distance versus the modeled distance (e.g. modeled / `ihm_cross_link_restraint.distance_threshold`).",n2e={domain:h.Interval([.5,1.5],{step:.01}),list:h.ColorList("red-grey",{presetKind:"scale"})};function kCt(e){return n2e}function o2e(e,t){let r,n,o=e.structure&&mB.get(e.structure).value;if(o){n=oa.create({domain:t.domain,listOrName:t.list.colors});let i=n.color;r=a=>{if(_p.isLocation(a)){let A=o.pairs[a.element];if(A)return i(_p.distance(A)/A.distanceThreshold)}return r2e}}else r=()=>r2e;return{factory:o2e,granularity:"group",color:r,props:t,description:MCt,legend:n?n.legend:void 0}}var lq={name:"cross-link",label:"Cross Link",category:Br.Misc,factory:o2e,getParams:kCt,defaultValues:h.getDefaultValues(n2e),isApplicable:e=>!!e.structure&&_p.isApplicable(e.structure),ensureCustomProperties:{attach:(e,t)=>t.structure?mB.attach(e,t.structure,void 0,!0):Promise.resolve(),detach:e=>e.structure&&mB.ref(e.structure,!1)}};var i2e=er.create({name:"integrative-cross-link-restraint",category:"custom-props",display:{name:"Cross Link Restraint"},ctor:class extends er.Handler{constructor(){super(...arguments);this.provider=rC.Provider}register(){this.provider.formatRegistry.add("mmCIF",HCt),this.ctx.representation.structure.themes.colorThemeRegistry.add(lq),this.ctx.representation.structure.registry.add(cq)}unregister(){this.provider.formatRegistry.remove("mmCIF"),this.ctx.representation.structure.themes.colorThemeRegistry.remove(lq),this.ctx.representation.structure.registry.remove(cq)}}});function HCt(e){if(!sn.is(e.sourceData))return;let{ihm_cross_link_restraint:t}=e.sourceData.data.db;if(t._rowCount!==0)return rC.fromTable(t,e)}var uq;(r=>{function e(n){let o=n.descriptor.name,i=A=>(o in A._propertyData||(A._propertyData[o]={props:{...h.getDefaultValues(n.getParams(A))},data:Kd.create(void 0)}),A._propertyData[o]),a=(A,s,c)=>{let l=i(A);A._propertyData[o]={props:s,data:Kd.withValue(l.data,c)}};return{label:n.label,descriptor:n.descriptor,isHidden:n.isHidden,getParams:A=>{let s=h.clone(n.getParams(A));return h.setDefaultValues(s,i(A).props),s},defaultParams:n.defaultParams,isApplicable:n.isApplicable,attach:async(A,s,c={},l)=>{l&&s.customProperties.reference(n.descriptor,!0);let u=i(s),g=h.merge(n.defaultParams,u.props,c);if(u.data.value&&h.areEqual(n.defaultParams,u.props,g))return;let{value:m,assets:p}=await n.obtain(A,s,g);s.customProperties.add(n.descriptor),s.customProperties.assets(n.descriptor,p),a(s,g,m)},ref:(A,s)=>A.customProperties.reference(n.descriptor,s),get:A=>i(A)?.data,set:(A,s={},c)=>{let l=i(A),u=h.merge(n.defaultParams,l.props,s);h.areEqual(n.defaultParams,l.props,u)||(a(A,u,c),A.customProperties.assets(n.descriptor))},props:A=>i(A).props}}r.createProvider=e;function t(n,o){let i={value:h.Value(o,{isHidden:!0})};return e({label:Ra(n),descriptor:{name:n},isHidden:!0,defaultParams:i,getParams:()=>({value:h.Value(o,{isHidden:!0})}),isApplicable:()=>!0,obtain:async(a,A,s)=>({...h.getDefaultValues(i),...s})})}r.createSimple=t})(uq||={});var VCt=B.fromArray,_Ct=B.distance,YCt=B.setMagnitude,OCt=B.create,a2e=B.copy,JCt=B.add,l2e={seedDensity:h.Numeric(10,{min:1,max:30,step:1},{description:"Percentage of cells with seed."}),stepSize:h.Numeric(.35,{min:.01,max:1,step:.01},{description:"Step size in grid space."}),minSeparation:h.Numeric(0,{min:0,max:5,step:.5},{description:"Minimum separation between streamlines in grid space. 0 to disable."})},DU=B(),qu=B(),A2e=B(),s2e=B();function c2e(e,t,r,n,o,i,a){let{space:A}=t.cells,[s,c,l]=A.dimensions,u=A.dataOffset,g=i*o,m=Math.max(s,c,l)*5/o,p=o/1.1,d=new Map,f=Math.ceil(2/o);a2e(qu,n);let I=0;for(let C=0;C<m&&!(qu[0]<1||qu[0]>s-2||qu[1]<1||qu[1]>c-2||qu[2]<1||qu[2]>l-2||!r(qu,A2e));++C){let y=u(Math.round(qu[0]),Math.round(qu[1]),Math.round(qu[2]));if(a&&a[y])break;let Q=(d.get(y)||0)+1;if(d.set(y,Q),Q>f)break;YCt(DU,A2e,g);let E=qu[0]+.5*DU[0],b=qu[1]+.5*DU[1],x=qu[2]+.5*DU[2],S=OCt(E,b,x);_Ct(s2e,S)>=p&&(e.push(S),a2e(s2e,S)),I++,JCt(qu,qu,DU)}return I}function zCt(e,t,r,n,o){let i=[];return c2e(i,e,t,r,n,-1,o)>1&&i.reverse(),c2e(i,e,t,r,n,1,o),i}async function KCt(e,t,r){let{space:n}=t.cells,[o,i,a]=n.dimensions,A=n.dataOffset,{seedDensity:s,stepSize:c,minSeparation:l}=r,u=Math.max(1,Math.floor(Math.min(o,i,a)/s)),g=1,m=o-2-u,p=1,d=i-2-u,f=1,I=a-2-u,C=new Yy,y=[];for(let R=f;R<=I;R+=u)for(let T=p;T<=d;T+=u)for(let L=g;L<=m;L+=u)y.push(L+C.float()*u,T+C.float()*u,R+C.float()*u);for(let R=y.length/3-1;R>0;R--){let T=Math.floor(C.float()*(R+1)),L=R*3,F=T*3,v=y[L],U=y[L+1],G=y[L+2];y[L]=y[F],y[L+1]=y[F+1],y[L+2]=y[F+2],y[F]=v,y[F+1]=U,y[F+2]=G}await e.update({isIndeterminate:!1,current:0,max:y.length/3});let Q=jr.makeGetInterpolatedGradient(t),E=l>0,b=E?new Uint8Array(o*i*a):void 0,x=[];if(E){let R=Math.ceil(l),T=l*l;for(let L=-R;L<=R;++L)for(let F=-R;F<=R;++F)for(let v=-R;v<=R;++v)v*v+F*F+L*L<=T&&x.push([v,F,L])}let S=[],w=B();for(let R=0;R<y.length;R+=3){e.shouldUpdate&&await e.update({current:R/3+1}),VCt(w,y,R);let T=zCt(t,Q,w,c,b);if(T.length*c>=3&&(S.push(T),b))for(let L=0,F=T.length;L<F;++L){let v=T[L],U=Math.round(v[0]),G=Math.round(v[1]),N=Math.round(v[2]);for(let k=0,J=x.length;k<J;++k){let H=x[k],z=U+H[0],_=G+H[1],M=N+H[2];z>=0&&z<o&&_>=0&&_<i&&M>=0&&M<a&&(b[A(z,_,M)]=1)}}}return S}async function u2e(e,t,r){return KCt(e.runtime,t.grid,r)}var gq={type:h.MappedStatic("basic",{basic:h.Group(l2e,{isFlat:!0})})},$u=uq.createProvider({label:"Streamlines",descriptor:{name:"molstar_streamlines"},defaultParams:gq,getParams:e=>gq,isApplicable:e=>!Ze.Segmentation.get(e),obtain:async(e,t,r)=>{let n={...h.getDefaultValues(gq),...r};if(n.type.name==="basic")return{value:await u2e(e,t,n.type.params)}}});var UA=B(),JV=B(),oc=B(),Tg=B(),xc=B(),Hl=B();function zV(e,t,r,n,o){e[0]=t[0]*n+r[0]*o,e[1]=t[1]*n+r[1]*o,e[2]=t[2]*n+r[2]*o}function mF(e,t,r,n,o,i){e[0]=t[0]*o+r[0]*i+n[0],e[1]=t[1]*o+r[1]*i+n[1],e[2]=t[2]*o+r[2]*i+n[2]}var Jh=B.fromArray,g2e=B.normalize,mq=B.scaleAndAdd,dq=B.cross,jCt=B.slerp,WCt=B.dot,XCt=B.unitX,eg=qe.add3,pq=new Map;function ZCt(e,t){let r=t?1:0,n=ko(e,r);if(!pq.has(n)){let o=[],i=[];for(let a=0;a<e;++a){let A=(a*2+r)/e*Math.PI;o[a]=Math.cos(A),i[a]=Math.sin(A)}pq.set(n,{cos:o,sin:i})}return pq.get(n)}function Bu(e,t,r,n,o,i,a,A,s,c,l,u=!1){let{currentGroup:g,vertices:m,normals:p,indices:d,groups:f}=e,I=m.elementCount,{cos:C,sin:y}=ZCt(i,l==="rounded"),Q=Math.round(i/4),E=Q*3,b=u&&o&&(s||c),x,S=b&&s&&c;S&&(x=o/2);for(let T=0;T<=o;++T){let L=T*3;Jh(xc,r,L),Jh(Hl,n,L),Jh(Tg,t,L);let F=a[T],v=A[T],U;if(b){let N=S?T<=x:s;S?U=Math.max(Number.EPSILON,Math.sqrt(1-Math.pow((N?x-T:T-x)/x,2))):U=Math.max(Number.EPSILON,Math.sqrt(1-Math.pow((N?o-T:T)/o,2))),F*=U,v*=U,dq(JV,N?Hl:xc,N?xc:Hl),g2e(JV,JV)}let G=l==="rounded"&&v>F;for(let N=0;N<i;++N){if(G){mF(oc,xc,Hl,Tg,F*C[N],F*y[N]);let k=WCt(Hl,XCt)<0?N<Q||N>=E?v-F:-v+F:N>=Q&&N<E?-v+F:v-F;mq(oc,oc,xc,k),N===Q||N===Q-1?zV(UA,xc,Hl,0,1):N===E||N===E-1?zV(UA,xc,Hl,0,-1):zV(UA,xc,Hl,C[N],y[N])}else mF(oc,xc,Hl,Tg,v*C[N],F*y[N]),zV(UA,xc,Hl,F*C[N],v*y[N]);g2e(UA,UA),eg(m,oc[0],oc[1],oc[2]),b&&jCt(UA,JV,UA,U),eg(p,UA[0],UA[1],UA[2])}}let w=Math.round(i/2);for(let T=0;T<o;++T){for(let L=0;L<w;++L)eg(d,I+T*i+(L+1)%i,I+(T+1)*i+(L+1)%i,I+T*i+L),eg(d,I+(T+1)*i+(L+1)%i,I+(T+1)*i+L,I+T*i+L);for(let L=w;L<i;++L)eg(d,I+T*i+(L+1)%i,I+(T+1)*i+L,I+T*i+L),eg(d,I+(T+1)*i+(L+1)%i,I+(T+1)*i+L,I+T*i+(L+1)%i)}if(s){let L=m.elementCount;Jh(xc,r,0),Jh(Hl,n,0),Jh(Tg,t,0),dq(UA,Hl,xc),eg(m,Tg[0],Tg[1],Tg[2]),eg(p,UA[0],UA[1],UA[2]);let F=b?0:a[0],v=b?0:A[0],U=l==="rounded"&&v>F;U&&(v-=F),I=m.elementCount;for(let G=0;G<i;++G)U?(mF(oc,xc,Hl,Tg,F*C[G],F*y[G]),mq(oc,oc,xc,G<Q||G>=E?v:-v)):mF(oc,xc,Hl,Tg,v*C[G],F*y[G]),eg(m,oc[0],oc[1],oc[2]),eg(p,UA[0],UA[1],UA[2]),eg(d,I+(G+1)%i,I+G,L)}if(c){let T=o*3,L=m.elementCount;Jh(xc,r,T),Jh(Hl,n,T),Jh(Tg,t,T),dq(UA,xc,Hl),eg(m,Tg[0],Tg[1],Tg[2]),eg(p,UA[0],UA[1],UA[2]);let F=b?0:a[o],v=b?0:A[o],U=l==="rounded"&&v>F;U&&(v-=F),I=m.elementCount;for(let G=0;G<i;++G)U?(mF(oc,xc,Hl,Tg,F*C[G],F*y[G]),mq(oc,oc,xc,G<Q||G>=E?v:-v)):mF(oc,xc,Hl,Tg,v*C[G],F*y[G]),eg(m,oc[0],oc[1],oc[2]),eg(p,UA[0],UA[1],UA[2]),eg(d,I+G,I+(G+1)%i,L)}let R=(o+1)*i+(s?i+1:0)+(c?i+1:0);qe.addRepeat(f,R,g)}var QQn={...ot.Params};function Pg(e,t,r,n,o,i=()=>[-1]){let a=0,{webgl:A}=t,s=new Jn,c=new Xt.GeometryState,l=FA(),u=[],g=Xt.createState(),m=new Map,p,d,f,I,C=Gi.createEmpty();async function y(R,T){let L=m.get(T);return L?L.mustRecreate?.({volume:p,key:T},I,A)&&(L.destroy(),L=n(l,p,T,I,A),m.set(T,L)):(L=n(l,p,T,I,A),m.set(T,L)),L.createOrUpdate({webgl:A,runtime:R},C,I,{volume:p,key:T})}function Q(R={},T){T&&T!==p&&(f=r(t,T),p=T,I||(I=h.getDefaultValues(f)));let L=KR(Object.assign({},I,R),p);return Object.assign(I,R,L),d=i(I,p),ve.create("Creating or updating VolumeRepresentation",async F=>{let v=new Set(m.keys());for(let U=0,G=d.length;U<G;++U){let N=d[U];v.delete(N);let k=y(F,N);k&&await k}v.forEach(U=>{m.get(U)?.destroy(),m.delete(U)}),u.length=0,m.forEach(U=>{U.renderObject&&(u.push(U.renderObject),c.add(U.renderObject.id,U.geometryVersion))}),c.snapshot(),s.next(a++)})}function E(R,T){let L=!1;return m.forEach(F=>{L=F.mark(R,T)||L}),L}function b(R,T){T.visible!==void 0&&R&&R.setVisibility(T.visible),T.alphaFactor!==void 0&&R&&R.setAlphaFactor(T.alphaFactor),T.pickable!==void 0&&R&&R.setPickable(T.pickable),T.overpaint!==void 0&&R&&R.setOverpaint(T.overpaint),T.transparency!==void 0&&R&&R.setTransparency(T.transparency),T.emissive!==void 0&&R&&R.setEmissive(T.emissive),T.substance!==void 0&&R&&R.setSubstance(T.substance),T.clipping!==void 0&&R&&R.setClipping(T.clipping),T.wiggle!==void 0&&R&&R.setWiggle(T.wiggle),T.transform!==void 0&&R&&R.setTransform(T.transform),T.themeStrength!==void 0&&R&&R.setThemeStrength(T.themeStrength)}function x(R){let{visible:T,alphaFactor:L,pickable:F,overpaint:v,transparency:U,emissive:G,substance:N,clipping:k,wiggle:J,transform:H,themeStrength:z,syncManually:_,markerActions:M}=R,q={};T!==void 0&&(q.visible=T),L!==void 0&&(q.alphaFactor=L),F!==void 0&&(q.pickable=F),v!==void 0&&(q.overpaint=v),U!==void 0&&(q.transparency=U),G!==void 0&&(q.emissive=G),N!==void 0&&(q.substance=N),k!==void 0&&(q.clipping=k),J!==void 0&&(q.wiggle=J),z!==void 0&&(q.themeStrength=z),H!==void 0&&!Y.areEqual(H,g.transform,1e-6)&&(q.transform=H),_!==void 0&&(q.syncManually=_),M!==void 0&&(q.markerActions=M),m.forEach(ne=>b(ne,q)),Xt.updateState(g,R)}function S(R){C=R}function w(){m.forEach(R=>R.destroy()),m.clear()}return{label:e,get groupCount(){let R=0;return m.forEach(T=>{T.renderObject&&(R+=T.groupCount)}),R},get props(){return I},get params(){return f},get state(){return g},get theme(){return C},get geometryVersion(){return c.version},renderObjects:u,updated:s,createOrUpdate:Q,setState:x,setTheme:S,getLoci:R=>{let T=Ir;for(let L of m.values()){let F=L.getLoci(R);if(!ga(F)){T=F;break}}return T},getAllLoci:()=>[o(p,I)],eachLocation:R=>{m.forEach(T=>{T.eachLocation(R)})},mark:E,destroy:w}}function qCt(e,t,r,n){return _f("streamlines",{volume:t,streamlines:e},{index:r,instance:n})}function $Ct(e,t,r){let n=tht(r),o=[`${t.label||"Volume"}`];if(n===0)o.push("No Streamlines");else if(n===1){let i=Ee.start(r[0].indices);if(o.push(`Streamline #${i}`),t.instances.length>1){let a=Ee.start(r[0].instances);o.push(`Instance #${a}`)}}else o.push(`${n} Streamlines`);return o.join(" | ")}function m2e(e,t,r){return ec("streamlines",{streamlines:e,volume:t},r,n=>rht(e,t,r,n),()=>$Ct(e,t,r))}function eht(e){return!!e&&e.kind==="data-loci"&&e.tag==="streamlines"}function tht(e){let t=0;for(let r of e)t+=Ee.size(r.indices)*Ee.size(r.instances);return t}var vU=new qi("98"),KV=B(),jV=B();function rht(e,t,r,n){vU.reset();let o=jr.getGridToCartesianTransform(t.grid);for(let{indices:i,instances:a}of r)for(let A=0,s=Ee.size(i);A<s;A++){let c=Ee.getAt(i,A);for(let l of e[c]){B.transformMat4(KV,l,o);for(let u=0,g=Ee.size(a);u<g;u++){let m=t.instances[Ee.getAt(a,u)];B.transformMat4(jV,KV,m.transform),vU.includePosition(jV)}}}vU.finishedIncludeStep();for(let{indices:i,instances:a}of r)for(let A=0,s=Ee.size(i);A<s;A++){let c=Ee.getAt(i,A);for(let l of e[c]){B.transformMat4(KV,l,o);for(let u=0,g=Ee.size(a);u<g;u++){let m=t.instances[Ee.getAt(a,u)];B.transformMat4(jV,KV,m.transform),vU.radiusPosition(jV)}}}return vU.getSphere(n)}var fq={anchorEnabled:h.Boolean(!1,{label:"Anchor"}),anchorCenter:h.Vec3(B(),void 0,{hideIf:e=>!e.anchorEnabled}),anchorRadius:h.Numeric(1,{min:0,max:10,step:.1},{hideIf:e=>!e.anchorEnabled}),dashEnabled:h.Boolean(!1,{label:"Dash"}),dashPoints:h.Numeric(5,{min:1,max:25,step:1},{description:"Number of streamline points per dash/gap",hideIf:e=>!e.dashEnabled}),dashShift:h.Boolean(!1,{description:"Shift dashes so dashes become gaps and vice versa",hideIf:e=>!e.dashEnabled})},WV=B();function XV(e,t,r){if(e.length<2)return!1;if(!r.anchorEnabled)return!0;let n=e[0];if(B.transformMat4(WV,n,t),B.distance(WV,r.anchorCenter)<=r.anchorRadius)return!0;let o=e[e.length-1];return B.transformMat4(WV,o,t),B.distance(WV,r.anchorCenter)<=r.anchorRadius}function Bq(e,t){let r=$u.get(e).value,n=Ue.ofLength(r.length),o=Ue.ofLength(e.instances.length);return m2e(r,e,[{indices:n,instances:o}])}function Iq(e,t,r,n,o){let{objectId:i,groupId:a,instanceId:A}=e;if(o===i){let s=Ze.PickingGranularity.get(t),c=Ee.ofSingleton(A);if(s==="volume")return Ze.Loci(t,c);let l=$u.get(t).value,u=Ee.ofSingleton(a);return m2e(l,t,[{indices:u,instances:c}])}return Ir}function Cq(e,t,r,n,o){let i=!1,A=$u.get(t).value.length;if(Ze.isLoci(e)){if(!Ze.areEquivalent(e.volume,t))return!1;if(Ue.is(e.instances)){let s=Ue.start(e.instances)*A,c=Ue.end(e.instances)*A;o(Ue.ofBounds(s,c))&&(i=!0)}else for(let s=0,c=e.instances.length;s<c;++s){let l=e.instances[s]*A;o(Ue.ofBounds(l,l+A))&&(i=!0)}}else if(eht(e)){if(!Ze.areEquivalent(e.data.volume,t))return!1;for(let{indices:s,instances:c}of e.elements)Ue.is(s)?Ee.forEach(c,l=>{let u=l*A;o(Ue.offset(s,u))&&(i=!0)}):Ee.forEach(s,l=>{Ee.forEach(c,u=>{let g=u*A;o(Ue.ofSingleton(g+l))&&(i=!0)})})}return i}function hq(e){let t=$u.get(e).value,r=t.length,n=e.instances.length,o=qCt(t,e);return rn(r,n,1,(a,A)=>(o.element.index=a,o.element.instance=A,o))}var dF=B.fromArray,yq=B.sub,ox=B.normalize,nht=B.isZero,ZV=B.set,FU=B.cross,qV=B.toArray,d2e=B.copy,oht=B.magnitude,p2e=B.rotateAroundAxis,iht=B.dot;function wU(e,t,r,n){let o=B(),i=B(),a=B(),A=B(),s=B(),c=B();dF(s,e,0),dF(c,e,3),yq(o,c,s),ox(o,o),nht(o)&&ZV(o,1,0,0);let l=Math.abs(o[0]),u=Math.abs(o[1]),g=Math.abs(o[2]);l<=u&&l<=g?ZV(a,1,0,0):u<=g?ZV(a,0,1,0):ZV(a,0,0,1),FU(A,o,a),ox(A,A),FU(a,A,o),ox(a,a),qV(a,t,0),qV(A,r,0),d2e(i,o);for(let m=1;m<n;++m){m<n-1?(dF(s,e,(m-1)*3),dF(c,e,(m+1)*3),yq(o,c,s)):(dF(s,e,(m-1)*3),dF(c,e,m*3),yq(o,c,s)),ox(o,o);let p=iht(i,o);if(p<.9999){let d=B();if(FU(d,i,o),oht(d)>1e-4){ox(d,d);let f=Math.acos(Math.min(1,Math.max(-1,p)));p2e(a,a,d,f),p2e(A,A,d,f)}}FU(A,o,a),ox(A,A),FU(a,A,o),ox(a,a),qV(a,t,m*3),qV(A,r,m*3),d2e(i,o)}}var lEn={...ot.Params};function f2e(e,t,r,n,o){let i=e.instances.length,a=new Float32Array(i*16);for(let A=0;A<i;++A)Y.toArray(e.instances[A].transform,a,A*16);return y0(a,i,t,r,n,o)}function aht(e,t,r,n,o,i){let{createValues:a,createRenderableState:A}=lA.getUtils(t),s=r.nonInstanceable?DD():f2e(e,t.boundingSphere,o.cellSize,o.batchSize),c=a(t,s,r,n,o),l=A(o);return $s(t.kind,c,l,i)}function Vl(e,t){let{defaultProps:r,createGeometry:n,createLocationIterator:o,getLoci:i,eachLocation:a,setUpdateState:A,initUpdateState:s,mustRecreate:c,dispose:l}=e,{updateValues:u,updateBoundingSphere:g,updateRenderableState:m,createPositionIterator:p}=e.geometryUtils,d=Qd.create(),f,I,C,y,Q,E=Object.assign({},r),b=Gi.createEmpty(),x,S,w,R=-1,T,L;function F(N,k,J,H){if(!J&&!x)throw new Error("missing volume");if(I=Object.assign({},E,k),C=N,y=J,Q=H,Qd.reset(d),f?jr.areEquivalent(y.grid,x.grid)&&!Ze.areInstanceTransformsEqual(y,x)?d.updateTransform=!0:(!Ze.areEquivalent(y,x)||Q!==S)&&(d.createNew=!0):d.createNew=!0,d.createNew){s?.(d,y,I,C),d.createGeometry=!0;return}A(d,y,x,I,E,C,b),KA.areEqual(C.color,b.color)||(d.updateColor=!0),Qi.areEqual(C.size,b.size)||(d.updateSize=!0),T.nonInstanceable?I.instanceGranularity!==E.instanceGranularity&&(d.updateTransform=!0):((I.instanceGranularity!==E.instanceGranularity||I.cellSize!==E.cellSize||I.batchSize!==E.batchSize)&&(d.updateTransform=!0),d.updateTransform&&(d.updateMatrix=!0)),d.updateSize&&!("uSize"in f.values)&&(d.createGeometry=!0),d.createGeometry&&(d.updateColor=!0,d.updateSize=!0)}function v(N){if(d.createNew)if(N)T=o(y,Q,N),f=aht(y,N,T,C,I,t),L=p(N,f.values);else throw new Error("expected geometry to be given");else{if(!f)throw new Error("expected renderObject to be available");if((d.updateColor||d.updateSize||d.updateTransform||d.updateLocation)&&(T=o(y,Q,N||w)),d.updateTransform||d.updateLocation){let{instanceCount:k,groupCount:J}=T;vi(I.instanceGranularity,J,k)?ei(k,"instance",f.values):ei(k*J,"groupInstance",f.values)}if(d.updateMatrix&&f2e(y,w.boundingSphere,I.cellSize,I.batchSize,f.values),d.createGeometry)if(N)D.updateIfChanged(f.values.drawCount,lA.getDrawCount(N)),D.updateIfChanged(f.values.uVertexCount,lA.getVertexCount(N)),D.updateIfChanged(f.values.uGroupCount,T.groupCount);else throw new Error("expected geometry to be given");(d.updateTransform||d.createGeometry)&&(g(f.values,N||w),L=p(N||w,f.values)),d.updateSize&&"uSize"in f.values&&hl(T,L,C.size,f.values),d.updateColor&&cA(T,L,C.color,f.values),u(f.values,I),m(f.state,I)}E=I,b=C,x=y,S=Q,N&&(w=N,R+=1)}function U(N,k,J,H){let z=!1;if(Ze.Cell.isLoci(N)){if(Ze.Cell.isLociEmpty(N)||!Ze.areEquivalent(N.volume,k))return!1;for(let{instances:_}of N.elements)Ee.forEach(_,M=>{H(Ue.ofSingleton(M))&&(z=!0)})}else if(Ze.Segment.isLoci(N)){if(Ze.Segment.isLociEmpty(N)||!Ze.areEquivalent(N.volume,k))return!1;for(let{segments:_,instances:M}of N.elements)Ee.has(_,J)&&Ee.forEach(M,q=>{H(Ue.ofSingleton(q))&&(z=!0)})}else if(Ze.Isosurface.isLoci(N)){if(Ze.Isosurface.isLociEmpty(N))return!1;if(Ue.is(N.instances))H(N.instances)&&(z=!0);else for(let _=0,M=N.instances.length;_<M;++_)H(Ue.ofSingleton(_))&&(z=!0)}else if(Ze.isLoci(N)){if(Ze.isLociEmpty(N))return!1;if(Ue.is(N.instances))H(N.instances)&&(z=!0);else for(let _=0,M=N.instances.length;_<M;++_)H(Ue.ofSingleton(_))&&(z=!0)}return z}function G(N,k){let J=vi(E.instanceGranularity,T.groupCount,T.instanceCount);return uA(N)?k(J?Ue.ofBounds(0,T.instanceCount):Ue.ofBounds(0,T.groupCount*T.instanceCount)):J?U(N,x,S,k):a(N,x,S,E,k,w)}return{get groupCount(){return T?T.count:0},get renderObject(){return f},get geometryVersion(){return R},async createOrUpdate(N,k,J={},H){if(F(k,J,H?.volume||x,H?.key||S),d.createGeometry){let z=n(N,y,Q,C,I,w);return Uy(z)?z.then(v):v(z)}else v()},getLoci(N){return f?(vi(E.instanceGranularity,T.groupCount,T.instanceCount)&&(N={...N,groupId:Ai.Null}),i(N,x,S,E,f.id,w)):Ir},eachLocation(N){for(T.reset();T.hasNext;){let{location:k,isSecondary:J}=T.move();N(k,J)}},mark(N,k){return Qn.mark(f,N,k,G)},setVisibility(N){Qn.setVisibility(f,N)},setAlphaFactor(N){Qn.setAlphaFactor(f,N)},setPickable(N){Qn.setPickable(f,N)},setColorOnly(N){Qn.setColorOnly(f,N)},setTransform(N,k){Qn.setTransform(f,N,k)},setOverpaint(N){return Qn.setOverpaint(f,N,G,!0)},setTransparency(N){return Qn.setTransparency(f,N,G,!0)},setEmissive(N){return Qn.setEmissive(f,N,G,!0)},setSubstance(N){return Qn.setSubstance(f,N,G,!0)},setClipping(N){return Qn.setClipping(f,N,G,!0)},setWiggle(N){return Qn.setWiggle(f,N,G,!0)},setThemeStrength(N){Qn.setThemeStrength(f,N)},destroy(){l?.(w),f&&(f.state.disposed=!0,f=void 0)},mustRecreate:c}}var $V=B.transformMat4,Aht=B.transformMat4Offset,sht=B.toArray,B2e={...fq,...Zr.Params,useLineStrips:h.Boolean(!0)};function cht(e){return Vl({defaultProps:h.getDefaultValues(B2e),createGeometry:lht,createLocationIterator:hq,getLoci:Iq,eachLocation:Cq,setUpdateState:(t,r,n,o,i)=>{let a=$u.get(r).version;t.info.streamlinesHash!==a&&(t.info.streamlinesHash!==void 0&&(t.createGeometry=!0,t.updateLocation=!0),t.info.streamlinesHash=a),(o.anchorEnabled!==i.anchorEnabled||!B.equals(o.anchorCenter,i.anchorCenter)||o.anchorRadius!==i.anchorRadius)&&(t.createGeometry=!0),(o.dashEnabled!==i.dashEnabled||o.dashPoints!==i.dashPoints||o.dashShift!==i.dashShift)&&(t.createGeometry=!0),o.useLineStrips!==i.useLineStrips&&(t.createGeometry=!0)},initUpdateState:(t,r,n,o)=>{let i=$u.get(r).version;t.info.streamlinesHash=i},geometryUtils:Zr.Utils},e)}function I2e(e){let t=0;for(let r of e)t+=r.length;return t}function lht(e,t,r,n,o,i){let{cells:{space:a}}=t.grid,A=a.dimensions,s=jr.getGridToCartesianTransform(t.grid),c=$u.get(t).value,l=I2e(c),{dashEnabled:u,dashPoints:g,dashShift:m}=o,p=g*2,d;if(o.useLineStrips){let I=R9.create(l,Math.ceil(l/10),i);d=I;let C=B();for(let y=0,Q=c.length;y<Q;++y){let E=c[y];if(XV(E,s,o))if(u){let b=!1;for(let x=0,S=E.length;x<S;++x){let w=x%p;(m?w>=g:w<g)?(b||(I.start(y),b=!0),$V(C,E[x],s),I.addVec(C)):b&&($V(C,E[x],s),I.addVec(C),I.end(),b=!1)}b&&I.end()}else{I.start(y);for(let b=0,x=E.length;b<x;++b)$V(C,E[b],s),I.addVec(C);I.end()}}}else{let I=Ii.create(l,Math.ceil(l/10),i);d=I;let C=B(),y=B();for(let Q=0,E=c.length;Q<E;++Q){let b=c[Q];if(XV(b,s,o))if(u){B.transformMat4(C,b[0],s);for(let x=1,S=b.length;x<S;++x){B.transformMat4(y,b[x],s);let w=(x-1)%(g*2);(m?w>=g:w<g)&&I.addVec(C,y,Q),B.copy(C,y)}}else{B.transformMat4(C,b[0],s);for(let x=1,S=b.length;x<S;++x)B.transformMat4(y,b[x],s),I.addVec(C,y,Q),B.copy(C,y)}}}let f=d.getLines();return f.setBoundingSphere(we.fromDimensionsAndTransform(we(),A,s)),f}var C2e={...fq,...At.Params,tubeSizeFactor:h.Numeric(.2,{min:0,max:10,step:.01}),radialSegments:h.Numeric(8,{min:2,max:56,step:2},ot.CustomQualityParamInfo)};function uht(e){return Vl({defaultProps:h.getDefaultValues(C2e),createGeometry:ght,createLocationIterator:hq,getLoci:Iq,eachLocation:Cq,setUpdateState:(t,r,n,o,i)=>{let a=$u.get(r).version;t.info.streamlinesHash!==a&&(t.info.streamlinesHash!==void 0&&(t.createGeometry=!0,t.updateLocation=!0),t.info.streamlinesHash=a),(o.tubeSizeFactor!==i.tubeSizeFactor||o.radialSegments!==i.radialSegments)&&(t.createGeometry=!0),(o.anchorEnabled!==i.anchorEnabled||!B.equals(o.anchorCenter,i.anchorCenter)||o.anchorRadius!==i.anchorRadius)&&(t.createGeometry=!0),(o.dashEnabled!==i.dashEnabled||o.dashPoints!==i.dashPoints||o.dashShift!==i.dashShift)&&(t.createGeometry=!0)},initUpdateState:(t,r,n,o)=>{let i=$u.get(r).version;t.info.streamlinesHash=i},geometryUtils:At.Utils},e)}function ght(e,t,r,n,o,i){let{cells:{space:a}}=t.grid,A=a.dimensions,s=jr.getGridToCartesianTransform(t.grid),c=$u.get(t).value,{tubeSizeFactor:l,radialSegments:u,dashEnabled:g,dashPoints:m,dashShift:p}=o,f=I2e(c)*u*2,I=We.createState(f,Math.ceil(f/10),i);for(let y=0,Q=c.length;y<Q;++y){let E=c[y];XV(E,s,o)&&(I.currentGroup=y,g?dht(I,E,s,u,l,m,p,n):mht(I,E,s,u,l,n))}let C=We.getMesh(I);return C.setBoundingSphere(we.fromDimensionsAndTransform(we(),A,s)),C}var e3=is();function mht(e,t,r,n,o,i){let a=t.length;if(a<2)return;let A=a-1,s=new Float32Array(a*3),c=new Float32Array(a*3),l=new Float32Array(a*3),u=new Float32Array(a),g=new Float32Array(a);for(let m=0;m<a;++m){let p=t[m];Aht(s,p,r,m*3,0,0),B.fromArray(e3.position,s,m*3);let d=i.size.size(e3)*o;u[m]=d,g[m]=d}wU(s,c,l,a),Bu(e,s,c,l,A,n,u,g,!0,!0,"elliptical")}function dht(e,t,r,n,o,i,a,A){let s=t.length;if(s<2)return;let c=[],l=[];for(let m=0;m<s;++m){let p=$V(B(),t[m],r);c.push(p),B.copy(e3.position,p),l.push(A.size.size(e3)*o)}let u=i*2,g=a?i:0;for(;g<s-1;){let m=g,p=Math.min(g+i,s-1);p>m&&pht(e,c,l,m,p,n),g+=u}}function pht(e,t,r,n,o,i){let a=o-n+1;if(a<2)return;let A=new Float32Array(a*3),s=new Float32Array(a*3),c=new Float32Array(a*3),l=new Float32Array(a),u=new Float32Array(a);for(let g=0;g<a;++g)sht(t[n+g],A,g*3),l[g]=r[n+g],u[g]=r[n+g];wU(A,s,c,a),Bu(e,A,s,c,a-1,i,l,u,!0,!0,"elliptical")}var h2e={lines:(e,t)=>Pg("Streamlines lines",e,t,cht,Bq),"tube-mesh":(e,t)=>Pg("Streamlines tube-mesh",e,t,uht,Bq)},y2e={...B2e,...C2e,visuals:h.MultiSelect(["lines"],h.objectToOptions(h2e)),density:h.Numeric(.1,{min:0,max:1,step:.01},ot.ShadingCategory)};function fht(e,t){return h.clone(y2e)}function Bht(e,t){return Xt.createMulti("Streamlines",e,t,Xt.StateBuilder,h2e)}var Qq={name:"streamlines",label:"Streamlines",description:"Displays streamlines.",factory:Bht,getParams:fht,defaultValues:h.getDefaultValues(y2e),defaultColorTheme:{name:"uniform"},defaultSizeTheme:{name:"uniform"},isApplicable:e=>!Ze.isEmpty(e)&&!Ze.Segmentation.get(e),ensureCustomProperties:{attach:(e,t)=>$u.attach(e,t,void 0,!0),detach:e=>$u.ref(e,!1)}};var Q2e=er.create({name:"streamlines-volume-prop",category:"custom-props",display:{name:"Streamlines"},ctor:class extends er.Handler{constructor(){super(...arguments);this.provider=$u}update(t){let r=this.params.autoAttach!==t.autoAttach;return this.params.autoAttach=t.autoAttach,this.ctx.customVolumeProperties.setDefaultAutoAttach(this.provider.descriptor.name,this.params.autoAttach),r}register(){this.ctx.customVolumeProperties.register(this.provider,this.params.autoAttach),this.ctx.representation.volume.registry.add(Qq)}unregister(){this.ctx.customVolumeProperties.unregister(this.provider.descriptor.name),this.ctx.representation.volume.registry.remove(Qq)}},params:()=>({autoAttach:h.Boolean(!1)})});var UU={State:zZ,Representation:jZ,Camera:WZ,Misc:XZ},Bs={Representation:qZ,Camera:eq,State:tq,CustomProps:Eq};var Iht=e=>{let t=ze.Representation.StructureRepresentation3D.definition.params(void 0,e);return{expandRadius:h.Numeric(5,{min:1,max:10,step:1}),targetParams:h.Group(t,{label:"Target",customDefault:OQ(e,void 0,{type:"ball-and-stick",size:"physical",typeParams:{sizeFactor:.22,sizeAspectRatio:.73,adjustCylinderLength:!0,xrayShaded:!0,aromaticBonds:!1,multipleBonds:"off",excludeTypes:["hydrogen-bond","metal-coordination"]}})}),surroundingsParams:h.Group(t,{label:"Surroundings",customDefault:OQ(e,void 0,{type:"ball-and-stick",size:"physical",typeParams:{sizeFactor:.16,excludeTypes:["hydrogen-bond","metal-coordination"]}})}),nciParams:h.Group(t,{label:"Non-covalent Int.",customDefault:OQ(e,void 0,{type:uF,color:QU,size:Qi.BuiltIn.uniform})}),components:h.MultiSelect(E2e,h.arrayToOptions(E2e)),excludeTargetFromSurroundings:h.Boolean(!1,{label:"Exclude Target",description:'Exclude the focus "target" from the surroudings component.'}),ignoreHydrogens:h.Boolean(!1),ignoreHydrogensVariant:h.Select("all",h.arrayToOptions(["all","non-polar"])),ignoreLight:h.Boolean(!1),material:Va.getParam(),clip:h.Group(ha.Params),interior:lp(),animation:Hu()}},E2e=["target","surroundings","interactions"];var Cht=new Set(["structure-focus-target-sel","structure-focus-target-repr","structure-focus-surr-sel","structure-focus-surr-repr","structure-focus-surr-nci-repr"]),bq=class extends er.WithSubscribers{constructor(){super(...arguments);this.currentSource=void 0}get surrLabel(){return`[Focus] Surroundings (${this.params.expandRadius} \xC5)`}getReprParams(r){return{...r,type:{name:r.type.name,params:{...r.type.params,ignoreHydrogens:this.params.ignoreHydrogens,ignoreHydrogensVariant:this.params.ignoreHydrogensVariant,ignoreLight:this.params.ignoreLight,material:this.params.material,clip:this.params.clip,interior:this.params.interior,animation:this.params.animation}}}}ensureShape(r){let n=this.plugin.state.data,o=n.tree,i=n.build(),a=fr.findUniqueTagsInSubtree(o,r.transform.ref,Cht);a["structure-focus-target-sel"]||(a["structure-focus-target-sel"]=i.to(r).apply(ze.Model.StructureSelectionFromBundle,{bundle:W.Bundle.Empty,label:"[Focus] Target"},{tags:"structure-focus-target-sel"}).ref),a["structure-focus-surr-sel"]||(a["structure-focus-surr-sel"]=i.to(r).apply(ze.Model.StructureSelectionFromExpression,{expression:ce.struct.generator.empty(),label:this.surrLabel},{tags:"structure-focus-surr-sel"}).ref);let A=this.params.components;return A.indexOf("target")>=0&&!a["structure-focus-target-repr"]&&(a["structure-focus-target-repr"]=i.to(a["structure-focus-target-sel"]).apply(ze.Representation.StructureRepresentation3D,this.getReprParams(this.params.targetParams),{tags:"structure-focus-target-repr"}).ref),A.indexOf("surroundings")>=0&&!a["structure-focus-surr-repr"]&&(a["structure-focus-surr-repr"]=i.to(a["structure-focus-surr-sel"]).apply(ze.Representation.StructureRepresentation3D,this.getReprParams(this.params.surroundingsParams),{tags:"structure-focus-surr-repr"}).ref),A.indexOf("interactions")>=0&&!a["structure-focus-surr-nci-repr"]&&r.obj&&uF.isApplicable(r.obj?.data)&&(a["structure-focus-surr-nci-repr"]=i.to(a["structure-focus-surr-sel"]).apply(ze.Representation.StructureRepresentation3D,this.getReprParams(this.params.nciParams),{tags:"structure-focus-surr-nci-repr"}).ref),{state:n,builder:i,refs:a}}clear(r){let n=this.plugin.state.data;this.currentSource=void 0;let o=n.select(fr.Generators.byRef(r).subtree().withTag("structure-focus-target-sel")),i=n.select(fr.Generators.byRef(r).subtree().withTag("structure-focus-surr-sel"));if(o.length===0&&i.length===0)return;let a=n.build(),A=W.Bundle.Empty;for(let c of o)a.to(c).update(ze.Model.StructureSelectionFromBundle,l=>({...l,bundle:A}));let s=ce.struct.generator.empty();for(let c of i)a.to(c).update(ze.Model.StructureSelectionFromExpression,l=>({...l,expression:s}));return yt.State.Update(this.plugin,{state:n,tree:a,options:{doNotLogTiming:!0,doNotUpdateCurrent:!0}})}async focus(r){let n=this.plugin.helpers.substructureParent.get(r.structure);if(!n||!n.obj)return;this.currentSource=r;let o=W.Loci.remap(r,n.obj.data),i=W.Loci.extendToWholeResidues(o),a=W.Bundle.fromLoci(i),A=W.Bundle.toExpression(a),s=ce.struct.modifier.includeSurroundings({0:A,radius:this.params.expandRadius,"as-whole-residues":!0});this.params.excludeTargetFromSurroundings&&(s=ce.struct.modifier.exceptBy({0:s,by:A}));let{state:c,builder:l,refs:u}=this.ensureShape(n);l.to(u["structure-focus-target-sel"]).update(ze.Model.StructureSelectionFromBundle,g=>({...g,bundle:a})),l.to(u["structure-focus-surr-sel"]).update(ze.Model.StructureSelectionFromExpression,g=>({...g,expression:s,label:this.surrLabel})),await yt.State.Update(this.plugin,{state:c,tree:l,options:{doNotLogTiming:!0,doNotUpdateCurrent:!0}})}register(r){this.subscribeObservable(this.plugin.managers.structure.focus.behaviors.current,n=>{n?this.focus(n.loci):this.clear(en.RootRef)})}async update(r){let n=this.params;if(this.params=r,n.excludeTargetFromSurroundings!==r.excludeTargetFromSurroundings)return this.currentSource&&this.focus(this.currentSource),!0;let o=this.plugin.state.data,i=o.build(),a=fr.Generators.root.subtree(),A=this.params.components,s=A.indexOf("target")>=0;for(let c of o.select(a.withTag("structure-focus-target-repr")))s?i.to(c).update(this.getReprParams(this.params.targetParams)):i.delete(c.transform.ref);s=A.indexOf("surroundings")>=0;for(let c of o.select(a.withTag("structure-focus-surr-repr")))s?i.to(c).update(this.getReprParams(this.params.surroundingsParams)):i.delete(c.transform.ref);s=A.indexOf("interactions")>=0;for(let c of o.select(a.withTag("structure-focus-surr-nci-repr")))s?i.to(c).update(this.getReprParams(this.params.nciParams)):i.delete(c.transform.ref);return await yt.State.Update(this.plugin,{state:o,tree:i,options:{doNotLogTiming:!0,doNotUpdateCurrent:!0}}),r.expandRadius!==n.expandRadius&&this.currentSource&&this.focus(this.currentSource),!0}},ix=er.create({name:"create-structure-focus-representation",display:{name:"Structure Focus Representation"},category:"interaction",ctor:bq,params:(e,t)=>Iht(t)});function ri(e){return e}(i=>{i.CommonParams={ignoreHydrogens:h.Optional(h.Boolean(!1)),ignoreHydrogensVariant:h.Optional(h.Select("all",h.arrayToOptions(["all","non-polar"]))),ignoreLight:h.Optional(h.Boolean(!1)),quality:h.Optional(h.Select("auto",K2)),theme:h.Optional(h.Group({globalName:h.Optional(h.Text("")),globalColorParams:h.Optional(h.Value({},{isHidden:!0})),carbonColor:h.Optional(h.Select("chain-id",h.arrayToOptions(["chain-id","operator-name","element-symbol"]))),symmetryColor:h.Optional(h.Text("")),symmetryColorParams:h.Optional(h.Value({},{isHidden:!0})),focus:h.Optional(h.Group({name:h.Optional(h.Text("")),params:h.Optional(h.Value({}))}))}))};function t(a){return a==="chain-id"?{name:a,params:YM.defaultValues}:a==="operator-name"?{name:a,params:$D.defaultValues}:{name:a,params:{}}}function r(a){return a.units.some(A=>!A.conformation.operator.assembly&&A.conformation.operator.spgrOp>=0)}function n(a,A,s){let c=a.state.data.build(),l=a.builders.structure.representation,u=a.managers.structure.component.state.options.hydrogens,g={quality:a.managers.structure.component.state.options.visualQuality,ignoreHydrogens:u!=="all",ignoreHydrogensVariant:u==="only-polar"?"non-polar":"all",ignoreLight:a.managers.structure.component.state.options.ignoreLight};A.quality&&A.quality!=="auto"&&(g.quality=A.quality),A.ignoreHydrogens!==void 0&&(g.ignoreHydrogens=!!A.ignoreHydrogens),A.ignoreHydrogensVariant!==void 0&&(g.ignoreHydrogensVariant=A.ignoreHydrogensVariant),A.ignoreLight!==void 0&&(g.ignoreLight=!!A.ignoreLight);let m=A.theme?.globalName?A.theme?.globalName:void 0,p=A.theme?.carbonColor!==void 0?{carbonColor:t(A.theme?.carbonColor),...A.theme?.globalColorParams}:{...A.theme?.globalColorParams},d=s&&A.theme?.symmetryColor&&r(s)?A.theme?.symmetryColor:m,f=A.theme?.symmetryColorParams?{...A.theme?.globalColorParams,...A.theme?.symmetryColorParams}:{...A.theme?.globalColorParams},I=A.theme?.globalColorParams?{...A.theme?.globalColorParams}:void 0;return{update:c,builder:l,color:m,symmetryColor:d,symmetryColorParams:f,globalColorParams:I,typeParams:g,ballAndStickColor:p}}i.reprBuilder=n;function o(a,A,s,c){if(a.state.hasBehavior(ix))return a.state.updateBehavior(ix,l=>{let u=dU(a,A,"ball-and-stick",s||"element-symbol",c);l.surroundingsParams.colorTheme=u,l.targetParams.colorTheme=u})}i.updateFocusRepr=o})(ri||={});var nC=ri.CommonParams,zh=ri.reprBuilder,Kh=ri.updateFocusRepr,hht={id:"preset-structure-representation-auto",display:{name:"Automatic",description:"Show representations based on the size of the structure. Smaller structures are shown with more detail than larger ones, ranging from atomistic display to coarse surfaces."},params:()=>nC,apply(e,t,r){let n=Pn.resolveAndCheck(r.state.data,e)?.obj?.data;if(!n)return{};let o=r.config.get(jt.Structure.SizeThresholds)||Ye.DefaultSizeThresholds,i=Ye.getSize(n,o),a=n.polymerResidueCount/n.polymerGapCount;switch(i){case Ye.Size.Gigantic:case Ye.Size.Huge:return S2e.apply(e,t,r);case Ye.Size.Large:return D2e.apply(e,t,r);case Ye.Size.Medium:if(a>3)return x2e.apply(e,t,r);case Ye.Size.Small:return v2e.apply(e,{...t,showCarbohydrateSymbol:!0},r);default:Or(i)}}},yht={id:"preset-structure-representation-empty",display:{name:"Empty",description:"Removes all existing representations."},async apply(e,t,r){return{}}},LU="Basic",x2e={id:"preset-structure-representation-polymer-and-ligand",display:{name:"Polymer & Ligand",group:LU,description:"Shows polymers as Cartoon, ligands as Ball & Stick, carbohydrates as 3D-SNFG and water molecules semi-transparent."},params:()=>nC,async apply(e,t,r){let n=Pn.resolveAndCheck(r.state.data,e);if(!n)return{};let o={polymer:await $c(r,n,"polymer"),ligand:await $c(r,n,"ligand"),nonStandard:await $c(r,n,"non-standard"),branched:await $c(r,n,"branched",{label:"Carbohydrate"}),water:await $c(r,n,"water"),ion:await $c(r,n,"ion"),lipid:await $c(r,n,"lipid"),coarse:await $c(r,n,"coarse")},i=n.obj.data,a=(o.water?.obj?.data?.elementCount||0)>5e4?"line":"ball-and-stick",A=(o.lipid?.obj?.data?.elementCount||0)>2e4?"line":"ball-and-stick",{update:s,builder:c,typeParams:l,color:u,symmetryColor:g,symmetryColorParams:m,globalColorParams:p,ballAndStickColor:d}=zh(r,t,i),f={polymer:c.buildRepresentation(s,o.polymer,{type:"cartoon",typeParams:l,color:g,colorParams:m},{tag:"polymer"}),ligand:c.buildRepresentation(s,o.ligand,{type:"ball-and-stick",typeParams:l,color:u,colorParams:d},{tag:"ligand"}),nonStandard:c.buildRepresentation(s,o.nonStandard,{type:"ball-and-stick",typeParams:l,color:u,colorParams:d},{tag:"non-standard"}),branchedBallAndStick:c.buildRepresentation(s,o.branched,{type:"ball-and-stick",typeParams:{...l,alpha:.3},color:u,colorParams:d},{tag:"branched-ball-and-stick"}),branchedSnfg3d:c.buildRepresentation(s,o.branched,{type:"carbohydrate",typeParams:l,color:u,colorParams:p},{tag:"branched-snfg-3d"}),water:c.buildRepresentation(s,o.water,{type:a,typeParams:{...l,alpha:.6,visuals:a==="line"?["intra-bond","element-point"]:void 0},color:u,colorParams:{carbonColor:{name:"element-symbol",params:{}},...p}},{tag:"water"}),ion:c.buildRepresentation(s,o.ion,{type:"ball-and-stick",typeParams:l,color:u,colorParams:{carbonColor:{name:"element-symbol",params:{}},...p}},{tag:"ion"}),lipid:c.buildRepresentation(s,o.lipid,{type:A,typeParams:{...l,alpha:.6,visuals:A==="line"?["intra-bond"]:void 0},color:u,colorParams:{carbonColor:{name:"element-symbol",params:{}},...p}},{tag:"lipid"}),coarse:c.buildRepresentation(s,o.coarse,{type:"spacefill",typeParams:l,color:u||"chain-id",colorParams:p},{tag:"coarse"})};return await s.commit({revertOnError:!1}),await Kh(r,i,t.theme?.focus?.name,t.theme?.focus?.params),{components:o,representations:f}}},Qht={id:"preset-structure-representation-protein-and-nucleic",display:{name:"Protein & Nucleic",group:LU,description:"Shows proteins as Cartoon and RNA/DNA as Gaussian Surface."},params:()=>nC,async apply(e,t,r){let n=Pn.resolveAndCheck(r.state.data,e);if(!n)return{};let o={protein:await b2e(r,n,"protein"),nucleic:await b2e(r,n,"nucleic")},i=n.obj.data,a={radiusOffset:i.isCoarseGrained?2:0,smoothness:i.isCoarseGrained?1:1.5},{update:A,builder:s,typeParams:c,symmetryColor:l,symmetryColorParams:u}=zh(r,t,i),g={protein:s.buildRepresentation(A,o.protein,{type:"cartoon",typeParams:c,color:l,colorParams:u},{tag:"protein"}),nucleic:s.buildRepresentation(A,o.nucleic,{type:"gaussian-surface",typeParams:{...c,...a},color:l,colorParams:u},{tag:"nucleic"})};return await A.commit({revertOnError:!0}),await Kh(r,i,t.theme?.focus?.name,t.theme?.focus?.params),{components:o,representations:g}}},S2e={id:"preset-structure-representation-coarse-surface",display:{name:"Coarse Surface",group:LU,description:"Shows polymers and lipids as coarse Gaussian Surface."},params:()=>nC,async apply(e,t,r){let n=Pn.resolveAndCheck(r.state.data,e);if(!n)return{};let o={polymer:await $c(r,n,"polymer"),lipid:await $c(r,n,"lipid")},i=n.obj.data,a=r.config.get(jt.Structure.SizeThresholds)||Ye.DefaultSizeThresholds,A=Ye.getSize(i,a),s=Object.create(null);A===Ye.Size.Gigantic?Object.assign(s,{traceOnly:!i.isCoarseGrained,radiusOffset:2,smoothness:1,visuals:["structure-gaussian-surface-mesh"]}):A===Ye.Size.Huge?Object.assign(s,{radiusOffset:i.isCoarseGrained?2:0,smoothness:1}):i.isCoarseGrained&&Object.assign(s,{radiusOffset:2,smoothness:1});let{update:c,builder:l,typeParams:u,symmetryColor:g,symmetryColorParams:m}=zh(r,t,i),p={polymer:l.buildRepresentation(c,o.polymer,{type:"gaussian-surface",typeParams:{...u,...s},color:g,colorParams:m},{tag:"polymer"}),lipid:l.buildRepresentation(c,o.lipid,{type:"gaussian-surface",typeParams:{...u,...s},color:g,colorParams:m},{tag:"lipid"})};return await c.commit({revertOnError:!0}),await Kh(r,i,t.theme?.focus?.name,t.theme?.focus?.params),{components:o,representations:p}}},D2e={id:"preset-structure-representation-polymer-cartoon",display:{name:"Polymer Cartoon",group:LU,description:"Shows polymers as Cartoon."},params:()=>nC,async apply(e,t,r){let n=Pn.resolveAndCheck(r.state.data,e);if(!n)return{};let o={polymer:await $c(r,n,"polymer")},i=n.obj.data,{update:a,builder:A,typeParams:s,symmetryColor:c,symmetryColorParams:l}=zh(r,t,i),u={polymer:A.buildRepresentation(a,o.polymer,{type:"cartoon",typeParams:s,color:c,colorParams:l},{tag:"polymer"})};return await a.commit({revertOnError:!0}),await Kh(r,i,t.theme?.focus?.name,t.theme?.focus?.params),{components:o,representations:u}}},v2e={id:"preset-structure-representation-atomic-detail",display:{name:"Atomic Detail",group:LU,description:"Shows everything in atomic detail."},params:()=>({...nC,showCarbohydrateSymbol:h.Boolean(!1)}),async apply(e,t,r){let n=Pn.resolveAndCheck(r.state.data,e);if(!n)return{};let o={all:await $c(r,n,"all"),branched:void 0},i=n.obj.data,a=i.elementCount>1e5,A=i.elementCount>1e6,s=i.units.length>5e3,c=i.atomicResidueCount&&i.elementCount>1e3&&i.atomicResidueCount/i.elementCount<3,l=i.models[0],u=!!Hi.Provider.get(l)||yg.isExhaustive(l),g="ball-and-stick";i.isCoarseGrained||s?g=A?"point":"spacefill":c&&!u?g="spacefill":a&&(g="line");let m=t.showCarbohydrateSymbol&&!a&&!c;m&&Object.assign(o,{branched:await $c(r,n,"branched",{label:"Carbohydrate"})});let{update:p,builder:d,typeParams:f,color:I,ballAndStickColor:C,globalColorParams:y}=zh(r,t,i),Q=c&&!u?{carbonColor:{name:"element-symbol",params:{}},...y}:C,E={all:d.buildRepresentation(p,o.all,{type:g,typeParams:f,color:I,colorParams:Q},{tag:"all"})};return m&&Object.assign(E,{snfg3d:d.buildRepresentation(p,o.branched,{type:"carbohydrate",typeParams:{...f,alpha:.4,visuals:["carbohydrate-symbol"]},color:I,colorParams:y},{tag:"snfg-3d"})}),await p.commit({revertOnError:!0}),await Kh(r,i,t.theme?.focus?.name??I,t.theme?.focus?.params??Q),{components:o,representations:E}}},Eht={id:"preset-structure-representation-illustrative",display:{name:"Illustrative",group:"Miscellaneous",description:"Show everything in spacefill representation with illustrative colors and ignore light."},params:()=>nC,async apply(e,t,r){let n=Pn.resolveAndCheck(r.state.data,e);if(!n)return{};let o={all:await $c(r,n,"all"),branched:void 0},i=n.obj.data,{update:a,builder:A,typeParams:s,color:c}=zh(r,t,i),l={all:A.buildRepresentation(a,o.all,{type:"spacefill",typeParams:{...s,ignoreLight:!0},color:"illustrative",colorParams:{style:{name:"entity-id",params:{overrideWater:!0}}}},{tag:"all"})};return await a.commit({revertOnError:!0}),await Kh(r,i,t.theme?.focus?.name??c,t.theme?.focus?.params),{components:o,representations:l}}},bht={id:"preset-structure-representation-molecular-surface",display:{name:"Molecular Surface",group:"Miscellaneous",description:"Show everything in molecular surface representation with illustrative colors."},params:()=>nC,async apply(e,t,r){let n=Pn.resolveAndCheck(r.state.data,e);if(!n)return{};let o={all:await $c(r,n,"all"),branched:void 0},i=n.obj.data,{update:a,builder:A,typeParams:s,color:c}=zh(r,t,i),l={all:A.buildRepresentation(a,o.all,{type:"molecular-surface",typeParams:s,color:"entity-id",colorParams:{overrideWater:!0}},{tag:"all"})};return await a.commit({revertOnError:!0}),await Kh(r,i,t.theme?.focus?.name??c,t.theme?.focus?.params),{components:o,representations:l}}},xht={id:"preset-structure-representation-auto-lod",display:{name:"Automatic Detail",group:"Miscellaneous",description:"Shows more (or less) detailed representations automatically based on camera distance."},params:()=>nC,async apply(e,t,r){let n=Pn.resolveAndCheck(r.state.data,e);if(!n)return{};let o={all:await $c(r,n,"all")},i=n.obj.data,{update:a,builder:A,typeParams:s,color:c,symmetryColor:l,symmetryColorParams:u,ballAndStickColor:g}=zh(r,t,i),m={gaussianSurface:A.buildRepresentation(a,o.all,{type:"gaussian-surface",typeParams:{...s,lod:B.create(30,1e7,100)},color:l,colorParams:u},{tag:"gaussian-surface"}),cartoon:A.buildRepresentation(a,o.all,{type:"cartoon",typeParams:{...s,lod:B.create(-20,300,100)},color:l,colorParams:u},{tag:"cartoon"}),ballAndStick:A.buildRepresentation(a,o.all,{type:"ball-and-stick",typeParams:{...s,lod:B.create(-20,40,20)},color:c,colorParams:g},{tag:"ball-and-stick"})};return await a.commit({revertOnError:!1}),await Kh(r,i,t.theme?.focus?.name,t.theme?.focus?.params),{components:o,representations:m}}},Sht=h.arrayToOptions(Object.keys(rA.LodLevelsPresets));function Dht(e){return rA.LodLevelsPresets[e]}var vht={id:"preset-structure-representation-mesoscale",display:{name:"Mesoscale",group:"Miscellaneous",description:"Show everything in spacefill representation with instance-granularity and level-of-detail tuned for large particle scenes."},params:()=>({...nC,graphics:h.Select("quality",Sht)}),async apply(e,t,r){let n=Pn.resolveAndCheck(r.state.data,e);if(!n)return{};let o={all:await $c(r,n,"all")},i=n.obj.data,{update:a,builder:A,typeParams:s,color:c}=zh(r,t,i),l=t.graphics??"quality",u=Dht(l),g=l!=="quality"&&l!=="ultra",m=l==="performance"?15:12,p={all:A.buildRepresentation(a,o.all,{type:"spacefill",typeParams:{...s,instanceGranularity:!0,lodLevels:u,approximate:g,alphaThickness:m,clipPrimitive:!0},color:c||"entity-id"},{tag:"all"})};return await a.commit({revertOnError:!0}),await Kh(r,i,t.theme?.focus?.name??c,t.theme?.focus?.params),{components:o,representations:p}}};function $c(e,t,r,n){return e.builders.structure.tryCreateComponentStatic(t,r,n)}function b2e(e,t,r,n){return e.builders.structure.tryCreateComponentFromSelection(t,Oi[r],`selection-${r}`,n)}var ni={empty:yht,auto:hht,"atomic-detail":v2e,"polymer-cartoon":D2e,"polymer-and-ligand":x2e,"protein-and-nucleic":Qht,"coarse-surface":S2e,illustrative:Eht,"molecular-surface":bht,"auto-lod":xht,mesoscale:vht};var t3=class{constructor(t){this.plugin=t;this._providers=[];this.providerMap=new Map;this.defaultProvider=ni.auto;Bi(ni,r=>this.registerPreset(r))}get dataState(){return this.plugin.state.data}resolveProvider(t){return typeof t=="string"?ni[t]??OS(this._providers,r=>r.id===t):t}hasPreset(t){for(let r of this._providers)if(!r.isApplicable||r.isApplicable(t,this.plugin))return!0;return!1}get providers(){return this._providers}getPresets(t){if(!t)return this.providers;let r=[];for(let n of this._providers)n.isApplicable&&!n.isApplicable(t,this.plugin)||r.push(n);return r}getPresetSelect(t){let r=[];for(let n of this._providers)t&&n.isApplicable&&!n.isApplicable(t,this.plugin)||r.push([n.id,n.display.name,n.display.group]);return h.Select("auto",r)}getPresetsWithOptions(t){let r=[],n=Object.create(null);for(let o of this._providers)o.isApplicable&&!o.isApplicable(t,this.plugin)||(r.push([o.id,o.display.name]),n[o.id]=o.params?h.Group(o.params(t,this.plugin)):h.EmptyGroup());return r.length===0?h.MappedStatic("",{"":h.EmptyGroup()}):h.MappedStatic(r[0][0],n,{options:r})}registerPreset(t){if(this.providerMap.has(t.id))throw new Error(`Representation provider with id '${t.id}' already registered.`);this._providers.push(t),this.providerMap.set(t.id,t)}unregisterPreset(t){this.providerMap.delete(t.id),Tf(this._providers,t)}applyPreset(t,r,n){let o=this.resolveProvider(r);if(!o)return;let i=this.plugin.state.data,a=Pn.resolveAndCheck(i,t);if(!a){td||console.warn("Applying structure repr. provider to bad cell.");return}let A=o.params?.(a.obj,this.plugin)||{},s=n||(o.params?h.getDefaultValues(A):{}),c=this.plugin.config.get(jt.Structure.DefaultRepresentationPresetParams);s=h.merge(A,c,s);let l=ve.create(`${o.display.name}`,()=>o.apply(a,s,this.plugin));return this.plugin.runTask(l)}async addRepresentation(t,r,n){let o=this.dataState.build(),i=this.buildRepresentation(o,t,r,n);if(i)return await o.commit(),i}buildRepresentation(t,r,n,o){if(!r)return;let i=Pn.resolveAndCheck(this.dataState,r)?.obj?.data;if(!i)return;let a=OQ(this.plugin,i,n);return o?.tag?t.to(r).applyOrUpdateTagged(o.tag,Xu,a,{state:o?.initialState}).selector:t.to(r).apply(Xu,a,{state:o?.initialState}).selector}};function TU(e){return e}(t=>t.CommonParams=(r,n)=>({modelProperties:h.Optional(h.Group(lt.getParamDefinition(ze.Model.CustomModelProperties,void 0,n))),structureProperties:h.Optional(h.Group(lt.getParamDefinition(ze.Model.CustomStructureProperties,void 0,n))),representationPreset:h.Optional(h.Text("auto"))}))(TU||={});var r3=TU.CommonParams,Fht=(e,t)=>({model:h.Optional(h.Group(lt.getParamDefinition(ze.Model.ModelFromTrajectory,e,t))),showUnitcell:h.Optional(h.Boolean(!1)),structure:h.Optional(Lh.getParams(void 0,"assembly").type),representationPresetParams:h.Optional(h.Group(ri.CommonParams)),...r3(e,t)}),F2e={id:"preset-trajectory-default",display:{name:"Default (Assembly)",group:"Preset",description:"Shows the first assembly or, if that is unavailable, the first model."},isApplicable:e=>!0,params:Fht,async apply(e,t,r){let n=r.builders.structure,o=await n.createModel(e,t.model),i=await n.insertModelProperties(o,t.modelProperties),a=await n.createStructure(i||o,t.structure),A=await n.insertStructureProperties(a,t.structureProperties),s=t.showUnitcell===void 0||t.showUnitcell?await n.tryCreateUnitcell(i,void 0,{isHidden:!0}):void 0,c=t.representationPreset||r.config.get(jt.Structure.DefaultRepresentationPreset)||ni.auto.id,l=await r.builders.structure.representation.applyPreset(A,c,t.representationPresetParams);return{model:o,modelProperties:i,unitcell:s,structure:a,structureProperties:A,representation:l}}},wht=(e,t)=>({useDefaultIfSingleModel:h.Optional(h.Boolean(!1)),representationPresetParams:h.Optional(h.Group(ri.CommonParams)),...r3(e,t)}),Rht={id:"preset-trajectory-all-models",display:{name:"All Models",group:"Preset",description:"Shows all models; colored by trajectory-index."},isApplicable:e=>e.data.frameCount>1,params:wht,async apply(e,t,r){let n=Pn.resolveAndCheck(r.state.data,e)?.obj?.data;if(!n)return{};if(n.frameCount===1&&t.useDefaultIfSingleModel)return F2e.apply(e,t,r);let o=r.builders.structure,i=[],a=[];for(let A=0;A<n.frameCount;A++){let s=await o.createModel(e,{modelIndex:A}),c=await o.insertModelProperties(s,t.modelProperties,{isCollapsed:!0}),l=await o.createStructure(c||s,{name:"model",params:{}}),u=await o.insertStructureProperties(l,t.structureProperties);i.push(s),a.push(l);let g=l.obj?zR(l.obj.data,{elementCountFactor:n.frameCount}):"medium",m=t.representationPreset||r.config.get(jt.Structure.DefaultRepresentationPreset)||ni.auto.id;await o.representation.applyPreset(u,m,{theme:{globalName:"trajectory-index"},quality:g})}return{models:i,structures:a}}},w2e=(e,t)=>({model:h.Optional(h.Group(lt.getParamDefinition(ze.Model.ModelFromTrajectory,e,t))),...r3(e,t)});async function R2e(e,t,r,n){let o=n.builders.structure,i=await o.createModel(t,r.model),a=await o.insertModelProperties(i,r.modelProperties),A=await o.createStructure(a||i,{name:"symmetry",params:e}),s=await o.insertStructureProperties(A,r.structureProperties),c=await o.tryCreateUnitcell(a,void 0,{isHidden:!1}),l=r.representationPreset||n.config.get(jt.Structure.DefaultRepresentationPreset)||ni.auto.id,u=await n.builders.structure.representation.applyPreset(s,l,{theme:{globalName:e.theme}});return{model:i,modelProperties:a,unitcell:c,structure:A,structureProperties:s,representation:u}}var Uht={id:"preset-trajectory-unitcell",display:{name:"Unit Cell",group:"Preset",description:"Shows the fully populated unit cell."},isApplicable:e=>_t.hasCrystalSymmetry(e.data.representative),params:w2e,async apply(e,t,r){return await R2e({ijkMin:B.create(0,0,0),ijkMax:B.create(0,0,0)},e,t,r)}},Lht={id:"preset-trajectory-supercell",display:{name:"Super Cell",group:"Preset",description:"Shows the super cell, i.e. the central unit cell and all adjacent unit cells."},isApplicable:e=>_t.hasCrystalSymmetry(e.data.representative),params:w2e,async apply(e,t,r){return await R2e({ijkMin:B.create(-1,-1,-1),ijkMax:B.create(1,1,1),theme:"operator-hkl"},e,t,r)}},Tht=(e,t)=>({model:h.Optional(h.Group(lt.getParamDefinition(ze.Model.ModelFromTrajectory,e,t))),...r3(e,t)}),Pht={id:"preset-trajectory-crystal-contacts",display:{name:"Crystal Contacts",group:"Preset",description:"Showsasymetric unit and chains from neighbours within 5 \u212B, i.e., symmetry mates."},isApplicable:e=>_t.hasCrystalSymmetry(e.data.representative),params:Tht,async apply(e,t,r){let n=r.builders.structure,o=await n.createModel(e,t.model),i=await n.insertModelProperties(o,t.modelProperties),a=await n.createStructure(i||o,{name:"symmetry-mates",params:{radius:5}}),A=await n.insertStructureProperties(a,t.structureProperties),s=await n.tryCreateUnitcell(i,void 0,{isHidden:!0}),c=t.representationPreset||r.config.get(jt.Structure.DefaultRepresentationPreset)||ni.auto.id,l=await r.builders.structure.representation.applyPreset(A,c,{theme:{globalName:"operator-name",carbonColor:"operator-name",focus:{name:"element-symbol",params:{carbonColor:{name:"operator-name",params:$D.defaultValues}}}}});return{model:o,modelProperties:i,unitcell:s,structure:a,structureProperties:A,representation:l}}},n3={default:F2e,"all-models":Rht,unitcell:Uht,supercell:Lht,crystalContacts:Pht};var o3=class{constructor(t){this.plugin=t;this._providers=[];this.providerMap=new Map;this.defaultProvider=n3.default;Bi(n3,r=>this.registerPreset(r))}resolveProvider(t){return typeof t=="string"?n3[t]??OS(this._providers,r=>r.id===t):t}hasPreset(t){for(let r of this._providers)if(!r.isApplicable||r.isApplicable(t,this.plugin))return!0;return!1}get providers(){return this._providers}getPresets(t){if(!t)return this.providers;let r=[];for(let n of this._providers)n.isApplicable&&!n.isApplicable(t,this.plugin)||r.push(n);return r}getPresetSelect(t){let r=[];for(let n of this._providers)t&&n.isApplicable&&!n.isApplicable(t,this.plugin)||r.push([n.id,n.display.name]);return h.Select("auto",r)}getPresetsWithOptions(t){let r=[],n=Object.create(null);for(let o of this._providers)o.isApplicable&&!o.isApplicable(t,this.plugin)||(r.push([o.id,o.display.name]),n[o.id]=o.params?h.Group(o.params(t,this.plugin)):h.EmptyGroup());return r.length===0?h.MappedStatic("",{"":h.EmptyGroup()}):h.MappedStatic(r[0][0],n,{options:r})}registerPreset(t){if(this.providerMap.has(t.id))throw new Error(`Hierarchy provider with id '${t.id}' already registered.`);this._providers.push(t),this.providerMap.set(t.id,t)}unregisterPreset(t){this.providerMap.delete(t.id),Tf(this._providers,t)}applyPreset(t,r,n){let o=this.resolveProvider(r);if(!o)return;let i=this.plugin.state.data,a=Pn.resolveAndCheck(i,t);if(!a){td||console.warn("Applying hierarchy preset provider to bad cell.");return}let A=n||(o.params?h.getDefaultValues(o.params(a.obj,this.plugin)):{}),s=ve.create(`${o.display.name}`,()=>o.apply(a,A,this.plugin));return this.plugin.runTask(s)}};var i3=class{constructor(t){this.plugin=t;this.hierarchy=new o3(this.plugin);this.representation=new t3(this.plugin)}get dataState(){return this.plugin.state.data}async parseTrajectoryData(t,r){let n=typeof r=="string"?this.plugin.dataFormats.get(r):r;if(!n)throw new Error(`'${r}' is not a supported data format.`);let{trajectory:o}=await n.parse(this.plugin,t);return o}parseTrajectoryBlob(t,r){return this.dataState.build().to(t).apply(ze.Data.ParseBlob,r,{state:{isGhost:!0}}).apply(ze.Model.TrajectoryFromBlob,void 0).commit({revertOnError:!0})}parseTrajectory(t,r){let n=Pn.resolveAndCheck(this.dataState,t);if(!n)throw new Error("Invalid data cell.");return te.Data.Blob.is(n.obj)?this.parseTrajectoryBlob(t,r):this.parseTrajectoryData(t,r)}createModel(t,r,n){return this.dataState.build().to(t).apply(ze.Model.ModelFromTrajectory,r||{modelIndex:0},{state:n}).commit({revertOnError:!0})}insertModelProperties(t,r,n){return this.dataState.build().to(t).apply(ze.Model.CustomModelProperties,r,{state:n}).commit({revertOnError:!0})}tryCreateUnitcell(t,r,n){let o=this.dataState,i=Pn.resolveAndCheck(o,t)?.obj?.data;if(!i)return;let a=Fo.Provider.get(i)?.spacegroup.cell;return Ia.isZero(a)?void 0:o.build().to(t).apply(ze.Representation.ModelUnitcell3D,r,{state:n}).commit({revertOnError:!0})}createStructure(t,r,n,o){let i=this.dataState;if(!r){let A=Pn.resolveAndCheck(i,t);if(A){let s=Fo.Provider.get(A.obj?.data);(!s||s?.assemblies.length===0)&&(r={name:"model",params:{}})}}return i.build().to(t).apply(ze.Model.StructureFromModel,{type:r||{name:"assembly",params:{}}},{state:n,tags:o}).commit({revertOnError:!0})}insertStructureProperties(t,r){return this.dataState.build().to(t).apply(ze.Model.CustomStructureProperties,r).commit({revertOnError:!0})}isComponentTransform(t){return t.transform.transformer===ze.Model.StructureComponent}async tryCreateComponent(t,r,n,o){let i=this.dataState,a=i.build().to(t),A=`structure-component-${n}`,s=a.applyOrUpdateTagged(A,ze.Model.StructureComponent,r,{tags:o?[...o,A]:[A]});await s.commit();let c=s.selector;if(!c.isOk||c.cell?.obj?.data.elementCount===0){await i.build().delete(c.ref).commit();return}return c}tryCreateComponentFromExpression(t,r,n,o){return this.tryCreateComponent(t,{type:{name:"expression",params:r},nullIfEmpty:!0,label:(o?.label||"").trim()},n,o?.tags)}tryCreateComponentStatic(t,r,n){return this.tryCreateComponent(t,{type:{name:"static",params:r},nullIfEmpty:!0,label:(n?.label||"").trim()},`static-${r}`,n?.tags)}tryCreateComponentFromSelection(t,r,n,o){return this.plugin.runTask(ve.create("Query Component",async i=>{let{label:a,tags:A}=o||{};a=(a||"").trim();let s=Pn.resolveAndCheck(this.dataState,t)?.obj?.data;if(!s)return;let c=r.referencesCurrent?{type:{name:"bundle",params:W.Bundle.fromSelection(await r.getSelection(this.plugin,i,s))},nullIfEmpty:!0,label:a||r.label}:{type:{name:"expression",params:r.expression},nullIfEmpty:!0,label:a||r.label};return r.ensureCustomProperties&&await r.ensureCustomProperties({runtime:i,assetManager:this.plugin.managers.asset,errorContext:this.plugin.errorContext},s),this.tryCreateComponent(t,c,n,A)}))}};function ax(e,t){if(e.ext==="bcif")try{let r=g0(t);if(r.encoder.startsWith("VolumeServer"))return"dscif";if(r.encoder.startsWith("volseg-volume-server"))return"segcif";if(a3(r,"_volume_data_3d_info")){if(a3(r,"_volume_data_3d"))return"dscif";if(a3(r,"_segmentation_data_3d"))return"segcif"}if(a3(r,"_refln")&&(U2e(r,"_refln","pdbx_FWT")||U2e(r,"_refln","pdbx_DELFWT")))return"sfcif"}catch(r){console.error(r)}else if(e.ext==="cif"){let r=t;if(r.startsWith(`data_SERVER
|
|
#
|
|
_density_server_result`))return"dscif";if(r.startsWith(`data_SERVER
|
|
#
|
|
data_SEGMENTATION_DATA`))return"segcif";if(xq(r,"volume_data_3d_info")){if(xq(r,"volume_data_3d"))return"dscif";if(xq(r,"segmentation_data_3d"))return"segcif"}if(r.includes("_refln.pdbx_FWT")||r.includes("_refln.pdbx_DELFWT"))return"sfcif";if(r.includes("atom_site_fract_x")||r.includes("atom_site.fract_x"))return"coreCif"}return-1}function xq(e,t){return e.includes(`_${t}.`)}function a3(e,t){for(let r of e.dataBlocks)for(let n of r.categories)if(n.name===t)return!0;return!1}function U2e(e,t,r){for(let n of e.dataBlocks)for(let o of n.categories)if(o.name===t){for(let i of o.columns)if(i.name===r)return!0}return!1}var el="Trajectory";function Yp(e,t){return e.builders.structure.hierarchy.applyPreset(t.trajectory,"default")}var Ght={label:"mmCIF",description:"mmCIF",category:el,stringExtensions:["cif","mmcif","mcif"],binaryExtensions:["bcif"],isApplicable:(e,t)=>e.ext==="mmcif"||e.ext==="mcif"?!0:e.ext==="cif"||e.ext==="bcif"?ax(e,t)===-1:!1,parse:async(e,t,r)=>{let o=e.state.data.build().to(t).apply(ze.Data.ParseCif,void 0,{state:{isGhost:!0}}),i=await o.apply(ze.Model.TrajectoryFromMmCif,void 0,{tags:r?.trajectoryTags}).commit({revertOnError:!0});return(o.selector.cell?.obj?.data.blocks.length||0)>1&&e.state.data.updateCellState(o.ref,{isGhost:!1}),{trajectory:i}},visuals:Yp},Nht={label:"cifCore",description:"CIF Core",category:el,stringExtensions:["cif"],isApplicable:(e,t)=>e.ext==="cif"?ax(e,t)==="coreCif":!1,parse:async(e,t,r)=>{let o=e.state.data.build().to(t).apply(ze.Data.ParseCif,void 0,{state:{isGhost:!0}}),i=await o.apply(ze.Model.TrajectoryFromCifCore,void 0,{tags:r?.trajectoryTags}).commit({revertOnError:!0});return(o.selector.cell?.obj?.data.blocks.length||0)>1&&e.state.data.updateCellState(o.ref,{isGhost:!1}),{trajectory:i}},visuals:Yp};function oC(e,t){return async(r,n,o)=>({trajectory:await r.state.data.build().to(n).apply(e,t,{tags:o?.trajectoryTags}).commit({revertOnError:!0})})}var Mht={label:"PDB",description:"PDB",category:el,stringExtensions:["pdb","ent"],parse:oC(ze.Model.TrajectoryFromPDB),visuals:Yp},kht={label:"PDBQT",description:"PDBQT",category:el,stringExtensions:["pdbqt"],parse:oC(ze.Model.TrajectoryFromPDB,{variant:"pdbqt"}),visuals:Yp},Hht={label:"PQR",description:"PQR",category:el,stringExtensions:["pqr"],parse:oC(ze.Model.TrajectoryFromPDB,{variant:"pqr"}),visuals:Yp},Vht={label:"XYZ",description:"XYZ",category:el,stringExtensions:["xyz"],parse:oC(ze.Model.TrajectoryFromXYZ),visuals:Yp},_ht={label:"Lammps Data",description:"Lammps Data",category:el,stringExtensions:["data"],parse:oC(ze.Model.TrajectoryFromLammpsData),visuals:Yp},Yht={label:"Lammps Trajectory Data",description:"Lammps Trajectory Data",category:el,stringExtensions:["lammpstrj"],parse:oC(ze.Model.TrajectoryFromLammpsTrajData),visuals:Yp},Oht={label:"GRO",description:"GRO",category:el,stringExtensions:["gro"],binaryExtensions:[],parse:oC(ze.Model.TrajectoryFromGRO),visuals:Yp},Jht={label:"MOL",description:"MOL",category:el,stringExtensions:["mol"],parse:oC(ze.Model.TrajectoryFromMOL),visuals:Yp},zht={label:"SDF",description:"SDF",category:el,stringExtensions:["sdf","sd"],parse:oC(ze.Model.TrajectoryFromSDF),visuals:Yp},Kht={label:"MOL2",description:"MOL2",category:el,stringExtensions:["mol2"],parse:oC(ze.Model.TrajectoryFromMOL2),visuals:Yp},A3=[["mmcif",Ght],["cifCore",Nht],["pdb",Mht],["pdbqt",kht],["pqr",Hht],["gro",Oht],["xyz",Vht],["lammps_data",_ht],["lammps_traj_data",Yht],["mol",Jht],["sdf",zht],["mol2",Kht]];function Op(e,t,r={}){let n=r;return typeof n.type=="string"||typeof n.color=="string"||typeof n.size=="string"?jht(e,t||Ze.One,r):L2e(e,t||Ze.One,r)}function jht(e,t,r){let n=r.type&&e.representation.volume.registry.get(r.type)||e.representation.volume.registry.default.provider,o=r.color&&e.representation.volume.themes.colorThemeRegistry.get(r.color)||e.representation.volume.themes.colorThemeRegistry.get(n.defaultColorTheme.name),i=r.size&&e.representation.volume.themes.sizeThemeRegistry.get(r.size)||e.representation.volume.themes.sizeThemeRegistry.get(n.defaultSizeTheme.name);return L2e(e,t,{type:n,typeParams:r.typeParams,color:o,colorParams:r.colorParams,size:i,sizeParams:r.sizeParams})}function L2e(e,t,r={}){let{themes:n}=e.representation.volume,o={volume:t},i=r.type||e.representation.volume.registry.default.provider,a=h.getDefaultValues(i.getParams(n,t)),A=Object.assign(a,r.typeParams),s=r.color||n.colorThemeRegistry.get(i.defaultColorTheme.name),c=h.getDefaultValues(s.getParams(o));s.name===i.defaultColorTheme.name&&Object.assign(c,i.defaultColorTheme.props);let l=Object.assign(c,r.colorParams),u=r.size||n.sizeThemeRegistry.get(i.defaultSizeTheme.name),g=h.getDefaultValues(u.getParams(o));u.name===i.defaultSizeTheme.name&&Object.assign(g,i.defaultSizeTheme.props);let m=Object.assign(g,r.sizeParams);return{type:{name:i.name,params:A},colorTheme:{name:s.name,params:l},sizeTheme:{name:u.name,params:m}}}var T2e;(t=>{function e(r){let{name:n}=r;return{descriptor:r,get(o){return o._propertyData[n]},set(o,i){o.customProperties.add(r),o._propertyData[n]=i}}}t.create=e})(T2e||={});var s3;(r=>(r.Descriptor={name:"recommended_iso_value"},r.Provider=T2e.create(r.Descriptor)))(s3||={});function c3(e,t="x-ray"){if(!e)return t;let r=e.models[0];return sn.is(r.sourceData)?_t.hasEmMap(r)?"em":_t.hasXrayMap(r)?"x-ray":_t.isFromEm(r)?"em":_t.isFromXray(r)?"x-ray":t:t}function Wht(e){let t=[];if(!sn.is(e.sourceData))return[e.entryId];let{db_id:r,db_name:n,content_type:o}=e.sourceData.data.db.pdbx_database_related;if(!n.isDefined)return[e.entryId];for(let i=0,a=n.rowCount;i<a;++i)n.value(i).toUpperCase()==="EMDB"&&o.value(i)==="associated EM volume"&&t.push(r.value(i));return t}function Xht(e){return[e.entryId]}function Sq(e,t){if(!t||!t.models.length)return[];let r=t.models[0];switch(e){case"em":return Wht(r);case"x-ray":return Xht(r)}}async function P2e(e,t,r,n){switch(e){case"emdb":return Dq(t,r,n);case"pdbe":return Zht(t,r,n)}}async function Dq(e,t,r){let n=e.config.get(jt.VolumeStreaming.EmdbHeaderServer),a=(await e.fetch({url:`${n}/${r.toUpperCase()}/header/${r.toLowerCase()}.xml`,type:"xml"}).runInContext(t)).getElementsByTagName("map")[0].getElementsByTagName("contour"),A=a[0];for(let c=1;c<a.length;c++)if(a[c].getAttribute("primary")==="true"){A=a[c];break}return parseFloat(A.getElementsByTagName("level")[0].textContent)}async function Zht(e,t,r){r=r.toUpperCase();let o=(await e.fetch({url:`https://www.ebi.ac.uk/emdb/api/entry/map/${r}`,type:"json"}).runInContext(t))?.map?.contour_list?.contour;return!o||o.length===0?qht(e,t,r):o.find(i=>i.primary)?.level??o[0].level}async function qht(e,t,r){r=r.toUpperCase();let o=(await e.fetch({url:`https://www.ebi.ac.uk/pdbe/api/emdb/entry/map/${r}`,type:"json"}).runInContext(t))?.[r],i;return o?.[0]?.map?.contour_level?.value!==void 0&&(i=+o[0].map.contour_level.value),i}async function G2e(e,t,r){let o=(await e.fetch({url:`https://www.ebi.ac.uk/pdbe/api/pdb/entry/summary/${r}`,type:"json"}).runInContext(t))?.[r],i=[];if(o?.[0]?.related_structures){let a=o[0].related_structures.filter(A=>A.resource==="EMDB"&&A.relationship==="associated EM volume");if(!a.length)throw new Error(`No related EMDB entry found for '${r}'.`);i.push(...a.map(A=>A.accession))}else throw new Error(`No related EMDB entry found for '${r}'.`);return i}var iC="Volume";async function GU(e,t){if(!t)return;let{entryId:r}=t;if(!(!r||!r.toLowerCase().startsWith("emd")))return e.runTask(ve.create("Try Set Recommended IsoValue",async n=>{try{let o=await Dq(e,n,r);s3.Provider.set(t,Ze.IsoValue.absolute(o))}catch(o){console.warn(o)}}))}function N2e(e){let t=s3.Provider.get(e);if(t)return t.kind==="relative"?t:Ze.adjustedIsoValue(e,t.absoluteValue,"absolute")}async function vq(e,t){let r={},n=t.volume.data&&N2e(t.volume.data);return n&&(r.isoValue=n),[await e.build().to(t.volume).apply(ze.Representation.VolumeRepresentation3D,Op(e,t.volume.data,{type:"isosurface",typeParams:r})).commit()]}var $ht={label:"CCP4/MRC/MAP",description:"CCP4/MRC/MAP",category:iC,binaryExtensions:["ccp4","mrc","map"],parse:async(e,t,r)=>{let n=e.build().to(t).apply(ze.Data.ParseCcp4,{},{state:{isGhost:!0}}),o=n.apply(ze.Volume.VolumeFromCcp4,{entryId:r?.entryId}).apply(ze.Volume.CustomVolumeProperties);return await n.commit({revertOnError:!0}),await GU(e,o.selector.data),{format:n.selector,volume:o.selector}},visuals:vq},eyt={label:"DSN6/BRIX",description:"DSN6/BRIX",category:iC,binaryExtensions:["dsn6","brix"],parse:async(e,t,r)=>{let n=e.build().to(t).apply(ze.Data.ParseDsn6,{},{state:{isGhost:!0}}),o=n.apply(ze.Volume.VolumeFromDsn6,{entryId:r?.entryId}).apply(ze.Volume.CustomVolumeProperties);return await n.commit({revertOnError:!0}),await GU(e,o.selector.data),{format:n.selector,volume:o.selector}},visuals:vq},tyt={label:"DX",description:"DX",category:iC,stringExtensions:["dx"],binaryExtensions:["dxbin"],parse:async(e,t,r)=>{let o=e.build().to(t).apply(ze.Data.ParseDx,{},{state:{isGhost:!0}}).apply(ze.Volume.VolumeFromDx,{entryId:r?.entryId}).apply(ze.Volume.CustomVolumeProperties);return await o.commit({revertOnError:!0}),await GU(e,o.selector.data),{volume:o.selector}},visuals:vq},ryt={label:"Cube",description:"Cube",category:iC,stringExtensions:["cub","cube"],parse:async(e,t,r)=>{let n=e.build().to(t).apply(ze.Data.ParseCube,{},{state:{isGhost:!0}}),o=n.apply(ze.Volume.VolumeFromCube,{entryId:r?.entryId}).apply(ze.Volume.CustomVolumeProperties),i=n.apply(ze.Model.TrajectoryFromCube,void 0,{state:{isGhost:!0}}).apply(ze.Model.ModelFromTrajectory).apply(ze.Model.CustomModelProperties).apply(ze.Model.StructureFromModel).apply(ze.Model.CustomStructureProperties);return await n.commit({revertOnError:!0}),await GU(e,o.selector.data),{format:n.selector,volume:o.selector,structure:i.selector}},visuals:async(e,t)=>{let r=e.build(),n=[],o=t.volume.cell?.obj?.data;if(o&&Ze.isOrbitals(o)){let A=r.to(t.volume).apply(ze.Representation.VolumeRepresentation3D,Op(e,o,{type:"isosurface",typeParams:{isoValue:Ze.IsoValue.relative(1),alpha:.4},color:"uniform",colorParams:{value:xt.blue}})),s=r.to(t.volume).apply(ze.Representation.VolumeRepresentation3D,Op(e,o,{type:"isosurface",typeParams:{isoValue:Ze.IsoValue.relative(-1),alpha:.4},color:"uniform",colorParams:{value:xt.red}}));n.push(A.selector,s.selector)}else{let A=r.to(t.volume).apply(ze.Representation.VolumeRepresentation3D,Op(e,o,{type:"isosurface",typeParams:{isoValue:Ze.IsoValue.relative(2),alpha:.4},color:"uniform",colorParams:{value:xt.grey}}));n.push(A.selector)}let i=await e.builders.structure.representation.applyPreset(t.structure,"auto");await r.commit();let a=[];return Bi(i?.representations,A=>{A&&a.push(A)}),[...n,...a]}},nyt={label:"DensityServer CIF",description:"DensityServer CIF",category:iC,stringExtensions:["cif"],binaryExtensions:["bcif"],isApplicable:(e,t)=>ax(e,t)==="dscif",parse:async(e,t,r)=>{let n=await e.build().to(t).apply(ze.Data.ParseCif).commit(),o=e.build().to(n),i=n.obj.data.blocks;if(i.length===0)throw new Error("no data blocks");let a=[],A=0;for(let s of i){if(s.header.toUpperCase()==="SERVER")continue;let c=Array.isArray(r?.entryId)?r?.entryId[A]:r?.entryId;if(s.categories.volume_data_3d_info?.rowCount>0){let l=o.apply(ze.Volume.VolumeFromDensityServerCif,{blockHeader:s.header,entryId:c}).apply(ze.Volume.CustomVolumeProperties);a.push(l.selector),A++}}await o.commit();for(let s of a)await GU(e,s.data);return{volumes:a}},visuals:async(e,t)=>{let{volumes:r}=t,n=e.build(),o=[];if(r.length>0){let i=r[0].data&&N2e(r[0].data)||Ze.IsoValue.relative(1.5);o[0]=n.to(r[0]).apply(ze.Representation.VolumeRepresentation3D,mu.getDefaultParamsStatic(e,"isosurface",{isoValue:i,alpha:1},"uniform",{value:xt.teal})).selector}if(r.length>1){let i=mu.getDefaultParamsStatic(e,"isosurface",{isoValue:Ze.IsoValue.relative(3),alpha:.3},"uniform",{value:xt.green}),a=mu.getDefaultParamsStatic(e,"isosurface",{isoValue:Ze.IsoValue.relative(-3),alpha:.3},"uniform",{value:xt.red});o[o.length]=n.to(r[1]).apply(ze.Representation.VolumeRepresentation3D,i).selector,o[o.length]=n.to(r[1]).apply(ze.Representation.VolumeRepresentation3D,a).selector}return await n.commit(),o}},oyt={label:"Segmentation CIF",description:"Segmentation CIF",category:iC,stringExtensions:["cif"],binaryExtensions:["bcif"],isApplicable:(e,t)=>ax(e,t)==="segcif",parse:async(e,t)=>{let r=await e.build().to(t).apply(ze.Data.ParseCif).commit(),n=e.build().to(r),o=r.obj.data.blocks;if(o.length===0)throw new Error("no data blocks");let i=[];for(let a of o)if(a.header.toUpperCase()!=="SERVER"&&a.categories.volume_data_3d_info?.rowCount>0){let A=n.apply(ze.Volume.VolumeFromSegmentationCif,{blockHeader:a.header}).apply(ze.Volume.CustomVolumeProperties);i.push(A.selector)}return await n.commit(),{volumes:i}},visuals:async(e,t)=>{let{volumes:r}=t,n=e.build(),o=[];return r.length>0&&Ze.Segmentation.get(r[0].data)&&(o[o.length]=n.to(r[0]).apply(ze.Representation.VolumeRepresentation3D,mu.getDefaultParams(e,"segment",r[0].data,{alpha:1,instanceGranularity:!0},"volume-segment",{})).selector),await n.commit(),o}},iyt={label:"Structure Factors CIF",description:"mmCIF structure factor file with reflection data (pdbx_FWT/pdbx_PHWT map coefficients)",category:iC,stringExtensions:["cif"],binaryExtensions:["bcif"],isApplicable:(e,t)=>ax(e,t)==="sfcif",parse:async(e,t,r)=>{let n=await e.build().to(t).apply(ze.Data.ParseCif).commit(),o=e.build().to(n),i=n.obj.data.blocks;if(i.length===0)throw new Error("no data blocks");let a={"2fofc":[],fofc:[]};for(let A of i){let s=A.categories.refln;if(!(s?.rowCount>0))continue;let c=(s.getField("pdbx_FWT")?.rowCount??0)>0&&(s.getField("pdbx_PHWT")?.rowCount??0)>0,l=(s.getField("pdbx_DELFWT")?.rowCount??0)>0&&(s.getField("pdbx_DELPHWT")?.rowCount??0)>0;if(!(!c&&!l)){if(c){let u=o.apply(ze.Volume.VolumeFromStructureFactorsCif,{blockHeader:A.header,entryId:r?.entryId,mapType:"2fo-fc"}).apply(ze.Volume.CustomVolumeProperties);a["2fofc"].push(u.selector)}if(l){let u=o.apply(ze.Volume.VolumeFromStructureFactorsCif,{blockHeader:A.header,entryId:r?.entryId,mapType:"fo-fc"}).apply(ze.Volume.CustomVolumeProperties);a.fofc.push(u.selector)}}}return await o.commit(),{volumes:a}},visuals:async(e,t)=>{let{volumes:r}=t,n=e.build(),o=[];if(r["2fofc"].length>0){let i=Ze.IsoValue.relative(2);o.push(n.to(r["2fofc"][0]).apply(ze.Representation.VolumeRepresentation3D,mu.getDefaultParamsStatic(e,"isosurface",{isoValue:i,alpha:1},"uniform",{value:3367602})).selector)}if(r.fofc.length>0){let i=mu.getDefaultParamsStatic(e,"isosurface",{isoValue:Ze.IsoValue.relative(3),alpha:.3},"uniform",{value:3390259}),a=mu.getDefaultParamsStatic(e,"isosurface",{isoValue:Ze.IsoValue.relative(-3),alpha:.3},"uniform",{value:12268339});o.push(n.to(r.fofc[0]).apply(ze.Representation.VolumeRepresentation3D,i).selector),o.push(n.to(r.fofc[0]).apply(ze.Representation.VolumeRepresentation3D,a).selector)}return await n.commit(),o}},ayt={label:"MTZ",description:"CCP4 MTZ reflection data file with amplitude and phase columns",category:iC,binaryExtensions:["mtz"],isApplicable:(e,t)=>!(t instanceof Uint8Array)||t.length<4?!1:t[0]===77&&t[1]===84&&t[2]===90,parse:async(e,t,r)=>{let n=await e.build().to(t).apply(ze.Data.ParseMtz).commit(),o=e.build().to(n),i=n.obj.data,a=Yxe(i.header);if(a.length===0)throw new Error("MTZ file does not contain any recognised amplitude+phase column pairs (FWT/PHWT, DELFWT/DELPHWT, 2FOFCWT/PH2FOFCWT, FOFCWT/PHFOFCWT).");let A={"2fofc":[],fofc:[]};for(let s of a){let c=o.apply(ze.Volume.VolumeFromMtz,{ampLabel:s.ampLabel,phiLabel:s.phiLabel,entryId:r?.entryId}).apply(ze.Volume.CustomVolumeProperties);s.label==="2fo-fc"?A["2fofc"].push(c.selector):A.fofc.push(c.selector)}return await o.commit(),{volumes:A}},visuals:async(e,t)=>{let{volumes:r}=t,n=e.build(),o=[];if(r["2fofc"].length>0){let i=Ze.IsoValue.relative(2);o.push(n.to(r["2fofc"][0]).apply(ze.Representation.VolumeRepresentation3D,mu.getDefaultParamsStatic(e,"isosurface",{isoValue:i,alpha:1},"uniform",{value:3367602})).selector)}if(r.fofc.length>0){let i=mu.getDefaultParamsStatic(e,"isosurface",{isoValue:Ze.IsoValue.relative(3),alpha:.3},"uniform",{value:3390259}),a=mu.getDefaultParamsStatic(e,"isosurface",{isoValue:Ze.IsoValue.relative(-3),alpha:.3},"uniform",{value:12268339});o.push(n.to(r.fofc[0]).apply(ze.Representation.VolumeRepresentation3D,i).selector),o.push(n.to(r.fofc[0]).apply(ze.Representation.VolumeRepresentation3D,a).selector)}return await n.commit(),o}},M2e=[["ccp4",$ht],["dsn6",eyt],["cube",ryt],["dx",tyt],["dscif",nyt],["segcif",oyt],["sfcif",iyt],["mtz",ayt]];var Fq="Shape",Ayt={label:"PLY",description:"PLY",category:Fq,stringExtensions:["ply"],binaryExtensions:["ply"],parse:async(e,t)=>{let r=e.state.data.build().to(t).apply(ze.Data.ParsePly,{},{state:{isGhost:!0}}),n=r.apply(ze.Shape.ShapeFromPly);return await r.commit(),{format:r.selector,shape:n.selector}},visuals(e,t){return e.state.data.build().to(t.shape).apply(ze.Representation.ShapeRepresentation3D).commit()}},syt={label:"OBJ",description:"OBJ",category:Fq,stringExtensions:["obj"],parse:async(e,t)=>{let r=e.state.data.build().to(t).apply(ze.Data.ParseObj,{},{state:{isGhost:!0}}),n=r.apply(ze.Shape.ShapeFromObj);return await r.commit(),{format:r.selector,shape:n.selector}},visuals(e,t){return e.state.data.build().to(t.shape).apply(ze.Representation.ShapeRepresentation3D).commit()}},cyt={label:"VTP",description:"VTK PolyData (VTP)",category:Fq,binaryExtensions:["vtp"],parse:async(e,t)=>{let r=e.state.data.build().to(t).apply(ze.Data.ParseVtp,{},{state:{isGhost:!0}}),n=r.apply(ze.Shape.ShapeFromVtp);return await r.commit(),{format:r.selector,shape:n.selector}},visuals(e,t){return e.state.data.build().to(t.shape).apply(ze.Representation.ShapeRepresentation3D).commit()}},k2e=[["ply",Ayt],["obj",syt],["vtp",cyt]];var iE="Topology";var lyt={label:"PSF",description:"PSF",category:iE,stringExtensions:["psf"],parse:async(e,t)=>{let r=e.state.data.build().to(t).apply(ze.Data.ParsePsf,{},{state:{isGhost:!0}}),n=r.apply(ze.Model.TopologyFromPsf);return await r.commit(),{format:r.selector,topology:n.selector}}};var uyt={label:"PRMTOP",description:"PRMTOP",category:iE,stringExtensions:["prmtop","parm7"],parse:async(e,t)=>{let r=e.state.data.build().to(t).apply(ze.Data.ParsePrmtop,{},{state:{isGhost:!0}}),n=r.apply(ze.Model.TopologyFromPrmtop);return await r.commit(),{format:r.selector,topology:n.selector}}};var gyt={label:"TOP",description:"TOP",category:iE,stringExtensions:["top"],parse:async(e,t)=>{let r=e.state.data.build().to(t).apply(ze.Data.ParseTop,{},{state:{isGhost:!0}}),n=r.apply(ze.Model.TopologyFromTop);return await r.commit(),{format:r.selector,topology:n.selector}}},H2e=[["psf",lyt],["prmtop",uyt],["top",gyt]];var aC="Coordinates";var myt={label:"DCD",description:"DCD",category:aC,binaryExtensions:["dcd"],parse:(e,t)=>e.state.data.build().to(t).apply(ze.Model.CoordinatesFromDcd).commit()};var dyt={label:"XTC",description:"XTC",category:aC,binaryExtensions:["xtc"],parse:(e,t)=>e.state.data.build().to(t).apply(ze.Model.CoordinatesFromXtc).commit()};var pyt={label:"TRR",description:"TRR",category:aC,binaryExtensions:["trr"],parse:(e,t)=>e.state.data.build().to(t).apply(ze.Model.CoordinatesFromTrr).commit()};var fyt={label:"NCTRAJ",description:"NCTRAJ",category:aC,binaryExtensions:["nc","nctraj"],parse:(e,t)=>e.state.data.build().to(t).apply(ze.Model.CoordinatesFromNctraj).commit()};var Byt={label:"LAMMPSTRAJ",description:"LAMMPSTRAJ",category:aC,stringExtensions:["lammpstrj"],parse:(e,t)=>e.state.data.build().to(t).apply(ze.Model.CoordinatesFromLammpstraj).commit()},V2e=[["dcd",myt],["xtc",dyt],["trr",pyt],["nctraj",fyt],["lammpstrj",Byt]];var l3=class{constructor(){this._list=[];this._map=new Map;this._extensions=void 0;this._binaryExtensions=void 0;this._options=void 0;for(let[t,r]of M2e)this.add(t,r);for(let[t,r]of H2e)this.add(t,r);for(let[t,r]of V2e)this.add(t,r);for(let[t,r]of k2e)this.add(t,r);for(let[t,r]of A3)this.add(t,r)}get types(){return this._list.map(t=>[t.name,t.provider.label])}get extensions(){if(this._extensions)return this._extensions;let t=new Set;return this._list.forEach(({provider:r})=>{r.stringExtensions?.forEach(n=>t.add(n)),r.binaryExtensions?.forEach(n=>t.add(n))}),this._extensions=t,t}get binaryExtensions(){if(this._binaryExtensions)return this._binaryExtensions;let t=new Set;return this._list.forEach(({provider:r})=>r.binaryExtensions?.forEach(n=>t.add(n))),this._binaryExtensions=t,t}get options(){if(this._options)return this._options;let t=[];return this._list.forEach(({name:r,provider:n})=>t.push([r,n.label,n.category||""])),this._options=t,t}_clear(){this._extensions=void 0,this._binaryExtensions=void 0,this._options=void 0}add(t,r){this._clear(),this._list.push({name:t,provider:r}),this._map.set(t,r)}remove(t){this._clear(),this._list.splice(this._list.findIndex(r=>r.name===t),1),this._map.delete(t)}auto(t,r){for(let n=0,o=this.list.length;n<o;++n){let i=this._list[n].provider,a=!1;if((i.binaryExtensions?.includes(t.ext)||i.stringExtensions?.includes(t.ext))&&(a=!0),a&&(!i.isApplicable||i.isApplicable(t,r.data)))return i}}get(t){if(this._map.has(t))return this._map.get(t);throw new Error(`unknown data format name '${t}'`)}get list(){return this._list}};var u3=class extends Ec{constructor(r){super({params:{current:""},animationState:"stopped"});this.context=r;this.map=new Map;this._animations=[];this.currentTime=0;this._params=void 0;this.events={updated:this.ev(),applied:this.ev()};this.isStopped=!0;this.isApplying=!1}get isEmpty(){return this._animations.length===0}get current(){return this._current}get animations(){return this._animations}get isAnimatingStateTransition(){return!!this._current&&this._current.anim.name==="built-in.animate-state-snapshot-transition"}triggerUpdate(){this.events.updated.next(void 0)}triggerApply(){this.events.applied.next(void 0)}getParams(){return this._params||(this._params={current:h.Select(this._animations[0]&&this._animations[0].name,this._animations.map(r=>[r.name,r.display.name]),{label:"Animation"})}),this._params}updateParams(r){if(this.isEmpty)return;this.updateState({params:{...this.state.params,...r}});let n=this.map.get(this.state.params.current);if(!n){ir&&console.warn(`Animation '${this.state.params.current}' not found. State might be from a different plugin instance.`);return}let o=n.params(this.context);this._current={anim:n,params:o,paramValues:h.getDefaultValues(o),state:{},startedTime:-1,lastTime:0},this.triggerUpdate()}updateCurrentParams(r){this.isEmpty||(this._current.paramValues={...this._current.paramValues,...r},this.triggerUpdate())}register(r){if(this.map.has(r.name)){this.context.log.error(`Animation '${r.name}' is already registered.`);return}this._params=void 0,this.map.set(r.name,r),this._animations.push(r),this._animations.length===1?this.updateParams({current:r.name}):this.triggerUpdate()}async play(r,n){await this.stop(),this.map.has(r.name)||this.register(r),this.updateParams({current:r.name}),this.updateCurrentParams(n),await this.start()}async tick(r,n,o){this.currentTime=r,!this.isStopped&&(n||o?await this.applyFrame(o):this.applyAsync())}async start(){this.updateState({animationState:"playing"}),this.context.behaviors.state.isAnimating.value||this.context.behaviors.state.isAnimating.next(!0),this.triggerUpdate();let r=this._current.anim,n=this._current.anim.initialState(this._current.paramValues,this.context);if(r.setup){let o=await r.setup(this._current.paramValues,n,this.context);o&&(n=o)}this._current.lastTime=0,this._current.startedTime=-1,this._current.state=n,this.isStopped=!1}async stop(){if(this.isStopped=!0,this.state.animationState!=="stopped"){let r=this._current.anim;r.teardown&&await r.teardown(this._current.paramValues,this._current.state,this.context),this.updateState({animationState:"stopped"}),this.triggerUpdate()}this.context.behaviors.state.isAnimating.value&&this.context.behaviors.state.isAnimating.next(!1)}stopStateTransitionAnimation(){if(this.isAnimatingStateTransition)return this.stop()}get isAnimating(){return this.state.animationState==="playing"}async applyAsync(){if(!this.isApplying){this.isApplying=!0;try{await this.applyFrame()}finally{this.isApplying=!1}}}async applyFrame(r){let n=this.currentTime;this._current.startedTime<0&&(this._current.startedTime=n);let o=await this._current.anim.apply(this._current.state,{lastApplied:this._current.lastTime,current:n-this._current.startedTime,animation:r},{params:this._current.paramValues,plugin:this.context});o.kind==="finished"?this.stop():o.kind==="next"&&(this._current.state=o.state,this._current.lastTime=n-this._current.startedTime),this.triggerApply()}getSnapshot(){return this.current?{state:this.state,current:{paramValues:this._current.paramValues,state:this._current.anim.stateSerialization?this._current.anim.stateSerialization.toJSON(this._current.state):this._current.state}}:{state:this.state}}setSnapshot(r){this.isEmpty||(this.updateState({animationState:r.state.animationState}),this.updateParams(r.state.params),r.current&&(this.current.paramValues=r.current.paramValues,this.current.state=this._current.anim.stateSerialization?this._current.anim.stateSerialization.fromJSON(r.current.state):r.current.state,this.triggerUpdate(),this.state.animationState==="playing"&&this.resume()))}async resume(){this._current.lastTime=0,this._current.startedTime=-1;let r=this._current.anim;this.context.behaviors.state.isAnimating.value||this.context.behaviors.state.isAnimating.next(!0),r.setup&&await r.setup(this._current.paramValues,this._current.state,this.context),this.isStopped=!1}};var Ax;(r=>{function e(n){return{size:n,matrix:Dn.create(n,n),eigenValues:new Float64Array(n),D:new Float64Array(n),E:new Float64Array(n)}}r.createCache=e;function t(n){Iyt(n.size,n.matrix.data,n.eigenValues,n.D,n.E)}r.compute=t})(Ax||={});function Iyt(e,t,r,n,o){for(let a=0;a<e;a++)o[a]=0;let i=e-1;for(let a=0;a<e;a++)n[a]=t[a*e+i];Cyt(t,n,o,e),hyt(t,n,o,e);for(let a=0;a<e;a++)r[a]=n[a]}function Cyt(e,t,r,n){for(let o=n-1;o>0;o--){let i=0,a=0;for(let A=0;A<o;A++)i=i+Math.abs(t[A]);if(i===0){r[o]=t[o-1];for(let A=0;A<o;A++)t[A]=e[A*n+o-1],e[A*n+o]=0,e[o*n+A]=0}else{for(let l=0;l<o;l++)t[l]/=i,a+=t[l]*t[l];let A=t[o-1],s=Math.sqrt(a);A>0&&(s=-s),r[o]=i*s,a=a-A*s,t[o-1]=A-s;for(let l=0;l<o;l++)r[l]=0;for(let l=0;l<o;l++){A=t[l],e[o*n+l]=A,s=r[l]+e[l*n+l]*A;for(let u=l+1;u<=o-1;u++)s+=e[l*n+u]*t[u],r[u]+=e[l*n+u]*A;r[l]=s}A=0;for(let l=0;l<o;l++)r[l]/=a,A+=r[l]*t[l];let c=A/(a+a);for(let l=0;l<o;l++)r[l]-=c*t[l];for(let l=0;l<o;l++){A=t[l],s=r[l];for(let u=l;u<=o-1;u++)e[l*n+u]-=A*r[u]+s*t[u];t[l]=e[l*n+o-1],e[l*n+o]=0}}t[o]=a}for(let o=0;o<n-1;o++){e[o*n+n-1]=e[o*n+o],e[o*n+o]=1;let i=t[o+1];if(i!==0){for(let a=0;a<=o;a++)t[a]=e[(o+1)*n+a]/i;for(let a=0;a<=o;a++){let A=0;for(let s=0;s<=o;s++)A+=e[(o+1)*n+s]*e[a*n+s];for(let s=0;s<=o;s++)e[a*n+s]-=A*t[s]}}for(let a=0;a<=o;a++)e[(o+1)*n+a]=0}for(let o=0;o<n;o++)t[o]=e[o*n+n-1],e[o*n+n-1]=0;e[n*n-1]=1,r[0]=0}function hyt(e,t,r,n){for(let s=1;s<n;s++)r[s-1]=r[s];r[n-1]=0;let i=0,a=0,A=Math.pow(2,-53);for(let s=0;s<n;s++){a=Math.max(a,Math.abs(t[s])+Math.abs(r[s]));let c=s;for(;c<n&&!(Math.abs(r[c])<=A*a);)c++;if(c>s){let l=0;do{l=l+1;let u=t[s],g=(t[s+1]-u)/(2*r[s]),m=_2e(g,1);g<0&&(m=-m),t[s]=r[s]/(g+m),t[s+1]=r[s]*(g+m);let p=t[s+1],d=u-t[s];for(let b=s+2;b<n;b++)t[b]-=d;i=i+d,g=t[c];let f=1,I=f,C=f,y=r[s+1],Q=0,E=0;for(let b=c-1;b>=s;b--){C=I,I=f,E=Q,u=f*r[b],d=f*g,m=_2e(g,r[b]),r[b+1]=Q*m,Q=r[b]/m,f=g/m,g=f*t[b]-Q*u,t[b+1]=d+Q*(f*u+Q*t[b]);for(let x=0;x<n;x++)d=e[(b+1)*n+x],e[(b+1)*n+x]=Q*e[b*n+x]+f*d,e[b*n+x]=f*e[b*n+x]-Q*d}if(g=-Q*E*C*y*r[s]/p,r[s]=Q*g,t[s]=f*g,l>=1e3)throw new Error("SVD: Not converging.")}while(Math.abs(r[s])>A*a)}t[s]=t[s]+i,r[s]=0}for(let s=0;s<n-1;s++){let c=s,l=t[s];for(let u=s+1;u<n;u++)t[u]<l&&(c=u,l=t[u]);if(c!==s){t[c]=t[s],t[s]=l;for(let u=0;u<n;u++)l=e[s*n+u],e[s*n+u]=e[c*n+u],e[c*n+u]=l}}}function _2e(e,t){return Math.sqrt(e*e+t*t)}function yyt(e,t){if(Array.isArray(e))for(let r of e)t(r[0],r[1],r[2]);else{let{x:r,y:n,z:o}=e,i=Math.min(r.length,n.length,o.length);for(let a=0;a<i;a++)t(r[a],n[a],o[a])}}function Y2e(e,t={}){let r=t.origin,n=t.minDistance??1e-6,o=n*n,i=t.sigma,a=i!==void 0&&i>0,A=a?2*i*i:1,s=Ax.createCache(3),c=s.matrix;Dn.makeZero(c);let l=B.zero(),u=0,g=0;if(yyt(e,(p,d,f)=>{let I=p,C=d,y=f;r&&(I-=r[0],C-=r[1],y-=r[2]);let Q=I*I+C*C+y*y;if(Q<=o)return;let b=1/Math.sqrt(Q);I*=b,C*=b,y*=b;let x=a?Math.exp(-Q/A):1;Dn.add(c,0,0,x*I*I),Dn.add(c,0,1,x*I*C),Dn.add(c,0,2,x*I*y),Dn.add(c,1,0,x*C*I),Dn.add(c,1,1,x*C*C),Dn.add(c,1,2,x*C*y),Dn.add(c,2,0,x*y*I),Dn.add(c,2,1,x*y*C),Dn.add(c,2,2,x*y*y),l[0]+=x*I,l[1]+=x*C,l[2]+=x*y,u++,g+=x}),u===0||g<=0)return;Ax.compute(s);let m=B.create(Dn.get(c,0,0),Dn.get(c,1,0),Dn.get(c,2,0));if(!(B.magnitude(m)<1e-6))return B.normalize(m,m),B.dot(m,l)>0&&B.scale(m,m,-1),m}function O2e(e,t,r){let n=r[0],o=r[1],i=r[2],a=-n*t[0]-o*t[1]-i*t[2],A=e[0],s=e[1],c=e[2];return(n*A+o*s+i*c+a)/Math.sqrt(n*n+o*o+i*i)}function Qyt(e,t,r,n){let o=O2e(e,t,n);return{aroundX:O2e(e,t,r)<0,aroundY:o<0}}function J2e(e,t,r){if(!e.canvas3d)return;let{origin:n,dirA:o,dirB:i,dirC:a}=r.principalAxes.boxAxes,A=B.clone(o),s=B.clone(a);if(r.positionToFlip){let{aroundX:l,aroundY:u}=Qyt(r.positionToFlip,n,A,i);l&&(B.negate(s,s),B.negate(A,A)),u&&B.negate(s,s)}let c=B.scale(B(),n,-100);return B.dot(c,A)<=0&&B.negate(s,s),B.dot(B.unitY,s)<=0&&B.negate(A,A),e.canvas3d.camera.getFocus(n,t,A,s,Io.createDefaultSnapshot())}function z2e(e,t){if(!e.canvas3d)return;let r=t.targets?.map(o=>{if(o.center!==void 0&&o.radius!==void 0)return we.create(o.center,o.radius);let i=o.targetRef!==void 0?wq(e,o.targetRef):sx(e);if(!i)return;let a=o.center??i.center,A=o.radius??i.radius*(o.radiusFactor??1)+(o.extraRadius??0);return we.create(a,A)}).filter(o=>o!==void 0),n=r&&r.length>0?Rq(r):sx(e);return byt(e.canvas3d.camera,{center:n.center,radius:Math.max(n.radius,t.minRadius??0),up:t.up,direction:t.direction})}var Eyt=B();function byt(e,t){let r=t.center,n=Math.max(t.radius,.01),o=t.direction??B.sub(B(),e.target,e.position),i=B.orthogonalize(B(),o,t.up??e.up),a=e.getTargetDistance(n),A=B.setMagnitude(Eyt,o,a),s=B.sub(B(),r,A);return{target:r,position:s,up:i,radius:n}}function wq(e,t){let r=K2e([],e,t);if(r.length!==0)return r.length===1?r[0]:Rq(r)}function K2e(e,t,r){let n=t.state.data.cells.get(r),o=xyt(t,n);return o?e.push(...o):t.state.data.tree.children.get(r).forEach(a=>K2e(e,t,a)),e}function xyt(e,t){let r=t?.obj;if(r){if(!r.data){console.warn("Focus: no data");return}if(r.data instanceof Ye){let o=fr.getDecorated(e.state.data,t.transform.ref)?.obj?.data??r?.data;if(o.isEmpty)return[];let i=pr.getBoundingSphere(Ye.Loci(o));return i?[i]:[]}else if(te.isRepresentation3D(r)){let n=[];for(let o of r.data.repr.renderObjects){let i=o.values.boundingSphere.ref.value;i.radius>0&&n.push(i)}return n}}}function sx(e){let r=Syt(e,!1).map(n=>n.values.boundingSphere.ref.value).filter(n=>n.radius>0);return Rq(r)}function Syt(e,t){let r=Array.from(e.state.data.cells.values()).filter(o=>o.obj&&te.isRepresentation3D(o.obj));return t||(r=r.filter(o=>!o.state.isHidden)),r.flatMap(o=>o.obj.data.repr.renderObjects)}var pF;function Rq(e){pF??=new qi("98"),pF.reset();for(let t of e)pF.includeSphere(t);pF.finishedIncludeStep();for(let t of e)pF.radiusSphere(t);return pF.getSphere()}var Dyt=3,AC={identity:Ht.create(1,0,0,0,1,0,0,0,1),rotX90:Ht.create(1,0,0,0,0,1,0,-1,0),rotY90:Ht.create(0,0,-1,0,1,0,1,0,0),rotZ90:Ht.create(0,1,0,-1,0,0,0,0,1),rotX270:Ht.create(1,0,0,0,0,-1,0,1,0),rotY270:Ht.create(0,0,1,0,1,0,-1,0,0),rotZ270:Ht.create(0,-1,0,1,0,0,0,0,1),rotX180:Ht.create(1,0,0,0,-1,0,0,0,-1),rotY180:Ht.create(-1,0,0,0,1,0,0,0,-1),rotZ180:Ht.create(-1,0,0,0,-1,0,0,0,1)};function j2e(e,t){let r=Fyt(e,Dyt);return vyt(r,t)}function vyt(e,t){if(e.length===0)return console.warn("Skipping PCA, no atoms"),{rotation:AC.identity,origin:B.zero()};let r=ru.calculateMomentsAxes(e),n=ru.calculateNormalizedAxes(r),o=Lyt(n.dirA,n.dirB,n.dirC);Tyt(o);let i=t?wyt(o,t):Ryt(e,o,r.origin);return Ht.mul(o,i,o),{rotation:o,origin:n.origin}}function Fyt(e,t){let r;return r=Uq(e,{onlyTrace:!0}),r.length>=3*t||(r=Uq(e,{skipHydrogens:!0,skipWater:!0}),r.length>=3*t)||(r=Uq(e,{})),r}function Uq(e,t){let{onlyTrace:r,skipHydrogens:n,skipWater:o}=t,{x:i,y:a,z:A,type_symbol:s,label_comp_id:c}=Ke.atom,l=[];for(let u of e){let g=W.Location.create(u);for(let m of u.units){g.unit=m;let p=r?m.polymerElements:m.elements;for(let d=0;d<p.length;d++)g.element=p[d],!(n&&s(g)==="H")&&(o&&c(g)==="HOH"||l.push(i(g),a(g),A(g)))}}return l}function wyt(e,t){let r=AC.identity,n=0,o=Ht();for(let i of[AC.identity,AC.rotX180,AC.rotY180,AC.rotZ180]){let a=Ht.innerProduct(Ht.mul(o,i,e),t);a>n&&(r=i,n=a)}return r}function Ryt(e,t,r){let n=B.create(Ht.getValue(t,0,0),Ht.getValue(t,0,1),Ht.getValue(t,0,2)),o=B.create(Ht.getValue(t,1,0),Ht.getValue(t,1,1),Ht.getValue(t,1,2)),i=B.create(Ht.getValue(t,2,0),Ht.getValue(t,2,1),Ht.getValue(t,2,2)),a=Math.floor(e.length/3),A=B(),s=0,c=0,l=0;for(let m=0;m<a;m++)B.fromArray(A,e,3*m),B.sub(A,A,r),s+=m*B.dot(A,n),c+=m*B.dot(A,o),l+=Uyt(m,a)*B.dot(A,i);let u=l<0,g=u?s+c<0:s-c<0;return g&&u?AC.rotY180:u?AC.rotX180:g?AC.rotZ180:AC.identity}function Uyt(e,t){let r=Math.floor(t/2);return e<r?t%2?r-e:r-e-1:e-r}function Lyt(e,t,r){let n=Ht();return Ht.setValue(n,0,0,e[0]),Ht.setValue(n,0,1,e[1]),Ht.setValue(n,0,2,e[2]),Ht.setValue(n,1,0,t[0]),Ht.setValue(n,1,1,t[1]),Ht.setValue(n,1,2,t[2]),Ht.setValue(n,2,0,r[0]),Ht.setValue(n,2,1,r[1]),Ht.setValue(n,2,2,r[2]),n}function Tyt(e){Ht.determinant(e)<0&&(Ht.setValue(e,2,0,-Ht.getValue(e,2,0)),Ht.setValue(e,2,1,-Ht.getValue(e,2,1)),Ht.setValue(e,2,2,-Ht.getValue(e,2,2)))}function Lq(e,t){let r=Ht.invert(Ht(),t),n=B.distance(e.position,e.target),o=B.transformMat3(B(),B.create(0,0,n),r),i=B.transformMat3(B(),B.create(0,1,0),r),a=B.add(B(),e.target,o);return{...e,position:a,up:i}}var cx={minRadius:1,extraRadius:4,durationMs:250,zoomOut:!1,zoomOutOptions:{durationFactor:3.5}},Pyt={...cx,optimizeDirection:!1,optimizeDirectionUp:"current"},g3=class{constructor(t){this.plugin=t;this.boundaryHelper=new qi("98")}transformedLoci(t){if(W.Loci.is(t)){let r=this.plugin.helpers.substructureParent.get(t.structure)?.obj?.data;r&&(t=W.Loci.remap(t,r))}return t}focusRenderObjects(t,r){if(!t)return;let n=[];for(let o of t){let i=o.values.boundingSphere.ref.value;i.radius!==0&&n.push(i)}this.focusSpheres(n,o=>o,r)}getFocusSphere(t){let r;if(Array.isArray(t)&&t.length>1){let n=[];for(let o of t){let i=pr.getBoundingSphere(this.transformedLoci(o));i&&n.push(i)}if(n.length===0)return;this.boundaryHelper.reset();for(let o of n)this.boundaryHelper.includeSphere(o);this.boundaryHelper.finishedIncludeStep();for(let o of n)this.boundaryHelper.radiusSphere(o);r=this.boundaryHelper.getSphere()}else if(Array.isArray(t)){if(t.length===0)return;r=pr.getBoundingSphere(this.transformedLoci(t[0]))}else r=pr.getBoundingSphere(this.transformedLoci(t));return r}focusLociOptimized(t,r){let{canvas3d:n}=this.plugin;if(!n)return;let o=this.getFocusSphere(t);if(!o)return;let i=Array.isArray(t)?t:[t],a={x:[],y:[],z:[]},A=B(),{extraRadius:s,minRadius:c}={...cx,...r},l=Math.max(o.radius+s,c);if(l<=.001)return this.getFocusSphereSnapshot(o,r);let u=Ke.entity.type;for(let p of i){if(!W.Loci.is(p))continue;let d=W.Loci.extendToRadius(p,l);W.Loci.forEachLocation(d,f=>{u(f)!=="water"&&(f.unit.conformation.position(f.element,A),a.x.push(A[0]),a.y.push(A[1]),a.z.push(A[2]))})}if(a.x.length===0)return this.getFocusSphereSnapshot(o,r);let g=Y2e(a,{origin:o.center,minDistance:.001,sigma:o.radius});if(!g)return this.getFocusSphereSnapshot(o,r);B.negate(g,g);let m=r?.optimizeDirectionUp==="default"?B.unitY:B.is(r?.optimizeDirectionUp)?r.optimizeDirectionUp:void 0;return m?n.camera.getInvariantFocus(o.center,l,m,g):n.camera.getFocus(o.center,l,void 0,g)}focusLociBase(t,r){let n=this.getFocusSphere(t);if(n)return this.getFocusSphereSnapshot(n,r)}focusLoci(t,r){if(!this.plugin.canvas3d)return;let n={...Pyt,...r},o;n.optimizeDirection?o=this.focusLociOptimized(t,n):o=this.focusLociBase(t,n),this.focusSnapshot(o,n)}focusSpheres(t,r,n){let o=[];for(let i of t){let a=r(i);a&&o.push(a)}if(o.length!==0){if(o.length===1)return this.focusSphere(o[0],n);this.boundaryHelper.reset();for(let i of o)this.boundaryHelper.includeSphere(i);this.boundaryHelper.finishedIncludeStep();for(let i of o)this.boundaryHelper.radiusSphere(i);this.focusSphere(this.boundaryHelper.getSphere(),n)}}getFocusSphereSnapshot(t,r){let{canvas3d:n}=this.plugin;if(!n)return;let{extraRadius:o,minRadius:i}={...cx,...r},a=Math.max(t.radius+o,i);return r?.principalAxes?J2e(this.plugin,a,r):n.camera.getFocus(t.center,a)}focusSnapshot(t,r){if(!this.plugin.canvas3d||!t)return;let n=r?.durationMs??cx.durationMs;if(!r?.zoomOut){this.plugin.canvas3d.requestCameraReset({snapshot:t,durationMs:n});return}let o=this.plugin.canvas3d.boundingSphere,i=this.getFocusSphereSnapshot(o,r),a=this.plugin.canvas3d?.camera.getSnapshot(),A=B.distance(a.position,i.position),s=B.distance(i.position,t.position),c=A/(A+s),u=1+(r?.zoomOutOptions?.durationFactor??cx.zoomOutOptions.durationFactor)*Math.min(c,.5);this.plugin.canvas3d.requestCameraReset({snapshot:t,durationMs:u*n,keyframes:c>.05?[{t:c,snapshot:i,easing:"cubic-out"},{t:1,snapshot:t,easing:"cubic-in"}]:void 0})}focusSphere(t,r){let{canvas3d:n}=this.plugin;if(!n)return;let o=this.getFocusSphereSnapshot(t,r);o&&this.focusSnapshot(o,r)}focusObject(t){if(!this.plugin.canvas3d)return;let r=z2e(this.plugin,{...t,targets:t.targets?.map(n=>({...n,extraRadius:n.extraRadius??cx.extraRadius})),minRadius:t.minRadius??cx.minRadius});this.focusSnapshot(r,t)}orientAxes(t,r){if(!this.plugin.canvas3d)return;t||(t=this.plugin.state.data.selectQ(A=>A.ofType(te.Molecule.Structure)).filter(A=>A.obj&&!A.transform.transformer.definition.isDecorator&&!A.obj.data.parent).map(A=>A.obj?.data).filter(A=>!!A));let{rotation:n}=j2e(t),o=Lq(this.plugin.canvas3d.camera.getSnapshot(),n);this.setSnapshot(o,r)}resetAxes(t){if(!this.plugin.canvas3d)return;let r=Lq(this.plugin.canvas3d.camera.getSnapshot(),Ht.Identity);this.setSnapshot(r,t)}setSnapshot(t,r){this.plugin.canvas3d?.requestCameraReset({snapshot:t,durationMs:r})}reset(t,r){this.plugin.canvas3d?.requestCameraReset({snapshot:t,durationMs:r})}};var aE=class e extends Ec{constructor(r,n={}){super({props:{...h.getDefaultValues(e.Params),...n}});this.plugin=r;this._props=h.getDefaultValues(e.Params);this.events={propsUpdated:this.ev()};this.lociSelects=new e.LociSelectManager(r,this._props),this.lociHighlights=new e.LociHighlightManager(r,this._props)}get props(){return{...this.state.props}}setProps(r){let n=this.props,o={...this.state.props,...r};Ny(n,o)||(this.updateState({props:o}),this.lociSelects.setProps(o),this.lociHighlights.setProps(o),this.events.propsUpdated.next(void 0))}dispose(){super.dispose(),this.lociSelects.dispose(),this.lociHighlights.dispose()}};(o=>{o.Params={granularity:h.Select("residue",pr.GranularityOptions,{label:"Picking Level",description:"Controls if selections are expanded upon picking to whole residues, chains, structures, instances, or left as atoms and coarse elements"})};class t{constructor(a,A={}){this.ctx=a;this.providers=[];this.props=h.getDefaultValues(o.Params);this.sel=a.managers.structure.selection,this.setProps(A)}setProps(a){Object.assign(this.props,a)}addProvider(a){this.providers.push(a)}removeProvider(a){this.providers=this.providers.filter(A=>A!==a)}normalizedLoci(a,A,s=!1){let{loci:c,repr:l}=a,u=A?this.props.granularity:void 0;return{loci:pr.normalize(c,u,s),repr:l}}mark(a,A,s=!1){if(!pr.isEmpty(a.loci))for(let c of this.providers)c(a,A,s)}dispose(){this.providers.length=0,this.sel.dispose()}}o.LociMarkManager=t;class r extends t{constructor(){super(...arguments);this.prev=[];this.clearHighlights=(A=!1)=>{for(let s of this.prev)this.mark(s,2,A);this.prev.length=0}}isHighlighted(A){for(let s of this.prev)if(Xt.Loci.areEqual(s,A))return!0;return!1}addHighlight(A){this.mark(A,1),this.prev.push(A)}highlight(A,s=!0){let c=this.normalizedLoci(A,s);this.isHighlighted(c)||this.addHighlight(c)}highlightOnly(A,s=!0){let c=this.normalizedLoci(A,s);this.isHighlighted(c)||(pr.isEmpty(c.loci)?this.clearHighlights():(this.clearHighlights(!0),this.addHighlight(c)))}highlightOnlyExtend(A,s=!0){let c=this.normalizedLoci(A,s);if(W.Loci.is(c.loci)){let u={loci:(this.ctx.selectionMode?this.sel.tryGetRange(c.loci):this.ctx.managers.structure.focus.tryGetRange(c.loci))??c.loci,repr:c.repr};this.isHighlighted(u)||(pr.isEmpty(u.loci)?this.clearHighlights():(this.clearHighlights(!0),this.addHighlight(u)))}}dispose(){super.dispose(),this.prev.length=0}}o.LociHighlightManager=r;class n extends t{toggle(a,A=!0){if(pr.isEmpty(a.loci))return;let s=this.normalizedLoci(a,A,!0);W.Loci.is(s.loci)?this.toggleSel(s):super.mark(s,16)}toggleExtend(a,A=!0){if(pr.isEmpty(a.loci))return;let s=this.normalizedLoci(a,A,!0);if(W.Loci.is(s.loci)){let c=this.sel.tryGetRange(s.loci)||s.loci;this.toggleSel({loci:c,repr:s.repr})}}select(a,A=!0){let s=this.normalizedLoci(a,A,!0);W.Loci.is(s.loci)&&this.sel.modify("add",s.loci),this.mark(s,4)}selectJoin(a,A=!0){let s=this.normalizedLoci(a,A,!0);W.Loci.is(s.loci)&&this.sel.modify("intersect",s.loci),this.mark(s,4)}selectOnly(a,A=!0){let s=this.normalizedLoci(a,A,!0);W.Loci.is(s.loci)&&(this.mark({loci:Ye.Loci(s.loci.structure),repr:s.repr},8),this.sel.modify("set",s.loci)),this.mark(s,4)}deselect(a,A=!0){let s=this.normalizedLoci(a,A,!0);W.Loci.is(s.loci)&&this.sel.modify("remove",s.loci),this.mark(s,8)}deselectAll(){this.sel.clear(),this.mark({loci:Bp},8)}deselectAllOnEmpty(a){ga(a.loci)&&this.deselectAll()}mark(a,A){let{loci:s}=a;if(!pr.isEmpty(s))if(W.Loci.is(s)){let c=this.sel.getLoci(s.structure);super.mark({loci:Ye.Loci(s.structure)},8,!pr.isEmpty(c)),super.mark({loci:c},4)}else super.mark(a,A)}toggleSel(a){this.sel.has(a.loci)?(this.sel.modify("remove",a.loci),this.mark(a,8)):(this.sel.modify("add",a.loci),this.mark(a,4))}}o.LociSelectManager=n})(aE||={});var m3=class{constructor(t){this.ctx=t;this.providers=[];this.locis=[];this.isDirty=!1;this.labels=[];this.groupedLabels=new Map;t.managers.interactivity.lociHighlights.addProvider((r,n,o)=>{this.providers.length!==0&&(this.mark(r,n),o||this.showLabels())})}clearProviders(){this.providers=[],this.isDirty=!0,this.showLabels()}addProvider(t){this.providers.push(t),this.providers.sort((r,n)=>(n.priority||0)-(r.priority||0)),this.isDirty=!0,this.showLabels()}removeProvider(t){this.providers=this.providers.filter(r=>r!==t),this.isDirty=!0,this.showLabels()}mark(t,r){let n=this.locis.findIndex(o=>Xt.Loci.areEqual(t,o));n===-1&&r===1?(this.locis.push(t),this.isDirty=!0):n!==-1&&r===2&&(Vy(this.locis,n),this.isDirty=!0)}showLabels(){this.ctx.behaviors.labels.highlight.next({labels:this.getLabels()})}getLabels(){if(this.isDirty){this.groupedLabels.clear(),this.labels.length=0;for(let t of this.providers)for(let r of this.locis){if(pr.isEmpty(r.loci))continue;let n=t.label(r.loci,r.repr);if(n){let o=t.group?t.group(n):n.toString(),i=this.groupedLabels.get(o);i?i.push(n):this.groupedLabels.set(o,[n])}}this.labels.length=0,this.groupedLabels.forEach((t,r)=>{let n=t.length,o=n>1&&t[0]!==t[1]?r:t[0];this.labels.push(n===1?o:`${o} <small>|| \xD7 ${n}</small>`)}),this.isDirty=!1}return this.labels}};var X2e="overpaint-controls";async function Tq(e,t,r,n,o){await Gyt(e,t,async(i,a,A)=>{if(o&&o.length>0&&!o.includes(a.params.values.type.name))return;let s=a.obj.data.sourceData,c=await n(s.root);if(pr.isEmpty(c)||ga(c))return;let l={bundle:W.Bundle.fromLoci(c),color:r===-1?0:r,clear:r===-1};if(A){let u=[...A.params.values.layers,l],g=W2e(u,s);i.to(A).update(cs.toBundle(g))}else{let u=W2e([l],s);i.to(a.transform.ref).apply(ze.Representation.OverpaintStructureRepresentation3DFromBundle,cs.toBundle(u),{tags:X2e})}})}async function Gyt(e,t,r){let n=e.state.data,o=n.build();for(let i of t)for(let a of i.representations){let A=n.select(fr.Generators.ofTransformer(ze.Representation.OverpaintStructureRepresentation3DFromBundle,a.cell.transform.ref).withTag(X2e));await r(o,a.cell,A[0])}return o.commit({doNotUpdateCurrent:!0})}function W2e(e,t){let r=cs.ofBundle(e,t.root),n=cs.merge(r);return cs.filter(n,t)}var q2e="clipping-controls";async function $2e(e,t,r,n,o){await Nyt(e,t,async(i,a,A)=>{if(o&&o.length>0&&!o.includes(a.params.values.type.name))return;let s=a.obj.data.sourceData,c=await n(s.root);if(pr.isEmpty(c)||ga(c))return;let l={bundle:W.Bundle.fromLoci(c),groups:r};if(A){let u=[...A.params.values.layers,l],g=Z2e(u,s);i.to(A).update(si.toBundle(g))}else{let u=Z2e([l],s);i.to(a.transform.ref).apply(ze.Representation.ClippingStructureRepresentation3DFromBundle,si.toBundle(u),{tags:q2e})}})}async function Nyt(e,t,r){let n=e.state.data,o=n.build();for(let i of t)for(let a of i.representations){let A=n.select(fr.Generators.ofTransformer(ze.Representation.ClippingStructureRepresentation3DFromBundle,a.cell.transform.ref).withTag(q2e));await r(o,a.cell,A[0])}return o.commit({doNotUpdateCurrent:!0})}function Z2e(e,t){let r=si.ofBundle(e,t.root),n=si.merge(r);return si.filter(n,t)}var tRe="transparency-controls";async function rRe(e,t,r,n,o){await Myt(e,t,async(i,a,A)=>{if(o&&o.length>0&&!o.includes(a.params.values.type.name))return;let s=a.obj.data.sourceData,c=await n(s.root);if(pr.isEmpty(c)||ga(c))return;let l={bundle:W.Bundle.fromLoci(c),value:r};if(A){let u=[...A.params.values.layers,l],g=eRe(u,s);i.to(A).update(ls.toBundle(g))}else{let u=eRe([l],s);i.to(a.transform.ref).apply(ze.Representation.TransparencyStructureRepresentation3DFromBundle,ls.toBundle(u),{tags:tRe})}})}async function Myt(e,t,r){let n=e.state.data,o=n.build();for(let i of t)for(let a of i.representations){let A=n.select(fr.Generators.ofTransformer(ze.Representation.TransparencyStructureRepresentation3DFromBundle,a.cell.transform.ref).withTag(tRe));await r(o,a.cell,A[0])}return o.commit({doNotUpdateCurrent:!0})}function eRe(e,t){let r=ls.ofBundle(e,t.root),n=ls.merge(r);return ls.filter(n,t)}var oRe="substance-controls";async function Pq(e,t,r,n,o){await kyt(e,t,async(i,a,A)=>{if(o&&o.length>0&&!o.includes(a.params.values.type.name))return;let s=a.obj.data.sourceData,c=await n(s.root);if(pr.isEmpty(c)||ga(c))return;let l={bundle:W.Bundle.fromLoci(c),material:r??Va(),clear:!r};if(A){let u=[...A.params.values.layers,l],g=nRe(u,s);i.to(A).update(us.toBundle(g))}else{let u=nRe([l],s);i.to(a.transform.ref).apply(ze.Representation.SubstanceStructureRepresentation3DFromBundle,us.toBundle(u),{tags:oRe})}})}async function kyt(e,t,r){let n=e.state.data,o=n.build();for(let i of t)for(let a of i.representations){let A=n.select(fr.Generators.ofTransformer(ze.Representation.SubstanceStructureRepresentation3DFromBundle,a.cell.transform.ref).withTag(oRe));await r(o,a.cell,A[0])}return o.commit({doNotUpdateCurrent:!0})}function nRe(e,t){let r=us.ofBundle(e,t.root),n=us.merge(r);return us.filter(n,t)}var aRe="emissive-controls";async function ARe(e,t,r,n,o){await Hyt(e,t,async(i,a,A)=>{if(o&&o.length>0&&!o.includes(a.params.values.type.name))return;let s=a.obj.data.sourceData,c=await n(s.root);if(pr.isEmpty(c)||ga(c))return;let l={bundle:W.Bundle.fromLoci(c),value:r};if(A){let u=[...A.params.values.layers,l],g=iRe(u,s);i.to(A).update(gs.toBundle(g))}else{let u=iRe([l],s);i.to(a.transform.ref).apply(ze.Representation.EmissiveStructureRepresentation3DFromBundle,gs.toBundle(u),{tags:aRe})}})}async function Hyt(e,t,r){let n=e.state.data,o=n.build();for(let i of t)for(let a of i.representations){let A=n.select(fr.Generators.ofTransformer(ze.Representation.EmissiveStructureRepresentation3DFromBundle,a.cell.transform.ref).withTag(aRe));await r(o,a.cell,A[0])}return o.commit({doNotUpdateCurrent:!0})}function iRe(e,t){let r=gs.ofBundle(e,t.root),n=gs.merge(r);return gs.filter(n,t)}var Nq="wiggle-controls";async function sRe(e,t,r,n,o){await kq(e,t,async(i,a,A)=>{if(o&&o.length>0&&!o.includes(a.params.values.type.name))return;let s=a.obj.data.sourceData,c=await n(s.root);if(pr.isEmpty(c)||ga(c))return;let l={bundle:W.Bundle.fromLoci(c),value:r};if(A){let u=[...A.params.values.layers,l],g=Gq(u,s);i.to(A).update(RA.toBundle(g))}else{let u=Gq([l],s);i.to(a.transform.ref).apply(ze.Representation.WiggleStructureRepresentation3DFromBundle,RA.toBundle(u),{tags:Nq})}})}async function Mq(e,t,r){await kq(e,t,async(n,o,i)=>{r&&r.length>0&&!r.includes(o.params.values.type.name)||i&&n.delete(i.transform.ref)})}async function kq(e,t,r){let n=e.state.data,o=n.build();for(let i of t)for(let a of i.representations){let A=n.select(fr.Generators.ofTransformer(ze.Representation.WiggleStructureRepresentation3DFromBundle,a.cell.transform.ref).withTag(Nq));await r(o,a.cell,A[0])}return o.commit({doNotUpdateCurrent:!0})}function Gq(e,t){let r=RA.ofBundle(e,t.root),n=RA.merge(r);return RA.filter(n,t)}function cRe(e,t){return ge.isAtomic(e)?e.model.atomicConformation.B_iso_or_equiv.value(t):ge.isSpheres(e)?e.model.coarseConformation.spheres.rmsf[t]:0}function Vyt(e){let t=1/0,r=-1/0;for(let n of e.units){let o=n.elements;for(let i=0,a=o.length;i<a;i++){let A=cRe(n,o[i]);A<t&&(t=A),A>r&&(r=A)}}return isFinite(t)||(t=0),isFinite(r)||(r=0),{min:t,max:r}}async function lRe(e,t,r=1,n){await kq(e,t,async(o,i,a)=>{if(n&&n.length>0&&!n.includes(i.params.values.type.name))return;let A=i.obj.data.sourceData,s=A.root,{min:c,max:l}=Vyt(s),u=l-c;if(u<=0)return;let g=new Map;for(let d of s.units){let f=d.elements,I=new Map;for(let C=0,y=f.length;C<y;C++){let E=(cRe(d,f[C])-c)/u,b=Math.min(255,Math.round(E*255));I.has(b)||I.set(b,[]),I.get(b).push(C)}for(let[C,y]of I)g.has(C)||g.set(C,[]),g.get(C).push({unit:d,indices:y})}let m=[];for(let[d,f]of g){let I=d/255*r,C=[];for(let{unit:Q,indices:E}of f)C.push({unit:Q,indices:Ee.ofSortedArray(new Int32Array(E))});let y=W.Loci(s,C);W.Loci.isEmpty(y)||m.push({bundle:W.Bundle.fromLoci(y),value:I})}if(m.length===0)return;let p=Gq(m,A);a?o.to(a).update(RA.toBundle(p)):o.to(i.transform.ref).apply(ze.Representation.WiggleStructureRepresentation3DFromBundle,RA.toBundle(p),{tags:Nq})})}var Jp=class e extends Ec{constructor(r){super({options:h.getDefaultValues(e.OptionsParams)});this.plugin=r;this.events={optionsUpdated:this.ev()}}get currentStructures(){return this.plugin.managers.structure.hierarchy.selection.structures}get pivotStructure(){return this.currentStructures[0]}_setSnapshotState(r){this.updateState({options:r}),this.events.optionsUpdated.next(void 0)}async setOptions(r){let n=r.interactions!==this.state.options.interactions;this.updateState({options:r}),this.events.optionsUpdated.next(void 0);let o=this.dataState.build();for(let i of this.currentStructures)for(let a of i.components)this.updateReprParams(o,a);return this.plugin.dataTransaction(async()=>{await o.commit(),await this.plugin.state.updateBehavior(ix,i=>{i.ignoreHydrogens=r.hydrogens!=="all",i.ignoreHydrogensVariant=r.hydrogens==="only-polar"?"non-polar":"all",i.ignoreLight=r.ignoreLight,i.material=r.materialStyle,i.clip=r.clipObjects,i.interior=r.interior,i.animation=r.animation}),n&&await this.updateInterationProps()})}updateReprParams(r,n){let{hydrogens:o,visualQuality:i,ignoreLight:a,materialStyle:A,clipObjects:s,interior:c,animation:l}=this.state.options,u=o!=="all",g=o==="only-polar"?"non-polar":"all";for(let m of n.representations){if(m.cell.transform.transformer!==Xu)continue;let p=m.cell.transform.params,d=p.type.params.interior,f=p.type.params.animation;(!!p.type.params.ignoreHydrogens!==u||p.type.params.ignoreHydrogensVariant!==g||p.type.params.quality!==i||p.type.params.ignoreLight!==a||!Va.areEqual(p.type.params.material,A)||!h.areEqual(ha.Params,p.type.params.clip,s)||d&&!TCe(d,c)||f&&!NCe(f,l))&&r.to(m.cell).update(I=>{I.type.params.ignoreHydrogens=u,I.type.params.ignoreHydrogensVariant=g,I.type.params.quality=i,I.type.params.ignoreLight=a,I.type.params.material=A,I.type.params.clip=s,d&&(I.type.params.interior=c),f&&(I.type.params.animation=l)})}}async updateInterationProps(){for(let r of this.currentStructures){let n=ci.getParams(r.cell.obj?.data);if(r.properties){let o=r.properties.cell.transform.params?.properties[ci.descriptor.name];if(h.areEqual(n,o,this.state.options.interactions))continue;await this.dataState.build().to(r.properties.cell).update(i=>{i.properties[ci.descriptor.name]=this.state.options.interactions}).commit()}else{let o=this.plugin.customStructureProperties.getParams(r.cell.obj?.data),i=h.getDefaultValues(o);if(h.areEqual(n,i.properties[ci.descriptor.name],this.state.options.interactions))continue;i.properties[ci.descriptor.name]=this.state.options.interactions,await this.plugin.builders.structure.insertStructureProperties(r.cell,i)}}}applyPreset(r,n,o){return this.plugin.dataTransaction(async()=>{for(let i of r){let a=await this.plugin.builders.structure.representation.applyPreset(i.cell,n,o);await this.syncPreset(i,a)}},{canUndo:"Preset"})}syncPreset(r,n){if(!n||!n.components)return this.clearComponents([r]);let o=new Set;if(Bi(n.components,s=>{s&&o.add(s.ref)}),n.representations&&Bi(n.representations,s=>{s&&o.add(s.ref)}),o.size===0)return this.clearComponents([r]);let i=!1,a=this.dataState.build(),A=s=>{o.has(s.cell.transform.ref)||(i=!0,a.delete(s.cell))};for(let s of r.components){A(s);for(let c of s.representations)A(c);if(s.genericRepresentations)for(let c of s.genericRepresentations)A(c)}if(r.genericRepresentations)for(let s of r.genericRepresentations)A(s);if(i)return a.commit()}clear(r){return this.clearComponents(r)}selectThis(r){let n=this.plugin.managers.structure.selection;n.clear();for(let o of r){let i=Ye.toSubStructureElementLoci(o.structure.cell.obj.data,o.cell.obj?.data);n.fromLoci("set",i)}}canBeModified(r){return this.plugin.builders.structure.isComponentTransform(r.cell)}modifyByCurrentSelection(r,n){return this.plugin.runTask(ve.create("Modify Component",async o=>{let i=this.dataState.build();for(let a of r){if(!this.canBeModified(a))continue;let A=this.plugin.managers.structure.selection.getStructure(a.structure.cell.obj.data);!A||A.elementCount===0||this.modifyComponent(i,a,A,n)}await this.dataState.updateTree(i,{canUndo:"Modify Selection"}).runInContext(o)}))}toggleVisibility(r,n){if(r.length!==0)if(n){let o=r[0].representations.indexOf(n),i=!n.cell.state.isHidden;for(let a of r){let A=a.representations[o];A&&Tm(this.dataState,A.cell.transform.ref,i)}}else{let o=!r[0].cell.state.isHidden;for(let i of r)Tm(this.dataState,i.cell.transform.ref,o)}}removeRepresentations(r,n){if(r.length===0)return;let o=[];if(n){let i=r[0].representations.indexOf(n);if(i<0)return;for(let a of r)a.representations[i]&&o.push(a.representations[i])}else for(let i of r)for(let a of i.representations)o.push(a);return this.plugin.managers.structure.hierarchy.remove(o,!0)}updateRepresentations(r,n,o){if(r.length===0)return Promise.resolve();let i=r[0].representations.indexOf(n);if(i<0)return Promise.resolve();let a=this.dataState.build();for(let A of r){let s=A.representations[i];s&&s.cell.transform.transformer===n.cell.transform.transformer&&a.to(s.cell).update(o)}return a.commit({canUndo:"Update Representation"})}updateRepresentationsTheme(r,n){if(r.length===0)return;let o=this.dataState.build();for(let i of r)for(let a of i.representations){let A=a.cell.transform.params,s=typeof n=="function"?n(i,a):n,c=s.color==="default"?dU(this.plugin,i.structure.cell.obj?.data,A?.type.name):s.color?dU(this.plugin,i.structure.cell.obj?.data,A?.type.name,s.color,s.colorParams):void 0,l=s.size==="default"?cZ(this.plugin,i.structure.cell.obj?.data,A?.type.name):s.size?cZ(this.plugin,i.structure.cell.obj?.data,A?.type.name,s.size,s.sizeParams):void 0;(c||l)&&o.to(a.cell).update(u=>{c&&(u.colorTheme=c),l&&(u.sizeTheme=l)})}return o.commit({canUndo:"Update Theme"})}addRepresentation(r,n){if(r.length===0)return;let{hydrogens:o,visualQuality:i,ignoreLight:a,materialStyle:A,clipObjects:s,interior:c,animation:l}=this.state.options,m={ignoreHydrogens:o!=="all",ignoreHydrogensVariant:o==="only-polar"?"non-polar":"all",quality:i,ignoreLight:a,material:A,clip:s,interior:c,animation:l};return this.plugin.dataTransaction(async()=>{for(let p of r)await this.plugin.builders.structure.representation.addRepresentation(p.cell,{type:this.plugin.representation.structure.registry.get(n),typeParams:m})},{canUndo:"Add Representation"})}tryFindComponent(r,n){if(r.components.length!==0)return this.plugin.runTask(ve.create("Find Component",async o=>{let i=r.cell.obj?.data;if(!i)return;let a=Qt.unionStructure(await n.getSelection(this.plugin,o,i));for(let A of r.components){let s=A.cell.obj?.data;if(!(!s||!A.cell.parent)&&cme(a,s))return A.cell}}))}async add(r,n){return this.plugin.dataTransaction(async()=>{let o=n||this.currentStructures;if(o.length===0)return;let{hydrogens:i,visualQuality:a,ignoreLight:A,materialStyle:s,clipObjects:c,interior:l,animation:u}=this.state.options,p={ignoreHydrogens:i!=="all",ignoreHydrogensVariant:i==="only-polar"?"non-polar":"all",quality:a,ignoreLight:A,material:s,clip:c,interior:l,animation:u},d=Hn.create22();for(let f of o){let I;r.options.checkExisting&&(I=await this.tryFindComponent(f,r.selection)),I||(I=await this.plugin.builders.structure.tryCreateComponentFromSelection(f.cell,r.selection,d,{label:r.options.label||(r.selection===Oi.current?"Custom Selection":"")})),!(r.representation==="none"||!I)&&await this.plugin.builders.structure.representation.addRepresentation(I,{type:this.plugin.representation.structure.registry.get(r.representation),typeParams:p})}},{canUndo:"Add Selection"})}async applyTheme(r,n){return this.plugin.dataTransaction(async o=>{let i=n||this.currentStructures;if(i.length===0)return;let a=async A=>Qt.toLociWithSourceUnits(await r.selection.getSelection(this.plugin,o,A));for(let A of i)if(r.action.name==="color"){let s=r.action.params;await Tq(this.plugin,A.components,s.color,a,r.representations)}else if(r.action.name==="resetColor")await Tq(this.plugin,A.components,-1,a,r.representations);else if(r.action.name==="transparency"){let s=r.action.params;await rRe(this.plugin,A.components,s.value,a,r.representations)}else if(r.action.name==="emissive"){let s=r.action.params;await ARe(this.plugin,A.components,s.value,a,r.representations)}else if(r.action.name==="material"){let s=r.action.params;await Pq(this.plugin,A.components,s.material,a,r.representations)}else if(r.action.name==="resetMaterial")await Pq(this.plugin,A.components,void 0,a,r.representations);else if(r.action.name==="clipping"){let s=r.action.params;await $2e(this.plugin,A.components,si.Groups.fromNames(s.excludeGroups),a,r.representations)}else if(r.action.name==="wiggle"){let s=r.action.params;await sRe(this.plugin,A.components,s.value,a,r.representations)}},{canUndo:"Apply Theme"})}modifyComponent(r,n,o,i){let a=n.cell.obj?.data;if(!a||(i==="subtract"||i==="intersect")&&!iD(a,o))return;let A=n.structure.cell.obj?.data,s=i==="union"?Mf(A,[a,o]):i==="intersect"?qG(a,o):aD(a,o);if(s.elementCount===0)r.delete(n.cell.transform.ref);else{let l={type:{name:"bundle",params:W.Bundle.fromSubStructure(A,s)},nullIfEmpty:!0,label:n.cell.obj?.label};r.to(n.cell).update(l)}}updateLabel(r,n){let o={type:r.cell.params?.values.type,nullIfEmpty:r.cell.params?.values.nullIfEmpty,label:n};this.dataState.build().to(r.cell).update(o).commit()}get dataState(){return this.plugin.state.data}clearComponents(r){let n=this.dataState.build();for(let o of r)for(let i of o.components)n.delete(i.cell.transform.ref);return n.commit({canUndo:"Clear Selections"})}};(i=>{i.OptionsParams={hydrogens:h.Select("all",[["all","Show All"],["hide-all","Hide All"],["only-polar","Only Polar"]],{description:"Determine display of hydrogen atoms in representations"}),visualQuality:h.Select("auto",K2,{description:"Control the visual/rendering quality of representations"}),ignoreLight:h.Boolean(!1,{description:"Ignore light for stylized rendering of representations"}),materialStyle:Va.getParam(),clipObjects:h.Group(ha.Params),interactions:h.Group(ci.defaultParams,{label:"Non-covalent Interactions"}),interior:lp(),animation:Hu()};function t(a,A){let{options:s}=a.query.structure.registry;return A={pivot:a.managers.structure.component.pivotStructure,allowNone:!0,hideSelection:!1,checkExisting:!1,...A},{selection:h.Select(s[1][0],s,{isHidden:A?.hideSelection}),representation:o(a,A?.pivot,A?.allowNone?[["none","< Create Later >"]]:[]),options:h.Group({label:h.Text(""),checkExisting:h.Boolean(!!A?.checkExisting,{help:()=>({description:"Checks if a selection with the specifield elements already exists to avoid creating duplicate components."})})})}}i.getAddParams=t;function r(a,A){let{options:s}=a.query.structure.registry;return{selection:h.Select(s[1][0],s,{isHidden:!1}),action:h.MappedStatic("color",{color:h.Group({color:h.Color(xt.blue,{isExpanded:!0})},{isFlat:!0}),resetColor:h.EmptyGroup({label:"Reset Color"}),transparency:h.Group({value:h.Numeric(.5,{min:0,max:1,step:.01})},{isFlat:!0}),emissive:h.Group({value:h.Numeric(.5,{min:0,max:1,step:.01})},{isFlat:!0}),material:h.Group({material:Va.getParam({isFlat:!0})},{isFlat:!0}),resetMaterial:h.EmptyGroup({label:"Reset Material"}),clipping:h.Group({excludeGroups:h.MultiSelect([],h.objectToOptions(si.Groups.Names))},{isFlat:!0}),wiggle:h.Group({value:h.Numeric(1,{min:0,max:5,step:.01})},{isFlat:!0})}),representations:h.MultiSelect([],n(a,A),{emptyValue:"All"})}}i.getThemeParams=r;function n(a,A){return A?.cell.obj?.data?a.representation.structure.registry.getApplicableTypes(A.cell.obj?.data):a.representation.structure.registry.types}i.getRepresentationTypes=n;function o(a,A,s,c){let l=[...s,...n(a,A)];return h.Select(l[0][0],l,{label:c})}})(Jp||={});var NU=new qi("98"),_yt=24,d3=class extends Ec{constructor(r){super({entries:new Map,additionsHistory:[],stats:Yyt()});this.plugin=r;this.events={changed:this.ev(),additionsHistoryUpdated:this.ev(),loci:{add:this.ev(),remove:this.ev(),clear:this.ev()}};r.helpers.substructureParent.events.removed.subscribe(n=>this.onRemove(n.ref,n.obj)),r.helpers.substructureParent.events.updated.subscribe(n=>this.onUpdate(n.ref,n.oldObj,n.obj))}get entries(){return this.state.entries}get additionsHistory(){return this.state.additionsHistory}get stats(){return this.state.stats?this.state.stats:(this.state.stats=this.calcStats(),this.state.stats)}getEntry(r){let n=this.plugin.helpers.substructureParent.get(r,!0);if(!n)return;let o=n.transform.ref;if(!this.entries.has(o)){let i=new MU(W.Loci(r,[]));return this.entries.set(o,i),i}return this.entries.get(o)}calcStats(){let r=0,n=0,o=W.Stats.create();this.entries.forEach(a=>{let{elements:A}=a.selection;if(A.length){r+=1;for(let s=0,c=A.length;s<c;++s)n+=Ee.size(A[s].indices);W.Stats.add(o,o,W.Stats.ofLoci(a.selection))}});let i=Y0(o,{countsOnly:!0});return{structureCount:r,elementCount:n,label:i}}add(r){if(!W.Loci.is(r))return!1;let n=this.getEntry(r.structure);if(!n)return!1;let o=n.selection;return n.selection=W.Loci.union(n.selection,r),this.tryAddHistory(r),this.referenceLoci=r,this.events.loci.add.next(r),!W.Loci.areEqual(o,n.selection)}remove(r){if(!W.Loci.is(r))return!1;let n=this.getEntry(r.structure);if(!n)return!1;let o=n.selection;return n.selection=W.Loci.subtract(n.selection,r),this.referenceLoci=r,this.events.loci.remove.next(r),!W.Loci.areEqual(o,n.selection)}intersect(r){if(!W.Loci.is(r))return!1;let n=this.getEntry(r.structure);if(!n)return!1;let o=n.selection;return n.selection=W.Loci.intersect(n.selection,r),this.referenceLoci=r,!W.Loci.areEqual(o,n.selection)}set(r){if(!W.Loci.is(r))return!1;let n=this.getEntry(r.structure);if(!n)return!1;let o=n.selection;return n.selection=r,this.tryAddHistory(r),this.referenceLoci=void 0,!W.Loci.areEqual(o,n.selection)}modifyHistory(r,n,o,i=!1){let a=this.additionsHistory,A=a.indexOf(r);if(A<0)return;let s;switch(n){case"remove":Vy(a,A);break;case"up":s=A-1;break;case"down":s=A+1;break}if(s!==void 0){let c=o?Math.min(a.length,o):a.length;for(;;)if(s=s%c,s<0&&(s+=c),!i||a[A].loci.structure===a[s].loci.structure){let l=a[A];a[A]=a[s],a[s]=l;break}else s+=n==="up"?-1:1}this.events.additionsHistoryUpdated.next(void 0)}tryAddHistory(r){if(pr.isEmpty(r))return;let n=0,o;for(let A of this.additionsHistory){if(pr.areEqual(A.loci,r)){o=A;break}n++}if(o){Vy(this.additionsHistory,n),this.additionsHistory.unshift(o),this.events.additionsHistoryUpdated.next(void 0);return}let i=W.Stats.ofLoci(r),a=Y0(i,{reverse:!0});this.additionsHistory.unshift({id:Hn.create22(),loci:r,label:a}),this.additionsHistory.length>_yt&&this.additionsHistory.pop(),this.events.additionsHistoryUpdated.next(void 0)}clearHistory(){this.state.additionsHistory.length!==0&&(this.state.additionsHistory=[],this.events.additionsHistoryUpdated.next(void 0))}clearHistoryForStructure(r){let n=[];for(let o of this.state.additionsHistory)o.loci.structure.root===r.root&&n.push(o);for(let o of n)this.modifyHistory(o,"remove");n.length!==0&&this.events.additionsHistoryUpdated.next(void 0)}onRemove(r,n){this.entries.has(r)&&(this.entries.delete(r),n?.data&&this.clearHistoryForStructure(n.data),this.referenceLoci?.structure===n?.data&&(this.referenceLoci=void 0),this.state.stats=void 0,this.events.changed.next(void 0))}onUpdate(r,n,o){if(n===o||n?.data===o.data)return;let i=this.plugin.helpers.substructureParent.get(o.data,!0);if(!i||r!==i.transform.ref||!this.entries.has(r))return;let a=this.plugin.helpers.substructureParent.get(o.data)?.obj?.data;if(a)if(!n?.data||Ye.areUnitIdsAndIndicesEqual(n.data,o.data)){this.entries.set(r,Oyt(this.entries.get(r),a)),this.referenceLoci?.structure.root===a.root&&(this.referenceLoci=W.Loci.remap(this.referenceLoci,a));let A=!1;for(let s of this.state.additionsHistory)s.loci.structure.root===a.root&&(s.loci=W.Loci.remap(s.loci,a),A=!0);A&&this.events.additionsHistoryUpdated.next(void 0)}else this.entries.set(r,new MU(W.Loci(a,[]))),this.referenceLoci?.structure.root===a.root&&(this.referenceLoci=void 0),this.clearHistoryForStructure(a),this.state.stats=void 0,this.events.changed.next(void 0)}clear(){let r=this.entries.keys(),n=[];for(;;){let o=r.next();if(o.done)break;let i=this.entries.get(o.value);W.Loci.isEmpty(i.selection)||n.push(i.selection),i.selection=W.Loci(i.selection.structure,[])}return this.referenceLoci=void 0,this.state.stats=void 0,this.events.changed.next(void 0),this.events.loci.clear.next(void 0),this.clearHistory(),n}getLoci(r){let n=this.getEntry(r);return n?n.selection:Ir}getStructure(r){let n=this.getEntry(r);if(n)return n.structure}structureHasSelection(r){let n=r.cell?.obj?.data;if(!n)return!1;let o=this.getEntry(n);return!!o&&!W.Loci.isEmpty(o.selection)}has(r){if(W.Loci.is(r)){let n=this.getEntry(r.structure);if(n)return W.Loci.isSubset(n.selection,r)}return!1}tryGetRange(r){if(W.Loci.is(r)&&this.getEntry(r.structure))return Hq(this.referenceLoci,r)}elementCount(){let r=0;return this.entries.forEach(n=>{r+=W.Loci.size(n.selection)}),r}getBoundary(){let r=B.create(Number.MAX_VALUE,Number.MAX_VALUE,Number.MAX_VALUE),n=B.create(-Number.MAX_VALUE,-Number.MAX_VALUE,-Number.MAX_VALUE);NU.reset();let o=[];this.entries.forEach(i=>{let a=i.selection;W.Loci.isEmpty(a)||o.push(W.Loci.getBoundary(a))});for(let i=0,a=o.length;i<a;++i){let{box:A,sphere:s}=o[i];B.min(r,r,A.min),B.max(n,n,A.max),NU.includePositionRadius(s.center,s.radius)}NU.finishedIncludeStep();for(let i=0,a=o.length;i<a;++i){let{sphere:A}=o[i];NU.radiusPositionRadius(A.center,A.radius)}return{box:{min:r,max:n},sphere:NU.getSphere()}}getPrincipalAxes(){let r=JS(this.entries.values());return W.Loci.getPrincipalAxesMany(r.map(n=>n.selection))}modify(r,n){let o=!1;switch(r){case"add":o=this.add(n);break;case"remove":o=this.remove(n);break;case"intersect":o=this.intersect(n);break;case"set":o=this.set(n);break}o&&(this.state.stats=void 0,this.events.changed.next(void 0))}get applicableStructures(){return this.plugin.managers.structure.hierarchy.selection.structures.filter(r=>!!r.cell.obj).map(r=>r.cell.obj.data)}triggerInteraction(r,n,o=!0){switch(r){case"add":this.plugin.managers.interactivity.lociSelects.select({loci:n},o);break;case"remove":this.plugin.managers.interactivity.lociSelects.deselect({loci:n},o);break;case"intersect":this.plugin.managers.interactivity.lociSelects.selectJoin({loci:n},o);break;case"set":this.plugin.managers.interactivity.lociSelects.selectOnly({loci:n},o);break}}fromLoci(r,n,o=!0){this.triggerInteraction(r,n,o)}fromCompiledQuery(r,n,o=!0){for(let i of this.applicableStructures){let a=n(new qo(i));this.triggerInteraction(r,Qt.toLociWithSourceUnits(a),o)}}fromSelectionQuery(r,n,o=!0){this.plugin.runTask(ve.create("Structure Selection",async i=>{for(let a of this.applicableStructures){let A=await n.getSelection(this.plugin,i,a);this.triggerInteraction(r,Qt.toLociWithSourceUnits(A),o)}}))}fromSelections(r){let n=Pn.resolveAndCheck(this.plugin.state.data,r);if(!(!n||!n.obj)){if(!te.Molecule.Structure.Selections.is(n.obj)){console.warn("fromSelections applied to wrong object type.",n.obj);return}this.clear();for(let o of n.obj?.data)this.fromLoci("set",o.loci)}}getSnapshot(){let r=[];return this.entries.forEach((n,o)=>{r.push({ref:o,bundle:W.Bundle.fromLoci(n.selection)})}),{entries:r}}setSnapshot(r){this.entries.clear();for(let{ref:n,bundle:o}of r.entries){let i=this.plugin.state.data.select(fr.Generators.byRef(n))[0]?.obj?.data;if(!i)continue;let a=W.Bundle.toLoci(o,i);this.fromLoci("set",a,!1)}}};function Yyt(){return{structureCount:0,elementCount:0,label:"Nothing Selected"}}var MU=class{constructor(t){this._structure=void 0;this._selection=t}get selection(){return this._selection}set selection(t){this._selection=t,this._structure=void 0}get structure(){return this._structure?this._structure:(pr.isEmpty(this._selection)?this._structure=void 0:this._structure=W.Loci.toStructure(this._selection),this._structure)}};function Oyt(e,t){return new MU(W.Loci.remap(e.selection,t))}function Hq(e,t){if(!W.Loci.is(e)||!W.Loci.is(t)||e.structure!==t.structure||t.elements.length!==1)return;let r=t.elements[0];if(!r)return;let n;for(let o of e.elements)if(r.unit===o.unit){n=o;break}if(n&&r.unit===n.unit)return Jyt(t.structure,n,r)}function Jyt(e,t,r){let n=Math.min(Ee.min(t.indices),Ee.min(r.indices)),o=Math.max(Ee.max(t.indices),Ee.max(r.indices));return W.Loci(e,[{unit:t.unit,indices:Ee.ofRange(n,o)}])}var zyt=8,p3=class extends Ec{constructor(r){super({history:[]});this.plugin=r;this.events={historyUpdated:this.ev()};this.behaviors={current:this.ev.behavior(void 0)};r.state.data.events.object.removed.subscribe(({obj:o})=>{if(!te.Molecule.Structure.is(o))return;this.current?.loci.structure===o.data&&this.clear();let i=[];for(let a of this.history)a.loci.structure===o.data&&i.push(a);i.length!==this.history.length&&(this.history.length=0,this.history.push(...i),this.events.historyUpdated.next(void 0))});let n=we();r.state.data.events.object.updated.subscribe(({oldData:o,obj:i,action:a})=>{if(te.Molecule.Structure.is(i)&&o!==i.data&&a==="in-place"){let A=this.state.current,s=i.data;if(A&&A.loci.structure===o){let c=W.Loci.remap(A.loci,s);this.state.current={...A,loci:c},this.behaviors.current.next(this.state.current),pr.getBoundingSphere(c,n);let l=this.plugin.canvas3d?.camera,u=l.getTargetDistance(n.radius+4);(B.distance(l.target,n.center)>n.radius||u>l.viewport.height/l.zoom)&&this.plugin.managers.camera.focusSphere(n,{durationMs:0})}}})}get current(){return this.state.current}get history(){return this.state.history}tryAddHistory(r){if(W.Loci.isEmpty(r.loci))return;let n=0,o;for(let i of this.state.history){if(W.Loci.areEqual(i.loci,r.loci)){o=i;break}n++}if(o){Vy(this.state.history,n),this.state.history.unshift(r),this.events.historyUpdated.next(void 0);return}this.state.history.unshift(r),this.state.history.length>zyt&&this.state.history.pop(),this.events.historyUpdated.next(void 0)}set(r){this.tryAddHistory(r),(!this.state.current||!W.Loci.areEqual(this.state.current.loci,r.loci))&&(this.state.current=r,this.behaviors.current.next(r))}tryGetRange(r){return Hq(this.referenceLoci,r)}setFromLoci(r){let n=pr.normalize(r);if(!W.Loci.is(n)||W.Loci.isEmpty(n)){this.clear();return}this.set({loci:n,label:Um(n,{reverse:!0,hidePrefix:!0,htmlStyling:!1})}),this.referenceLoci=n}addFromLoci(r){let n=this.state.current&&W.Loci.is(r)&&r.structure===this.state.current.loci.structure?W.Loci.union(r,this.state.current.loci):r;this.setFromLoci(n);let o=pr.normalize(r);this.referenceLoci=W.Loci.is(o)?o:void 0}toggleFromLoci(r){let{kind:n,loci:o}=Kyt(this.state.current?.loci,r);this.setFromLoci(o);let i=pr.normalize(r);this.referenceLoci=W.Loci.is(i)&&n!=="subtract"?i:void 0}extendFromLoci(r){let n=this.tryGetRange(r)??r;this.toggleFromLoci(n)}clear(){this.state.current&&(this.state.current=void 0,this.behaviors.current.next(void 0)),this.referenceLoci=void 0}getSnapshot(){if(!this.current)return{};let n=this.plugin.helpers.substructureParent.get(this.current.loci.structure)?.transform.ref;return n?{current:{label:this.current.label,ref:n,bundle:W.Bundle.fromLoci(this.current.loci),category:this.current.category}}:{}}setSnapshot(r){if(!r.current){this.clear();return}let{label:n,ref:o,bundle:i,category:a}=r.current,A=this.plugin.state.data.select(fr.Generators.byRef(o))[0]?.obj?.data;if(!A)return;let s=W.Bundle.toLoci(i,A);this.set({label:n,loci:s,category:a})}};function Kyt(e,t){return e&&W.Loci.is(t)&&t.structure===e.structure?W.Loci.isSubset(e,t)?{kind:"subtract",loci:W.Loci.subtract(e,t)}:{kind:"add",loci:W.Loci.union(t,e)}:{kind:"new",loci:t}}var kU;(i=>{function e(a,A){return{key:a,data:A}}function t(a){return{entries:g2(),capacity:Math.max(1,a)}}i.create=t;function r(a,A){for(let s=a.entries.first;s;s=s.next)if(s.value.key===A)return a.entries.remove(s),a.entries.addLast(s.value),s.value.data}i.get=r;function n(a,A,s){let c;if(a.entries.count>=a.capacity){let l=a.entries.first;c=l.value.data,a.entries.remove(l)}return a.entries.addLast(e(A,s)),c}i.set=n;function o(a,A){for(let s=a.entries.first;s;s=s.next)if(s.value.key===A){a.entries.remove(s);break}}i.remove=o})(kU||={});var AE=class{constructor(t=!1){this.isRunning=!1,this.queue=[],this.counter=0,this.log=t}enqueue(t){this.log&&console.log("SingleAsyncQueue enqueue",this.counter),this.queue[0]={id:this.counter,func:t},this.counter++,this.run()}async run(){if(this.isRunning)return;let t=this.queue.pop();if(t){this.isRunning=!0;try{this.log&&console.log("SingleAsyncQueue run",t.id),await t.func(),this.log&&console.log("SingleAsyncQueue complete",t.id)}finally{this.isRunning=!1,this.run()}}}};var Is=class extends te.CreateBehavior({name:"Volume Streaming"}){};(l=>{l.RootTag="volume-streaming-info";function t(u,g,m,p,d={}){return h.Group({isoValue:Ze.createIsoValueParam(d.isoValue??m,p),color:h.Color(d.color??g),wireframe:h.Boolean(d.wireframe??!1),opacity:h.Numeric(d.opacity??.3,{min:0,max:1,step:.01})},{label:u,isExpanded:!0})}let r={byteOffset:0,rate:1,sampleCount:[1,1,1],valuesInfo:[{mean:0,min:-1,max:1,sigma:.1},{mean:0,min:-1,max:1,sigma:.1}]};function n(u={}){let{data:g,defaultView:m,channelParams:p}=u,d=new Map;g&&g.entries.forEach(C=>d.set(C.dataId,C));let f=g?g.entries.map(C=>[C.dataId,C.dataId]):[],I=g?g.entries[0].dataId:"";return{entry:h.Mapped(I,f,C=>h.Group(o({entryData:d.get(C),defaultView:m,structure:g&&g.structure,channelParams:p})))}}l.createParams=n;function o(u){let{entryData:g,defaultView:m,structure:p,channelParams:d={}}=u,f=g||{kind:"em",header:{sampling:[r],availablePrecisions:[{precision:0,maxVoxels:0}]},emDefaultContourLevel:Ze.IsoValue.relative(0)},I=p&&p.boundary.box||Ct();return{view:h.MappedStatic(m||(f.kind==="em"?"auto":"selection-box"),{off:h.Group({}),box:h.Group({bottomLeft:h.Vec3(I.min),topRight:h.Vec3(I.max)},{description:"Static box defined by cartesian coords.",isFlat:!0}),"selection-box":h.Group({radius:h.Numeric(5,{min:0,max:50,step:.5},{description:"Radius in \u212B within which the volume is shown."}),bottomLeft:h.Vec3(B.create(0,0,0),{},{isHidden:!0}),topRight:h.Vec3(B.create(0,0,0),{},{isHidden:!0})},{description:"Box around focused element.",isFlat:!0}),"camera-target":h.Group({radius:h.Numeric(.5,{min:0,max:1,step:.05},{description:"Radius within which the volume is shown (relative to the field of view)."}),dynamicDetailLevel:i(f.header.availablePrecisions,0,{label:"Dynamic Detail"}),bottomLeft:h.Vec3(B.create(0,0,0),{},{isHidden:!0}),topRight:h.Vec3(B.create(0,0,0),{},{isHidden:!0})},{description:"Box around camera target.",isFlat:!0}),cell:h.Group({}),auto:h.Group({radius:h.Numeric(5,{min:0,max:50,step:.5},{description:"Radius in \u212B within which the volume is shown."}),selectionDetailLevel:i(f.header.availablePrecisions,6,{label:"Selection Detail"}),isSelection:h.Boolean(!1,{isHidden:!0}),bottomLeft:h.Vec3(I.min,{},{isHidden:!0}),topRight:h.Vec3(I.max,{},{isHidden:!0})},{description:"Box around focused element.",isFlat:!0})},{options:l.ViewTypeOptions,description:'Controls what of the volume is displayed. "Off" hides the volume alltogether. "Bounded box" shows the volume inside the given box. "Around Interaction" shows the volume around the focused element/atom. "Whole Structure" shows the volume for the whole structure.'}),detailLevel:i(f.header.availablePrecisions,3),channels:f.kind==="em"?h.Group({em:t("EM",6524815,f.emDefaultContourLevel||Ze.IsoValue.relative(1),f.header.sampling[0].valuesInfo[0],d.em)},{isFlat:!0}):h.Group({"2fo-fc":t("2Fo-Fc",3367602,Ze.IsoValue.relative(1.5),f.header.sampling[0].valuesInfo[0],d["2fo-fc"]),"fo-fc(+ve)":t("Fo-Fc(+ve)",3390259,Ze.IsoValue.relative(3),f.header.sampling[0].valuesInfo[1],d["fo-fc(+ve)"]),"fo-fc(-ve)":t("Fo-Fc(-ve)",12268339,Ze.IsoValue.relative(-3),f.header.sampling[0].valuesInfo[1],d["fo-fc(-ve)"])},{isFlat:!0})}}l.createEntryParams=o;function i(u,g,m){return h.Select(Math.min(g,u.length-1),u.map((p,d)=>[d,`${d+1} [ ${Math.pow(p.maxVoxels,1/3)|0}^3 cells ]`]),{description:"Determines the maximum number of voxels. Depending on the size of the volume options are in the range from 1 (0.52M voxels) to 7 (25.17M voxels).",...m})}function a(u){return{entry:{name:u.entry.name,params:{detailLevel:u.entry.params.detailLevel,channels:u.entry.params.channels,view:{name:u.entry.params.view.name,params:{...u.entry.params.view.params}}}}}}l.copyParams=a,l.ViewTypeOptions=[["off","Off"],["box","Bounded Box"],["selection-box","Around Focus"],["camera-target","Around Camera"],["cell","Whole Structure"],["auto","Auto"]],l.ChannelTypeOptions=[["em","em"],["2fo-fc","2fo-fc"],["fo-fc(+ve)","fo-fc(+ve)"],["fo-fc(-ve)","fo-fc(-ve)"]];class c extends er.WithSubscribers{constructor(m,p){super(m,{});this.plugin=m;this.data=p;this.cache=kU.create(25);this.params={};this.lastLoci=Ir;this.ref="";this.cameraTargetObservable=this.plugin.canvas3d.didDraw.pipe(jc(500,void 0,{leading:!0,trailing:!0}),h0(()=>this.plugin.canvas3d?.camera.getSnapshot()),xD((m,p)=>this.isCameraTargetSame(m,p)),gI(m=>m!==void 0));this.cameraTargetSubscription=void 0;this.channels={};this._invTransform=Y();this.infoMap=new Map,this.data.entries.forEach(d=>this.infoMap.set(d.dataId,d)),this.updateQueue=new AE}get info(){return this.infoMap.get(this.params.entry.name)}async queryData(m){let p=oE(this.data.serverUrl,`${this.info.kind}/${this.info.dataId.toLowerCase()}`);if(m){let{min:E,max:b}=m;p+=`/box/${E.map(x=>Math.round(1e3*x)/1e3).join(",")}/${b.map(x=>Math.round(1e3*x)/1e3).join(",")}`}else p+="/cell";let d=this.params.entry.params.detailLevel;this.params.entry.params.view.name==="auto"&&this.params.entry.params.view.params.isSelection&&(d=this.params.entry.params.view.params.selectionDetailLevel),this.params.entry.params.view.name==="camera-target"&&m&&(d=this.decideDetail(m,this.params.entry.params.view.params.dynamicDetailLevel)),p+=`?detail=${d}`;let f=kU.get(this.cache,p);if(f)return f.data;let I=gn.getUrlAsset(this.plugin.managers.asset,p),C=await this.plugin.runTask(this.plugin.managers.asset.resolve(I,"binary")),y=await this.parseCif(C.data);if(!y)return;let Q=kU.set(this.cache,p,{data:y,asset:C});return Q&&Q.asset.dispose(),y}async parseCif(m){let p=await this.plugin.runTask(Kc.parseBinary(m));if(p.isError){this.plugin.log.error("VolumeStreaming, parsing CIF: "+p.toString());return}if(p.result.blocks.length<2){this.plugin.log.error("VolumeStreaming: Invalid data.");return}let d={};for(let f=1;f<p.result.blocks.length;f++){let I=p.result.blocks[f],C=Kc.schema.densityServer(I),y=await this.plugin.runTask(X2(C));d[I.header]=y}return d}async updateParams(m,p=!1){let d=a(this.params),f=d.entry.params.view.name;f!=="off"&&f!=="cell"&&(d.entry.params.view.params.bottomLeft=m?.min||B.zero(),d.entry.params.view.params.topRight=m?.max||B.zero()),f==="auto"&&(d.entry.params.view.params.isSelection=p);let I=this.plugin.state.data,C=I.build().to(this.ref).update(d);await yt.State.Update(this.plugin,{state:I,tree:C,options:{doNotUpdateCurrent:!0}})}getStructureRoot(){return this.plugin.state.data.select(fr.Generators.byRef(this.ref).rootOfType(te.Molecule.Structure))[0]}register(m){this.ref=m,this.subscribeObservable(this.plugin.state.events.object.removed,p=>{!te.Molecule.Structure.is(p.obj)||!W.Loci.is(this.lastLoci)||this.lastLoci.structure===p.obj.data&&(this.lastLoci=Ir)}),this.subscribeObservable(this.plugin.state.events.object.updated,p=>{!te.Molecule.Structure.is(p.oldObj)||!W.Loci.is(this.lastLoci)||this.lastLoci.structure===p.oldObj.data&&(this.lastLoci=Ir)}),this.subscribeObservable(this.plugin.managers.structure.focus.behaviors.current,p=>{if(!this.plugin.state.data.tree.children.has(this.ref))return;let d=p?p.loci:Ir;switch(this.params.entry.params.view.name){case"auto":this.updateAuto(d);break;case"selection-box":this.updateSelectionBox(d);break;default:this.lastLoci=d;break}})}unregister(){let m=this.cache.entries.first;for(;m;)m.value.data.asset.dispose(),m=m.next}isCameraTargetSame(m,p){if(!m||!p)return!1;let d=B.equals(m.target,p.target),f=B.squaredDistance(m.target,m.position),I=B.squaredDistance(p.target,p.position),C=Math.abs(f-I)/f<.001;return d&&C}cameraTargetDistance(m){return B.distance(m.target,m.position)}getBoxFromLoci(m){if(pr.isEmpty(m)||ga(m))return Ct();let p=this.plugin.helpers.substructureParent.get(m.structure,!0);if(!p)return Ct();let d=this.getStructureRoot();if(!d||d.obj?.data!==p.obj?.data)return Ct();let f=uh.get(d.obj?.data.models[0]);f&&Y.invert(this._invTransform,f);let I=W.Loci.extendToWholeResidues(m),C=W.Loci.getBoundary(I).box;return f&&!Number.isNaN(this._invTransform[0])&&Ct.transform(C,C,this._invTransform),W.Loci.size(I)===1&&Ct.expand(C,C,B.create(1,1,1)),C}updateAuto(m){this.updateQueue.enqueue(async()=>{this.lastLoci=m,ga(m)?await this.updateParams(this.info.kind==="x-ray"?this.data.structure.boundary.box:void 0,!1):await this.updateParams(this.getBoxFromLoci(m),!0)})}updateSelectionBox(m){this.updateQueue.enqueue(async()=>{pr.areEqual(this.lastLoci,m)?this.lastLoci=Ir:this.lastLoci=m;let p=this.getBoxFromLoci(this.lastLoci);await this.updateParams(p)})}updateCameraTarget(m){this.updateQueue.enqueue(async()=>{let p=this.plugin.canvas3d?.props.camera.manualReset;try{p||this.plugin.canvas3d?.setProps({camera:{manualReset:!0}});let d=this.boxFromCameraTarget(m,!0);await this.updateParams(d)}finally{p||this.plugin.canvas3d?.setProps({camera:{manualReset:p}})}})}boxFromCameraTarget(m,p){let d=m.target,f=this.cameraTargetDistance(m),C=Math.tan(.5*m.fov)*f,y=this.plugin.canvas3d?.camera.viewport;y&&y.width>y.height&&(C*=y.width/y.height);let Q=this.params.entry.params.view.name==="camera-target"?this.params.entry.params.view.params.radius:.5;C*=Q;let E,b,x;if(p){let S=B.zero();Ct.size(S,this.data.structure.boundary.box),E=Math.min(C,.5*S[0]),b=Math.min(C,.5*S[1]),x=Math.min(C,.5*S[2])}else E=b=x=C;return Ct.create(B.create(d[0]-E,d[1]-b,d[2]-x),B.create(d[0]+E,d[1]+b,d[2]+x))}decideDetail(m,p){let d=this.info.kind==="x-ray"?Ct.volume(this.data.structure.boundary.box):this.info.header.spacegroup.size.reduce((Q,E)=>Q*E,1),I=Ct.volume(m)/d,C=this.info.header.availablePrecisions.length-1,y=p;for(;I<=.5&&y<C;)I*=2,y+=1;return y}async update(m){let p=m.entry.params.view.name==="selection-box"&&this.params&&this.params.entry&&this.params.entry.params&&this.params.entry.params.view&&this.params.entry.params.view.name!=="selection-box";this.params=m;let d,f=!1;switch(m.entry.params.view.name!=="camera-target"&&this.cameraTargetSubscription&&(this.cameraTargetSubscription.unsubscribe(),this.cameraTargetSubscription=void 0),m.entry.params.view.name){case"off":f=!0;break;case"box":d=Ct.create(m.entry.params.view.params.bottomLeft,m.entry.params.view.params.topRight),f=Ct.volume(d)<1e-4;break;case"selection-box":{p?d=this.getBoxFromLoci(this.lastLoci)||Ct():d=Ct.create(B.clone(m.entry.params.view.params.bottomLeft),B.clone(m.entry.params.view.params.topRight));let y=m.entry.params.view.params.radius;f=Ct.volume(d)<1e-4,Ct.expand(d,d,B.create(y,y,y));break}case"camera-target":this.cameraTargetSubscription||(this.cameraTargetSubscription=this.subscribeObservable(this.cameraTargetObservable,y=>this.updateCameraTarget(y))),d=this.boxFromCameraTarget(this.plugin.canvas3d.camera.getSnapshot(),!0);break;case"cell":d=this.info.kind==="x-ray"?this.data.structure.boundary.box:void 0;break;case"auto":if(d=m.entry.params.view.params.isSelection||this.info.kind==="x-ray"?Ct.create(B.clone(m.entry.params.view.params.bottomLeft),B.clone(m.entry.params.view.params.topRight)):void 0,d&&(f=Ct.volume(d)<1e-4,m.entry.params.view.params.isSelection)){let y=m.entry.params.view.params.radius;Ct.expand(d,d,B.create(y,y,y))}break}let I=f?{}:await this.queryData(d);if(!I)return!1;let C=m.entry.params.channels;return this.info.kind==="x-ray"?(this.channels["2fo-fc"]=this.createChannel(I["2FO-FC"]||Ze.One,C["2fo-fc"],this.info.header.sampling[0].valuesInfo[0]),this.channels["fo-fc(+ve)"]=this.createChannel(I["FO-FC"]||Ze.One,C["fo-fc(+ve)"],this.info.header.sampling[0].valuesInfo[1]),this.channels["fo-fc(-ve)"]=this.createChannel(I["FO-FC"]||Ze.One,C["fo-fc(-ve)"],this.info.header.sampling[0].valuesInfo[1])):this.channels.em=this.createChannel(I.EM||Ze.One,C.em,this.info.header.sampling[0].valuesInfo[0]),!0}createChannel(m,p,d){let f=p;return{data:m,color:f.color,wireframe:f.wireframe,opacity:f.opacity,isoValue:f.isoValue.kind==="relative"?f.isoValue:Ze.IsoValue.toRelative(f.isoValue,d)}}getDescription(){return this.params.entry.params.view.name==="selection-box"?"Selection":this.params.entry.params.view.name==="camera-target"?"Camera":this.params.entry.params.view.name==="box"?"Static Box":this.params.entry.params.view.name==="cell"?"Cell":""}}l.Behavior=c})(Is||={});function pRe(e,t){let r=oQt(e,t||B3());return sQt(e.tree,r),t&&t.refs.forEach(aQt,r),{hierarchy:r.hierarchy,added:r.added,changed:r.changed}}function B3(){return{trajectories:[],models:[],structures:[],refs:new Map}}function jyt(e){return{kind:"trajectory",cell:e,version:e.transform.version,models:[]}}function uRe(e,t){return{kind:"model",cell:e,version:e.transform.version,trajectory:t,structures:[]}}function Wyt(e,t){return{kind:"model-properties",cell:e,version:e.transform.version,model:t}}function Xyt(e,t){return{kind:"model-unitcell",cell:e,version:e.transform.version,model:t}}function gRe(e,t){return{kind:"structure",cell:e,version:e.transform.version,model:t,components:[]}}function Zyt(e,t){return{kind:"structure-properties",cell:e,version:e.transform.version,structure:t}}function qyt(e,t){return{kind:"structure-transform",cell:e,version:e.transform.version,structure:t}}function $yt(e,t){return{kind:"structure-volume-streaming",cell:e,version:e.transform.version,structure:t}}function eQt(e){return e.transform.tags?[...e.transform.tags].sort().join():e.transform.ref}function tQt(e,t){return{kind:"structure-component",cell:e,version:e.transform.version,structure:t,key:eQt(e),representations:[]}}function rQt(e,t){return{kind:"structure-representation",cell:e,version:e.transform.version,component:t}}function nQt(e,t){return{kind:"generic-representation",cell:e,version:e.transform.version,parent:t}}function oQt(e,t){return{state:e,oldHierarchy:t,hierarchy:B3(),changed:!1,added:new Set}}function fF(e,t,r,n,...o){let i=n(...o);r.push(i),e.hierarchy.refs.set(t.transform.ref,i);let a=e.oldHierarchy.refs.get(t.transform.ref);return a?a.version!==t.transform.version&&(e.changed=!0):(e.added.add(i.cell.transform.ref),e.changed=!0),i}function lx(e,t,r,...n){let o=r(...n);e.hierarchy.refs.set(t.transform.ref,o);let i=e.oldHierarchy.refs.get(t.transform.ref);return i?i.version!==t.transform.version&&(e.changed=!0):(e.added.add(o.cell.transform.ref),e.changed=!0),o}function mRe(e){return t=>e.is(t.obj)}function dRe(e,t){return(r,n)=>!t(n)&&e.is(r.obj)}function f3(e){return t=>t.transform.transformer===e}function ux(){}var iQt=[[mRe(te.Molecule.Trajectory),(e,t)=>{e.currentTrajectory=fF(e,t,e.hierarchy.trajectories,jyt,t)},e=>e.currentTrajectory=void 0],[dRe(te.Molecule.Model,e=>e.currentModel),(e,t)=>{e.currentTrajectory?e.currentModel=fF(e,t,e.currentTrajectory.models,uRe,t,e.currentTrajectory):e.currentModel=lx(e,t,uRe,t),e.hierarchy.models.push(e.currentModel)},e=>e.currentModel=void 0],[f3(ze.Model.CustomModelProperties),(e,t)=>{if(!e.currentModel)return!1;e.currentModel.properties=lx(e,t,Wyt,t,e.currentModel)},ux],[f3(ze.Representation.ModelUnitcell3D),(e,t)=>{if(!e.currentModel)return!1;e.currentModel.unitcell=lx(e,t,Xyt,t,e.currentModel)},ux],[dRe(te.Molecule.Structure,e=>e.currentStructure),(e,t)=>{e.currentModel?e.currentStructure=fF(e,t,e.currentModel.structures,gRe,t,e.currentModel):e.currentStructure=lx(e,t,gRe,t),e.hierarchy.structures.push(e.currentStructure)},e=>e.currentStructure=void 0],[f3(ze.Model.CustomStructureProperties),(e,t)=>{if(!e.currentStructure)return!1;e.currentStructure.properties=lx(e,t,Zyt,t,e.currentStructure)},ux],[f3(ze.Model.TransformStructureConformation),(e,t)=>{if(!e.currentStructure)return!1;e.currentStructure.transform=lx(e,t,qyt,t,e.currentStructure)},ux],[mRe(Is),(e,t)=>(e.currentStructure&&(e.currentStructure.volumeStreaming=lx(e,t,$yt,t,e.currentStructure)),!1),ux],[(e,t)=>!t.currentStructure||e.transform.transformer.definition.isDecorator?!1:te.Molecule.Structure.is(e.obj),(e,t)=>{e.currentStructure&&(e.currentComponent&&(e.parentComponents||(e.parentComponents=[]),e.parentComponents.push(e.currentComponent)),e.currentComponent=fF(e,t,e.currentStructure.components,tQt,t,e.currentStructure))},e=>{e.parentComponents&&e.parentComponents.length>0?e.currentComponent=e.parentComponents.pop():e.currentComponent=void 0}],[(e,t)=>!e.state.isGhost&&!!t.currentComponent&&te.Molecule.Structure.Representation3D.is(e.obj),(e,t)=>(e.currentComponent&&fF(e,t,e.currentComponent.representations,rQt,t,e.currentComponent),!1),ux],[e=>!e.state.isGhost&&te.isRepresentation3D(e.obj),(e,t)=>{let r=e.currentComponent||e.currentStructure||e.currentModel;r&&(r.genericRepresentations||(r.genericRepresentations=[]),fF(e,t,r.genericRepresentations,nQt,t,r))},ux]];function fRe(e){if(!e||!e?.parent||!e.parent.cells.has(e.transform.ref))return!1;let{obj:t}=e;return!(!t||t===po.Null||e.status!=="ok"&&e.status!=="error")}function aQt(e){let{cell:t}=e;fRe(t)||(this.changed=!0)}function AQt(e){BRe(this,this.tree.transforms.get(e))}function BRe(e,t){let{state:r}=e,n=r.state.cells.get(t.ref);if(!fRe(n))return;let o,i=!1;for(let[A,s,c]of iQt)if(A(n,r)){if(s(r,n)===!1){i=!0;break}o=c;break}if(i)return;let a=e.tree.children.get(t.ref);a&&a.size&&a.forEach(AQt,e),o&&o(r)}function sQt(e,t){let r={tree:e,state:t};return BRe(r,e.root),r.state}var zp=class e extends du{constructor(r){super();this.plugin=r;this.state={syncedTree:this.dataState.tree,notified:!1,hierarchy:B3(),selection:{trajectories:[],models:[],structures:[]}};this.behaviors={selection:this.ev.behavior({hierarchy:this.current,trajectories:this.selection.trajectories,models:this.selection.models,structures:this.selection.structures})};this._currentComponentGroups=void 0;this._currentSelectionSet=void 0;this.subscribe(r.state.data.events.changed,n=>{n.inTransaction||r.behaviors.state.isAnimating.value||this.sync(!0)}),this.subscribe(r.behaviors.state.isAnimating,n=>{!n&&!r.behaviors.state.isUpdating.value&&this.sync(!0)})}get dataState(){return this.plugin.state.data}get currentComponentGroups(){return this._currentComponentGroups?this._currentComponentGroups:(this._currentComponentGroups=e.getComponentGroups(this.selection.structures),this._currentComponentGroups)}get seletionSet(){if(this._currentSelectionSet)return this._currentSelectionSet;this._currentSelectionSet=new Set;for(let r of this.selection.trajectories)this._currentSelectionSet.add(r.cell.transform.ref);for(let r of this.selection.models)this._currentSelectionSet.add(r.cell.transform.ref);for(let r of this.selection.structures)this._currentSelectionSet.add(r.cell.transform.ref);return this._currentSelectionSet}get current(){return this.sync(!1),this.state.hierarchy}get selection(){return this.sync(!1),this.state.selection}getStructuresWithSelection(){let r=this.plugin.managers.structure.hierarchy.current.structures,n=[];for(let o of r)this.plugin.managers.structure.selection.structureHasSelection(o)&&n.push(o);return n}findStructure(r){if(!r)return;let n=this.plugin.helpers.substructureParent.get(r);if(!n)return;let o=this.plugin.state.data.selectQ(i=>i.byValue(n).rootOfType(te.Molecule.Structure))[0];if(o)return this.behaviors.selection.value.structures.find(i=>i.cell===o)}syncCurrent(r,n){let o=this.seletionSet,i=[];for(let a of r){let A=a.cell.transform.ref;(o.has(A)||n.has(A))&&i.push(a)}return i.length===0?r.length>0?[r[0]]:[]:i}sync(r){if(!r&&this.dataState.inUpdate)return;if(this.state.syncedTree===this.dataState.tree){r&&!this.state.notified&&(this.state.notified=!0,this.behaviors.selection.next({hierarchy:this.state.hierarchy,...this.state.selection}));return}this.state.syncedTree=this.dataState.tree;let n=pRe(this.plugin.state.data,this.current);if(!n.changed)return;let{hierarchy:o}=n,i=this.syncCurrent(o.trajectories,n.added),a=this.syncCurrent(o.models,n.added),A=this.syncCurrent(o.structures,n.added);this._currentComponentGroups=void 0,this._currentSelectionSet=void 0,this.state.hierarchy=o,this.state.selection.trajectories=i,this.state.selection.models=a,this.state.selection.structures=A,r?(this.state.notified=!0,this.behaviors.selection.next({hierarchy:o,trajectories:i,models:a,structures:A})):this.state.notified=!1}updateCurrent(r,n){let o=this.current,i=n==="add"?lo.union(this.seletionSet,new Set(r.map(c=>c.cell.transform.ref))):lo.difference(this.seletionSet,new Set(r.map(c=>c.cell.transform.ref))),a=[],A=[],s=[];for(let c of o.trajectories)i.has(c.cell.transform.ref)&&a.push(c);for(let c of o.models)i.has(c.cell.transform.ref)&&A.push(c);for(let c of o.structures)i.has(c.cell.transform.ref)&&s.push(c);this._currentComponentGroups=void 0,this._currentSelectionSet=void 0,this.state.selection.trajectories=a,this.state.selection.models=A,this.state.selection.structures=s,this.behaviors.selection.next({hierarchy:o,trajectories:a,models:A,structures:s})}remove(r,n){if(r.length===0)return;let o=this.plugin.state.data.build();for(let i of r)o.delete(typeof i=="string"?i:i.cell.transform.ref);return o.commit({canUndo:n?"Remove":!1})}toggleVisibility(r,n){if(r.length===0)return;let o=n!==void 0?n!=="show":!r[0].cell.state.isHidden;for(let i of r)Tm(this.dataState,i.cell.transform.ref,o)}applyPreset(r,n,o){return this.plugin.dataTransaction(async()=>{for(let i of r)i.models.length>0&&await this.clearTrajectory(i),await this.plugin.builders.structure.hierarchy.applyPreset(i.cell,n,o)})}async updateStructure(r,n){await this.plugin.dataTransaction(async()=>{let o=Ho.getDecoratorRoot(this.dataState.tree,r.cell.transform.ref),i=this.dataState.tree.children.get(o).toArray();await this.remove(i,!1),await this.plugin.state.updateTransform(this.plugin.state.data,r.cell.transform.ref,n,"Structure Type"),await this.plugin.builders.structure.representation.applyPreset(r.cell.transform.ref,"auto")},{canUndo:"Structure Type"}),yt.Camera.Reset(this.plugin)}clearTrajectory(r){let n=this.dataState.build();for(let o of r.models)n.delete(o.cell);return n.commit()}};(r=>{function e(n){if(!n.length)return[];if(n.length===1)return n[0].components.map(a=>[a]);let o=[],i=new Map;for(let a of n)for(let A of a.components){let s=A.key;if(!s)continue;let c=i.get(s);c||(c=[],i.set(s,c),o.push(c)),c.push(A)}return o}r.getComponentGroups=e;function t(n){let{structures:o}=n.managers.structure.hierarchy.selection;if(o.length===0)return"";if(o.length===1){let s=o[0],c=s.cell.obj?.data;if(!c)return s.cell.obj?.label||"Structure";let l=c.models[0]||c.representativeModel||c.masterModel;if(!l)return s.cell.obj?.label||"Structure";let u=l.entryId;return s.model?.trajectory?.models&&s.model.trajectory.models.length===1?u:s.model?`${s.model.cell.obj?.label} | ${u}`:u}let a=o[0]?.model?.trajectory,A=!0;for(let s of o)if(s?.model?.trajectory!==a){A=!1;break}return A&&a?`${a.cell.obj?.label} | ${o.length} structures`:`${o.length} structures`}r.getSelectedStructuresDescription=t})(zp||={});var Vq="measurement-group",I3="measurement-order-label",_q={distanceUnitLabel:h.Text("\u212B",{isEssential:!0}),textColor:wX.textColor},cQt=h.getDefaultValues(_q);function Dd(e){return{bundle:W.Bundle.fromLoci(e)}}var C3=class extends Ec{constructor(r){super({labels:[],distances:[],angles:[],dihedrals:[],orientations:[],planes:[],options:cQt});this.plugin=r;this.behaviors={state:this.ev.behavior(this.state)};this._empty=[];r.state.data.events.changed.subscribe(n=>{n.inTransaction||r.behaviors.state.isAnimating.value||this.sync()}),r.behaviors.state.isAnimating.subscribe(n=>{!n&&!r.behaviors.state.isUpdating.value&&this.sync()})}stateUpdated(){this.behaviors.state.next(this.state)}getGroup(){let r=this.plugin.state.data,n=fr.findTagInSubtree(r.tree,en.RootRef,Vq),o=this.plugin.state.data.build();return n?o.to(n):o.toRoot().group(ze.Misc.CreateGroup,{label:"Measurements"},{tags:Vq})}async setOptions(r){this.updateState({options:r})&&this.stateUpdated();let n=this.plugin.state.data.build();for(let o of this.state.distances)n.to(o).update(i=>{i.unitLabel=r.distanceUnitLabel,i.textColor=r.textColor});for(let o of this.state.labels)n.to(o).update(i=>{i.textColor=r.textColor});for(let o of this.state.angles)n.to(o).update(i=>{i.textColor=r.textColor});for(let o of this.state.dihedrals)n.to(o).update(i=>{i.textColor=r.textColor});n.editInfo.count!==0&&await yt.State.Update(this.plugin,{state:this.plugin.state.data,tree:n,options:{doNotLogTiming:!0}})}async addDistance(r,n,o){let i=this.plugin.helpers.substructureParent.get(r.structure),a=this.plugin.helpers.substructureParent.get(n.structure);if(!i||!a)return;let A=[i.transform.ref];Po(A,a.transform.ref);let c=this.getGroup().apply(ze.Model.MultiStructureSelectionFromBundle,{selections:[{key:"a",groupId:"a",ref:i.transform.ref,...Dd(r)},{key:"b",groupId:"b",ref:a.transform.ref,...Dd(n)}],isTransitive:!0,label:"Distance"},{dependsOn:A,tags:o?.selectionTags}),l=c.apply(ze.Representation.StructureSelectionsDistance3D,{customText:o?.customText||"",unitLabel:this.state.options.distanceUnitLabel,textColor:this.state.options.textColor,...o?.lineParams,...o?.labelParams,...o?.visualParams},{tags:o?.reprTags}),u=this.plugin.state.data;return await yt.State.Update(this.plugin,{state:u,tree:l,options:{doNotLogTiming:!0}}),{selection:c.selector,representation:l.selector}}async addAngle(r,n,o,i){let a=this.plugin.helpers.substructureParent.get(r.structure),A=this.plugin.helpers.substructureParent.get(n.structure),s=this.plugin.helpers.substructureParent.get(o.structure);if(!a||!A||!s)return;let c=[a.transform.ref];Po(c,A.transform.ref),Po(c,s.transform.ref);let u=this.getGroup().apply(ze.Model.MultiStructureSelectionFromBundle,{selections:[{key:"a",ref:a.transform.ref,...Dd(r)},{key:"b",ref:A.transform.ref,...Dd(n)},{key:"c",ref:s.transform.ref,...Dd(o)}],isTransitive:!0,label:"Angle"},{dependsOn:c,tags:i?.selectionTags}),g=u.apply(ze.Representation.StructureSelectionsAngle3D,{customText:i?.customText||"",textColor:this.state.options.textColor,...i?.lineParams,...i?.labelParams,...i?.visualParams},{tags:i?.reprTags}),m=this.plugin.state.data;return await yt.State.Update(this.plugin,{state:m,tree:g,options:{doNotLogTiming:!0}}),{selection:u.selector,representation:g.selector}}async addDihedral(r,n,o,i,a){let A=this.plugin.helpers.substructureParent.get(r.structure),s=this.plugin.helpers.substructureParent.get(n.structure),c=this.plugin.helpers.substructureParent.get(o.structure),l=this.plugin.helpers.substructureParent.get(i.structure);if(!A||!s||!c||!l)return;let u=[A.transform.ref];Po(u,s.transform.ref),Po(u,c.transform.ref),Po(u,l.transform.ref);let m=this.getGroup().apply(ze.Model.MultiStructureSelectionFromBundle,{selections:[{key:"a",ref:A.transform.ref,...Dd(r)},{key:"b",ref:s.transform.ref,...Dd(n)},{key:"c",ref:c.transform.ref,...Dd(o)},{key:"d",ref:l.transform.ref,...Dd(i)}],isTransitive:!0,label:"Dihedral"},{dependsOn:u,tags:a?.selectionTags}),p=m.apply(ze.Representation.StructureSelectionsDihedral3D,{customText:a?.customText||"",textColor:this.state.options.textColor,...a?.lineParams,...a?.labelParams,...a?.visualParams},{tags:a?.reprTags}),d=this.plugin.state.data;return await yt.State.Update(this.plugin,{state:d,tree:p,options:{doNotLogTiming:!0}}),{selection:m.selector,representation:p.selector}}async addLabel(r,n){let o=this.plugin.helpers.substructureParent.get(r.structure);if(!o)return;let i=[o.transform.ref],A=this.getGroup().apply(ze.Model.MultiStructureSelectionFromBundle,{selections:[{key:"a",ref:o.transform.ref,...Dd(r)}],isTransitive:!0,label:"Label"},{dependsOn:i,tags:n?.selectionTags}),s=A.apply(ze.Representation.StructureSelectionsLabel3D,{textColor:this.state.options.textColor,...n?.labelParams,...n?.visualParams},{tags:n?.reprTags}),c=this.plugin.state.data;return await yt.State.Update(this.plugin,{state:c,tree:s,options:{doNotLogTiming:!0}}),{selection:A.selector,representation:s.selector}}async addOrientation(r){let n=[],o=[];for(let c=0,l=r.length;c<l;++c){let u=r[c],g=this.plugin.helpers.substructureParent.get(u.structure);g&&(Po(o,g.transform.ref),n.push({key:`l${c}`,ref:g.transform.ref,...Dd(u)}))}if(n.length===0)return;let a=this.getGroup().apply(ze.Model.MultiStructureSelectionFromBundle,{selections:n,isTransitive:!0,label:"Orientation"},{dependsOn:o}),A=a.apply(ze.Representation.StructureSelectionsOrientation3D),s=this.plugin.state.data;return await yt.State.Update(this.plugin,{state:s,tree:A,options:{doNotLogTiming:!0}}),{selection:a.selector,representation:A.selector}}async addPlane(r){let n=[],o=[];for(let c=0,l=r.length;c<l;++c){let u=r[c],g=this.plugin.helpers.substructureParent.get(u.structure);g&&(Po(o,g.transform.ref),n.push({key:`l${c}`,ref:g.transform.ref,...Dd(u)}))}if(n.length===0)return;let i=this.getGroup(),a=i.apply(ze.Model.MultiStructureSelectionFromBundle,{selections:n,isTransitive:!0,label:"Plane"},{dependsOn:o}),A=a.apply(ze.Representation.StructureSelectionsPlane3D),s=this.plugin.state.data;return await yt.State.Update(this.plugin,{state:s,tree:i,options:{doNotLogTiming:!0}}),{selection:a.selector,representation:A.selector}}async addOrderLabels(r){let n=this.getGroup(),o=this.plugin.state.data.select(fr.Generators.ofType(te.Molecule.Structure.Selections).withTag(I3));for(let A of o)n.delete(A);let i=1;for(let A of r){let s=this.plugin.helpers.substructureParent.get(A.structure);if(!s)continue;let c=[s.transform.ref];n.apply(ze.Model.MultiStructureSelectionFromBundle,{selections:[{key:"a",ref:s.transform.ref,...Dd(A)}],isTransitive:!0,label:"Order"},{dependsOn:c,tags:I3}).apply(ze.Representation.StructureSelectionsLabel3D,{textColor:ke.fromRgb(255,255,255),borderColor:ke.fromRgb(0,0,0),textSize:.33,borderWidth:.3,offsetZ:.75,customText:`${i++}`},{tags:I3})}let a=this.plugin.state.data;return await yt.State.Update(this.plugin,{state:a,tree:n,options:{doNotLogTiming:!0}}),{representation:n.selector}}getTransforms(r){let n=this.plugin.state.data,o=fr.findTagInSubtree(n.tree,en.RootRef,Vq),i=o?n.select(fr.Generators.ofTransformer(r,o)):this._empty;return i.length===0?this._empty:i}sync(){let r=[];for(let o of this.getTransforms(ze.Representation.StructureSelectionsLabel3D)){let i=o.obj.tags;(!i||!i.includes(I3))&&r.push(o)}this.updateState({labels:r,distances:this.getTransforms(ze.Representation.StructureSelectionsDistance3D),angles:this.getTransforms(ze.Representation.StructureSelectionsAngle3D),dihedrals:this.getTransforms(ze.Representation.StructureSelectionsDihedral3D),orientations:this.getTransforms(ze.Representation.StructureSelectionsOrientation3D),planes:this.getTransforms(ze.Representation.StructureSelectionsPlane3D)})&&this.stateUpdated()}};function CRe(e,t){let r=mQt(e,t||h3());return IQt(e.tree,r),t&&t.refs.forEach(fQt,r),{hierarchy:r.hierarchy,added:r.added,changed:r.changed}}function h3(){return{volumes:[],lazyVolumes:[],refs:new Map}}function lQt(e){return{kind:"volume",cell:e,version:e.transform.version,representations:[]}}function uQt(e){return{kind:"lazy-volume",cell:e,version:e.transform.version}}function gQt(e,t){return{kind:"volume-representation",cell:e,version:e.transform.version,volume:t}}function mQt(e,t){return{state:e,oldHierarchy:t,hierarchy:h3(),changed:!1,added:new Set}}function Yq(e,t,r,n,...o){let i=n(...o);r.push(i),e.hierarchy.refs.set(t.transform.ref,i);let a=e.oldHierarchy.refs.get(t.transform.ref);return a?a.version!==t.transform.version&&(e.changed=!0):(e.added.add(i.cell.transform.ref),e.changed=!0),i}function dQt(e,t){return(r,n)=>!t(n)&&e.is(r.obj)}function IRe(){}var pQt=[[dQt(te.Volume.Data,e=>e.currentVolume),(e,t)=>{e.currentVolume=Yq(e,t,e.hierarchy.volumes,lQt,t)},e=>e.currentVolume=void 0],[e=>te.Volume.Lazy.is(e.obj),(e,t)=>{Yq(e,t,e.hierarchy.lazyVolumes,uQt,t)},IRe],[(e,t)=>!e.state.isGhost&&!!t.currentVolume&&te.Volume.Representation3D.is(e.obj),(e,t)=>(e.currentVolume&&Yq(e,t,e.currentVolume.representations,gQt,t,e.currentVolume),!1),IRe]];function hRe(e){if(!e||!e?.parent||!e.parent.cells.has(e.transform.ref))return!1;let{obj:t}=e;return!(!t||t===po.Null||e.status!=="ok"&&e.status!=="error")}function fQt(e){let{cell:t}=e;hRe(t)||(this.changed=!0)}function BQt(e){yRe(this,this.tree.transforms.get(e))}function yRe(e,t){let{state:r}=e,n=r.state.cells.get(t.ref);if(!hRe(n))return;let o,i=!1;for(let[A,s,c]of pQt)if(A(n,r)){if(s(r,n)===!1){i=!0;break}o=c;break}if(i)return;let a=e.tree.children.get(t.ref);a&&a.size&&a.forEach(BQt,e),o&&o(r)}function IQt(e,t){let r={tree:e,state:t};return yRe(r,e.root),r.state}var sE=class extends du{constructor(r){super();this.plugin=r;this.state={syncedTree:this.dataState.tree,notified:!1,hierarchy:h3(),selection:void 0};this.behaviors={selection:this.ev.behavior({hierarchy:this.current,volume:this.selection})};this.subscribe(r.state.data.events.changed,n=>{n.inTransaction||r.behaviors.state.isAnimating.value||this.sync(!0)}),this.subscribe(r.behaviors.state.isAnimating,n=>{!n&&!r.behaviors.state.isUpdating.value&&this.sync(!0)})}get dataState(){return this.plugin.state.data}get current(){return this.sync(!1),this.state.hierarchy}get selection(){return this.sync(!1),this.state.selection}sync(r){if(!r&&this.dataState.inUpdate)return;if(this.state.syncedTree===this.dataState.tree){r&&!this.state.notified&&(this.state.notified=!0,this.behaviors.selection.next({hierarchy:this.state.hierarchy,volume:this.state.selection}));return}this.state.syncedTree=this.dataState.tree;let n=CRe(this.plugin.state.data,this.current);if(!n.changed)return;let{hierarchy:o}=n;this.state.hierarchy=o,this.state.selection?this.state.selection=o.refs.has(this.state.selection.cell.transform.ref)?o.refs.get(this.state.selection.cell.transform.ref):o.volumes[0]:this.state.selection=o.volumes[0],r?(this.state.notified=!0,this.behaviors.selection.next({hierarchy:o,volume:this.state.selection})):this.state.notified=!1}setCurrent(r){this.state.selection=r||this.state.hierarchy.volumes[0],this.behaviors.selection.next({hierarchy:this.state.hierarchy,volume:r||this.state.hierarchy.volumes[0]})}remove(r,n){if(r.length===0)return;let o=this.plugin.state.data.build();for(let i of r)o.delete(typeof i=="string"?i:i.cell.transform.ref);return o.commit({canUndo:n?"Remove":!1})}toggleVisibility(r,n){if(r.length===0)return;let o=n!==void 0?n!=="show":!r[0].cell.state.isHidden;for(let i of r)Tm(this.dataState,i.cell.transform.ref,o)}addRepresentation(r,n){return this.dataState.build().to(r.cell).apply(ze.Representation.VolumeRepresentation3D,Op(this.plugin,r.cell.obj?.data,{type:n})).commit({canUndo:"Add Representation"})}};(t=>{function e(r,n){return n?.cell.obj?.data?r.representation.volume.registry.getApplicableTypes(n.cell.obj?.data):r.representation.volume.registry.types}t.getRepresentationTypes=e})(sE||={});var CQt=[{name:"center-camera",execute:({event:e,args:t,manager:r})=>{e==="click"&&"center-camera"in t&&r.plugin.managers.camera.reset()}},{name:"apply-snapshot",execute:({event:e,args:t,manager:r})=>{if(e!=="click")return;let n=t["apply-snapshot"];n&&r.plugin.managers.snapshot.applyKey(n)}},{name:"next-snapshot",execute:({event:e,args:t,manager:r})=>{if(e!=="click"||!("next-snapshot"in t))return;let n=+t["next-snapshot"]||1;n&&(n<0?n=-1:n=1,r.plugin.managers.snapshot.applyNext(n))}},{name:"focus-refs",execute:({event:e,args:t,manager:r})=>{if(e!=="click")return;let n=Oq(t["focus-refs"]);if(!n?.length)return;let o=r.findCells(n);if(!o.length)return;let i=QRe(r.plugin,o);if(!i.length)return;let a=i.map(A=>wq(r.plugin,A.transform.ref)).filter(A=>!!A);a.length&&r.plugin.managers.camera.focusSpheres(a,A=>A,{extraRadius:3})}},{name:"highlight-refs",execute:({event:e,args:t,manager:r})=>{let n=Oq(t["highlight-refs"]);if(n?.length){if(e==="mouse-leave"&&n.length){r.plugin.managers.interactivity.lociHighlights.clearHighlights();return}else if(e==="mouse-enter"){let o=r.findCells(n);for(let i of QRe(r.plugin,o)){if(!i.obj?.data)continue;let{repr:a}=i.obj.data;for(let A of a.getAllLoci())r.plugin.managers.interactivity.lociHighlights.highlight({loci:A,repr:a},!1)}}}}},{name:"query",execute:({event:e,args:t,manager:r})=>{let n=t.query;if(!n?.length)return;let o=t.lang||"mol-script",i=Oq(t.action||"highlight"),a=parseFloat(t["focus-radius"]||"3");if(e==="mouse-leave"){i.includes("highlight")&&r.plugin.managers.interactivity.lociHighlights.clearHighlights();return}let A;try{A=zo.toQuery({language:o,expression:n})}catch(c){console.warn(`Failed to parse query '${n}' (${o})`,c);return}let s=r.plugin.state.data.selectQ(c=>c.rootsOfType(te.Molecule.Structure));if(e==="mouse-enter"){if(!i.includes("focus"))return;r.plugin.managers.interactivity.lociHighlights.clearHighlights();for(let c of s){if(!c.obj?.data)continue;let l=A(new qo(c.obj.data)),u=Qt.toLociWithSourceUnits(l);r.plugin.managers.interactivity.lociHighlights.highlight({loci:u},!1)}}if(e==="click"){if(!i.includes("focus"))return;let l=s.map(u=>fr.getDecorated(r.plugin.state.data,u.transform.ref)).map(u=>{if(!u.obj?.data)return;let g=A(new qo(u.obj.data));if(Qt.isEmpty(g))return;let m=Qt.toLociWithSourceUnits(g);return W.Loci.getBoundary(m).sphere}).filter(u=>!!u);l.length&&r.plugin.managers.camera.focusSpheres(l,u=>u,{extraRadius:a})}}},{name:"play-audio",execute:({event:e,args:t,manager:r})=>{if(e!=="click")return;let n=t["play-audio"];n?.length&&r.audio.play(n)}},{name:"toggle-audio",execute:({event:e,args:t,manager:r})=>{if(e!=="click"||!("toggle-audio"in t))return;let n=t["toggle-audio"];r.audio.play(n,{toggle:!0})}},{name:"pause-audio",execute:({event:e,args:t,manager:r})=>{e!=="click"||!("pause-audio"in t)||r.audio.pause()}},{name:"stop-audio",execute:({event:e,args:t,manager:r})=>{e!=="click"||!("stop-audio"in t)||r.audio.stop()}},{name:"dispose-audio",execute:({event:e,args:t,manager:r})=>{e!=="click"||!("dispose-audio"in t)||r.audio.dispose()}},{name:"play-transition",execute:({event:e,args:t,manager:r})=>{e!=="click"||!("play-transition"in t)||r.plugin.managers.animation.play(qI,{})}},{name:"play-snapshots",execute:({event:e,args:t,manager:r})=>{e!=="click"||!("play-snapshots"in t)||r.plugin.managers.snapshot.play({restart:!0})}},{name:"stop-animation",execute:({event:e,args:t,manager:r})=>{e!=="click"||!("stop-animation"in t)||r.plugin.managers.snapshot.stop()}}],y3=class{constructor(t){this.plugin=t;this.state={audioPlayer:new _A(null)};this.extension=[];this.refResolvers={default:(t,r)=>r.map(n=>t.state.data.cells.get(n)).filter(n=>!!n)};this.uriResolvers={};this.argsParsers=[["default",100,hQt]];this.audio={play:async(t,r)=>{try{let n=this.resolveAudioPlayer(),o=!1;if(t?.trim()){let i=this.tryResolveUri(t),a=t;typeof i?.then=="function"?a=await i:i&&(a=i),o=n.src!==a,o&&(n.src=a,n.load())}!o&&r?.toggle?n.paused?await n.play():n.pause():(n.currentTime=0,await n.play())}catch(n){console.error("Failed to play audio",n)}},pause:()=>{this.audioPlayer?.pause()},stop:()=>{this.audioPlayer&&(this.audioPlayer.pause(),this.audioPlayer.currentTime=0)},dispose:()=>{this.audioPlayer&&(this.audioPlayer.pause(),this.audioPlayer.currentTime=0,this.state.audioPlayer.next(null))}};for(let r of CQt)this.registerExtension(r)}registerArgsParser(t,r,n){this.removeArgsParser(t),this.argsParsers.push([t,r,n]),this.argsParsers.sort((o,i)=>i[1]-o[1])}removeArgsParser(t){let r=this.argsParsers.findIndex(n=>n[0]===t);r>=0&&this.argsParsers.splice(r,1)}parseArgs(t){for(let[,,r]of this.argsParsers){let n=r(t);if(n)return n}}registerRefResolver(t,r){this.refResolvers[t]=r}removeRefResolver(t){delete this.refResolvers[t]}registerUriResolver(t,r){this.uriResolvers[t]=r}removeUriResolver(t){delete this.uriResolvers[t]}registerExtension(t){let r=this.extension.findIndex(n=>n.name===t.name);r>=0?this.extension[r]=t:this.extension.push(t)}removeExtension(t){let r=this.extension.findIndex(n=>n.name===t);r>=0&&this.extension.splice(r,1)}_tryRender(t,r){try{return t.reactRenderFn?.(r)}catch(n){return console.error(`Failed to render markdown extension '${t.name}'`,n),null}}tryRender(t,r){let n={args:t,manager:this};for(let o of this.extension){let i=this._tryRender(o,n);if(i)return i}for(let o of r){let i=this._tryRender(o,n);if(i)return i}return null}tryExecute(t,r){let n={event:t,args:r,manager:this};for(let o of this.extension)try{o.execute?.(n)}catch(i){console.error(`Failed to execute markdown extension '${o.name}'`,i)}}tryResolveUri(t){for(let r of Object.values(this.uriResolvers)){let n=r(this.plugin,t);if(n)return n}}findCells(t){let r=new Set,n=[];for(let o of Object.values(this.refResolvers))for(let i of o(this.plugin,t))i&&!r.has(i.transform.ref)&&(r.add(i.transform.ref),n.push(i));return n}resolveAudioPlayer(){if(this.state.audioPlayer.value)return this.state.audioPlayer.value;let t=document.createElement("audio");return t.controls=!0,t.preload="auto",t.style.width="100%",t.style.height="32px",this.state.audioPlayer.next(t),t}get audioPlayer(){return this.state.audioPlayer.value}};function Oq(e){return e?.split(",").map(t=>t.trim()).filter(t=>t.length>0)??[]}function QRe(e,t){return t.length?e.state.data.selectQ(r=>r.byValue(...t).subtree().filter(n=>te.isRepresentation3D(n.obj))):[]}function hQt(e){if(!e?.startsWith("!"))return;let t=decodeURIComponent(e.substring(1)).split("&").map(r=>r.trim()).filter(r=>r.length>0).map(r=>r.split("=",2).map(n=>n.trim()));if(t.length!==0)return Object.fromEntries(t)}var yQt=[["full","Full"],["collapsed","Collapsed"],["hidden","Hidden"]],Jq=[["full","Full"],["hidden","Hidden"]],QQt={isExpanded:h.Boolean(!1),showControls:h.Boolean(!0),regionState:h.Group({left:h.Select("full",yQt),top:h.Select("full",Jq),right:h.Select("full",Jq),bottom:h.Select("full",Jq)}),controlsDisplay:h.Value("outside",{isHidden:!0}),expandToFullscreen:h.Boolean(!1)},Q3=class extends Ec{constructor(r){super({...h.getDefaultValues(QQt),...r.spec.layout&&r.spec.layout.initial});this.context=r;this.events={updated:this.ev()};this.rootState=void 0;this.fullscreenChangeHandler=()=>{document.fullscreenElement||this.updateProps({expandToFullscreen:!1})};document.addEventListener("fullscreenchange",this.fullscreenChangeHandler),document.addEventListener("webkitfullscreenchange",this.fullscreenChangeHandler),yt.Layout.Update.subscribe(r,n=>this.updateProps(n.state)),typeof document<"u"&&(this.expandedViewport=document.createElement("meta"),this.expandedViewport.name="viewport",this.expandedViewport.content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0")}updateProps(r){let n=!!this.state.isExpanded;if(this.updateState(r),this.root&&typeof r.isExpanded=="boolean"&&r.isExpanded!==n&&this.handleExpand(),this.state.expandToFullscreen){let o=document.getElementsByTagName("body")[0];o&&this.tryRequestFullscreen(o)}else document.fullscreenElement&&this.tryExitFullscreen();this.events.updated.next(void 0)}setProps(r){this.updateState(r)}setRoot(r){this.root=r,this.state.isExpanded&&this.handleExpand()}getScrollElement(){return document.scrollingElement?document.scrollingElement:document.documentElement?document.documentElement:document.body}async tryRequestFullscreen(r){if(!document.fullscreenElement)try{await r.requestFullscreen()}catch(n){console.error(n)}}async tryExitFullscreen(){if(document.fullscreenElement)try{await document.exitFullscreen()}catch(r){console.error(r)}}handleExpand(){try{let r=document.getElementsByTagName("body")[0],n=document.getElementsByTagName("head")[0];if(!r||!n||!this.root)return;if(this.state.isExpanded){let o=n.children,i=[],a=!1;for(let u=0;u<o.length;u++)o[u]===this.expandedViewport?a=!0:(o[u].name||"").toLowerCase()==="viewport"&&i.push(o[u]);for(let u of i)n.removeChild(u);a||n.appendChild(this.expandedViewport);let A=r.style,s=this.getScrollElement(),c=s.scrollLeft,l=s.scrollTop;this.rootState={top:A.top,bottom:A.bottom,right:A.right,left:A.left,scrollTop:l,scrollLeft:c,position:A.position,overflow:A.overflow,viewports:i,zIndex:this.root.style.zIndex,width:A.width,height:A.height,maxWidth:A.maxWidth,maxHeight:A.maxHeight,margin:A.margin,marginLeft:A.marginLeft,marginRight:A.marginRight,marginTop:A.marginTop,marginBottom:A.marginBottom},A.overflow="hidden",A.position="fixed",A.top="0",A.bottom="0",A.right="0",A.left="0",A.width="100%",A.height="100%",A.maxWidth="100%",A.maxHeight="100%",A.margin="0",A.marginLeft="0",A.marginRight="0",A.marginTop="0",A.marginBottom="0"}else{let o=n.children;for(let i=0;i<o.length;i++)if(o[i]===this.expandedViewport){n.removeChild(this.expandedViewport);break}if(this.state.expandToFullscreen&&document.fullscreenElement&&document.exitFullscreen(),this.rootState){let i=this.rootState;for(let s of i.viewports)n.appendChild(s);let a=r.style;a.top=i.top,a.bottom=i.bottom,a.left=i.left,a.right=i.right,a.width=i.width,a.height=i.height,a.maxWidth=i.maxWidth,a.maxHeight=i.maxHeight,a.margin=i.margin,a.marginLeft=i.marginLeft,a.marginRight=i.marginRight,a.marginTop=i.marginTop,a.marginBottom=i.marginBottom,a.position=i.position,a.overflow=i.overflow||"";let A=this.getScrollElement();A.scrollTop=i.scrollTop,A.scrollLeft=i.scrollLeft,this.rootState=void 0,this.root.style.zIndex=i.zIndex}}}catch(r){let n="Layout change error, you might have to reload the page.";this.context.log.error(n),console.error(n,r)}}dispose(){super.dispose(),document.removeEventListener("fullscreenchange",this.fullscreenChangeHandler),document.removeEventListener("webkitfullscreenchange",this.fullscreenChangeHandler)}};var Kq={includeTypes:h.MultiSelect(Du(It.Names),h.objectToOptions(It.Names)),excludeTypes:h.MultiSelect([],h.objectToOptions(It.Names)),ignoreHydrogens:h.Boolean(!1),ignoreHydrogensVariant:h.Select("all",h.arrayToOptions(["all","non-polar"])),aromaticBonds:h.Boolean(!0,{description:"Display aromatic bonds with dashes"}),multipleBonds:h.Select("symmetric",h.arrayToOptions(["off","symmetric","offset"])),metalCoordination:h.Select("dashed",h.arrayToOptions(["dashed","solid"]))},P1n=h.getDefaultValues(Kq),BF={...Nl,...Kq,adjustCylinderLength:h.Boolean(!1,{description:"Shorten cylinders to reduce overlap with spheres. Useful for for transparent bonds. Not working well with aromatic bonds."})},G1n=h.getDefaultValues(BF),IF={...PZ,...Kq},N1n=h.getDefaultValues(IF);function CF(e,t,r){return!It.is(e,r)||It.is(t,r)}function E3(e,t,r){let n=t.elements,o=t.bonds,{a:i,b:a,edgeProps:A}=o,{flags:s}=A,{ignoreHydrogens:c,ignoreHydrogensVariant:l,includeTypes:u,excludeTypes:g}=r,m=It.fromNames(u),p=It.fromNames(g),d=It.isAll(m)&&It.Flag.None===p,{child:f}=e,I=f?.unitMap.get(t.id);if(f&&!I)throw new Error("expected childUnit to exist if child exists");if(!(d&&!c&&!f))return C=>{let y=i[C],Q=a[C];return I&&!je.has(I.elements,n[y])||!d&&CF(m,p,s[C])?!0:c?!!(Ug(e,t,n[y],l)||Ug(e,t,n[Q],l)):!1}}function b3(e,t){let r=e.interUnitBonds,{edges:n}=r,{ignoreHydrogens:o,ignoreHydrogensVariant:i,includeTypes:a,excludeTypes:A}=t,s=It.fromNames(a),c=It.fromNames(A),l=It.isAll(s)&&It.Flag.None===c,{child:u}=e;if(!(l&&!o&&!u))return g=>{if(u){let m=n[g],p=u.unitMap.get(m.unitA);if(!p)return!0;let f=e.unitMap.get(m.unitA).elements[m.indexA];if(!je.has(p.elements,f))return!0}if(o){let m=n[g],p=e.unitMap.get(m.unitA),d=e.unitMap.get(m.unitB);if(Ug(e,p,p.elements[m.indexA],i)||Ug(e,d,d.elements[m.indexB],i))return!0}return!!(!l&&CF(s,c,n[g].props.flag))}}function jh(e,t){return ge.Traits.is(e.traits,ge.Trait.Water)?!t.ignoreHydrogens||t.ignoreHydrogensVariant==="non-polar":!0}function Ls(e,t){for(let{units:r}of e.unitSymmetryGroups)if(ge.isAtomic(r[0])&&jh(r[0],t))return!0;return!1}var Gm;(n=>{function e(o,i){let{group:a,structure:A}=o,s=a.units[0],c=ge.isAtomic(s)?s.bonds.edgeCount*2:0,l=a.units.length,u=Et.Location(A,void 0,void 0,A,void 0,void 0),g=(m,p)=>{let d=a.units[p];return u.aUnit=d,u.bUnit=d,u.aIndex=d.bonds.a[m],u.bIndex=d.bonds.b[m],u};if(i?.includeLocation2){let m=Et.Location(A,void 0,void 0,A,void 0,void 0);return rn(c,l,1,g,!1,()=>!1,(d,f)=>{let I=a.units[f];return m.aUnit=I,m.bUnit=I,m.aIndex=I.bonds.b[d],m.bIndex=I.bonds.a[d],m})}return rn(c,l,1,g)}n.fromGroup=e;function t(o,i){let a=o.interUnitBonds.edgeCount,A=1,s=Et.Location(o,void 0,void 0,o,void 0,void 0),c=l=>{let u=o.interUnitBonds.edges[l];return s.aUnit=o.unitMap.get(u.unitA),s.aIndex=u.indexA,s.bUnit=o.unitMap.get(u.unitB),s.bIndex=u.indexB,s};if(i?.includeLocation2){let l=Et.Location(o,void 0,void 0,o,void 0,void 0);return rn(a,A,1,c,!0,()=>!1,g=>{let m=o.interUnitBonds.edges[g];return l.aUnit=o.unitMap.get(m.unitB),l.aIndex=m.indexB,l.bUnit=o.unitMap.get(m.unitA),l.bIndex=m.indexA,l})}return rn(a,A,1,c,!0)}n.fromStructure=t;function r(o,i){let{bondCount:a,unitIndex:A,unitGroupIndex:s,unitEdgeIndex:c}=o.intraUnitBondMapping,l=a,u=1,g=Et.Location(o,void 0,void 0,o,void 0,void 0),m=p=>{let f=o.unitSymmetryGroups[A[p]].units[s[p]],I=c[p];return g.aUnit=f,g.bUnit=f,g.aIndex=f.bonds.a[I],g.bIndex=f.bonds.b[I],g};if(i?.includeLocation2){let p=Et.Location(o,void 0,void 0,o,void 0,void 0);return rn(l,u,1,m,!0,()=>!1,f=>{let C=o.unitSymmetryGroups[A[f]].units[s[f]],y=c[f];return p.aUnit=C,p.bUnit=C,p.aIndex=C.bonds.b[y],p.bIndex=C.bonds.a[y],p})}return rn(l,u,1,m,!0)}n.fromStructureGroups=r})(Gm||={});function hF(e,t,r){let{objectId:n,instanceId:o,groupId:i}=e;if(r===n){let{structure:a,group:A}=t,s=A.units[o];if(i===Ai.Null){let c=Ee.ofRange(0,s.elements.length);return W.Loci(a.target,[{unit:s,indices:c}])}else if(ge.isAtomic(s)){let{target:c}=a,l=s.bonds.a[i],u=s.bonds.b[i];return Et.Loci(c,[Et.Location(c,s,l,c,s,u),Et.Location(c,s,u,c,s,l)])}}return Ir}function HU(e,t,r,n){let o=!1;if(Et.isLoci(e)){let{structure:i,group:a}=t;if(!Ye.areEquivalent(e.structure,i))return!1;let A=a.units[0];if(!ge.isAtomic(A))return!1;let s=A.bonds.edgeCount*2;for(let c of e.bonds){if(c.aUnit!==c.bUnit)continue;let l=a.unitIndexMap.get(c.aUnit.id);if(l!==void 0){let u=A.bonds.getDirectedEdgeIndex(c.aIndex,c.bIndex);u!==-1&&r(Ue.ofSingleton(l*s+u))&&(o=!0)}}}else if(W.Loci.is(e)){let{structure:i,group:a}=t;if(!Ye.areEquivalent(e.structure,i))return!1;let A=a.units[0];if(!ge.isAtomic(A))return!1;let s=A.bonds.edgeCount*2;for(let c of e.elements){let l=a.unitIndexMap.get(c.unit.id);if(l!==void 0){let{offset:u,b:g}=A.bonds;Ee.forEach(c.indices,m=>{for(let p=u[m],d=u[m+1];p<d;p++)(!n||Ee.has(c.indices,g[p]))&&r(Ue.ofSingleton(l*s+p))&&(o=!0)})}}}return o}function VU(e,t,r){let{objectId:n,groupId:o}=e;if(r===n){let{target:i}=t;if(o===Ai.Null)return Ye.Loci(i);{let a=t.interUnitBonds.edges[o],A=t.unitMap.get(a.unitA),s=t.unitMap.get(a.unitB);return Et.Loci(i,[Et.Location(i,A,a.indexA,i,s,a.indexB),Et.Location(i,s,a.indexB,i,A,a.indexA)])}}return Ir}var zq=new Map;function _U(e,t,r,n){let o=!1;if(Et.isLoci(e)){if(!Ye.areEquivalent(e.structure,t))return!1;for(let i of e.bonds){let a=t.interUnitBonds.getBondIndexFromLocation(i);a!==-1&&r(Ue.ofSingleton(a))&&(o=!0)}}else if(W.Loci.is(e)){if(!Ye.areEquivalent(e.structure,t)||n&&e.elements.length===1)return!1;for(let i of e.elements)zq.set(i.unit.id,i.indices);for(let i of e.elements){let{unit:a}=i;if(ge.isAtomic(a))for(let A of t.interUnitBonds.getConnectedUnits(a.id)){let s=zq.get(A.unitB);(!n||s)&&Ee.forEach(i.indices,c=>{if(A.connectedIndices.includes(c)){for(let l of A.getEdges(c))if(!n||s&&Ee.has(s,l.indexB)){let u=t.interUnitBonds.getEdgeIndex(c,a.id,l.indexB,A.unitB);r(Ue.ofSingleton(u))&&(o=!0)}}})}}zq.clear()}return o}function YU(e,t,r){let{objectId:n,groupId:o}=e;if(r===n){let i=t.intraUnitBondMapping;return hF({objectId:n,instanceId:i.unitGroupIndex[o],groupId:i.unitEdgeIndex[o]},{structure:t,group:t.unitSymmetryGroups[i.unitIndex[o]]},r)}return Ir}function OU(e,t,r,n){let{unitGroupOffset:o}=t.intraUnitBondMapping,i=!1;if(Et.isLoci(e)){if(!Ye.areEquivalent(e.structure,t))return!1;for(let a of e.bonds){if(a.aUnit!==a.bUnit)continue;let A=t.unitSymmetryGroupsIndexMap.get(a.aUnit.id),s=t.unitSymmetryGroups[A],c=s.units[0];if(!ge.isAtomic(c))continue;let l=o[A],u=c.bonds.edgeCount*2,g=s.unitIndexMap.get(a.aUnit.id);if(g!==void 0){let m=c.bonds.getDirectedEdgeIndex(a.aIndex,a.bIndex);m!==-1&&r(Ue.ofSingleton(g*u+m+l))&&(i=!0)}}}else if(W.Loci.is(e)){if(!Ye.areEquivalent(e.structure,t))return!1;for(let a of e.elements){let A=t.unitSymmetryGroupsIndexMap.get(a.unit.id),s=t.unitSymmetryGroups[A],c=s.units[0];if(!ge.isAtomic(c))continue;let l=o[A],u=c.bonds.edgeCount*2,g=s.unitIndexMap.get(a.unit.id);if(g!==void 0){let{offset:m,b:p}=c.bonds;Ee.forEach(a.indices,d=>{for(let f=m[d],I=m[d+1];f<I;f++)(!n||Ee.has(a.indices,p[f]))&&r(Ue.ofSingleton(g*u+f+l))&&(i=!0)})}}}return i}var jq=It.is;function Wq(e,t,r,n){let o=e.elements,i=e.bonds,{edgeCount:a,a:A,b:s,edgeProps:c,offset:l}=i,{order:u,flags:g}=c,{sizeFactor:m,sizeAspectRatio:p,adjustCylinderLength:d,aromaticBonds:f,includeTypes:I,excludeTypes:C,multipleBonds:y,metalCoordination:Q}=n,E=y==="off",b=y==="symmetric",x=Q==="dashed",S=It.fromNames(I),w=It.fromNames(C),R=CF(S,w,It.Flag.Computed),T=B(),L=B(),F=e.conformation,v,U=W.Location.create(t,e),G=Et.Location(t,e,void 0,t,e,void 0),{child:N}=t;if(n.includeParent&&N){let q=N.unitMap.get(e.id);if(!q)throw new Error("expected childUnit to exist");v=ne=>{let oe=o[A[ne]],ae=o[s[ne]];return je.has(q.elements,oe)&&!je.has(q.elements,ae)}}let k=q=>(G.aIndex=A[q],G.bIndex=s[q],r.size.size(G)*m),J=q=>(U.element=o[A[q]],r.size.size(U)*m),H=q=>(U.element=o[s[q]],r.size.size(U)*m),{elementRingIndices:z,elementAromaticRingIndices:_}=e.rings,M=f?e.resonance.delocalizedTriplets:void 0;return{linkCount:a*2,referencePosition:q=>{let ne=A[q],oe=s[q],ae=M?.getThirdElement(ne,oe);if(ae!==void 0)return F.invariantPosition(o[ae],T);ne>oe&&([ne,oe]=[oe,ne]),l[ne+1]-l[ne]===1&&([ne,oe]=[oe,ne]);let me=_.get(ne)||z.get(ne),Se=0;for(let ee=l[ne],O=l[ne+1];ee<O;++ee){let X=s[ee];if(X!==oe&&X!==ne)if(me){let Ce=_.get(X)||z.get(X);if(!Ce)continue;let Ne=VS(me,Ce);Ne>Se&&(Se=Ne,F.invariantPosition(o[X],T))}else return F.invariantPosition(o[X],T)}return Se>0?T:null},position:(q,ne,oe,ae)=>{if(F.invariantPosition(o[A[oe]],q),F.invariantPosition(o[s[oe]],ne),ae&&d){let me=J(oe),Se=H(oe),ee=Math.min(me,Se)*p,O=Math.sqrt(Math.max(0,me*me-ee*ee))-.05,X=Math.sqrt(Math.max(0,Se*Se-ee*ee))-.05;if(O<=.01&&X<=.01)return;B.normalize(L,B.sub(L,ne,q)),B.scaleAndAdd(q,q,L,O),B.scaleAndAdd(ne,ne,L,-X)}},style:q=>{let ne=u[q],oe=g[q];if(jq(oe,It.Flag.MetallicCoordination))return x?1:0;if(jq(oe,It.Flag.HydrogenBond))return 1;if(ne===3)return E?0:b?4:5;if(f){let ae=A[q],me=s[q],Se=_.get(ae),ee=_.get(me),O=Se&&ee?VS(Se,ee):0;if(jq(oe,It.Flag.Aromatic)||O&&!R)return O===2?8:7}return ne!==2||E?0:b?2:3},radius:q=>k(q)*p,ignore:E3(t,e,n),stub:v}}function EQt(e,t,r,n,o,i){if(!ge.isAtomic(t))return _a.createEmpty(i);if(!jh(t,o))return _a.createEmpty(i);if(!t.bonds.edgeCount)return _a.createEmpty(i);let{child:a}=r,A=a?.unitMap.get(t.id);if(a&&!A)return _a.createEmpty(i);let s=Wq(t,r,n,o),{cylinders:c,boundingSphere:l}=hU(e,s,o,i);if(l)c.setBoundingSphere(l);else if(c.cylinderCount>0){let u=we.expand(we(),(A??t).boundary.sphere,1*o.sizeFactor);c.setBoundingSphere(u)}return c}function bQt(e,t,r,n,o,i){if(!ge.isAtomic(t))return At.createEmpty(i);if(!jh(t,o))return At.createEmpty(i);if(!t.bonds.edgeCount)return At.createEmpty(i);let{child:a}=r,A=a?.unitMap.get(t.id);if(a&&!A)return At.createEmpty(i);let s=Wq(t,r,n,o),{mesh:c,boundingSphere:l}=Qc(e,s,o,i);if(l)c.setBoundingSphere(l);else if(c.triangleCount>0){let u=we.expand(we(),(A??t).boundary.sphere,1*o.sizeFactor);c.setBoundingSphere(u)}return c}var yF={...bo,...$v,...BF,sizeFactor:h.Numeric(.3,{min:0,max:10,step:.01}),sizeAspectRatio:h.Numeric(2/3,{min:0,max:3,step:.01}),tryUseImpostor:h.Boolean(!0),includeParent:h.Boolean(!1)};function x3(e,t,r,n){return r.tryUseImpostor&&zQ(n)?xQt(e):SQt(e)}function xQt(e){return eF({defaultProps:h.getDefaultValues(yF),createGeometry:EQt,createLocationIterator:(t,r)=>Gm.fromGroup(t,{includeLocation2:r.colorMode==="interpolate"}),getLoci:hF,eachLocation:HU,setUpdateState:(t,r,n,o,i,a,A)=>{t.createGeometry=r.sizeFactor!==n.sizeFactor||r.sizeAspectRatio!==n.sizeAspectRatio||r.linkScale!==n.linkScale||r.linkSpacing!==n.linkSpacing||r.ignoreHydrogens!==n.ignoreHydrogens||r.ignoreHydrogensVariant!==n.ignoreHydrogensVariant||r.linkCap!==n.linkCap||r.aromaticScale!==n.aromaticScale||r.aromaticSpacing!==n.aromaticSpacing||r.aromaticDashCount!==n.aromaticDashCount||r.dashCount!==n.dashCount||r.dashScale!==n.dashScale||r.dashCap!==n.dashCap||r.stubCap!==n.stubCap||!Fa(r.includeTypes,n.includeTypes)||!Fa(r.excludeTypes,n.excludeTypes)||r.adjustCylinderLength!==n.adjustCylinderLength||r.aromaticBonds!==n.aromaticBonds||r.multipleBonds!==n.multipleBonds||r.metalCoordination!==n.metalCoordination||r.adjustCylinderLength&&!Qi.areEqual(o.size,i.size),r.colorMode!==n.colorMode&&(t.createGeometry=!0,t.updateTransform=!0,t.updateColor=!0);let s=a.group.units[0],c=A.group.units[0];ge.isAtomic(s)&&ge.isAtomic(c)&&(fa.areEqual(s.bonds,c.bonds)||(t.createGeometry=!0,t.updateTransform=!0,t.updateColor=!0,t.updateSize=!0))},mustRecreate:(t,r,n)=>!r.tryUseImpostor||!n},e)}function SQt(e){return Vo({defaultProps:h.getDefaultValues(yF),createGeometry:bQt,createLocationIterator:t=>Gm.fromGroup(t),getLoci:hF,eachLocation:HU,setUpdateState:(t,r,n,o,i,a,A)=>{t.createGeometry=r.sizeFactor!==n.sizeFactor||r.sizeAspectRatio!==n.sizeAspectRatio||r.radialSegments!==n.radialSegments||r.linkScale!==n.linkScale||r.linkSpacing!==n.linkSpacing||r.ignoreHydrogens!==n.ignoreHydrogens||r.ignoreHydrogensVariant!==n.ignoreHydrogensVariant||r.linkCap!==n.linkCap||r.aromaticScale!==n.aromaticScale||r.aromaticSpacing!==n.aromaticSpacing||r.aromaticDashCount!==n.aromaticDashCount||r.dashCount!==n.dashCount||r.dashScale!==n.dashScale||r.dashCap!==n.dashCap||r.stubCap!==n.stubCap||!Fa(r.includeTypes,n.includeTypes)||!Fa(r.excludeTypes,n.excludeTypes)||r.adjustCylinderLength!==n.adjustCylinderLength||r.aromaticBonds!==n.aromaticBonds||r.multipleBonds!==n.multipleBonds||r.metalCoordination!==n.metalCoordination;let s=a.group.units[0],c=A.group.units[0];ge.isAtomic(s)&&ge.isAtomic(c)&&(fa.areEqual(s.bonds,c.bonds)||(t.createGeometry=!0,t.updateTransform=!0,t.updateColor=!0,t.updateSize=!0))},mustRecreate:(t,r,n)=>r.tryUseImpostor&&!!n},e)}function ERe(e,t,r){let n=[],{bondCount:o,unitIndex:i,unitEdgeIndex:a,unitGroupIndex:A}=e.intraUnitBondMapping,{child:s}=e;for(let c of e.unitSymmetryGroups){let l=c.units[0],u=s?.unitMap.get(l.id),g=ge.isAtomic(l)&&!(s&&!u)?Wq(l,e,t,r):LV;n.push({group:c,props:g})}return{linkCount:o,referencePosition:c=>{let{group:l,props:u}=n[i[c]];if(!u.referencePosition)return null;let g=u.referencePosition(a[c]);if(!g)return null;let m=l.units[A[c]];return B.transformMat4(g,g,m.conformation.operator.matrix),g},position:(c,l,u,g)=>{let{group:m,props:p}=n[i[u]];p.position(c,l,a[u],g);let d=m.units[A[u]];B.transformMat4(c,c,d.conformation.operator.matrix),B.transformMat4(l,l,d.conformation.operator.matrix)},style:c=>{let{props:l}=n[i[c]];return l.style?l.style(a[c]):0},radius:c=>{let{props:l}=n[i[c]];return l.radius(a[c])},ignore:c=>{let{props:l}=n[i[c]];return l.ignore?l.ignore(a[c]):!1},stub:c=>{let{props:l}=n[i[c]];return l.stub?l.stub(a[c]):!1}}}function DQt(e,t,r,n,o){if(!Ls(t,n))return _a.createEmpty(o);if(!t.intraUnitBondMapping.bondCount)return _a.createEmpty(o);let i=ERe(t,r,n),{cylinders:a,boundingSphere:A}=hU(e,i,n,o);if(A)a.setBoundingSphere(A);else if(a.cylinderCount>0){let{child:s}=t,c=we.expand(we(),(s??t).boundary.sphere,1*n.sizeFactor);a.setBoundingSphere(c)}return a}function vQt(e,t,r,n,o){if(!Ls(t,n))return At.createEmpty(o);if(!t.intraUnitBondMapping.bondCount)return At.createEmpty(o);let i=ERe(t,r,n),{mesh:a,boundingSphere:A}=Qc(e,i,n,o);if(A)a.setBoundingSphere(A);else if(a.triangleCount>0){let{child:s}=t,c=we.expand(we(),(s??t).boundary.sphere,1*n.sizeFactor);a.setBoundingSphere(c)}return a}var bRe={...Us,...hV,...BF,sizeFactor:h.Numeric(.3,{min:0,max:10,step:.01}),sizeAspectRatio:h.Numeric(2/3,{min:0,max:3,step:.01}),tryUseImpostor:h.Boolean(!0),includeParent:h.Boolean(!1)};function S3(e,t,r,n){return r.tryUseImpostor&&n&&n.extensions.fragDepth?FQt(e):wQt(e)}function FQt(e){return yV({defaultProps:h.getDefaultValues(bRe),createGeometry:DQt,createLocationIterator:(t,r)=>Ls(t,r)?Gm.fromStructureGroups(t,{includeLocation2:r.colorMode==="interpolate"}):uI,getLoci:YU,eachLocation:OU,setUpdateState:(t,r,n,o,i,a,A)=>{t.createGeometry=r.sizeFactor!==n.sizeFactor||r.sizeAspectRatio!==n.sizeAspectRatio||r.linkScale!==n.linkScale||r.linkSpacing!==n.linkSpacing||r.ignoreHydrogens!==n.ignoreHydrogens||r.ignoreHydrogensVariant!==n.ignoreHydrogensVariant||r.linkCap!==n.linkCap||r.aromaticScale!==n.aromaticScale||r.aromaticSpacing!==n.aromaticSpacing||r.aromaticDashCount!==n.aromaticDashCount||r.dashCount!==n.dashCount||r.dashScale!==n.dashScale||r.dashCap!==n.dashCap||r.stubCap!==n.stubCap||!Fa(r.includeTypes,n.includeTypes)||!Fa(r.excludeTypes,n.excludeTypes)||r.adjustCylinderLength!==n.adjustCylinderLength||r.multipleBonds!==n.multipleBonds||r.metalCoordination!==n.metalCoordination,r.colorMode!==n.colorMode&&(t.createGeometry=!0,t.updateTransform=!0,t.updateColor=!0),Ls(a,r)&&a.interUnitBonds!==A.interUnitBonds&&(t.createGeometry=!0,t.updateTransform=!0,t.updateColor=!0,t.updateSize=!0)},mustRecreate:(t,r,n)=>!r.tryUseImpostor||!n},e)}function wQt(e){return Oa({defaultProps:h.getDefaultValues(bRe),createGeometry:vQt,createLocationIterator:(t,r)=>Ls(t,r)?Gm.fromStructureGroups(t):uI,getLoci:YU,eachLocation:OU,setUpdateState:(t,r,n,o,i,a,A)=>{t.createGeometry=r.sizeFactor!==n.sizeFactor||r.sizeAspectRatio!==n.sizeAspectRatio||r.radialSegments!==n.radialSegments||r.linkScale!==n.linkScale||r.linkSpacing!==n.linkSpacing||r.ignoreHydrogens!==n.ignoreHydrogens||r.ignoreHydrogensVariant!==n.ignoreHydrogensVariant||r.linkCap!==n.linkCap||r.aromaticScale!==n.aromaticScale||r.aromaticSpacing!==n.aromaticSpacing||r.aromaticDashCount!==n.aromaticDashCount||r.dashCount!==n.dashCount||r.dashScale!==n.dashScale||r.dashCap!==n.dashCap||r.stubCap!==n.stubCap||!Fa(r.includeTypes,n.includeTypes)||!Fa(r.excludeTypes,n.excludeTypes)||r.adjustCylinderLength!==n.adjustCylinderLength||r.multipleBonds!==n.multipleBonds||r.metalCoordination!==n.metalCoordination||r.adjustCylinderLength&&!Qi.areEqual(o.size,i.size),Ls(a,r)&&a.interUnitBonds!==A.interUnitBonds&&(t.createGeometry=!0,t.updateTransform=!0,t.updateColor=!0,t.updateSize=!0)},mustRecreate:(t,r,n)=>r.tryUseImpostor&&!!n},e)}var Xq=new Et.ElementBondIterator;function xRe(e,t,r,n){for(Xq.setElement(t,r,n);Xq.hasNext;){let o=Xq.move();return o.otherUnit.conformation.position(o.otherUnit.elements[o.otherIndex],e),e}return null}var SRe=B();function DRe(e,t,r){let n=W.Location.create(e),o=Et.Location(e,void 0,void 0,e,void 0,void 0),i=e.interUnitBonds,{edgeCount:a,edges:A}=i,{sizeFactor:s,sizeAspectRatio:c,adjustCylinderLength:l,aromaticBonds:u,multipleBonds:g,metalCoordination:m}=r,p=g==="off",d=g==="symmetric",f=m==="dashed",I=B(),C,{child:y}=e;r.includeParent&&y&&(C=x=>{let S=A[x],w=y.unitMap.get(S.unitA),R=y.unitMap.get(S.unitB),L=e.unitMap.get(S.unitA).elements[S.indexA],v=e.unitMap.get(S.unitB).elements[S.indexB];return w&&je.has(w.elements,L)&&(!R||!je.has(R.elements,v))});let Q=x=>{let S=A[x];return o.aUnit=e.unitMap.get(S.unitA),o.aIndex=S.indexA,o.bUnit=e.unitMap.get(S.unitB),o.bIndex=S.indexB,t.size.size(o)*s},E=x=>{let S=A[x];return n.unit=e.unitMap.get(S.unitA),n.element=n.unit.elements[S.indexA],t.size.size(n)*s},b=x=>{let S=A[x];return n.unit=e.unitMap.get(S.unitB),n.element=n.unit.elements[S.indexB],t.size.size(n)*s};return{linkCount:a,referencePosition:x=>{let S=A[x],w,R,T,L;if(S.unitA<S.unitB)w=e.unitMap.get(S.unitA),R=e.unitMap.get(S.unitB),T=S.indexA,L=S.indexB;else if(S.unitA>S.unitB)w=e.unitMap.get(S.unitB),R=e.unitMap.get(S.unitA),T=S.indexB,L=S.indexA;else throw new Error("same units in createInterUnitBondCylinderMesh");return xRe(SRe,e,w,T)||xRe(SRe,e,R,L)},position:(x,S,w,R)=>{let T=A[w],L=e.unitMap.get(T.unitA),F=e.unitMap.get(T.unitB);if(L.conformation.position(L.elements[T.indexA],x),F.conformation.position(F.elements[T.indexB],S),R&&l){let v=E(w),U=b(w),G=Math.min(v,U)*c,N=Math.sqrt(Math.max(0,v*v-G*G))-.05,k=Math.sqrt(Math.max(0,U*U-G*G))-.05;if(N<=.01&&k<=.01)return;B.normalize(I,B.sub(I,S,x)),B.scaleAndAdd(x,x,I,N),B.scaleAndAdd(S,S,I,-k)}},style:x=>{let S=A[x].props.order,w=hA.create(A[x].props.flag);return It.is(w,It.Flag.MetallicCoordination)?f?1:0:It.is(w,It.Flag.HydrogenBond)?1:S===3?p?0:d?4:5:u&&It.is(w,It.Flag.Aromatic)?7:S!==2||p?0:d?2:3},radius:x=>Q(x)*c,ignore:b3(e,r),stub:C}}function RQt(e,t,r,n,o){if(!Ls(t,n))return _a.createEmpty(o);if(!t.interUnitBonds.edgeCount)return _a.createEmpty(o);let i=DRe(t,r,n),{cylinders:a,boundingSphere:A}=hU(e,i,n,o);if(A)a.setBoundingSphere(A);else if(a.cylinderCount>0){let{child:s}=t,c=we.expand(we(),(s??t).boundary.sphere,1*n.sizeFactor);a.setBoundingSphere(c)}return a}function UQt(e,t,r,n,o){if(!Ls(t,n))return At.createEmpty(o);if(!t.interUnitBonds.edgeCount)return At.createEmpty(o);let i=DRe(t,r,n),{mesh:a,boundingSphere:A}=Qc(e,i,n,o);if(A)a.setBoundingSphere(A);else if(a.triangleCount>0){let{child:s}=t,c=we.expand(we(),(s??t).boundary.sphere,1*n.sizeFactor);a.setBoundingSphere(c)}return a}var QF={...Us,...hV,...BF,sizeFactor:h.Numeric(.3,{min:0,max:10,step:.01}),sizeAspectRatio:h.Numeric(2/3,{min:0,max:3,step:.01}),tryUseImpostor:h.Boolean(!0),includeParent:h.Boolean(!1)};function D3(e,t,r,n){return r.tryUseImpostor&&zQ(n)?LQt(e):TQt(e)}function LQt(e){return yV({defaultProps:h.getDefaultValues(QF),createGeometry:RQt,createLocationIterator:(t,r)=>Ls(t,r)?Gm.fromStructure(t,{includeLocation2:r.colorMode==="interpolate"}):uI,getLoci:VU,eachLocation:_U,setUpdateState:(t,r,n,o,i,a,A)=>{t.createGeometry=r.sizeFactor!==n.sizeFactor||r.sizeAspectRatio!==n.sizeAspectRatio||r.linkScale!==n.linkScale||r.linkSpacing!==n.linkSpacing||r.ignoreHydrogens!==n.ignoreHydrogens||r.ignoreHydrogensVariant!==n.ignoreHydrogensVariant||r.linkCap!==n.linkCap||r.aromaticScale!==n.aromaticScale||r.aromaticSpacing!==n.aromaticSpacing||r.aromaticDashCount!==n.aromaticDashCount||r.dashCount!==n.dashCount||r.dashScale!==n.dashScale||r.dashCap!==n.dashCap||r.stubCap!==n.stubCap||!Fa(r.includeTypes,n.includeTypes)||!Fa(r.excludeTypes,n.excludeTypes)||r.adjustCylinderLength!==n.adjustCylinderLength||r.multipleBonds!==n.multipleBonds||r.metalCoordination!==n.metalCoordination,r.colorMode!==n.colorMode&&(t.createGeometry=!0,t.updateTransform=!0,t.updateColor=!0),Ls(a,r)&&a.interUnitBonds!==A.interUnitBonds&&(t.createGeometry=!0,t.updateTransform=!0,t.updateColor=!0,t.updateSize=!0)},mustRecreate:(t,r,n)=>!r.tryUseImpostor||!n},e)}function TQt(e){return Oa({defaultProps:h.getDefaultValues(QF),createGeometry:UQt,createLocationIterator:(t,r)=>Ls(t,r)?Gm.fromStructure(t):uI,getLoci:VU,eachLocation:_U,setUpdateState:(t,r,n,o,i,a,A)=>{t.createGeometry=r.sizeFactor!==n.sizeFactor||r.sizeAspectRatio!==n.sizeAspectRatio||r.radialSegments!==n.radialSegments||r.linkScale!==n.linkScale||r.linkSpacing!==n.linkSpacing||r.ignoreHydrogens!==n.ignoreHydrogens||r.ignoreHydrogensVariant!==n.ignoreHydrogensVariant||r.linkCap!==n.linkCap||r.aromaticScale!==n.aromaticScale||r.aromaticSpacing!==n.aromaticSpacing||r.aromaticDashCount!==n.aromaticDashCount||r.dashCount!==n.dashCount||r.dashScale!==n.dashScale||r.dashCap!==n.dashCap||r.stubCap!==n.stubCap||!Fa(r.includeTypes,n.includeTypes)||!Fa(r.excludeTypes,n.excludeTypes)||r.adjustCylinderLength!==n.adjustCylinderLength||r.multipleBonds!==n.multipleBonds||r.metalCoordination!==n.metalCoordination||r.adjustCylinderLength&&!Qi.areEqual(o.size,i.size),Ls(a,r)&&a.interUnitBonds!==A.interUnitBonds&&(t.createGeometry=!0,t.updateTransform=!0,t.updateColor=!0,t.updateSize=!0)},mustRecreate:(t,r,n)=>r.tryUseImpostor&&!!n},e)}var PQt=qe.add3,GQt=qe.add,Kp;(t=>{function e(r=2048,n=1024,o){let i=qe.create(Float32Array,3,n,o?o.centerBuffer.ref.value:r),a=qe.create(Float32Array,1,n,o?o.groupBuffer.ref.value:r);return{add:(A,s,c,l)=>{PQt(i,A,s,c),GQt(a,l)},getSpheres:()=>{let A=qe.compact(i,!0),s=qe.compact(a,!0);return rA.create(A,s,i.elementCount,o)}}}t.create=e})(Kp||={});var EF=B.add;function Gg(e,t,r){let{ignoreHydrogens:n,ignoreHydrogensVariant:o,traceOnly:i}=r,a=ge.isCoarse(t),{child:A}=e,s=A?.unitMap.get(t.id);if(A&&!s)throw new Error("expected childUnit to exist if child exists");if(!(!A&&!n&&!i))return c=>!!s&&!je.has(s.elements,c)||!a&&n&&Ug(e,t,c,o)||i&&!lV(t,c)}function vRe(e,t,r,n,o,i){let{child:a}=r,A=a?.unitMap.get(t.id);if(a&&!A)return At.createEmpty(i);let{detail:s,sizeFactor:c,stride:l}=o,u=i?.hasBoundingSphere()?we.clone(i.boundingSphere):void 0,{elements:g,conformation:m}=t,p=g.length,d=p*vm(s),f=We.createState(d,d/2,i),I=B(),C=Gg(r,t,o),y=W.Location.create(r,t),Q=n.size.size,E=B(),b=0,x=0;for(let R=0;R<p;R++){if(l&&R%l!==0||C&&C(g[R]))continue;m.invariantPosition(g[R],I),EF(E,E,I),x+=1,y.element=g[R];let T=Q(y);T>b&&(b=T),f.currentGroup=R,cn(f,I,T*c,s)}let S=We.getMesh(f);if(x===0)return S;let w;return B.scale(E,E,1/x),u&&B.distance(E,u.center)/u.radius<.1?w=u:w=we.expand(we(),(A??t).boundary.sphere,b*c+.05),S.setBoundingSphere(w),S}function FRe(e,t,r,n,o,i){let{child:a}=r,A=a?.unitMap.get(t.id);if(a&&!A)return rA.createEmpty(i);let{sizeFactor:s,stride:c}=o,l=i?.hasBoundingSphere()?we.clone(i.boundingSphere):void 0,{elements:u,conformation:g}=t,m=u.length,p=Kp.create(m,m/2,i),d=B(),f=Gg(r,t,o),I=W.Location.create(r,t),C=n.size.size,y=B(),Q=0,E=0;if(c&&c>1||f||n.size.granularity!=="uniform")for(let S=0;S<m;S++){if(c&&S%c!==0||f&&f(u[S]))continue;g.invariantPosition(u[S],d),p.add(d[0],d[1],d[2],S),EF(y,y,d),E+=1,I.element=u[S];let w=C(I);w>Q&&(Q=w)}else{for(let S=0;S<m;S++)g.invariantPosition(u[S],d),p.add(d[0],d[1],d[2],S),EF(y,y,d);E=m,Q=C(I)}let b=p.getSpheres();if(E===0)return b;let x;return B.scale(y,y,1/E),l&&B.distance(y,l.center)/l.radius<.1?x=l:x=we.expand(we(),(A??t).boundary.sphere,Q*s+.05),b.setBoundingSphere(x),b}function Sc(e,t,r){let n=!1;if(!W.Loci.is(e))return!1;let{structure:o,group:i}=t;if(!Ye.areEquivalent(e.structure,o))return!1;let a=i.elements.length,{unitIndexMap:A}=i;for(let s of e.elements){let c=A.get(s.unit.id);if(c!==void 0){let l=c*a;if(Ue.is(s.indices)){let u=l+Ue.start(s.indices),g=l+Ue.end(s.indices);r(Ue.ofBounds(u,g))&&(n=!0)}else for(let u=0,g=s.indices.length;u<g;u++){let m=s.indices[u],p=u+1;for(;p<g&&s.indices[p]===m;)p++;u=p-1;let d=s.indices[u];n=r(Ue.ofRange(l+m,l+d))||n}}}return n}function Dc(e,t,r){let{objectId:n,instanceId:o,groupId:i}=e;if(r===n){let{structure:a,group:A}=t,s=A.units[o],c=i===Ai.Null?Ee.ofRange(0,s.elements.length):Ee.ofSingleton(i);return W.Loci(a.target,[{unit:s,indices:c}])}return Ir}function wRe(e,t,r,n,o){let{child:i}=t,{detail:a,sizeFactor:A,stride:s}=n,c=o?.hasBoundingSphere()?we.clone(o.boundingSphere):void 0,{getSerialIndex:l}=t.serialMapping,g=t.elementCount*vm(a),m=We.createState(g,g/2,o),p=r.size.size,d=B(),f=0,I=0;for(let Q of t.units){let E=i?.unitMap.get(Q.id);if(i&&!E)continue;let{elements:b,conformation:x}=Q,S=b.length,w=B(),R=Gg(t,Q,n),T=W.Location.create(t,Q);for(let L=0;L<S;L++){let F=b[L];if(s&&L%s!==0||R&&R(F))continue;x.position(F,w),EF(d,d,w),I+=1,T.element=F;let v=p(T);v>f&&(f=v),m.currentGroup=l(Q,F),cn(m,w,v*A,a)}}let C=We.getMesh(m);if(I===0)return C;let y;return B.scale(d,d,1/I),c&&B.distance(d,c.center)/c.radius<1?y=c:y=we.expand(we(),(i??t).boundary.sphere,f*A+.05),C.setBoundingSphere(y),C}function RRe(e,t,r,n,o){let{child:i}=t,{sizeFactor:a,stride:A}=n,s=o?.hasBoundingSphere()?we.clone(o.boundingSphere):void 0,{getSerialIndex:c}=t.serialMapping,l=t.elementCount,u=Kp.create(l,l/2,o),g=r.size.size,m=B(),p=0,d=0;for(let C of t.units){let y=i?.unitMap.get(C.id);if(i&&!y)continue;let{elements:Q,conformation:E}=C,b=Q.length,x=B(),S=Gg(t,C,n),w=W.Location.create(t,C);if(A&&A>1||S||r.size.granularity!=="uniform")for(let R=0;R<b;R++){let T=Q[R];if(A&&R%A!==0||S&&S(T))continue;E.position(T,x),u.add(x[0],x[1],x[2],c(C,T)),EF(m,m,x),d+=1,w.element=T;let L=g(w);L>p&&(p=L)}else{for(let R=0;R<b;R++){let T=Q[R];E.position(T,x),u.add(x[0],x[1],x[2],c(C,T)),EF(m,m,x)}d+=b,p=g(w)}}let f=u.getSpheres();if(d===0)return f;let I;return B.scale(m,m,1/d),s&&B.distance(m,s.center)/s.radius<1?I=s:I=we.expand(we(),(i??t).boundary.sphere,p*a+.05),f.setBoundingSphere(I),f}function Ja(e,t,r){let n=!1;if(!W.Loci.is(e)||!Ye.areEquivalent(e.structure,t))return!1;let{cumulativeUnitElementCount:o}=t.serialMapping;for(let i of e.elements){let a=t.unitIndexMap.get(i.unit.id);if(a!==void 0)if(Ue.is(i.indices)){let A=o[a]+Ue.start(i.indices),s=o[a]+Ue.end(i.indices);r(Ue.ofBounds(A,s))&&(n=!0)}else for(let A=0,s=i.indices.length;A<s;A++){let c=o[a]+i.indices[A];r(Ue.ofSingleton(c))&&(n=!0)}}return n}function za(e,t,r){let{objectId:n,groupId:o}=e;if(r===n){if(o===Ai.Null)return Ye.Loci(t);{let{unitIndices:i,cumulativeUnitElementCount:a}=t.serialMapping,A=i[o],s=t.units[A],c=o-a[A],l=Ee.ofSingleton(c);return W.Loci(t,[{unit:s,indices:l}])}}return Ir}var Wo;(r=>{function e(n){let{group:o,structure:i}=n,a=o.elements.length,A=o.units.length,s=W.Location.create(i);return rn(a,A,1,(l,u)=>{let g=o.units[u];return s.unit=g,s.element=g.elements[l],s})}r.fromGroup=e;function t(n){let{units:o,elementCount:i}=n,a=i,A=1,{unitIndices:s,elementIndices:c}=n.serialMapping,l=W.Location.create(n);return rn(a,A,1,g=>(l.unit=o[s[g]],l.element=c[g],l),!0)}r.fromStructure=t})(Wo||={});var URe={sizeFactor:h.Numeric(1,{min:0,max:10,step:.1}),detail:h.Numeric(0,{min:0,max:3,step:1},ot.CustomQualityParamInfo),ignoreHydrogens:h.Boolean(!1),ignoreHydrogensVariant:h.Select("all",h.arrayToOptions(["all","non-polar"])),traceOnly:h.Boolean(!1),tryUseImpostor:h.Boolean(!0),stride:h.Numeric(1,{min:1,max:100,step:1})},bF={...bo,...Zv,...URe};function v3(e,t,r,n){return r.tryUseImpostor&&Kv(n)?NQt(e):MQt(e)}function NQt(e){return qv({defaultProps:h.getDefaultValues(bF),createGeometry:FRe,createLocationIterator:Wo.fromGroup,getLoci:Dc,eachLocation:Sc,setUpdateState:(t,r,n)=>{t.createGeometry=r.ignoreHydrogens!==n.ignoreHydrogens||r.ignoreHydrogensVariant!==n.ignoreHydrogensVariant||r.traceOnly!==n.traceOnly||r.stride!==n.stride},mustRecreate:(t,r,n)=>!r.tryUseImpostor||!n},e)}function MQt(e){return Vo({defaultProps:h.getDefaultValues(bF),createGeometry:vRe,createLocationIterator:Wo.fromGroup,getLoci:Dc,eachLocation:Sc,setUpdateState:(t,r,n)=>{t.createGeometry=r.sizeFactor!==n.sizeFactor||r.detail!==n.detail||r.ignoreHydrogens!==n.ignoreHydrogens||r.ignoreHydrogensVariant!==n.ignoreHydrogensVariant||r.traceOnly!==n.traceOnly||r.stride!==n.stride},mustRecreate:(t,r,n)=>r.tryUseImpostor&&!!n},e)}var LRe={...Us,...VFe,...URe};function F3(e,t,r,n){return r.tryUseImpostor&&n&&n.extensions.fragDepth&&n.extensions.textureFloat?kQt(e):HQt(e)}function kQt(e){return _Fe({defaultProps:h.getDefaultValues(LRe),createGeometry:RRe,createLocationIterator:Wo.fromStructure,getLoci:za,eachLocation:Ja,setUpdateState:(t,r,n)=>{t.createGeometry=r.ignoreHydrogens!==n.ignoreHydrogens||r.ignoreHydrogensVariant!==n.ignoreHydrogensVariant||r.traceOnly!==n.traceOnly||r.stride!==n.stride},mustRecreate:(t,r,n)=>!r.tryUseImpostor||!n},e)}function HQt(e){return Oa({defaultProps:h.getDefaultValues(LRe),createGeometry:wRe,createLocationIterator:Wo.fromStructure,getLoci:za,eachLocation:Ja,setUpdateState:(t,r,n)=>{t.createGeometry=r.sizeFactor!==n.sizeFactor||r.detail!==n.detail||r.ignoreHydrogens!==n.ignoreHydrogens||r.ignoreHydrogensVariant!==n.ignoreHydrogensVariant||r.traceOnly!==n.traceOnly||r.stride!==n.stride},mustRecreate:(t,r,n)=>r.tryUseImpostor&&!!n},e)}var TRe={"element-sphere":(e,t)=>fo("Element sphere",e,t,v3),"intra-bond":(e,t)=>fo("Intra-unit bond cylinder",e,t,x3),"inter-bond":(e,t)=>Eo("Inter-unit bond cylinder",e,t,D3),"structure-element-sphere":(e,t)=>Eo("Structure element sphere",e,t,F3),"structure-intra-bond":(e,t)=>Eo("Structure intra-unit bond cylinder",e,t,S3)},PRe={...bF,traceOnly:h.Boolean(!1,{isHidden:!0}),...yF,...QF,includeParent:h.Boolean(!1),unitKinds:AB(["atomic"]),sizeFactor:h.Numeric(.15,{min:.01,max:10,step:.01}),sizeAspectRatio:h.Numeric(2/3,{min:.01,max:3,step:.01}),visuals:h.MultiSelect(["element-sphere","intra-bond","inter-bond"],h.objectToOptions(TRe)),bumpFrequency:h.Numeric(0,{min:0,max:10,step:.1},ot.ShadingCategory),density:h.Numeric(.1,{min:0,max:1,step:.01},ot.ShadingCategory)};function VQt(e,t){let r=PRe;return Ye.getSize(t)>=Ye.Size.Huge?(r=h.clone(r),r.visuals.defaultValue=["element-sphere","intra-bond"]):t.unitSymmetryGroups.length>500&&(r=h.clone(r),r.visuals.defaultValue=["structure-element-sphere","structure-intra-bond"]),r}function _Qt(e,t){return Xt.createMulti("Ball & Stick",e,t,Vn,TRe)}var GRe={name:"ball-and-stick",label:"Ball & Stick",description:"Displays atoms as spheres and bonds as cylinders.",factory:_Qt,getParams:VQt,defaultValues:h.getDefaultValues(PRe),defaultColorTheme:{name:"element-symbol"},defaultSizeTheme:{name:"physical"},isApplicable:e=>e.elementCount>0,getData:(e,t)=>t.includeParent?e.asParent():e,mustRecreate:(e,t)=>e.includeParent!==t.includeParent};function YQt(e,t,r,n,o){let{links:i,elements:a}=t.carbohydrates,{linkSizeFactor:A}=n,s=W.Location.create(t),c={linkCount:i.length,position:(g,m,p)=>{let d=i[p];B.copy(g,a[d.carbohydrateIndexA].geometry.center),B.copy(m,a[d.carbohydrateIndexB].geometry.center)},radius:g=>{let m=i[g],p=a[m.carbohydrateIndexA],d=p.unit.rings.all[p.ringIndex];return s.unit=p.unit,s.element=p.unit.elements[d[0]],r.size.size(s)*A}},{mesh:l,boundingSphere:u}=Qc(e,c,n,o);if(u)l.setBoundingSphere(u);else if(l.triangleCount>0){let g=we.expand(we(),t.boundary.sphere,1*A);l.setBoundingSphere(g)}return l}var qq={...bo,...Nl,linkSizeFactor:h.Numeric(.3,{min:0,max:3,step:.01})};function NRe(e){return Oa({defaultProps:h.getDefaultValues(qq),createGeometry:YQt,createLocationIterator:OQt,getLoci:JQt,eachLocation:zQt,setUpdateState:(t,r,n)=>{t.createGeometry=r.linkSizeFactor!==n.linkSizeFactor||r.radialSegments!==n.radialSegments||r.linkCap!==n.linkCap}},e)}function OQt(e){let{elements:t,links:r}=e.carbohydrates,n=r.length,o=1,i=W.Location.create(e);return rn(n,o,1,A=>{let s=r[A],c=t[s.carbohydrateIndexA],l=c.unit.rings.all[c.ringIndex];return i.unit=c.unit,i.element=c.unit.elements[l[0]],i},!0)}function JQt(e,t,r){let{objectId:n,groupId:o}=e;if(r===n){if(o===Ai.Null)return Ye.Loci(t);{let{links:i,elements:a}=t.carbohydrates,A=i[o],s=a[A.carbohydrateIndexA],c=a[A.carbohydrateIndexB];return W.Loci.union(KQ(t,s.unit,s.residueIndex,s.altId),KQ(t,c.unit,c.residueIndex,c.altId))}}return Ir}var Zq=new Set;function zQt(e,t,r){let n=!1;if(!W.Loci.is(e)||!Ye.areEquivalent(e.structure,t))return!1;let{getLinkIndices:o}=t.carbohydrates;for(let{unit:i,indices:a}of e.elements)ge.isAtomic(i)&&(Zq.clear(),Ee.forEach(a,A=>{let s=o(i,i.elements[A]);for(let c=0,l=s.length;c<l;++c)Zq.has(s[c])||(Zq.add(s[c]),r(Ue.ofSingleton(s[c]))&&(n=!0))}));return n}var KQt=B.create(0,0,-.5),jQt=B.create(0,0,.5),cE=B(),lE=B(),w3=B(),MRe=B();function WQt(e){let t=e.length/3,n=(t===3?1:t===4?2:t)+t,o=t===4?t*3+4:n*3,i=Bm(n,o);for(let a=0;a<t;++a){let A=(a+1)%t;B.set(cE,e[a*3],e[a*3+1],-.5),B.set(lE,e[A*3],e[A*3+1],-.5),i.add(cE,lE,jQt)}if(t===3)B.set(cE,e[0],e[1],-.5),B.set(lE,e[3],e[4],-.5),B.set(w3,e[6],e[7],-.5),i.add(w3,lE,cE);else if(t===4)B.set(cE,e[0],e[1],-.5),B.set(lE,e[3],e[4],-.5),B.set(w3,e[6],e[7],-.5),B.set(MRe,e[9],e[10],-.5),i.addQuad(MRe,w3,lE,cE);else for(let a=0;a<t;++a){let A=(a+1)%t;B.set(cE,e[a*3],e[a*3+1],-.5),B.set(lE,e[A*3],e[A*3+1],-.5),i.add(KQt,lE,cE)}return i.getPrimitive()}var $q;function kRe(){return $q||($q=WQt(vs(8,!0))),$q}var e7;function HRe(){if(!e7){let e=vs(8,!0),t=new Float32Array(30);for(let n=0;n<8;++n)t[n*3]=e[n*3],t[n*3+1]=e[n*3+1],t[n*3+2]=-.5;t[24]=0,t[25]=0,t[26]=-.5,t[27]=0,t[28]=0,t[29]=.5,e7=IQ(t,[0,1,8,1,2,8,4,5,8,5,6,8,2,3,9,3,4,9,6,7,9,7,0,9])}return e7}var XQt={pointCount:5,outerRadius:1,innerRadius:.5,thickness:.3},t7=B.zero(),r7=B.zero(),n7=B.zero(),JU=B.zero(),o7=B.zero();function VRe(e){let{outerRadius:t,innerRadius:r,thickness:n,pointCount:o}={...XQt,...e},i=o*2*2,a=Bm(i),A=new Float32Array(o*2),s=new Float32Array(o*2);for(let c=0;c<o;++c){let l=c*2,u=c*2+1,g=(l+1)/o*Math.PI,m=(u+1)/o*Math.PI;s[l]=Math.cos(g)*t,s[u]=Math.sin(g)*t,A[l]=Math.cos(m)*r,A[u]=Math.sin(m)*r}B.set(t7,0,0,n/2),B.set(r7,0,0,-n/2);for(let c=0;c<o;++c){let l=(c+1)%o;B.set(n7,s[c*2],s[c*2+1],0),B.set(JU,A[c*2],A[c*2+1],0),B.set(o7,s[l*2],s[l*2+1],0),a.add(t7,n7,JU),a.add(JU,n7,r7),a.add(t7,JU,o7),a.add(o7,JU,r7)}return a.getPrimitive()}var A7=[.5,0,0,-.5,0,0,0,.5,0,0,-.5,0,0,0,.5,0,0,-.5],ZQt=[0,2,4,0,4,3,0,3,5,0,5,2,1,2,5,1,5,3,1,3,4,1,4,2],qQt=[0,2,4,0,4,3,1,2,5,1,5,3],$Qt=[0,2,1,3,2,1,3,0,0,4,1,4,2,4,3,4,0,5,1,5,2,5,3,5],i7;function _Re(){return i7||(i7=IQ(A7,ZQt)),i7}var a7;function YRe(){return a7||(a7=IQ(A7,qQt)),a7}var eEt=dp(A7,$Qt);function ORe(){return eEt}var on=Y.identity(),Wh=B(),JRe=B(),tEt=2*.806,zRe=dI(),KRe=WCe(),rEt=kRe(),jRe=HRe(),nEt=VRe({outerRadius:1,innerRadius:.5,thickness:.5,pointCount:5}),oEt=_Re(),WRe=YRe(),XRe=wSe(),iEt=RSe(),aEt=USe(),AEt=LSe(),sEt=TSe();function cEt(e,t,r,n,o){let i=We.createState(256,128,o),{detail:a,sizeFactor:A}=n,s=t.carbohydrates,c=s.elements.length,l=W.Location.create(t);for(let u=0;u<c;++u){let g=s.elements[u],m=g.unit.rings.all[g.ringIndex],p=Fue(g.component.type,m.length);l.unit=g.unit,l.element=g.unit.elements[m[0]];let d=r.size.size(l),f=d*A,I=d*A*tEt,{center:C,normal:y,direction:Q}=g.geometry;switch(B.add(JRe,C,Q),Y.targetTo(on,C,JRe,y),Y.setTranslation(on,C),i.currentGroup=u*2,p){case 0:cn(i,C,f,a);break;case 1:Y.scaleUniformly(on,on,I),We.addPrimitive(i,on,zRe);break;case 2:Y.scaleUniformly(on,on,I),We.addPrimitive(i,on,KRe),Y.mul(on,on,Y.rotZ90X180),i.currentGroup+=1,We.addPrimitive(i,on,KRe);break;case 4:Y.scaleUniformly(on,on,I*1.2),We.addPrimitive(i,on,rEt);break;case 5:Y.scaleUniformly(on,on,I*1.2),We.addPrimitive(i,on,jRe),Y.mul(on,on,Y.rotZ90),i.currentGroup+=1,We.addPrimitive(i,on,jRe);break;case 6:Y.mul(on,on,Y.rotZY90),Y.scale(on,on,B.set(Wh,I,I,I/2)),We.addPrimitive(i,on,zRe);break;case 7:Y.scaleUniformly(on,on,I),Y.mul(on,on,Y.rotZY90),We.addPrimitive(i,on,nEt);break;case 8:Y.mul(on,on,Y.rotZY90),Y.scale(on,on,B.set(Wh,I*1.4,I*1.4,I*1.4)),We.addPrimitive(i,on,oEt);break;case 3:Y.mul(on,on,Y.rotZY90),Y.scale(on,on,B.set(Wh,I*1.4,I*1.4,I*1.4)),We.addPrimitive(i,on,WRe),Y.mul(on,on,Y.rotY90),i.currentGroup+=1,We.addPrimitive(i,on,WRe);break;case 9:Y.mul(on,on,Y.rotZY90),Y.scale(on,on,B.set(Wh,I,I/2,I/2)),We.addPrimitive(i,on,XRe);break;case 12:Y.mul(on,on,Y.rotZY90),Y.scale(on,on,B.set(Wh,I,I,I/2)),We.addPrimitive(i,on,XRe);break;case 13:case 11:Y.mul(on,on,Y.rotZY90),Y.scale(on,on,B.set(Wh,I,I,I/2)),We.addPrimitive(i,on,iEt);break;case 14:Y.mul(on,on,Y.rotZY90),Y.scale(on,on,B.set(Wh,I,I,I/2)),We.addPrimitive(i,on,aEt);break;case 15:Y.mul(on,on,Y.rotZY90),Y.scale(on,on,B.set(Wh,I,I,I/2)),We.addPrimitive(i,on,sEt);break;case 10:default:Y.mul(on,on,Y.rotZYZ90),Y.scale(on,on,B.set(Wh,I/1.5,I,I/2)),We.addPrimitive(i,on,AEt);break}}return We.getMesh(i)}var c7={...Us,detail:h.Numeric(0,{min:0,max:3,step:1},ot.CustomQualityParamInfo),sizeFactor:h.Numeric(1.75,{min:0,max:10,step:.01})};function ZRe(e){return Oa({defaultProps:h.getDefaultValues(c7),createGeometry:cEt,createLocationIterator:lEt,getLoci:uEt,eachLocation:gEt,setUpdateState:(t,r,n)=>{t.createGeometry=r.sizeFactor!==n.sizeFactor||r.detail!==n.detail}},e)}function lEt(e){let t=e.carbohydrates.elements,r=t.length*2,n=1,o=W.Location.create(e);function i(A,s){let c=t[Math.floor(A/2)],l=c.unit.rings.all[c.ringIndex];return o.unit=c.unit,o.element=c.unit.elements[l[0]],o}function a(A,s){return A%2===1}return rn(r,n,1,i,!0,a)}function uEt(e,t,r){let{objectId:n,groupId:o}=e;if(r===n){if(o===Ai.Null)return Ye.Loci(t);{let i=t.carbohydrates.elements[Math.floor(o/2)];return KQ(t,i.unit,i.residueIndex,i.altId)}}return Ir}var s7=new Set;function gEt(e,t,r){let{getElementIndices:n}=t.carbohydrates,o=!1;if(!W.Loci.is(e)||!Ye.areEquivalent(e.structure,t))return!1;for(let{unit:i,indices:a}of e.elements)ge.isAtomic(i)&&(s7.clear(),Ee.forEach(a,A=>{let s=n(i,i.elements[A]);for(let c=0,l=s.length;c<l;++c)s7.has(s[c])||(s7.add(s[c]),r(Ue.ofSingleton(s[c]*2))&&(o=!0))}));return o}function mEt(e,t,r,n,o){let{terminalLinks:i,elements:a}=t.carbohydrates,{terminalLinkSizeFactor:A}=n,s=W.Location.create(t),c={linkCount:i.length,position:(g,m,p)=>{let d=i[p];d.fromCarbohydrate?(B.copy(g,a[d.carbohydrateIndex].geometry.center),d.elementUnit.conformation.position(d.elementUnit.elements[d.elementIndex],m)):(d.elementUnit.conformation.position(d.elementUnit.elements[d.elementIndex],g),B.copy(m,a[d.carbohydrateIndex].geometry.center))},radius:g=>{let m=i[g];if(m.fromCarbohydrate){let p=a[m.carbohydrateIndex],d=p.unit.rings.all[p.ringIndex];s.unit=p.unit,s.element=p.unit.elements[d[0]]}else s.unit=m.elementUnit,s.element=m.elementUnit.elements[m.elementIndex];return r.size.size(s)*A},style:g=>{let m=i[g],p=m.elementUnit.elements[m.elementIndex],d=im(m.elementUnit.model.atomicHierarchy.atoms.type_symbol.value(p));return Wy.has(d)?1:0}},{mesh:l,boundingSphere:u}=Qc(e,c,n,o);if(u)l.setBoundingSphere(u);else if(l.triangleCount>0){let g=we.expand(we(),t.boundary.sphere,1*A);l.setBoundingSphere(g)}return l}var u7={...bo,...Nl,terminalLinkSizeFactor:h.Numeric(.2,{min:0,max:3,step:.01})};function qRe(e){return Oa({defaultProps:h.getDefaultValues(u7),createGeometry:mEt,createLocationIterator:dEt,getLoci:pEt,eachLocation:fEt,setUpdateState:(t,r,n)=>{t.createGeometry=r.terminalLinkSizeFactor!==n.terminalLinkSizeFactor||r.radialSegments!==n.radialSegments||r.linkCap!==n.linkCap}},e)}function dEt(e){let{elements:t,terminalLinks:r}=e.carbohydrates,n=r.length,o=1,i=W.Location.create(e);return rn(n,o,1,A=>{let s=r[A];if(s.fromCarbohydrate){let c=t[s.carbohydrateIndex],l=c.unit.rings.all[c.ringIndex];i.unit=c.unit,i.element=c.unit.elements[l[0]]}else i.unit=s.elementUnit,i.element=s.elementUnit.elements[s.elementIndex];return i},!0)}function pEt(e,t,r){let{objectId:n,groupId:o}=e;if(r===n){if(o===Ai.Null)return Ye.Loci(t);{let{terminalLinks:i,elements:a}=t.carbohydrates,A=i[o],s=a[A.carbohydrateIndex];return W.Loci.union(KQ(t,s.unit,s.residueIndex,s.altId),GFe(t,A.elementUnit,A.elementUnit.elements[A.elementIndex]))}}return Ir}var l7=new Set;function fEt(e,t,r){let n=!1;if(!W.Loci.is(e)||!Ye.areEquivalent(e.structure,t))return!1;let{getTerminalLinkIndices:o}=t.carbohydrates;for(let{unit:i,indices:a}of e.elements)ge.isAtomic(i)&&(l7.clear(),Ee.forEach(a,A=>{let s=o(i,i.elements[A]);for(let c=0,l=s.length;c<l;++c)l7.has(s[c])||(l7.add(s[c]),r(Ue.ofSingleton(s[c]))&&(n=!0))}));return n}var $Re={"carbohydrate-symbol":(e,t)=>Eo("Carbohydrate symbol mesh",e,t,ZRe),"carbohydrate-link":(e,t)=>Eo("Carbohydrate link cylinder",e,t,NRe),"carbohydrate-terminal-link":(e,t)=>Eo("Carbohydrate terminal link cylinder",e,t,qRe)},eUe={...c7,...qq,...u7,visuals:h.MultiSelect(["carbohydrate-symbol","carbohydrate-link","carbohydrate-terminal-link"],h.objectToOptions($Re)),bumpFrequency:h.Numeric(0,{min:0,max:10,step:.1},ot.ShadingCategory),density:h.Numeric(.2,{min:0,max:1,step:.01},ot.ShadingCategory)};function BEt(e,t){return eUe}function IEt(e,t){return Xt.createMulti("Carbohydrate",e,t,Vn,$Re)}var tUe={name:"carbohydrate",label:"Carbohydrate",description:"Displays carbohydrate symbols (3D SNFG).",factory:IEt,getParams:BEt,defaultValues:h.getDefaultValues(eUe),defaultColorTheme:{name:"carbohydrate-symbol"},defaultSizeTheme:{name:"uniform"},isApplicable:e=>e.models.some(t=>_t.hasCarbohydrate(t))};function g7(e,t){switch(e.kind){case ge.Kind.Atomic:return CEt(e,t);case ge.Kind.Spheres:case ge.Kind.Gaussians:return hEt(e,t)}}function CEt(e,t){let r=e.model.atomicRanges.cyclicPolymerMap,n=vo.transientSegments(gx(e),e.elements),o=sr.transientSegments(e.model.atomicHierarchy.residueAtomSegments,e.elements),i=e.model.atomicHierarchy.derived.residue.traceElementIndex,{moleculeType:a}=e.model.atomicHierarchy.derived.residue,A=-1,s=-1,c=!0,l=-1,u=0;for(;n.hasNext;){for(c=!0,l=u,o.setSegment(n.move());o.hasNext;){if(c){let m=o.move().index;if(++u,!o.hasNext)continue;c=!1,s=m}let g=o.move().index;A=s,s=g,t(i[A],i[s],u-1,u,a[A]),++u}r.has(s)&&(A=s,s=r.get(A),t(i[A],i[s],u-1,l,a[A]))}}function hEt(e,t){let r=vo.transientSegments(gx(e),e.elements),{elements:n}=e,o=!0,i=0;for(;r.hasNext;){o=!0;let a=r.move(),A=a.start,s=a.end;for(let c=A,l=s;c<l;++c){if(o){if(++c,++i,c>l)continue;o=!1}t(n[c-1],n[c],i-1,i,0),++i}}}function m7(e,t){switch(e.kind){case ge.Kind.Atomic:return yEt(e,t);case ge.Kind.Spheres:case ge.Kind.Gaussians:return QEt(e,t)}}function yEt(e,t){let r=vo.transientSegments(gx(e),e.elements),n=sr.transientSegments(e.model.atomicHierarchy.residueAtomSegments,e.elements),o=e.model.atomicHierarchy.derived.residue.traceElementIndex,i=0;for(;r.hasNext;)for(n.setSegment(r.move());n.hasNext;){let a=n.move().index;t(o[a],i),++i}}function QEt(e,t){let r=vo.transientSegments(gx(e),e.elements),{elements:n}=e,o=0;for(;r.hasNext;){let i=r.move(),a=i.start,A=i.end;for(let s=a,c=A;s<c;++s)t(n[s],o),++o}}function rUe(e,t){switch(t.kind){case ge.Kind.Atomic:return new d7(e,t);case ge.Kind.Spheres:case ge.Kind.Gaussians:return new p7(e,t)}}function nUe(e,t){return{centerA:W.Location.create(e,t),centerB:W.Location.create(e,t)}}var d7=class{constructor(t,r){this.unit=r;this.hasNext=!1;this.traceElementIndex=r.model.atomicHierarchy.derived.residue.traceElementIndex,this.gapIt=vo.transientSegments(f7(r),r.elements),this.value=nUe(t,r),this.hasNext=this.gapIt.hasNext}move(){let{elements:t,residueIndex:r}=this.unit,n=this.gapIt.move();return this.value.centerA.element=this.traceElementIndex[r[t[n.start]]],this.value.centerB.element=this.traceElementIndex[r[t[n.end-1]]],this.hasNext=this.gapIt.hasNext,this.value}},p7=class{constructor(t,r){this.unit=r;this.hasNext=!1;this.gapIt=vo.transientSegments(f7(r),r.elements),this.value=nUe(t,r),this.hasNext=this.gapIt.hasNext}move(){let t=this.gapIt.move();return this.value.centerA.element=this.unit.elements[t.start],this.value.centerB.element=this.unit.elements[t.end-1],this.hasNext=this.gapIt.hasNext,this.value}};function oUe(e){let{x:t,y:r,z:n}=e.atomicConformation,{polymerType:o,traceElementIndex:i}=e.atomicHierarchy.derived.residue,a=o.length,A=Ee.ofBounds(0,e.atomicConformation.atomId.rowCount),s=vo.transientSegments(e.atomicRanges.polymerRanges,A),c=sr.transientSegments(e.atomicHierarchy.residueAtomSegments,A),l=new Float32Array(a*3),u=new Float32Array(a*3),g=0,m=-1,p=-1,d=B(),f=B(),I=B(),C=B(),y=B(),Q=B(),E=B(),b=B(),x=B(),S=B(),w=B(),R=B(),T=B(),L=B();for(;s.hasNext;){let F=s.move();for(c.setSegment(F),g=-1,p=-1;c.hasNext;){g+=1;let{index:J}=c.move();g===0&&(p=J),m=J-2;let H=m*3;B.copy(d,f),B.copy(f,I),B.copy(I,C);let z=i[J];if(B.set(C,t[z],r[z],n[z]),g<3)continue;B.sub(y,f,d),B.sub(Q,I,f),B.sub(E,C,I),B.sub(w,y,Q),B.sub(R,Q,E),B.cross(T,w,R),B.normalize(T,T),B.toArray(T,u,H);let _=Math.cos(B.angle(w,R)),M=B.magnitude(w),q=B.magnitude(R),ne=Math.sqrt(q*M)/Math.max(2,2*(1-_));B.scale(b,w,ne/M),B.sub(b,f,b),B.toArray(b,l,H),B.scale(x,R,ne/q),B.sub(x,I,x),B.toArray(x,l,H+3),B.copy(L,T)}let v=p*3;B.fromArray(b,l,v+3),B.fromArray(x,l,v+6),B.normalize(T,B.sub(T,b,x));let U=i[p];B.set(d,t[U],r[U],n[U]),B.copy(S,d),B.projectPointOnVector(S,S,T,b),B.toArray(S,l,v);let G=m+2,N=G*3;B.fromArray(b,l,N-3),B.fromArray(x,l,N-6),B.normalize(T,B.sub(T,b,x));let k=i[G];B.set(d,t[k],r[k],n[k]),B.copy(S,d),B.projectPointOnVector(S,S,T,b),B.toArray(S,l,N)}return{centers:l}}var zU=DA.createProvider({label:"Helix Orientation",descriptor:{name:"molstar_helix_orientation"},type:"dynamic",defaultParams:{},getParams:()=>({}),isApplicable:e=>!0,obtain:async(e,t)=>({value:oUe(t)})});function dB(e){return vr.is(e,vr.Flag.Helix)}function EEt(e){return vr.is(e,vr.Flag.Beta)}function xF(e,t,r={}){switch(e.kind){case ge.Kind.Atomic:return new B7(e,t,r);case ge.Kind.Spheres:case ge.Kind.Gaussians:return new I7(e,t)}}var L3=vr.create(vr.Flag.NA);function iUe(e,t){return{center:W.Location.create(e,t),centerPrev:W.Location.create(e,t),centerNext:W.Location.create(e,t),first:!1,last:!1,initial:!1,final:!1,secStrucFirst:!1,secStrucLast:!1,secStrucType:L3,moleculeType:0,coarseBackboneFirst:!1,coarseBackboneLast:!1,p0:B(),p1:B(),p2:B(),p3:B(),p4:B(),d12:B(),d23:B()}}var bn=B(),R3=B(),U3=B(),B7=class{constructor(t,r,n={}){this.unit=t;this.state=0;this.p0=B();this.p1=B();this.p2=B();this.p3=B();this.p4=B();this.p5=B();this.p6=B();this.d01=B();this.d12=B();this.d23=B();this.d34=B();this.hasNext=!1;if(this.atomicConformation=t.model.atomicConformation,this.residueAtomSegments=t.model.atomicHierarchy.residueAtomSegments,this.polymerRanges=t.model.atomicRanges.polymerRanges,this.traceElementIndex=t.model.atomicHierarchy.derived.residue.traceElementIndex,this.directionFromElementIndex=t.model.atomicHierarchy.derived.residue.directionFromElementIndex,this.directionToElementIndex=t.model.atomicHierarchy.derived.residue.directionToElementIndex,this.moleculeType=t.model.atomicHierarchy.derived.residue.moleculeType,this.cyclicPolymerMap=t.model.atomicRanges.cyclicPolymerMap,this.polymerIt=vo.transientSegments(this.polymerRanges,t.elements),this.residueIt=sr.transientSegments(this.residueAtomSegments,t.elements),this.value=iUe(r,t),this.hasNext=this.residueIt.hasNext&&this.polymerIt.hasNext,n.ignoreSecondaryStructure||(this.secondaryStructure=dc.get(r).value?.get(t.invariantId)),n.useHelixOrientation){let o=zU.get(t.model).value;if(!o)throw new Error("missing helix-orientation");this.helixOrientationCenters=o.centers}}atomicPos(t,r){r!==-1&&(t[0]=this.atomicConformation.x[r],t[1]=this.atomicConformation.y[r],t[2]=this.atomicConformation.z[r])}pos(t,r,n){let o=this.traceElementIndex[r];this.helixOrientationCenters&&dB(n)?B.fromArray(t,this.helixOrientationCenters,r*3):this.atomicPos(t,o)}updateResidueSegmentRange(t){let{index:r}=this.residueAtomSegments;this.residueSegmentMin=r[this.polymerRanges[t.index*2]],this.residueSegmentMax=r[this.polymerRanges[t.index*2+1]]}getResidueIndex(t){if(t<this.residueSegmentMin){let r=this.cyclicPolymerMap.get(this.residueSegmentMin);r!==void 0?t=r-(this.residueSegmentMin-t-1):t=this.residueSegmentMin}else if(t>this.residueSegmentMax){let r=this.cyclicPolymerMap.get(this.residueSegmentMax);r!==void 0?t=r+(t-this.residueSegmentMax-1):t=this.residueSegmentMax}return t}getSecStruc(t){if(this.secondaryStructure){let{type:r,getIndex:n}=this.secondaryStructure,o=r[n(t)];return dB(o)?vr.Flag.Helix:o}else return L3}setControlPoint(t,r,n,o,i){EEt(i)||this.helixOrientationCenters&&dB(i)?B.scale(t,B.add(t,r,B.add(t,o,B.add(t,n,n))),1/4):B.copy(t,n)}setFromToVector(t,r,n){this.helixOrientationCenters&&dB(n)?B.set(t,1,0,0):(this.atomicPos(R3,this.directionFromElementIndex[r]),this.atomicPos(U3,this.directionToElementIndex[r]),B.sub(t,U3,R3))}setDirection(t,r,n,o){B.matchDirection(R3,r,n),B.matchDirection(U3,o,n),B.scale(t,B.add(t,R3,B.add(t,U3,B.add(t,n,n))),1/4)}move(){let{residueIt:t,polymerIt:r,value:n}=this;if(this.state===0){for(;r.hasNext;)if(this.polymerSegment=r.move(),t.setSegment(this.polymerSegment),this.updateResidueSegmentRange(this.polymerSegment),t.hasNext){this.state=1;let o=this.residueAtomSegments.index[this.unit.elements[this.polymerSegment.start]],i=this.getResidueIndex(o-1);this.currSecStrucType=o===i?L3:this.getSecStruc(i),this.nextSecStrucType=this.getSecStruc(o),this.currCoarseBackbone=this.directionFromElementIndex[i]===-1||this.directionToElementIndex[i]===-1,this.nextCoarseBackbone=this.directionFromElementIndex[o]===-1||this.directionToElementIndex[o]===-1;break}}if(this.state===1){let{index:o}=t.move(),i=this.getResidueIndex(o-3),a=this.getResidueIndex(o-2),A=this.getResidueIndex(o-1),s=this.getResidueIndex(o+1),c=this.getResidueIndex(o+2),l=this.getResidueIndex(o+3);this.prevSecStrucType=this.getSecStruc(A),this.currSecStrucType=this.getSecStruc(o),this.nextSecStrucType=o===s?L3:this.getSecStruc(s),this.prevCoarseBackbone=this.currCoarseBackbone,this.currCoarseBackbone=this.nextCoarseBackbone,this.nextCoarseBackbone=this.directionFromElementIndex[s]===-1||this.directionToElementIndex[s]===-1,n.secStrucType=this.currSecStrucType,n.secStrucFirst=this.prevSecStrucType!==this.currSecStrucType,n.secStrucLast=this.currSecStrucType!==this.nextSecStrucType,n.coarseBackboneFirst=this.prevCoarseBackbone!==this.currCoarseBackbone,n.coarseBackboneLast=this.currCoarseBackbone!==this.nextCoarseBackbone,n.first=o===this.residueSegmentMin,n.last=o===this.residueSegmentMax,n.moleculeType=this.moleculeType[o],n.initial=o===A,n.final=o===s,n.centerPrev.element=this.traceElementIndex[A],n.center.element=this.traceElementIndex[o],n.centerNext.element=this.traceElementIndex[s];let u=this.getSecStruc(i),g=this.getSecStruc(a),m=this.getSecStruc(A),p=this.getSecStruc(o),d=this.getSecStruc(s),f=this.getSecStruc(c),I=this.getSecStruc(l);this.pos(this.p0,i,u),this.pos(this.p1,a,g),this.pos(this.p2,A,m),this.pos(this.p3,o,p),this.pos(this.p4,s,d),this.pos(this.p5,c,f),this.pos(this.p6,l,I);let C=dB(u),y=dB(g),Q=dB(m),E=dB(p),b=dB(d),x=dB(f),S=dB(I);this.helixOrientationCenters&&!(E&&n.secStrucFirst&&n.secStrucLast)&&(E!==Q?E?(B.copy(this.p0,this.p3),B.copy(this.p1,this.p3),B.copy(this.p2,this.p3)):Q&&(B.scale(bn,B.sub(bn,this.p2,this.p3),2),B.add(this.p2,this.p3,bn),B.add(this.p1,this.p2,bn),B.add(this.p0,this.p1,bn)):E!==y?E?(B.copy(this.p0,this.p2),B.copy(this.p1,this.p2)):y&&(B.scale(bn,B.sub(bn,this.p1,this.p2),2),B.add(this.p1,this.p2,bn),B.add(this.p0,this.p1,bn)):E!==C&&(E?B.copy(this.p0,this.p1):C&&(B.scale(bn,B.sub(bn,this.p0,this.p1),2),B.add(this.p0,this.p1,bn))),E!==b?E?(B.copy(this.p4,this.p3),B.copy(this.p5,this.p3),B.copy(this.p6,this.p3)):b&&(B.scale(bn,B.sub(bn,this.p4,this.p3),2),B.add(this.p4,this.p3,bn),B.add(this.p5,this.p4,bn),B.add(this.p6,this.p5,bn)):E!==x?E?(B.copy(this.p5,this.p4),B.copy(this.p6,this.p4)):x&&(B.scale(bn,B.sub(bn,this.p5,this.p4),2),B.add(this.p5,this.p4,bn),B.add(this.p6,this.p5,bn)):E!==S&&(E?B.copy(this.p6,this.p5):S&&(B.scale(bn,B.sub(bn,this.p6,this.p5),2),B.add(this.p6,this.p5,bn)))),this.currCoarseBackbone?(B.triangleNormal(this.d01,this.p1,this.p2,this.p3),B.triangleNormal(this.d12,this.p2,this.p3,this.p4),B.triangleNormal(this.d23,this.p3,this.p4,this.p5),B.triangleNormal(this.d34,this.p4,this.p5,this.p6)):(this.setFromToVector(this.d01,A,m),this.setFromToVector(this.d12,o,p),this.setFromToVector(this.d23,s,d),this.setFromToVector(this.d34,c,f));let w=E&&this.helixOrientationCenters,R=1.5;o===A||p!==m&&w?(B.setMagnitude(bn,B.sub(bn,this.p3,this.p4),R),B.add(this.p2,this.p3,bn),B.add(this.p1,this.p2,bn),B.add(this.p0,this.p1,bn)):A===a||p!==g&&w?(B.setMagnitude(bn,B.sub(bn,this.p2,this.p3),R),B.add(this.p1,this.p2,bn),B.add(this.p0,this.p1,bn)):(a===i||p!==u&&w)&&(B.setMagnitude(bn,B.sub(bn,this.p1,this.p2),R),B.add(this.p0,this.p1,bn)),o===s||p!==d&&w?(B.setMagnitude(bn,B.sub(bn,this.p3,this.p2),R),B.add(this.p4,this.p3,bn),B.add(this.p5,this.p4,bn),B.add(this.p6,this.p5,bn)):s===c||p!==f&&w?(B.setMagnitude(bn,B.sub(bn,this.p4,this.p3),R),B.add(this.p5,this.p4,bn),B.add(this.p6,this.p5,bn)):(c===l||p!==I&&w)&&(B.setMagnitude(bn,B.sub(bn,this.p5,this.p4),R),B.add(this.p6,this.p5,bn)),this.setControlPoint(n.p0,this.p0,this.p1,this.p2,g),this.setControlPoint(n.p1,this.p1,this.p2,this.p3,m),this.setControlPoint(n.p2,this.p2,this.p3,this.p4,p),this.setControlPoint(n.p3,this.p3,this.p4,this.p5,d),this.setControlPoint(n.p4,this.p4,this.p5,this.p6,f),this.setDirection(n.d12,this.d01,this.d12,this.d23),this.setDirection(n.d23,this.d12,this.d23,this.d34),t.hasNext||(this.state=0)}return this.hasNext=t.hasNext||r.hasNext,this.value}};var I7=class{constructor(t,r){this.unit=t;this.state=0;this.hasNext=!1;switch(this.polymerIt=vo.transientSegments(gx(t),t.elements),this.value=iUe(r,t),B.set(this.value.d12,1,0,0),B.set(this.value.d23,1,0,0),t.kind){case ge.Kind.Spheres:this.conformation=t.model.coarseConformation.spheres;break;case ge.Kind.Gaussians:this.conformation=t.model.coarseConformation.gaussians;break}this.hasNext=this.polymerIt.hasNext}getElementIndex(t){return Math.min(Math.max(this.polymerSegment.start,t),this.polymerSegment.end-1)}pos(t,r){let n=this.unit.elements[r];t[0]=this.conformation.x[n],t[1]=this.conformation.y[n],t[2]=this.conformation.z[n]}move(){if(this.state===0){for(;this.polymerIt.hasNext;)if(this.polymerSegment=this.polymerIt.move(),this.elementIndex=this.polymerSegment.start,this.elementIndex<this.polymerSegment.end){this.state=1;break}}if(this.state===1){let t=this.getElementIndex(this.elementIndex-2),r=this.getElementIndex(this.elementIndex-1),n=this.getElementIndex(this.elementIndex+1),o=this.getElementIndex(this.elementIndex+2);this.value.centerPrev.element=this.value.center.unit.elements[r],this.value.center.element=this.value.center.unit.elements[this.elementIndex],this.value.centerNext.element=this.value.center.unit.elements[n],this.pos(this.value.p0,t),this.pos(this.value.p1,r),this.pos(this.value.p2,this.elementIndex),this.pos(this.value.p3,n),this.pos(this.value.p4,o);let i=.5;this.elementIndex===r?(B.scale(bn,B.sub(bn,this.value.p2,this.value.p3),i),B.add(this.value.p1,this.value.p2,bn),B.add(this.value.p0,this.value.p1,bn)):r===t&&(B.scale(bn,B.sub(bn,this.value.p1,this.value.p2),i),B.add(this.value.p0,this.value.p1,bn)),this.elementIndex===n?(B.scale(bn,B.sub(bn,this.value.p2,this.value.p1),i),B.add(this.value.p3,this.value.p2,bn),B.add(this.value.p4,this.value.p3,bn)):n===o&&(B.scale(bn,B.sub(bn,this.value.p3,this.value.p2),i),B.add(this.value.p4,this.value.p3,bn)),this.value.first=this.elementIndex===this.polymerSegment.start,this.value.last=this.elementIndex===this.polymerSegment.end-1,this.elementIndex+1>=this.polymerSegment.end&&(this.state=0)}return this.hasNext=this.elementIndex+1<this.polymerSegment.end||this.polymerIt.hasNext,this.elementIndex+=1,this.value}};var mx=B.fromArray,vF=B.toArray,b7=B.normalize,bEt=B.sub,SF=B.spline,xEt=B.slerp,aUe=B.copy,AUe=B.cross,C7=B.orthogonalize,SEt=B.matchDirection,DEt=B.scale,sUe=B.add;function Xh(e){let t=e+1,r=t*3;return{curvePoints:new Float32Array(r),tangentVectors:new Float32Array(r),normalVectors:new Float32Array(r),binormalVectors:new Float32Array(r),widthValues:new Float32Array(t),heightValues:new Float32Array(t),linearSegments:e}}function FF(e,t,r,n){vEt(e,t,r,n),wEt(e,t)}var h7=B(),y7=B(),Q7=B();function vEt(e,t,r,n){let{curvePoints:o,tangentVectors:i,linearSegments:a}=e,{p0:A,p1:s,p2:c,p3:l,p4:u,secStrucFirst:g,secStrucLast:m}=t,p=1-n,d=g?.5:r,f=m?.5:r;for(let I=0;I<=a;++I){let C=I*1/a;if(C<p){let y=ho(d,r,C);SF(Q7,A,s,c,l,C+n,y),SF(h7,A,s,c,l,C+n+.01,d),SF(y7,A,s,c,l,C+n-.01,d)}else{let y=ho(r,f,C);SF(Q7,s,c,l,u,C-p,y),SF(h7,s,c,l,u,C-p+.01,y),SF(y7,s,c,l,u,C-p-.01,y)}vF(Q7,o,I*3),b7(uE,bEt(uE,h7,y7)),vF(uE,i,I*3)}}var FEt=B(),uE=B(),pB=B(),DF=B(),KU=B(),cUe=B(),lUe=B(),uUe=B(),E7=B(),T3=B();function wEt(e,t){let{curvePoints:r,tangentVectors:n,normalVectors:o,binormalVectors:i}=e,{d12:a,d23:A}=t,s=r.length/3;mx(lUe,n,0),mx(uUe,n,(s-1)*3),C7(E7,lUe,a),C7(T3,uUe,A),SEt(T3,T3,E7),aUe(KU,E7);let c=s-1;for(let l=0;l<s;++l){let u=MS(0,c,l)*c,g=l===0?0:1/(s-u);mx(uE,n,l*3),C7(pB,uE,xEt(FEt,KU,T3,g)),vF(pB,o,l*3),aUe(KU,pB),b7(DF,AUe(DF,uE,pB)),vF(DF,i,l*3)}for(let l=1;l<c;++l)mx(KU,o,(l-1)*3),mx(pB,o,l*3),mx(cUe,o,(l+1)*3),DEt(pB,sUe(pB,KU,sUe(pB,cUe,pB)),1/3),vF(pB,o,l*3),mx(uE,n,l*3),b7(DF,AUe(DF,uE,pB)),vF(DF,i,l*3)}function jU(e,t,r,n,o,i,a,A){let{widthValues:s,heightValues:c,linearSegments:l}=e,u=1-A;for(let g=0;g<=l;++g){let m=g*1/l;m<u?(s[g]=ho(t,r,m+A),c[g]=ho(o,i,m+A)):(s[g]=ho(r,n,m-u),c[g]=ho(i,a,m-u))}}var P3=.5,mUe=.9,dx=.5,px=.3,wF=2;function gx(e){switch(e.kind){case ge.Kind.Atomic:return e.model.atomicRanges.polymerRanges;case ge.Kind.Spheres:return e.model.coarseHierarchy.spheres.polymerRanges;case ge.Kind.Gaussians:return e.model.coarseHierarchy.gaussians.polymerRanges}}function f7(e){switch(e.kind){case ge.Kind.Atomic:return e.model.atomicRanges.gapRanges;case ge.Kind.Spheres:return e.model.coarseHierarchy.spheres.gapRanges;case ge.Kind.Gaussians:return e.model.coarseHierarchy.gaussians.gapRanges}}var vd;(t=>{function e(r,n){let{group:o,structure:i}=r,a=o.units[0].polymerElements,A=a.length,s=o.units.length,c=W.Location.create(i),l=(m,p)=>{let d=o.units[p];return c.unit=d,c.element=a[m],c},u=!!n?.asSecondary;function g(m,p){return u}return rn(A,s,1,l,!1,g)}t.fromGroup=e})(vd||={});var x7;(t=>{function e(r,n){let{group:o,structure:i}=r,a=o.units[0].gapElements,A=a.length,s=o.units.length,c=W.Location.create(i),l=(m,p)=>{let d=o.units[p];return c.unit=d,c.element=a[m],c},u=!!n?.asSecondary;function g(m,p){return u}return rn(A,s,1,l,!1,g)}t.fromGroup=e})(x7||={});function jp(e,t,r){let{objectId:n,instanceId:o,groupId:i}=e;if(r===n){let{structure:a,group:A}=t,s=A.units[o];if(i===Ai.Null){let c=Ee.ofRange(0,s.elements.length);return W.Loci(a.target,[{unit:s,indices:c}])}else{if(ge.isAtomic(s))return cV(a,s,s.polymerElements[i]);{let{elements:c}=s,l=s.polymerElements[i],u=Ee.indexOf(c,l);if(u!==-1){let g=Ee.ofSingleton(u);return W.Loci(a,[{unit:s,indices:g}])}}}}return Ir}function gUe(e,t,r,n,o,i){let a=-1,A=-1;for(let c=o;c<=i;c++){let l=r[c];if(!(l<0)&&(a=Ee.indexOf(t,l),a>=0)){A=c;break}}if(a<0)return!1;let s=a;for(let c=i;c>A;c--){let l=r[c];if(l<0)continue;let u=Ee.indexOf(t,l);if(u>=0){s=u;break}}return n(Ue.ofRange(e+a,e+s))}function S7(e,t,r,n,o){let i=!1,{elements:a}=o.unit,{traceElementIndex:A}=o.unit.model.atomicHierarchy.derived.residue,{index:s}=o.unit.model.atomicHierarchy.residueAtomSegments,c=r(o.unit);if(Ue.is(o.indices))if(Ue.start(o.indices)===0&&Ue.end(o.indices)===o.unit.elements.length)i=n(Ue.ofBounds(e,e+t))||i;else{let l=s[a[Ue.min(o.indices)]],u=s[a[Ue.max(o.indices)]];i=gUe(e,c,A,n,l,u)||i}else{let{indices:l}=o;for(let u=0,g=l.length;u<g;u++){let m=s[a[l[u]]],p=m,d=u+1;for(;d<g;){let f=s[a[l[d]]];if(f-p>1)break;p=f,d++}u=d-1,i=gUe(e,c,A,n,m,p)||i}}return i}function REt(e){return e.polymerElements}function Wp(e,t,r){let n=!1;if(!W.Loci.is(e))return!1;let{structure:o,group:i}=t;if(!Ye.areEquivalent(e.structure,o))return!1;let a=i.units[0].polymerElements.length;for(let A of e.elements){if(!i.unitIndexMap.has(A.unit.id))continue;let s=i.unitIndexMap.get(A.unit.id)*a;if(ge.isAtomic(A.unit))n=S7(s,a,REt,r,A)||n;else if(Ue.is(A.indices)){let c=s+Ue.start(A.indices),l=s+Ue.end(A.indices);n=r(Ue.ofBounds(c,l))||n}else for(let c=0,l=A.indices.length;c<l;c++){let u=A.indices[c],g=c+1;for(;g<l&&A.indices[g]===u;)g++;c=g-1;let m=A.indices[c];n=r(Ue.ofRange(s+u,s+m))||n}}return n}function dUe(e,t,r){let{objectId:n,instanceId:o,groupId:i}=e;if(r===n){let{structure:a,group:A}=t,s=A.units[o],c=Ee.indexOf(s.elements,s.gapElements[i]),l=Ee.indexOf(s.elements,s.gapElements[i%2?i-1:i+1]);if(c!==-1&&l!==-1)return Et.Loci(a,[Et.Location(a,s,c,a,s,l),Et.Location(a,s,l,a,s,c)])}return Ir}function pUe(e,t,r){let n=!1;if(Et.isLoci(e)){let{structure:o,group:i}=t;if(!Ye.areRootsEquivalent(e.structure,o))return!1;e=Et.remapLoci(e,o);let a=i.units[0].gapElements.length;for(let A of e.bonds){let s=i.unitIndexMap.get(A.aUnit.id);if(s!==void 0){let c=Ee.indexOf(A.aUnit.gapElements,A.aUnit.elements[A.aIndex]),l=Ee.indexOf(A.bUnit.gapElements,A.bUnit.elements[A.bIndex]);c!==-1&&l!==-1&&r(Ue.ofSingleton(s*a+c))&&(n=!0)}}}else if(W.Loci.is(e)){let{structure:o,group:i}=t;if(!Ye.areRootsEquivalent(e.structure,o))return!1;e=W.Loci.remap(e,o);let a=i.units[0].gapElements.length;for(let A of e.elements){let s=i.unitIndexMap.get(A.unit.id);s!==void 0&&Ee.forEach(A.indices,c=>{let l=Ee.indexOf(A.unit.gapElements,A.unit.elements[c]);l!==-1&&(r(Ue.ofSingleton(s*a+l))&&(n=!0),Ee.getAt(A.unit.gapElements,l+1)===A.unit.elements[c]&&r(Ue.ofSingleton(s*a+l+1))&&(n=!0))})}}return n}var Fd;(t=>{function e(r){let{group:n,structure:o}=r,i=n.units[0],a=ge.isAtomic(i)?i.nucleotideElements:[],A=a.length,s=n.units.length,c=W.Location.create(o);return rn(A,s,1,(u,g)=>{let m=n.units[g];return c.unit=m,c.element=a[u],c})}t.fromGroup=e})(Fd||={});function Xp(e,t,r){let{objectId:n,instanceId:o,groupId:i}=e;if(r===n){let{structure:a,group:A}=t,s=A.units[o];if(ge.isAtomic(s))if(i===Ai.Null){let c=Ue.ofRange(0,s.elements.length);return W.Loci(a.target,[{unit:s,indices:c}])}else return cV(a,s,s.nucleotideElements[i])}return Ir}function UEt(e){return e.nucleotideElements}function Zp(e,t,r){let n=!1;if(!W.Loci.is(e))return!1;let{structure:o,group:i}=t;if(!Ye.areEquivalent(e.structure,o))return!1;let a=i.units[0];if(!ge.isAtomic(a))return!1;let{nucleotideElements:A}=a,s=A.length;for(let c of e.elements){if(!ge.isAtomic(c.unit)||!i.unitIndexMap.has(c.unit.id))continue;let l=i.unitIndexMap.get(c.unit.id)*s;ge.isAtomic(c.unit)&&(n=S7(l,s,UEt,r,c)||n)}return n}var LEt=B(),TEt=B();function qp(e,t){let{model:r,conformation:n}=e,{residueAtomSegments:o,atoms:i,index:a}=r.atomicHierarchy,{label_comp_id:A}=i,s=A.value(o.offsets[t]),c=qz(s),l=$z(s);if(!c&&!l){let u=a.findAtomOnResidue(t,"C4"),g=a.findAtomOnResidue(t,"N9");u!==-1&&g!==-1&&B.distance(n.invariantPosition(u,LEt),n.invariantPosition(g,TEt))<1.6?c=!0:l=!0}return{isPurine:c,isPyrimidine:l}}function $p(){return{trace:-1,N1:-1,C2:-1,N3:-1,C4:-1,C5:-1,C6:-1,N7:-1,C8:-1,N9:-1,C1_1:-1,C2_1:-1,C3_1:-1,C4_1:-1,O4_1:-1}}function ef(e,t,r){let n=t.model.atomicHierarchy.index,{traceElementIndex:o}=t.model.atomicHierarchy.derived.residue;return e.trace=o[r],e.N1=n.findAtomOnResidue(r,"N1"),e.C2=n.findAtomOnResidue(r,"C2"),e.N3=n.findAtomOnResidue(r,"N3"),e.C4=n.findAtomOnResidue(r,"C4"),e.C5=n.findAtomOnResidue(r,"C5"),e.C5===-1&&(e.C5=n.findAtomOnResidue(r,"N5")),e.C6=n.findAtomOnResidue(r,"C6"),e.N7=n.findAtomOnResidue(r,"N7"),e.N7===-1&&(e.N7=n.findAtomOnResidue(r,"C7")),e.C8=n.findAtomOnResidue(r,"C8"),e.N9=n.findAtomOnResidue(r,"N9"),e}function sC(e){return e.trace!==-1&&e.N1!==-1&&e.C2!==-1&&e.N3!==-1&&e.C4!==-1&&e.C5!==-1&&e.C6!==-1&&e.N7!==-1&&e.C8!==-1&&e.N9!==-1}function tf(e,t,r){let n=t.model.atomicHierarchy.index,{traceElementIndex:o}=t.model.atomicHierarchy.derived.residue;return e.trace=o[r],e.N1=n.findAtomOnResidue(r,"N1"),e.N1===-1&&(e.N1=n.findAtomOnResidue(r,"C1")),e.C2=n.findAtomOnResidue(r,"C2"),e.N3=n.findAtomOnResidue(r,"N3"),e.C4=n.findAtomOnResidue(r,"C4"),e.C5=n.findAtomOnResidue(r,"C5"),e.C6=n.findAtomOnResidue(r,"C6"),e}function cC(e){return e.trace!==-1&&e.N1!==-1&&e.C2!==-1&&e.N3!==-1&&e.C4!==-1&&e.C5!==-1&&e.C6!==-1}function gE(e,t,r){let n=t.model.atomicHierarchy.index,{traceElementIndex:o}=t.model.atomicHierarchy.derived.residue;return e.trace=o[r],e.C1_1=n.findAtomOnResidue(r,"C1'"),e.C2_1=n.findAtomOnResidue(r,"C2'"),e.C3_1=n.findAtomOnResidue(r,"C3'"),e.C4_1=n.findAtomOnResidue(r,"C4'"),e.O4_1=n.findAtomOnResidue(r,"O4'"),e}function mE(e){return e.trace!==-1&&e.C1_1!==-1&&e.C2_1!==-1&&e.C3_1!==-1&&e.C4_1!==-1&&e.O4_1!==-1}var G3=B(),D7=B(),fUe=B(),BUe=B(),IUe=B(),CUe=B(),N3=B(),v7=B(),F7=B(),hUe=B(),WU=Y.identity(),PEt=B(),yUe=dI(),QUe={sizeFactor:h.Numeric(.2,{min:0,max:10,step:.01}),thicknessFactor:h.Numeric(1,{min:0,max:2,step:.01}),radialSegments:h.Numeric(16,{min:2,max:56,step:2},ot.CustomQualityParamInfo)},xLn=h.getDefaultValues(QUe);function GEt(e,t,r,n,o,i){if(!ge.isAtomic(t))return At.createEmpty(i);let a=t.nucleotideElements.length;if(!a)return At.createEmpty(i);let{sizeFactor:A,thicknessFactor:s,radialSegments:c}=o,l=a*(yUe.vertices.length/3+c*2),u=We.createState(l,l/4,i),{elements:g,model:m,conformation:p}=t,{chainAtomSegments:d,residueAtomSegments:f}=m.atomicHierarchy,{moleculeType:I}=m.atomicHierarchy.derived.residue,C=sr.transientSegments(d,g),y=sr.transientSegments(f,g),Q=1*A,E=4.5,b=s*A*2,x={radiusTop:Q,radiusBottom:Q,radialSegments:c,bottomCap:!0},S=0;for(;C.hasNext;)for(y.setSegment(C.move());y.hasNext;){let{index:T}=y.move();if(qa(I[T])){let L=$p(),F=-1,v=-1,U=-1,G=-1,N=-1,k=4.5,{isPurine:J,isPyrimidine:H}=qp(t,T);J?(k=4.5,ef(L,t,T),F=L.N1,v=L.C4,U=L.C6,G=L.C2,N=L.N9):H&&(k=3,tf(L,t,T),F=L.N3,v=L.C6,U=L.C4,G=L.C2,N=L.N1),N!==-1&&L.trace!==-1&&(p.invariantPosition(N,IUe),p.invariantPosition(L.trace,CUe),u.currentGroup=S,Sn(u,IUe,CUe,1,x),F!==-1&&v!==-1&&U!==-1&&G!==-1&&(p.invariantPosition(F,G3),p.invariantPosition(v,D7),p.invariantPosition(U,fUe),p.invariantPosition(G,BUe),B.normalize(N3,B.sub(N3,D7,G3)),B.normalize(v7,B.sub(v7,BUe,fUe)),B.normalize(F7,B.cross(F7,N3,v7)),Y.targetTo(WU,G3,D7,F7),B.scaleAndAdd(hUe,G3,N3,k/2-.2),Y.scale(WU,WU,B.set(PEt,E,b,k)),Y.setTranslation(WU,hUe),We.addPrimitive(u,WU,yUe))),++S}}let w=We.getMesh(u),R=we.expand(we(),t.boundary.sphere,Q);return w.setBoundingSphere(R),w}var w7={...bo,...QUe};function EUe(e){return Vo({defaultProps:h.getDefaultValues(w7),createGeometry:GEt,createLocationIterator:Fd.fromGroup,getLoci:Xp,eachLocation:Zp,setUpdateState:(t,r,n)=>{t.createGeometry=r.sizeFactor!==n.sizeFactor||r.thicknessFactor!==n.thicknessFactor||r.radialSegments!==n.radialSegments}},e)}var M3=B(),dE=B(),k3=B(),H3=B(),RF=B(),UF=B(),V3=B(),bUe=B(),xUe=B(),_3=B(),pE=B(),vUe={sizeFactor:h.Numeric(.2,{min:0,max:10,step:.01}),thicknessFactor:h.Numeric(1,{min:0,max:2,step:.01}),radialSegments:h.Numeric(16,{min:2,max:56,step:2},ot.CustomQualityParamInfo),detail:h.Numeric(0,{min:0,max:3,step:1},ot.CustomQualityParamInfo)},_Ln=h.getDefaultValues(vUe),Y3=new Float32Array(54),NEt=new Uint32Array([0,1,2,3,4,5,6,7,16,17,14,15,12,13,8,9,10,11,0,1]),MEt=new Uint32Array([8,12,14,16,6,4,2,0,10]),kEt=new Uint32Array([9,11,1,3,5,7,17,15,13]),O3=new Float32Array(36),HEt=new Uint32Array([0,1,2,3,4,5,6,7,8,9,10,11,0,1]),VEt=new Uint32Array([0,10,8,6,4,2]),_Et=new Uint32Array([1,3,5,7,9,11]),SUe=B();function DUe(e,t,...r){for(let n=0,o=r.length;n<o;++n){let i=r[n];B.toArray(B.add(SUe,i,t),e,n*2*3),B.toArray(B.sub(SUe,i,t),e,(n*2+1)*3)}}function YEt(e,t,r,n,o,i){if(!ge.isAtomic(t))return At.createEmpty(i);let a=t.nucleotideElements.length;if(!a)return At.createEmpty(i);let{sizeFactor:A,thicknessFactor:s,radialSegments:c,detail:l}=o,u=a*(26+c*2),g=We.createState(u,u/4,i),{elements:m,model:p,conformation:d}=t,{chainAtomSegments:f,residueAtomSegments:I}=p.atomicHierarchy,{moleculeType:C}=p.atomicHierarchy.derived.residue,y=sr.transientSegments(f,m),Q=sr.transientSegments(I,m),E=1*A,b=s*A,x={radiusTop:E,radiusBottom:E,radialSegments:c},S=0;for(;y.hasNext;)for(Q.setSegment(y.move());Q.hasNext;){let{index:T}=Q.move();if(qa(C[T])){let L=$p();g.currentGroup=S;let{isPurine:F,isPyrimidine:v}=qp(t,T);F?(ef(L,t,T),L.N9!==-1&&L.trace!==-1&&(d.invariantPosition(L.N9,_3),d.invariantPosition(L.trace,M3),g.currentGroup=S,Sn(g,_3,M3,1,x),cn(g,_3,E,l)),sC(L)&&(d.invariantPosition(L.N1,dE),d.invariantPosition(L.C2,k3),d.invariantPosition(L.N3,H3),d.invariantPosition(L.C4,RF),d.invariantPosition(L.C5,UF),d.invariantPosition(L.C6,V3),d.invariantPosition(L.N7,bUe),d.invariantPosition(L.C8,xUe),B.triangleNormal(pE,dE,RF,UF),B.scale(pE,pE,b),DUe(Y3,pE,dE,k3,H3,RF,UF,V3,bUe,xUe,_3),We.addTriangleStrip(g,Y3,NEt),We.addTriangleFan(g,Y3,MEt),We.addTriangleFan(g,Y3,kEt))):v&&(tf(L,t,T),L.N1!==-1&&L.trace!==-1&&(d.invariantPosition(L.N1,dE),d.invariantPosition(L.trace,M3),g.currentGroup=S,Sn(g,dE,M3,1,x),cn(g,dE,E,l)),cC(L)&&(d.invariantPosition(L.C2,k3),d.invariantPosition(L.N3,H3),d.invariantPosition(L.C4,RF),d.invariantPosition(L.C5,UF),d.invariantPosition(L.C6,V3),B.triangleNormal(pE,dE,RF,UF),B.scale(pE,pE,b),DUe(O3,pE,dE,k3,H3,RF,UF,V3),We.addTriangleStrip(g,O3,HEt),We.addTriangleFan(g,O3,VEt),We.addTriangleFan(g,O3,_Et))),++S}}let w=We.getMesh(g),R=we.expand(we(),t.boundary.sphere,E);return w.setBoundingSphere(R),w}var R7={...bo,...vUe};function FUe(e){return Vo({defaultProps:h.getDefaultValues(R7),createGeometry:YEt,createLocationIterator:Fd.fromGroup,getLoci:Xp,eachLocation:Zp,setUpdateState:(t,r,n)=>{t.createGeometry=r.sizeFactor!==n.sizeFactor||r.thicknessFactor!==n.thicknessFactor||r.radialSegments!==n.radialSegments}},e)}var LF=B(),J3=B(),z3=B(),TF=B(),PF=B(),K3=B(),wUe=B(),RUe=B(),UUe=B(),j3=B(),U7=B(),W3=B(),X3=B(),L7=B(),GF=B(),_l=B(),NF=B(),TUe={sizeFactor:h.Numeric(.2,{min:0,max:10,step:.01}),thicknessFactor:h.Numeric(1,{min:0,max:2,step:.01})},rTn=h.getDefaultValues(TUe),Z3=new Float32Array(54),OEt=new Uint32Array([0,1,2,3,4,5,6,7,16,17,14,15,12,13,8,9,10,11,0,1]),JEt=new Uint32Array([8,12,14,16,6,4,2,0,10]),zEt=new Uint32Array([9,11,1,3,5,7,17,15,13]),q3=new Float32Array(36),KEt=new Uint32Array([2,3,4,5,6,7,8,9,10,11,2,3]),jEt=new Uint32Array([0,10,8,6,4,2,10]),WEt=new Uint32Array([1,3,5,7,9,11,3]),$3=new Float32Array(36),XEt=new Uint32Array([0,1,2,3,4,5,6,7,8,9,10,11,0,1]),ZEt=new Uint32Array([0,10,8,6,4,2]),qEt=new Uint32Array([1,3,5,7,9,11]),LUe=B();function T7(e,t,...r){for(let n=0,o=r.length;n<o;++n){let i=r[n];B.toArray(B.add(LUe,i,t),e,n*2*3),B.toArray(B.sub(LUe,i,t),e,(n*2+1)*3)}}function $Et(e,t,r,n,o,i){if(!ge.isAtomic(t))return At.createEmpty(i);let a=t.nucleotideElements.length;if(!a)return At.createEmpty(i);let{sizeFactor:A,thicknessFactor:s}=o,c=a*25,l=We.createState(c,c/4,i),{elements:u,model:g,conformation:m}=t,{chainAtomSegments:p,residueAtomSegments:d}=g.atomicHierarchy,{moleculeType:f}=g.atomicHierarchy.derived.residue,I=sr.transientSegments(p,u),C=sr.transientSegments(d,u),y=A*s,Q=0;for(;I.hasNext;)for(C.setSegment(I.move());C.hasNext;){let{index:x}=C.move();if(qa(f[x])){let S=$p();l.currentGroup=Q,gE(S,t,x),mE(S)&&(m.invariantPosition(S.C1_1,j3),m.invariantPosition(S.C2_1,U7),m.invariantPosition(S.C3_1,W3),m.invariantPosition(S.C4_1,X3),m.invariantPosition(S.O4_1,L7),B.triangleNormal(_l,W3,X3,j3),B.scale(GF,B.add(GF,L7,B.add(GF,X3,B.add(GF,W3,B.add(GF,j3,U7)))),.2),B.scale(NF,_l,y),T7(q3,NF,GF,W3,X3,L7,j3,U7),We.addTriangleStrip(l,q3,KEt),We.addTriangleFanWithNormal(l,q3,jEt,_l),B.negate(_l,_l),We.addTriangleFanWithNormal(l,q3,WEt,_l));let{isPurine:w,isPyrimidine:R}=qp(t,x);w?(ef(S,t,x),sC(S)&&(m.invariantPosition(S.N1,LF),m.invariantPosition(S.C2,J3),m.invariantPosition(S.N3,z3),m.invariantPosition(S.C4,TF),m.invariantPosition(S.C5,PF),m.invariantPosition(S.C6,K3),m.invariantPosition(S.N7,wUe),m.invariantPosition(S.C8,RUe),m.invariantPosition(S.N9,UUe),B.triangleNormal(_l,LF,TF,PF),B.scale(NF,_l,y),T7(Z3,NF,LF,J3,z3,TF,PF,K3,wUe,RUe,UUe),We.addTriangleStrip(l,Z3,OEt),We.addTriangleFanWithNormal(l,Z3,JEt,_l),B.negate(_l,_l),We.addTriangleFanWithNormal(l,Z3,zEt,_l))):R&&(tf(S,t,x),cC(S)&&(m.invariantPosition(S.N1,LF),m.invariantPosition(S.C2,J3),m.invariantPosition(S.N3,z3),m.invariantPosition(S.C4,TF),m.invariantPosition(S.C5,PF),m.invariantPosition(S.C6,K3),B.triangleNormal(_l,LF,TF,PF),B.scale(NF,_l,y),T7($3,NF,LF,J3,z3,TF,PF,K3),We.addTriangleStrip(l,$3,XEt),We.addTriangleFanWithNormal(l,$3,ZEt,_l),B.negate(_l,_l),We.addTriangleFanWithNormal(l,$3,qEt,_l))),++Q}}let E=We.getMesh(l),b=we.expand(we(),t.boundary.sphere,y);return E.setBoundingSphere(b),E}var P7={...bo,...TUe};function PUe(e){return Vo({defaultProps:h.getDefaultValues(P7),createGeometry:$Et,createLocationIterator:Fd.fromGroup,getLoci:Xp,eachLocation:Zp,setUpdateState:(t,r,n)=>{t.createGeometry=r.sizeFactor!==n.sizeFactor||r.thicknessFactor!==n.thicknessFactor}},e)}var Yl=B(),ca=B(),vc=B(),Fc=B(),ZA=B(),qA=B(),wc=B(),lC=B(),uC=B(),Ts=B(),Ps=B(),gC=B(),Nm=B(),mC=B(),dC=B(),e_={...bo,...$v,sizeFactor:h.Numeric(.3,{min:0,max:10,step:.01}),radialSegments:h.Numeric(16,{min:2,max:56,step:2},ot.CustomQualityParamInfo),tryUseImpostor:h.Boolean(!0)};function GUe(e,t,r,n){return r.tryUseImpostor&&zQ(n)?tbt(e):nbt(e)}function ebt(e,t,r,n,o,i){if(!ge.isAtomic(t))return _a.createEmpty(i);let a=t.nucleotideElements.length;if(!a)return _a.createEmpty(i);let A=a*15,s=rx.create(A,A/4,i),{elements:c,model:l,conformation:u}=t,{chainAtomSegments:g,residueAtomSegments:m}=l.atomicHierarchy,{moleculeType:p}=l.atomicHierarchy.derived.residue,d=sr.transientSegments(g,c),f=sr.transientSegments(m,c),I=0,C=2;for(;d.hasNext;)for(f.setSegment(d.move());f.hasNext;){let{index:E}=f.move();if(qa(p[E])){let b=$p();gE(b,t,E),mE(b)&&(u.invariantPosition(b.C1_1,Ps),u.invariantPosition(b.C2_1,gC),u.invariantPosition(b.C3_1,Nm),u.invariantPosition(b.C4_1,mC),u.invariantPosition(b.O4_1,dC),u.invariantPosition(b.trace,Yl),s.add(Nm[0],Nm[1],Nm[2],Yl[0],Yl[1],Yl[2],1,!0,!0,C,I),s.add(Nm[0],Nm[1],Nm[2],mC[0],mC[1],mC[2],1,!0,!0,C,I),s.add(mC[0],mC[1],mC[2],dC[0],dC[1],dC[2],1,!0,!0,C,I),s.add(dC[0],dC[1],dC[2],Ps[0],Ps[1],Ps[2],1,!0,!0,C,I),s.add(Ps[0],Ps[1],Ps[2],gC[0],gC[1],gC[2],1,!0,!0,C,I),s.add(gC[0],gC[1],gC[2],Nm[0],Nm[1],Nm[2],1,!0,!0,C,I));let{isPurine:x,isPyrimidine:S}=qp(t,E);x?(ef(b,t,E),b.C1_1!==-1&&b.N9!==-1?(u.invariantPosition(b.C1_1,Ps),u.invariantPosition(b.N9,Ts),s.add(Ts[0],Ts[1],Ts[2],Ps[0],Ps[1],Ps[2],1,!0,!0,C,I)):b.N9!==-1&&b.trace!==-1&&(u.invariantPosition(b.N9,Ts),u.invariantPosition(b.trace,Yl),s.add(Ts[0],Ts[1],Ts[2],Yl[0],Yl[1],Yl[2],1,!0,!0,C,I)),sC(b)&&(u.invariantPosition(b.N1,ca),u.invariantPosition(b.C2,vc),u.invariantPosition(b.N3,Fc),u.invariantPosition(b.C4,ZA),u.invariantPosition(b.C5,qA),u.invariantPosition(b.C6,wc),u.invariantPosition(b.N7,lC),u.invariantPosition(b.C8,uC),u.invariantPosition(b.N9,Ts),s.add(Ts[0],Ts[1],Ts[2],uC[0],uC[1],uC[2],1,!0,!0,C,I),s.add(uC[0],uC[1],uC[2],lC[0],lC[1],lC[2],1,!0,!0,C,I),s.add(lC[0],lC[1],lC[2],qA[0],qA[1],qA[2],1,!0,!0,C,I),s.add(qA[0],qA[1],qA[2],wc[0],wc[1],wc[2],1,!0,!0,C,I),s.add(wc[0],wc[1],wc[2],ca[0],ca[1],ca[2],1,!0,!0,C,I),s.add(ca[0],ca[1],ca[2],vc[0],vc[1],vc[2],1,!0,!0,C,I),s.add(vc[0],vc[1],vc[2],Fc[0],Fc[1],Fc[2],1,!0,!0,C,I),s.add(Fc[0],Fc[1],Fc[2],ZA[0],ZA[1],ZA[2],1,!0,!0,C,I),s.add(ZA[0],ZA[1],ZA[2],qA[0],qA[1],qA[2],1,!0,!0,C,I),s.add(ZA[0],ZA[1],ZA[2],Ts[0],Ts[1],Ts[2],1,!0,!0,C,I))):S&&(tf(b,t,E),b.C1_1!==-1&&b.N1!==-1?(u.invariantPosition(b.N1,ca),u.invariantPosition(b.C1_1,Ps),s.add(ca[0],ca[1],ca[2],Ps[0],Ps[1],Ps[2],1,!0,!0,C,I)):b.N1!==-1&&b.trace!==-1&&(u.invariantPosition(b.N1,ca),u.invariantPosition(b.trace,Yl),s.add(ca[0],ca[1],ca[2],Yl[0],Yl[1],Yl[2],1,!0,!0,C,I)),cC(b)&&(u.invariantPosition(b.N1,ca),u.invariantPosition(b.C2,vc),u.invariantPosition(b.N3,Fc),u.invariantPosition(b.C4,ZA),u.invariantPosition(b.C5,qA),u.invariantPosition(b.C6,wc),s.add(ca[0],ca[1],ca[2],wc[0],wc[1],wc[2],1,!0,!0,C,I),s.add(wc[0],wc[1],wc[2],qA[0],qA[1],qA[2],1,!0,!0,C,I),s.add(qA[0],qA[1],qA[2],ZA[0],ZA[1],ZA[2],1,!0,!0,C,I),s.add(ZA[0],ZA[1],ZA[2],Fc[0],Fc[1],Fc[2],1,!0,!0,C,I),s.add(Fc[0],Fc[1],Fc[2],vc[0],vc[1],vc[2],1,!0,!0,C,I),s.add(vc[0],vc[1],vc[2],ca[0],ca[1],ca[2],1,!0,!0,C,I))),++I}}let y=s.getCylinders(),Q=we.expand(we(),t.boundary.sphere,1*o.sizeFactor);return y.setBoundingSphere(Q),y}function tbt(e){return eF({defaultProps:h.getDefaultValues(e_),createGeometry:ebt,createLocationIterator:Fd.fromGroup,getLoci:Xp,eachLocation:Zp,setUpdateState:(t,r,n)=>{t.createGeometry=r.sizeFactor!==n.sizeFactor},mustRecreate:(t,r,n)=>!r.tryUseImpostor||!n},e)}function rbt(e,t,r,n,o,i){if(!ge.isAtomic(t))return At.createEmpty(i);let a=t.nucleotideElements.length;if(!a)return At.createEmpty(i);let{sizeFactor:A,radialSegments:s}=o,c=a*(s*15),l=We.createState(c,c/4,i),{elements:u,model:g,conformation:m}=t,{chainAtomSegments:p,residueAtomSegments:d}=g.atomicHierarchy,{moleculeType:f}=g.atomicHierarchy.derived.residue,I=sr.transientSegments(p,u),C=sr.transientSegments(d,u),y={radiusTop:1*A,radiusBottom:1*A,radialSegments:s},Q=0;for(;I.hasNext;)for(C.setSegment(I.move());C.hasNext;){let{index:x}=C.move();if(qa(f[x])){let S=$p();l.currentGroup=Q,gE(S,t,x),mE(S)&&(m.invariantPosition(S.C1_1,Ps),m.invariantPosition(S.C2_1,gC),m.invariantPosition(S.C3_1,Nm),m.invariantPosition(S.C4_1,mC),m.invariantPosition(S.O4_1,dC),m.invariantPosition(S.trace,Yl),Sn(l,Nm,Yl,1,y),Sn(l,Nm,mC,1,y),Sn(l,mC,dC,1,y),Sn(l,dC,Ps,1,y),Sn(l,Ps,gC,1,y),Sn(l,gC,Nm,1,y));let{isPurine:w,isPyrimidine:R}=qp(t,x);w?(ef(S,t,x),S.C1_1!==-1&&S.N9!==-1?(m.invariantPosition(S.C1_1,Ps),m.invariantPosition(S.N9,Ts),Sn(l,Ts,Ps,1,y)):S.N9!==-1&&S.trace!==-1&&(m.invariantPosition(S.N9,Ts),m.invariantPosition(S.trace,Yl),Sn(l,Ts,Yl,1,y)),sC(S)&&(m.invariantPosition(S.N1,ca),m.invariantPosition(S.C2,vc),m.invariantPosition(S.N3,Fc),m.invariantPosition(S.C4,ZA),m.invariantPosition(S.C5,qA),m.invariantPosition(S.C6,wc),m.invariantPosition(S.N7,lC),m.invariantPosition(S.C8,uC),m.invariantPosition(S.N9,Ts),Sn(l,Ts,uC,1,y),Sn(l,uC,lC,1,y),Sn(l,lC,qA,1,y),Sn(l,qA,wc,1,y),Sn(l,wc,ca,1,y),Sn(l,ca,vc,1,y),Sn(l,vc,Fc,1,y),Sn(l,Fc,ZA,1,y),Sn(l,ZA,qA,1,y),Sn(l,ZA,Ts,1,y))):R&&(tf(S,t,x),S.C1_1!==-1&&S.N1!==-1?(m.invariantPosition(S.N1,ca),m.invariantPosition(S.C1_1,Ps),Sn(l,ca,Ps,1,y)):S.N1!==-1&&S.trace!==-1&&(m.invariantPosition(S.N1,ca),m.invariantPosition(S.trace,Yl),Sn(l,ca,Yl,1,y)),cC(S)&&(m.invariantPosition(S.N1,ca),m.invariantPosition(S.C2,vc),m.invariantPosition(S.N3,Fc),m.invariantPosition(S.C4,ZA),m.invariantPosition(S.C5,qA),m.invariantPosition(S.C6,wc),Sn(l,ca,wc,1,y),Sn(l,wc,qA,1,y),Sn(l,qA,ZA,1,y),Sn(l,ZA,Fc,1,y),Sn(l,Fc,vc,1,y),Sn(l,vc,ca,1,y))),++Q}}let E=We.getMesh(l),b=we.expand(we(),t.boundary.sphere,1*o.sizeFactor);return E.setBoundingSphere(b),E}function nbt(e){return Vo({defaultProps:h.getDefaultValues(e_),createGeometry:rbt,createLocationIterator:Fd.fromGroup,getLoci:Xp,eachLocation:Zp,setUpdateState:(t,r,n)=>{t.createGeometry=r.sizeFactor!==n.sizeFactor||r.radialSegments!==n.radialSegments},mustRecreate:(t,r,n)=>r.tryUseImpostor&&!!n},e)}var MF=B(),rf=B(),nf=B(),of=B(),af=B(),wd=B(),Af=B(),kF=B(),HF=B(),VF=B(),_F=B(),YF=B(),OF=B(),JF=B(),zF=B(),t_={...bo,...Zv,sizeFactor:h.Numeric(.3,{min:0,max:10,step:.01}),detail:h.Numeric(0,{min:0,max:3,step:1},ot.CustomQualityParamInfo),tryUseImpostor:h.Boolean(!0)};function NUe(e,t,r,n){return r.tryUseImpostor&&Kv(n)?ibt(e):Abt(e)}function obt(e,t,r,n,o,i){if(!ge.isAtomic(t))return rA.createEmpty(i);let a=t.nucleotideElements.length;if(!a)return rA.createEmpty(i);let A=a*15,s=Kp.create(A,A/4,i),{elements:c,model:l,conformation:u}=t,{chainAtomSegments:g,residueAtomSegments:m}=l.atomicHierarchy,{moleculeType:p}=l.atomicHierarchy.derived.residue,d=sr.transientSegments(g,c),f=sr.transientSegments(m,c),I=0;for(;d.hasNext;)for(f.setSegment(d.move());f.hasNext;){let{index:Q}=f.move();if(qa(p[Q])){let E=$p();gE(E,t,Q),mE(E)&&(u.invariantPosition(E.C1_1,_F),u.invariantPosition(E.C2_1,YF),u.invariantPosition(E.C3_1,OF),u.invariantPosition(E.C4_1,JF),u.invariantPosition(E.O4_1,zF),u.invariantPosition(E.trace,MF),s.add(MF[0],MF[1],MF[2],I),s.add(OF[0],OF[1],OF[2],I),s.add(JF[0],JF[1],JF[2],I),s.add(zF[0],zF[1],zF[2],I),s.add(_F[0],_F[1],_F[2],I),s.add(YF[0],YF[1],YF[2],I));let{isPurine:b,isPyrimidine:x}=qp(t,Q);b?(ef(E,t,Q),sC(E)&&(u.invariantPosition(E.N1,rf),u.invariantPosition(E.C2,nf),u.invariantPosition(E.N3,of),u.invariantPosition(E.C4,af),u.invariantPosition(E.C5,wd),u.invariantPosition(E.C6,Af),u.invariantPosition(E.N7,kF),u.invariantPosition(E.C8,HF),u.invariantPosition(E.N9,VF),s.add(VF[0],VF[1],VF[2],I),s.add(HF[0],HF[1],HF[2],I),s.add(kF[0],kF[1],kF[2],I),s.add(wd[0],wd[1],wd[2],I),s.add(Af[0],Af[1],Af[2],I),s.add(rf[0],rf[1],rf[2],I),s.add(nf[0],nf[1],nf[2],I),s.add(of[0],of[1],of[2],I),s.add(af[0],af[1],af[2],I))):x&&(tf(E,t,Q),cC(E)&&(u.invariantPosition(E.N1,rf),u.invariantPosition(E.C2,nf),u.invariantPosition(E.N3,of),u.invariantPosition(E.C4,af),u.invariantPosition(E.C5,wd),u.invariantPosition(E.C6,Af),s.add(rf[0],rf[1],rf[2],I),s.add(Af[0],Af[1],Af[2],I),s.add(wd[0],wd[1],wd[2],I),s.add(af[0],af[1],af[2],I),s.add(of[0],of[1],of[2],I),s.add(nf[0],nf[1],nf[2],I))),++I}}let C=s.getSpheres(),y=we.expand(we(),t.boundary.sphere,1*o.sizeFactor);return C.setBoundingSphere(y),C}function ibt(e){return qv({defaultProps:h.getDefaultValues(t_),createGeometry:obt,createLocationIterator:Fd.fromGroup,getLoci:Xp,eachLocation:Zp,setUpdateState:(t,r,n)=>{t.createGeometry=r.sizeFactor!==n.sizeFactor},mustRecreate:(t,r,n)=>!r.tryUseImpostor||!n},e)}function abt(e,t,r,n,o,i){if(!ge.isAtomic(t))return At.createEmpty(i);let a=t.nucleotideElements.length;if(!a)return At.createEmpty(i);let{sizeFactor:A,detail:s}=o,c=a*vm(s),l=We.createState(c,c/2,i),{elements:u,model:g,conformation:m}=t,{chainAtomSegments:p,residueAtomSegments:d}=g.atomicHierarchy,{moleculeType:f}=g.atomicHierarchy.derived.residue,I=sr.transientSegments(p,u),C=sr.transientSegments(d,u),y=1*A,Q=0;for(;I.hasNext;)for(C.setSegment(I.move());C.hasNext;){let{index:x}=C.move();if(qa(f[x])){let S=$p();l.currentGroup=Q,gE(S,t,x),mE(S)&&(m.invariantPosition(S.C1_1,_F),m.invariantPosition(S.C2_1,YF),m.invariantPosition(S.C3_1,OF),m.invariantPosition(S.C4_1,JF),m.invariantPosition(S.O4_1,zF),m.invariantPosition(S.trace,MF),cn(l,MF,y,s),cn(l,JF,y,s),cn(l,zF,y,s),cn(l,_F,y,s),cn(l,YF,y,s),cn(l,OF,y,s));let{isPurine:w,isPyrimidine:R}=qp(t,x);w?(ef(S,t,x),sC(S)&&(m.invariantPosition(S.N1,rf),m.invariantPosition(S.C2,nf),m.invariantPosition(S.N3,of),m.invariantPosition(S.C4,af),m.invariantPosition(S.C5,wd),m.invariantPosition(S.C6,Af),m.invariantPosition(S.N7,kF),m.invariantPosition(S.C8,HF),m.invariantPosition(S.N9,VF),cn(l,HF,y,s),cn(l,kF,y,s),cn(l,wd,y,s),cn(l,Af,y,s),cn(l,rf,y,s),cn(l,nf,y,s),cn(l,of,y,s),cn(l,af,y,s),cn(l,wd,y,s),cn(l,VF,y,s))):R&&(tf(S,t,x),cC(S)&&(m.invariantPosition(S.N1,rf),m.invariantPosition(S.C2,nf),m.invariantPosition(S.N3,of),m.invariantPosition(S.C4,af),m.invariantPosition(S.C5,wd),m.invariantPosition(S.C6,Af),cn(l,Af,y,s),cn(l,wd,y,s),cn(l,af,y,s),cn(l,of,y,s),cn(l,nf,y,s),cn(l,rf,y,s))),++Q}}let E=We.getMesh(l),b=we.expand(we(),t.boundary.sphere,1*o.sizeFactor);return E.setBoundingSphere(b),E}function Abt(e){return Vo({defaultProps:h.getDefaultValues(t_),createGeometry:abt,createLocationIterator:Fd.fromGroup,getLoci:Xp,eachLocation:Zp,setUpdateState:(t,r,n)=>{t.createGeometry=r.sizeFactor!==n.sizeFactor||r.detail!==n.detail},mustRecreate:(t,r,n)=>r.tryUseImpostor&&!!n},e)}var fx=B.zero(),KF=B.zero(),Bx=B.zero(),MUe=B.zero(),ic=vs(3,!1);function sbt(){let e=Bm(8);for(let t=0;t<3;++t){let r=(t+1)%3;B.set(fx,ic[t*3],ic[t*3+1],-.5),B.set(KF,ic[r*3],ic[r*3+1],-.5),B.set(Bx,ic[r*3],ic[r*3+1],.5),B.set(MUe,ic[t*3],ic[t*3+1],.5),e.add(fx,KF,Bx),e.add(Bx,MUe,fx)}return B.set(fx,ic[0],ic[1],-.5),B.set(KF,ic[3],ic[4],-.5),B.set(Bx,ic[6],ic[7],-.5),e.add(Bx,KF,fx),B.set(fx,ic[0],ic[1],.5),B.set(KF,ic[3],ic[4],.5),B.set(Bx,ic[6],ic[7],.5),e.add(fx,KF,Bx),e.getPrimitive()}var G7;function r_(){return G7||(G7=sbt()),G7}var N7;function kUe(){return N7||(N7=eU(ic)),N7}var Ix=Y.identity(),cbt=B.zero(),HUe=B.zero(),VUe=B.zero(),M7=B.zero(),lbt=4,ubt=4,gbt=6,mbt=r_(),_Ue={sizeFactor:h.Numeric(.2,{min:0,max:10,step:.01})},iPn=h.getDefaultValues(_Ue);function dbt(e,t,r,n,o,i){let a=t.polymerElements.length;if(!a)return At.createEmpty(i);let{sizeFactor:A}=o,s=a*24,c=We.createState(s,s/10,i),u=Xh(1),{normalVectors:g,binormalVectors:m}=u,p=0,d=xF(t,r);for(;d.hasNext;){let C=d.move();c.currentGroup=p;let y=qa(C.moleculeType),Q=vr.is(C.secStrucType,vr.Flag.Beta);if(FF(u,C,y||Q?.5:.9,y?.3:.5),Q&&!C.secStrucLast||!Q){let x=n.size.size(C.center)*A,S=lbt*x,w=ubt*x,R=gbt*x,T=y?m:g;B.fromArray(HUe,T,0),B.fromArray(VUe,T,3),B.normalize(M7,B.add(M7,HUe,VUe)),Y.targetTo(Ix,C.p3,C.p1,M7),Y.mul(Ix,Ix,Y.rotY90Z180),Y.scale(Ix,Ix,B.set(cbt,R,w,S)),Y.setTranslation(Ix,C.p2),We.addPrimitive(c,Ix,mbt)}++p}let f=We.getMesh(c),I=we.expand(we(),t.boundary.sphere,1*o.sizeFactor);return f.setBoundingSphere(I),f}var k7={...bo,..._Ue};function YUe(e){return Vo({defaultProps:h.getDefaultValues(k7),createGeometry:dbt,createLocationIterator:t=>vd.fromGroup(t),getLoci:jp,eachLocation:Wp,setUpdateState:(t,r,n)=>{t.createGeometry=r.sizeFactor!==n.sizeFactor}},e)}var H7=10,OUe={sizeFactor:h.Numeric(.2,{min:0,max:10,step:.01}),radialSegments:h.Numeric(16,{min:2,max:56,step:2},ot.CustomQualityParamInfo)},BPn=h.getDefaultValues(OUe);function pbt(e,t,r,n,o,i){let a=t.gapElements.length;if(!a)return At.createEmpty(i);let{sizeFactor:A,radialSegments:s}=o,c=H7*s*2*a*2,l=We.createState(c,c/10,i),u=B(),g=B(),m={radiusTop:1,radiusBottom:1,topCap:!0,bottomCap:!0,radialSegments:s},p=0,d=rUe(r,t);for(;d.hasNext;){let{centerA:C,centerB:y}=d.move();C.element===y.element||(t.conformation.invariantPosition(C.element,u),t.conformation.invariantPosition(y.element,g),m.radiusTop=m.radiusBottom=n.size.size(C)*A,l.currentGroup=p,Rm(l,u,g,.5,H7,!1,m),m.radiusTop=m.radiusBottom=n.size.size(y)*A,l.currentGroup=p+1,Rm(l,g,u,.5,H7,!1,m)),p+=2}let f=We.getMesh(l),I=we.expand(we(),t.boundary.sphere,1*o.sizeFactor);return f.setBoundingSphere(I),f}var Cx={...bo,...OUe};function jF(e){return Vo({defaultProps:h.getDefaultValues(Cx),createGeometry:pbt,createLocationIterator:t=>x7.fromGroup(t,{asSecondary:!0}),getLoci:dUe,eachLocation:pUe,setUpdateState:(t,r,n)=>{t.createGeometry=r.sizeFactor!==n.sizeFactor||r.radialSegments!==n.radialSegments}},e)}var _o=B(),Ri=B(),fbt=B(),Rd=B(),pC=B(),n_=B(),o_=B(),XU=B(),fB=B(),fC=B(),V7=B(),fE=B(),BE=B(),IE=B(),CE=B(),sf=B.fromArray,WF=B.scale,cf=B.add,Zh=B.sub,Bbt=B.magnitude,JUe=B.negate,_7=B.copy,zUe=B.cross,Ibt=B.set,zi=qe.add3,Cbt=qe.add;function i_(e,t,r,n,o,i,a,A,s){let{vertices:c,normals:l,indices:u}=t,g=c.elementCount;if(sf(_o,n,e),WF(o_,_o,a),WF(n_,_o,A),sf(Ri,o,e),WF(Rd,Ri,i),zUe(fC,Ri,_o),sf(fB,r,e),cf(fE,cf(fE,fB,Rd),n_),Zh(BE,cf(BE,fB,Rd),o_),Zh(IE,Zh(IE,fB,Rd),o_),cf(CE,Zh(CE,fB,Rd),n_),a<A?(zi(c,CE[0],CE[1],CE[2]),zi(c,IE[0],IE[1],IE[2]),zi(c,BE[0],BE[1],BE[2]),zi(c,fE[0],fE[1],fE[2]),_7(pC,n_)):(zi(c,fE[0],fE[1],fE[2]),zi(c,BE[0],BE[1],BE[2]),zi(c,IE[0],IE[1],IE[2]),zi(c,CE[0],CE[1],CE[2]),_7(pC,o_)),s){for(let m=0;m<4;++m)zi(l,-fC[0],-fC[1],-fC[2]);zi(u,g,g+1,g+2),zi(u,g+2,g+3,g)}else{for(let m=0;m<4;++m)zi(l,fC[0],fC[1],fC[2]);zi(u,g+2,g+1,g),zi(u,g,g+3,g+2)}}function XF(e,t,r,n,o,i,a,A,s,c){let{currentGroup:l,vertices:u,normals:g,indices:m,groups:p}=e,d=u.elementCount,f=0;A>0?(sf(_o,t,0),sf(Ri,t,o*3),f=A/Bbt(Zh(fbt,Ri,_o))):Ibt(XU,0,0,0);for(let C=0;C<=o;++C){let y=i[C],Q=a[C],E=A===0?Q:A*(1-C/o),b=C*3;sf(pC,r,b),WF(pC,pC,E),sf(Rd,n,b),WF(Rd,Rd,y),A>0&&(sf(_o,r,b),sf(Ri,n,b),WF(XU,zUe(XU,_o,Ri),f)),sf(fB,t,b),sf(fC,r,b),sf(V7,n,b),cf(_o,cf(_o,fB,Rd),pC),cf(Ri,fC,XU),zi(u,_o[0],_o[1],_o[2]),zi(g,Ri[0],Ri[1],Ri[2]),cf(_o,Zh(_o,fB,Rd),pC),zi(u,_o[0],_o[1],_o[2]),zi(g,Ri[0],Ri[1],Ri[2]),JUe(Ri,V7),zi(u,_o[0],_o[1],_o[2]),zi(g,Ri[0],Ri[1],Ri[2]),Zh(_o,Zh(_o,fB,Rd),pC),zi(u,_o[0],_o[1],_o[2]),zi(g,Ri[0],Ri[1],Ri[2]),cf(Ri,JUe(Ri,fC),XU),zi(u,_o[0],_o[1],_o[2]),zi(g,Ri[0],Ri[1],Ri[2]),Zh(_o,cf(_o,fB,Rd),pC),zi(u,_o[0],_o[1],_o[2]),zi(g,Ri[0],Ri[1],Ri[2]),_7(Ri,V7),zi(u,_o[0],_o[1],_o[2]),zi(g,Ri[0],Ri[1],Ri[2]),cf(_o,cf(_o,fB,Rd),pC),zi(u,_o[0],_o[1],_o[2]),zi(g,Ri[0],Ri[1],Ri[2])}for(let C=0;C<o;++C){for(let y=0;y<2;y++)zi(m,d+C*8+2*y,d+(C+1)*8+2*y+1,d+C*8+2*y+1),zi(m,d+C*8+2*y,d+(C+1)*8+2*y,d+(C+1)*8+2*y+1);for(let y=2;y<4;y++)zi(m,d+C*8+2*y,d+(C+1)*8+2*y,d+C*8+2*y+1),zi(m,d+(C+1)*8+2*y,d+(C+1)*8+2*y+1,d+C*8+2*y+1)}if(s){let C=i[0],y=a[0],Q=A===0?y:A;i_(0,e,t,r,n,C,Q,Q,!1)}else if(A>0){let C=i[0],y=a[0];i_(0,e,t,r,n,C,A,-y,!1),i_(0,e,t,r,n,C,-A,y,!1)}if(c&&A===0){let C=i[o],y=a[o];i_(o*3,e,t,r,n,C,y,y,!0)}let I=(o+1)*8+(s?4:A>0?8:0)+(c&&A===0?4:0);for(let C=0,y=I;C<y;++C)Cbt(p,l)}var qh=B.fromArray,hbt=B.magnitude,Y7=B.sub,KUe=B.add,O7=B.scale,ybt=B.negate,Qbt=B.copy,Ebt=B.cross,lf=qe.add3,bbt=qe.add,Rc=B(),Ol=B(),xbt=B(),J7=B(),hx=B(),jUe=B(),ZU=B(),Sbt=B(),z7=B();function ZF(e,t,r,n,o,i,a,A){let{currentGroup:s,vertices:c,normals:l,indices:u,groups:g}=e,m=c.elementCount,p=0;A>0&&(qh(Rc,t,0),qh(Ol,t,o*3),p=A/hbt(Y7(xbt,Ol,Rc)));for(let f=0;f<=o;++f){let I=i[f],C=a[f],y=A===0?C:A*(1-f/o),Q=f*3;qh(hx,r,Q),O7(hx,hx,y),qh(J7,n,Q),O7(J7,J7,I),A>0&&(qh(Rc,r,Q),qh(Ol,n,Q),O7(jUe,Ebt(jUe,Rc,Ol),p)),qh(ZU,t,Q),qh(Sbt,r,Q),qh(z7,n,Q),KUe(Rc,ZU,hx),ybt(Ol,z7),lf(c,Rc[0],Rc[1],Rc[2]),lf(l,Ol[0],Ol[1],Ol[2]),Y7(Rc,ZU,hx),lf(c,Rc[0],Rc[1],Rc[2]),lf(l,Ol[0],Ol[1],Ol[2]),KUe(Rc,ZU,hx),Qbt(Ol,z7),lf(c,Rc[0],Rc[1],Rc[2]),lf(l,Ol[0],Ol[1],Ol[2]),Y7(Rc,ZU,hx),lf(c,Rc[0],Rc[1],Rc[2]),lf(l,Ol[0],Ol[1],Ol[2])}for(let f=0;f<o;++f)lf(u,m+f*4,m+(f+1)*4+1,m+f*4+1),lf(u,m+f*4,m+(f+1)*4,m+(f+1)*4+1),lf(u,m+f*4+2+1,m+(f+1)*4+2+1,m+f*4+2),lf(u,m+f*4+2,m+(f+1)*4+2+1,m+(f+1)*4+2);let d=(o+1)*4;for(let f=0,I=d;f<I;++f)bbt(g,s)}var WUe={sizeFactor:h.Numeric(.2,{min:0,max:10,step:.01}),aspectRatio:h.Numeric(5,{min:.1,max:10,step:.1}),arrowFactor:h.Numeric(1.5,{min:0,max:3,step:.1},{description:"Size factor for sheet arrows"}),tubularHelices:h.Boolean(!1,{description:"Draw alpha helices as tubes"}),roundCap:h.Boolean(!1,{description:"Draw round caps on tubular alpha helices"}),helixProfile:h.Select("elliptical",h.arrayToOptions(["elliptical","rounded","square"]),{description:"Protein helix trace profile"}),nucleicProfile:h.Select("square",h.arrayToOptions(["elliptical","rounded","square"]),{description:"Nucleic strand trace profile"}),detail:h.Numeric(0,{min:0,max:3,step:1},ot.CustomQualityParamInfo),linearSegments:h.Numeric(8,{min:1,max:48,step:1},ot.CustomQualityParamInfo),radialSegments:h.Numeric(16,{min:2,max:56,step:2},ot.CustomQualityParamInfo)},_Pn=h.getDefaultValues(WUe),Mm=B();function Dbt(e,t,r,n,o,i){let a=t.polymerElements.length;if(!a)return At.createEmpty(i);let{sizeFactor:A,detail:s,linearSegments:c,radialSegments:l,aspectRatio:u,arrowFactor:g,tubularHelices:m,roundCap:p,helixProfile:d,nucleicProfile:f}=o,I=c*l*a+(l+1)*a*2,C=We.createState(I,I/10,i),y=ge.isCoarse(t),Q=Xh(c),{curvePoints:E,normalVectors:b,binormalVectors:x,widthValues:S,heightValues:w}=Q,R=0,T=xF(t,r,{ignoreSecondaryStructure:!1,useHelixOrientation:m});for(;T.hasNext;){let v=T.move();C.currentGroup=R;let U=qa(v.moleculeType),G=vr.is(v.secStrucType,vr.Flag.Beta),N=vr.is(v.secStrucType,vr.Flag.Helix),k=N&&!m?mUe:P3,J=U?px:dx;FF(Q,v,k,J);let H=n.size.size(v.centerPrev)*A,z=n.size.size(v.center)*A,_=n.size.size(v.centerNext)*A;y&&(H*=u/2,z*=u/2,_*=u/2);let M=v.secStrucFirst||v.coarseBackboneFirst||v.first,q=v.secStrucLast||v.coarseBackboneLast||v.last,ne=N&&m&&p,oe=c;if(v.initial){oe=Math.max(Math.round(c*J),1);let ae=c-oe;E.copyWithin(0,ae*3),x.copyWithin(0,ae*3),b.copyWithin(0,ae*3),B.fromArray(Mm,E,3),B.normalize(Mm,B.sub(Mm,v.p2,Mm)),B.scaleAndAdd(Mm,v.p2,Mm,z*wF),B.toArray(Mm,E,0)}else v.final&&(oe=Math.max(Math.round(c*(1-J)),1),B.fromArray(Mm,E,oe*3-3),B.normalize(Mm,B.sub(Mm,v.p2,Mm)),B.scaleAndAdd(Mm,v.p2,Mm,z*wF),B.toArray(Mm,E,oe*3));if(v.initial===!0&&v.final===!0)cn(C,v.p2,z*2,s);else if(G){let ae=H*u,me=z*u,Se=_*u,ee=v.secStrucLast?me*g:0;jU(Q,H,z,_,ae,me,Se,J),l===2?ZF(C,E,b,x,oe,S,w,ee):XF(C,E,b,x,oe,S,w,ee,M,q)}else{let ae,me,Se;N?m?(H*=u*1.5,z*=u*1.5,_*=u*1.5,ae=H,me=z,Se=_):(ae=H*u,me=z*u,Se=_*u):U?(ae=H*u,me=z*u,Se=_*u):(ae=H,me=z,Se=_),jU(Q,H,z,_,ae,me,Se,J);let[ee,O]=U?[x,b]:[b,x];if(U)for(let Ce=0,Ne=ee.length;Ce<Ne;Ce++)ee[Ce]*=-1;let X=U?f:d;l===2?U?ZF(C,E,ee,O,oe,w,S,0):ZF(C,E,ee,O,oe,S,w,0):l===4?XF(C,E,ee,O,oe,S,w,0,M,q):me===z?Bu(C,E,ee,O,oe,l,S,w,M,q,"elliptical",ne):X==="square"?XF(C,E,ee,O,oe,S,w,0,M,q):Bu(C,E,ee,O,oe,l,S,w,M,q,X)}++R}let L=We.getMesh(C),F=we.expand(we(),t.boundary.sphere,1*o.sizeFactor);return L.setBoundingSphere(F),L}var K7={...bo,...WUe};function XUe(e){return Vo({defaultProps:h.getDefaultValues(K7),createGeometry:Dbt,createLocationIterator:t=>vd.fromGroup(t,{asSecondary:!0}),getLoci:jp,eachLocation:Wp,setUpdateState:(t,r,n,o,i,a,A)=>{t.createGeometry=r.sizeFactor!==n.sizeFactor||r.tubularHelices!==n.tubularHelices||r.roundCap!==n.roundCap||r.detail!==n.detail||r.linearSegments!==n.linearSegments||r.radialSegments!==n.radialSegments||r.aspectRatio!==n.aspectRatio||r.arrowFactor!==n.arrowFactor||r.helixProfile!==n.helixProfile||r.nucleicProfile!==n.nucleicProfile;let s=dc.get(a.structure).version;t.info.secondaryStructureHash!==s&&(t.info.secondaryStructureHash!==void 0&&(t.createGeometry=!0),t.info.secondaryStructureHash=s)},initUpdateState:(t,r,n,o)=>{let i=dc.get(o.structure).version;t.info.secondaryStructureHash=i}},e)}var ZUe={"polymer-trace":(e,t)=>fo("Polymer trace mesh",e,t,XUe),"polymer-gap":(e,t)=>fo("Polymer gap cylinder",e,t,jF),"nucleotide-block":(e,t)=>fo("Nucleotide block mesh",e,t,EUe),"nucleotide-ring":(e,t)=>fo("Nucleotide ring mesh",e,t,FUe),"nucleotide-atomic-ring-fill":(e,t)=>fo("Nucleotide atomic ring fill",e,t,PUe),"nucleotide-atomic-bond":(e,t)=>fo("Nucleotide atomic bond",e,t,GUe),"nucleotide-atomic-element":(e,t)=>fo("Nucleotide atomic element",e,t,NUe),"direction-wedge":(e,t)=>fo("Polymer direction wedge",e,t,YUe)},qUe={...K7,...Cx,...w7,...R7,...e_,...t_,...P7,...k7,sizeFactor:h.Numeric(.2,{min:0,max:10,step:.01}),visuals:h.MultiSelect(["polymer-trace","polymer-gap","nucleotide-ring","nucleotide-atomic-ring-fill","nucleotide-atomic-bond","nucleotide-atomic-element"],h.objectToOptions(ZUe)),bumpFrequency:h.Numeric(2,{min:0,max:10,step:.1},ot.ShadingCategory),density:h.Numeric(.1,{min:0,max:1,step:.01},ot.ShadingCategory),colorMode:h.Select("default",h.arrayToOptions(["default","interpolate"]),{...ot.ShadingCategory,isHidden:!0})};function vbt(e,t){let r=h.clone(qUe),n=!1,o=!1;return t.units.forEach(i=>{!n&&ge.isAtomic(i)&&i.nucleotideElements.length&&(n=!0),!o&&i.gapElements.length&&(o=!0)}),r.visuals.defaultValue=["polymer-trace"],n&&r.visuals.defaultValue.push("nucleotide-ring"),o&&r.visuals.defaultValue.push("polymer-gap"),r}function Fbt(e,t){return Xt.createMulti("Cartoon",e,t,Vn,ZUe)}var $Ue={name:"cartoon",label:"Cartoon",description:"Displays ribbons, planks, tubes smoothly following the trace atoms of polymers.",factory:Fbt,getParams:vbt,defaultValues:h.getDefaultValues(qUe),defaultColorTheme:{name:"chain-id"},defaultSizeTheme:{name:"uniform"},isApplicable:e=>e.polymerResidueCount>0,ensureCustomProperties:{attach:async(e,t)=>{await dc.attach(e,t,void 0,!0);for(let r of t.models)await zU.attach(e,r,void 0,!0)},detach:e=>{dc.ref(e,!1);for(let t of e.models)zU.ref(t,!1)}}};var eLe=B.add;function wbt(e,t,r,n,o,i){let{child:a}=r,A=a?.unitMap.get(t.id);if(a&&!A)return At.createEmpty(i);let{detail:s,sizeFactor:c}=o,l=i?.hasBoundingSphere()?we.clone(i.boundingSphere):void 0,{elements:u,model:g}=t,m=u.length,p=m*vm(s),d=We.createState(p,p/2,i),f=cm.Provider.get(g);if(!f)return At.createEmpty(i);let I=B(),C=Ht(),y=B(),Q=B(),E=B(),{elementToAnsiotrop:b,data:x}=f,{U:S}=x,w=x._schema.U.space,R=t.conformation,T=W.Location.create(r);T.unit=t;let L=Gg(r,t,o),F=B(),v=0;for(let N=0;N<m;N++){let k=u[N],J=b[k];if(J!==-1&&!(L&&L(u[N]))){T.element=k,R.invariantPosition(k,I),eLe(F,F,I),v+=1,d.currentGroup=N,Fr.toMat3(C,w,S.value(J)),Ht.symmtricFromLower(C,C),Ht.symmetricEigenvalues(y,C),Ht.eigenvector(Q,C,y[1]),Ht.eigenvector(E,C,y[2]);for(let H=0;H<3;++H)y[H]=c*1.5958*Math.sqrt(Math.abs(y[H]));So(y[0],y[1],1e-6)&&So(y[1],y[2],1e-6)?cn(d,I,y[0],s):Mh(d,I,E,Q,y,s)}}let U=We.getMesh(d);if(v===0)return U;let G;return B.scale(F,F,1/v),l&&B.distance(F,l.center)/l.radius<.1?G=l:G=we.expand(we(),(A??t).boundary.sphere,1*c*2),U.setBoundingSphere(G),U}var j7={...bo,sizeFactor:h.Numeric(1,{min:0,max:10,step:.1}),detail:h.Numeric(0,{min:0,max:3,step:1},ot.CustomQualityParamInfo),ignoreHydrogens:h.Boolean(!1),ignoreHydrogensVariant:h.Select("all",h.arrayToOptions(["all","non-polar"])),traceOnly:h.Boolean(!1)};function tLe(e){return Vo({defaultProps:h.getDefaultValues(j7),createGeometry:wbt,createLocationIterator:Wo.fromGroup,getLoci:Dc,eachLocation:Sc,setUpdateState:(t,r,n)=>{t.createGeometry=r.sizeFactor!==n.sizeFactor||r.detail!==n.detail||r.ignoreHydrogens!==n.ignoreHydrogens}},e)}function Rbt(e,t,r,n,o){let{child:i}=t,a=o?.hasBoundingSphere()?we.clone(o.boundingSphere):void 0,{detail:A,sizeFactor:s}=n,{getSerialIndex:c}=t.serialMapping,u=t.elementCount*vm(A),g=We.createState(u,u/2,o),m=B(),p=Ht(),d=B(),f=B(),I=B(),C=B(),y=0;for(let b of t.units){let x=i?.unitMap.get(b.id);if(i&&!x)return At.createEmpty(o);let{elements:S,model:w}=b,R=S.length,T=cm.Provider.get(w);if(!T)return At.createEmpty(o);let L=Gg(t,b,n),{elementToAnsiotrop:F,data:v}=T,{U}=v,G=v._schema.U.space,N=b.conformation,k=W.Location.create(t);k.unit=b;for(let J=0;J<R;J++){let H=S[J],z=F[H];if(z!==-1&&!(L&&L(S[J]))){k.element=H,N.position(H,m),eLe(C,C,m),y+=1,g.currentGroup=c(b,S[J]),Fr.toMat3(p,G,U.value(z)),Ht.symmtricFromLower(p,p),Ht.symmetricEigenvalues(d,p),Ht.eigenvector(f,p,d[1]),Ht.eigenvector(I,p,d[2]);for(let _=0;_<3;++_)d[_]=s*1.5958*Math.sqrt(Math.abs(d[_]));So(d[0],d[1],1e-6)&&So(d[1],d[2],1e-6)?cn(g,m,d[0],A):Mh(g,m,I,f,d,A)}}}let Q=We.getMesh(g);if(y===0)return Q;let E;return B.scale(C,C,1/y),a&&B.distance(C,a.center)/a.radius<1?E=a:E=we.expand(we(),(i??t).boundary.sphere,1*s*2),Q.setBoundingSphere(E),Q}var Ubt={...Us,sizeFactor:h.Numeric(1,{min:0,max:10,step:.1}),detail:h.Numeric(0,{min:0,max:3,step:1},ot.CustomQualityParamInfo),ignoreHydrogens:h.Boolean(!1),ignoreHydrogensVariant:h.Select("all",h.arrayToOptions(["all","non-polar"])),traceOnly:h.Boolean(!1)};function rLe(e){return Oa({defaultProps:h.getDefaultValues(Ubt),createGeometry:Rbt,createLocationIterator:Wo.fromStructure,getLoci:za,eachLocation:Ja,setUpdateState:(t,r,n)=>{t.createGeometry=r.sizeFactor!==n.sizeFactor||r.detail!==n.detail||r.ignoreHydrogens!==n.ignoreHydrogens}},e)}var nLe={"ellipsoid-mesh":(e,t)=>fo("Ellipsoid Mesh",e,t,tLe),"intra-bond":(e,t)=>fo("Intra-unit bond cylinder",e,t,x3),"inter-bond":(e,t)=>Eo("Inter-unit bond cylinder",e,t,D3),"structure-ellipsoid-mesh":(e,t)=>Eo("Structure Ellipsoid Mesh",e,t,rLe),"structure-intra-bond":(e,t)=>Eo("Structure intra-unit bond cylinder",e,t,S3)},oLe={...j7,...yF,...QF,includeParent:h.Boolean(!1),adjustCylinderLength:h.Boolean(!1,{isHidden:!0}),unitKinds:AB(["atomic"]),sizeFactor:h.Numeric(1,{min:.01,max:10,step:.01}),sizeAspectRatio:h.Numeric(.1,{min:.01,max:3,step:.01}),linkCap:h.Boolean(!0),visuals:h.MultiSelect(["ellipsoid-mesh","intra-bond","inter-bond"],h.objectToOptions(nLe)),bumpFrequency:h.Numeric(0,{min:0,max:10,step:.1},ot.ShadingCategory)};function Lbt(e,t){let r=oLe;return Ye.getSize(t)>=Ye.Size.Huge?(r=h.clone(r),r.visuals.defaultValue=["ellipsoid-mesh","intra-bond"]):t.unitSymmetryGroups.length>500&&(r=h.clone(r),r.visuals.defaultValue=["structure-ellipsoid-mesh","structure-intra-bond"]),r}function Tbt(e,t){return Xt.createMulti("Ellipsoid",e,t,Vn,nLe)}var iLe={name:"ellipsoid",label:"Ellipsoid",description:"Displays anisotropic displacement ellipsoids of atomic elements plus bonds as cylinders.",factory:Tbt,getParams:Lbt,defaultValues:h.getDefaultValues(oLe),defaultColorTheme:{name:"element-symbol"},defaultSizeTheme:{name:"uniform"},isApplicable:e=>e.elementCount>0&&e.models.some(t=>cm.Provider.isApplicable(t)),getData:(e,t)=>t.includeParent?e.asParent():e,mustRecreate:(e,t)=>e.includeParent!==t.includeParent};var aLe=`
|
|
precision highp float;
|
|
|
|
attribute vec3 aPosition;
|
|
attribute float aRadius;
|
|
|
|
varying vec3 vPosition;
|
|
varying float vRadiusSqInv;
|
|
|
|
#if defined(dCalcType_groupId)
|
|
attribute float aGroup;
|
|
varying float vGroup;
|
|
#endif
|
|
|
|
uniform vec3 uBboxSize;
|
|
uniform vec3 uBboxMin;
|
|
uniform float uResolution;
|
|
|
|
void main() {
|
|
vRadiusSqInv = 1.0 / (aRadius * aRadius);
|
|
#if defined(dCalcType_groupId)
|
|
vGroup = aGroup;
|
|
#endif
|
|
gl_PointSize = ceil(((aRadius * 3.0) / uResolution) + uResolution);
|
|
vPosition = (aPosition - uBboxMin) / uResolution;
|
|
gl_Position = vec4(((aPosition - uBboxMin) / uBboxSize) * 2.0 - 1.0, 1.0);
|
|
}
|
|
`;var ALe=`
|
|
precision highp float;
|
|
|
|
varying vec3 vPosition;
|
|
varying float vRadiusSqInv;
|
|
#if defined(dCalcType_groupId)
|
|
#if defined(dGridTexType_2d)
|
|
precision highp sampler2D;
|
|
uniform sampler2D tMinDistanceTex;
|
|
uniform vec3 uGridTexDim;
|
|
#elif defined(dGridTexType_3d)
|
|
precision highp sampler3D;
|
|
uniform sampler3D tMinDistanceTex;
|
|
#endif
|
|
varying float vGroup;
|
|
#endif
|
|
|
|
#include common
|
|
|
|
uniform vec3 uGridDim;
|
|
uniform vec2 uGridTexScale;
|
|
uniform float uCurrentSlice;
|
|
uniform float uCurrentX;
|
|
uniform float uCurrentY;
|
|
uniform float uAlpha;
|
|
uniform float uResolution;
|
|
uniform float uRadiusFactorInv;
|
|
|
|
void main() {
|
|
vec2 v = gl_FragCoord.xy - vec2(uCurrentX, uCurrentY) - 0.5;
|
|
vec3 fragPos = vec3(v.x, v.y, uCurrentSlice);
|
|
float dist = distance(fragPos, vPosition) * uResolution;
|
|
|
|
#if defined(dCalcType_density)
|
|
float density = exp(-uAlpha * ((dist * dist) * vRadiusSqInv));
|
|
gl_FragColor.a = density * uRadiusFactorInv;
|
|
#elif defined(dCalcType_minDistance)
|
|
gl_FragColor.a = 1.0 - dist * uRadiusFactorInv;
|
|
#elif defined(dCalcType_groupId)
|
|
#if defined(dGridTexType_2d)
|
|
float minDistance = 1.0 - texture2D(tMinDistanceTex, (gl_FragCoord.xy) / (uGridTexDim.xy / uGridTexScale)).a;
|
|
#elif defined(dGridTexType_3d)
|
|
float minDistance = 1.0 - texelFetch(tMinDistanceTex, ivec3(gl_FragCoord.xy, uCurrentSlice), 0).a;
|
|
#endif
|
|
if (dist * uRadiusFactorInv > minDistance + uResolution * 0.05)
|
|
discard;
|
|
gl_FragColor.rgb = packIntToRGB(vGroup);
|
|
#endif
|
|
}
|
|
`;var Pbt={drawCount:go("number"),instanceCount:go("number"),aRadius:Bo("float32",1,0),aPosition:Bo("float32",3,0),aGroup:Bo("float32",1,0),uCurrentSlice:Re("f"),uCurrentX:Re("f"),uCurrentY:Re("f"),uBboxMin:Re("v3","material"),uBboxSize:Re("v3","material"),uGridDim:Re("v3","material"),uGridTexDim:Re("v3","material"),uGridTexScale:Re("v2","material"),uAlpha:Re("f","material"),uResolution:Re("f","material"),uRadiusFactorInv:Re("f","material"),tMinDistanceTex:Ft("texture","rgba","float","nearest","material"),dGridTexType:bt("string",["2d","3d"]),dCalcType:bt("string",["density","minDistance","groupId"])},BC="gaussian-density";function sLe(e){return e.namedFramebuffers[BC]||(e.namedFramebuffers[BC]=e.resources.framebuffer()),e.namedFramebuffers[BC]}function cLe(e,t,r,n,o,i){let a=`${BC}-${e}`;return t.namedTextures[a]||(t.namedTextures[a]=t.resources.texture(r,n,o,i)),t.namedTextures[a]}function W7(e,t,r,n,o,i){return e.isWebGL2?Gbt(e,t,r,n,o,i):a_(e,t,r,n,!1,o,i)}function a_(e,t,r,n,o,i,a){at&&e.timer.mark("GaussianDensityTexture2d");let A=Mbt(e,t,r,n,o,i,a);return at&&e.timer.markEnd("GaussianDensityTexture2d"),lLe(A)}function Gbt(e,t,r,n,o,i){at&&e.timer.mark("GaussianDensityTexture3d");let a=kbt(e,t,r,n,o,i);return at&&e.timer.markEnd("GaussianDensityTexture3d"),lLe(a)}function lLe({texture:e,scale:t,bbox:r,gridDim:n,gridTexDim:o,gridDataDim:i,gridTexScale:a,radiusFactor:A,resolution:s,maxRadius:c}){return{transform:Nbt(t,r),texture:e,bbox:r,gridDim:n,gridTexDim:o,gridDataDim:i,gridTexScale:a,radiusFactor:A,resolution:s,maxRadius:c}}function Nbt(e,t){let r=Y.identity();return Y.fromScaling(r,e),Y.setTranslation(r,t.min),r}function Mbt(e,t,r,n,o,i,a){let{gl:A,resources:s,state:c,extensions:{colorBufferFloat:l,textureFloat:u,colorBufferHalfFloat:g,textureHalfFloat:m,blendMinMax:p}}=e,{smoothness:d,resolution:f}=i,{drawCount:I,positions:C,radii:y,groups:Q,scale:E,expandedBox:b,dim:x,maxRadius:S}=uLe(t,r,n,i),[w,R,T]=x,{texDimX:L,texDimY:F,texCols:v,powerOfTwoSize:U}=Vbt(x),G=B.create(L,F,0),N=Le.create(L/U,F/U),k=S*2,J=o?U:L,H=o?U:F,z=cLe("min-dist-2d",e,"image-uint8","rgba","ubyte","nearest");z.define(J,H);let _=gLe(e,I,C,y,Q,z,b,x,G,N,d,f,k),{uCurrentSlice:M,uCurrentX:q,uCurrentY:ne}=_.values,oe=sLe(e);oe.bind(),mLe(e),a||(a=g&&m?s.texture("image-float16","rgba","fp16","linear"):l&&u?s.texture("image-float32","rgba","float","linear"):s.texture("image-uint8","rgba","ubyte","linear")),a.define(J,H);function ae(me,Se){c.currentRenderItemId=-1,me.attachFramebuffer(oe,0),Se&&(c.viewport(0,0,J,H),c.scissor(0,0,J,H),A.clear(A.COLOR_BUFFER_BIT)),D.update(ne,0);let ee=0,O=0,X=0;for(let Ce=0;Ce<T;++Ce)ee>=v&&(ee-=v,O+=R,X=0,D.update(ne,O)),D.update(q,X),D.update(M,Ce),c.viewport(X,O,w,R),c.scissor(X,O,w,R),_.render(),++ee,X+=w;A.flush()}return pLe(e,_),ae(a,!0),p&&(dLe(e,_),ae(z,!0),fLe(e,_),ae(a,!1)),{texture:a,scale:E,bbox:b,gridDim:x,gridTexDim:G,gridDataDim:x,gridTexScale:N,radiusFactor:k,resolution:f,maxRadius:S}}function kbt(e,t,r,n,o,i){let{gl:a,resources:A,state:s,extensions:{colorBufferFloat:c,textureFloat:l,colorBufferHalfFloat:u,textureHalfFloat:g}}=e,{smoothness:m,resolution:p}=o,{drawCount:d,positions:f,radii:I,groups:C,scale:y,expandedBox:Q,dim:E,maxRadius:b}=uLe(t,r,n,o),[x,S,w]=E,R=cLe("min-dist-3d",e,"volume-uint8","rgba","ubyte","nearest");R.define(x,S,w);let T=Le.create(1,1),L=b*2,F=gLe(e,d,f,I,C,R,Q,E,E,T,m,p,L),{uCurrentSlice:v}=F.values,U=sLe(e);U.bind(),mLe(e),s.viewport(0,0,x,S),s.scissor(0,0,x,S),i||(i=u&&g?A.texture("volume-float16","rgba","fp16","linear"):c&&l?A.texture("volume-float32","rgba","float","linear"):A.texture("volume-uint8","rgba","ubyte","linear")),i.define(x,S,w);function G(N,k){s.currentRenderItemId=-1;for(let J=0;J<w;++J)D.update(v,J),N.attachFramebuffer(U,0,J),k&&a.clear(a.COLOR_BUFFER_BIT),F.render();a.flush()}return pLe(e,F),G(i,!0),dLe(e,F),G(R,!0),fLe(e,F),G(i,!1),{texture:i,scale:y,bbox:Q,gridDim:E,gridTexDim:E,gridDataDim:E,gridTexScale:T,radiusFactor:L,resolution:p,maxRadius:b}}function uLe(e,t,r,n){let{resolution:o,radiusOffset:i}=n,a=1/o,{indices:A,x:s,y:c,z:l,id:u}=e,g=Ee.size(A),m=new Float32Array(g*3),p=new Float32Array(g),d=new Float32Array(g),f=0;for(let b=0;b<g;++b){let x=Ee.getAt(A,b);m[b*3]=s[x],m[b*3+1]=c[x],m[b*3+2]=l[x];let S=r(x)+i;f<S&&(f=S),p[b]=S,d[b]=u?u[b]:b}let I=f*2+o*4,C=Ct.expand(Ct(),t,B.create(I,I,I)),y=Ct.scale(Ct(),C,a),Q=Ct.size(B(),y);B.ceil(Q,Q);let E=B.create(o,o,o);return{drawCount:g,positions:m,radii:p,groups:d,scale:E,expandedBox:C,dim:Q,maxRadius:f}}function gLe(e,t,r,n,o,i,a,A,s,c,l,u,g){if(e.namedComputeRenderables[BC]){let m=B.sub(B(),a.max,a.min),p=e.namedComputeRenderables[BC].values;D.updateIfChanged(p.drawCount,t),D.updateIfChanged(p.instanceCount,1),D.update(p.aRadius,n),D.update(p.aPosition,r),D.update(p.aGroup,o),D.updateIfChanged(p.uCurrentSlice,0),D.updateIfChanged(p.uCurrentX,0),D.updateIfChanged(p.uCurrentY,0),D.update(p.uBboxMin,a.min),D.update(p.uBboxSize,m),D.update(p.uGridDim,A),D.update(p.uGridTexDim,s),D.update(p.uGridTexScale,c),D.updateIfChanged(p.uAlpha,l),D.updateIfChanged(p.uResolution,u),D.updateIfChanged(p.uRadiusFactorInv,1/g),D.update(p.tMinDistanceTex,i),D.updateIfChanged(p.dGridTexType,i.getDepth()>0?"3d":"2d"),D.updateIfChanged(p.dCalcType,"density"),e.namedComputeRenderables[BC].update()}else e.namedComputeRenderables[BC]=Hbt(e,t,r,n,o,i,a,A,s,c,l,u,g);return e.namedComputeRenderables[BC]}function Hbt(e,t,r,n,o,i,a,A,s,c,l,u,g){let m=B.sub(B(),a.max,a.min),p={drawCount:D.create(t),instanceCount:D.create(1),aRadius:D.create(n),aPosition:D.create(r),aGroup:D.create(o),uCurrentSlice:D.create(0),uCurrentX:D.create(0),uCurrentY:D.create(0),uBboxMin:D.create(a.min),uBboxSize:D.create(m),uGridDim:D.create(A),uGridTexDim:D.create(s),uGridTexScale:D.create(c),uAlpha:D.create(l),uResolution:D.create(u),uRadiusFactorInv:D.create(1/g),tMinDistanceTex:D.create(i),dGridTexType:D.create(i.getDepth()>0?"3d":"2d"),dCalcType:D.create("density")},d={...Pbt},f=Cn(BC,aLe,ALe),I=Un(e,"points",f,d,p);return Ln(I,p)}function mLe(e){let{gl:t,state:r}=e;r.disable(t.CULL_FACE),r.enable(t.BLEND),r.disable(t.DEPTH_TEST),r.enable(t.SCISSOR_TEST),r.depthMask(!1),r.clearColor(0,0,0,0)}function dLe(e,t){let{gl:r,state:n}=e;if(D.update(t.values.dCalcType,"minDistance"),t.update(),n.colorMask(!1,!1,!1,!0),n.blendFunc(r.ONE,r.ONE),!e.extensions.blendMinMax)throw new Error("GPU gaussian surface calculation requires EXT_blend_minmax");n.blendEquation(e.extensions.blendMinMax.MAX)}function pLe(e,t){let{gl:r,state:n}=e;D.update(t.values.dCalcType,"density"),t.update(),n.colorMask(!1,!1,!1,!0),n.blendFunc(r.ONE,r.ONE),n.blendEquation(r.FUNC_ADD)}function fLe(e,t){let{gl:r,state:n}=e;D.update(t.values.dCalcType,"groupId"),t.update(),n.colorMask(!0,!0,!0,!1),n.blendFunc(r.ONE,r.ZERO),n.blendEquation(r.FUNC_ADD)}function Vbt(e){let t=e[0]*e[1]*e[2],r=Math.sqrt(t),n=Math.pow(2,Math.ceil(Math.log(r)/Math.log(2))),o=0,i=e[1],a=1,A=e[2];return n<e[0]*e[2]?(A=Math.floor(n/e[0]),a=Math.ceil(e[2]/A),o=A*e[0],i*=a):o=e[0]*e[2],{texDimX:o,texDimY:i,texRows:a,texCols:A,powerOfTwoSize:i<n?n:n*2}}async function X7(e,t,r,n,o){let{resolution:i,radiusOffset:a,smoothness:A}=o,s=1/i,{indices:c,x:l,y:u,z:g,id:m}=t,p=Ee.size(c),d=new Float32Array(p),f=0;for(let oe=0;oe<p;++oe){let ae=n(Ee.getAt(c,oe))+a;f<ae&&(f=ae),d[oe]=ae}let I=f*2+i,C=Ct.expand(Ct(),r,B.create(I,I,I)),y=C.min,Q=Ct.scale(Ct(),C,s),E=Ct.size(B(),Q);B.ceil(E,E);let b=Fr.Space(E,[0,1,2],Float32Array),x=b.create(),S=Fr.create(b,x),w=b.create();w.fill(-1);let R=Fr.create(b,w),[T,L,F]=E,v=F,U=L,G=v*U,N=$d(E[0],y[0],i),k=$d(E[1],y[1],i),J=$d(E[2],y[2],i),H=b.create(),z=A,_=Math.ceil(1e5/(Math.pow(Math.pow(f,3),3)*s));function M(oe,ae){for(let me=oe;me<ae;++me){let Se=Ee.getAt(c,me),ee=l[Se],O=u[Se],X=g[Se],Ce=d[me],$=1/(Ce*Ce),pe=Ce*2,ye=pe*pe,Be=Math.ceil(pe*s),De=Math.floor(s*(ee-y[0])),Te=Math.floor(s*(O-y[1])),be=Math.floor(s*(X-y[2])),Fe=Math.max(0,De-Be),Ae=Math.max(0,Te-Be),fe=Math.max(0,be-Be),Qe=Math.min(T,De+Be+2),Ie=Math.min(L,Te+Be+2),le=Math.min(F,be+Be+2);for(let Oe=Fe;Oe<Qe;++Oe){let tt=N[Oe]-ee,it=Oe*G;for(let Rt=Ae;Rt<Ie;++Rt){let Mt=k[Rt]-O,Bt=tt*tt+Mt*Mt,Zt=Rt*v+it;for(let Nr=fe;Nr<le;++Nr){let un=J[Nr]-X,xn=Bt+un*un;if(xn<=ye){let On=mFe(-z*(xn*$)),Zo=Nr+Zt;x[Zo]+=On,On>H[Zo]&&(H[Zo]=On,w[Zo]=m?m[me]:me)}}}}}}async function q(){for(let oe=0;oe<p;oe+=_)M(oe,Math.min(oe+_,p)),e.shouldUpdate&&await e.update({message:"filling density grid",current:oe,max:p})}await q();let ne=Y.identity();return Y.fromScaling(ne,B.create(i,i,i)),Y.setTranslation(ne,C.min),{field:S,idField:R,transform:ne,radiusFactor:1,resolution:i,maxRadius:f}}var hE={resolution:h.Numeric(1,{min:.1,max:20,step:.1},{description:"Grid resolution/cell spacing.",...ot.CustomQualityParamInfo}),radiusOffset:h.Numeric(0,{min:0,max:10,step:.1},{description:"Extra/offset radius added to the atoms/coarse elements for gaussian calculation. Useful to create coarse, low resolution surfaces."}),smoothness:h.Numeric(1.5,{min:1,max:3,step:.1},{description:"Smoothness of the gausian surface, lower is smoother."}),floodfill:h.Select("off",h.arrayToOptions(["off","inside","outside"]),{description:"If and how to floodfill the gaussian surface. Note that this disables GPU support."}),...$0},xNn=h.getDefaultValues(hE);function BLe(e,t){let r=e.maxTextureSize/3;return r*r/Math.max(1,t?t.units.length/16:1)}function A_(e,t,r,n){let{position:o,boundary:i,radius:a}=jv(e,t,r,n),A=Np(i.box,n);return ve.create("Gaussian Density",async s=>await X7(s,o,i.box,a,A))}function ILe(e,t,r,n,o,i){let{position:a,boundary:A,radius:s}=jv(e,t,r,n),c=Np(A.box,n,BLe(o,e));return W7(o,a,A.box,s,c,i)}function CLe(e,t,r,n,o,i,a){let{position:A,boundary:s,radius:c}=jv(e,t,r,o),l=Np(s.box,o,BLe(i,e));return a_(i,A,s.box,c,n,l,a)}function s_(e,t,r){let{position:n,boundary:o,radius:i}=Wv(e,t,r),a=Np(o.box,r);return ve.create("Gaussian Density",async A=>await X7(A,n,o.box,i,a))}function hLe(e,t,r,n,o){let{position:i,boundary:a,radius:A}=Wv(e,t,r),s=Np(a.box,r);return W7(n,i,a.box,A,s,o)}function yLe(e,t,r,n,o,i){let{box:a}=e.lookup3d.boundary,{position:A,boundary:s,radius:c}=Wv(e,t,n),l=Np(s.box,n);return a_(o,A,a,c,r,l,i)}function yE(e,t,r){return{i:e,j:t,k:r}}function uf(e,t){return{a:e,b:t}}var $A=[yE(0,0,0),yE(1,0,0),yE(1,1,0),yE(0,1,0),yE(0,0,1),yE(1,0,1),yE(1,1,1),yE(0,1,1)],QLe=[uf($A[0],$A[1]),uf($A[1],$A[2]),uf($A[2],$A[3]),uf($A[3],$A[0]),uf($A[4],$A[5]),uf($A[5],$A[6]),uf($A[6],$A[7]),uf($A[7],$A[4]),uf($A[0],$A[4]),uf($A[1],$A[5]),uf($A[2],$A[6]),uf($A[3],$A[7])],ELe=[{i:0,j:0,k:0,e:0},{i:1,j:0,k:0,e:1},{i:0,j:1,k:0,e:0},{i:0,j:0,k:0,e:1},{i:0,j:0,k:1,e:0},{i:1,j:0,k:1,e:1},{i:0,j:1,k:1,e:0},{i:0,j:0,k:1,e:1},{i:0,j:0,k:0,e:2},{i:1,j:0,k:0,e:2},{i:1,j:1,k:0,e:2},{i:0,j:1,k:0,e:2}],bLe=[0,265,515,778,1030,1295,1541,1804,2060,2309,2575,2822,3082,3331,3593,3840,400,153,915,666,1430,1183,1941,1692,2460,2197,2975,2710,3482,3219,3993,3728,560,825,51,314,1590,1855,1077,1340,2620,2869,2111,2358,3642,3891,3129,3376,928,681,419,170,1958,1711,1445,1196,2988,2725,2479,2214,4010,3747,3497,3232,1120,1385,1635,1898,102,367,613,876,3180,3429,3695,3942,2154,2403,2665,2912,1520,1273,2035,1786,502,255,1013,764,3580,3317,4095,3830,2554,2291,3065,2800,1616,1881,1107,1370,598,863,85,348,3676,3925,3167,3414,2650,2899,2137,2384,1984,1737,1475,1226,966,719,453,204,4044,3781,3535,3270,3018,2755,2505,2240,2240,2505,2755,3018,3270,3535,3781,4044,204,453,719,966,1226,1475,1737,1984,2384,2137,2899,2650,3414,3167,3925,3676,348,85,863,598,1370,1107,1881,1616,2800,3065,2291,2554,3830,4095,3317,3580,764,1013,255,502,1786,2035,1273,1520,2912,2665,2403,2154,3942,3695,3429,3180,876,613,367,102,1898,1635,1385,1120,3232,3497,3747,4010,2214,2479,2725,2988,1196,1445,1711,1958,170,419,681,928,3376,3129,3891,3642,2358,2111,2869,2620,1340,1077,1855,1590,314,51,825,560,3728,3993,3219,3482,2710,2975,2197,2460,1692,1941,1183,1430,666,915,153,400,3840,3593,3331,3082,2822,2575,2309,2060,1804,1541,1295,1030,778,515,265,0],QE=[[],[0,8,3],[0,1,9],[1,8,3,9,8,1],[1,2,10],[0,8,3,1,2,10],[9,2,10,0,2,9],[2,8,3,2,10,8,10,9,8],[3,11,2],[0,11,2,8,11,0],[1,9,0,2,3,11],[1,11,2,1,9,11,9,8,11],[3,10,1,11,10,3],[0,10,1,0,8,10,8,11,10],[3,9,0,3,11,9,11,10,9],[9,8,10,10,8,11],[4,7,8],[4,3,0,7,3,4],[0,1,9,8,4,7],[4,1,9,4,7,1,7,3,1],[1,2,10,8,4,7],[3,4,7,3,0,4,1,2,10],[9,2,10,9,0,2,8,4,7],[2,10,9,2,9,7,2,7,3,7,9,4],[8,4,7,3,11,2],[11,4,7,11,2,4,2,0,4],[9,0,1,8,4,7,2,3,11],[4,7,11,9,4,11,9,11,2,9,2,1],[3,10,1,3,11,10,7,8,4],[1,11,10,1,4,11,1,0,4,7,11,4],[4,7,8,9,0,11,9,11,10,11,0,3],[4,7,11,4,11,9,9,11,10],[9,5,4],[9,5,4,0,8,3],[0,5,4,1,5,0],[8,5,4,8,3,5,3,1,5],[1,2,10,9,5,4],[3,0,8,1,2,10,4,9,5],[5,2,10,5,4,2,4,0,2],[2,10,5,3,2,5,3,5,4,3,4,8],[9,5,4,2,3,11],[0,11,2,0,8,11,4,9,5],[0,5,4,0,1,5,2,3,11],[2,1,5,2,5,8,2,8,11,4,8,5],[10,3,11,10,1,3,9,5,4],[4,9,5,0,8,1,8,10,1,8,11,10],[5,4,0,5,0,11,5,11,10,11,0,3],[5,4,8,5,8,10,10,8,11],[9,7,8,5,7,9],[9,3,0,9,5,3,5,7,3],[0,7,8,0,1,7,1,5,7],[1,5,3,3,5,7],[9,7,8,9,5,7,10,1,2],[10,1,2,9,5,0,5,3,0,5,7,3],[8,0,2,8,2,5,8,5,7,10,5,2],[2,10,5,2,5,3,3,5,7],[7,9,5,7,8,9,3,11,2],[9,5,7,9,7,2,9,2,0,2,7,11],[2,3,11,0,1,8,1,7,8,1,5,7],[11,2,1,11,1,7,7,1,5],[9,5,8,8,5,7,10,1,3,10,3,11],[5,7,0,5,0,9,7,11,0,1,0,10,11,10,0],[11,10,0,11,0,3,10,5,0,8,0,7,5,7,0],[11,10,5,7,11,5],[10,6,5],[0,8,3,5,10,6],[9,0,1,5,10,6],[1,8,3,1,9,8,5,10,6],[1,6,5,2,6,1],[1,6,5,1,2,6,3,0,8],[9,6,5,9,0,6,0,2,6],[5,9,8,5,8,2,5,2,6,3,2,8],[2,3,11,10,6,5],[11,0,8,11,2,0,10,6,5],[0,1,9,2,3,11,5,10,6],[5,10,6,1,9,2,9,11,2,9,8,11],[6,3,11,6,5,3,5,1,3],[0,8,11,0,11,5,0,5,1,5,11,6],[3,11,6,0,3,6,0,6,5,0,5,9],[6,5,9,6,9,11,11,9,8],[5,10,6,4,7,8],[4,3,0,4,7,3,6,5,10],[1,9,0,5,10,6,8,4,7],[10,6,5,1,9,7,1,7,3,7,9,4],[6,1,2,6,5,1,4,7,8],[1,2,5,5,2,6,3,0,4,3,4,7],[8,4,7,9,0,5,0,6,5,0,2,6],[7,3,9,7,9,4,3,2,9,5,9,6,2,6,9],[3,11,2,7,8,4,10,6,5],[5,10,6,4,7,2,4,2,0,2,7,11],[0,1,9,4,7,8,2,3,11,5,10,6],[9,2,1,9,11,2,9,4,11,7,11,4,5,10,6],[8,4,7,3,11,5,3,5,1,5,11,6],[5,1,11,5,11,6,1,0,11,7,11,4,0,4,11],[0,5,9,0,6,5,0,3,6,11,6,3,8,4,7],[6,5,9,6,9,11,4,7,9,7,11,9],[10,4,9,6,4,10],[4,10,6,4,9,10,0,8,3],[10,0,1,10,6,0,6,4,0],[8,3,1,8,1,6,8,6,4,6,1,10],[1,4,9,1,2,4,2,6,4],[3,0,8,1,2,9,2,4,9,2,6,4],[0,2,4,4,2,6],[8,3,2,8,2,4,4,2,6],[10,4,9,10,6,4,11,2,3],[0,8,2,2,8,11,4,9,10,4,10,6],[3,11,2,0,1,6,0,6,4,6,1,10],[6,4,1,6,1,10,4,8,1,2,1,11,8,11,1],[9,6,4,9,3,6,9,1,3,11,6,3],[8,11,1,8,1,0,11,6,1,9,1,4,6,4,1],[3,11,6,3,6,0,0,6,4],[6,4,8,11,6,8],[7,10,6,7,8,10,8,9,10],[0,7,3,0,10,7,0,9,10,6,7,10],[10,6,7,1,10,7,1,7,8,1,8,0],[10,6,7,10,7,1,1,7,3],[1,2,6,1,6,8,1,8,9,8,6,7],[2,6,9,2,9,1,6,7,9,0,9,3,7,3,9],[7,8,0,7,0,6,6,0,2],[7,3,2,6,7,2],[2,3,11,10,6,8,10,8,9,8,6,7],[2,0,7,2,7,11,0,9,7,6,7,10,9,10,7],[1,8,0,1,7,8,1,10,7,6,7,10,2,3,11],[11,2,1,11,1,7,10,6,1,6,7,1],[8,9,6,8,6,7,9,1,6,11,6,3,1,3,6],[0,9,1,11,6,7],[7,8,0,7,0,6,3,11,0,11,6,0],[7,11,6],[7,6,11],[3,0,8,11,7,6],[0,1,9,11,7,6],[8,1,9,8,3,1,11,7,6],[10,1,2,6,11,7],[1,2,10,3,0,8,6,11,7],[2,9,0,2,10,9,6,11,7],[6,11,7,2,10,3,10,8,3,10,9,8],[7,2,3,6,2,7],[7,0,8,7,6,0,6,2,0],[2,7,6,2,3,7,0,1,9],[1,6,2,1,8,6,1,9,8,8,7,6],[10,7,6,10,1,7,1,3,7],[10,7,6,1,7,10,1,8,7,1,0,8],[0,3,7,0,7,10,0,10,9,6,10,7],[7,6,10,7,10,8,8,10,9],[6,8,4,11,8,6],[3,6,11,3,0,6,0,4,6],[8,6,11,8,4,6,9,0,1],[9,4,6,9,6,3,9,3,1,11,3,6],[6,8,4,6,11,8,2,10,1],[1,2,10,3,0,11,0,6,11,0,4,6],[4,11,8,4,6,11,0,2,9,2,10,9],[10,9,3,10,3,2,9,4,3,11,3,6,4,6,3],[8,2,3,8,4,2,4,6,2],[0,4,2,4,6,2],[1,9,0,2,3,4,2,4,6,4,3,8],[1,9,4,1,4,2,2,4,6],[8,1,3,8,6,1,8,4,6,6,10,1],[10,1,0,10,0,6,6,0,4],[4,6,3,4,3,8,6,10,3,0,3,9,10,9,3],[10,9,4,6,10,4],[4,9,5,7,6,11],[0,8,3,4,9,5,11,7,6],[5,0,1,5,4,0,7,6,11],[11,7,6,8,3,4,3,5,4,3,1,5],[9,5,4,10,1,2,7,6,11],[6,11,7,1,2,10,0,8,3,4,9,5],[7,6,11,5,4,10,4,2,10,4,0,2],[3,4,8,3,5,4,3,2,5,10,5,2,11,7,6],[7,2,3,7,6,2,5,4,9],[9,5,4,0,8,6,0,6,2,6,8,7],[3,6,2,3,7,6,1,5,0,5,4,0],[6,2,8,6,8,7,2,1,8,4,8,5,1,5,8],[9,5,4,10,1,6,1,7,6,1,3,7],[1,6,10,1,7,6,1,0,7,8,7,0,9,5,4],[4,0,10,4,10,5,0,3,10,6,10,7,3,7,10],[7,6,10,7,10,8,5,4,10,4,8,10],[6,9,5,6,11,9,11,8,9],[3,6,11,0,6,3,0,5,6,0,9,5],[0,11,8,0,5,11,0,1,5,5,6,11],[6,11,3,6,3,5,5,3,1],[1,2,10,9,5,11,9,11,8,11,5,6],[0,11,3,0,6,11,0,9,6,5,6,9,1,2,10],[11,8,5,11,5,6,8,0,5,10,5,2,0,2,5],[6,11,3,6,3,5,2,10,3,10,5,3],[5,8,9,5,2,8,5,6,2,3,8,2],[9,5,6,9,6,0,0,6,2],[1,5,8,1,8,0,5,6,8,3,8,2,6,2,8],[1,5,6,2,1,6],[1,3,6,1,6,10,3,8,6,5,6,9,8,9,6],[10,1,0,10,0,6,9,5,0,5,6,0],[0,3,8,5,6,10],[10,5,6],[11,5,10,7,5,11],[11,5,10,11,7,5,8,3,0],[5,11,7,5,10,11,1,9,0],[10,7,5,10,11,7,9,8,1,8,3,1],[11,1,2,11,7,1,7,5,1],[0,8,3,1,2,7,1,7,5,7,2,11],[9,7,5,9,2,7,9,0,2,2,11,7],[7,5,2,7,2,11,5,9,2,3,2,8,9,8,2],[2,5,10,2,3,5,3,7,5],[8,2,0,8,5,2,8,7,5,10,2,5],[9,0,1,5,10,3,5,3,7,3,10,2],[9,8,2,9,2,1,8,7,2,10,2,5,7,5,2],[1,3,5,3,7,5],[0,8,7,0,7,1,1,7,5],[9,0,3,9,3,5,5,3,7],[9,8,7,5,9,7],[5,8,4,5,10,8,10,11,8],[5,0,4,5,11,0,5,10,11,11,3,0],[0,1,9,8,4,10,8,10,11,10,4,5],[10,11,4,10,4,5,11,3,4,9,4,1,3,1,4],[2,5,1,2,8,5,2,11,8,4,5,8],[0,4,11,0,11,3,4,5,11,2,11,1,5,1,11],[0,2,5,0,5,9,2,11,5,4,5,8,11,8,5],[9,4,5,2,11,3],[2,5,10,3,5,2,3,4,5,3,8,4],[5,10,2,5,2,4,4,2,0],[3,10,2,3,5,10,3,8,5,4,5,8,0,1,9],[5,10,2,5,2,4,1,9,2,9,4,2],[8,4,5,8,5,3,3,5,1],[0,4,5,1,0,5],[8,4,5,8,5,3,9,0,5,0,3,5],[9,4,5],[4,11,7,4,9,11,9,10,11],[0,8,3,4,9,7,9,11,7,9,10,11],[1,10,11,1,11,4,1,4,0,7,4,11],[3,1,4,3,4,8,1,10,4,7,4,11,10,11,4],[4,11,7,9,11,4,9,2,11,9,1,2],[9,7,4,9,11,7,9,1,11,2,11,1,0,8,3],[11,7,4,11,4,2,2,4,0],[11,7,4,11,4,2,8,3,4,3,2,4],[2,9,10,2,7,9,2,3,7,7,4,9],[9,10,7,9,7,4,10,2,7,8,7,0,2,0,7],[3,7,10,3,10,2,7,4,10,1,10,0,4,0,10],[1,10,2,8,7,4],[4,9,1,4,1,7,7,1,3],[4,9,1,4,1,7,0,8,1,8,7,1],[4,0,3,7,4,3],[4,8,7],[9,10,8,10,11,8],[3,0,9,3,9,11,11,9,10],[0,1,10,0,10,8,8,10,11],[3,1,10,11,3,10],[1,2,11,1,11,9,9,11,8],[3,0,9,3,9,11,1,2,9,2,11,9],[0,2,11,8,0,11],[3,2,11],[2,3,8,2,8,10,10,8,9],[9,10,2,0,9,2],[2,3,8,2,8,10,0,1,8,1,10,8],[1,10,2],[1,3,8,9,1,8],[0,9,1],[0,3,8],[]],c_=[[0,4,4,4,2,0,0,0,2,2,0,0],[4,0,4,4,0,8,0,0,0,8,8,0],[4,4,0,4,0,0,8,0,0,0,8,8],[4,4,4,0,0,0,0,1,1,0,0,1],[2,0,0,0,0,8,8,8,2,2,0,0],[0,8,0,0,8,0,8,8,0,8,8,0],[0,0,8,0,8,8,0,8,0,0,8,8],[0,0,0,1,8,8,8,0,1,0,0,1],[2,0,0,1,2,0,0,1,0,2,0,1],[2,8,0,0,2,8,0,0,2,0,8,0],[0,8,8,0,0,8,8,0,0,8,0,8],[0,0,8,1,0,0,8,1,1,0,8,0]];function xLe(e,t){let r=Math.min(65536,e*4),n=qe.create(Float32Array,3,e,t&&t.vertexBuffer.ref.value),o=qe.create(Float32Array,3,e,t&&t.normalBuffer.ref.value),i=qe.create(Float32Array,1,e,t&&t.groupBuffer.ref.value),a=qe.create(Uint32Array,3,r,t&&t.indexBuffer.ref.value),A=0,s=0;return{addVertex:(c,l,u)=>(++A,qe.add3(n,c,l,u)),addNormal:(c,l,u)=>{qe.add3(o,c,l,u)},addGroup:c=>{qe.add(i,c)},addTriangle:(c,l,u,g)=>{let m=c[l],p=c[u],d=c[g];m>=0&&p>=0&&d>=0&&(++s,qe.add3(a,m,p,d))},get:()=>{let c=qe.compact(n,!0),l=qe.compact(o,!0),u=qe.compact(a,!0),g=qe.compact(i,!0);return At.create(c,u,l,g,A,s,t)}}}function SLe(e,t){let r=qe.create(Float32Array,3,e),n=qe.create(Float32Array,1,e),o=qe.create(Float32Array,2,e),i=0;return{addVertex:(a,A,s)=>qe.add3(r,a,A,s),addNormal:()=>Hc,addGroup:a=>{qe.add(n,a)},addTriangle:(a,A,s,c,l)=>{let u=a[A],g=a[s],m=a[c];u>=0&&g>=0&&m>=0&&(c_[A][s]&l&&(++i,qe.add2(o,a[A],a[s])),c_[s][c]&l&&(++i,qe.add2(o,a[s],a[c])),c_[A][c]&l&&(++i,qe.add2(o,a[A],a[c])))},get:()=>{let a=qe.compact(r,!0),A=qe.compact(o,!0),s=qe.compact(n,!0),c=Ii.create(i,i/10,t);for(let l=0;l<i;++l){let u=A[l*2],g=A[l*2+1];c.add(a[u*3],a[u*3+1],a[u*3+2],a[g*3],a[g*3+1],a[g*3+2],s[u])}return c.getLines()}}}function DLe(e){return{...e,bottomLeft:AA(e.bottomLeft,[0,0,0]),topRight:AA(e.topRight,e.scalarField.space.dimensions)}}function vLe(e){return{dX:e.topRight[0]-e.bottomLeft[0],dY:e.topRight[1]-e.bottomLeft[1],dZ:e.topRight[2]-e.bottomLeft[2]}}function gf(e,t){return ve.create("Marching Cubes Mesh",async r=>{let n=DLe(e),{dX:o,dY:i,dZ:a}=vLe(n),A=Math.min(262144,Math.max(o*i*a/32,1024)),s=xLe(A,t);return await new l_(r,s,n).run(),s.get()})}function EE(e,t){return ve.create("Marching Cubes Lines",async r=>{let n=DLe(e),{dX:o,dY:i,dZ:a}=vLe(n),A=Math.min(262144,Math.max(o*i*a/32,1024)),s=SLe(A,t);return await new l_(r,s,n).run(),s.get()})}var l_=class{constructor(t,r,n){this.ctx=t;this.minX=0;this.minY=0;this.minZ=0;this.maxX=0;this.maxY=0;this.maxZ=0;this.state=new Z7(r,n),this.minX=n.bottomLeft[0],this.minY=n.bottomLeft[1],this.minZ=n.bottomLeft[2],this.maxX=n.topRight[0]-1,this.maxY=n.topRight[1]-1,this.maxZ=n.topRight[2]-1,this.size=(this.maxX-this.minX)*(this.maxY-this.minY)*(this.maxZ-this.minZ),this.sliceSize=(this.maxX-this.minX)*(this.maxY-this.minY)}async doSlices(){let t=0;this.edgeFilter=15;for(let r=this.minZ;r<this.maxZ;r++,this.edgeFilter&=-5)this.slice(r),t+=this.sliceSize,this.ctx.shouldUpdate&&await this.ctx.update({message:"Computing surface...",current:t,max:this.size})}slice(t){this.edgeFilter|=2;for(let r=this.minY;r<this.maxY;r++,this.edgeFilter&=-3){this.edgeFilter|=1;for(let n=this.minX;n<this.maxX;n++,this.edgeFilter&=-2)this.state.processCell(n,r,t,this.edgeFilter)}this.state.clearEdgeVertexIndexSlice(t)}async run(){await this.doSlices()}},Z7=class{constructor(t,r){this.builder=t;this.vertList=[0,0,0,0,0,0,0,0,0,0,0,0];this.i=0;this.j=0;this.k=0;let n=r.scalarField.space.dimensions;this.nX=n[0],this.nY=n[1],this.nZ=n[2],this.isoLevel=r.isoLevel,this.scalarFieldGet=r.scalarField.space.get,this.scalarField=r.scalarField.data,r.idField&&(this.idField=r.idField.data,this.idFieldGet=r.idField.space.get),this.verticesOnEdges=new Int32Array(3*this.nX*this.nY*2)}get3dOffsetFromEdgeInfo(t){return this.nX*((this.k+t.k)%2*this.nY+this.j+t.j)+this.i+t.i}clearEdgeVertexIndexSlice(t){let r=t%2===0?0:3*this.nX*this.nY,n=t%2===0?3*this.nX*this.nY:this.verticesOnEdges.length;this.verticesOnEdges.fill(0,r,n)}interpolate(t){let r=ELe[t],n=3*this.get3dOffsetFromEdgeInfo(r)+r.e,o=this.verticesOnEdges[n];if(o>0)return o-1;let i=this.scalarField,a=this.scalarFieldGet,A=QLe[t],s=A.a,c=A.b,l=s.i+this.i,u=s.j+this.j,g=s.k+this.k,m=c.i+this.i,p=c.j+this.j,d=c.k+this.k,f=a(i,l,u,g),I=a(i,m,p,d),C=(this.isoLevel-f)/(f-I);if(this.idField){let F=this.idFieldGet(this.idField,l,u,g),v=this.idFieldGet(this.idField,m,p,d),U=C<.5?F:v;if(U===-1&&(U=C<.5?v:F),U===-2)return-1;this.builder.addGroup(U)}else this.builder.addGroup(0);let y=this.builder.addVertex(l+C*(l-m),u+C*(u-p),g+C*(g-d));this.verticesOnEdges[n]=y+1;let Q=a(i,Math.max(0,l-1),u,g)-a(i,Math.min(this.nX-1,l+1),u,g),E=a(i,l,Math.max(0,u-1),g)-a(i,l,Math.min(this.nY-1,u+1),g),b=a(i,l,u,Math.max(0,g-1))-a(i,l,u,Math.min(this.nZ-1,g+1)),x=a(i,Math.max(0,m-1),p,d)-a(i,Math.min(this.nX-1,m+1),p,d),S=a(i,m,Math.max(0,p-1),d)-a(i,m,Math.min(this.nY-1,p+1),d),w=a(i,m,p,Math.max(0,d-1))-a(i,m,p,Math.min(this.nZ-1,d+1)),R=Q+C*(Q-x),T=E+C*(E-S),L=b+C*(b-w);return this.isoLevel>=0?this.builder.addNormal(R,T,L):this.builder.addNormal(-R,-T,-L),y}get(t,r,n){return this.scalarFieldGet(this.scalarField,t,r,n)}processCell(t,r,n,o){let i=0;if(this.get(t,r,n)<this.isoLevel&&(i|=1),this.get(t+1,r,n)<this.isoLevel&&(i|=2),this.get(t+1,r+1,n)<this.isoLevel&&(i|=4),this.get(t,r+1,n)<this.isoLevel&&(i|=8),this.get(t,r,n+1)<this.isoLevel&&(i|=16),this.get(t+1,r,n+1)<this.isoLevel&&(i|=32),this.get(t+1,r+1,n+1)<this.isoLevel&&(i|=64),this.get(t,r+1,n+1)<this.isoLevel&&(i|=128),i===0||i===255)return;this.i=t,this.j=r,this.k=n;let a=bLe[i];(a&1)>0&&(this.vertList[0]=this.interpolate(0)),(a&2)>0&&(this.vertList[1]=this.interpolate(1)),(a&4)>0&&(this.vertList[2]=this.interpolate(2)),(a&8)>0&&(this.vertList[3]=this.interpolate(3)),(a&16)>0&&(this.vertList[4]=this.interpolate(4)),(a&32)>0&&(this.vertList[5]=this.interpolate(5)),(a&64)>0&&(this.vertList[6]=this.interpolate(6)),(a&128)>0&&(this.vertList[7]=this.interpolate(7)),(a&256)>0&&(this.vertList[8]=this.interpolate(8)),(a&512)>0&&(this.vertList[9]=this.interpolate(9)),(a&1024)>0&&(this.vertList[10]=this.interpolate(10)),(a&2048)>0&&(this.vertList[11]=this.interpolate(11));let A=QE[i];for(let s=0;s<A.length;s+=3){let c=A[s],l=A[s+1],u=A[s+2];this.isoLevel>=0?this.builder.addTriangle(this.vertList,c,l,u,o):this.builder.addTriangle(this.vertList,u,l,c,o)}}};var FLe=`
|
|
precision highp float;
|
|
precision highp int;
|
|
|
|
#if __VERSION__ == 100
|
|
precision highp sampler2D;
|
|
uniform sampler2D tTexture;
|
|
#else
|
|
precision highp isampler2D;
|
|
uniform isampler2D tTexture;
|
|
#endif
|
|
|
|
void main(void) {
|
|
#if __VERSION__ == 100
|
|
gl_FragColor = texture2D(tTexture, vec2(0.5));
|
|
#else
|
|
gl_FragColor = ivec4(texture2D(tTexture, vec2(0.5)).r);
|
|
#endif
|
|
}
|
|
`;var _bt={...Wn,tTexture:Ft("texture","rgba","float","nearest")},mf="histopyramid-sum";function Ybt(e,t){if(e.namedComputeRenderables[mf]){let r=e.namedComputeRenderables[mf].values;D.update(r.tTexture,t),e.namedComputeRenderables[mf].update()}else e.namedComputeRenderables[mf]=Obt(e,t);return e.namedComputeRenderables[mf]}function Obt(e,t){let r={...Xn,tTexture:D.create(t)},n={..._bt},o=Cn("sum",mo,FLe,{},{0:"ivec4"}),i=Un(e,"triangles",o,n,r);return Ln(i,r)}function Jbt(e){let{gl:t,state:r}=e;r.disable(t.CULL_FACE),r.disable(t.BLEND),r.disable(t.DEPTH_TEST),r.disable(t.SCISSOR_TEST),r.depthMask(!1),r.colorMask(!0,!0,!0,!0),r.clearColor(0,0,0,0)}var u_=new Uint8Array(4),wLe=new Int32Array(4);function RLe(e,t){at&&e.timer.mark("getHistopyramidSum");let{gl:r,state:n,resources:o}=e,i=Ybt(e,t);e.state.currentRenderItemId=-1,e.namedFramebuffers[mf]||(e.namedFramebuffers[mf]=o.framebuffer());let a=e.namedFramebuffers[mf];return e.namedTextures[mf]||(e.namedTextures[mf]=mr(r)?o.texture("image-int32","rgba","int","nearest"):o.texture("image-uint8","rgba","ubyte","nearest"),e.namedTextures[mf].define(1,1)),e.namedTextures[mf].attachFramebuffer(a,0),Jbt(e),n.viewport(0,0,1,1),i.render(),r.finish(),e.readPixels(0,0,1,1,mr(r)?wLe:u_),r.bindFramebuffer(r.FRAMEBUFFER,null),at&&e.timer.markEnd("getHistopyramidSum"),mr(r)?wLe[0]:mp(u_[0],u_[1],u_[2])}var ULe=`
|
|
precision highp float;
|
|
precision highp int;
|
|
precision highp sampler2D;
|
|
|
|
uniform sampler2D tInputLevel;
|
|
|
|
// previous level used to evaluate the new level
|
|
#if __VERSION__ == 100
|
|
uniform sampler2D tPreviousLevel;
|
|
#else
|
|
precision highp isampler2D;
|
|
uniform isampler2D tPreviousLevel;
|
|
#endif
|
|
|
|
// inverted size of the previous level texture.
|
|
uniform float uSize;
|
|
uniform float uTexSize;
|
|
uniform bool uFirst;
|
|
|
|
#include common
|
|
|
|
void main(void) {
|
|
float k = 0.5 * uSize;
|
|
vec2 position = floor((gl_FragCoord.xy / uTexSize) / uSize) * uSize;
|
|
|
|
#if __VERSION__ == 100
|
|
float a, b, c, d;
|
|
|
|
if (uFirst) {
|
|
a = texture2D(tInputLevel, position).r * 255.0;
|
|
b = texture2D(tInputLevel, position + vec2(k, 0.0)).r * 255.0;
|
|
c = texture2D(tInputLevel, position + vec2(0.0, k)).r * 255.0;
|
|
d = texture2D(tInputLevel, position + vec2(k, k)).r * 255.0;
|
|
} else {
|
|
a = unpackRGBToInt(texture2D(tPreviousLevel, position).rgb);
|
|
b = unpackRGBToInt(texture2D(tPreviousLevel, position + vec2(k, 0.0)).rgb);
|
|
c = unpackRGBToInt(texture2D(tPreviousLevel, position + vec2(0.0, k)).rgb);
|
|
d = unpackRGBToInt(texture2D(tPreviousLevel, position + vec2(k, k)).rgb);
|
|
}
|
|
gl_FragColor = vec4(packIntToRGB(a + b + c + d), 1.0);
|
|
#else
|
|
int a, b, c, d;
|
|
|
|
if (uFirst) {
|
|
a = int(texture2D(tInputLevel, position).r * 255.0);
|
|
b = int(texture2D(tInputLevel, position + vec2(k, 0.0)).r * 255.0);
|
|
c = int(texture2D(tInputLevel, position + vec2(0.0, k)).r * 255.0);
|
|
d = int(texture2D(tInputLevel, position + vec2(k, k)).r * 255.0);
|
|
} else {
|
|
a = texture2D(tPreviousLevel, position).r;
|
|
b = texture2D(tPreviousLevel, position + vec2(k, 0.0)).r;
|
|
c = texture2D(tPreviousLevel, position + vec2(0.0, k)).r;
|
|
d = texture2D(tPreviousLevel, position + vec2(k, k)).r;
|
|
}
|
|
gl_FragColor = ivec4(a + b + c + d);
|
|
#endif
|
|
}
|
|
`;var zbt={...Wn,tInputLevel:Ft("texture","rgba","float","nearest"),tPreviousLevel:Ft("texture","rgba","float","nearest"),uSize:Re("f"),uTexSize:Re("f"),uFirst:Re("b")},bE="histogram-pyramid";function Kbt(e,t,r){if(e.namedComputeRenderables[bE]){let n=e.namedComputeRenderables[bE].values;D.update(n.tInputLevel,t),D.update(n.tPreviousLevel,r),e.namedComputeRenderables[bE].update()}else e.namedComputeRenderables[bE]=jbt(e,t,r);return e.namedComputeRenderables[bE]}function jbt(e,t,r){let n={...Xn,tInputLevel:D.create(t),tPreviousLevel:D.create(r),uSize:D.create(0),uTexSize:D.create(0),uFirst:D.create(!0)},o={...zbt},i=Cn("reduction",mo,ULe,{},{0:"ivec4"}),a=Un(e,"triangles",i,o,n);return Ln(a,n)}function Wbt(e,t){let r=Math.pow(2,t),n=`level${t}`,o=e.isWebGL2?g_(n,e,"image-int32","alpha","int","nearest"):g_(n,e,"image-uint8","rgba","ubyte","nearest");o.define(r,r);let i=Zbt(n,e);return i||(i=LLe(n,e)),o.attachFramebuffer(i,0),{texture:o,framebuffer:i}}function Xbt(e){let{gl:t,state:r}=e;r.disable(t.CULL_FACE),r.disable(t.BLEND),r.disable(t.DEPTH_TEST),r.enable(t.SCISSOR_TEST),r.depthMask(!1),r.colorMask(!0,!0,!0,!0),r.clearColor(0,0,0,0)}function LLe(e,t){let r=`${bE}-${e}`;return t.namedFramebuffers[r]||(t.namedFramebuffers[r]=t.resources.framebuffer()),t.namedFramebuffers[r]}function g_(e,t,r,n,o,i){let a=`${bE}-${e}`;return t.namedTextures[a]||(t.namedTextures[a]=t.resources.texture(r,n,o,i)),t.namedTextures[a]}function Zbt(e,t){let r=`${bE}-${e}`;return t.namedFramebuffers[r]}function TLe(e,t,r,n){at&&e.timer.mark("createHistogramPyramid");let{gl:o,state:i}=e,a=t.getWidth(),A=t.getHeight();if(a!==A||!Ly(a))throw new Error("inputTexture must be of square power-of-two size");let s=Math.ceil(Math.log(a)/Math.log(2)),c=Math.pow(2,s),l=Math.pow(2,s),u=Math.pow(2,s-1),g=e.isWebGL2?g_("pyramid",e,"image-int32","alpha","int","nearest"):g_("pyramid",e,"image-uint8","rgba","ubyte","nearest");g.define(l,u);let m=LLe("pyramid",e);g.attachFramebuffer(m,0),i.viewport(0,0,l,u),mr(o)?o.clearBufferiv(o.COLOR,0,[0,0,0,0]):o.clear(o.COLOR_BUFFER_BIT);let p=[];for(let y=0;y<s;++y)p.push(Wbt(e,y));let d=Kbt(e,t,p[0].texture);i.currentRenderItemId=-1,Xbt(e);let f=0;for(let y=0;y<s;y++){let Q=s-1-y;p[Q].framebuffer.bind();let b=Math.pow(2,Q);D.update(d.values.uSize,Math.pow(2,y+1)/c),D.update(d.values.uTexSize,b),D.updateIfChanged(d.values.uFirst,y===0),y>0&&(D.update(d.values.tPreviousLevel,p[s-y].texture),d.update()),i.currentRenderItemId=-1,i.viewport(0,0,b,b),i.scissor(0,0,b,b),mr(o)?o.clearBufferiv(o.COLOR,0,[0,0,0,0]):o.clear(o.COLOR_BUFFER_BIT),i.scissor(0,0,n[0],n[1]),d.render(),g.bind(0),o.copyTexSubImage2D(o.TEXTURE_2D,0,f,0,0,0,b,b),g.unbind(0),f+=b}o.finish(),at&&e.timer.markEnd("createHistogramPyramid");let I=Math.max(1,RLe(e,p[0].texture)),C=Math.ceil(I/Math.pow(2,s));return{pyramidTex:g,count:I,height:C,levels:s,scale:r}}var qU;function PLe(){if(qU!==void 0)return qU;qU=Mo(256,1,Uint8Array);let{array:e}=qU;for(let t=0,r=QE.length;t<r;++t)e[t]=QE[t].length/3;return qU}var $U;function GLe(){if($U!==void 0)return $U;$U=Mo(4096,1,Uint8Array);let{array:e}=$U;for(let t=0,r=QE.length;t<r;++t)for(let n=0;n<16;++n)n<QE[t].length?e[t*16+n]=QE[t][n]:e[t*16+n]=255;return $U}var NLe=`
|
|
precision highp float;
|
|
precision highp int;
|
|
precision highp sampler2D;
|
|
|
|
#if __VERSION__ == 100
|
|
uniform sampler2D tActiveVoxelsPyramid;
|
|
#else
|
|
precision highp isampler2D;
|
|
uniform isampler2D tActiveVoxelsPyramid;
|
|
#endif
|
|
|
|
uniform sampler2D tActiveVoxelsBase;
|
|
uniform sampler2D tVolumeData;
|
|
uniform sampler2D tTriIndices;
|
|
|
|
uniform float uIsoValue;
|
|
uniform float uLevels;
|
|
uniform float uSize;
|
|
uniform float uCount;
|
|
uniform bool uInvert;
|
|
|
|
uniform vec3 uGridDim;
|
|
uniform vec3 uGridTexDim;
|
|
uniform vec3 uGridDataDim;
|
|
uniform mat4 uGridTransform;
|
|
uniform mat3 uGridTransformAdjoint;
|
|
|
|
// scale to volume data coord
|
|
uniform vec2 uScale;
|
|
|
|
#include common
|
|
|
|
// cube corners (excluding origin)
|
|
const vec3 c1 = vec3(1., 0., 0.);
|
|
const vec3 c2 = vec3(1., 1., 0.);
|
|
const vec3 c3 = vec3(0., 1., 0.);
|
|
const vec3 c4 = vec3(0., 0., 1.);
|
|
const vec3 c5 = vec3(1., 0., 1.);
|
|
const vec3 c6 = vec3(1., 1., 1.);
|
|
const vec3 c7 = vec3(0., 1., 1.);
|
|
|
|
vec3 index3dFrom2d(vec2 coord) {
|
|
vec2 gridTexPos = coord * uGridTexDim.xy;
|
|
vec2 columnRow = ivec2Div(gridTexPos, uGridDim.xy);
|
|
vec2 posXY = gridTexPos - columnRow * uGridDim.xy;
|
|
float posZ = columnRow.y * intDiv(uGridTexDim.x, uGridDim.x) + columnRow.x;
|
|
return vec3(posXY, posZ);
|
|
}
|
|
|
|
vec4 texture3dFrom2dNearest(sampler2D tex, vec3 pos, vec3 gridDim, vec2 texDim) {
|
|
float zSlice = floor(pos.z * gridDim.z + 0.5); // round to nearest z-slice
|
|
float column = intDiv(intMod(zSlice * gridDim.x, texDim.x), gridDim.x);
|
|
float row = intDiv(zSlice * gridDim.x, texDim.x);
|
|
vec2 coord = (vec2(column * gridDim.x, row * gridDim.y) + (pos.xy * gridDim.xy)) / (texDim / uScale);
|
|
return texture2D(tex, coord + 0.5 / (texDim / uScale));
|
|
}
|
|
|
|
vec4 voxel(vec3 pos) {
|
|
pos = min(max(vec3(0.0), pos), uGridDim - vec3(1.0));
|
|
return texture3dFrom2dNearest(tVolumeData, pos / uGridDim, uGridDim, uGridTexDim.xy);
|
|
}
|
|
|
|
float voxelValuePadded(vec3 pos) {
|
|
pos = min(max(vec3(0.0), pos), uGridDim - vec3(vec2(2.0), 1.0)); // remove xy padding
|
|
vec4 v = texture3dFrom2dNearest(tVolumeData, pos / uGridDim, uGridDim, uGridTexDim.xy);
|
|
#ifdef dValueChannel_red
|
|
return v.r;
|
|
#else
|
|
return v.a;
|
|
#endif
|
|
}
|
|
|
|
int idot2(const in ivec2 a, const in ivec2 b) {
|
|
return a.x * b.x + a.y * b.y;
|
|
}
|
|
|
|
int idot4(const in ivec4 a, const in ivec4 b) {
|
|
return a.x * b.x + a.y * b.y + a.z * b.z + a.w * b.w;
|
|
}
|
|
|
|
#if __VERSION__ == 100
|
|
int pyramidVoxel(vec2 pos) {
|
|
return int(unpackRGBToInt(texture2D(tActiveVoxelsPyramid, pos / (vec2(1.0, 0.5) * uSize)).rgb));
|
|
}
|
|
#else
|
|
int pyramidVoxel(vec2 pos) {
|
|
return texture2D(tActiveVoxelsPyramid, pos / (vec2(1.0, 0.5) * uSize)).r;
|
|
}
|
|
#endif
|
|
|
|
vec4 baseVoxel(vec2 pos) {
|
|
return texture2D(tActiveVoxelsBase, pos / uSize);
|
|
}
|
|
|
|
vec4 getGroup(const in vec3 p) {
|
|
// note that we swap x and z because the texture is flipped around y
|
|
#if defined(dAxisOrder_012)
|
|
float group = p.z + p.y * uGridDataDim.z + p.x * uGridDataDim.z * uGridDataDim.y; // 210
|
|
#elif defined(dAxisOrder_021)
|
|
float group = p.y + p.z * uGridDataDim.y + p.x * uGridDataDim.y * uGridDataDim.z; // 120
|
|
#elif defined(dAxisOrder_102)
|
|
float group = p.z + p.x * uGridDataDim.z + p.y * uGridDataDim.z * uGridDataDim.x; // 201
|
|
#elif defined(dAxisOrder_120)
|
|
float group = p.x + p.z * uGridDataDim.x + p.y * uGridDataDim.x * uGridDataDim.z; // 021
|
|
#elif defined(dAxisOrder_201)
|
|
float group = p.y + p.x * uGridDataDim.y + p.z * uGridDataDim.y * uGridDataDim.x; // 102
|
|
#elif defined(dAxisOrder_210)
|
|
float group = p.x + p.y * uGridDataDim.x + p.z * uGridDataDim.x * uGridDataDim.y; // 012
|
|
#endif
|
|
return vec4(group > 16777215.5 ? vec3(1.0) : packIntToRGB(group), 1.0);
|
|
}
|
|
|
|
void main(void) {
|
|
// get 1D index
|
|
int vI = int(gl_FragCoord.x) + int(gl_FragCoord.y) * int(uSize);
|
|
|
|
// ignore 1D indices outside of the grid
|
|
if(vI >= int(uCount)) discard;
|
|
|
|
ivec2 offset = ivec2(int(uSize) - 2, 0);
|
|
|
|
int start = 0;
|
|
ivec4 starts = ivec4(0);
|
|
ivec4 ends = ivec4(0);
|
|
int diff = 2;
|
|
ivec4 m = ivec4(0);
|
|
ivec2 position = ivec2(0);
|
|
ivec4 vI4 = ivec4(vI);
|
|
|
|
ivec2 relativePosition = ivec2(0);
|
|
int end = 0;
|
|
ivec2 pos1 = ivec2(0);
|
|
ivec2 pos2 = ivec2(0);
|
|
ivec2 pos3 = ivec2(0);
|
|
ivec2 pos4 = ivec2(0);
|
|
ivec3 vI3 = ivec3(vI);
|
|
ivec3 mask = ivec3(0);
|
|
|
|
// traverse the different levels of the pyramid
|
|
for(int i = 1; i < 14; i++) {
|
|
if(float(i) >= uLevels) break;
|
|
|
|
offset.x -= diff;
|
|
diff *= 2;
|
|
relativePosition = position + offset;
|
|
|
|
end = start + pyramidVoxel(vec2(relativePosition));
|
|
pos1 = ivec2(relativePosition);
|
|
starts.x = start;
|
|
ends.x = end;
|
|
pos2 = ivec2(relativePosition + ivec2(1, 0));
|
|
starts.y = ends.x;
|
|
ends.y = ends.x + pyramidVoxel(vec2(pos2));
|
|
pos3 = relativePosition + ivec2(0, 1);
|
|
starts.z = ends.y;
|
|
ends.z = ends.y + pyramidVoxel(vec2(pos3));
|
|
pos4 = relativePosition + ivec2(1, 1);
|
|
starts.w = ends.z;
|
|
mask = ivec3(greaterThanEqual(vI3, starts.rgb)) * ivec3(lessThan(vI3, ends.rgb));
|
|
m = ivec4(mask, 1 - int(any(bvec3(mask))));
|
|
|
|
relativePosition = m.x * pos1 + m.y * pos2 + m.z * pos3 + m.w * pos4;
|
|
start = idot4(m, starts);
|
|
position = 2 * (relativePosition - offset);
|
|
}
|
|
|
|
end = start + int(baseVoxel(vec2(position)).r * 255.0);
|
|
pos1 = position;
|
|
starts.x = start;
|
|
ends.x = end;
|
|
pos2 = position + ivec2(1, 0);
|
|
starts.y = ends.x;
|
|
ends.y = ends.x + int(baseVoxel(vec2(pos2)).r * 255.0);
|
|
pos3 = position + ivec2(0, 1);
|
|
starts.z = ends.y;
|
|
ends.z = ends.y + int(baseVoxel(vec2(pos3)).r * 255.0);
|
|
pos4 = position + ivec2(1, 1);
|
|
starts.w = ends.z;
|
|
mask = ivec3(greaterThanEqual(vI3, starts.rgb)) * ivec3(lessThan(vI3, ends.rgb));
|
|
m = ivec4(mask, 1 - int(any(bvec3(mask))));
|
|
position = m.x * pos1 + m.y * pos2 + m.z * pos3 + m.w * pos4;
|
|
|
|
vec2 coord2d = (vec2(position) / uSize) / uScale;
|
|
vec3 coord3d = floor(index3dFrom2d(coord2d) + 0.5);
|
|
|
|
float edgeIndex = floor(baseVoxel(vec2(position)).a * 255.0 + 0.5);
|
|
|
|
// current vertex for the up to 15 MC cases
|
|
int currentVertex = vI - idot4(m, starts);
|
|
|
|
// ensure winding-order is the same for negative and positive iso-levels
|
|
if (uInvert) {
|
|
int v = imod(currentVertex + 1, 3);
|
|
if (v == 1) currentVertex += 2;
|
|
else if (v == 0) currentVertex -= 2;
|
|
}
|
|
|
|
// get index into triIndices table
|
|
int mcIndex = 16 * int(edgeIndex) + currentVertex;
|
|
vec4 mcData = texture2D(tTriIndices, vec2(imod(mcIndex, 64), mcIndex / 64) / 64.);
|
|
|
|
// bit mask to avoid conditionals (see comment below) for getting MC case corner
|
|
vec4 m0 = vec4(floor(mcData.a * 255.0 + 0.5));
|
|
|
|
// get edge value masks
|
|
vec4 m1 = vec4(equal(m0, vec4(0., 1., 2., 3.)));
|
|
vec4 m2 = vec4(equal(m0, vec4(4., 5., 6., 7.)));
|
|
vec4 m3 = vec4(equal(m0, vec4(8., 9., 10., 11.)));
|
|
|
|
// apply bit masks
|
|
vec3 b0 = coord3d +
|
|
m1.y * c1 +
|
|
m1.z * c2 +
|
|
m1.w * c3 +
|
|
m2.x * c4 +
|
|
m2.y * c5 +
|
|
m2.z * c6 +
|
|
m2.w * c7 +
|
|
m3.y * c1 +
|
|
m3.z * c2 +
|
|
m3.w * c3;
|
|
vec3 b1 = coord3d +
|
|
m1.x * c1 +
|
|
m1.y * c2 +
|
|
m1.z * c3 +
|
|
m2.x * c5 +
|
|
m2.y * c6 +
|
|
m2.z * c7 +
|
|
m2.w * c4 +
|
|
m3.x * c4 +
|
|
m3.y * c5 +
|
|
m3.z * c6 +
|
|
m3.w * c7;
|
|
|
|
// the conditionals that are avoided by above bitmasks
|
|
// vec3 b0 = coord3d;
|
|
// vec3 b1 = coord3d;
|
|
// if (mcIndex == 0.0) {
|
|
// b1 += c1;
|
|
// } else if (mcIndex == 1.0) {
|
|
// b0 += c1; b1 += c2;
|
|
// } else if (mcIndex == 2.0) {
|
|
// b0 += c2; b1 += c3;
|
|
// } else if (mcIndex == 3.0) {
|
|
// b0 += c3;
|
|
// } else if (mcIndex == 4.0) {
|
|
// b0 += c4; b1 += c5;
|
|
// } else if (mcIndex == 5.0) {
|
|
// b0 += c5; b1 += c6;
|
|
// } else if (mcIndex == 6.0) {
|
|
// b0 += c6; b1 += c7;
|
|
// } else if (mcIndex == 7.0) {
|
|
// b0 += c7; b1 += c4;
|
|
// } else if (mcIndex == 8.0) {
|
|
// b1 += c4;
|
|
// } else if (mcIndex == 9.0) {
|
|
// b0 += c1; b1 += c5;
|
|
// } else if (mcIndex == 10.0) {
|
|
// b0 += c2; b1 += c6;
|
|
// } else if (mcIndex == 11.0) {
|
|
// b0 += c3; b1 += c7;
|
|
// }
|
|
// b0 = floor(b0 + 0.5);
|
|
// b1 = floor(b1 + 0.5);
|
|
|
|
vec4 d0 = voxel(b0);
|
|
vec4 d1 = voxel(b1);
|
|
|
|
#ifdef dValueChannel_red
|
|
float v0 = d0.r;
|
|
float v1 = d1.r;
|
|
#else
|
|
float v0 = d0.a;
|
|
float v1 = d1.a;
|
|
#endif
|
|
|
|
float t = (uIsoValue - v0) / (v0 - v1);
|
|
gl_FragData[0].xyz = (uGridTransform * vec4(b0 + t * (b0 - b1), 1.0)).xyz;
|
|
|
|
// group id
|
|
#if __VERSION__ == 100 || defined(dConstantGroup)
|
|
// webgl1 does not support 'flat' interpolation (i.e. no interpolation)
|
|
// ensure a constant group id per triangle as needed
|
|
#ifdef dPackedGroup
|
|
gl_FragData[1] = vec4(voxel(coord3d).rgb, 1.0);
|
|
#else
|
|
gl_FragData[1] = getGroup(coord3d);
|
|
#endif
|
|
#else
|
|
#ifdef dPackedGroup
|
|
gl_FragData[1] = vec4(t < 0.5 ? d0.rgb : d1.rgb, 1.0);
|
|
#else
|
|
gl_FragData[1] = getGroup(t < 0.5 ? b0 : b1);
|
|
#endif
|
|
#endif
|
|
|
|
// normals from gradients
|
|
vec3 n0 = -normalize(vec3(
|
|
voxelValuePadded(b0 - c1) - voxelValuePadded(b0 + c1),
|
|
voxelValuePadded(b0 - c3) - voxelValuePadded(b0 + c3),
|
|
voxelValuePadded(b0 - c4) - voxelValuePadded(b0 + c4)
|
|
));
|
|
vec3 n1 = -normalize(vec3(
|
|
voxelValuePadded(b1 - c1) - voxelValuePadded(b1 + c1),
|
|
voxelValuePadded(b1 - c3) - voxelValuePadded(b1 + c3),
|
|
voxelValuePadded(b1 - c4) - voxelValuePadded(b1 + c4)
|
|
));
|
|
gl_FragData[2].xyz = -vec3(
|
|
n0.x + t * (n0.x - n1.x),
|
|
n0.y + t * (n0.y - n1.y),
|
|
n0.z + t * (n0.z - n1.z)
|
|
);
|
|
|
|
// ensure normal-direction is the same for negative and positive iso-levels
|
|
if (uInvert) {
|
|
gl_FragData[2].xyz *= -1.0;
|
|
}
|
|
|
|
// apply normal matrix
|
|
gl_FragData[2].xyz = uGridTransformAdjoint * gl_FragData[2].xyz;
|
|
}
|
|
`;var MLe=`
|
|
precision highp float;
|
|
precision highp int;
|
|
precision highp sampler2D;
|
|
|
|
uniform sampler2D tTriCount;
|
|
uniform sampler2D tVolumeData;
|
|
|
|
uniform float uIsoValue;
|
|
uniform vec3 uGridDim;
|
|
uniform vec3 uGridTexDim;
|
|
uniform vec2 uScale;
|
|
|
|
#include common
|
|
|
|
// cube corners (excluding origin)
|
|
const vec3 c1 = vec3(1., 0., 0.);
|
|
const vec3 c2 = vec3(1., 1., 0.);
|
|
const vec3 c3 = vec3(0., 1., 0.);
|
|
const vec3 c4 = vec3(0., 0., 1.);
|
|
const vec3 c5 = vec3(1., 0., 1.);
|
|
const vec3 c6 = vec3(1., 1., 1.);
|
|
const vec3 c7 = vec3(0., 1., 1.);
|
|
|
|
vec3 index3dFrom2d(vec2 coord) {
|
|
vec2 gridTexPos = coord * uGridTexDim.xy;
|
|
vec2 columnRow = ivec2Div(gridTexPos, uGridDim.xy);
|
|
vec2 posXY = gridTexPos - columnRow * uGridDim.xy;
|
|
float posZ = columnRow.y * intDiv(uGridTexDim.x, uGridDim.x) + columnRow.x;
|
|
return vec3(posXY, posZ);
|
|
}
|
|
|
|
vec4 texture3dFrom2dNearest(sampler2D tex, vec3 pos, vec3 gridDim, vec2 texDim) {
|
|
float zSlice = floor(pos.z * gridDim.z + 0.5); // round to nearest z-slice
|
|
float column = intDiv(intMod(zSlice * gridDim.x, texDim.x), gridDim.x);
|
|
float row = intDiv(zSlice * gridDim.x, texDim.x);
|
|
vec2 coord = (vec2(column * gridDim.x, row * gridDim.y) + (pos.xy * gridDim.xy)) / (texDim / uScale);
|
|
return texture2D(tex, coord);
|
|
}
|
|
|
|
float voxelValue(vec3 pos) {
|
|
pos = min(max(vec3(0.0), pos), uGridDim - vec3(1.0));
|
|
vec4 v = texture3dFrom2dNearest(tVolumeData, pos / uGridDim, uGridDim, uGridTexDim.xy);
|
|
#ifdef dValueChannel_red
|
|
return v.r;
|
|
#else
|
|
return v.a;
|
|
#endif
|
|
}
|
|
|
|
void main(void) {
|
|
vec2 uv = gl_FragCoord.xy / uGridTexDim.xy;
|
|
vec3 posXYZ = index3dFrom2d(uv);
|
|
|
|
// get MC case as the sum of corners that are below the given iso level
|
|
float c = step(voxelValue(posXYZ), uIsoValue)
|
|
+ 2. * step(voxelValue(posXYZ + c1), uIsoValue)
|
|
+ 4. * step(voxelValue(posXYZ + c2), uIsoValue)
|
|
+ 8. * step(voxelValue(posXYZ + c3), uIsoValue)
|
|
+ 16. * step(voxelValue(posXYZ + c4), uIsoValue)
|
|
+ 32. * step(voxelValue(posXYZ + c5), uIsoValue)
|
|
+ 64. * step(voxelValue(posXYZ + c6), uIsoValue)
|
|
+ 128. * step(voxelValue(posXYZ + c7), uIsoValue);
|
|
c *= step(c, 254.);
|
|
|
|
// handle out of bounds positions
|
|
posXYZ += 1.0;
|
|
posXYZ.xy += 1.0; // pixel padding (usually ok even if the texture has no padding)
|
|
if (posXYZ.x >= uGridDim.x || posXYZ.y >= uGridDim.y || posXYZ.z >= uGridDim.z)
|
|
c = 0.0;
|
|
|
|
// get total triangles to generate for calculated MC case from triCount texture
|
|
float totalTrianglesToGenerate = texture2D(tTriCount, vec2(intMod(c, 16.), floor(c / 16.)) / 16.).a;
|
|
gl_FragColor = vec4(vec3(totalTrianglesToGenerate * 3.0), c / 255.0);
|
|
}
|
|
`;var qbt={...Wn,tTriCount:Ft("image-uint8","alpha","ubyte","nearest"),tVolumeData:Ft("texture","rgba","ubyte","nearest"),dValueChannel:bt("string",["red","alpha"]),uIsoValue:Re("f"),uGridDim:Re("v3"),uGridTexDim:Re("v3"),uScale:Re("v2")},BB="active-voxels";function kLe(e,t){return mr(e.gl)&&t.format===e.gl.RED?"red":"alpha"}function $bt(e,t,r,n,o,i){if(e.namedComputeRenderables[BB]){let a=e.namedComputeRenderables[BB].values;D.update(a.uQuadScale,i),D.update(a.tVolumeData,t),D.update(a.dValueChannel,kLe(e,t)),D.updateIfChanged(a.uIsoValue,o),D.update(a.uGridDim,r),D.update(a.uGridTexDim,n),D.update(a.uScale,i),e.namedComputeRenderables[BB].update()}else e.namedComputeRenderables[BB]=e0t(e,t,r,n,o,i);return e.namedComputeRenderables[BB]}function e0t(e,t,r,n,o,i){let a={...Xn,tTriCount:D.create(PLe()),uQuadScale:D.create(i),tVolumeData:D.create(t),dValueChannel:D.create(kLe(e,t)),uIsoValue:D.create(o),uGridDim:D.create(r),uGridTexDim:D.create(n),uScale:D.create(i)},A={...qbt},s=Cn("active-voxels",mo,MLe),c=Un(e,"triangles",s,A,a);return Ln(c,a)}function t0t(e){let{gl:t,state:r}=e;r.disable(t.CULL_FACE),r.disable(t.BLEND),r.disable(t.DEPTH_TEST),r.enable(t.SCISSOR_TEST),r.depthMask(!1),r.colorMask(!0,!0,!0,!0),r.clearColor(0,0,0,0)}function HLe(e,t,r,n,o,i){at&&e.timer.mark("calcActiveVoxels");let{gl:a,state:A,resources:s}=e,c=t.getWidth(),l=t.getHeight();e.namedFramebuffers[BB]||(e.namedFramebuffers[BB]=s.framebuffer());let u=e.namedFramebuffers[BB];u.bind(),e.namedTextures[BB]||(e.namedTextures[BB]=s.texture("image-uint8","rgba","ubyte","nearest"));let g=e.namedTextures[BB];g.define(c,l);let m=$bt(e,t,r,n,o,i);return e.state.currentRenderItemId=-1,g.attachFramebuffer(u,0),t0t(e),A.viewport(0,0,c,l),A.scissor(0,0,c,l),a.clear(a.COLOR_BUFFER_BIT),A.scissor(0,0,n[0],n[1]),m.render(),a.finish(),at&&e.timer.markEnd("calcActiveVoxels"),g}var r0t={...Wn,tTriIndices:Ft("image-uint8","alpha","ubyte","nearest"),tActiveVoxelsPyramid:Ft("texture","rgba","float","nearest"),tActiveVoxelsBase:Ft("texture","rgba","float","nearest"),tVolumeData:Ft("texture","rgba","ubyte","nearest"),dValueChannel:bt("string",["red","alpha"]),uIsoValue:Re("f"),uSize:Re("f"),uLevels:Re("f"),uCount:Re("f"),uInvert:Re("b"),uGridDim:Re("v3"),uGridTexDim:Re("v3"),uGridDataDim:Re("v3"),uGridTransform:Re("m4"),uGridTransformAdjoint:Re("m3"),uScale:Re("v2"),dPackedGroup:bt("boolean"),dAxisOrder:bt("string",["012","021","102","120","201","210"]),dConstantGroup:bt("boolean")},xE="isosurface";function VLe(e,t){return mr(e.gl)&&t.format===e.gl.RED?"red":"alpha"}function n0t(e,t,r,n,o,i,a,A,s,c,l,u,g,m,p,d){if(e.namedComputeRenderables[xE]){let f=e.namedComputeRenderables[xE].values;D.update(f.tActiveVoxelsPyramid,t),D.update(f.tActiveVoxelsBase,r),D.update(f.tVolumeData,n),D.update(f.dValueChannel,VLe(e,n)),D.updateIfChanged(f.uIsoValue,s),D.updateIfChanged(f.uSize,Math.pow(2,c)),D.updateIfChanged(f.uLevels,c),D.updateIfChanged(f.uCount,u),D.updateIfChanged(f.uInvert,g),D.update(f.uGridDim,o),D.update(f.uGridTexDim,i),D.update(f.uGridDataDim,a),D.update(f.uGridTransform,A),D.update(f.uGridTransformAdjoint,Ht.adjointFromMat4(Ht(),A)),D.update(f.uScale,l),D.updateIfChanged(f.dPackedGroup,m),D.updateIfChanged(f.dAxisOrder,p.join("")),D.updateIfChanged(f.dConstantGroup,d),e.namedComputeRenderables[xE].update()}else e.namedComputeRenderables[xE]=o0t(e,t,r,n,o,i,a,A,s,c,l,u,g,m,p,d);return e.namedComputeRenderables[xE]}function o0t(e,t,r,n,o,i,a,A,s,c,l,u,g,m,p,d){let f={...Xn,tTriIndices:D.create(GLe()),tActiveVoxelsPyramid:D.create(t),tActiveVoxelsBase:D.create(r),tVolumeData:D.create(n),dValueChannel:D.create(VLe(e,n)),uIsoValue:D.create(s),uSize:D.create(Math.pow(2,c)),uLevels:D.create(c),uCount:D.create(u),uInvert:D.create(g),uGridDim:D.create(o),uGridTexDim:D.create(i),uGridDataDim:D.create(a),uGridTransform:D.create(A),uGridTransformAdjoint:D.create(Ht.adjointFromMat4(Ht(),A)),uScale:D.create(l),dPackedGroup:D.create(m),dAxisOrder:D.create(p.join("")),dConstantGroup:D.create(d)},I={...r0t},C=Cn("isosurface",mo,NLe,{drawBuffers:"required"}),y=Un(e,"triangles",C,I,f);return Ln(y,f)}function i0t(e){let{gl:t,state:r}=e;r.disable(t.CULL_FACE),r.disable(t.BLEND),r.disable(t.DEPTH_TEST),r.disable(t.SCISSOR_TEST),r.depthMask(!1),r.colorMask(!0,!0,!0,!0),r.clearColor(0,0,0,0)}function a0t(e,t,r,n,o,i,a,A,s,c,l,u,g,m,p,d){let{drawBuffers:f}=e.extensions;if(!f)throw new Error("need WebGL draw buffers");at&&e.timer.mark("createIsosurfaceBuffers");let{gl:I,state:C,resources:y,extensions:Q}=e,{pyramidTex:E,height:b,levels:x,scale:S,count:w}=n,R=E.getWidth();e.namedFramebuffers[xE]||(e.namedFramebuffers[xE]=y.framebuffer());let T=e.namedFramebuffers[xE];mr(I)?(m||(m=y.texture("image-float32","rgba","float","nearest")),p||(p=y.texture("image-uint8","rgba","ubyte","nearest")),d||(d=Q.colorBufferHalfFloat&&Q.textureHalfFloat?y.texture("image-float16","rgba","fp16","nearest"):y.texture("image-float32","rgba","float","nearest"))):(m||(m=y.texture("image-float32","rgba","float","nearest")),p||(p=y.texture("image-float32","rgba","float","nearest")),d||(d=y.texture("image-float32","rgba","float","nearest"))),m.define(R,b),p.define(R,b),d.define(R,b),m.attachFramebuffer(T,0),p.attachFramebuffer(T,1),d.attachFramebuffer(T,2);let L=n0t(e,E,t,r,o,i,a,A,s,x,S,w,c,l,u,g);return e.state.currentRenderItemId=-1,T.bind(),f.drawBuffers([f.COLOR_ATTACHMENT0,f.COLOR_ATTACHMENT1,f.COLOR_ATTACHMENT2]),i0t(e),C.viewport(0,0,R,b),I.clear(I.COLOR_BUFFER_BIT),L.render(),I.finish(),at&&e.timer.markEnd("createIsosurfaceBuffers"),{vertexTexture:m,groupTexture:p,normalTexture:d,vertexCount:w}}function yx(e,t,r,n,o,i,a,A,s,c,l,u,g,m,p){at&&e.timer.mark("extractIsosurface");let d=HLe(e,t,r,n,A,i),f=TLe(e,d,i,n),I=a0t(e,d,t,f,r,n,o,a,A,s,c,l,u,g,m,p);return at&&e.timer.markEnd("extractIsosurface"),I}var _Le={...hE,...iM,tryUseGpu:h.Boolean(!0)},m_={...bo,...n1e,..._Le},YLe={...Us,...jFe,..._Le};function OLe(e){return e.extensions.colorBufferFloat&&e.extensions.textureFloat&&e.extensions.textureFloatLinear&&e.extensions.blendMinMax&&e.extensions.drawBuffers}function $F(e,t,r){if(t.resolution>1)return!1;let n=r.maxTextureSize/3,{areaCells:o,maxAreaCells:i}=mZ(e.boundary.box,t.resolution,n*n);return o<i}function JLe(e,t,r,n){return!r.includeParent&&r.floodfill==="off"&&r.tryUseGpu&&n&&OLe(n)&&$F(t,r,n)?g0t(e):s0t(e)}function zLe(e,t,r,n){return!r.includeParent&&r.floodfill==="off"&&r.tryUseGpu&&n&&OLe(n)&&$F(t,r,n)?d0t(e):l0t(e)}async function A0t(e,t,r,n,o,i){let{smoothness:a,floodfill:A,includeParent:s,radiusOffset:c}=o,{transform:l,field:u,idField:g,radiusFactor:m,resolution:p,maxRadius:d}=await A_(r,t,n.size,o).runInContext(e.runtime),f=Math.exp(-a)/m,I={isoLevel:f,scalarField:A!=="off"?Fr.createFloodfilled(u,f,A):u,idField:g},C=await gf(I,i).runAsChild(e.runtime);if(C.meta.resolution=p,s){let E=Math.ceil(2/p);At.smoothEdges(C,{iterations:E,maxNewEdgeLength:Math.sqrt(2)})}At.transform(C,l),e.webgl&&!e.webgl.isWebGL2?(At.uniformTriangleGroup(C),D.updateIfChanged(C.varyingGroup,!1)):D.updateIfChanged(C.varyingGroup,!0);let y=c*(1+Math.exp(-a)),Q=we.expand(we(),t.boundary.sphere,d+y);return C.setBoundingSphere(Q),C}function s0t(e){return Vo({defaultProps:h.getDefaultValues(m_),createGeometry:A0t,createLocationIterator:Wo.fromGroup,getLoci:Dc,eachLocation:Sc,setUpdateState:(t,r,n)=>{t.createGeometry=r.resolution!==n.resolution||r.radiusOffset!==n.radiusOffset||r.smoothness!==n.smoothness||r.ignoreHydrogens!==n.ignoreHydrogens||r.ignoreHydrogensVariant!==n.ignoreHydrogensVariant||r.traceOnly!==n.traceOnly||r.includeParent!==n.includeParent||r.floodfill!==n.floodfill,r.smoothColors.name!==n.smoothColors.name?t.updateColor=!0:r.smoothColors.name==="on"&&n.smoothColors.name==="on"&&(r.smoothColors.params.resolutionFactor!==n.smoothColors.params.resolutionFactor&&(t.updateColor=!0),r.smoothColors.params.sampleStride!==n.smoothColors.params.sampleStride&&(t.updateColor=!0))},mustRecreate:(t,r,n)=>r.tryUseGpu&&!!n&&$F(t.structure,r,n),processValues:(t,r,n,o,i)=>{let{resolution:a,colorTexture:A}=r.meta,s=cu(n.smoothColors,o.color.preferSmoothing,a);s&&(hv(t,s,i,A),r.meta.colorTexture=t.tColorGrid.ref.value)},dispose:t=>{t.meta.colorTexture?.destroy()}},e)}async function c0t(e,t,r,n,o){let{smoothness:i,floodfill:a,includeParent:A,radiusOffset:s}=n,{transform:c,field:l,idField:u,radiusFactor:g,resolution:m,maxRadius:p}=await s_(t,r.size,n).runInContext(e.runtime),d=Math.exp(-i)/g,f={isoLevel:d,scalarField:a!=="off"?Fr.createFloodfilled(l,d,a):l,idField:u},I=await gf(f,o).runAsChild(e.runtime);if(I.meta.resolution=m,A){let Q=Math.ceil(2/m);At.smoothEdges(I,{iterations:Q,maxNewEdgeLength:Math.sqrt(2)})}At.transform(I,c),e.webgl&&!e.webgl.isWebGL2?(At.uniformTriangleGroup(I),D.updateIfChanged(I.varyingGroup,!1)):D.updateIfChanged(I.varyingGroup,!0);let C=s*(1+Math.exp(-i)),y=we.expand(we(),t.boundary.sphere,p+C);return I.setBoundingSphere(y),I}function l0t(e){return Oa({defaultProps:h.getDefaultValues(YLe),createGeometry:c0t,createLocationIterator:Wo.fromStructure,getLoci:za,eachLocation:Ja,setUpdateState:(t,r,n)=>{t.createGeometry=r.resolution!==n.resolution||r.radiusOffset!==n.radiusOffset||r.smoothness!==n.smoothness||r.ignoreHydrogens!==n.ignoreHydrogens||r.ignoreHydrogensVariant!==n.ignoreHydrogensVariant||r.traceOnly!==n.traceOnly||r.includeParent!==n.includeParent||r.floodfill!==n.floodfill,r.smoothColors.name!==n.smoothColors.name?t.updateColor=!0:r.smoothColors.name==="on"&&n.smoothColors.name==="on"&&(r.smoothColors.params.resolutionFactor!==n.smoothColors.params.resolutionFactor&&(t.updateColor=!0),r.smoothColors.params.sampleStride!==n.smoothColors.params.sampleStride&&(t.updateColor=!0))},mustRecreate:(t,r,n)=>r.tryUseGpu&&!!n&&$F(t,r,n),processValues:(t,r,n,o,i)=>{let{resolution:a,colorTexture:A}=r.meta,s=cu(n.smoothColors,o.color.preferSmoothing,a);s&&(hv(t,s,i,A),r.meta.colorTexture=t.tColorGrid.ref.value)},dispose:t=>{t.meta.colorTexture?.destroy()}},e)}var qF="gaussian-surface";function u0t(e,t,r,n,o,i){let{webgl:a}=e;if(!a)throw new Error("webgl context required to create gaussian surface texture-mesh");let{namedTextures:A,resources:s,extensions:{colorBufferFloat:c,textureFloat:l,colorBufferHalfFloat:u,textureHalfFloat:g}}=a;A[qF]||(A[qF]=u&&g?s.texture("image-float16","rgba","fp16","linear"):c&&l?s.texture("image-float32","rgba","float","linear"):s.texture("image-uint8","rgba","ubyte","linear"));let m=B.create(0,1,2),p=t.elements.length,d=I=>{at&&a.timer.mark("createGaussianSurfaceTextureMesh");let C=CLe(r,t,n.size,!0,o,a,A[qF]),y=Math.exp(-o.smoothness)/C.radiusFactor,Q=I?.doubleBuffer.get(),E=yx(a,C.texture,C.gridDim,C.gridTexDim,C.gridDataDim,C.gridTexScale,C.transform,y,!1,!0,m,!0,Q?.vertex,Q?.group,Q?.normal);at&&a.timer.markEnd("createGaussianSurfaceTextureMesh");let b=o.radiusOffset*(1+Math.exp(-o.smoothness)),x=we.expand(we(),t.boundary.sphere,C.maxRadius+b),S=Fs.create(E.vertexCount,p,E.vertexTexture,E.groupTexture,E.normalTexture,x,I);return S.meta.resolution=C.resolution,S},f=d(i);return f.meta.webgl=a,f.meta.reset=()=>{d(f)},f}function g0t(e){return o1e({defaultProps:h.getDefaultValues(m_),createGeometry:u0t,createLocationIterator:Wo.fromGroup,getLoci:Dc,eachLocation:Sc,setUpdateState:(t,r,n)=>{t.createGeometry=r.resolution!==n.resolution||r.radiusOffset!==n.radiusOffset||r.smoothness!==n.smoothness||r.ignoreHydrogens!==n.ignoreHydrogens||r.ignoreHydrogensVariant!==n.ignoreHydrogensVariant||r.traceOnly!==n.traceOnly,r.smoothColors.name!==n.smoothColors.name?t.updateColor=!0:r.smoothColors.name==="on"&&n.smoothColors.name==="on"&&(r.smoothColors.params.resolutionFactor!==n.smoothColors.params.resolutionFactor&&(t.updateColor=!0),r.smoothColors.params.sampleStride!==n.smoothColors.params.sampleStride&&(t.updateColor=!0))},mustRecreate:(t,r,n)=>r.includeParent||r.floodfill!=="off"||!r.tryUseGpu||!n||!$F(t.structure,r,n),processValues:(t,r,n,o,i)=>{let{resolution:a,colorTexture:A}=r.meta,s=cu(n.smoothColors,o.color.preferSmoothing,a);s&&i&&(pX(t,s,i,A),r.meta.colorTexture=t.tColorGrid.ref.value)},dispose:t=>{t.vertexTexture.ref.value.destroy(),t.groupTexture.ref.value.destroy(),t.normalTexture.ref.value.destroy(),t.doubleBuffer.destroy(),t.meta.colorTexture?.destroy()}},e)}function m0t(e,t,r,n,o){let{webgl:i}=e;if(!i)throw new Error("webgl context required to create structure gaussian surface texture-mesh");let{namedTextures:a,resources:A,extensions:{colorBufferFloat:s,textureFloat:c,colorBufferHalfFloat:l,textureHalfFloat:u}}=i;a[qF]||(a[qF]=l&&u?A.texture("image-float16","rgba","fp16","linear"):s&&c?A.texture("image-float32","rgba","float","linear"):A.texture("image-uint8","rgba","ubyte","linear"));let g=B.create(0,1,2),m=t.elementCount,p=f=>{at&&i.timer.mark("createStructureGaussianSurfaceTextureMesh");let I=yLe(t,r.size,!0,n,i,a[qF]),C=Math.exp(-n.smoothness)/I.radiusFactor,y=f?.doubleBuffer.get(),Q=yx(i,I.texture,I.gridDim,I.gridTexDim,I.gridDataDim,I.gridTexScale,I.transform,C,!1,!0,g,!0,y?.vertex,y?.group,y?.normal);at&&i.timer.markEnd("createStructureGaussianSurfaceTextureMesh");let E=n.radiusOffset*(1+Math.exp(-n.smoothness)),b=we.expand(we(),t.boundary.sphere,I.maxRadius+E),x=Fs.create(Q.vertexCount,m,Q.vertexTexture,Q.groupTexture,Q.normalTexture,b,f);return x.meta.resolution=I.resolution,x},d=p(o);return d.meta.webgl=i,d.meta.reset=()=>{p(d)},d}function d0t(e){return WFe({defaultProps:h.getDefaultValues(YLe),createGeometry:m0t,createLocationIterator:Wo.fromStructure,getLoci:za,eachLocation:Ja,setUpdateState:(t,r,n)=>{t.createGeometry=r.resolution!==n.resolution||r.radiusOffset!==n.radiusOffset||r.smoothness!==n.smoothness||r.ignoreHydrogens!==n.ignoreHydrogens||r.ignoreHydrogensVariant!==n.ignoreHydrogensVariant||r.traceOnly!==n.traceOnly,r.smoothColors.name!==n.smoothColors.name?t.updateColor=!0:r.smoothColors.name==="on"&&n.smoothColors.name==="on"&&(r.smoothColors.params.resolutionFactor!==n.smoothColors.params.resolutionFactor&&(t.updateColor=!0),r.smoothColors.params.sampleStride!==n.smoothColors.params.sampleStride&&(t.updateColor=!0))},mustRecreate:(t,r,n)=>r.includeParent||r.floodfill!=="off"||!r.tryUseGpu||!n||!$F(t,r,n),processValues:(t,r,n,o,i)=>{let{resolution:a,colorTexture:A}=r.meta,s=cu(n.smoothColors,o.color.preferSmoothing,a);s&&i&&(pX(t,s,i,A),r.meta.colorTexture=t.tColorGrid.ref.value)},dispose:t=>{t.vertexTexture.ref.value.destroy(),t.groupTexture.ref.value.destroy(),t.normalTexture.ref.value.destroy(),t.doubleBuffer.destroy(),t.meta.colorTexture?.destroy()}},e)}var KLe={...hE,sizeFactor:h.Numeric(3,{min:0,max:10,step:.1}),lineSizeAttenuation:h.Boolean(!1)},q7={...WQ,...KLe},p0t={...jI,...KLe};async function f0t(e,t,r,n,o,i){let{smoothness:a}=o,{transform:A,field:s,idField:c,maxRadius:l}=await A_(r,t,n.size,o).runInContext(e.runtime),u={isoLevel:Math.exp(-a),scalarField:s,idField:c},g=await EE(u,i).runAsChild(e.runtime);Zr.transform(g,A);let m=we.expand(we(),t.boundary.sphere,l);return g.setBoundingSphere(m),g}function jLe(e){return XQ({defaultProps:h.getDefaultValues(q7),createGeometry:f0t,createLocationIterator:Wo.fromGroup,getLoci:Dc,eachLocation:Sc,setUpdateState:(t,r,n)=>{t.createGeometry=r.resolution!==n.resolution||r.radiusOffset!==n.radiusOffset||r.smoothness!==n.smoothness||r.ignoreHydrogens!==n.ignoreHydrogens||r.ignoreHydrogensVariant!==n.ignoreHydrogensVariant||r.traceOnly!==n.traceOnly||r.includeParent!==n.includeParent||r.floodfill!==n.floodfill}},e)}async function B0t(e,t,r,n,o){let{smoothness:i}=n,{transform:a,field:A,idField:s,maxRadius:c}=await s_(t,r.size,n).runInContext(e.runtime),l={isoLevel:Math.exp(-i),scalarField:A,idField:s},u=await EE(l,o).runAsChild(e.runtime);Zr.transform(u,a);let g=we.expand(we(),t.boundary.sphere,c);return u.setBoundingSphere(g),u}function WLe(e){return WI({defaultProps:h.getDefaultValues(p0t),createGeometry:B0t,createLocationIterator:Wo.fromStructure,getLoci:za,eachLocation:Ja,setUpdateState:(t,r,n)=>{t.createGeometry=r.resolution!==n.resolution||r.radiusOffset!==n.radiusOffset||r.smoothness!==n.smoothness||r.ignoreHydrogens!==n.ignoreHydrogens||r.ignoreHydrogensVariant!==n.ignoreHydrogensVariant||r.traceOnly!==n.traceOnly||r.includeParent!==n.includeParent||r.floodfill!==n.floodfill}},e)}var XLe={"gaussian-surface-mesh":(e,t)=>fo("Gaussian surface mesh",e,t,JLe),"structure-gaussian-surface-mesh":(e,t)=>Eo("Structure-Gaussian surface mesh",e,t,zLe),"gaussian-surface-wireframe":(e,t)=>fo("Gaussian surface wireframe",e,t,jLe),"structure-gaussian-surface-wireframe":(e,t)=>Eo("Structure-Gaussian surface wireframe",e,t,WLe)},ZLe={...m_,...q7,visuals:h.MultiSelect(["gaussian-surface-mesh"],h.objectToOptions(XLe)),bumpFrequency:h.Numeric(1,{min:0,max:10,step:.1},ot.ShadingCategory),density:h.Numeric(.5,{min:0,max:1,step:.01},ot.ShadingCategory)};function I0t(e,t){return ZLe}function C0t(e,t){return Xt.createMulti("Gaussian Surface",e,t,Vn,XLe)}var qLe={name:"gaussian-surface",label:"Gaussian Surface",description:"Displays a gaussian molecular surface.",factory:C0t,getParams:I0t,defaultValues:h.getDefaultValues(ZLe),defaultColorTheme:{name:"chain-id"},defaultSizeTheme:{name:"physical"},isApplicable:e=>e.elementCount>0};var $h={...JFe,background:h.Boolean(!1),backgroundMargin:h.Numeric(0,{min:0,max:1,step:.01}),backgroundColor:h.Color(xt.black),backgroundOpacity:h.Numeric(.5,{min:0,max:1,step:.01}),borderWidth:h.Numeric(.25,{min:0,max:.5,step:.01}),level:h.Select("residue",[["chain","Chain"],["residue","Residue"],["element","Element"]],{isEssential:!0}),ignoreHydrogens:h.Boolean(!1),ignoreHydrogensVariant:h.Select("all",h.arrayToOptions(["all","non-polar"])),chainScale:h.Numeric(10,{min:0,max:20,step:.1}),residueScale:h.Numeric(1,{min:0,max:20,step:.1}),elementScale:h.Numeric(.5,{min:0,max:20,step:.1})};function $Le(e){return Xv({defaultProps:h.getDefaultValues($h),createGeometry:h0t,createLocationIterator:Wo.fromStructure,getLoci:za,eachLocation:Ja,setUpdateState:(t,r,n)=>{t.createGeometry=r.level!==n.level||r.level==="chain"&&r.chainScale!==n.chainScale||r.level==="residue"&&r.residueScale!==n.residueScale||r.level==="element"&&r.elementScale!==n.elementScale||r.ignoreHydrogens!==n.ignoreHydrogens||r.ignoreHydrogensVariant!==n.ignoreHydrogensVariant}},e)}function h0t(e,t,r,n,o){switch(n.level){case"chain":return y0t(e,t,r,n,o);case"residue":return Q0t(e,t,r,n,o);case"element":return E0t(e,t,r,n,o)}}var df=B(),eL=new qi("98");function y0t(e,t,r,n,o){let i=W.Location.create(t),{units:a,serialMapping:A}=t,{auth_asym_id:s,label_asym_id:c}=Ke.chain,{cumulativeUnitElementCount:l}=A,u=a.length,{chainScale:g}=n,m=rc.create(n,u,u/2,o);for(let p=0,d=a.length;p<d;++p){let f=a[p];i.unit=f,i.element=f.elements[0];let{center:I,radius:C}=f.lookup3d.boundary.sphere;B.transformMat4(df,I,f.conformation.operator.matrix);let y=s(i),Q=c(i),E=y===Q?Q:`${Q} [${y}]`;m.add(E,df[0],df[1],df[2],C,g,l[p])}return m.getText()}function Q0t(e,t,r,n,o){let i=W.Location.create(t),{units:a,serialMapping:A}=t,{label_comp_id:s}=Ke.atom,{auth_seq_id:c}=Ke.residue,{cumulativeUnitElementCount:l}=A,u=t.polymerResidueCount*2,{residueScale:g}=n,m=rc.create(n,u,u/2,o);for(let p=0,d=a.length;p<d;++p){let f=a[p],I=f.conformation,{elements:C}=f;i.unit=f,i.element=f.elements[0];let y=f.model.atomicHierarchy.residueAtomSegments.index,Q=l[p],E=0,b=C.length;for(;E<b;){let x=E,S=y[C[E]];for(E++;E<b&&y[C[E]]===S;)E++;eL.reset();for(let v=x;v<E;v++)I.position(C[v],df),eL.includePosition(df);eL.finishedIncludeStep();for(let v=x;v<E;v++)I.position(C[v],df),eL.radiusPosition(df);i.element=C[x];let{center:w,radius:R}=eL.getSphere(),T=c(i),F=`${s(i)} ${T}`;m.add(F,w[0],w[1],w[2],R,g,Q+x)}}return m.getText()}function E0t(e,t,r,n,o){let i=W.Location.create(t),{units:a,serialMapping:A}=t,{label_atom_id:s,label_alt_id:c}=Ke.atom,{cumulativeUnitElementCount:l}=A,u=r.size,g=t.elementCount,{elementScale:m}=n,p=rc.create(n,g,g/2,o);for(let d=0,f=a.length;d<f;++d){let I=a[d],C=I.conformation,{elements:y}=I;i.unit=I;let Q=l[d],E=Gg(t,I,{...n,traceOnly:!1});for(let b=0,x=y.length;b<x;b++){if(E&&E(y[b]))continue;i.element=y[b],C.position(i.element,df);let S=s(i),w=c(i),R=w?`${S}%${w}`:S;p.add(R,df[0],df[1],df[2],u.size(i),m,Q+b)}}return p.getText()}var tTe={"label-text":(e,t)=>Eo("Label text",e,t,$Le)},rTe={...$h,visuals:h.MultiSelect(["label-text"],h.objectToOptions(tTe))};function b0t(e,t){return rTe}function x0t(e,t){let r=Xt.createMulti("Label",e,t,Vn,tTe);return r.setState({pickable:!1,markerActions:0}),r}var nTe={name:"label",label:"Label",description:"Displays labels.",factory:x0t,getParams:b0t,defaultValues:h.getDefaultValues(rTe),defaultColorTheme:{name:"uniform"},defaultSizeTheme:{name:"physical"},isApplicable:e=>e.elementCount>0};function S0t(e,t){return e[0]=e[1]=e[2]=1,t[0]!==0?e[0]=(t[1]+t[2])/-t[0]:t[1]!==0?e[1]=(t[0]+t[2])/-t[1]:t[2]!==0&&(e[2]=(t[0]+t[1])/-t[2]),e}function D0t(e){let t=0,r=2*Math.PI/e,n=new Float32Array(e),o=new Float32Array(e);for(let i=0;i<e;i++)n[i]=Math.cos(t),o[i]=Math.sin(t),t+=r;return{cosTable:n,sinTable:o}}var tL={probeRadius:h.Numeric(1.4,{min:0,max:10,step:.1},{description:"Radius of the probe tracing the molecular surface."}),resolution:h.Numeric(.5,{min:.01,max:20,step:.01},{description:"Grid resolution/cell spacing."}),probePositions:h.Numeric(36,{min:12,max:90,step:1},{description:"Number of positions tested for probe target intersection."})},oTe=h.getDefaultValues(tL);async function iTe(e,t,r,n,o,i){let a=-1;function A(Ae,fe,Qe,Ie,le){if(a!==-1){let Oe=a;if(Oe!==Ie&&Oe!==le&&s(Oe,Ae,fe,Qe))return Oe;a=-1}for(let Oe=0,tt=R.count;Oe<tt;++Oe){let it=Ee.getAt(T,R.indices[Oe]);if(it!==Ie&&it!==le&&s(it,Ae,fe,Qe))return a=it,it}return-1}function s(Ae,fe,Qe,Ie){let le=G[Ae],Oe=L[Ae]-fe,tt=F[Ae]-Qe,it=v[Ae]-Ie;return Oe*Oe+tt*tt+it*it<le*le}function c(Ae,fe){for(let Qe=Ae;Qe<fe;++Qe){let Ie=Ee.getAt(T,Qe),le=L[Ie],Oe=F[Ie],tt=v[Ie],it=G[Ie],Rt=it*it,Mt=x>0;w.find(le,Oe,tt,it);let Bt=Math.ceil(it*E)+x,Zt=Math.floor(E*(le-H)),Nr=Math.floor(E*(Oe-z)),un=Math.floor(E*(tt-_)),xn=Math.max(0,Zt-Bt),On=Math.max(0,Nr-Bt),Zo=Math.max(0,un-Bt),oi=Math.min(ne,Zt+Bt+2),pa=Math.min(oe,Nr+Bt+2),io=Math.min(ae,un+Bt+2);for(let j=xn;j<oi;++j){let ue=pe[j]-le,et=j*ee;for(let gt=On;gt<pa;++gt){let ht=ye[gt]-Oe,wt=ue*ue+ht*ht,Ut=gt*me+et;for(let Wt=Zo;Wt<io;++Wt){let qt=Be[Wt]-tt,Kt=wt+qt*qt;if(Mt||Kt<Rt){let Ot=Wt+Ut,Ar=Math.sqrt(Kt),cr=it/Ar,rr=ue*cr+le,yr=ht*cr+Oe,br=qt*cr+tt,nr=A(rr,yr,br,Ie,-1);if(Kt<Rt){if(Ne[Ot]<0&&(Ne[Ot]*=-1),nr===-1){let se=it-Ar;se<Ne[Ot]&&(Ne[Ot]=se,$[Ot]=U[Qe])}}else if(Mt&&nr===-1){let se=it-Ar;se>Ne[Ot]&&(Ne[Ot]=se)}}}}}}}async function l(){for(let Ae=0;Ae<N;Ae+=De)c(Ae,Math.min(Ae+De,N)),e.shouldUpdate&&await e.update({message:"projecting points",current:Ae,max:N})}let u=B(),g=B(),m=B(),p=B();function d(Ae,fe){let Qe=G[Ae],Ie=G[fe],le=u[0]=L[fe]-L[Ae],Oe=u[1]=F[fe]-F[Ae],tt=u[2]=v[fe]-v[Ae],it=le*le+Oe*Oe+tt*tt,Rt=Math.sqrt(it),Mt=(Qe*Qe+Rt*Rt-Ie*Ie)/(2*Qe*Rt),Bt=Qe*Mt;B.normalize(u,u),S0t(m,u),B.normalize(m,m),B.cross(p,u,m),B.normalize(p,p);let Zt=Math.sqrt(Qe*Qe-Bt*Bt);B.scale(m,m,Zt),B.scale(p,p,Zt),B.scale(u,u,Bt),g[0]=u[0]+L[Ae],g[1]=u[1]+F[Ae],g[2]=u[2]+v[Ae],a=-1;for(let Nr=0;Nr<Q;++Nr){let un=O[Nr],xn=X[Nr],On=g[0]+un*m[0]+xn*p[0],Zo=g[1]+un*m[1]+xn*p[1],oi=g[2]+un*m[2]+xn*p[2];if(A(On,Zo,oi,Ae,fe)===-1){let pa=Math.floor(E*(On-H)),io=Math.floor(E*(Zo-z)),j=Math.floor(E*(oi-_)),ue=Math.max(0,pa-b),et=Math.max(0,io-b),gt=Math.max(0,j-b),ht=Math.min(ne,pa+b+2),wt=Math.min(oe,io+b+2),Ut=Math.min(ae,j+b+2);for(let Wt=ue;Wt<ht;++Wt){let qt=On-pe[Wt],Kt=Wt*ee;for(let Ot=et;Ot<wt;++Ot){let Ar=Zo-ye[Ot],cr=qt*qt+Ar*Ar,rr=Ot*me+Kt;for(let yr=gt;yr<Ut;++yr){let br=oi-Be[yr],nr=cr+br*br,se=yr+rr,ao=Ne[se];if(ao>0&&nr<ao*ao){Ne[se]=Math.sqrt(nr);let Yr=qt*u[0]+Ar*u[1]+br*u[2];$[se]=U[Ee.indexOf(T,Yr<0?fe:Ae)]}}}}}}}function f(Ae,fe){for(let Qe=Ae;Qe<fe;++Qe){let Ie=Ee.getAt(T,Qe);w.find(L[Ie],F[Ie],v[Ie],G[Ie]);for(let le=0,Oe=R.count;le<Oe;++le){let tt=Ee.getAt(T,R.indices[le]);Ie<tt&&d(Ie,tt)}}}async function I(){for(let Ae=0;Ae<N;Ae+=De)f(Ae,Math.min(Ae+De,N)),e.shouldUpdate&&await e.update({message:"projecting torii",current:Ae,max:N})}let{resolution:C,probeRadius:y,probePositions:Q}=i,E=1/C,b=2+Math.floor(y*E),x=y<C*2?1:0,S=B.create(n,n,n);B.scale(S,S,2);let w=ou(t,r,S),R=w.result;o===null&&(o=w.boundary.box);let{indices:T,x:L,y:F,z:v,id:U,radius:G}=t,N=Ee.size(T),k=n+C,J=Ct.expand(Ct(),o,B.create(k,k,k)),[H,z,_]=J.min,M=Ct.scale(Ct(),J,E),q=Ct.size(B(),M);B.ceil(q,q);let[ne,oe,ae]=q,me=ae,Se=oe,ee=me*Se,{cosTable:O,sinTable:X}=D0t(Q),Ce=Fr.Space(q,[0,1,2],Float32Array),Ne=Ce.create(),$=Ce.create();Ne.fill(-1001),$.fill(-1);let pe=$d(ne,H,C),ye=$d(oe,z,C),Be=$d(ae,_,C),De=Math.ceil(1e5/(Math.pow(Math.pow(n,3),3)*E));await l(),await I();let Te=Fr.create(Ce,Ne),be=Fr.create(Ce,$),Fe=Y.identity();return Y.fromScaling(Fe,B.create(C,C,C)),Y.setTranslation(Fe,J.min),{field:Te,idField:be,transform:Fe,resolution:C,maxRadius:n}}var d_={...tL,resolution:{...tL.resolution,...ot.CustomQualityParamInfo},probePositions:{...tL.probePositions,...ot.CustomQualityParamInfo},floodfill:h.Select("off",h.arrayToOptions(["off","inside","outside"]),{description:"If and how to floodfill the molecular surface."})};function v0t(e,t,r,n){let{probeRadius:o}=n,{position:i,boundary:a,radius:A}=jv(e,t,r,n),{indices:s}=i,c=Ee.size(s),l=new Float32Array(Ee.end(s)),u=0;for(let g=0;g<c;++g){let m=Ee.getAt(s,g),p=A(m);u<p&&(u=p),l[m]=p+o}return{position:{...i,radius:l},boundary:a,maxRadius:u}}function p_(e,t,r,n){let{position:o,boundary:i,maxRadius:a}=v0t(e,t,r,n),A=Np(i.box,n);return ve.create("Molecular Surface",async s=>await aTe(s,o,i,a,i.box,A))}function F0t(e,t,r){let{probeRadius:n}=r,{position:o,boundary:i,radius:a}=Wv(e,t,r),{indices:A}=o,s=Ee.size(A),c=new Float32Array(Ee.end(A)),l=0;for(let u=0;u<s;++u){let g=Ee.getAt(A,u),m=a(g);l<m&&(l=m),c[g]=m+n}return{position:{...o,radius:c},boundary:i,maxRadius:l}}function f_(e,t,r){let{position:n,boundary:o,maxRadius:i}=F0t(e,t,r),a=Np(o.box,r);return ve.create("Molecular Surface",async A=>await aTe(A,n,o,i,o.box,a))}async function aTe(e,t,r,n,o,i){return iTe(e,t,r,n,o,i)}var B_={...bo,...d_,...$0,...iM};async function w0t(e,t,r,n,o,i){let{transform:a,field:A,idField:s,resolution:c,maxRadius:l}=await p_(r,t,n.size,o).runInContext(e.runtime),u={isoLevel:o.probeRadius,scalarField:o.floodfill!=="off"?Fr.createFloodfilled(A,o.probeRadius,o.floodfill):A,idField:s},g=await gf(u,i).runAsChild(e.runtime);if(o.includeParent){let p=Math.ceil(2/o.resolution);At.smoothEdges(g,{iterations:p,maxNewEdgeLength:Math.sqrt(2)})}At.transform(g,a),e.webgl&&!e.webgl.isWebGL2?(At.uniformTriangleGroup(g),D.updateIfChanged(g.varyingGroup,!1)):D.updateIfChanged(g.varyingGroup,!0);let m=we.expand(we(),t.boundary.sphere,l);return g.setBoundingSphere(m),g.meta.resolution=c,g}function ATe(e){return Vo({defaultProps:h.getDefaultValues(B_),createGeometry:w0t,createLocationIterator:Wo.fromGroup,getLoci:Dc,eachLocation:Sc,setUpdateState:(t,r,n)=>{t.createGeometry=r.resolution!==n.resolution||r.probeRadius!==n.probeRadius||r.probePositions!==n.probePositions||r.ignoreHydrogens!==n.ignoreHydrogens||r.ignoreHydrogensVariant!==n.ignoreHydrogensVariant||r.traceOnly!==n.traceOnly||r.includeParent!==n.includeParent||r.floodfill!==n.floodfill,r.smoothColors.name!==n.smoothColors.name?t.updateColor=!0:r.smoothColors.name==="on"&&n.smoothColors.name==="on"&&(r.smoothColors.params.resolutionFactor!==n.smoothColors.params.resolutionFactor&&(t.updateColor=!0),r.smoothColors.params.sampleStride!==n.smoothColors.params.sampleStride&&(t.updateColor=!0))},processValues:(t,r,n,o,i)=>{let{resolution:a,colorTexture:A}=r.meta,s=cu(n.smoothColors,o.color.preferSmoothing,a);s&&(hv(t,s,i,A),r.meta.colorTexture=t.tColorGrid.ref.value)},dispose:t=>{t.meta.colorTexture?.destroy()}},e)}async function R0t(e,t,r,n,o){let{transform:i,field:a,idField:A,resolution:s,maxRadius:c}=await f_(t,r.size,n).runInContext(e.runtime),l={isoLevel:n.probeRadius,scalarField:n.floodfill!=="off"?Fr.createFloodfilled(a,n.probeRadius,n.floodfill):a,idField:A},u=await gf(l,o).runAsChild(e.runtime);if(n.includeParent){let m=Math.ceil(2/n.resolution);At.smoothEdges(u,{iterations:m,maxNewEdgeLength:Math.sqrt(2)})}At.transform(u,i),e.webgl&&!e.webgl.isWebGL2?(At.uniformTriangleGroup(u),D.updateIfChanged(u.varyingGroup,!1)):D.updateIfChanged(u.varyingGroup,!0);let g=we.expand(we(),t.boundary.sphere,c);return u.setBoundingSphere(g),u.meta.resolution=s,u}function sTe(e){return Oa({defaultProps:h.getDefaultValues(B_),createGeometry:R0t,createLocationIterator:Wo.fromStructure,getLoci:za,eachLocation:Ja,setUpdateState:(t,r,n)=>{t.createGeometry=r.resolution!==n.resolution||r.probeRadius!==n.probeRadius||r.probePositions!==n.probePositions||r.ignoreHydrogens!==n.ignoreHydrogens||r.ignoreHydrogensVariant!==n.ignoreHydrogensVariant||r.traceOnly!==n.traceOnly||r.includeParent!==n.includeParent||r.floodfill!==n.floodfill,r.smoothColors.name!==n.smoothColors.name?t.updateColor=!0:r.smoothColors.name==="on"&&n.smoothColors.name==="on"&&(r.smoothColors.params.resolutionFactor!==n.smoothColors.params.resolutionFactor&&(t.updateColor=!0),r.smoothColors.params.sampleStride!==n.smoothColors.params.sampleStride&&(t.updateColor=!0))},processValues:(t,r,n,o,i)=>{let{resolution:a,colorTexture:A}=r.meta,s=cu(n.smoothColors,o.color.preferSmoothing,a);s&&(hv(t,s,i,A),r.meta.colorTexture=t.tColorGrid.ref.value)},dispose:t=>{t.meta.colorTexture?.destroy()}},e)}var cTe={...d_,...$0,sizeFactor:h.Numeric(1.5,{min:0,max:10,step:.1})},$7={...WQ,...cTe},U0t={...jI,...cTe};async function L0t(e,t,r,n,o,i){let{transform:a,field:A,idField:s,maxRadius:c}=await p_(r,t,n.size,o).runInContext(e.runtime),l={isoLevel:o.probeRadius,scalarField:o.floodfill!=="off"?Fr.createFloodfilled(A,o.probeRadius,o.floodfill):A,idField:s},u=await EE(l,i).runAsChild(e.runtime);Zr.transform(u,a);let g=we.expand(we(),t.boundary.sphere,c);return u.setBoundingSphere(g),u}function lTe(e){return XQ({defaultProps:h.getDefaultValues($7),createGeometry:L0t,createLocationIterator:Wo.fromGroup,getLoci:Dc,eachLocation:Sc,setUpdateState:(t,r,n)=>{t.createGeometry=r.resolution!==n.resolution||r.probeRadius!==n.probeRadius||r.probePositions!==n.probePositions||r.ignoreHydrogens!==n.ignoreHydrogens||r.ignoreHydrogensVariant!==n.ignoreHydrogensVariant||r.includeParent!==n.includeParent||r.floodfill!==n.floodfill}},e)}async function T0t(e,t,r,n,o){let{transform:i,field:a,idField:A,maxRadius:s}=await f_(t,r.size,n).runInContext(e.runtime),c={isoLevel:n.probeRadius,scalarField:n.floodfill!=="off"?Fr.createFloodfilled(a,n.probeRadius,n.floodfill):a,idField:A},l=await EE(c,o).runAsChild(e.runtime);Zr.transform(l,i);let u=we.expand(we(),t.boundary.sphere,s);return l.setBoundingSphere(u),l}function uTe(e){return WI({defaultProps:h.getDefaultValues(U0t),createGeometry:T0t,createLocationIterator:Wo.fromStructure,getLoci:za,eachLocation:Ja,setUpdateState:(t,r,n)=>{t.createGeometry=r.resolution!==n.resolution||r.probeRadius!==n.probeRadius||r.probePositions!==n.probePositions||r.ignoreHydrogens!==n.ignoreHydrogens||r.ignoreHydrogensVariant!==n.ignoreHydrogensVariant||r.includeParent!==n.includeParent||r.floodfill!==n.floodfill}},e)}var gTe={"molecular-surface-mesh":(e,t)=>fo("Molecular surface mesh",e,t,ATe),"structure-molecular-surface-mesh":(e,t)=>Eo("Structure Molecular surface mesh",e,t,sTe),"molecular-surface-wireframe":(e,t)=>fo("Molecular surface wireframe",e,t,lTe),"structure-molecular-surface-wireframe":(e,t)=>Eo("Structure Molecular surface mesh",e,t,uTe)},mTe={...B_,...$7,visuals:h.MultiSelect(["molecular-surface-mesh"],h.objectToOptions(gTe)),bumpFrequency:h.Numeric(1,{min:0,max:10,step:.1},ot.ShadingCategory),density:h.Numeric(.5,{min:0,max:1,step:.01},ot.ShadingCategory)};function P0t(e,t){return mTe}function G0t(e,t){return Xt.createMulti("Molecular Surface",e,t,Vn,gTe)}var dTe={name:"molecular-surface",label:"Molecular Surface",description:"Displays a molecular surface.",factory:G0t,getParams:P0t,defaultValues:h.getDefaultValues(mTe),defaultColorTheme:{name:"chain-id"},defaultSizeTheme:{name:"physical"},isApplicable:e=>e.elementCount>0};var e$={...bo,sizeFactor:h.Numeric(1,{min:0,max:2,step:.1}),detail:h.Numeric(0,{min:0,max:3,step:1},ot.CustomQualityParamInfo)};function pTe(e){return Vo({defaultProps:h.getDefaultValues(e$),createGeometry:M0t,createLocationIterator:k0t,getLoci:H0t,eachLocation:V0t,setUpdateState:(t,r,n)=>{t.createGeometry=r.sizeFactor!==n.sizeFactor||r.detail!==n.detail}},e)}function N0t(e){if(ge.Traits.is(e.traits,ge.Trait.MultiChain)||ge.Traits.is(e.traits,ge.Trait.Partitioned))return!1;if(ge.isCoarse(e))return!0;if(e.elements.length===0)return!1;e.model.atomicHierarchy.derived.residue.moleculeType;let t=e.residueIndex[e.elements[0]],r=e.model.atomicHierarchy.derived.residue.moleculeType[t];return!(r===3||r===2)}function M0t(e,t,r,n,o,i){if(!N0t(t))return At.createEmpty(i);let{detail:a,sizeFactor:A}=o,s=256,c=We.createState(s,s/2,i),l=t.principalAxes.boxAxes,{origin:u,dirA:g,dirB:m}=l,p=$a.size(B(),l);B.scale(p,p,A/2);let d=B.create(p[2],p[1],p[0]);c.currentGroup=0,Mh(c,u,g,m,d,a+1);let f=We.getMesh(c),I=we.expand(we(),t.boundary.sphere,1*o.sizeFactor);return f.setBoundingSphere(I),f}function k0t(e){let{group:t,structure:r}=e,n=1,o=t.units.length,i=W.Location.create(r);return rn(n,o,1,(A,s)=>{let c=t.units[s];return i.unit=c,i.element=c.elements[A],i})}function H0t(e,t,r){let{objectId:n,instanceId:o}=e;if(r===n){let{structure:i,group:a}=t,A=a.units[o],s=Ee.ofBounds(0,A.elements.length);return W.Loci(i,[{unit:A,indices:s}])}return Ir}function V0t(e,t,r){let n=!1;if(!W.Loci.is(e))return!1;let{structure:o,group:i}=t;if(!Ye.areEquivalent(e.structure,o))return!1;let a=i.elements.length;for(let A of e.elements){let s=i.unitIndexMap.get(A.unit.id);s!==void 0&&Ee.size(A.indices)===a&&r(Ue.ofSingleton(s))&&(n=!0)}return n}var fTe={"orientation-ellipsoid-mesh":(e,t)=>fo("Orientation ellipsoid mesh",e,t,pTe)},BTe={...e$,visuals:h.MultiSelect(["orientation-ellipsoid-mesh"],h.objectToOptions(fTe)),bumpFrequency:h.Numeric(1,{min:0,max:10,step:.1},ot.ShadingCategory)};function _0t(e,t){return BTe}function Y0t(e,t){return Xt.createMulti("Orientation",e,t,Vn,fTe)}var ITe={name:"orientation",label:"Orientation",description:"Displays orientation ellipsoids for polymer chains.",factory:Y0t,getParams:_0t,defaultValues:h.getDefaultValues(BTe),defaultColorTheme:{name:"chain-id"},defaultSizeTheme:{name:"uniform"},isApplicable:e=>e.elementCount>0};var O0t=qe.add3,J0t=qe.add,SE;(t=>{function e(r=2048,n=1024,o){let i=qe.create(Float32Array,3,n,o?o.centerBuffer.ref.value:r),a=qe.create(Float32Array,1,n,o?o.groupBuffer.ref.value:r);return{add:(A,s,c,l)=>{O0t(i,A,s,c),J0t(a,l)},getPoints:()=>{let A=qe.compact(i,!0),s=qe.compact(a,!0);return Ds.create(A,s,i.elementCount,o)}}}t.create=e})(SE||={});var I_=B.add,rL={...$Fe,pointSizeAttenuation:h.Boolean(!1),ignoreHydrogens:h.Boolean(!1),ignoreHydrogensVariant:h.Select("all",h.arrayToOptions(["all","non-polar"])),traceOnly:h.Boolean(!1),stride:h.Numeric(1,{min:1,max:100,step:1})};function z0t(e,t,r,n,o,i){let{child:a}=r,A=a?.unitMap.get(t.id);if(a&&!A)return Ds.createEmpty(i);let{stride:s}=o,c=i?.hasBoundingSphere()?we.clone(i.boundingSphere):void 0,l=t.elements,u=l.length,g=SE.create(u,u/10,i),m=B(),p=t.conformation,d=Gg(r,t,o),f=B(),I=0;if(s&&s>1||d)for(let Q=0;Q<u;++Q)s&&Q%s!==0||d&&d(l[Q])||(p.invariantPosition(l[Q],m),I_(f,f,m),I+=1,g.add(m[0],m[1],m[2],Q));else for(let Q=0;Q<u;++Q)p.invariantPosition(l[Q],m),I_(f,f,m),I+=1,g.add(m[0],m[1],m[2],Q);let C=g.getPoints();if(I===0)return C;let y;return B.scale(f,f,1/I),c&&B.distance(f,c.center)/c.radius<.1?y=c:y=we.expand(we(),(A??t).boundary.sphere,1*o.sizeFactor),C.setBoundingSphere(y),C}function C_(e){return e1e({defaultProps:h.getDefaultValues(rL),createGeometry:z0t,createLocationIterator:Wo.fromGroup,getLoci:Dc,eachLocation:Sc,setUpdateState:(t,r,n)=>{t.createGeometry=r.ignoreHydrogens!==n.ignoreHydrogens||r.ignoreHydrogensVariant!==n.ignoreHydrogensVariant||r.traceOnly!==n.traceOnly||r.stride!==n.stride}},e)}function K0t(e,t,r,n,o){let{child:i}=t,{stride:a}=n,A=o?.hasBoundingSphere()?we.clone(o.boundingSphere):void 0,{getSerialIndex:s}=t.serialMapping,c=t.elementCount,l=SE.create(c,c/2,o),u=B(),g=0;for(let d of t.units){let f=i?.unitMap.get(d.id);if(i&&!f)return Ds.createEmpty(o);let{elements:I,conformation:C}=d,y=I.length,Q=B(),E=Gg(t,d,n);if(a&&a>1||E)for(let b=0;b<y;b++){let x=I[b];a&&b%a!==0||E&&E(x)||(C.position(x,Q),l.add(Q[0],Q[1],Q[2],s(d,x)),I_(u,u,Q),g+=1)}else{for(let b=0;b<y;b++){let x=I[b];C.position(x,Q),l.add(Q[0],Q[1],Q[2],s(d,x)),I_(u,u,Q)}g+=y}}let m=l.getPoints();if(g===0)return m;let p;return B.scale(u,u,1/g),A&&B.distance(u,A.center)/A.radius<1?p=A:p=we.expand(we(),(i??t).boundary.sphere,1*n.sizeFactor),m.setBoundingSphere(p),m}var j0t={...YFe,pointSizeAttenuation:h.Boolean(!1),ignoreHydrogens:h.Boolean(!1),ignoreHydrogensVariant:h.Select("all",h.arrayToOptions(["all","non-polar"])),traceOnly:h.Boolean(!1),stride:h.Numeric(1,{min:1,max:100,step:1})};function h_(e){return OFe({defaultProps:h.getDefaultValues(j0t),createGeometry:K0t,createLocationIterator:Wo.fromStructure,getLoci:za,eachLocation:Ja,setUpdateState:(t,r,n)=>{t.createGeometry=r.ignoreHydrogens!==n.ignoreHydrogens||r.ignoreHydrogensVariant!==n.ignoreHydrogensVariant||r.traceOnly!==n.traceOnly||r.stride!==n.stride}},e)}var CTe={"element-point":(e,t)=>fo("Element points",e,t,C_),"structure-element-point":(e,t)=>Eo("Structure element points",e,t,h_)},hTe={...rL,density:h.Numeric(.1,{min:0,max:1,step:.01},ot.ShadingCategory),visuals:h.MultiSelect(["element-point"],h.objectToOptions(CTe))};function W0t(e,t){let r=hTe;return t.unitSymmetryGroups.length>500&&(r=h.clone(r),r.visuals.defaultValue=["structure-element-point"]),r}function X0t(e,t){return Xt.createMulti("Point",e,t,Vn,CTe)}var yTe={name:"point",label:"Point",description:"Displays elements (atoms, coarse spheres) as points.",factory:X0t,getParams:W0t,defaultValues:h.getDefaultValues(hTe),defaultColorTheme:{name:"element-symbol"},defaultSizeTheme:{name:"uniform"},isApplicable:e=>e.elementCount>0};var QTe={sizeFactor:h.Numeric(.2,{min:0,max:10,step:.01}),detail:h.Numeric(0,{min:0,max:3,step:1},ot.CustomQualityParamInfo),linearSegments:h.Numeric(8,{min:1,max:48,step:1},ot.CustomQualityParamInfo),radialSegments:h.Numeric(16,{min:2,max:56,step:2},ot.CustomQualityParamInfo)},P3n=h.getDefaultValues(QTe),km=B();function Z0t(e,t,r,n,o,i){let a=t.polymerElements.length;if(!a)return At.createEmpty(i);let{sizeFactor:A,detail:s,linearSegments:c,radialSegments:l}=o,u=c*l*a+(l+1)*a*2,g=We.createState(u,u/10,i),m=Xh(c),{curvePoints:p,normalVectors:d,binormalVectors:f,widthValues:I,heightValues:C}=m,y=0,Q=xF(t,r,{ignoreSecondaryStructure:!0});for(;Q.hasNext;){let x=Q.move();g.currentGroup=y;let w=qa(x.moleculeType)?px:dx;FF(m,x,P3,w);let R=x.coarseBackboneFirst||x.first,T=x.coarseBackboneLast||x.last,L=n.size.size(x.centerPrev)*A,F=n.size.size(x.center)*A,v=n.size.size(x.centerNext)*A;jU(m,L,F,v,L,F,v,w);let U=c;if(x.initial){U=Math.max(Math.round(c*w),1);let G=c-U;p.copyWithin(0,G*3),f.copyWithin(0,G*3),d.copyWithin(0,G*3),I.copyWithin(0,G*3),C.copyWithin(0,G*3),B.fromArray(km,p,3),B.normalize(km,B.sub(km,x.p2,km)),B.scaleAndAdd(km,x.p2,km,F*wF),B.toArray(km,p,0)}else x.final&&(U=Math.max(Math.round(c*(1-w)),1),B.fromArray(km,p,U*3-3),B.normalize(km,B.sub(km,x.p2,km)),B.scaleAndAdd(km,x.p2,km,F*wF),B.toArray(km,p,U*3));x.initial===!0&&x.final===!0?cn(g,x.p2,F*2,s):l===2?ZF(g,p,d,f,U,I,C,0):l===4?XF(g,p,d,f,U,I,C,0,R,T):Bu(g,p,d,f,U,l,I,C,R,T,"elliptical"),++y}let E=We.getMesh(g),b=we.expand(we(),t.boundary.sphere,1*o.sizeFactor);return E.setBoundingSphere(b),E}var t$={...bo,...QTe};function ETe(e){return Vo({defaultProps:h.getDefaultValues(t$),createGeometry:Z0t,createLocationIterator:t=>vd.fromGroup(t,{asSecondary:!0}),getLoci:jp,eachLocation:Wp,setUpdateState:(t,r,n)=>{t.createGeometry=r.sizeFactor!==n.sizeFactor||r.detail!==n.detail||r.linearSegments!==n.linearSegments||r.radialSegments!==n.radialSegments}},e)}var bTe={"polymer-tube":(e,t)=>fo("Polymer tube mesh",e,t,ETe),"polymer-gap":(e,t)=>fo("Polymer gap cylinder",e,t,jF)},xTe={...t$,...Cx,sizeFactor:h.Numeric(.2,{min:0,max:10,step:.01}),visuals:h.MultiSelect(["polymer-tube","polymer-gap"],h.objectToOptions(bTe)),bumpFrequency:h.Numeric(2,{min:0,max:10,step:.1},ot.ShadingCategory),density:h.Numeric(.1,{min:0,max:1,step:.01},ot.ShadingCategory)};function q0t(e,t){let r=h.clone(xTe),n=!1,o=!1;return t.units.forEach(i=>{!n&&ge.isAtomic(i)&&i.nucleotideElements.length&&(n=!0),!o&&i.gapElements.length&&(o=!0)}),r.visuals.defaultValue=["polymer-tube"],o&&r.visuals.defaultValue.push("polymer-gap"),r}function $0t(e,t){return Xt.createMulti("Putty",e,t,Vn,bTe)}var STe={name:"putty",label:"Putty",description:"Displays a tube smoothly following the trace atoms of polymers.",factory:$0t,getParams:q0t,defaultValues:h.getDefaultValues(xTe),defaultColorTheme:{name:"chain-id"},defaultSizeTheme:{name:"uncertainty"},isApplicable:e=>e.polymerResidueCount>0};var DTe={"element-sphere":(e,t)=>fo("Sphere mesh/impostor",e,t,v3),"structure-element-sphere":(e,t)=>Eo("Structure sphere mesh/impostor",e,t,F3)},r$={...bF,bumpFrequency:h.Numeric(1,{min:0,max:10,step:.1},ot.ShadingCategory),density:h.Numeric(.5,{min:0,max:1,step:.01},ot.ShadingCategory),visuals:h.MultiSelect(["element-sphere"],h.objectToOptions(DTe))},y_;function ext(e,t){let r=r$;return t.isCoarseGrained&&(y_||(y_=h.clone(r$),y_.sizeFactor.defaultValue=2),r=y_),t.unitSymmetryGroups.length>500&&(r=h.clone(r),r.visuals.defaultValue=["structure-element-sphere"]),r}function txt(e,t){return Xt.createMulti("Spacefill",e,t,Vn,DTe)}var vTe={name:"spacefill",label:"Spacefill",description:"Displays atomic/coarse elements as spheres.",factory:txt,getParams:ext,defaultValues:h.getDefaultValues(r$),defaultColorTheme:{name:"element-symbol"},defaultSizeTheme:{name:"physical"},isApplicable:e=>e.elementCount>0};var n$=It.is;function FTe(e,t,r,n){let o=W.Location.create(t,e),i=e.elements,a=e.bonds,{edgeCount:A,a:s,b:c,edgeProps:l,offset:u}=a,{order:g,flags:m}=l,{sizeFactor:p,aromaticBonds:d,includeTypes:f,excludeTypes:I,multipleBonds:C,metalCoordination:y}=n,Q=C==="off",E=C==="symmetric",b=y==="dashed",x=It.fromNames(f),S=It.fromNames(I),w=CF(x,S,It.Flag.Computed),R=B(),T=e.conformation,{elementRingIndices:L,elementAromaticRingIndices:F}=e.rings,v=d?e.resonance.delocalizedTriplets:void 0;return{linkCount:A*2,referencePosition:U=>{let G=s[U],N=c[U],k=v?.getThirdElement(G,N);if(k!==void 0)return T.invariantPosition(i[k],R);G>N&&([G,N]=[N,G]),u[G+1]-u[G]===1&&([G,N]=[N,G]);let J=F.get(G)||L.get(G),H=0;for(let z=u[G],_=u[G+1];z<_;++z){let M=c[z];if(M!==N&&M!==G)if(J){let q=F.get(M)||L.get(M);if(!q)continue;let ne=VS(J,q);ne>H&&(H=ne,T.invariantPosition(i[M],R))}else return T.invariantPosition(i[M],R)}return H>0?R:null},position:(U,G,N,k)=>{T.invariantPosition(i[s[N]],U),T.invariantPosition(i[c[N]],G)},style:U=>{let G=g[U],N=m[U];if(n$(N,It.Flag.MetallicCoordination))return b?1:0;if(n$(N,It.Flag.HydrogenBond))return 1;if(G===3)return Q?0:E?4:5;if(d){let k=s[U],J=c[U],H=F.get(k),z=F.get(J),_=H&&z?VS(H,z):0;if(n$(N,It.Flag.Aromatic)||_&&!w)return _===2?8:7}return G!==2||Q?0:E?2:3},radius:U=>{o.element=i[s[U]];let G=r.size.size(o);o.element=i[c[U]];let N=r.size.size(o);return Math.min(G,N)*p},ignore:E3(t,e,n)}}function rxt(e,t,r,n,o,i){if(!ge.isAtomic(t))return Zr.createEmpty(i);if(!jh(t,o))return Zr.createEmpty(i);if(!t.bonds.edgeCount)return Zr.createEmpty(i);let{child:a}=r,A=a?.unitMap.get(t.id);if(a&&!A)return Zr.createEmpty(i);let s=FTe(t,r,n,o),{lines:c,boundingSphere:l}=yU(e,s,o,i);if(l)c.setBoundingSphere(l);else if(c.lineCount>0){let u=we.expand(we(),(A??t).boundary.sphere,1*o.sizeFactor);c.setBoundingSphere(u)}return c}var o$={...WQ,...IF,includeParent:h.Boolean(!1)};function wTe(e){return XQ({defaultProps:h.getDefaultValues(o$),createGeometry:rxt,createLocationIterator:t=>Gm.fromGroup(t),getLoci:hF,eachLocation:HU,setUpdateState:(t,r,n,o,i,a,A)=>{t.createGeometry=r.sizeFactor!==n.sizeFactor||r.linkScale!==n.linkScale||r.linkSpacing!==n.linkSpacing||r.aromaticDashCount!==n.aromaticDashCount||r.dashCount!==n.dashCount||r.ignoreHydrogens!==n.ignoreHydrogens||r.ignoreHydrogensVariant!==n.ignoreHydrogensVariant||!Fa(r.includeTypes,n.includeTypes)||!Fa(r.excludeTypes,n.excludeTypes)||r.aromaticBonds!==n.aromaticBonds||r.multipleBonds!==n.multipleBonds||r.metalCoordination!==n.metalCoordination;let s=a.group.units[0],c=A.group.units[0];ge.isAtomic(s)&&ge.isAtomic(c)&&(fa.areEqual(s.bonds,c.bonds)||(t.createGeometry=!0,t.updateTransform=!0,t.updateColor=!0,t.updateSize=!0))}},e)}function nxt(e,t,r){let n=[],{bondCount:o,unitIndex:i,unitEdgeIndex:a,unitGroupIndex:A}=e.intraUnitBondMapping,{child:s}=e;for(let c of e.unitSymmetryGroups){let l=c.units[0],u=s?.unitMap.get(l.id),g=ge.isAtomic(l)&&!(s&&!u)?FTe(l,e,t,r):LV;n.push({group:c,props:g})}return{linkCount:o,referencePosition:c=>{let{group:l,props:u}=n[i[c]];if(!u.referencePosition)return null;let g=u.referencePosition(a[c]);if(!g)return null;let m=l.units[A[c]];return B.transformMat4(g,g,m.conformation.operator.matrix),g},position:(c,l,u,g)=>{let{group:m,props:p}=n[i[u]];p.position(c,l,a[u],g);let d=m.units[A[u]];B.transformMat4(c,c,d.conformation.operator.matrix),B.transformMat4(l,l,d.conformation.operator.matrix)},style:c=>{let{props:l}=n[i[c]];return l.style?l.style(a[c]):0},radius:c=>{let{props:l}=n[i[c]];return l.radius(a[c])},ignore:c=>{let{props:l}=n[i[c]];return l.ignore?l.ignore(a[c]):!1},stub:c=>{let{props:l}=n[i[c]];return l.stub?l.stub(a[c]):!1}}}function oxt(e,t,r,n,o){if(!Ls(t,n))return Zr.createEmpty(o);if(!t.intraUnitBondMapping.bondCount)return Zr.createEmpty(o);let i=nxt(t,r,n),{lines:a,boundingSphere:A}=yU(e,i,n,o);if(A)a.setBoundingSphere(A);else if(a.lineCount>0){let{child:s}=t,c=we.expand(we(),(s??t).boundary.sphere,1*n.sizeFactor);a.setBoundingSphere(c)}return a}var ixt={...jI,...IF,includeParent:h.Boolean(!1)};function RTe(e){return WI({defaultProps:h.getDefaultValues(ixt),createGeometry:oxt,createLocationIterator:(t,r)=>Ls(t,r)?Gm.fromStructureGroups(t):uI,getLoci:YU,eachLocation:OU,setUpdateState:(t,r,n,o,i,a,A)=>{t.createGeometry=r.sizeFactor!==n.sizeFactor||r.linkScale!==n.linkScale||r.linkSpacing!==n.linkSpacing||r.aromaticDashCount!==n.aromaticDashCount||r.dashCount!==n.dashCount||r.ignoreHydrogens!==n.ignoreHydrogens||r.ignoreHydrogensVariant!==n.ignoreHydrogensVariant||!Fa(r.includeTypes,n.includeTypes)||!Fa(r.excludeTypes,n.excludeTypes)||r.multipleBonds!==n.multipleBonds||r.metalCoordination!==n.metalCoordination,Ls(a,r)&&a.interUnitBonds!==A.interUnitBonds&&(t.createGeometry=!0,t.updateTransform=!0,t.updateColor=!0,t.updateSize=!0)}},e)}var i$=new Et.ElementBondIterator;function UTe(e,t,r,n){for(i$.setElement(t,r,n);i$.hasNext;){let o=i$.move();return o.otherUnit.conformation.position(o.otherUnit.elements[o.otherIndex],e),e}return null}function axt(e,t,r){let n=e.interUnitBonds,{edgeCount:o,edges:i}=n,{sizeFactor:a,aromaticBonds:A,multipleBonds:s,metalCoordination:c}=r,l=s==="off",u=s==="symmetric",g=c==="dashed",m=B(),p=W.Location.create();return{linkCount:o,referencePosition:d=>{let f=i[d],I,C,y,Q;if(f.unitA<f.unitB)I=e.unitMap.get(f.unitA),C=e.unitMap.get(f.unitB),y=f.indexA,Q=f.indexB;else if(f.unitA>f.unitB)I=e.unitMap.get(f.unitB),C=e.unitMap.get(f.unitA),y=f.indexB,Q=f.indexA;else throw new Error("same units in createInterUnitBondLines");return UTe(m,e,I,y)||UTe(m,e,C,Q)},position:(d,f,I,C)=>{let y=i[I],Q=e.unitMap.get(y.unitA),E=e.unitMap.get(y.unitB);Q.conformation.position(Q.elements[y.indexA],d),E.conformation.position(E.elements[y.indexB],f)},style:d=>{let f=i[d].props.order,I=hA.create(i[d].props.flag);return It.is(I,It.Flag.MetallicCoordination)?g?1:0:It.is(I,It.Flag.HydrogenBond)?1:f===3?l?0:u?4:5:A&&It.is(I,It.Flag.Aromatic)?7:f!==2||l?0:u?2:3},radius:d=>{let f=i[d];p.structure=e,p.unit=e.unitMap.get(f.unitA),p.element=p.unit.elements[f.indexA];let I=t.size.size(p);p.unit=e.unitMap.get(f.unitB),p.element=p.unit.elements[f.indexB];let C=t.size.size(p);return Math.min(I,C)*a},ignore:b3(e,r)}}function Axt(e,t,r,n,o){if(!Ls(t,n))return Zr.createEmpty(o);if(!t.interUnitBonds.edgeCount)return Zr.createEmpty(o);let i=axt(t,r,n),{lines:a,boundingSphere:A}=yU(e,i,n,o);if(A)a.setBoundingSphere(A);else if(a.lineCount>0){let{child:s}=t,c=we.expand(we(),(s??t).boundary.sphere,1*n.sizeFactor);a.setBoundingSphere(c)}return a}var a$={...jI,...IF,includeParent:h.Boolean(!1)};function LTe(e){return WI({defaultProps:h.getDefaultValues(a$),createGeometry:Axt,createLocationIterator:(t,r)=>Ls(t,r)?Gm.fromStructure(t):uI,getLoci:VU,eachLocation:_U,setUpdateState:(t,r,n,o,i,a,A)=>{t.createGeometry=r.sizeFactor!==n.sizeFactor||r.linkScale!==n.linkScale||r.linkSpacing!==n.linkSpacing||r.aromaticDashCount!==n.aromaticDashCount||r.dashCount!==n.dashCount||r.ignoreHydrogens!==n.ignoreHydrogens||r.ignoreHydrogensVariant!==n.ignoreHydrogensVariant||!Fa(r.includeTypes,n.includeTypes)||!Fa(r.excludeTypes,n.excludeTypes)||r.multipleBonds!==n.multipleBonds||r.metalCoordination!==n.metalCoordination,Ls(a,r)&&a.interUnitBonds!==A.interUnitBonds&&(t.createGeometry=!0,t.updateTransform=!0,t.updateColor=!0,t.updateSize=!0)}},e)}var TTe=B.add,pf=B.scaleAndAdd,Q_=B.unitX,E_=B.unitY,b_=B.unitZ,A$={...WQ,lineSizeAttenuation:h.Boolean(!1),ignoreHydrogens:h.Boolean(!1),ignoreHydrogensVariant:h.Select("all",h.arrayToOptions(["all","non-polar"])),traceOnly:h.Boolean(!1),crosses:h.Select("lone",h.arrayToOptions(["lone","all"])),crossSize:h.Numeric(.35,{min:0,max:2,step:.01})};function sxt(e,t,r,n,o,i){let{child:a}=r;if(a&&!a.unitMap.get(t.id))return Zr.createEmpty(i);let A=i?.hasBoundingSphere()?we.clone(i.boundingSphere):void 0,s=t.elements,c=s.length,l=Ii.create(c,c/10,i),u=B(),g=B(),m=B(),p=t.conformation,d=Gg(r,t,o),f=o.crossSize/2,I=o.crosses==="lone",C=B(),y=0;for(let b=0;b<c;++b)d&&d(s[b])||I&&ge.isAtomic(t)&&jh(t,o)&&Zu(r,t,b)!==0||(p.invariantPosition(s[b],u),TTe(C,C,u),y+=1,pf(g,u,Q_,f),pf(m,u,Q_,-f),l.add(g[0],g[1],g[2],m[0],m[1],m[2],b),pf(g,u,E_,f),pf(m,u,E_,-f),l.add(g[0],g[1],g[2],m[0],m[1],m[2],b),pf(g,u,b_,f),pf(m,u,b_,-f),l.add(g[0],g[1],g[2],m[0],m[1],m[2],b));let Q=l.getLines();if(y===0)return Q;let E;return B.scale(C,C,1/y),A&&B.distance(C,A.center)/A.radius<.1?E=A:E=we.expand(we(),t.boundary.sphere,1*o.sizeFactor),Q.setBoundingSphere(E),Q}function PTe(e){return XQ({defaultProps:h.getDefaultValues(A$),createGeometry:sxt,createLocationIterator:Wo.fromGroup,getLoci:Dc,eachLocation:Sc,setUpdateState:(t,r,n)=>{t.createGeometry=r.ignoreHydrogens!==n.ignoreHydrogens||r.ignoreHydrogensVariant!==n.ignoreHydrogensVariant||r.traceOnly!==n.traceOnly||r.crosses!==n.crosses||r.crossSize!==n.crossSize}},e)}function cxt(e,t,r,n,o){let{child:i}=t,a=o?.hasBoundingSphere()?we.clone(o.boundingSphere):void 0,{getSerialIndex:A}=t.serialMapping,s=t.elementCount,c=Ii.create(s,s/2,o),l=B(),u=B(),g=B(),m=n.crossSize/2,p=n.crosses==="lone",d=B(),f=0;for(let y of t.units){let Q=i?.unitMap.get(y.id);if(i&&!Q)return Zr.createEmpty(o);let{elements:E,conformation:b}=y,x=E.length,S=Gg(t,y,n);for(let w=0;w<x;w++){if(S&&S(E[w])||p&&ge.isAtomic(y)&&jh(y,n)&&Zu(t,y,w)!==0)continue;b.position(E[w],l),TTe(d,d,l),f+=1;let R=A(y,E[w]);pf(u,l,Q_,m),pf(g,l,Q_,-m),c.add(u[0],u[1],u[2],g[0],g[1],g[2],R),pf(u,l,E_,m),pf(g,l,E_,-m),c.add(u[0],u[1],u[2],g[0],g[1],g[2],R),pf(u,l,b_,m),pf(g,l,b_,-m),c.add(u[0],u[1],u[2],g[0],g[1],g[2],R)}}let I=c.getLines();if(f===0)return I;let C;return B.scale(d,d,1/f),a&&B.distance(d,a.center)/a.radius<1?C=a:C=we.expand(we(),(i??t).boundary.sphere,1*n.sizeFactor),I.setBoundingSphere(C),I}var lxt={...jI,lineSizeAttenuation:h.Boolean(!1),ignoreHydrogens:h.Boolean(!1),ignoreHydrogensVariant:h.Select("all",h.arrayToOptions(["all","non-polar"])),traceOnly:h.Boolean(!1),crosses:h.Select("lone",h.arrayToOptions(["lone","all"])),crossSize:h.Numeric(.35,{min:0,max:2,step:.01})};function GTe(e){return WI({defaultProps:h.getDefaultValues(lxt),createGeometry:cxt,createLocationIterator:Wo.fromStructure,getLoci:za,eachLocation:Ja,setUpdateState:(t,r,n)=>{t.createGeometry=r.ignoreHydrogens!==n.ignoreHydrogens||r.ignoreHydrogensVariant!==n.ignoreHydrogensVariant||r.traceOnly!==n.traceOnly||r.crosses!==n.crosses||r.crossSize!==n.crossSize}},e)}var NTe={"intra-bond":(e,t)=>fo("Intra-unit bond line",e,t,wTe),"inter-bond":(e,t)=>Eo("Inter-unit bond line",e,t,LTe),"element-point":(e,t)=>fo("Points",e,t,C_),"element-cross":(e,t)=>fo("Crosses",e,t,PTe),"structure-intra-bond":(e,t)=>Eo("Structure intra-unit bond line",e,t,RTe),"structure-element-point":(e,t)=>Eo("Structure element points",e,t,h_),"structure-element-cross":(e,t)=>Eo("Structure element crosses",e,t,GTe)},MTe={...o$,...a$,...rL,...A$,pointStyle:h.Select("circle",h.objectToOptions(Ds.StyleTypes)),multipleBonds:h.Select("offset",h.arrayToOptions(["off","symmetric","offset"])),includeParent:h.Boolean(!1),sizeFactor:h.Numeric(2,{min:.01,max:10,step:.01}),unitKinds:AB(["atomic"]),visuals:h.MultiSelect(["intra-bond","inter-bond","element-point","element-cross"],h.objectToOptions(NTe)),density:h.Numeric(.1,{min:0,max:1,step:.01},ot.ShadingCategory)};function uxt(e,t){let r=MTe;return Ye.getSize(t)>=Ye.Size.Huge?(r=h.clone(r),r.visuals.defaultValue=["intra-bond","element-point","element-cross"]):t.unitSymmetryGroups.length>500&&(r=h.clone(r),r.visuals.defaultValue=["structure-intra-bond","structure-element-point","structure-element-cross"]),r}function gxt(e,t){return Xt.createMulti("Line",e,t,Vn,NTe)}var kTe={name:"line",label:"Line",description:"Displays bonds as lines and atoms as points or croses.",factory:gxt,getParams:uxt,defaultValues:h.getDefaultValues(MTe),defaultColorTheme:{name:"element-symbol"},defaultSizeTheme:{name:"uniform"},isApplicable:e=>e.elementCount>0,getData:(e,t)=>t.includeParent?e.asParent():e,mustRecreate:(e,t)=>e.includeParent!==t.includeParent};function mxt(e,t,r,n,o){let{webgl:i}=e;if(!i)throw new Error("GaussianDensityVolume requires `webgl`");let a=B.create(0,1,2),A={min:0,max:1,mean:.04,sigma:.01},s=l=>{let u=l?l.gridTexture.ref.value:void 0,g=hLe(t,r.size,n,i,u),{transform:m,texture:p,bbox:d,gridDim:f}=g,I=Y.mul(Y(),m,Y.fromScaling(Y(),f)),C=Y.getScaling(B(),m),y=yl.create(d,f,m,I,C,p,A,!0,a,"byte",l),Q=we.expand(we(),t.boundary.sphere,g.maxRadius);return y.setBoundingSphere(Q),y},c=s(o);return c.meta.reset=()=>{s(c)},c}var s$={...zFe,...hE,ignoreHydrogens:h.Boolean(!1),ignoreHydrogensVariant:h.Select("all",h.arrayToOptions(["all","non-polar"])),includeParent:h.Boolean(!1,{isHidden:!0})};function HTe(e){return KFe({defaultProps:h.getDefaultValues(s$),createGeometry:mxt,createLocationIterator:Wo.fromStructure,getLoci:za,eachLocation:Ja,setUpdateState:(t,r,n)=>{r.resolution!==n.resolution&&(t.createGeometry=!0),r.radiusOffset!==n.radiusOffset&&(t.createGeometry=!0),r.smoothness!==n.smoothness&&(t.createGeometry=!0),r.ignoreHydrogens!==n.ignoreHydrogens&&(t.createGeometry=!0),r.ignoreHydrogensVariant!==n.ignoreHydrogensVariant&&(t.createGeometry=!0),r.traceOnly!==n.traceOnly&&(t.createGeometry=!0),r.includeParent!==n.includeParent&&(t.createGeometry=!0)},dispose:t=>{t.gridTexture.ref.value.destroy()}},e)}function dxt(e,t,r,n,o,i){let{webgl:a}=e;if(!a)throw new Error("GaussianDensityVolume requires `webgl`");let A=B.create(0,1,2),s={min:0,max:1,mean:.04,sigma:.01},c=u=>{let g=u?u.gridTexture.ref.value:void 0,m=ILe(r,t,n.size,o,a,g),{transform:p,texture:d,bbox:f,gridDim:I}=m,C=Y.mul(Y(),p,Y.fromScaling(Y(),I)),y=Y.getScaling(B(),p),Q=yl.create(f,I,p,C,y,d,s,!0,A,"byte",u),E=we.expand(we(),t.boundary.sphere,m.maxRadius);return Q.setBoundingSphere(E),Q},l=c(i);return l.meta.reset=()=>{c(l)},l}var pxt={...t1e,...hE,ignoreHydrogens:h.Boolean(!1),ignoreHydrogensVariant:h.Select("all",h.arrayToOptions(["all","non-polar"])),includeParent:h.Boolean(!1,{isHidden:!0})};function VTe(e){return r1e({defaultProps:h.getDefaultValues(pxt),createGeometry:dxt,createLocationIterator:Wo.fromGroup,getLoci:Dc,eachLocation:Sc,setUpdateState:(t,r,n)=>{r.resolution!==n.resolution&&(t.createGeometry=!0),r.radiusOffset!==n.radiusOffset&&(t.createGeometry=!0),r.smoothness!==n.smoothness&&(t.createGeometry=!0),r.ignoreHydrogens!==n.ignoreHydrogens&&(t.createGeometry=!0),r.ignoreHydrogensVariant!==n.ignoreHydrogensVariant&&(t.createGeometry=!0),r.traceOnly!==n.traceOnly&&(t.createGeometry=!0),r.includeParent!==n.includeParent&&(t.createGeometry=!0)},dispose:t=>{t.gridTexture.ref.value.destroy()}},e)}var _Te={"gaussian-volume":(e,t)=>Eo("Gaussian volume",e,t,HTe),"units-gaussian-volume":(e,t)=>fo("Units-Gaussian volume",e,t,VTe)},YTe={...s$,jumpLength:h.Numeric(4,{min:0,max:20,step:.1}),visuals:h.MultiSelect(["gaussian-volume"],h.objectToOptions(_Te))};function fxt(e,t){return YTe}function Bxt(e,t){return Xt.createMulti("Gaussian Volume",e,t,Vn,_Te)}var OTe={name:"gaussian-volume",label:"Gaussian Volume",description:"Displays a gaussian molecular density using direct volume rendering.",factory:Bxt,getParams:fxt,defaultValues:h.getDefaultValues(YTe),defaultColorTheme:{name:"chain-id"},defaultSizeTheme:{name:"physical"},isApplicable:e=>e.elementCount>0};var Ixt=B.scale,Cxt=B.add,hxt=B.sub,x_={...bo,...$v,sizeFactor:h.Numeric(.3,{min:0,max:10,step:.01}),radialSegments:h.Numeric(16,{min:2,max:56,step:2},ot.CustomQualityParamInfo),tryUseImpostor:h.Boolean(!0)};function JTe(e,t,r,n){return r.tryUseImpostor&&zQ(n)?Qxt(e):bxt(e)}function yxt(e,t,r,n,o,i){let a=t.polymerElements.length;if(!a)return _a.createEmpty(i);let A=a*2,s=rx.create(A,A/4,i),c=t.conformation,l=B(),u=B(),g=B();g7(t,function(f,I,C,y,Q){c.invariantPosition(f,l),c.invariantPosition(I,u);let b=qa(Q)?px:dx;Cxt(g,l,Ixt(g,hxt(g,u,l),b)),s.add(l[0],l[1],l[2],g[0],g[1],g[2],1,!1,!1,2,C),s.add(g[0],g[1],g[2],u[0],u[1],u[2],1,!1,!1,2,y)});let p=s.getCylinders(),d=we.expand(we(),t.boundary.sphere,1*o.sizeFactor);return p.setBoundingSphere(d),p}function Qxt(e){return eF({defaultProps:h.getDefaultValues(x_),createGeometry:yxt,createLocationIterator:t=>vd.fromGroup(t),getLoci:jp,eachLocation:Wp,setUpdateState:(t,r,n)=>{},mustRecreate:(t,r,n)=>!r.tryUseImpostor||!n},e)}function Ext(e,t,r,n,o,i){let a=t.polymerElements.length;if(!a)return At.createEmpty(i);let{radialSegments:A,sizeFactor:s}=o,c=A*2*a*2,l=We.createState(c,c/10,i),u=t.conformation,g=B(),m=B(),p={radiusTop:1,radiusBottom:1,radialSegments:A},d=W.Location.create(r,t),f=W.Location.create(r,t);g7(t,function(Q,E,b,x,S){d.element=Q,f.element=E,u.invariantPosition(d.element,g),u.invariantPosition(f.element,m);let R=qa(S)?px:dx;p.radiusTop=p.radiusBottom=n.size.size(d)*s,l.currentGroup=b,Sn(l,g,m,R,p),p.radiusTop=p.radiusBottom=n.size.size(f)*s,l.currentGroup=x,Sn(l,m,g,1-R,p)});let C=We.getMesh(l),y=we.expand(we(),t.boundary.sphere,1*o.sizeFactor);return C.setBoundingSphere(y),C}function bxt(e){return Vo({defaultProps:h.getDefaultValues(x_),createGeometry:Ext,createLocationIterator:t=>vd.fromGroup(t),getLoci:jp,eachLocation:Wp,setUpdateState:(t,r,n)=>{t.createGeometry=r.sizeFactor!==n.sizeFactor||r.radialSegments!==n.radialSegments},mustRecreate:(t,r,n)=>r.tryUseImpostor&&!!n},e)}var S_={...bo,...Zv,sizeFactor:h.Numeric(.3,{min:0,max:10,step:.01}),detail:h.Numeric(0,{min:0,max:3,step:1},ot.CustomQualityParamInfo),tryUseImpostor:h.Boolean(!0)};function zTe(e,t,r,n){return r.tryUseImpostor&&Kv(n)?Sxt(e):vxt(e)}function xxt(e,t,r,n,o,i){let a=t.polymerElements.length;if(!a)return rA.createEmpty(i);let A=Kp.create(a,a/2,i),s=t.conformation,c=B();m7(t,(m,p)=>{s.invariantPosition(m,c),A.add(c[0],c[1],c[2],p)});let u=A.getSpheres(),g=we.expand(we(),t.boundary.sphere,1*o.sizeFactor);return u.setBoundingSphere(g),u}function Sxt(e){return qv({defaultProps:h.getDefaultValues(S_),createGeometry:xxt,createLocationIterator:t=>vd.fromGroup(t),getLoci:jp,eachLocation:Wp,setUpdateState:(t,r,n)=>{},mustRecreate:(t,r,n)=>!r.tryUseImpostor||!n},e)}function Dxt(e,t,r,n,o,i){let a=t.polymerElements.length;if(!a)return At.createEmpty(i);let{detail:A,sizeFactor:s}=o,c=a*vm(A),l=We.createState(c,c/2,i),u=t.conformation,g=B(),m=W.Location.create(r,t);m7(t,(I,C)=>{m.element=I,u.invariantPosition(m.element,g),l.currentGroup=C,cn(l,g,n.size.size(m)*s,A)});let d=We.getMesh(l),f=we.expand(we(),t.boundary.sphere,1*o.sizeFactor);return d.setBoundingSphere(f),d}function vxt(e){return Vo({defaultProps:h.getDefaultValues(S_),createGeometry:Dxt,createLocationIterator:t=>vd.fromGroup(t),getLoci:jp,eachLocation:Wp,setUpdateState:(t,r,n)=>{t.createGeometry=r.sizeFactor!==n.sizeFactor||r.detail!==n.detail},mustRecreate:(t,r,n)=>r.tryUseImpostor&&!!n},e)}var KTe={"polymer-backbone-cylinder":(e,t)=>fo("Polymer backbone cylinder",e,t,JTe),"polymer-backbone-sphere":(e,t)=>fo("Polymer backbone sphere",e,t,zTe),"polymer-gap":(e,t)=>fo("Polymer gap cylinder",e,t,jF)},jTe={...S_,...x_,...Cx,sizeAspectRatio:h.Numeric(1,{min:.1,max:3,step:.1}),visuals:h.MultiSelect(["polymer-backbone-cylinder","polymer-backbone-sphere","polymer-gap"],h.objectToOptions(KTe)),bumpFrequency:h.Numeric(0,{min:0,max:10,step:.1},ot.ShadingCategory),density:h.Numeric(.1,{min:0,max:1,step:.01},ot.ShadingCategory),colorMode:h.Select("default",h.arrayToOptions(["default","interpolate"]),{...ot.ShadingCategory,isHidden:!0})};function Fxt(e,t){let r=h.clone(jTe),n=!1;return t.units.forEach(o=>{!n&&o.gapElements.length&&(n=!0)}),r.visuals.defaultValue=["polymer-backbone-cylinder","polymer-backbone-sphere"],n&&r.visuals.defaultValue.push("polymer-gap"),r}function wxt(e,t){return Xt.createMulti("Backbone",e,t,Vn,KTe)}var WTe={name:"backbone",label:"Backbone",description:"Displays polymer backbone with cylinders and spheres.",factory:wxt,getParams:Fxt,defaultValues:h.getDefaultValues(jTe),defaultColorTheme:{name:"chain-id"},defaultSizeTheme:{name:"uniform"},isApplicable:e=>e.polymerResidueCount>0};var D_=1e-8,DE=B(),vE=B(),IC=B(),e1=B();function XTe(e){let t=e.length;if(t<4)return{indices:[]};let r=Uxt(e);if(!r)return{indices:[]};let[n,o,i,a]=r;B.sub(DE,e[o],e[n]),B.sub(vE,e[i],e[n]),B.cross(IC,DE,vE),B.sub(e1,e[a],e[n]);let A=B.dot(IC,e1),s;A>0?s=[[n,i,o],[n,o,a],[o,i,a],[n,a,i]]:s=[[n,o,i],[n,a,o],[o,a,i],[n,i,a]];for(let l=0;l<t;++l){if(l===n||l===o||l===i||l===a)continue;let u=e[l],g=[],m=!1;for(let f=0;f<s.length;f++){let I=s[f];Rxt(e,I,u)?(g.push(!0),m=!0):g.push(!1)}if(!m)continue;let p=[];for(let f=0;f<s.length;f++){if(!g[f])continue;let I=s[f];for(let C=0;C<3;C++){let y=I[C],Q=I[(C+1)%3],E=!1;for(let b=0;b<s.length;b++){if(g[b])continue;let x=s[b];for(let S=0;S<3;S++)if(x[S]===Q&&x[(S+1)%3]===y){E=!0;break}if(E)break}E&&p.push([y,Q])}}let d=[];for(let f=0;f<s.length;f++)g[f]||d.push(s[f]);for(let[f,I]of p)d.push([f,I,l]);s=d}let c=[];for(let l of s)c.push(l[0],l[1],l[2]);return{indices:c}}function Rxt(e,t,r){let n=e[t[0]],o=e[t[1]],i=e[t[2]];return B.sub(DE,o,n),B.sub(vE,i,n),B.cross(IC,DE,vE),B.sub(e1,r,n),B.dot(IC,e1)>D_}function Uxt(e){let t=e.length,r=0,n=-1;for(let s=1;s<t;s++)if(B.distance(e[r],e[s])>D_){n=s;break}if(n<0)return null;let o=-1,i=0;for(let s=0;s<t;s++){if(s===r||s===n)continue;B.sub(DE,e[n],e[r]),B.sub(vE,e[s],e[r]),B.cross(IC,DE,vE);let c=B.magnitude(IC);c>i&&(i=c,o=s)}if(o<0||i<D_)return null;let a=-1,A=0;B.sub(DE,e[n],e[r]),B.sub(vE,e[o],e[r]),B.cross(IC,DE,vE),B.normalize(IC,IC);for(let s=0;s<t;s++){if(s===r||s===n||s===o)continue;B.sub(e1,e[s],e[r]);let c=Math.abs(B.dot(IC,e1));c>A&&(A=c,a=s)}return a<0||A<D_?null:[r,n,o,a]}var c$={...Us,includeParent:h.Boolean(!1),minCoordination:h.Numeric(4,{min:4,max:12,step:1},{description:"Minimum number of coordinating atoms to draw a polyhedron"}),maxCoordination:h.Numeric(12,{min:4,max:24,step:1},{description:"Maximum coordination number"})};function Lxt(e,t,r,n,o){let{minCoordination:i,maxCoordination:a}=n,{child:A,coordination:{sites:s,eachLigand:c}}=t,l=s.count*4,u=We.createState(l,l/2,o);for(let g=0;g<s.count;g++){let m=s.numbers[g];if(m<i||m>a)continue;if(A){let f=t.unitMap.get(s.unitIds[g]),I=A.unitMap.get(f.id),C=f.elements[s.indices[g]];if(!I||!je.has(I.elements,C))continue}let p=[];c(g,f=>{let I=f.unit.conformation.position(f.element,B());p.push(I)});let d=XTe(p);if(d){u.currentGroup=g;for(let f=0;f<d.indices.length;f+=3){let I=p[d.indices[f]],C=p[d.indices[f+1]],y=p[d.indices[f+2]];We.addTriangle(u,I,C,y)}}}return We.getMesh(u)}function Txt(e,t){let{sites:r}=e.coordination,n=r.count,o=1,i=W.Location.create(e);function a(A){if(A<r.count){let s=e.unitMap.get(r.unitIds[A]);i.unit=s,i.element=s.elements[r.indices[A]]}return i}return rn(n,o,1,a,!0)}function Pxt(e,t,r){let{objectId:n,groupId:o}=e;if(r===n){if(o===Ai.Null)return Ye.Loci(t);let{sites:i}=t.coordination;return o<i.count?W.Loci(t,[{unit:t.unitMap.get(i.unitIds[o]),indices:Ee.ofSingleton(i.indices[o])}]):Ye.Loci(t)}return Ir}function Gxt(e,t,r){let n=!1;if(!W.Loci.is(e)||!Ye.areEquivalent(e.structure,t))return!1;let{getSiteIndex:o}=t.coordination;for(let{unit:i,indices:a}of e.elements)ge.isAtomic(i)&&Ee.forEach(a,A=>{let s=o(i,i.elements[A]);s>=0&&r(Ue.ofSingleton(s))&&(n=!0)});return n}function ZTe(e){return Oa({defaultProps:h.getDefaultValues(c$),createGeometry:Lxt,createLocationIterator:Txt,getLoci:Pxt,eachLocation:Gxt,setUpdateState:(t,r,n)=>{t.createGeometry=r.minCoordination!==n.minCoordination||r.maxCoordination!==n.maxCoordination}},e)}var qTe={"coordination-polyhedron-mesh":(e,t)=>Eo("Coordination Polyhedron mesh",e,t,ZTe)},$Te={...c$,bumpFrequency:h.Numeric(1,{min:0,max:10,step:.1},ot.ShadingCategory),density:h.Numeric(.5,{min:0,max:1,step:.01},ot.ShadingCategory),visuals:h.MultiSelect(["coordination-polyhedron-mesh"],h.objectToOptions(qTe))};function Nxt(e,t){return $Te}function Mxt(e,t){return Xt.createMulti("Polyhedron",e,t,Vn,qTe)}var ePe={name:"polyhedron",label:"Polyhedron",description:"Displays coordination polyhedra around atoms with enough bonds.",factory:Mxt,getParams:Nxt,defaultValues:h.getDefaultValues($Te),defaultColorTheme:{name:"element-symbol"},defaultSizeTheme:{name:"uniform"},isApplicable:e=>e.elementCount>0,getData:(e,t)=>t.includeParent?e.asParent():e,mustRecreate:(e,t)=>e.includeParent!==t.includeParent};var kxt=B.set,Hxt=B.transformMat4,Vxt=B.squaredDistance,l$={...XFe,interpolation:h.Select("nearest",h.objectToOptions(pM)),imageResolution:h.Numeric(.5,{min:.01,max:20,step:.01},{description:"Grid resolution/cell spacing.",...ot.CustomQualityParamInfo}),mode:h.Select("frame",h.arrayToOptions(["frame","plane"]),{description:"Frame: slice through the structure along arbitrary axes in any step size. Plane: an arbitrary plane defined by point and normal."}),offset:h.Numeric(0,{min:-1,max:1,step:.01},{isEssential:!0,immediateUpdate:!0,hideIf:e=>e.mode!=="frame",description:"Relative offset from center."}),axis:h.Select("c",h.arrayToOptions(["a","b","c"]),{isEssential:!0,hideIf:e=>e.mode!=="frame"}),rotation:h.Group({axis:h.Vec3(B.create(1,0,0),{},{description:"Axis of rotation"}),angle:h.Numeric(0,{min:-180,max:180,step:1},{immediateUpdate:!0,description:"Axis rotation angle in Degrees"})},{isExpanded:!0,hideIf:e=>e.mode!=="frame"}),plane:h.Group({point:h.Vec3(B.create(0,0,0),{},{description:"Plane point"}),normal:h.Vec3(B.create(1,0,0),{},{description:"Plane normal"})},{isExpanded:!0,hideIf:e=>e.mode!=="plane"}),extent:h.Select("frame",h.arrayToOptions(["frame","sphere"]),{description:"Extent of the plane, either box (frame) or sphere."}),margin:h.Numeric(4,{min:0,max:50,step:1},{immediateUpdate:!0,description:"Margin around the structure in Angstrom"}),frame:h.Select("principalAxes",h.arrayToOptions(["principalAxes","boundingBox"])),antialias:h.Boolean(!0,{description:"Antialiasing of structure edges."}),cutout:h.Boolean(!1,{description:"Cutout the structure from the image."}),defaultColor:h.Color(13421772,{description:"Default color for parts of the image that are not covered by the color theme."}),includeParent:h.Boolean(!1,{description:"Show parent structure (but within extent of this structure)."})};function tPe(e){return ZFe({defaultProps:h.getDefaultValues(l$),createGeometry:Yxt,createLocationIterator:Wo.fromStructure,getLoci:za,eachLocation:Ja,setUpdateState:(t,r,n,o,i)=>{t.createGeometry=r.imageResolution!==n.imageResolution||r.mode!==n.mode||r.margin!==n.margin||r.frame!==n.frame||r.extent!==n.extent||!B.equals(r.rotation.axis,n.rotation.axis)||r.rotation.angle!==n.rotation.angle||r.offset!==n.offset||r.axis!==n.axis||!B.equals(r.plane.point,n.plane.point)||!B.equals(r.plane.normal,n.plane.normal)||r.antialias!==n.antialias||r.cutout!==n.cutout||r.defaultColor!==n.defaultColor||!KA.areEqual(o.color,i.color)||!Qi.areEqual(o.size,i.size)}},e)}function _xt(e,t){let{mode:r,axis:n,frame:o,extent:i,margin:a,rotation:A,plane:s,includeParent:c}=t;c&&e.child&&(e=e.child);let l=B(),u=B(),g=B(),m=B(),p=B(),d=B(),f=0,I=0,C=0,y,Q,E;if(o==="principalAxes"){let S=Ye.getPrincipalAxes(e).boxAxes;[f,I,C]=$a.size(B(),S),y=S.dirA,Q=S.dirB,E=S.dirC,B.copy(d,S.origin)}else[f,I,C]=Ct.size(B(),e.boundary.box),y=B.create(1,0,0),Q=B.create(0,1,0),E=B.create(0,0,1),B.copy(d,e.boundary.sphere.center);if(B.set(u,f,I,C),n==="c"?(B.set(l,f,I,C),B.copy(g,y),B.copy(m,Q),B.copy(p,E)):n==="b"?(B.set(l,f,C,I),B.copy(g,y),B.copy(p,Q),B.copy(m,E)):(B.set(l,I,C,f),B.copy(p,y),B.copy(g,Q),B.copy(m,E)),A.angle!==0){let S=B();B.scaleAndAdd(S,S,y,A.axis[0]),B.scaleAndAdd(S,S,Q,A.axis[1]),B.scaleAndAdd(S,S,E,A.axis[2]),B.normalize(S,S);let w=Y.fromRotation(Y(),kr(A.angle),S);B.transformDirection(g,g,w),B.transformDirection(m,m,w),B.transformDirection(p,p,w)}if(i==="sphere"||A.angle!==0){let S=e.boundary.sphere.radius*2,w=B.magnitude(Ct.size(B(),Ct.fromSphere3D(Ct(),e.boundary.sphere)));B.set(l,w,w,S),i==="sphere"&&B.set(u,S,S,S)}B.addScalar(l,l,a*2),B.addScalar(u,u,a*2);let b=gr.identity();o==="principalAxes"&&gr.fromBasis(b,B.normalize(B(),y),B.normalize(B(),Q),B.normalize(B(),E)),r==="plane"&&(B.copy(d,s.point),B.copy(p,s.normal),B.cross(g,p,B.unitX),B.dot(g,g)<1e-6&&B.cross(g,p,B.unitY),B.normalize(g,g),B.cross(m,p,g),B.normalize(m,m));let x={type:i==="sphere"?2:3,center:d,scale:u,rotation:b,transform:Y.identity()};return{size:l,major:g,minor:m,normal:p,center:d,trim:x}}function Yxt(e,t,r,n,o){let{imageResolution:i,offset:a,antialias:A,cutout:s,defaultColor:c}=n,l=1/i,u="color"in r.color&&r.color.color?r.color.color:()=>16777215,{size:g,major:m,minor:p,normal:d,center:f,trim:I}=_xt(t,n),C=B.create(g[0],g[1],1),y=B.setMagnitude(B(),d,g[2]/2),Q=Math.floor(g[1]*l),E=Math.floor(g[0]*l),b=Y.identity(),x=B(),S=B();B.add(x,f,m),Y.targetTo(b,f,x,p),B.scaleAndAdd(S,f,y,a),Y.setTranslation(b,S),Y.mul(b,b,Y.rotY90),Y.scale(b,b,C);let{getSerialIndex:w}=t.serialMapping,R=r.color.granularity.startsWith("vertex"),T=ai.fromNormalAndCoplanarPoint(ai(),B.normalize(B(),d),S),L=Y.invert(Y(),b),F=is(B(),B()),v=W.Location.create(t),{units:U}=t,G=0;for(let ae=0,me=U.length;ae<me;++ae){let{elements:Se}=U[ae];v.unit=U[ae];for(let ee=0,O=Se.length;ee<O;++ee){v.element=Se[ee];let X=r.size.size(v);X>G&&(G=X)}}let N=new Uint8Array(Q*E*4),k=new Uint8Array(Q*E*4),J=new Float32Array(Q*E);J.fill(Number.MAX_VALUE);let H=B(),z=B(),_=B();if(R){let ae=0;for(let me=0;me<E;++me)for(let Se=0;Se<Q;++Se){let ee=$t(Se+.5,0,Q-1)/Q-.5,O=$t(me+.5,0,E-1)/E-.5;B.set(x,O,-ee,0),B.transformMat4(x,x,b),B.copy(F.position,x);let X=u(F,!1);ke.toArray(X,N,ae),N[ae+3]=s?0:255,ae+=4}}else for(let ae=0,me=Q*E*4;ae<me;ae+=4)ke.toArray(c,N,ae),N[ae+3]=s?0:255;for(let ae=0,me=U.length;ae<me;++ae){let Se=U[ae],{elements:ee,conformation:O}=Se;v.unit=U[ae];for(let X=0,Ce=ee.length;X<Ce;++X){let Ne=ee[X];v.element=Ne,O.position(Ne,H);let $=ai.distanceToPoint(T,H);if(Math.abs($)>G)continue;let pe=r.size.size(v);if(Math.abs($)>pe)continue;let ye=Math.cos(Math.abs($)/pe),Be=A?i*ye:0,De=pe+Be/2,Te=De*De;B.scaleAndAdd(z,H,T.normal,-$),B.transformMat4(_,z,L),B.addScalar(_,_,.5);let be=Math.floor(_[0]*E),Fe=Q-Math.ceil(_[1]*Q),Ae=Math.ceil(pe*l),fe=Math.max(0,be-Ae),Qe=Math.max(0,Fe-Ae),Ie=Math.min(E,be+Ae+2),le=Math.min(Q,Fe+Ae+2);B.copy(F.position,z);let Oe=R?c:u(v,!1),tt=w(v.unit,v.element);for(let it=fe;it<Ie;++it)for(let Rt=Qe;Rt<le;++Rt){let Mt=$t(it+.5,0,E-1)/E-.5,Bt=$t(Rt+.5,0,Q-1)/Q-.5;kxt(x,Mt,-Bt,0),Hxt(x,x,b);let Zt=Vxt(x,H);if(Zt>Te)continue;let Nr=it*Q+Rt;if(Zt<J[Nr]){let un=Nr*4,xn=Math.sqrt(Zt)-pe+Be/2,On=xn>0?1-xn/Be:1;R?On===1?J[Nr]=Zt:s&&(k[un]!==0||k[un+1]!==0||k[un+2]!==0)&&(On=1):On===1?(J[Nr]=Zt,ke.toArray(Oe,N,un)):s?(ke.toArray(Oe,N,un),(k[un]!==0||k[un+1]!==0||k[un+2]!==0)&&(On=1)):ke.toArray(ke.interpolate(ke.fromArray(N,un),Oe,On),N,un),od(tt,k,un),k[un+3]=A?Math.round(255*On):255,s&&(N[Nr*4+3]=A?Math.round(255*On):255)}}}}let M={width:Q,height:E,array:N,flipY:!0},q={width:Q,height:E,array:k,flipY:!0},ne={width:1,height:1,array:new Float32Array(1),flipY:!0},oe=new Float32Array([-.5,.5,0,.5,.5,0,-.5,-.5,0,.5,-.5,0]);return Eg(b,oe,0,4),lu.create(M,oe,q,ne,I,-1,o)}var rPe={"plane-image":(e,t)=>Eo("Plane image",e,t,tPe)},nPe={...l$,visuals:h.MultiSelect(["plane-image"],h.objectToOptions(rPe))};function Oxt(e,t){return nPe}function Jxt(e,t){return Xt.createMulti("Plane",e,t,Vn,rPe)}var oPe={name:"plane",label:"Plane",description:"Displays planes.",factory:Jxt,getParams:Oxt,defaultValues:h.getDefaultValues(nPe),defaultColorTheme:{name:"element-symbol"},defaultSizeTheme:{name:"physical"},isApplicable:e=>e.elementCount>0,getData:(e,t)=>t.includeParent?e.asParent():e,mustRecreate:(e,t)=>e.includeParent!==t.includeParent};var t1=class e extends Pv{constructor(){super(),Bi(e.BuiltIn,(t,r)=>{if(t.name!==r)throw new Error(`Fix BuiltInStructureRepresentations to have matching names. ${t.name} ${r}`);this.add(t)})}};(t=>t.BuiltIn={cartoon:$Ue,backbone:WTe,"ball-and-stick":GRe,carbohydrate:tUe,ellipsoid:iLe,"gaussian-surface":qLe,"gaussian-volume":OTe,label:nTe,line:kTe,"molecular-surface":dTe,orientation:ITe,plane:oPe,point:yTe,putty:STe,spacefill:vTe,polyhedron:ePe})(t1||={});var g$={isoValue:Ze.IsoValueParam,wrap:h.Select("auto",h.arrayToOptions(["off","on","auto"])),floodfill:h.Select("off",h.arrayToOptions(["off","inside","outside"]),{description:"If and how to floodfill the volume. Note that this disables GPU support."})},zxt={...g$,tryUseGpu:h.Boolean(!0,{hideIf:e=>e.floodfill!=="off"}),gpuDataType:h.Select("byte",h.arrayToOptions(["byte","float","halfFloat"]),{hideIf:e=>!e.tryUseGpu||e.floodfill!=="off"})};function Kxt(e){return e.extensions.colorBufferFloat&&e.extensions.textureFloat&&e.extensions.drawBuffers}function v_(e,t){return t==="on"?!0:t==="off"?!1:Ze.isPeriodic(e)}var nL=1;function m$(e,t){if(e.grid.cells.data.length<Math.pow(10,3))return!1;let r=e.grid.cells.space.dimensions,{powerOfTwoSize:n}=Fp(r,nL);return n<=t.maxTextureSize/2}function jxt(e,t,r,n,o){return n.floodfill==="off"&&n.tryUseGpu&&o&&Kxt(o)&&m$(t,o)?qxt(e):Xxt(e)}function iPe(e,t){let r=Ue.ofLength(e.instances.length);return Ze.Isosurface.Loci(e,t.isoValue,r)}function d$(e,t,r,n,o){let{objectId:i,groupId:a,instanceId:A}=e;if(o===i){let s=Ze.PickingGranularity.get(t),c=Ee.ofSingleton(A);if(s==="volume")return Ze.Loci(t,c);if(s==="object"||a===Ai.Null)return Ze.Isosurface.Loci(t,n.isoValue,c);{let l=Ue.ofSingleton(a);return Ze.Cell.Loci(t,[{indices:l,instances:c}])}}return Ir}function p$(e,t,r,n,o){return qf(e,t,{isoValue:n.isoValue},o)}async function Wxt(e,t,r,n,o,i){e.runtime.update({message:"Marching cubes..."});let a=Ze.IsoValue.toAbsolute(o.isoValue,t.grid.stats).absoluteValue,A=t.grid.cells;o.floodfill!=="off"&&(A=Fr.createFloodfilled(A,a,o.floodfill)),v_(t,o.wrap)&&(A=eH(A));let s=QA(new Int32Array(t.grid.cells.data.length)),c=await gf({isoLevel:a,scalarField:A,idField:Fr.create(A.space,Fr.Data1(s))},i).runAsChild(e.runtime),l=jr.getGridToCartesianTransform(t.grid);return At.transform(c,l),e.webgl&&!e.webgl.isWebGL2?(At.uniformTriangleGroup(c,!1),D.updateIfChanged(c.varyingGroup,!1)):D.updateIfChanged(c.varyingGroup,!0),c.setBoundingSphere(jr.getIsosurfaceBoundingSphere(t.grid,Ze.IsoValue.toAbsolute(o.isoValue,t.grid.stats).absoluteValue)),c}var f$={...At.Params,...Fs.Params,...g$,...zxt,quality:{...At.Params.quality,isEssential:!1}};function Xxt(e){return Vl({defaultProps:h.getDefaultValues(f$),createGeometry:Wxt,createLocationIterator:$f,getLoci:d$,eachLocation:p$,setUpdateState:(t,r,n,o,i)=>{t.createGeometry=!Ze.IsoValue.areSame(o.isoValue,i.isoValue,r.grid.stats)||o.wrap!==i.wrap||o.floodfill!==i.floodfill},geometryUtils:At.Utils,mustRecreate:(t,r,n)=>r.tryUseGpu&&!!n&&m$(t.volume,n)},e)}var u$;(o=>{let e="volume-isosurface-texture";o.descriptor={name:e};function r(i){delete i._propertyData[e]}o.clear=r;function n(i,a,A){let{gpuDataType:s}=A,c=v_(i,A.wrap),l=jr.getGridToCartesianTransform(i.grid),u=B.clone(i.grid.cells.space.dimensions),{width:g,height:m,powerOfTwoSize:p}=Fp(u,nL),d=B.create(g,m,0),f=B.subScalar(B(),u,c?1:0),I=Le.create(g/p,m/p);if(p>a.maxTextureSize/2)throw new Error("volume too large for gpu isosurface extraction");let C=s==="halfFloat"&&!a.extensions.textureHalfFloat?"float":s;if(i._propertyData[e]?.dataType!==C||i._propertyData[e]?.wrap!==c){let y=C==="byte"?a.resources.texture("image-uint8","alpha","ubyte","linear"):C==="halfFloat"?a.resources.texture("image-float16","alpha","fp16","linear"):a.resources.texture("image-float32","alpha","float","linear");i._propertyData[e]={texture:y,dataType:C,wrap:c},y.define(p,p),y.load($k(i,"data",nL,C),!0),i.customProperties.add(o.descriptor),i.customProperties.assets(o.descriptor,[{dispose:()=>y.destroy()}])}return u[0]+=nL,u[1]+=nL,{texture:i._propertyData[e].texture,transform:l,gridDimension:u,gridTexDim:d,gridDataDim:f,gridTexScale:I}}o.get=n})(u$||={});function Zxt(e,t,r,n,o,i){let{webgl:a}=e;if(!a)throw new Error("webgl context required to create volume isosurface texture-mesh");if(t.grid.cells.data.length<=1)return Fs.createEmpty(i);v_(t,o.wrap)&&(t=oSe(t));let{max:A,min:s}=t.grid.stats,c=A-s,l=Ze.IsoValue.toAbsolute(o.isoValue,t.grid.stats).absoluteValue,u=(l-s)/c,g=t.grid.cells.space.axisOrderSlowToFast,m=t.grid.cells.data.length,p=jr.getBoundingSphere(t.grid),d=I=>{let{texture:C,gridDimension:y,gridTexDim:Q,gridDataDim:E,gridTexScale:b,transform:x}=u$.get(t,a,o),S=I?.doubleBuffer.get(),w=yx(a,C,y,Q,E,b,x,u,l<0,!1,g,!0,S?.vertex,S?.group,S?.normal);return Fs.create(w.vertexCount,m,w.vertexTexture,w.groupTexture,w.normalTexture,p,I)},f=d(i);return f.meta.webgl=a,f.meta.reset=()=>{u$.clear(t),d(f)},f}function qxt(e){return Vl({defaultProps:h.getDefaultValues(f$),createGeometry:Zxt,createLocationIterator:$f,getLoci:d$,eachLocation:p$,setUpdateState:(t,r,n,o,i)=>{t.createGeometry=!Ze.IsoValue.areSame(o.isoValue,i.isoValue,r.grid.stats)||o.gpuDataType!==i.gpuDataType||o.wrap!==i.wrap},geometryUtils:Fs.Utils,mustRecreate:(t,r,n)=>r.floodfill!=="off"||!r.tryUseGpu||!n||!m$(t.volume,n),dispose:t=>{t.vertexTexture.ref.value.destroy(),t.groupTexture.ref.value.destroy(),t.normalTexture.ref.value.destroy(),t.doubleBuffer.destroy()}},e)}async function $xt(e,t,r,n,o,i){e.runtime.update({message:"Marching cubes..."});let a=Ze.IsoValue.toAbsolute(o.isoValue,t.grid.stats).absoluteValue,A=t.grid.cells;o.floodfill!=="off"&&(A=Fr.createFloodfilled(A,a,o.floodfill)),v_(t,o.wrap)&&(A=eH(A));let s=QA(new Int32Array(t.grid.cells.data.length)),c=await EE({isoLevel:a,scalarField:A,idField:Fr.create(A.space,Fr.Data1(s))},i).runAsChild(e.runtime),l=jr.getGridToCartesianTransform(t.grid);return Zr.transform(c,l),c.setBoundingSphere(jr.getIsosurfaceBoundingSphere(t.grid,Ze.IsoValue.toAbsolute(o.isoValue,t.grid.stats).absoluteValue)),c}var aPe={...Zr.Params,...g$,quality:{...Zr.Params.quality,isEssential:!1},sizeFactor:h.Numeric(3,{min:0,max:10,step:.1})};function eSt(e){return Vl({defaultProps:h.getDefaultValues(aPe),createGeometry:$xt,createLocationIterator:$f,getLoci:d$,eachLocation:p$,setUpdateState:(t,r,n,o,i)=>{t.createGeometry=!Ze.IsoValue.areSame(o.isoValue,i.isoValue,r.grid.stats)||o.wrap!==i.wrap||o.floodfill!==i.floodfill},geometryUtils:Zr.Utils},e)}var APe={solid:(e,t)=>Pg("Isosurface mesh",e,t,jxt,iPe),wireframe:(e,t)=>Pg("Isosurface wireframe",e,t,eSt,iPe)},sPe={...f$,...aPe,visuals:h.MultiSelect(["solid"],h.objectToOptions(APe)),bumpFrequency:h.Numeric(1,{min:0,max:10,step:.1},ot.ShadingCategory)};function tSt(e,t){let r=h.clone(sPe);return r.isoValue=Ze.createIsoValueParam(Ze.IsoValue.relative(2),t.grid.stats),r}function rSt(e,t){return Xt.createMulti("Isosurface",e,t,Xt.StateBuilder,APe)}var cPe={name:"isosurface",label:"Isosurface",description:"Displays a triangulated isosurface of volumetric data.",factory:rSt,getParams:tSt,defaultValues:h.getDefaultValues(sPe),defaultColorTheme:{name:"uniform"},defaultSizeTheme:{name:"uniform"},isApplicable:e=>!Ze.isEmpty(e)&&!Ze.Segmentation.get(e)};var I$={...lu.Params,quality:{...lu.Params.quality,isEssential:!1},dimension:h.MappedStatic("x",{x:h.Numeric(0,{min:0,max:0,step:1},{immediateUpdate:!0}),y:h.Numeric(0,{min:0,max:0,step:1},{immediateUpdate:!0}),z:h.Numeric(0,{min:0,max:0,step:1},{immediateUpdate:!0}),relativeX:h.Numeric(0,{min:0,max:1,step:.01},{immediateUpdate:!0}),relativeY:h.Numeric(0,{min:0,max:1,step:.01},{immediateUpdate:!0}),relativeZ:h.Numeric(0,{min:0,max:1,step:.01},{immediateUpdate:!0})},{isEssential:!0,hideIf:e=>e.mode!=="grid",description:"Slice position in grid coordinates."}),isoValue:Ze.IsoValueParam,mode:h.Select("grid",h.arrayToOptions(["grid","frame","plane"]),{description:"Grid: slice through the volume along the grid axes in integer steps. Frame: slice through the volume along arbitrary axes in any step size. Plane: an arbitrary plane defined by point and normal."}),offset:h.Numeric(0,{min:-1,max:1,step:.01},{isEssential:!0,immediateUpdate:!0,hideIf:e=>e.mode!=="frame",description:"Relative offset from center."}),axis:h.Select("a",h.arrayToOptions(["a","b","c"]),{isEssential:!0,hideIf:e=>e.mode!=="frame",description:"Axis of the frame."}),rotation:h.Group({axis:h.Vec3(B.create(1,0,0),{},{description:"Axis of rotation"}),angle:h.Numeric(0,{min:-180,max:180,step:1},{immediateUpdate:!0,description:"Axis rotation angle in Degrees"})},{isExpanded:!0,hideIf:e=>e.mode!=="frame"}),plane:h.Group({point:h.Vec3(B.create(0,0,0),{},{description:"Plane point"}),normal:h.Vec3(B.create(1,0,0),{},{description:"Plane normal"})},{isExpanded:!0,hideIf:e=>e.mode!=="plane"})};function nSt(e,t){let r=Ze.getPeriodicRange(t);if(r){let{min:i,max:a}=r;t=mX(t,i,a)}let n=h.clone(I$),o=t.grid.cells.space.dimensions;return n.dimension=h.MappedStatic("x",{x:h.Numeric(0,{min:0,max:o[0]-1,step:1},{immediateUpdate:!0}),y:h.Numeric(0,{min:0,max:o[1]-1,step:1},{immediateUpdate:!0}),z:h.Numeric(0,{min:0,max:o[2]-1,step:1},{immediateUpdate:!0}),relativeX:h.Numeric(0,{min:0,max:1,step:.01},{immediateUpdate:!0}),relativeY:h.Numeric(0,{min:0,max:1,step:.01},{immediateUpdate:!0}),relativeZ:h.Numeric(0,{min:0,max:1,step:.01},{immediateUpdate:!0})},{isEssential:!0,hideIf:i=>i.mode!=="grid"}),n.isoValue=Ze.createIsoValueParam(Ze.IsoValue.absolute(t.grid.stats.min),t.grid.stats),n}async function oSt(e,t,r,n,o,i){let a=Ze.getPeriodicRange(t);if(a){let{min:A,max:s}=a;t=mX(t,A,s)}switch(o.mode){case"frame":return aSt(e,t,r,n,o,i);case"grid":return sSt(e,t,r,n,o,i);case"plane":return ASt(e,t,r,n,o,i);default:Or(o.mode)}}function iSt(e,t){let{axis:r,rotation:n,mode:o}=t,i=jr.getGridToCartesianTransform(e.grid),a=Y.invert(Y(),i),[A,s,c]=e.grid.cells.space.dimensions,l=A,u=s,g=c,m=B.create(l,0,0),p=B.create(0,u,0),d=B.create(0,0,g),f=Math.max(l,u,g)/Math.max(A,s,c),I=B.create(0,0,0),C=B.create(l,u,g);B.transformMat4(I,I,i),B.transformMat4(C,C,i);let y=B.center(B(),C,I),Q=B(),E=B(),b=B(),x=B();if(r==="c"?(B.set(Q,l,u,g),B.copy(E,m),B.copy(b,p),B.copy(x,d)):r==="b"?(B.set(Q,l,g,u),B.copy(E,m),B.copy(x,p),B.copy(b,d)):(B.set(Q,u,g,l),B.copy(x,m),B.copy(E,p),B.copy(b,d)),n.angle!==0){let w=B();B.scaleAndAdd(w,w,m,n.axis[0]),B.scaleAndAdd(w,w,p,n.axis[1]),B.scaleAndAdd(w,w,d,n.axis[2]),B.normalize(w,w);let R=Y.fromRotation(Y(),kr(n.angle),w);B.transformDirection(E,E,R),B.transformDirection(b,b,R),B.transformDirection(x,x,R)}if(o==="frame"){let w=B.distance(I,C),R=B.distance(I,C);B.set(Q,R,R,w)}B.transformDirection(E,E,i),B.transformDirection(b,b,i),B.transformDirection(x,x,i);let S={type:3,center:B.create(l/2,u/2,g/2),scale:B.create(l,u,g),rotation:gr.identity(),transform:a};return{size:Q,major:E,minor:b,normal:x,center:y,trim:S,resolution:f}}function uPe(e,t,r,n,o,i){let{m:a,width:A,height:s}=r,{cells:{space:c},stats:l}=e.grid,{min:u,max:g}=l,m=t.color.granularity==="uniform",p="color"in t.color&&t.color.color?t.color.color:()=>16777215,d=B(),f=jr.getGridToCartesianTransform(e.grid),I=Y.invert(Y(),f),[C,y,Q]=c.dimensions,E=new Uint8Array(A*s*4),b=new Uint8Array(A*s*4),x=new Float32Array(A*s),S={instance:new Int16Array(A*s),cell:new Uint32Array(A*s),index:new Map},w=B(),R=is(B(),B()),T=jr.makeGetTrilinearlyInterpolated(e.grid,"none"),L=Ze.getPeriodicMapping(e),F=0;for(let H=0;H<s;++H)for(let z=0;z<A;++z){let _=F*4,M=$t(z+.5,0,A-1)/A-.5,q=$t(H+.5,0,s-1)/s-.5;B.set(d,q,-M,0),B.transformMat4(d,d,a),B.copy(w,d),B.transformMat4(w,w,I);let ne=Math.trunc(w[0]),oe=Math.trunc(w[1]),ae=Math.trunc(w[2]);B.copy(R.position,d);let me=p(R,!1);ke.toArray(me,E,_);let Se=Uf(T(d),u,g);if(m&&(E[_]*=Se,E[_+1]*=Se,E[_+2]*=Se),x[F]=Se,ne>=0&&ne<C&&oe>=0&&oe<y&&ae>=0&&ae<Q)if(od(F,b,_),L){let ee=L.get(ne,oe,ae);if(ee){S.instance[F]=ee.instance,S.cell[F]=ee.cell;let O=ko(ee.instance,ee.cell);S.index.has(O)?S.index.get(O).push(F):S.index.set(O,[F])}else E[_]=0,E[_+1]=0,E[_+2]=0,E[_+3]=0,x[F]=NaN}else{let ee=c.dataOffset(ne,oe,ae);S.instance[F]=-1,S.cell[F]=ee,S.index.has(ee)?S.index.get(ee).push(F):S.index.set(ee,[F])}F+=1}let v={width:A,height:s,array:E,flipY:!0},U={width:A,height:s,array:b,flipY:!0},G={width:A,height:s,array:x,flipY:!0},N=new Float32Array([-.5,.5,0,.5,.5,0,-.5,-.5,0,.5,-.5,0]);Eg(a,N,0,4);let k=$t(Uf(Ze.IsoValue.toAbsolute(n,l).absoluteValue,u,g),0,1),J=lu.create(v,N,U,G,o,k,i);return J.setBoundingSphere(Ze.isPeriodic(e)?Ze.getBoundingSphere(e,Ue.ofLength(e.instances.length)):jr.getBoundingSphere(e.grid)),J.meta.mapping=S,J}async function aSt(e,t,r,n,o,i){let{offset:a,isoValue:A}=o,{size:s,major:c,minor:l,normal:u,center:g,trim:m,resolution:p}=iSt(t,o),d=1/p,f=B.create(s[0],s[1],1),I=B.setMagnitude(B(),u,s[2]/2),C=Math.floor(s[1]*d),y=Math.floor(s[0]*d),Q=Y.identity(),E=B(),b=B();return B.add(E,g,c),Y.targetTo(Q,g,E,l),B.scaleAndAdd(b,g,I,a),Y.setTranslation(Q,b),Y.mul(Q,Q,Y.rotY90),Y.scale(Q,Q,f),uPe(t,n,{m:Q,width:C,height:y},A,m,i)}async function ASt(e,t,r,n,o,i){let{plane:{point:a,normal:A},isoValue:s}=o,c=B.normalize(B(),A),l=jr.getGridToCartesianTransform(t.grid),u=Y.invert(Y(),l),[g,m,p]=t.grid.cells.space.dimensions,d=g,f=m,I=p,y=1/(Math.max(d,f,I)/Math.max(g,m,p)),Q=B.distance(B.create(0,0,0),B.create(d,f,I)),E=B.create(d/2,f/2,I/2);B.transformMat4(E,E,l);let b=B.sub(B(),E,a),x=B.dot(b,c),S=B.scaleAndAdd(B(),E,c,-x),w=Y.fromPlane(Y(),c,S),R=B.set(B(),Q,Q,Q);Y.scale(w,w,R);let T=Math.floor(Q*y),L=Math.floor(Q*y),F={type:3,center:B.create(d/2,f/2,I/2),scale:B.create(d,f,I),rotation:gr.identity(),transform:u};return uPe(t,n,{m:w,width:T,height:L},s,F,i)}async function sSt(e,t,r,n,o,i){let{dimension:{name:a},isoValue:A}=o,{cells:{space:s,data:c},stats:l}=t.grid,{min:u,max:g}=l,m=n.color.granularity==="uniform",p="color"in n.color&&n.color.color?n.color.color:()=>16777215,{width:d,height:f,x:I,y:C,z:y,x0:Q,y0:E,z0:b,nx:x,ny:S,nz:w}=cSt(t.grid,o),R=new Float32Array(a==="x"||a==="relativeX"?[I,0,0,I,C,0,I,0,y,I,C,y]:a==="y"||a==="relativeY"?[0,C,0,I,C,0,0,C,y,I,C,y]:[0,0,y,0,C,y,I,0,y,I,C,y]),T=new Uint8Array(d*f*4),L=new Uint8Array(d*f*4),F=new Float32Array(d*f),v={instance:new Int16Array(d*f),cell:new Uint32Array(d*f),index:new Map},U=jr.getGridToCartesianTransform(t.grid),G=is(B(),B()),N=Ze.getPeriodicMapping(t),k=0;for(let oe=E;oe<S;++oe)for(let ae=Q;ae<x;++ae)for(let me=b;me<w;++me){let Se=k*4;B.set(G.position,ae,oe,me),B.transformMat4(G.position,G.position,U),ke.toArray(p(G,!1),T,Se);let ee=Uf(s.get(c,ae,oe,me),u,g);if(m&&(T[Se]*=ee,T[Se+1]*=ee,T[Se+2]*=ee),F[k]=ee,od(k,L,Se),N){let O=N.get(ae,oe,me);O?(v.instance[k]=O.instance,v.cell[k]=O.cell,v.index.set(ko(O.instance,O.cell),[k])):(T[Se]=0,T[Se+1]=0,T[Se+2]=0,T[Se+3]=0,F[k]=NaN)}else{let O=s.dataOffset(ae,oe,me);v.instance[k]=-1,v.cell[k]=O,v.index.set(O,[k])}k+=1}let J={width:d,height:f,array:T,flipY:!0},H={width:d,height:f,array:L,flipY:!0},z={width:d,height:f,array:F,flipY:!0},_=jr.getGridToCartesianTransform(t.grid);Eg(_,R,0,4);let M=lu.createEmptyTrim(),q=$t(Uf(Ze.IsoValue.toAbsolute(A,l).absoluteValue,u,g),0,1),ne=lu.create(J,R,H,z,M,q,i);return ne.setBoundingSphere(Ze.isPeriodic(t)?Ze.getBoundingSphere(t,Ue.ofLength(t.instances.length)):jr.getBoundingSphere(t.grid)),ne.meta.mapping=v,ne}function B$(e,t){return $t(Math.round((e-1)*t),0,e-1)}function cSt(e,t){let{dimension:{name:r,params:n}}=t,{space:o}=e.cells,i,a,A,s,c,l=0,u=0,g=0,[m,p,d]=o.dimensions;return r==="x"?(A=n,s=p,c=d,i=d,a=p,l=A,m=l+1):r==="y"?(A=m,s=n,c=d,i=d,a=m,u=s,p=u+1):r==="z"?(A=m,s=p,c=n,i=m,a=p,g=c,d=g+1):r==="relativeX"?(A=B$(m,n),s=p,c=d,i=d,a=p,l=A,m=l+1):r==="relativeY"?(A=m,s=B$(p,n),c=d,i=d,a=m,u=s,p=u+1):(A=m,s=p,c=B$(d,n),i=m,a=p,g=c,d=g+1),{width:i,height:a,x:A,y:s,z:c,x0:l,y0:u,z0:g,nx:m,ny:p,nz:d}}function gPe(e,t,r){return Ze.Loci(e,t)}function lSt(e,t){let r=Ue.ofLength(e.instances.length);return gPe(e,r,t)}function uSt(e,t,r,n,o,i){let{objectId:a,groupId:A,instanceId:s}=e;if(o===a){let c=i.meta.mapping;if(c){let g=c.instance[A];g>=0&&(s=g),A=c.cell[A]}let l=Ze.PickingGranularity.get(t),u=Ee.ofSingleton(s);if(l==="volume")return Ze.Loci(t,u);if(l==="object"||A===Ai.Null)return gPe(t,u,n);{let g=Ue.ofSingleton(A);return Ze.Cell.Loci(t,[{indices:g,instances:u}])}}return Ir}function gSt(e,t,r,n){if(Ze.isLociEmpty(e)||!Ze.areEquivalent(e.volume,t))return!1;if(Ze.isPeriodic(t))return n(Ue.ofBounds(0,r));let o=!1;if(Ue.is(e.instances)){let i=Ue.start(e.instances)*r,a=Ue.end(e.instances)*r;n(Ue.ofBounds(i,a))&&(o=!0)}else Ee.forEach(e.instances,i=>{let a=i*r;n(Ue.ofBounds(a,a+r))&&(o=!0)});return o}function lPe(e,t,r){if(!e||e.length===0)return!1;let n=!1,o=e[0]+t,i=o;for(let a=1,A=e.length;a<A;++a){let s=e[a]+t;if(s===i+1){i=s;continue}r(Ue.ofBounds(o,i+1))&&(n=!0),o=s,i=s}return r(Ue.ofBounds(o,i+1))&&(n=!0),n}function mSt(e,t,r,n,o,i){let a=i.meta.mapping;if(a){let A=a.cell.length,s=t.grid.cells.data.length,c=Ze.isPeriodic(t);return Ze.isLoci(e)?gSt(e,t,A,o):qf(e,t,void 0,l=>{let u=!1;for(let g=Ue.start(l),m=Ue.end(l);g<m;++g){let p=Math.floor(g/s),d=g%s;if(c)lPe(a.index.get(ko(p,d)),0,o)&&(u=!0);else{let f=p*A;lPe(a.index.get(d),f,o)&&(u=!0)}}return u})}else return qf(e,t,void 0,o)}function dSt(e,t,r){return Vl({defaultProps:h.getDefaultValues(I$),createGeometry:oSt,createLocationIterator:tSe,getLoci:uSt,eachLocation:mSt,setUpdateState:(n,o,i,a,A,s,c)=>{n.createGeometry=a.dimension.name!==A.dimension.name||a.dimension.params!==A.dimension.params||a.mode!==A.mode||!B.equals(a.rotation.axis,A.rotation.axis)||a.rotation.angle!==A.rotation.angle||a.offset!==A.offset||a.axis!==A.axis||!B.equals(a.plane.point,A.plane.point)||!B.equals(a.plane.normal,A.plane.normal)||!Ze.IsoValue.areSame(a.isoValue,A.isoValue,o.grid.stats)||!KA.areEqual(s.color,c.color)||!Ze.areInstanceTransformsEqual(o,i)},geometryUtils:lu.Utils},e)}function pSt(e,t){return Pg("Slice",e,t,dSt,lSt)}var mPe={name:"slice",label:"Slice",description:"Slice of volume rendered as image with interpolation.",factory:pSt,getParams:nSt,defaultValues:h.getDefaultValues(I$),defaultColorTheme:{name:"uniform"},defaultSizeTheme:{name:"uniform"},isApplicable:e=>!Ze.isEmpty(e)&&!Ze.Segmentation.get(e)};function dPe(e,t){let r=Ct();return Ct.add(r,e),Ct.transform(r,r,t),r}function fSt(e,t,r,n,o){let i=r.grid.cells.space.dimensions,{width:a,height:A}=Fp(i);if(Math.max(a,A)>t.maxTextureSize/2)throw new Error("volume too large for direct-volume rendering");let s=n.dataType==="halfFloat"&&!t.extensions.textureHalfFloat?"float":n.dataType,c=$k(r,"normals",0,s),l=jr.getGridToCartesianTransform(r.grid),u=dPe(i,l),g;o&&o.dataType.ref.value===s?g=o.gridTexture.ref.value:g=s==="byte"?t.resources.texture("image-uint8","rgba","ubyte","linear"):s==="halfFloat"?t.resources.texture("image-float16","rgba","fp16","linear"):t.resources.texture("image-float32","rgba","float","linear"),g.load(c);let{unitToCartn:m,cellDim:p}=pPe(r.grid),d=r.grid.cells.space.axisOrderSlowToFast;return yl.create(u,i,l,m,p,g,r.grid.stats,!1,d,s,o)}function pPe(e){if(e.transform.kind==="matrix")return{unitToCartn:Y.mul(Y(),e.transform.matrix,Y.fromScaling(Y(),e.cells.space.dimensions)),cellDim:Y.getScaling(B(),e.transform.matrix)};let t=e.transform.fractionalBox,r=Ct.size(B(),t);return{unitToCartn:Y.mul3(Y(),e.transform.cell.fromFractional,Y.fromTranslation(Y(),t.min),Y.fromScaling(Y(),r)),cellDim:B.div(B(),e.transform.cell.size,e.cells.space.dimensions)}}function BSt(e,t,r,n,o){let i=r.grid.cells.space.dimensions;if(Math.max(...i)>t.max3dTextureSize/2)throw new Error("volume too large for direct-volume rendering");let a=n.dataType==="halfFloat"&&!t.extensions.textureHalfFloat?"float":n.dataType,A=rSe(r,a),s=jr.getGridToCartesianTransform(r.grid),c=dPe(i,s),l;o&&o.dataType.ref.value===a?l=o.gridTexture.ref.value:l=a==="byte"?t.resources.texture("volume-uint8","rgba","ubyte","linear"):a==="halfFloat"?t.resources.texture("volume-float16","rgba","fp16","linear"):t.resources.texture("volume-float32","rgba","float","linear"),l.load(A);let{unitToCartn:u,cellDim:g}=pPe(r.grid),m=r.grid.cells.space.axisOrderSlowToFast;return yl.create(c,i,s,u,g,l,r.grid.stats,!1,m,a,o)}async function ISt(e,t,r,n,o,i){let{runtime:a,webgl:A}=e;if(A===void 0)throw new Error("DirectVolumeVisual requires `webgl` in VisualContext");return A.isWebGL2?BSt(a,A,t,o,i):fSt(a,A,t,o,i)}function CSt(e,t){let r=Ue.ofLength(e.instances.length);return Ze.Loci(e,r)}function hSt(e,t,r,n,o){let{objectId:i,groupId:a,instanceId:A}=e;if(o===i){let s=Ee.ofSingleton(A),c=Ue.ofSingleton(a);return Ze.Cell.Loci(t,[{indices:c,instances:s}])}return Ir}function ySt(e,t,r,n,o){return qf(e,t,void 0,o)}var y$={...yl.Params,quality:{...yl.Params.quality,isEssential:!1},dataType:h.Select("byte",h.arrayToOptions(["byte","float","halfFloat"]))};function QSt(e,t){let r=h.clone(y$);return r.controlPoints.getVolume=()=>t,r.controlPoints.defaultValue=BPe(t.grid),r.controlPoints.getPresets=()=>USt(t.grid),r}function ESt(e){return Vl({defaultProps:h.getDefaultValues(y$),createGeometry:ISt,createLocationIterator:$f,getLoci:hSt,eachLocation:ySt,setUpdateState:(t,r,n,o,i)=>{t.createGeometry=o.dataType!==i.dataType},geometryUtils:yl.Utils,dispose:t=>{t.gridTexture.ref.value.destroy()}},e)}function bSt(e,t){return Pg("Direct Volume",e,t,ESt,CSt)}var fPe={name:"direct-volume",label:"Direct Volume",description:"Direct rendering of volumetric data.",factory:bSt,getParams:QSt,defaultValues:h.getDefaultValues(y$),defaultColorTheme:{name:"volume-value"},defaultSizeTheme:{name:"uniform"},locationKinds:["position-location","direct-location"],isApplicable:e=>!Ze.isEmpty(e)&&!Ze.Segmentation.get(e)},Jl=.05,FE=.005,C$=.05,h$=.95;function BPe(e){let{min:t,max:r}=e.stats,n=r-t;if(n<=0||!isFinite(n))return Ng();let o=jr.getRobustStats(e,{ignoreZero:!0}),{mean:i,sigma:a,p99:A}=o;if(!isFinite(a)||a<=0||o.count===0)return Ng();let s=m=>$t((m-t)/n,.001,.999);if(t<0){let m=[],p=s(Math.min(i-3*a,-a)),d=s(-a),f=s(0),I=s(a),C=s(Math.max(i+3*a,a)),y=[p,d,f,I,C].sort((Q,E)=>Q-E);return m.push(Le.create(y[0],Jl)),m.push(Le.create(y[1],Jl*.5)),m.push(Le.create(y[2],0)),m.push(Le.create(y[3],Jl*.5)),m.push(Le.create(y[4],Jl)),m}let c=s(i),l=s(i+a),u=s(Math.min(i+3*a,A));return Q$(c,l,u,Jl)}function Q$(e,t,r,n){let i=$t(e,.001,.997),a=$t(t,i+.002,.998),A=$t(r,a+.002,.999);A-i<3*.002&&(a=i+.002,A=i+2*.002);let s=[];s.push(Le.create(i,0)),s.push(Le.create(a,n*.5)),s.push(Le.create(A,n));let c=$t(A+.002,A+1e-4,.9995);return s.push(Le.create(c,n)),s}function Ng(){return[Le.create(.19,0),Le.create(.2,Jl),Le.create(.25,Jl),Le.create(.26,0),Le.create(.79,0),Le.create(.8,Jl),Le.create(.85,Jl),Le.create(.86,0)]}function IPe(e,t,r,n){let{min:o,max:i}=e.stats,a=i-o;if(a<=0||!isFinite(a))return Ng();let A=jr.getRobustStats(e,{ignoreZero:!0}),{mean:s,sigma:c}=A;if(!isFinite(c)||c<=0||A.count===0)return Ng();let l=$t((s+t*c-o)/a,C$,h$),u=$t(r,FE+.001,.2),g=$t(l-u,.001,.999),m=$t(l-u+FE,.001,.999),p=$t(l+u-FE,.001,.999),d=$t(l+u,.001,.999);return g<m&&m<p&&p<d?[Le.create(g,0),Le.create(m,n),Le.create(p,n),Le.create(d,0)]:Ng()}function xSt(e){return IPe(e,2,.012,Jl)}function SSt(e){return IPe(e,3,.015,.08)}function DSt(e){let{min:t,max:r}=e.stats,n=r-t;if(n<=0||!isFinite(n))return Ng();let o=jr.getRobustStats(e,{ignoreZero:!0}),{mean:i,sigma:a}=o;if(!isFinite(a)||a<=0||o.count===0)return Ng();let A=u=>$t((u-t)/n,.001,.999),s=A(i-.5*a),c=A(i+.5*a),l=A(i+1.5*a);return Q$(s,c,l,Jl)}function vSt(e){let{min:t,max:r}=e.stats,n=r-t;if(n<=0||!isFinite(n))return Ng();let o=jr.getRobustStats(e,{ignoreZero:!0}),{mean:i,sigma:a,p1:A}=o;if(!isFinite(a)||a<=0||o.count===0)return Ng();let s=d=>$t((d-t)/n,.001,.999),c=s(Math.max(i-3*a,A)),l=s(i-a),u=s(i),g=$t(c,.001,.997),m=$t(l,g+.002,.998),p=$t(u,m+.002,.999);return[Le.create(g,Jl),Le.create(m,Jl*.5),Le.create(p,0)]}function FSt(e){let{min:t,max:r}=e.stats,n=r-t;if(n<=0||!isFinite(n)||t>=0)return Ng();let o=jr.getRobustStats(e,{ignoreZero:!0}),{mean:i,sigma:a}=o;if(!isFinite(a)||a<=0||o.count===0)return Ng();let A=u=>$t((u-t)/n,C$,h$),s=[A(i-3*a),A(i+3*a)];s.sort((u,g)=>u-g);let c=[],l=.012;s[1]-s[0]<2*(l+FE)&&(l=Math.max(FE+.001,(s[1]-s[0])/2-FE));for(let u of s){let g=$t(u,C$,h$),m=$t(g-l,.001,.999),p=$t(g-l+FE,.001,.999),d=$t(g+l-FE,.001,.999),f=$t(g+l,.001,.999);c.push(Le.create(m,0)),c.push(Le.create(p,Jl)),c.push(Le.create(d,Jl)),c.push(Le.create(f,0))}return c}function wSt(e){let{min:t,max:r}=e.stats,n=r-t;if(n<=0||!isFinite(n))return Ng();let o=jr.getRobustStats(e,{ignoreZero:!0}),{p1:i,p99:a}=o;if(!isFinite(a-i)||a<=i)return Ng();let A=g=>$t((g-t)/n,.001,.999),s=A(i),c=A(a),l=$t((s+c)*.5,s+.002,c-.002),u=[Le.create(s,0),Le.create(l,Jl*.5),Le.create(c,Jl)];return c<.997&&u.push(Le.create(.999,Jl)),u}function RSt(e){let{min:t,max:r}=e.stats,n=r-t;if(n<=0||!isFinite(n))return Ng();let o=jr.getRobustStats(e,{ignoreZero:!0}),{mean:i,sigma:a,p99:A}=o;if(!isFinite(a)||a<=0)return Ng();let s=g=>$t((g-t)/n,.001,.999),c=s(Math.max(i-a,t)),l=s(i+a),u=s(A);return Q$(c,l,u,.02)}function USt(e){let t=e._directVolumeControlPointsPresets;if(t)return t;let{min:r,max:n}=e.stats,o=r<0,i=[[BPe(e),"Ramp (auto)"],[xSt(e),"Sharp surface (~+2\u03C3)"],[SSt(e),"High contour (~+3\u03C3)"],[DSt(e),"Low contour (~+1\u03C3)"]];return(o||isFinite(n-r)&&e.stats.mean-r>n-e.stats.mean)&&i.push([vSt(e),"Tomogram (inverted)"]),o&&i.push([FSt(e),"Difference map (\xB13\u03C3)"]),i.push([wSt(e),"Occupancy / probability"]),i.push([RSt(e),"Wide volumetric"]),e._directVolumeControlPointsPresets=i,i}var LSt={segments:h.Converted(e=>e.map(t=>`${t}`),e=>e.map(t=>parseInt(t)),h.MultiSelect(["0"],h.arrayToOptions(["0"]),{isEssential:!0}))};function TSt(e){return e.extensions.colorBufferFloat&&e.extensions.textureFloat&&e.extensions.drawBuffers}var oL=1;function b$(e,t){if(e.grid.cells.data.length<Math.pow(10,3))return!1;let r=e.grid.cells.space.dimensions,{powerOfTwoSize:n}=Fp(r,oL);return n<=t.maxTextureSize/2}var PSt=Y();function CPe(e,t){let r=jr.getGridToCartesianTransform(e),n=Y.fromTranslation(PSt,t.min);return Y.mul(Y(),r,n)}function GSt(e,t,r,n,o){return n.tryUseGpu&&o&&TSt(o)&&b$(t,o)?YSt(e):HSt(e)}function NSt(e,t){let r=je.ofUnsortedArray(t.segments),n=Ue.ofLength(e.instances.length);return Ze.Segment.Loci(e,[{segments:r,instances:n}])}function hPe(e,t,r,n,o){let{objectId:i,groupId:a,instanceId:A}=e;if(o===i){let s=Ze.PickingGranularity.get(t),c=Ee.ofSingleton(A);if(s==="volume")return Ze.Loci(t,c);if(s==="object"||a===Ai.Null){let l=Ee.ofSingleton(r);return Ze.Segment.Loci(t,[{segments:l,instances:c}])}else{let l=Ue.ofSingleton(a);return Ze.Cell.Loci(t,[{indices:l,instances:c}])}}return Ir}function yPe(e,t,r,n,o){let i=je.ofSingleton(r);return qf(e,t,{segments:i},o)}function MSt(e,t,r){let n=r.data,o=r.space.dataOffset,i=Ct.size(B(),t),[a,A,s]=i,c=a-1,l=A-1,u=s-1,[g,m,p]=t.min,[d,f,I]=t.max,C=[...r.space.axisOrderSlowToFast],y=Fr.Space(i,C,Uint8Array),Q=Fr.create(y,y.create()),E=Q.data,b=y.set;for(let x=0;x<s;++x)for(let S=0;S<A;++S)for(let w=0;w<a;++w){let R=e.includes(n[o(w+g,S+m,x+p)])?255:0,T=e.includes(n[o(Math.min(c+d,w+1+g),S+m,x+p)])?255:0,L=e.includes(n[o(Math.max(0,w-1+g),S+m,x+p)])?255:0,F=e.includes(n[o(w+g,Math.min(l+f,S+1+m),x+p)])?255:0,v=e.includes(n[o(w+g,Math.max(0,S-1+m),x+p)])?255:0,U=e.includes(n[o(w+g,S+m,Math.min(u+I,x+1+p))])?255:0,G=e.includes(n[o(w+g,S+m,Math.max(0,x-1+p))])?255:0;b(E,w,S,x,Math.round((R+R+T+L+F+v+U+G)/8))}return Q}async function kSt(e,t,r,n,o,i){let a=Ze.Segmentation.get(t);if(!a)throw new Error("missing volume segmentation");e.runtime.update({message:"Marching cubes..."});let A=Ct.clone(a.bounds[r]);Ct.expand(A,A,B.create(2,2,2));let s=Array.from(a.segments.get(r).values()),c=MSt(s,A,t.grid.cells),l=QA(new Int32Array(c.data.length)),u=await gf({isoLevel:128,scalarField:c,idField:Fr.create(c.space,Fr.Data1(l))},i).runAsChild(e.runtime),g=CPe(t.grid,A);At.transform(u,g),e.webgl&&!e.webgl.isWebGL2?(At.uniformTriangleGroup(u,!1),D.updateIfChanged(u.varyingGroup,!1)):D.updateIfChanged(u.varyingGroup,!0);let m=Ue.ofLength(t.instances.length),p=Ee.ofSingleton(r);return u.setBoundingSphere(Ze.Segment.getBoundingSphere(t,[{segments:p,instances:m}])),u}var x$={...At.Params,...Fs.Params,...LSt,quality:{...At.Params.quality,isEssential:!1},tryUseGpu:h.Boolean(!0)};function HSt(e){return Vl({defaultProps:h.getDefaultValues(x$),createGeometry:kSt,createLocationIterator:(t,r)=>{let n=Ze.Segment.Location(t,r);return rn(t.grid.cells.data.length,t.instances?t.instances.length:1,1,()=>n)},getLoci:hPe,eachLocation:yPe,setUpdateState:(t,r,n,o,i)=>{},geometryUtils:At.Utils,mustRecreate:(t,r,n)=>r.tryUseGpu&&!!n&&b$(t.volume,n)},e)}var E$="segment-texture";function VSt(e,t,r){let n=Ze.Segmentation.get(e);if(!n)throw new Error("missing volume segmentation");let{resources:o}=r,i=Ct.clone(n.bounds[t]);Ct.expand(i,i,B.create(2,2,2));let a=CPe(e.grid,i),A=Ct.size(B(),i),{width:s,height:c,powerOfTwoSize:l}=Fp(A,oL),u=B.create(s,c,0),g=B.clone(A),m=Le.create(s/l,c/l);if(l>r.maxTextureSize/2)throw new Error("volume too large for gpu segment extraction");r.namedTextures[E$]||(r.namedTextures[E$]=o.texture("image-uint8","alpha","ubyte","linear"));let p=r.namedTextures[E$];p.define(l,l);let d=Array.from(n.segments.get(t).values());return p.load(nSe(e,d,i,oL),!0),A[0]+=oL,A[1]+=oL,{texture:p,transform:a,gridDimension:A,gridTexDim:u,gridDataDim:g,gridTexScale:m}}async function _St(e,t,r,n,o,i){if(!e.webgl)throw new Error("webgl context required to create volume segment texture-mesh");if(t.grid.cells.data.length<=1)return Fs.createEmpty(i);let{texture:a,gridDimension:A,gridTexDim:s,gridDataDim:c,gridTexScale:l,transform:u}=VSt(t,r,e.webgl),g=t.grid.cells.space.axisOrderSlowToFast,m=i?.doubleBuffer.get(),p=yx(e.webgl,a,A,s,c,l,u,.5,!1,!1,g,!0,m?.vertex,m?.group,m?.normal),d=t.grid.cells.data.length,f=Ue.ofLength(t.instances.length),I=Ee.ofSingleton(r),C=Ze.Segment.getBoundingSphere(t,[{segments:I,instances:f}]);return Fs.create(p.vertexCount,d,p.vertexTexture,p.groupTexture,p.normalTexture,C,i)}function YSt(e){return Vl({defaultProps:h.getDefaultValues(x$),createGeometry:_St,createLocationIterator:(t,r)=>{let n=Ze.Segment.Location(t,r);return rn(t.grid.cells.data.length,t.instances?t.instances.length:1,1,()=>n)},getLoci:hPe,eachLocation:yPe,setUpdateState:(t,r,n,o,i)=>{},geometryUtils:Fs.Utils,mustRecreate:(t,r,n)=>!r.tryUseGpu||!n||!b$(t.volume,n),dispose:t=>{t.vertexTexture.ref.value.destroy(),t.groupTexture.ref.value.destroy(),t.normalTexture.ref.value.destroy(),t.doubleBuffer.destroy()}},e)}function OSt(e,t){return je.ofUnsortedArray(e.segments)}var QPe={segment:(e,t)=>Pg("Segment mesh",e,t,GSt,NSt,OSt)},EPe={...x$,visuals:h.MultiSelect(["segment"],h.objectToOptions(QPe)),bumpFrequency:h.Numeric(1,{min:0,max:10,step:.1},ot.ShadingCategory)};function JSt(e,t){let r=h.clone(EPe),n=Ze.Segmentation.get(t);if(n){let o=Array.from(n.segments.keys());r.segments=h.Converted(i=>i.map(a=>`${a}`),i=>i.map(a=>parseInt(a)),h.MultiSelect(o.map(i=>`${i}`),h.arrayToOptions(o.map(i=>`${i}`)),{isEssential:!0}))}return r}function zSt(e,t){return Xt.createMulti("Segment",e,t,Xt.StateBuilder,QPe)}var bPe={name:"segment",label:"Segment",description:"Displays a triangulated segment of volumetric data.",factory:zSt,getParams:JSt,defaultValues:h.getDefaultValues(EPe),defaultColorTheme:{name:"volume-segment"},defaultSizeTheme:{name:"uniform"},isApplicable:e=>!Ze.isEmpty(e)&&!!Ze.Segmentation.get(e)};var SPe={isoValue:Ze.IsoValueParam,perturbPositions:h.Boolean(!1)},D$={...rA.Params,...At.Params,...SPe,tryUseImpostor:h.Boolean(!0),detail:h.Numeric(0,{min:0,max:3,step:1},ot.CustomQualityParamInfo)};function KSt(e,t,r,n,o){return n.tryUseImpostor&&o&&o.extensions.fragDepth&&o.extensions.textureFloat?jSt(e):WSt(e)}function jSt(e){return Vl({defaultProps:h.getDefaultValues(D$),createGeometry:XSt,createLocationIterator:$f,getLoci:w$,eachLocation:R$,setUpdateState:(t,r,n,o,i,a,A)=>{t.createGeometry=!Ze.IsoValue.areSame(o.isoValue,i.isoValue,r.grid.stats)||o.perturbPositions!==i.perturbPositions||o.lodLevels.length>0&&i.lodLevels.length===0},geometryUtils:rA.Utils,mustRecreate:(t,r,n)=>!r.tryUseImpostor||!n},e)}function WSt(e){return Vl({defaultProps:h.getDefaultValues(D$),createGeometry:ZSt,createLocationIterator:$f,getLoci:w$,eachLocation:R$,setUpdateState:(t,r,n,o,i,a,A)=>{t.createGeometry=!Ze.IsoValue.areSame(o.isoValue,i.isoValue,r.grid.stats)||o.perturbPositions!==i.perturbPositions||o.sizeFactor!==i.sizeFactor||o.detail!==i.detail},geometryUtils:At.Utils,mustRecreate:(t,r,n)=>r.tryUseImpostor&&!!n},e)}function v$(e){return{...Y.extractBasis(e),maxScale:Y.getMaxScaleOnAxis(e)}}var S$=new Yy,r1=B();function F$({x:e,y:t,z:r,maxScale:n}){let o=(S$.float()-.5)*n,i=(S$.float()-.5)*n,a=(S$.float()-.5)*n;return B.scale(r1,e,o),B.scaleAndAdd(r1,r1,t,i),B.scaleAndAdd(r1,r1,r,a),r1}function XSt(e,t,r,n,o,i){let{cells:{space:a,data:A},stats:s}=t.grid,c=jr.getGridToCartesianTransform(t.grid),l=Ze.IsoValue.toAbsolute(o.isoValue,s).absoluteValue,u=B(),[g,m,p]=a.dimensions,d=l<0,f=o.perturbPositions?v$(c):void 0,I=Math.ceil(g*m*p/10),C=Kp.create(I,Math.ceil(I/2),i),y=(b,x,S)=>{let w=a.get(A,b,x,S);if(!d&&w<l||d&&w>l)return;let R=a.dataOffset(b,x,S);B.set(u,b,x,S),B.transformMat4(u,u,c),f&&B.add(u,u,F$(f)),C.add(u[0],u[1],u[2],R)};if(o.lodLevels.length>0){let b=1;for(;b<g||b<m||b<p;)b<<=1;let x=(S,w,R,T)=>{if(S>=g||w>=m||R>=p)return;if(T===1){y(S,w,R);return}let L=T>>1;x(S,w,R,L),x(S,w,R+L,L),x(S,w+L,R,L),x(S,w+L,R+L,L),x(S+L,w,R,L),x(S+L,w,R+L,L),x(S+L,w+L,R,L),x(S+L,w+L,R+L,L)};x(0,0,0,b)}else for(let b=0;b<p;++b)for(let x=0;x<m;++x)for(let S=0;S<g;++S)y(S,x,b);let E=C.getSpheres();return E.setBoundingSphere(jr.getIsosurfaceBoundingSphere(t.grid,Ze.IsoValue.toAbsolute(o.isoValue,t.grid.stats).absoluteValue)),E}function ZSt(e,t,r,n,o,i){let{detail:a,sizeFactor:A}=o,{cells:{space:s,data:c},stats:l}=t.grid,u=jr.getGridToCartesianTransform(t.grid),g=Ze.IsoValue.toAbsolute(o.isoValue,l).absoluteValue,m=B(),[p,d,f]=s.dimensions,C=Math.ceil(p*d*f/10)*vm(a),y=We.createState(C,Math.ceil(C/2),i),Q=Ze.Cell.Location(t),E=n.size.size,b=g<0,x=o.perturbPositions?v$(u):void 0;for(let w=0;w<f;++w)for(let R=0;R<d;++R)for(let T=0;T<p;++T){let L=s.get(c,T,R,w);if(!b&&L<g||b&&L>g)continue;let F=s.dataOffset(T,R,w);Q.cell=F;let v=E(Q)*A;if(x){B.set(m,T,R,w),B.transformMat4(m,m,u);let U=F$(x);B.add(m,m,U)}else B.set(m,T,R,w),B.transformMat4(m,m,u);y.currentGroup=F,cn(y,m,v,a)}let S=We.getMesh(y);return S.setBoundingSphere(jr.getIsosurfaceBoundingSphere(t.grid,Ze.IsoValue.toAbsolute(o.isoValue,t.grid.stats).absoluteValue)),S}var DPe={...Ds.Params,...SPe};function qSt(e){return Vl({defaultProps:h.getDefaultValues(DPe),createGeometry:$St,createLocationIterator:$f,getLoci:w$,eachLocation:R$,setUpdateState:(t,r,n,o,i,a,A)=>{t.createGeometry=!Ze.IsoValue.areSame(o.isoValue,i.isoValue,r.grid.stats)||o.perturbPositions!==i.perturbPositions},geometryUtils:Ds.Utils},e)}function $St(e,t,r,n,o,i){let{cells:{space:a,data:A},stats:s}=t.grid,c=jr.getGridToCartesianTransform(t.grid),l=Ze.IsoValue.toAbsolute(o.isoValue,s).absoluteValue,u=B(),[g,m,p]=a.dimensions,d=Math.ceil(g*m*p/10),f=SE.create(d,Math.ceil(d/2),i),I=l<0,C=o.perturbPositions?v$(c):void 0;for(let Q=0;Q<p;++Q)for(let E=0;E<m;++E)for(let b=0;b<g;++b){let x=a.get(A,b,E,Q);if(!I&&x<l||I&&x>l)continue;let S=a.dataOffset(b,E,Q);if(C){B.set(u,b,E,Q),B.transformMat4(u,u,c);let w=F$(C);B.add(u,u,w)}else B.set(u,b,E,Q),B.transformMat4(u,u,c);f.add(u[0],u[1],u[2],S)}let y=f.getPoints();return y.setBoundingSphere(jr.getIsosurfaceBoundingSphere(t.grid,Ze.IsoValue.toAbsolute(o.isoValue,t.grid.stats).absoluteValue)),y}function xPe(e,t){let r=Ue.ofLength(e.instances.length);return Ze.Isosurface.Loci(e,t.isoValue,r)}function w$(e,t,r,n,o){let{objectId:i,groupId:a,instanceId:A}=e;if(o===i){let s=Ze.PickingGranularity.get(t),c=Ee.ofSingleton(A);if(s==="volume")return Ze.Loci(t,c);if(s==="object"||a===Ai.Null)return Ze.Isosurface.Loci(t,n.isoValue,c);{let l=Ue.ofSingleton(a);return Ze.Cell.Loci(t,[{indices:l,instances:c}])}}return Ir}function R$(e,t,r,n,o){return qf(e,t,{isoValue:n.isoValue},o)}var vPe={sphere:(e,t)=>Pg("Dot sphere",e,t,KSt,xPe),point:(e,t)=>Pg("Dot point",e,t,qSt,xPe)},FPe={...D$,...DPe,sizeFactor:h.Numeric(1,{min:0,max:10,step:.1}),visuals:h.MultiSelect(["sphere"],h.objectToOptions(vPe)),bumpFrequency:h.Numeric(1,{min:0,max:10,step:.1},ot.ShadingCategory)};function eDt(e,t){let r=h.clone(FPe);return r.isoValue=Ze.createIsoValueParam(Ze.IsoValue.relative(2),t.grid.stats),r}function tDt(e,t){return Xt.createMulti("Dot",e,t,Xt.StateBuilder,vPe)}var wPe={name:"dot",label:"Dot",description:"Displays dots of volumetric data.",factory:tDt,getParams:eDt,defaultValues:h.getDefaultValues(FPe),defaultColorTheme:{name:"uniform"},defaultSizeTheme:{name:"uniform"},locationKinds:["cell-location","position-location"],isApplicable:e=>!Ze.isEmpty(e)&&!Ze.Segmentation.get(e)};var wE=class e extends Pv{constructor(){super(),Bi(e.BuiltIn,(t,r)=>{if(t.name!==r)throw new Error(`Fix BuiltInVolumeRepresentations to have matching names. ${t.name} ${r}`);this.add(t)})}};(t=>t.BuiltIn={"direct-volume":fPe,dot:wPe,isosurface:cPe,segment:bPe,slice:mPe})(wE||={});var rDt=1e3/30,F_=class{constructor(t){this.plugin=t;this.lastTickT=0;this.properTimeT=0;this.currentFrame=void 0;this._isAnimating=!1;this.frame=(t,r)=>{let n=co(),o=n-this.lastTickT;this.lastTickT=n,this.properTimeT+=Math.min(o,rDt),this.tick(this.properTimeT,{xrFrame:r}),this._isAnimating&&(this.currentFrame=this.plugin.canvas3d?.requestAnimationFrame(this.frame))}}get isAnimating(){return this._isAnimating}async tick(t,r){if(await this.plugin.managers.animation.tick(t,r?.isSynchronous,r?.animation),this.plugin.canvas3d?.tick(t,r),at){let n=this.plugin.canvas3d?.webgl.timer.resolve();if(n)for(let o of n)J2([o])}}resetTime(t){this.plugin.canvas3d?.resetTime(t)}start(t){this.plugin.canvas3d?.resume(),this._isAnimating=!0,this.resetTime(0),this.properTimeT=0,this.lastTickT=co(),t?.immediate?this.frame():this.currentFrame=this.plugin.canvas3d?.requestAnimationFrame(this.frame)}stop(t){this._isAnimating=!1,this.currentFrame!==void 0&&(this.plugin.canvas3d?.cancelAnimationFrame(this.currentFrame),this.currentFrame=void 0),t?.noDraw&&this.plugin.canvas3d?.pause(t?.noDraw)}};var w_=class{constructor(t){this.plugin=t;this.ev=Fg.create();this.events={updated:this.ev(),removed:this.ev()};this.root=new Map;this.tracked=new Map;t.state.data.events.object.created.subscribe(r=>{this.addMapping(r.state,r.ref,r.obj)}),t.state.data.events.object.removed.subscribe(r=>{this.removeMapping(r.ref)&&this.events.removed.next({ref:r.ref,obj:r.obj})}),t.state.data.events.object.updated.subscribe(r=>{this.updateMapping(r.state,r.ref,r.oldObj,r.obj)&&this.events.updated.next({ref:r.ref,oldObj:r.oldObj,obj:r.obj})})}getDecorator(t){let r=this.plugin.state.data.tree,n=r.children.get(t);if(n.size!==1)return t;let o=n.first();return o&&r.transforms.get(o).transformer.definition.isDecorator?this.getDecorator(o):t}get(t,r=!1){let n=this.root.get(t);if(n)return r?this.plugin.state.data.cells.get(n.ref):this.plugin.state.data.cells.get(this.getDecorator(n.ref))}addMapping(t,r,n){if(!te.Molecule.Structure.is(n))return!1;if(this.tracked.set(r,n.data),this.root.has(n.data)){let o=this.root.get(n.data);o.count++}else{let o=t.select(fr.Generators.byRef(r).rootOfType([te.Molecule.Structure]))[0];o?this.root.set(n.data,{ref:o.transform.ref,count:1}):this.root.set(n.data,{ref:r,count:1})}return!0}removeMapping(t){if(!this.tracked.has(t))return!1;let r=this.tracked.get(t);this.tracked.delete(t);let n=this.root.get(r);return n.count>1?n.count--:this.root.delete(r),!0}updateMapping(t,r,n,o){return te.Molecule.Structure.is(o)?(this.removeMapping(r),this.addMapping(t,r,o),!0):!1}dispose(){this.ev.dispose()}};var n1=class{constructor(){this.ev=Fg.create();this.id=0;this.runningTasks=new Set;this.abortRequests=new Map;this.options=new Map;this.currentContext=[];this.events={progress:this.ev(),finished:this.ev()}}tryGetAbortTaskId(t){if(this.abortRequests.has(t.progress.taskId))return t.progress.taskId;for(let r of t.children){let n=this.tryGetAbortTaskId(r);if(n!==void 0)return n}}track(t,r){return n=>{if(n.canAbort&&n.requestAbort){let i=this.tryGetAbortTaskId(n.root);i!==void 0&&n.requestAbort(this.abortRequests.get(i))}let o=co()-n.root.progress.startedTime;this.events.progress.next({id:t,useOverlay:this.options.get(r)?.useOverlay,level:o<250?"none":"background",progress:n})}}async run(t,r){let n=this.id++,o;r?.createNewContext||this.currentContext.length===0?o={ctx:jce(t,this.track(n,t.id),100),refCount:1}:(o=this.currentContext[this.currentContext.length-1],o.refCount++);try{return this.options.set(t.id,{useOverlay:!!r?.useOverlay}),this.runningTasks.add(t.id),await lG(o.ctx,t)}finally{this.options.delete(t.id),this.runningTasks.delete(t.id),this.events.finished.next({id:n}),this.abortRequests.delete(t.id),o.refCount--,o.refCount===0&&Tf(this.currentContext,o)}}requestAbortAll(t){this.runningTasks.forEach(r=>this.abortRequests.set(r,t))}requestAbort(t,r){let n=typeof t=="number"?t:t.root.progress.taskId;this.abortRequests.set(n,r)}dispose(){this.ev.dispose()}};(r=>{function e(n){return new Promise(o=>setTimeout(o,n))}function t(n){return ve.create("Test",async o=>{let i=0;for(;i<n;)await e(100+Math.random()*200),o.shouldUpdate&&await o.update({message:"Step "+i,current:i,max:n,isIndeterminate:!1}),i++})}r.testTask=t})(n1||={});var R_=class extends Ec{constructor(r){super({entries:Cc()});this.events={changed:this.ev()};this.serialNumber=0;this.serialId=0;yt.Toast.Show.subscribe(r,n=>this.show(n)),yt.Toast.Hide.subscribe(r,n=>this.hide(this.findByKey(n.key)))}findByKey(r){return this.state.entries.find(n=>!!n&&n.key===r)}show(r){let n=this.state.entries,o,i=++this.serialId,a;r.key&&(o=this.findByKey(r.key))?(o.timeout!==void 0&&clearTimeout(o.timeout),a=o.serialNumber,n=n.remove(o.id)):a=++this.serialNumber,o={id:i,serialNumber:a,key:r.key,title:r.title,message:r.message,timeout:this.timeout(i,r.timeoutMs),hide:()=>this.hideId(i)},this.updateState({entries:n.set(i,o)})&&this.events.changed.next(void 0)}timeout(r,n){if(n!==void 0)return n<0&&(n=500),setTimeout(()=>{let o=this.state.entries.get(r);o.timeout=void 0,this.hide(o)},n)}hideId(r){this.hide(this.state.entries.get(r))}hide(r){r&&(r.timeout!==void 0&&clearTimeout(r.timeout),r.hide=void 0,this.updateState({entries:this.state.entries.delete(r.id)})&&this.events.changed.next(void 0))}};function nDt(){let e=document.createElement("canvas");return e.getContext&&e.getContext("2d")?e.toDataURL("image/webp").indexOf("data:image/webp")===0:!1}var U_=class extends du{constructor(r){super();this.plugin=r;this._params=void 0;this.behaviors={values:this.ev.behavior({transparent:this.params.transparent.defaultValue,format:{name:"png",params:{}},axes:{name:"off",params:{}},resolution:this.params.resolution.defaultValue,illumination:this.params.illumination.defaultValue}),cropParams:this.ev.behavior({auto:!0,relativePadding:.1}),relativeCrop:this.ev.behavior({x:0,y:0,width:1,height:1})};this.events={previewed:this.ev()};this.canvas=(function(){return document.createElement("canvas")})();this.previewCanvas=(function(){return document.createElement("canvas")})();this.previewData={image:{data:new Uint8ClampedArray(1),width:1,height:0},background:0,transparent:!1}}createParams(){let r=8192;if(this.plugin.canvas3d){let{webgl:n}=this.plugin.canvas3d;r=Math.floor(Math.min(n.maxRenderbufferSize,n.maxTextureSize)/2)}return{resolution:h.MappedStatic("viewport",{viewport:h.Group({}),hd:h.Group({}),"full-hd":h.Group({}),"ultra-hd":h.Group({}),"8k-ultra-hd":h.Group({}),custom:h.Group({width:h.Numeric(1920,{min:128,max:r,step:1}),height:h.Numeric(1080,{min:128,max:r,step:1})},{isFlat:!0})},{options:[["viewport","Viewport"],["hd","HD (1280 x 720)"],["full-hd","Full HD (1920 x 1080)"],["ultra-hd","Ultra HD (3840 x 2160)"],["8k-ultra-hd","8K Ultra HD (7680 x 4320)"],["custom","Custom"]]}),format:h.MappedStatic("png",{png:h.Group({}),webp:h.Group({quality:h.Numeric(.9,{min:0,max:1,step:.01})}),jpeg:h.Group({quality:h.Numeric(.9,{min:0,max:1,step:.01})})},{options:[["png","PNG"],["jpeg","JPEG"],...nDt()?[["webp","WebP"]]:[]]}),transparent:h.Boolean(!1),axes:YQ.axes,illumination:h.Group({extraIterations:h.Numeric(1,{min:0,max:5,step:1}),targetIterationTimeMs:h.Numeric(300,{min:100,max:3e3,step:10})})}}get params(){return this._params?this._params:this._params=this.createParams()}get values(){return this.behaviors.values.value}get cropParams(){return this.behaviors.cropParams.value}get relativeCrop(){return this.behaviors.relativeCrop.value}getCanvasSize(){return{width:this.plugin.canvas3d?.webgl.gl.drawingBufferWidth||0,height:this.plugin.canvas3d?.webgl.gl.drawingBufferHeight||0}}getSize(){let r=this.values;switch(r.resolution.name){case"viewport":return this.getCanvasSize();case"hd":return{width:1280,height:720};case"full-hd":return{width:1920,height:1080};case"ultra-hd":return{width:3840,height:2160};case"8k-ultra-hd":return{width:7680,height:4320};default:return{width:r.resolution.params.width,height:r.resolution.params.height}}}getPostprocessingProps(){let r=this.plugin.canvas3d,n=r.props.postprocessing.occlusion;return{...r.props.postprocessing,occlusion:n.name==="on"?{name:"on",params:{...n.params,samples:128,resolutionScale:r.webgl.pixelRatio,transparentThreshold:1}}:n}}getIlluminationProps(r){let o=this.plugin.canvas3d.props.illumination,{extraIterations:i,targetIterationTimeMs:a}=this.values.illumination;return{...o,enabled:r?!1:o.enabled,maxIterations:Math.ceil(Math.log2(Math.pow(2,o.maxIterations+i)*o.rendersPerFrame[1])),targetFps:1e3/a,denoiseThreshold:[o.denoiseThreshold[0],o.denoiseThreshold[0]],rendersPerFrame:[1,1]}}createPass(r){let n=this.plugin.canvas3d,{colorBufferFloat:o,textureFloat:i}=n.webgl.extensions;return n.getImagePass({transparentBackground:this.values.transparent,cameraHelper:{axes:this.values.axes},multiSample:{...n.props.multiSample,mode:r?"off":"on",sampleLevel:o&&i?4:2,reuseOcclusion:!1},postprocessing:this.getPostprocessingProps(),marking:{...n.props.marking},illumination:this.getIlluminationProps(r)})}get previewPass(){return this._previewPass||(this._previewPass=this.createPass(!0))}get imagePass(){if(this._imagePass){let r=this.plugin.canvas3d;return this._imagePass.setProps({cameraHelper:{axes:this.values.axes},transparentBackground:this.values.transparent,postprocessing:this.getPostprocessingProps(),marking:{...r.props.marking},illumination:this.getIlluminationProps(!1)}),this._imagePass}return this._imagePass=this.createPass(!1)}getFilename(r){typeof r!="string"&&(r=this.extension);let n=this.plugin.state.data.select(fr.Generators.rootsOfType(te.Molecule.Model)).map(a=>a.obj.data),o=new Set;return n.forEach(a=>o.add(a.entryId.toUpperCase())),`${lo.toArray(o).join("-")||"molstar-image"}${r}`}resetCrop(){this.behaviors.relativeCrop.next({x:0,y:0,width:1,height:1})}toggleAutocrop(){this.cropParams.auto?(this.behaviors.cropParams.next({...this.cropParams,auto:!1}),this.resetCrop()):this.behaviors.cropParams.next({...this.cropParams,auto:!0})}get isFullFrame(){let r=this.relativeCrop;return So(r.x,0,1e-5)&&So(r.y,0,1e-5)&&So(r.width,1,1e-5)&&So(r.height,1,1e-5)}autocrop(r=this.cropParams.relativePadding){let{data:n,width:o,height:i}=this.previewData.image,a=this.previewData.transparent,A=a?this.previewData.background:4278190080|this.previewData.background,s=o,c=0,l=i,u=0;for(let d=0;d<i;d++){let f=d*o;for(let I=0;I<o;I++){let C=4*(f+I);if(a){if(n[C+3]===0)continue}else if((n[C]<<16|n[C+1]<<8|n[C+2]|n[C+3]<<24)===A)continue;I<s&&(s=I),I>c&&(c=I),d<l&&(l=d),d>u&&(u=d)}}if(s>c){let d=s;s=c,c=d}if(l>u){let d=l;l=u,u=d}let g=c-s+1,m=u-l+1;s-=r*g,c+=r*g,l-=r*m,u+=r*m;let p={x:Math.max(0,s/o),y:Math.max(0,l/i),width:Math.min(1,(c-s+1)/o),height:Math.min(1,(u-l+1)/i)};this.behaviors.relativeCrop.next(p)}async getPreview(r,n=320){let{width:o,height:i}=this.getSize();if(o<=0||i<=0)return;let a=o/i,A=0,s=0;a>1?(A=n,s=Math.round(n/a)):(s=n,A=Math.round(n*a));let c=this.plugin.canvas3d.props;this.previewPass.setProps({cameraHelper:{axes:this.values.axes},transparentBackground:this.values.transparent,postprocessing:c.postprocessing,marking:c.marking});let l=await this.previewPass.getImageData(r,A,s),u=this.previewCanvas;u.width=l.width,u.height=l.height,this.previewData.image=l,this.previewData.background=c.renderer.backgroundColor,this.previewData.transparent=this.values.transparent;let g=u.getContext("2d");if(!g)throw new Error("Could not create canvas 2d context");return g.putImageData(l,0,0),this.cropParams.auto&&this.autocrop(),this.events.previewed.next(void 0),{canvas:u,width:A,height:s}}getSizeAndViewport(){let{width:r,height:n}=this.getSize(),o=this.relativeCrop,i={x:Math.floor(o.x*r),y:Math.floor(o.y*n),width:Math.ceil(o.width*r),height:Math.ceil(o.height*n)};return i.width+i.x>r&&(i.width=r-i.x),i.height+i.y>n&&(i.height=n-i.y),{width:r,height:n,viewport:i}}async draw(r){let{width:n,height:o,viewport:i}=this.getSizeAndViewport();if(!(n<=0||o<=0)){this.plugin.animationLoop.stop({noDraw:!0});try{await r.update("Rendering image...");let a=this.imagePass;await a.updateBackground();let A=await a.getImageData(r,n,o,i);await r.update("Encoding image...");let s=this.canvas;s.width=A.width,s.height=A.height;let c=s.getContext("2d");if(!c)throw new Error("Could not create canvas 2d context");c.putImageData(A,0,0)}finally{this.plugin.animationLoop.start({immediate:!0})}}}copyToClipboardTask(){let r=navigator.clipboard;if(!r?.write){this.plugin.log.error("clipboard.write not supported!");return}return ve.create("Copy Image",async n=>{await this.draw(n),await n.update("Converting image...");let o=this.mimeType,i=await gU(this.canvas,o,this.quality),a=new ClipboardItem({[o]:i});await r.write([a]),this.plugin.log.message("Image copied to clipboard.")})}get mimeType(){return`image/${this.values.format?.name??"png"}`}get extension(){return this.values.format?.name==="jpeg"?".jpg":`.${this.values.format?.name??"png"}`}get quality(){switch(this.values.format?.name){case"webp":case"jpeg":return this.values.format?.params?.quality??.9;default:return}}getImageDataUri(){return this.plugin.runTask(ve.create("Generate Image",async r=>(await this.draw(r),await r.update("Converting image..."),this.canvas.toDataURL(this.mimeType))))}copyToClipboard(){let r=this.copyToClipboardTask();if(r)return this.plugin.runTask(r)}downloadTask(r){return ve.create("Download Image",async n=>{await this.draw(n),await n.update("Downloading image...");let o=await gU(this.canvas,this.mimeType,this.quality);uB(o,r??this.getFilename(this.extension))})}download(r){return this.plugin.runTask(this.downloadTask(r),{useOverlay:!0})}};var U$={};ki(U$,{DownloadFile:()=>iL,OpenFiles:()=>Qx});async function L_(e,t,r,n){let o=_h(e.file?.name??""),i=t.dataFormats.binaryExtensions.has(o.ext),{data:a}=await t.builders.data.readFile({file:e,isBinary:i}),A=r==="auto"?t.dataFormats.auto(o,a.cell?.obj):t.dataFormats.get(r);if(!A){t.log.warn(`OpenFiles: could not find data provider for '${o.ext}'`),await t.state.data.build().delete(a).commit();return}let s=await A.parse(t,a);n&&await A.visuals?.(t,s)}var Qx=Pa.build({display:{name:"Open Files",description:"Load one or more files and optionally create default visuals"},from:te.Root,params:(e,t)=>{let{extensions:r,options:n}=t.dataFormats;return{files:h.FileList({accept:Array.from(r.values()).map(o=>`.${o}`).join(",")+",.gz,.zip",multiple:!0}),format:h.MappedStatic("auto",{auto:h.EmptyGroup(),specific:h.Select(n[0][0],n)}),visuals:h.Boolean(!0,{description:"Add default visuals"})}}})(({params:e,state:t},r)=>ve.create("Open Files",async n=>{r.behaviors.layout.leftPanelTabName.next("data"),await t.transaction(async()=>{if(e.files===null){r.log.error("No file(s) selected");return}for(let o of e.files)try{if(o.file&&o.name.toLowerCase().endsWith(".zip")){let i=await oQ(n,await o.file.arrayBuffer());for(let[a,A]of Object.entries(i)){if(!(A instanceof Uint8Array)||A.length===0)continue;let s=gn.File(new File([A],a));await L_(s,r,"auto",e.visuals)}}else{let i=e.format.name==="auto"?"auto":e.format.params;await L_(o,r,i,e.visuals)}}catch(i){console.error(i),r.log.error(`Error opening file '${o.name}'`)}}).runInContext(n)})),iL=Pa.build({display:{name:"Download File",description:"Load one or more file from an URL"},from:te.Root,params:(e,t)=>{let r=[...t.dataFormats.options,["zip","Zip"],["gzip","Gzip"]];return{url:h.Url(""),format:h.Select(r[0][0],r),isBinary:h.Boolean(!1),visuals:h.Boolean(!0,{description:"Add default visuals"})}}})(({params:e,state:t},r)=>ve.create("Open Files",async n=>{r.behaviors.layout.leftPanelTabName.next("data"),await t.transaction(async()=>{try{if(e.format==="zip"||e.format==="gzip"){let o=await r.builders.data.download({url:e.url,isBinary:!0});if(e.format==="zip"){let i=await oQ(n,(o.obj?.data).buffer);for(let[a,A]of Object.entries(i)){if(!(A instanceof Uint8Array)||A.length===0)continue;let s=gn.File(new File([A],a));await L_(s,r,"auto",e.visuals)}}else{let i=gn.getUrl(e.url),a=_h(i).name;await L_(gn.File(new File([o.obj?.data],a)),r,"auto",e.visuals)}}else{let o=r.dataFormats.get(e.format);if(!o){r.log.warn(`DownloadFile: could not find data provider for '${e.format}'`);return}let i=await r.builders.data.download({url:e.url,isBinary:e.isBinary}),a=await o.parse(r,i);e.visuals&&await o.visuals?.(r,a)}}catch(o){console.error(o),r.log.error(`Error downloading '${typeof e.url=="string"?e.url:e.url.url}'`)}}).runInContext(n)}));var T_=class{constructor(t){this.plugin=t;this.handlers=[]}addHandler(t,r){let n=this.handlers.findIndex(o=>o[0]===t);n<0?this.handlers.push([t,r]):this.handlers[n][1]=r}removeHandler(t){let r=this.handlers.findIndex(n=>n[0]===t);r>=0&&this.handlers.splice(r,1)}async handle(t){for(let r=this.handlers.length-1;r>=0;r--){let n=this.handlers[r][1];if(await n(t,this.plugin))return}oDt(this.plugin,t)}dispose(){this.handlers.length=0}};function oDt(e,t){let r=t.filter(n=>{let o=n.name.toLowerCase();return o.endsWith(".molx")||o.endsWith(".molj")});r.length>0?yt.State.Snapshots.OpenFile(e,{file:r[0]}):e.runTask(e.state.data.applyAction(Qx,{files:t.map(n=>gn.File(n)),format:{name:"auto",params:{}},visuals:!0}))}var P_=class{constructor(){this.errors=Object.create(null)}get(t){return this.errors[t]??[]}add(t,r){t in this.errors&&Array.isArray(this.errors[t])?this.errors[t].push(r):this.errors[t]=[r]}clear(t){delete this.errors[t]}};var G_=class{constructor(t){this.options=t;let r=document.createElement("div");Object.assign(r.style,{position:"absolute",left:0,top:0,right:0,bottom:0,"-webkit-user-select":"none","user-select":"none","-webkit-tap-highlight-color":"rgba(0,0,0,0)","-webkit-touch-callout":"none","touch-action":"manipulation"});let n=t?.canvas;n||(n=document.createElement("canvas"),r.appendChild(n)),this.canvas=n,this.parent=r}mount(t){this.parent.parentElement!==t&&this.parent.parentElement?.removeChild(this.parent),t.appendChild(this.parent)}unmount(){this.parent.parentElement?.removeChild(this.parent)}};var RE=class{constructor(t){this.spec=t;this.runTask=(t,r)=>this.managers.task.run(t,r);this.resolveTask=t=>{if(t)return ve.is(t)?this.runTask(t):t};this.subs=[];this.initCanvas3dPromiseCallbacks=[()=>{},()=>{}];this._isInitialized=!1;this.initializedPromiseCallbacks=[()=>{},()=>{}];this.disposed=!1;this.container=void 0;this.ev=Fg.create();this.config=new iV(this.spec.config);this.state=new kl(this);this.commands=new GV;this.canvas3dInit=this.ev.behavior(!1);this.behaviors={state:{isAnimating:this.ev.behavior(!1),isUpdating:this.ev.behavior(!1),isBusy:this.ev.behavior(!1)},interaction:{hover:this.ev.behavior({current:Xt.Loci.Empty,modifiers:as.None,buttons:0,button:0}),click:this.ev.behavior({current:Xt.Loci.Empty,modifiers:as.None,buttons:0,button:0}),drag:this.ev.behavior({current:Xt.Loci.Empty,modifiers:as.None,buttons:0,button:0,pageStart:Le(),pageEnd:Le()}),key:this.ev.behavior(q8),keyReleased:this.ev.behavior(q8),selectionMode:this.ev.behavior(!1)},labels:{highlight:this.ev.behavior({labels:[]})},layout:{leftPanelTabName:this.ev.behavior("root")},canvas3d:{initialized:this.canvas3dInit.pipe(gI(t=>!!t),l9(1))}};this.canvas3dInitialized=new Promise((t,r)=>{this.initCanvas3dPromiseCallbacks=[t,r]});this.initialized=new Promise((t,r)=>{this.initializedPromiseCallbacks=[t,r]});this.layout=new Q3(this);this.animationLoop=new F_(this);this.representation={structure:{registry:new t1,themes:{colorThemeRegistry:KA.createRegistry(),sizeThemeRegistry:Qi.createRegistry()}},volume:{registry:new wE,themes:{colorThemeRegistry:KA.createRegistry(),sizeThemeRegistry:Qi.createRegistry()}}};this.query={structure:{registry:new dH}};this.dataFormats=new l3;this.builders={data:new oV(this),structure:void 0};this.helpers={substructureParent:new w_(this),viewportScreenshot:void 0};this.managers={structure:{hierarchy:new zp(this),component:new Jp(this),measurement:new C3(this),selection:new d3(this),focus:new p3(this)},volume:{hierarchy:new sE(this)},interactivity:void 0,camera:new g3(this),animation:new u3(this),snapshot:new Hp(this),lociLabels:void 0,toast:new R_(this),asset:new lN,task:new n1,markdownExtensions:new y3(this),dragAndDrop:new T_(this)};this.events={log:this.ev(),task:this.managers.task.events,canvas3d:{settingsUpdated:this.ev()}};this.customModelProperties=new mU.Registry;this.customStructureProperties=new mU.Registry;this.customVolumeProperties=new mU.Registry;this.customStructureControls=new Map;this.customImportControls=new Map;this.genericRepresentationControls=new Map;this.errorContext=new P_;this.customState=Object.create(null);this.handleResize=()=>{let t=this.canvas3dContext?.canvas,r=this.layout.root;r&&t&&(xFe(t,r,this.canvas3dContext.pixelScale),this.canvas3dContext.syncPixelScale(),this.canvas3d?.requestResize())};this.log={entries:xI(),entry:t=>this.events.log.next(t),error:t=>this.events.log.next(Wf.error(t)),message:t=>this.events.log.next(Wf.message(t)),info:t=>this.events.log.next(Wf.info(t)),warn:t=>this.events.log.next(Wf.warning(t))};this.fetch=c0;Pue(this.config.get(jt.Structure.SaccharideCompIdMapType)??"default")}get isInitialized(){return this._isInitialized}build(){return this.state.data.build()}async initViewerAsync(t,r,n){return this._initViewer(t,r,n)}async initContainerAsync(t){return this._initContainer(t)}async mountAsync(t,r){return this._mount(t,r)}_initContainer(t){if(this.container)return!0;let r=new G_({checkeredCanvasBackground:t?.checkeredCanvasBackground,canvas:t?.canvas3dContext?.canvas});return this._initViewer(r.canvas,r.parent,t?.canvas3dContext)?(t?.checkeredCanvasBackground&&this.canvas3d?.setProps({checkeredTransparentBackground:!0}),this.container=r,!0):!1}_mount(t,r){if(this.disposed)throw new Error("Cannot mount a disposed context");return this._initContainer(r)?(this.container?.mount(t),this.handleResize(),!0):!1}unmount(){this.container?.unmount()}_initViewer(t,r,n){try{this.layout.setRoot(r),this.spec.layout&&this.spec.layout.initial&&this.layout.setProps(this.spec.layout.initial),n||(n=aB.fromCanvas(t,this.managers.asset,{antialias:!(this.config.get(jt.General.DisableAntialiasing)??!1),preserveDrawingBuffer:!(this.config.get(jt.General.DisablePreserveDrawingBuffer)??!1),preferWebGl1:this.config.get(jt.General.PreferWebGl1)||!1,failIfMajorPerformanceCaveat:!(this.config.get(jt.General.AllowMajorPerformanceCaveat)??!1),powerPreference:this.config.get(jt.General.PowerPreference)||"high-performance",handleResize:this.handleResize},{pixelScale:this.config.get(jt.General.PixelScale)||1,pickScale:this.config.get(jt.General.PickScale)||.25,transparency:this.config.get(jt.General.Transparency)||"wboit",resolutionMode:this.config.get(jt.General.ResolutionMode)||"auto"})),this.canvas3dContext=n,this.canvas3d=sZ.create(this.canvas3dContext),this.canvas3dInit.next(!0);let o=this.spec.canvas3d,i=16579577;return o?(o.renderer?.backgroundColor===void 0&&(o=Wc(o,a=>{a.renderer?a.renderer.backgroundColor=i:a.renderer={backgroundColor:i}})),this.canvas3d?.setProps(o)):this.canvas3d?.setProps({renderer:{backgroundColor:i}}),this.animationLoop.start(),this.helpers.viewportScreenshot=new U_(this),this.subs.push(this.canvas3d.interaction.click.subscribe(a=>this.behaviors.interaction.click.next(a))),this.subs.push(this.canvas3d.interaction.drag.subscribe(a=>this.behaviors.interaction.drag.next(a))),this.subs.push(this.canvas3d.interaction.hover.subscribe(a=>this.behaviors.interaction.hover.next(a))),this.subs.push(this.canvas3d.input.resize.pipe(cp(50),jc(100,void 0,{leading:!1,trailing:!0})).subscribe(()=>this.handleResize())),this.subs.push(this.canvas3d.input.keyDown.subscribe(a=>this.behaviors.interaction.key.next(a))),this.subs.push(this.canvas3d.input.keyUp.subscribe(a=>this.behaviors.interaction.keyReleased.next(a))),this.subs.push(this.canvas3d.xr.isPresenting.subscribe(a=>this.log.info(`WebXR ${a?"enabled":"disabled"}`))),this.subs.push(this.canvas3d.xr.requestFailed.subscribe(a=>this.log.error(`WebXR request failed: ${a}`))),this.subs.push(this.layout.events.updated.subscribe(()=>requestAnimationFrame(()=>this.handleResize()))),this.handleResize(),Pf.setImmediate(()=>this.initCanvas3dPromiseCallbacks[0]()),!0}catch(o){return this.log.error(""+o),console.error(o),Pf.setImmediate(()=>this.initCanvas3dPromiseCallbacks[1](o)),!1}}get isBusy(){return this.behaviors.state.isAnimating.value||this.behaviors.state.isUpdating.value}get selectionMode(){return this.behaviors.interaction.selectionMode.value}set selectionMode(t){this.behaviors.interaction.selectionMode.next(t)}dataTransaction(t,r){return this.runTask(this.state.data.transaction(t,r))}clear(t=!1){return t&&this.canvas3d?.setProps(Sd),yt.State.RemoveObject(this,{state:this.state.data,ref:en.RootRef})}dispose(t){if(!this.disposed){for(let r of this.subs)r.unsubscribe();this.subs=[],this.layout.dispose(),this.managers.markdownExtensions.audio.dispose(),this.animationLoop.stop(),this.commands.dispose(),this.canvas3d?.dispose(),t?.doNotDisposeCanvas3DContext||this.canvas3dContext?.dispose(t),this.ev.dispose(),this.state.dispose(),this.helpers.substructureParent.dispose(),Bi(this.managers,r=>r?.dispose?.()),Bi(this.managers.structure,r=>r?.dispose?.()),Bi(this.managers.volume,r=>r?.dispose?.()),this.unmount(),this.container=void 0,this.customState={},this.disposed=!0}}initBehaviorEvents(){this.subs.push(ml(this.state.data.behaviors.isUpdating,this.state.behaviors.behaviors.isUpdating).subscribe(a=>{this.behaviors.state.isUpdating.value!==a&&this.behaviors.state.isUpdating.next(a)}));let t=this.config.get(jt.General.IsBusyTimeoutMs)||750,r=this.behaviors.state.isBusy,n,o=()=>{r.value||r.next(!0)},i=()=>{n!==void 0&&clearTimeout(n),n=void 0};this.subs.push(ml(this.behaviors.state.isUpdating,this.behaviors.state.isAnimating).subscribe(a=>{let A=this.behaviors.state.isUpdating.value,s=this.behaviors.state.isAnimating.value;A||s?r.value||(i(),n=setTimeout(o,t)):(i(),r.next(!1))})),this.subs.push(this.behaviors.interaction.selectionMode.subscribe(a=>{a||this.managers.interactivity?.lociSelects.deselectAll()}))}initBuiltInBehavior(){UU.State.registerDefault(this),UU.Representation.registerDefault(this),UU.Camera.registerDefault(this),UU.Misc.registerDefault(this),this.subs.push(ml(this.state.data.events.log,this.state.behaviors.events.log).subscribe(t=>this.events.log.next(t)))}async initBehaviors(){let t=this.state.behaviors.build();for(let r of Object.keys(er.Categories))t.toRoot().apply(er.CreateCategory,{label:er.Categories[r]},{ref:r,state:{isLocked:!0}});for(let r of this.spec.behaviors)er.getCategoryId(r.transformer)==="custom-props"&&t.to(er.getCategoryId(r.transformer)).apply(r.transformer,r.defaultParams,{ref:r.transformer.id});await this.runTask(this.state.behaviors.updateTree(t,{doNotUpdateCurrent:!0,doNotLogTiming:!0})),t=this.state.behaviors.build();for(let r of this.spec.behaviors)er.getCategoryId(r.transformer)!=="custom-props"&&t.to(er.getCategoryId(r.transformer)).apply(r.transformer,r.defaultParams,{ref:r.transformer.id});await this.runTask(this.state.behaviors.updateTree(t,{doNotUpdateCurrent:!0,doNotLogTiming:!0}))}initCustomFormats(){if(this.spec.customFormats)for(let t of this.spec.customFormats)this.dataFormats.add(t[0],t[1])}initAnimations(){if(!this.spec.animations?.length){this.managers.animation.register(qI);return}for(let t of this.spec.animations)this.managers.animation.register(t)}initDataActions(){if(this.spec.actions)for(let t of this.spec.actions)this.state.data.actions.add(t.action)}async init(){try{this.subs.push(this.events.log.subscribe(t=>this.log.entries=this.log.entries.push(t))),this.initCustomFormats(),this.initBehaviorEvents(),this.initBuiltInBehavior(),this.managers.interactivity=new aE(this),this.managers.lociLabels=new m3(this),this.builders.structure=new i3(this),this.initAnimations(),this.initDataActions(),await this.initBehaviors(),this.log.message(`Mol* Plugin ${kp} [${lwe.toLocaleString()}]`),td||this.log.message("Development mode enabled"),ir&&this.log.message("Debug mode enabled"),this._isInitialized=!0,this.initializedPromiseCallbacks[0]()}catch(t){throw this.initializedPromiseCallbacks[1](t),t}}};var UE=class extends RE{constructor(r){super(r);this.spec=r;this.customParamEditors=new Map;this.customUIState={};this.initCustomParamEditors()}initCustomParamEditors(){if(this.spec.customParamEditors)for(let[r,n]of this.spec.customParamEditors)this.customParamEditors.set(r.id,n)}dispose(r){super.dispose(r),this.layout.dispose()}};var RPe=bc.create({name:"built-in.animate-assembly-unwind",display:{name:"Unwind Assembly"},isExportable:!0,params:e=>{let t=[["all","All"]],r=e.state.data.select(fr.Generators.rootsOfType(te.Molecule.Structure));for(let n of r)t.push([n.transform.ref,n.obj.data.models[0].label]);return{durationInMs:h.Numeric(3e3,{min:100,max:1e4,step:100}),playOnce:h.Boolean(!1),target:h.Select(t[0][0],t)}},canApply(e){let t=e.state.data,r=en.RootRef;return{canApply:t.select(fr.Generators.ofType(te.Molecule.Structure.Representation3D,r)).length>0}},getDuration:e=>({kind:"fixed",durationMs:e.durationInMs}),initialState:()=>({t:0}),setup(e,t,r){let n=r.state.data,o=!e.target||e.target==="all"?en.RootRef:e.target,i=n.select(fr.Generators.ofType(te.Molecule.Structure.Representation3D,o)),a=n.build(),A=!1;for(let s of i)n.select(fr.Generators.ofTransformer(ze.Representation.UnwindStructureAssemblyRepresentation3D,s.transform.ref)).length>0||(A=!0,a.to(s).apply(ze.Representation.UnwindStructureAssemblyRepresentation3D,{t:0},{tags:"animate-assembly-unwind"}));if(A)return a.commit({doNotUpdateCurrent:!0})},teardown(e,t,r){let n=r.state.data,o=n.select(fr.Generators.ofType(te.Molecule.Structure.Representation3DState).withTag("animate-assembly-unwind"));if(o.length===0)return;let i=n.build();for(let a of o)i.delete(a.transform.ref);return i.commit()},async apply(e,t,r){let n=r.plugin.state.data,o=!r.params.target||r.params.target==="all"?en.RootRef:r.params.target,i=n.select(fr.Generators.ofTransformer(ze.Representation.UnwindStructureAssemblyRepresentation3D,o));if(i.length===0)return{kind:"finished"};let a=n.build(),A=(t.current-t.lastApplied)/r.params.durationInMs,s=e.t+A,c=!1;r.params.playOnce&&s>=1?(c=!0,s=1):s=s%1;for(let l of i)a.to(l).update({t:s});return await yt.State.Update(r.plugin,{state:n,tree:a,options:{doNotLogTiming:!0}}),c?{kind:"finished"}:{kind:"next",state:{t:s}}}});var aL=B(),ey=B(),L$=gr(),Ex=B(),o1=B(),UPe=bc.create({name:"built-in.animate-camera-spin",display:{name:"Camera Spin",description:"Spin the 3D scene around the x-axis in view space"},isExportable:!0,params:()=>({durationInMs:h.Numeric(4e3,{min:100,max:2e4,step:100}),speed:h.Numeric(1,{min:1,max:10,step:1},{description:"How many times to spin in the specified duration."}),axis:h.Vec3(B.create(0,-1,0),{},{description:"Axis of rotation in camera space"})}),initialState:(e,t)=>({snapshot:t.canvas3d?.camera.getSnapshot()}),getDuration:e=>({kind:"fixed",durationMs:e.durationInMs}),teardown:(e,t,r)=>{r.canvas3d?.requestCameraReset({snapshot:t.snapshot,durationMs:0})},async apply(e,t,r){if(t.current===0)return{kind:"next",state:e};let n=e.snapshot;if(n.radiusMax<1e-4)return{kind:"finished"};let o=t.animation?t.animation?.currentFrame/(t.animation.frameCount+1):$t(t.current/r.params.durationInMs,0,1),i=2*Math.PI*o*r.params.speed;B.sub(aL,n.position,n.target),B.normalize(ey,aL),B.normalize(Ex,n.up),B.cross(o1,Ex,ey),B.normalize(o1,o1);let a=r.params.axis??B.create(0,-1,0);B.set(ey,a[0]*o1[0]+a[1]*Ex[0]+a[2]*ey[0],a[0]*o1[1]+a[1]*Ex[1]+a[2]*ey[1],a[0]*o1[2]+a[1]*Ex[2]+a[2]*ey[2]),B.normalize(ey,ey),gr.setAxisAngle(L$,ey,i),B.transformQuat(aL,aL,L$),B.transformQuat(Ex,n.up,L$);let A=B.add(B(),n.target,aL);return r.plugin.canvas3d?.requestCameraReset({snapshot:{...n,position:A,up:Ex},durationMs:0}),o>=.99999?{kind:"finished"}:{kind:"next",state:e}}});var LPe=bc.create({name:"built-in.animate-model-index",display:{name:"Animate Trajectory"},isExportable:!0,params:()=>({mode:h.MappedStatic("loop",{palindrome:h.Group({}),loop:h.Group({direction:h.Select("forward",[["forward","Forward"],["backward","Backward"]])}),once:h.Group({direction:h.Select("forward",[["forward","Forward"],["backward","Backward"]])},{isFlat:!0})},{options:[["palindrome","Palindrome"],["loop","Loop"],["once","Once"]]}),duration:h.MappedStatic("fixed",{fixed:h.Group({durationInS:h.Numeric(5,{min:1,max:120,step:.1},{description:"Duration in seconds"})},{isFlat:!0}),computed:h.Group({targetFps:h.Numeric(30,{min:5,max:250,step:1},{label:"Target FPS"})},{isFlat:!0}),sequential:h.Group({maxFps:h.Numeric(30,{min:5,max:60,step:1})},{isFlat:!0})})}),canApply(e){let t=e.state.data,r=t.select(fr.Generators.ofTransformer(ze.Model.ModelFromTrajectory));for(let n of r){let o=fr.findAncestorOfType(t.tree,t.cells,n.transform.ref,te.Molecule.Trajectory);if(o&&o.obj&&o.obj.data.frameCount>1)return{canApply:!0}}return{canApply:!1,reason:"No trajectory to animate"}},getDuration:(e,t)=>{if(e.duration?.name==="fixed")return{kind:"fixed",durationMs:e.duration.params.durationInS*1e3};if(e.duration.name==="computed"){let r=t.state.data,n=r.select(fr.Generators.ofTransformer(ze.Model.ModelFromTrajectory)),o=0;for(let i of n){let a=fr.findAncestorOfType(r.tree,r.cells,i.transform.ref,te.Molecule.Trajectory);if(!a||!a.obj)continue;let A=a.obj;o=Math.max(Math.ceil(1e3*A.data.frameCount/e.duration.params.targetFps),o)}return{kind:"fixed",durationMs:o}}return{kind:"unknown"}},initialState:()=>({}),async apply(e,t,r){if(r.params.duration.name==="sequential"&&t.current>0&&t.current-t.lastApplied<1e3/r.params.duration.params.maxFps)return{kind:"skip"};let n=r.plugin.state.data,o=n.select(fr.Generators.ofTransformer(ze.Model.ModelFromTrajectory));if(o.length===0)return{kind:"finished"};let i=n.build(),a=r.params,A=e.palindromeDirections||{},s=!1,c=!0;for(let l of o){let u=fr.findAncestorOfType(n.tree,n.cells,l.transform.ref,te.Molecule.Trajectory);if(!u||!u.obj)continue;let g=u.obj;g.data.frameCount<=1||i.to(l).update(m=>{let p=g.data.frameCount;if(p!==1)c=!1;else return m;if(a.duration.name==="sequential"){let d=1;if(a.mode.name==="once"){if(d=a.mode.params.direction==="backward"?-1:1,d===-1&&m.modelIndex===0||d===1&&m.modelIndex===p-1)return s=!0,m}else a.mode.name==="palindrome"&&(m.modelIndex===0?d=1:m.modelIndex===p-1?d=-1:d=A[l.transform.ref]||1);A[l.transform.ref]=d;let f=(m.modelIndex+d)%p;return f<0&&(f+=p),s=s||d===-1&&f===0||d===1&&f===p-1,{modelIndex:f}}else{let d=a.duration.name==="fixed"?a.duration.params.durationInS*1e3:Math.ceil(1e3*g.data.frameCount/a.duration.params.targetFps);if(a.mode.name==="once"&&t.current>=d)return s=!0,{modelIndex:g.data.frameCount-1};let f=t.current%d/d;return a.mode.name==="loop"&&a.mode.params.direction==="backward"&&(f=1-f),a.mode.name==="palindrome"&&(f=2*f,f>1&&(f=2-f)),{modelIndex:Math.min(Math.floor(g.data.frameCount*f),g.data.frameCount-1)}}})}return c||await yt.State.Update(r.plugin,{state:n,tree:i,options:{doNotLogTiming:!0}}),c||a.mode.name==="once"&&s?{kind:"finished"}:a.mode.name==="palindrome"?{kind:"next",state:{palindromeDirections:A}}:{kind:"next",state:{}}}});var P$={};ki(P$,{AddTrajectory:()=>uDt,DownloadStructure:()=>Mg,EnableModelCustomProps:()=>cDt,EnableStructureCustomProps:()=>lDt,LoadTrajectory:()=>T$,PdbDownloadProvider:()=>N_,UpdateTrajectory:()=>AL});var iDt=e=>{let t=e.config.get(jt.Structure.DefaultRepresentationPreset)||ni.auto.id;return h.Group({type:Lh.getParams(void 0,"auto").type,representation:h.Select(t,e.builders.structure.representation.getPresets().map(r=>[r.id,r.display.name,r.display.group]),{description:"Which representation preset to use."}),representationParams:h.Group(ri.CommonParams,{isHidden:!0}),asTrajectory:h.Optional(h.Boolean(!1,{description:"Load all entries into a single trajectory."}))},{isExpanded:!1})},N_={rcsb:h.Group({encoding:h.Select("bcif",h.arrayToOptions(["cif","bcif"]))},{label:"RCSB PDB",isFlat:!0}),pdbe:h.Group({variant:h.Select("updated-bcif",[["updated-bcif","Updated (bcif)"],["updated","Updated"],["archival","Archival"]])},{label:"PDBe",isFlat:!0}),pdbj:h.EmptyGroup({label:"PDBj"})};var Mg=Pa.build({from:te.Root,display:{name:"Download Structure",description:"Load a structure from the provided source and create its representation."},params:(e,t)=>{let r=iDt(t),n=t.config.get(jt.Download.DefaultPdbProvider)||"pdbe";return{source:h.MappedStatic("pdb",{pdb:h.Group({provider:h.Group({id:h.Text("1tqn",{label:"PDB Id(s)",description:"One or more comma/space separated PDB ids."}),server:h.MappedStatic(n,N_)},{pivot:"id"}),options:r},{isFlat:!0,label:"PDB"}),"pdb-ihm":h.Group({provider:h.Group({id:h.Text("8zzc",{label:"PDB-IHM Id(s)",description:"One or more comma/space separated ids."}),encoding:h.Select("bcif",h.arrayToOptions(["cif","bcif"]))},{pivot:"id"}),options:r},{isFlat:!0,label:"PDB-IHM"}),swissmodel:h.Group({id:h.Text("Q9Y2I8",{label:"UniProtKB AC(s)",description:"One or more comma/space separated ACs."}),options:r},{isFlat:!0,label:"SWISS-MODEL",description:"Loads the best homology model or experimental structure"}),alphafolddb:h.Group({provider:h.Group({id:h.Text("Q8W3K0",{label:"ID(s)",description:"One or more comma/space separated IDs. Each ID can be either UniProt accession (e.g. Q14676, Q14676-2) or AlphaFoldDB model entity ID (e.g. AF-Q14676-F1, AF-Q14676-2-F1, AF-0000000066074510). Version suffixes (e.g. -v1) will be ignored and the newest model version will be downloaded."}),encoding:h.Select("bcif",h.arrayToOptions(["cif","bcif"]))},{pivot:"id"}),options:r},{isFlat:!0,label:"AlphaFold DB",description:"Loads the predicted model if available"}),modelarchive:h.Group({id:h.Text("ma-bak-cepc-0003",{label:"Accession Code(s)",description:"One or more comma/space separated ACs."}),options:r},{isFlat:!0,label:"Model Archive"}),pubchem:h.Group({id:h.Text("2244,2245",{label:"PubChem ID",description:"One or more comma/space separated IDs."}),options:r},{isFlat:!0,label:"PubChem",description:"Loads 3D conformer from PubChem."}),url:h.Group({url:h.Url(""),format:h.Select("mmcif",h.arrayToOptions(A3.map(o=>o[0]),o=>o)),isBinary:h.Boolean(!1),label:h.Optional(h.Text("")),options:r},{isFlat:!0,label:"URL"})})}}})(({params:e,state:t},r)=>ve.create("Download Structure",async n=>{r.behaviors.layout.leftPanelTabName.next("data");let o=e.source,i,a=!1,A="mmcif";switch(o.name){case"url":i=[{url:o.params.url,isBinary:o.params.isBinary,label:o.params.label||void 0}],A=o.params.format;break;case"pdb":i=await(o.params.provider.server.name==="pdbe"?aDt(o):o.params.provider.server.name==="pdbj"?ADt(o):o.params.provider.server.name==="rcsb"?sDt(o):Or(o)),a=!!o.params.options.asTrajectory;break;case"pdb-ihm":let u=g=>g.startsWith("PDBDEV_")?g:`PDBDEV_${g.padStart(8,"0")}`;i=await IB(o.params.provider.id,g=>{if(g.match(/^[1-9][A-Z0-9]{3}$/i)!==null)return o.params.provider.encoding==="bcif"?`https://pdb-ihm.org/bcif/${g.toLowerCase()}.bcif`:`https://pdb-ihm.org/cif/${g.toLowerCase()}.cif`;let m=u(g.toUpperCase());return o.params.provider.encoding==="bcif"?`https://pdb-ihm.org/bcif/${m}.bcif`:`https://pdb-ihm.org/cif/${m}.cif`},g=>{let m=g.toUpperCase();return m.match(/^[1-9][A-Z0-9]{3}$/)?`PDB-IHM: ${m}`:u(m)},o.params.provider.encoding==="bcif"),a=!!o.params.options.asTrajectory;break;case"swissmodel":i=await IB(o.params.id,g=>`https://swissmodel.expasy.org/repository/uniprot/${g.toUpperCase()}.pdb`,g=>`SWISS-MODEL: ${g}`,!1),a=!!o.params.options.asTrajectory,A="pdb";break;case"alphafolddb":i=await IB(o.params.provider.id,async g=>{let p=`https://www.alphafold.ebi.ac.uk/api/prediction/${g.replace(/-v\d+$/i,"").toUpperCase()}`,d=await r.runTask(r.fetch({url:p,type:"json"}));if(Array.isArray(d)&&d.length>0){let f=o.params.provider.encoding==="bcif"?"bcifUrl":"cifUrl";return d[0][f]}throw new Error(`No AlphaFold DB entry for '${g}'`)},g=>`AlphaFold DB: ${g}`,o.params.provider.encoding==="bcif"),a=!!o.params.options.asTrajectory,A="mmcif";break;case"modelarchive":i=await IB(o.params.id,g=>`https://www.modelarchive.org/doi/10.5452/${g.toLowerCase()}.cif`,g=>`Model Archive: ${g}`,!1),a=!!o.params.options.asTrajectory,A="mmcif";break;case"pubchem":i=await IB(o.params.id,g=>`https://pubchem.ncbi.nlm.nih.gov/rest/pug/compound/CID/${g.trim()}/record/SDF/?record_type=3d`,g=>`PubChem: ${g}`,!1),a=!!o.params.options.asTrajectory,A="mol";break;default:Or(o)}let s=e.source.params.options.representation||r.config.get(jt.Structure.DefaultRepresentationPreset)||ni.auto.id,c=s!==ni.empty.id,l=o.params.options.type.name==="auto"?void 0:o.params.options.type;await t.transaction(async()=>{if(i.length>0&&a){let u=await r.builders.data.downloadBlob({sources:i.map((m,p)=>({id:""+p,url:m.url,isBinary:m.isBinary})),maxConcurrency:6},{state:{isGhost:!0}}),g=await r.builders.structure.parseTrajectory(u,{formats:i.map((m,p)=>({id:""+p,format:"cif"}))});await r.builders.structure.hierarchy.applyPreset(g,"default",{structure:l,showUnitcell:c,representationPreset:s,representationPresetParams:e.source.params.options.representationParams})}else for(let u of i){let g=await r.builders.data.download(u,{state:{isGhost:!0}}),m=r.dataFormats.get(A);if(!m)throw new Error("unknown file format");let p=await r.builders.structure.parseTrajectory(g,m);await r.builders.structure.hierarchy.applyPreset(p,"default",{structure:l,showUnitcell:c,representationPreset:s,representationPresetParams:e.source.params.options.representationParams})}}).runInContext(n)}));async function IB(e,t,r,n){let o=e.split(/[,\s]/).map(a=>a.trim()).filter(a=>!!a&&(a.length>=4||/^[1-9][0-9]*$/.test(a))),i=[];for(let a of o)i.push({url:gn.Url(await t(a)),isBinary:n,label:r(a)});return i}async function aDt(e){if(e.name!=="pdb"||e.params.provider.server.name!=="pdbe")throw new Error("expected pdbe");return e.params.provider.server.params.variant==="updated"?IB(e.params.provider.id,t=>`https://www.ebi.ac.uk/pdbe/static/entry/${t.toLowerCase()}_updated.cif`,t=>`PDBe: ${t} (updated cif)`,!1):e.params.provider.server.params.variant==="updated-bcif"?IB(e.params.provider.id,t=>`https://www.ebi.ac.uk/pdbe/entry-files/download/${t.toLowerCase()}.bcif`,t=>`PDBe: ${t} (updated cif)`,!0):IB(e.params.provider.id,t=>`https://www.ebi.ac.uk/pdbe/static/entry/${t.toLowerCase()}.cif`,t=>`PDBe: ${t} (cif)`,!1)}async function ADt(e){if(e.name!=="pdb"||e.params.provider.server.name!=="pdbj")throw new Error("expected pdbj");return IB(e.params.provider.id,t=>`https://data.pdbjlc1.pdbj.org/pub/pdb/data/structures/divided/mmCIF/${t.toLowerCase().substring(1,3)}/${t.toLowerCase()}.cif`,t=>`PDBj: ${t} (cif)`,!1)}async function sDt(e){if(e.name!=="pdb"||e.params.provider.server.name!=="rcsb")throw new Error("expected rcsb");return e.params.provider.server.params.encoding==="cif"?IB(e.params.provider.id,t=>`https://files.rcsb.org/download/${t.toUpperCase()}.cif`,t=>`RCSB PDB: ${t} (cif)`,!1):IB(e.params.provider.id,t=>`https://models.rcsb.org/${t.toUpperCase()}.bcif`,t=>`RCSB PDB: ${t} (bcif)`,!0)}var AL=Pa.build({display:{name:"Update Trajectory"},params:{action:h.Select("advance",h.arrayToOptions(["advance","reset"])),by:h.Optional(h.Numeric(1,{min:-1,max:1,step:1}))}})(({params:e,state:t})=>{let r=t.selectQ(o=>o.ofTransformer(ze.Model.ModelFromTrajectory)),n=t.build();if(e.action==="reset")for(let o of r)n.to(o).update({modelIndex:0});else for(let o of r){let i=fr.findAncestorOfType(t.tree,t.cells,o.transform.ref,te.Molecule.Trajectory);if(!i||!i.obj)continue;let a=i.obj;n.to(o).update(A=>{let s=(A.modelIndex+e.by)%a.data.frameCount;return s<0&&(s+=a.data.frameCount),{modelIndex:s}})}return t.updateTree(n)}),cDt=Pa.build({display:{name:"Custom Model Properties",description:"Enable parameters for custom properties of the model."},from:te.Molecule.Model,params(e,t){return t.customModelProperties.getParams(e?.data)},isApplicable(e,t,r){return t.transformer!==OR}})(({ref:e,params:t},r)=>r.builders.structure.insertModelProperties(e,t)),lDt=Pa.build({display:{name:"Custom Structure Properties",description:"Enable parameters for custom properties of the structure."},from:te.Molecule.Structure,params(e,t){return t.customStructureProperties.getParams(e?.data)},isApplicable(e,t,r){return t.transformer!==JR}})(({ref:e,params:t},r)=>r.builders.structure.insertStructureProperties(e,t)),uDt=Pa.build({display:{name:"Add Trajectory",description:"Add trajectory from existing model/topology and coordinates."},from:te.Root,params(e,t){let r=t.state.data,o=[...r.selectQ(A=>A.rootsOfType(te.Molecule.Model)),...r.selectQ(A=>A.rootsOfType(te.Molecule.Topology))].map(A=>[A.transform.ref,A.obj.label]),a=r.selectQ(A=>A.rootsOfType(te.Molecule.Coordinates)).map(A=>[A.transform.ref,A.obj.label]);return{model:h.Select(o.length?o[0][0]:"",o),coordinates:h.Select(a.length?a[0][0]:"",a)}}})(({params:e,state:t},r)=>ve.create("Add Trajectory",n=>t.transaction(async()=>{let o=[e.model,e.coordinates],i=t.build().toRoot().apply(Iv,{modelRef:e.model,coordinatesRef:e.coordinates},{dependsOn:o}).apply(ze.Model.ModelFromTrajectory,{modelIndex:0});await t.updateTree(i).runInContext(n);let a=await r.builders.structure.createStructure(i.selector);await r.builders.structure.representation.applyPreset(a,"auto")}).runInContext(n))),T$=Pa.build({display:{name:"Load Trajectory",description:"Load trajectory of model/topology and coordinates from URL or file."},from:te.Root,params(e,t){let{options:r}=t.dataFormats,n=r.filter(A=>A[2]===el||A[2]===iE),o=r.filter(A=>A[2]===aC),i=[],a=[];for(let{provider:A}of t.dataFormats.list)A.category===el||A.category===iE?(A.binaryExtensions&&i.push(...A.binaryExtensions),A.stringExtensions&&i.push(...A.stringExtensions)):A.category===aC&&(A.binaryExtensions&&a.push(...A.binaryExtensions),A.stringExtensions&&a.push(...A.stringExtensions));return{source:h.MappedStatic("file",{url:h.Group({model:h.Group({url:h.Url(""),format:h.Select(n[0][0],n),isBinary:h.Boolean(!1)},{isExpanded:!0}),coordinates:h.Group({url:h.Url(""),format:h.Select(o[0][0],o)},{isExpanded:!0})},{isFlat:!0}),file:h.Group({model:h.File({accept:i.map(A=>`.${A}`).join(","),label:"Model"}),coordinates:h.File({accept:a.map(A=>`.${A}`).join(","),label:"Coordinates"})},{isFlat:!0})},{options:[["url","URL"],["file","File"]]})}}})(({params:e,state:t},r)=>ve.create("Load Trajectory",n=>t.transaction(async()=>{let o=e.source;if(o.name==="file"&&(o.params.model===null||o.params.coordinates===null)){r.log.error("No file(s) selected");return}if(o.name==="url"&&(!o.params.model||!o.params.coordinates)){r.log.error("No URL(s) given");return}let i=async(A,s,c)=>{let l=await r.builders.data.download({url:A,isBinary:c}),u=r.dataFormats.get(s);if(!u){r.log.warn(`LoadTrajectory: could not find data provider for '${s}'`);return}return u.parse(r,l)},a=async A=>{if(!A)throw new Error("No file selected");let s=_h(A.file?.name??""),c=r.dataFormats.binaryExtensions.has(s.ext),{data:l}=await r.builders.data.readFile({file:A,isBinary:c}),u=r.dataFormats.auto(s,l.cell?.obj);if(!u){r.log.warn(`LoadTrajectory: could not find data provider for '${s.ext}'`),await r.state.data.build().delete(l).commit();return}return u.parse(r,l)};try{let A=o.name==="url"?await i(o.params.model.url,o.params.model.format,o.params.model.isBinary):await a(o.params.model),s;"trajectory"in A?s=await t.build().to(A.trajectory).apply(YR,{modelIndex:0}).commit():s=A.topology;let c=o.name==="url"?await i(o.params.coordinates.url,o.params.coordinates.format,!0):await a(o.params.coordinates),l=t.build().toRoot().apply(Iv,{modelRef:s.ref,coordinatesRef:c.ref}).apply(ze.Model.ModelFromTrajectory,{modelIndex:0});await t.updateTree(l).runInContext(n);let u=await r.builders.structure.createStructure(l.selector);await r.builders.structure.representation.applyPreset(u,"auto")}catch(A){console.error(A),r.log.error("Error loading trajectory")}}).runInContext(n)));var N$={};ki(N$,{AssignColorVolume:()=>G$,DownloadDensity:()=>sL});var sL=Pa.build({from:te.Root,display:{name:"Download Density",description:"Load a density from the provided source and create its default visual."},params:(e,t)=>{let{options:r}=t.dataFormats;return{source:h.MappedStatic("pdb-xray",{"pdb-xray":h.Group({provider:h.Group({id:h.Text("1tqn",{label:"Id"}),server:h.Select("pdbe",[["pdbe","PDBe"]])},{pivot:"id"}),type:h.Select("2fofc",[["2fofc","2Fo-Fc"],["fofc","Fo-Fc"]])},{isFlat:!0}),"pdb-xray-ds":h.Group({provider:h.Group({id:h.Text("1tqn",{label:"Id"}),server:h.Select("pdbe",[["pdbe","PDBe"],["rcsb","RCSB PDB"]])},{pivot:"id"}),detail:h.Numeric(3,{min:0,max:6,step:1},{label:"Detail"})},{isFlat:!0}),"pdb-emd-ds":h.Group({provider:h.Group({id:h.Text("emd-8004",{label:"Id"}),server:h.Select("pdbe",[["pdbe","PDBe"],["rcsb","RCSB PDB"]])},{pivot:"id"}),detail:h.Numeric(3,{min:0,max:6,step:1},{label:"Detail"})},{isFlat:!0}),url:h.Group({url:h.Url(""),isBinary:h.Boolean(!1),format:h.Select("auto",r)},{isFlat:!0})},{options:[["pdb-xray","PDB X-ray maps"],["pdb-emd-ds","PDB EMD Density Server"],["pdb-xray-ds","PDB X-ray Density Server"],["url","URL"]]})}}})(({params:e},t)=>ve.create("Download Density",async r=>{let n=e.source,o,i;switch(n.name){case"url":o=n.params;break;case"pdb-xray":o={url:gn.Url(n.params.type==="2fofc"?`https://www.ebi.ac.uk/pdbe/coordinates/files/${n.params.provider.id.toLowerCase()}.ccp4`:`https://www.ebi.ac.uk/pdbe/coordinates/files/${n.params.provider.id.toLowerCase()}_diff.ccp4`),isBinary:!0,label:`PDBe X-ray map: ${n.params.provider.id}`};break;case"pdb-emd-ds":o=n.params.provider.server==="pdbe"?{url:gn.Url(`https://www.ebi.ac.uk/pdbe/densities/emd/${n.params.provider.id.toLowerCase()}/cell?detail=${n.params.detail}`),isBinary:!0,label:`PDBe EMD Density Server: ${n.params.provider.id}`}:{url:gn.Url(`https://maps.rcsb.org/em/${n.params.provider.id.toLowerCase()}/cell?detail=${n.params.detail}`),isBinary:!0,label:`RCSB PDB EMD Density Server: ${n.params.provider.id}`};break;case"pdb-xray-ds":o=n.params.provider.server==="pdbe"?{url:gn.Url(`https://www.ebi.ac.uk/pdbe/densities/x-ray/${n.params.provider.id.toLowerCase()}/cell?detail=${n.params.detail}`),isBinary:!0,label:`PDBe X-ray Density Server: ${n.params.provider.id}`}:{url:gn.Url(`https://maps.rcsb.org/x-ray/${n.params.provider.id.toLowerCase()}/cell?detail=${n.params.detail}`),isBinary:!0,label:`RCSB PDB X-ray Density Server: ${n.params.provider.id}`};break;default:Or(n)}let a=await t.builders.data.download(o),A;switch(n.name){case"url":o=n.params,i=n.params.format==="auto"?t.dataFormats.auto(_h(gn.getUrl(o.url)),a.cell?.obj):t.dataFormats.get(n.params.format);break;case"pdb-xray":A=n.params.provider.id,i=t.dataFormats.get("ccp4");break;case"pdb-emd-ds":case"pdb-xray-ds":A=n.params.provider.id,i=t.dataFormats.get("dscif");break;default:Or(n)}if(!i){t.log.warn("DownloadDensity: Format provider not found.");return}let s=await i.parse(t,a,{entryId:A});await i.visuals?.(t,s)})),G$=Pa.build({display:{name:"Assign Volume Colors",description:"Assigns another volume to be available for coloring."},from:te.Volume.Data,isApplicable(e){return!e.data.colorVolume},params(e,t){let r=t.state.data.select(fr.Generators.root.subtree().ofType(te.Volume.Data).filter(n=>!!n.obj&&!n.obj?.data.colorVolume&&n.obj!==e));return r.length===0?{ref:h.Text("",{isHidden:!0,label:"Volume"})}:{ref:h.Select(r[0].transform.ref,r.map(n=>[n.transform.ref,n.obj.label]),{label:"Volume"})}}})(({ref:e,params:t,state:r},n)=>n.build().to(e).apply(ze.Volume.AssignColorVolume,{ref:t.ref},{dependsOn:[t.ref]}).commit());var CC={Structure:P$,Volume:N$,DataFormat:U$};var i1=class extends te.Create({name:"Volume Streaming",typeClass:"Object"}){},gDt;(t=>{let e;(o=>(o.Float32="float32",o.Int8="int8"))(e=t.ValueType||={})})(gDt||={});function TPe(e,t,r){return{dataId:t,source:e==="em"?{name:"em",params:{isoValue:Ze.IsoValue.absolute(r||0)}}:{name:"x-ray",params:{}}}}async function GPe(e,t,r,n,o){let i=[];for(let a of e){let A=a.toLowerCase();if(t==="em"){let s;A.startsWith("emd")?s=[A]:(await o.update("Getting EMDB info..."),s=await G2e(n,o,A));for(let c of s){let l;try{l=await P2e(r,n,o,c)}catch(u){console.info(`Could not get map info for ${c}: ${u}`);continue}i.push(TPe(t,c,l||0))}}else i.push(TPe(t,A,0))}return i}var cL=Pa.build({display:{name:"Volume Streaming"},from:te.Molecule.Structure,params(e,t){let r=c3(e&&e.data),n=Sq(r,e&&e.data);return{method:h.Select(r,[["em","EM"],["x-ray","X-Ray"]]),entries:h.ObjectList({id:h.Text(n[0]||"")},({id:o})=>o,{defaultValue:n.map(o=>({id:o}))}),defaultView:h.Select(r==="em"?"auto":"selection-box",Is.ViewTypeOptions),options:h.Group({serverUrl:h.Text(t.config.get(jt.VolumeStreaming.DefaultServer)||"https://ds.litemol.org"),behaviorRef:h.Text("",{isHidden:!0}),emContourProvider:h.Select("emdb",[["emdb","EMDB"],["pdbe","PDBe"]],{isHidden:!0}),channelParams:h.Value({},{isHidden:!0})})}},isApplicable:(e,t,r)=>{let n=r.config.get(jt.VolumeStreaming.CanStream);return n?n(e.data,r):e.data.models.length===1&&_t.probablyHasDensityMap(e.data.models[0])}})(({ref:e,state:t,params:r},n)=>ve.create("Volume Streaming",async o=>{let i=await GPe(r.entries.map(u=>u.id),r.method,r.options.emContourProvider,n,o),a=t.build().to(e).applyOrUpdateTagged(Is.RootTag,M$,{serverUrl:r.options.serverUrl,entries:i});await a.commit();let A=a.selector;if(!A.isOk)return;let s=t.tree.children.get(A.ref);s?.size>0&&await n.managers.structure.hierarchy.remove(s?.toArray());let c=A.cell.obj,l=t.build().to(a.ref).apply(bx,h.getDefaultValues(Is.createParams({data:c.data,defaultView:r.defaultView,channelParams:r.options.channelParams})),{ref:r.options.behaviorRef?r.options.behaviorRef:void 0});r.method==="em"?l.apply(ty,{channel:"em"},{state:{isGhost:!0},tags:"em"}):(l.apply(ty,{channel:"2fo-fc"},{state:{isGhost:!0},tags:"2fo-fc"}),l.apply(ty,{channel:"fo-fc(+ve)"},{state:{isGhost:!0},tags:"fo-fc(+ve)"}),l.apply(ty,{channel:"fo-fc(-ve)"},{state:{isGhost:!0},tags:"fo-fc(-ve)"})),await t.updateTree(l).runInContext(o)})),NPe=Pa.build({display:{name:"Boxify Volume Streaming",description:"Make the current box permanent."},from:Is,isApplicable:e=>e.data.params.entry.params.view.name==="selection-box"})(({a:e,ref:t,state:r},n)=>{let o=e.data.params;if(o.entry.params.view.name!=="selection-box")return;let i=Ct.create(B.clone(o.entry.params.view.params.bottomLeft),B.clone(o.entry.params.view.params.topRight)),a=o.entry.params.view.params.radius;Ct.expand(i,i,B.create(a,a,a));let A={...o,entry:{name:o.entry.name,params:{...o.entry.params,view:{name:"box",params:{bottomLeft:i.min,topRight:i.max}}}}};return r.updateTree(r.build().to(t).update(A))}),mDt={dataId:h.Text(""),source:h.MappedStatic("x-ray",{em:h.Group({isoValue:Ze.createIsoValueParam(Ze.IsoValue.relative(1))}),"x-ray":h.Group({})})};var M$=Yt.BuiltIn({name:"create-volume-streaming-info",display:{name:"Volume Streaming Info"},from:te.Molecule.Structure,to:i1,params(e,t){return{serverUrl:h.Text(t.config.get(jt.VolumeStreaming.DefaultServer)||"https://ds.litemol.org"),autoEntries:h.Boolean(!1,{description:'Create "entries" list automatically based on the input structure'}),entries:h.ObjectList(mDt,({dataId:r})=>r,{defaultValue:[{dataId:"",source:{name:"x-ray",params:{}}}],hideIf:r=>r.autoEntries}),defaultView:h.Select(c3(e?.data)==="em"?"auto":"selection-box",Is.ViewTypeOptions,{isHidden:!0}),defaultChannelParams:h.Value({},{isHidden:!0})}}})({apply:({a:e,params:t},r)=>ve.create("",async n=>{let o;if(t.autoEntries){await n.update("Creating entry list...");let A=c3(e?.data),s=Sq(A,e?.data);o=await GPe(s,A,"emdb",r,n)}else o=t.entries;let i=[];for(let A of o){let s=A.dataId,c=A.source.name==="em"?A.source.params.isoValue:Ze.IsoValue.relative(1);await n.update("Getting server header...");let l=await r.fetch({url:oE(t.serverUrl,`${A.source.name}/${s.toLocaleLowerCase()}`),type:"json"}).runInContext(n);i.push({dataId:s,kind:A.source.name,header:l,emDefaultContourLevel:c})}let a={serverUrl:t.serverUrl,entries:i,structure:e.data,defaultView:t.defaultView,defaultChannelParams:t.defaultChannelParams};return new i1(a,{label:"Volume Server",description:`${i.map(A=>A.dataId).join(", ")}`})}),update({a:e,b:t,oldParams:r,newParams:n}){return e.data===t.data.structure&&ka(r,n)?lt.UpdateResult.Unchanged:lt.UpdateResult.Recreate}});var bx=Yt.BuiltIn({name:"create-volume-streaming-behavior",display:{name:"Volume Streaming Behavior"},from:i1,to:Is,params(e){return Is.createParams({data:e?.data,defaultView:e?.data.defaultView,channelParams:e?.data.defaultChannelParams})}})({canAutoUpdate:({oldParams:e,newParams:t})=>e.entry.params.view===t.entry.params.view||t.entry.params.view.name==="selection-box"||t.entry.params.view.name==="camera-target"||t.entry.params.view.name==="off",apply:({a:e,params:t},r)=>ve.create("Volume streaming",async n=>{let o=new Is.Behavior(r,e.data);return await o.update(t),new Is(o,{label:"Volume Streaming",description:o.getDescription()})}),update({a:e,b:t,oldParams:r,newParams:n}){return ve.create("Update Volume Streaming",async o=>{if(r.entry.name!==n.entry.name&&"em"in n.entry.params.channels){let{emDefaultContourLevel:a}=t.data.infoMap.get(n.entry.name);a&&(n.entry.params.channels.em.isoValue=a)}let i=await t.data.update(n)?lt.UpdateResult.Updated:lt.UpdateResult.Unchanged;return t.description=t.data.getDescription(),i})}});var ty=Yt.BuiltIn({name:"create-volume-streaming-visual",display:{name:"Volume Streaming Visual"},from:Is,to:te.Volume.Representation3D,params:{channel:h.Select("em",Is.ChannelTypeOptions,{isHidden:!0})}})({apply:({a:e,params:t,spine:r},n)=>ve.create("Volume Representation",async o=>{let i=e.data.channels[t.channel];if(!i)return po.Null;let a=PPe(e.data,t.channel),A=wE.BuiltIn.isosurface,s=a.type.params||{},c=A.factory({webgl:n.canvas3d?.webgl,...n.representation.volume.themes},A.getParams);c.setTheme(Gi.create(n.representation.volume.themes,{volume:i.data},a));let l=r.getAncestorOfType(te.Molecule.Structure)?.data,u=l?.models.length===0?void 0:uh.get(l?.models[0]);return await c.createOrUpdate(s,i.data).runInContext(o),u&&c.setState({transform:u}),new te.Volume.Representation3D({repr:c,sourceData:i.data},{label:`${Math.round(i.isoValue.relativeValue*100)/100} \u03C3 [${t.channel}]`})}),update:({a:e,b:t,newParams:r,spine:n},o)=>ve.create("Volume Representation",async i=>{let a=e.data.channels[r.channel];if(!a)return lt.UpdateResult.Unchanged;let A=t.data.repr.state.visible,s=PPe(e.data,r.channel),c={...t.data.repr.props,...s.type.params};return t.data.repr.setTheme(Gi.create(o.representation.volume.themes,{volume:a.data},s)),await t.data.repr.createOrUpdate(c,a.data).runInContext(i),t.data.repr.setState({visible:A}),t.data.sourceData=a.data,lt.UpdateResult.Updated})});function PPe(e,t){let r=e.channels[t];return mu.getDefaultParamsStatic(e.plugin,"isosurface",{isoValue:r.isoValue,alpha:r.opacity,visuals:r.wireframe?["wireframe"]:["solid"]},"uniform",{value:r.color})}var MPe=bc.create({name:"built-in.animate-state-interpolation",display:{name:"Animate State (experimental)"},params:()=>({transtionDurationInMs:h.Numeric(2e3,{min:100,max:3e4,step:10})}),canApply(e){return{canApply:e.managers.snapshot.state.entries.size>1}},initialState:()=>({}),async apply(e,t,r){let n=r.plugin.managers.snapshot.state.entries;if(n.size<2)return{kind:"finished"};let o=t.current%r.params.transtionDurationInMs/r.params.transtionDurationInMs,i=Math.floor(t.current/r.params.transtionDurationInMs)%n.size,a=Math.ceil(t.current/r.params.transtionDurationInMs);a===i&&a++,a=a%n.size;let A=n.get(i).snapshot,s=n.get(a).snapshot;if(!A.data||!s.data)return{kind:"skip"};let c=A.data.tree.transforms,l=s.data.tree.transforms,u=r.plugin.state.data,g=u.build();for(let m of c)for(let p of l){if(p.ref!==m.ref||p.version===m.version)continue;let d=en.fromJSON(m),f=en.fromJSON(p),I=u.cells.get(m.ref);if(!I)continue;let C;d.transformer.definition.interpolate?C=d.transformer.definition.interpolate(d.params,f.params,o,r.plugin):C=o<=.5?d.params:f.params,Gb(I,C)||g.to(m.ref).update(C)}return await yt.State.Update(r.plugin,{state:u,tree:g,options:{doNotLogTiming:!0}}),{kind:"next",state:{}}}});var kPe=bc.create({name:"built-in.animate-structure-spin",display:{name:"Spin Structure"},isExportable:!0,params:()=>({durationInMs:h.Numeric(3e3,{min:100,max:1e4,step:100})}),initialState:()=>({t:0}),getDuration:e=>({kind:"fixed",durationMs:e.durationInMs}),async setup(e,t,r){let n=r.state.data,o=n.select(fr.Generators.ofType(te.Molecule.Structure.Representation3D)),i=n.build(),a=!1;for(let A of o)n.select(fr.Generators.ofTransformer(ze.Representation.SpinStructureRepresentation3D,A.transform.ref)).length>0||(a=!0,i.to(A.transform.ref).apply(ze.Representation.SpinStructureRepresentation3D,{t:0},{tags:"animate-structure-spin"}));if(a)return i.commit({doNotUpdateCurrent:!0})},teardown(e,t,r){let n=r.state.data,o=n.select(fr.Generators.ofType(te.Molecule.Structure.Representation3DState).withTag("animate-structure-spin"));if(o.length===0)return;let i=n.build();for(let a of o)i.delete(a.transform.ref);return i.commit()},async apply(e,t,r){let n=r.plugin.state.data,o=n.select(fr.Generators.ofTransformer(ze.Representation.SpinStructureRepresentation3D));if(o.length===0)return{kind:"finished"};let i=n.build(),a=(t.current-t.lastApplied)/r.params.durationInMs,A=(e.t+a)%1;for(let s of o)i.to(s).update({...s.params?.values,t:A});return await yt.State.Update(r.plugin,{state:n,tree:i,options:{doNotLogTiming:!0}}),{kind:"next",state:{t:A}}}});var lL=B(),ry=B(),k$=gr(),xx=B(),a1=B(),HPe=bc.create({name:"built-in.animate-camera-rock",display:{name:"Camera Rock",description:"Rock the 3D scene around the x-axis in view space"},isExportable:!0,params:()=>({durationInMs:h.Numeric(4e3,{min:100,max:2e4,step:100}),speed:h.Numeric(1,{min:1,max:10,step:1},{description:"How many times to rock from side to side."}),angle:h.Numeric(10,{min:0,max:180,step:1},{description:"How many degrees to rotate in each direction."}),axis:h.Vec3(B.create(0,-1,0),{},{description:"Axis of rotation in camera space"})}),initialState:(e,t)=>({snapshot:t.canvas3d.camera.getSnapshot()}),getDuration:e=>({kind:"fixed",durationMs:e.durationInMs}),teardown:(e,t,r)=>{r.canvas3d?.requestCameraReset({snapshot:t.snapshot,durationMs:0})},async apply(e,t,r){if(t.current===0)return{kind:"next",state:e};let n=e.snapshot;if(n.radiusMax<1e-4)return{kind:"finished"};let o=t.animation?t.animation?.currentFrame/(t.animation.frameCount+1):$t(t.current/r.params.durationInMs,0,1),i=Math.sin(o*r.params.speed*Math.PI*2)*kr(r.params.angle);B.sub(lL,n.position,n.target),B.normalize(ry,lL),B.normalize(xx,n.up),B.cross(a1,xx,ry),B.normalize(a1,a1);let a=r.params.axis??B.create(0,-1,0);B.set(ry,a[0]*a1[0]+a[1]*xx[0]+a[2]*ry[0],a[0]*a1[1]+a[1]*xx[1]+a[2]*ry[1],a[0]*a1[2]+a[1]*xx[2]+a[2]*ry[2]),B.normalize(ry,ry),gr.setAxisAngle(k$,ry,i),B.transformQuat(lL,lL,k$),B.transformQuat(xx,n.up,k$);let A=B.add(B(),n.target,lL);return r.plugin.canvas3d?.requestCameraReset({snapshot:{...n,position:A,up:xx},durationMs:0}),o>=.99999?{kind:"finished"}:{kind:"next",state:e}}});var VPe=bc.create({name:"built-in.animate-time",display:{name:"Animate Time",description:"Animate the passage of time in the 3D scene"},isExportable:!0,params:()=>({durationInMs:h.Numeric(4e3,{min:100,max:2e4,step:100})}),initialState:()=>({}),getDuration:e=>({kind:"fixed",durationMs:e.durationInMs}),async apply(e,t,r){return t.current<r.params.durationInMs?{kind:"next",state:e}:{kind:"finished"}}});var Lr;(r=>{function e(n,o){return{action:n,customControl:o&&o.customControl,autoUpdate:o&&o.autoUpdate}}r.Action=e;function t(n,o={}){return{transformer:n,defaultParams:o}}r.Behavior=t})(Lr||={});var A1=()=>({actions:[Lr.Action(CC.Structure.DownloadStructure),Lr.Action(CC.Volume.DownloadDensity),Lr.Action(CC.DataFormat.DownloadFile),Lr.Action(CC.DataFormat.OpenFiles),Lr.Action(CC.Structure.LoadTrajectory),Lr.Action(CC.Structure.EnableModelCustomProps),Lr.Action(CC.Structure.EnableStructureCustomProps),Lr.Action(cL),Lr.Action(NPe),Lr.Action(bx),Lr.Action(ze.Data.Download),Lr.Action(ze.Data.ParseCif),Lr.Action(ze.Data.ParseCcp4),Lr.Action(ze.Data.ParseDsn6),Lr.Action(ze.Model.TrajectoryFromMmCif),Lr.Action(ze.Model.TrajectoryFromCifCore),Lr.Action(ze.Model.TrajectoryFromPDB),Lr.Action(ze.Model.TransformStructureConformation),Lr.Action(ze.Model.StructureInstances),Lr.Action(ze.Model.StructureFromModel),Lr.Action(ze.Model.StructureFromTrajectory),Lr.Action(ze.Model.ModelFromTrajectory),Lr.Action(ze.Model.StructureSelectionFromScript),Lr.Action(ze.Representation.StructureRepresentation3D),Lr.Action(ze.Representation.StructureSelectionsDistance3D),Lr.Action(ze.Representation.StructureSelectionsAngle3D),Lr.Action(ze.Representation.StructureSelectionsDihedral3D),Lr.Action(ze.Representation.StructureSelectionsLabel3D),Lr.Action(ze.Representation.StructureSelectionsOrientation3D),Lr.Action(ze.Representation.ModelUnitcell3D),Lr.Action(ze.Representation.StructureBoundingBox3D),Lr.Action(ze.Representation.ExplodeStructureRepresentation3D),Lr.Action(ze.Representation.SpinStructureRepresentation3D),Lr.Action(ze.Representation.UnwindStructureAssemblyRepresentation3D),Lr.Action(ze.Representation.OverpaintStructureRepresentation3DFromScript),Lr.Action(ze.Representation.TransparencyStructureRepresentation3DFromScript),Lr.Action(ze.Representation.ClippingStructureRepresentation3DFromScript),Lr.Action(ze.Representation.SubstanceStructureRepresentation3DFromScript),Lr.Action(ze.Representation.WiggleStructureRepresentation3DFromScript),Lr.Action(ze.Representation.ThemeStrengthRepresentation3D),Lr.Action(G$),Lr.Action(ze.Volume.VolumeFromCcp4),Lr.Action(ze.Volume.VolumeFromDsn6),Lr.Action(ze.Volume.VolumeFromCube),Lr.Action(ze.Volume.VolumeFromDx),Lr.Action(ze.Representation.VolumeRepresentation3D),Lr.Action(ze.Volume.VolumeTransform),Lr.Action(ze.Volume.VolumeInstances)],behaviors:[Lr.Behavior(Bs.Representation.HighlightLoci),Lr.Behavior(Bs.Representation.SelectLoci),Lr.Behavior(Bs.Representation.DefaultLociLabelProvider),Lr.Behavior(Bs.Representation.FocusLoci),Lr.Behavior(Bs.Camera.FocusLoci),Lr.Behavior(Bs.Camera.CameraAxisHelper),Lr.Behavior(Bs.Camera.CameraControls),Lr.Behavior(Bs.State.SnapshotControls),Lr.Behavior(ix),Lr.Behavior(Bs.CustomProps.StructureInfo),Lr.Behavior(Bs.CustomProps.AccessibleSurfaceArea),Lr.Behavior(Bs.CustomProps.BestDatabaseSequenceMapping),Lr.Behavior(Bs.CustomProps.Interactions),Lr.Behavior(Bs.CustomProps.SecondaryStructure),Lr.Behavior(Bs.CustomProps.ValenceModel),Lr.Behavior(Bs.CustomProps.CrossLinkRestraint),Lr.Behavior(Bs.CustomProps.Streamlines)],animations:[LPe,UPe,HPe,cwe,qI,RPe,kPe,MPe,VPe]});var c1=kt(Qa());var ny=kt(Qa());var ft=kt(Qr());function Kn(e){return e.svg?(0,ft.jsx)("span",{className:`msp-icon msp-material-icon${e.inline?" msp-icon-inline":""}`,title:e.title,style:e.style,children:(0,ft.jsx)(e.svg,{})}):null}var __=(0,ft.jsx)("circle",{r:"6px",id:"circle-left",cy:"12px",cx:"8px",strokeWidth:"1px"}),Y_=(0,ft.jsx)("circle",{r:"6px",id:"circle-right",cy:"12px",cx:"16px",strokeWidth:"1px"}),PDt=(0,ft.jsxs)("svg",{width:"24px",height:"24px",viewBox:"0 0 24 24",children:[(0,ft.jsxs)("defs",{children:[__,Y_]}),(0,ft.jsxs)("g",{children:[(0,ft.jsx)("use",{href:"#circle-left",className:"msp-shape-filled"}),(0,ft.jsx)("use",{href:"#circle-right",className:"msp-shape-filled"}),(0,ft.jsx)("use",{href:"#circle-left",className:"msp-shape-empty"})]})]});function gL(){return PDt}var GDt=(0,ft.jsxs)("svg",{width:"24px",height:"24px",viewBox:"0 0 24 24",children:[(0,ft.jsxs)("defs",{children:[__,Y_,(0,ft.jsxs)("mask",{id:"mask-left",children:[(0,ft.jsx)("use",{href:"#circle-left",fill:"white",stroke:"white"}),(0,ft.jsx)("use",{href:"#circle-right",fill:"black",strokeWidth:"0px",stroke:"white"})]})]}),(0,ft.jsxs)("g",{children:[(0,ft.jsx)("use",{href:"#circle-left",className:"msp-shape-filled",mask:"url(#mask-left)"}),(0,ft.jsx)("use",{href:"#circle-right",className:"msp-shape-empty"})]})]});function mL(){return GDt}var NDt=(0,ft.jsxs)("svg",{width:"24px",height:"24px",viewBox:"0 0 24 24",children:[(0,ft.jsxs)("defs",{children:[__,Y_,(0,ft.jsx)("clipPath",{id:"clip-left",children:(0,ft.jsx)("use",{href:"#circle-right"})})]}),(0,ft.jsxs)("g",{children:[(0,ft.jsx)("use",{href:"#circle-left",className:"msp-shape-filled",clipPath:"url(#clip-left)"}),(0,ft.jsx)("use",{href:"#circle-left",className:"msp-shape-empty"}),(0,ft.jsx)("use",{href:"#circle-right",className:"msp-shape-empty"})]})]});function dL(){return NDt}var MDt=(0,ft.jsxs)("svg",{width:"24px",height:"24px",viewBox:"0 0 24 24",children:[(0,ft.jsxs)("defs",{children:[__,Y_]}),(0,ft.jsxs)("g",{children:[(0,ft.jsx)("use",{href:"#circle-left",className:"msp-shape-empty"}),(0,ft.jsx)("use",{href:"#circle-right",className:"msp-shape-filled"})]})]});function Sx(){return MDt}var kDt=(0,ft.jsx)("svg",{width:"17px",height:"17px",viewBox:"0 0 299.463 299.463",strokeWidth:"6px",children:(0,ft.jsx)("g",{children:(0,ft.jsx)("path",{d:"M256.851,173.832v-48.201c22.916-4.918,34.151-30.668,22.556-50.771c-11.547-20.004-39.486-23.251-55.242-5.844 l-41.746-24.106C189.618,22.603,172.861,0,149.734,0c-23.132,0-39.881,22.609-32.685,44.911L75.305,69.016 C59.522,51.586,31.597,54.88,20.061,74.863c-11.63,20.163-0.298,45.862,22.557,50.769v48.2 c-22.821,4.898-34.195,30.591-22.556,50.771c11.529,19.972,39.454,23.285,55.242,5.845l41.746,24.106 c-7.199,22.308,9.559,44.911,32.685,44.911c23.132,0,39.88-22.609,32.685-44.911l41.745-24.106 c15.817,17.469,43.73,14.099,55.242-5.844c0,0,0-0.001,0.001-0.002c4.587-7.953,5.805-17.213,3.431-26.076 C279.392,185.657,269.129,176.461,256.851,173.832z M249.62,72.088c20.568,0,27.428,27.191,10.008,37.239 c-0.003,0.002-0.006,0.003-0.009,0.005c-10.04,5.81-22.85,1.762-27.877-8.475C225.206,87.548,234.938,72.088,249.62,72.088z M149.734,14.4c11.005,0,19.958,8.954,19.958,19.959c0,11.127-9.077,19.958-19.958,19.958c-10.95,0-19.958-8.9-19.958-19.958 C129.776,23.354,138.729,14.4,149.734,14.4z M39.84,109.328c-17.451-10.067-10.534-37.24,10.01-37.24 c15.311,0,24.922,16.653,17.251,29.942C61.681,111.397,49.517,114.925,39.84,109.328z M59.802,224.702 c-9.535,5.503-21.768,2.229-27.268-7.298c-7.639-13.242,1.887-29.945,17.236-29.945c0.013,0,0.027,0,0.04,0 C70.07,187.48,77.49,214.469,59.802,224.702z M149.734,285.062c-11.005,0-19.958-8.954-19.958-19.958 c0-11.127,9.077-19.958,19.958-19.958c10.954,0,19.958,8.903,19.958,19.958C169.693,276.109,160.74,285.062,149.734,285.062z M216.953,217.982l-41.727,24.095c-13.778-15.22-37.459-14.94-50.983,0l-41.728-24.096c6.196-19.289-5.541-39.835-25.498-44.149 V125.63c19.752-4.268,31.762-24.65,25.498-44.149l41.727-24.095c13.629,15.055,37.32,15.093,50.983,0l41.728,24.096 c-6.196,19.29,5.534,39.835,25.498,44.149v48.202C222.61,178.123,210.721,198.581,216.953,217.982z M266.935,217.404 c-5.501,9.528-17.732,12.802-27.261,7.302c-17.682-10.23-10.301-37.247,10.032-37.247 C264.984,187.459,274.602,204.112,266.935,217.404z"})})});function oGe(){return kDt}var HDt=(0,ft.jsx)("svg",{width:"24px",height:"24px",viewBox:"0 0 24 24",strokeWidth:"0.1px",children:(0,ft.jsx)("path",{d:"M21,16.5C21,16.88 20.79,17.21 20.47,17.38L12.57,21.82C12.41,21.94 12.21,22 12,22C11.79,22 11.59,21.94 11.43,21.82L3.53,17.38C3.21,17.21 3,16.88 3,16.5V7.5C3,7.12 3.21,6.79 3.53,6.62L11.43,2.18C11.59,2.06 11.79,2 12,2C12.21,2 12.41,2.06 12.57,2.18L20.47,6.62C20.79,6.79 21,7.12 21,7.5V16.5M12,4.15L6.04,7.5L12,10.85L17.96,7.5L12,4.15M5,15.91L11,19.29V12.58L5,9.21V15.91M19,15.91V9.21L13,12.58V19.29L19,15.91Z"})});function pL(){return HDt}var VDt=(0,ft.jsx)("svg",{width:"24px",height:"24px",viewBox:"0 0 24 24",strokeWidth:"0.1px",children:(0,ft.jsx)("path",{d:"M17,22V20H20V17H22V20.5C22,20.89 21.84,21.24 21.54,21.54C21.24,21.84 20.89,22 20.5,22H17M7,22H3.5C3.11,22 2.76,21.84 2.46,21.54C2.16,21.24 2,20.89 2,20.5V17H4V20H7V22M17,2H20.5C20.89,2 21.24,2.16 21.54,2.46C21.84,2.76 22,3.11 22,3.5V7H20V4H17V2M7,2V4H4V7H2V3.5C2,3.11 2.16,2.76 2.46,2.46C2.76,2.16 3.11,2 3.5,2H7M13,17.25L17,14.95V10.36L13,12.66V17.25M12,10.92L16,8.63L12,6.28L8,8.63L12,10.92M7,14.95L11,17.25V12.66L7,10.36V14.95M18.23,7.59C18.73,7.91 19,8.34 19,8.91V15.23C19,15.8 18.73,16.23 18.23,16.55L12.75,19.73C12.25,20.05 11.75,20.05 11.25,19.73L5.77,16.55C5.27,16.23 5,15.8 5,15.23V8.91C5,8.34 5.27,7.91 5.77,7.59L11.25,4.41C11.5,4.28 11.75,4.22 12,4.22C12.25,4.22 12.5,4.28 12.75,4.41L18.23,7.59Z"})});function iGe(){return VDt}var _Dt=(0,ft.jsx)("svg",{width:"24px",height:"24px",viewBox:"0 0 24 24",strokeWidth:"0.1px",children:(0,ft.jsx)("path",{d:"M16,4L9,8.04V15.96L16,20L23,15.96V8.04M16,6.31L19.8,8.5L16,10.69L12.21,8.5M0,7V9H7V7M11,10.11L15,12.42V17.11L11,14.81M21,10.11V14.81L17,17.11V12.42M2,11V13H7V11M4,15V17H7V15"})});function aGe(){return _Dt}var YDt=(0,ft.jsx)("svg",{width:"24px",height:"24px",viewBox:"0 0 24 24",children:(0,ft.jsx)("path",{d:"M10.07,14.27C10.57,14.03 11.16,14.25 11.4,14.75L13.7,19.74L15.5,18.89L13.19,13.91C12.95,13.41 13.17,12.81 13.67,12.58L13.95,12.5L16.25,12.05L8,5.12V15.9L9.82,14.43L10.07,14.27M13.64,21.97C13.14,22.21 12.54,22 12.31,21.5L10.13,16.76L7.62,18.78C7.45,18.92 7.24,19 7,19A1,1 0 0,1 6,18V3A1,1 0 0,1 7,2C7.24,2 7.47,2.09 7.64,2.23L7.65,2.22L19.14,11.86C19.57,12.22 19.62,12.85 19.27,13.27C19.12,13.45 18.91,13.57 18.7,13.61L15.54,14.23L17.74,18.96C18,19.46 17.76,20.05 17.26,20.28L13.64,21.97Z"})});function ODt(){return YDt}var JDt=(0,ft.jsx)("svg",{width:"24px",height:"24px",viewBox:"0 0 24 24",children:(0,ft.jsx)("path",{fill:"currentColor",d:"M7.5,5.6L5,7L6.4,4.5L5,2L7.5,3.4L10,2L8.6,4.5L10,7L7.5,5.6M19.5,15.4L22,14L20.6,16.5L22,19L19.5,17.6L17,19L18.4,16.5L17,14L19.5,15.4M22,2L20.6,4.5L22,7L19.5,5.6L17,7L18.4,4.5L17,2L19.5,3.4L22,2M13.34,12.78L15.78,10.34L13.66,8.22L11.22,10.66L13.34,12.78M14.37,7.29L16.71,9.63C17.1,10 17.1,10.65 16.71,11.04L5.04,22.71C4.65,23.1 4,23.1 3.63,22.71L1.29,20.37C0.9,20 0.9,19.35 1.29,18.96L12.96,7.29C13.35,6.9 14,6.9 14.37,7.29Z"})});function AGe(){return JDt}var zDt=(0,ft.jsx)("svg",{width:"24px",height:"24px",viewBox:"0 0 24 24",strokeWidth:"0.1px",children:(0,ft.jsx)("path",{d:"M3 17.25V21H6.75L17.81 9.93L14.06 6.18L3 17.25M22.61 18.36L18.36 22.61L13.16 17.41L14.93 15.64L15.93 16.64L18.4 14.16L19.82 15.58L18.36 17L19.42 18L20.84 16.6L22.61 18.36M6.61 10.83L1.39 5.64L5.64 1.39L7.4 3.16L4.93 5.64L6 6.7L8.46 4.22L9.88 5.64L8.46 7.05L9.46 8.05L6.61 10.83M20.71 7C21.1 6.61 21.1 6 20.71 5.59L18.37 3.29C18 2.9 17.35 2.9 16.96 3.29L15.12 5.12L18.87 8.87L20.71 7Z"})});function sGe(){return zDt}var KDt=(0,ft.jsx)("svg",{width:"24px",height:"24px",viewBox:"0 0 24 24",children:(0,ft.jsx)("path",{d:"M22 11V3h-7v3H9V3H2v8h7V8h2v10h4v3h7v-8h-7v3h-2V8h2v3h7zM7 9H4V5h3v4zm10 6h3v4h-3v-4zm0-10h3v4h-3V5z"})});function J$(){return KDt}var jDt=(0,ft.jsx)("svg",{width:"24px",height:"24px",viewBox:"0 0 24 24",children:(0,ft.jsx)("path",{d:"M19 13h-6v6h-2v-6H5v-2h6V5h2v6h6v2z"})});function CB(){return jDt}var WDt=(0,ft.jsx)("svg",{width:"24px",height:"24px",viewBox:"0 0 24 24",children:(0,ft.jsx)("path",{d:"M20 12l-1.41-1.41L13 16.17V4h-2v12.17l-5.58-5.59L4 12l8 8 8-8z"})});function O_(){return XDt}var XDt=(0,ft.jsx)("svg",{width:"24px",height:"24px",viewBox:"0 0 24 24",children:(0,ft.jsx)("path",{d:"M15 2c-2.71 0-5.05 1.54-6.22 3.78-1.28.67-2.34 1.72-3 3C3.54 9.95 2 12.29 2 15c0 3.87 3.13 7 7 7 2.71 0 5.05-1.54 6.22-3.78 1.28-.67 2.34-1.72 3-3C20.46 14.05 22 11.71 22 9c0-3.87-3.13-7-7-7M9 20c-2.76 0-5-2.24-5-5 0-1.12.37-2.16 1-3 0 3.87 3.13 7 7 7-.84.63-1.88 1-3 1m3-3c-2.76 0-5-2.24-5-5 0-1.12.37-2.16 1-3 0 3.86 3.13 6.99 7 7-.84.63-1.88 1-3 1m4.7-3.3c-.53.19-1.1.3-1.7.3-2.76 0-5-2.24-5-5 0-.6.11-1.17.3-1.7.53-.19 1.1-.3 1.7-.3 2.76 0 5 2.24 5 5 0 .6-.11 1.17-.3 1.7M19 12c0-3.86-3.13-6.99-7-7 .84-.63 1.87-1 3-1 2.76 0 5 2.24 5 5 0 1.12-.37 2.16-1 3"})});function LE(){return WDt}var ZDt=(0,ft.jsx)("svg",{width:"24px",height:"24px",viewBox:"0 0 24 24",children:(0,ft.jsx)("path",{d:"M7 10l5 5 5-5z"})});function tg(){return ZDt}var qDt=(0,ft.jsx)("svg",{width:"24px",height:"24px",viewBox:"0 0 24 24",children:(0,ft.jsx)("path",{d:"M10 17l5-5-5-5v10z"})});function rg(){return qDt}var $Dt=(0,ft.jsx)("svg",{width:"24px",height:"24px",viewBox:"0 0 24 24",children:(0,ft.jsx)("path",{d:"M4 12l1.41 1.41L11 7.83V20h2V7.83l5.58 5.59L20 12l-8-8-8 8z"})});function TE(){return $Dt}var evt=(0,ft.jsx)("svg",{width:"24px",height:"24px",viewBox:"0 0 24 24",children:(0,ft.jsx)("path",{d:"M12 6v3l4-4-4-4v3c-4.42 0-8 3.58-8 8 0 1.57.46 3.03 1.24 4.26L6.7 14.8c-.45-.83-.7-1.79-.7-2.8 0-3.31 2.69-6 6-6zm6.76 1.74L17.3 9.2c.44.84.7 1.79.7 2.8 0 3.31-2.69 6-6 6v-3l-4 4 4 4v-3c4.42 0 8-3.58 8-8 0-1.57-.46-3.03-1.24-4.26z"})});function cGe(){return evt}var tvt=(0,ft.jsx)("svg",{width:"24px",height:"24px",viewBox:"0 0 24 24",children:(0,ft.jsx)("path",{d:"M19 12h-2v3h-3v2h5zM7 9h3V7H5v5h2zm14-6H3c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h18c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2m0 16.01H3V4.99h18z"})});function lGe(){return tvt}var rvt=(0,ft.jsx)("svg",{width:"24px",height:"24px",viewBox:"0 0 24 24",children:(0,ft.jsx)("path",{d:"M6 13c-.55 0-1 .45-1 1s.45 1 1 1 1-.45 1-1-.45-1-1-1zm0 4c-.55 0-1 .45-1 1s.45 1 1 1 1-.45 1-1-.45-1-1-1zm0-8c-.55 0-1 .45-1 1s.45 1 1 1 1-.45 1-1-.45-1-1-1zm-3 .5c-.28 0-.5.22-.5.5s.22.5.5.5.5-.22.5-.5-.22-.5-.5-.5zM6 5c-.55 0-1 .45-1 1s.45 1 1 1 1-.45 1-1-.45-1-1-1zm15 5.5c.28 0 .5-.22.5-.5s-.22-.5-.5-.5-.5.22-.5.5.22.5.5.5zM14 7c.55 0 1-.45 1-1s-.45-1-1-1-1 .45-1 1 .45 1 1 1zm0-3.5c.28 0 .5-.22.5-.5s-.22-.5-.5-.5-.5.22-.5.5.22.5.5.5zm-11 10c-.28 0-.5.22-.5.5s.22.5.5.5.5-.22.5-.5-.22-.5-.5-.5zm7 7c-.28 0-.5.22-.5.5s.22.5.5.5.5-.22.5-.5-.22-.5-.5-.5zm0-17c.28 0 .5-.22.5-.5s-.22-.5-.5-.5-.5.22-.5.5.22.5.5.5zM10 7c.55 0 1-.45 1-1s-.45-1-1-1-1 .45-1 1 .45 1 1 1zm0 5.5c-.83 0-1.5.67-1.5 1.5s.67 1.5 1.5 1.5 1.5-.67 1.5-1.5-.67-1.5-1.5-1.5zm8 .5c-.55 0-1 .45-1 1s.45 1 1 1 1-.45 1-1-.45-1-1-1zm0 4c-.55 0-1 .45-1 1s.45 1 1 1 1-.45 1-1-.45-1-1-1zm0-8c-.55 0-1 .45-1 1s.45 1 1 1 1-.45 1-1-.45-1-1-1zm0-4c-.55 0-1 .45-1 1s.45 1 1 1 1-.45 1-1-.45-1-1-1zm3 8.5c-.28 0-.5.22-.5.5s.22.5.5.5.5-.22.5-.5-.22-.5-.5-.5zM14 17c-.55 0-1 .45-1 1s.45 1 1 1 1-.45 1-1-.45-1-1-1zm0 3.5c-.28 0-.5.22-.5.5s.22.5.5.5.5-.22.5-.5-.22-.5-.5-.5zm-4-12c-.83 0-1.5.67-1.5 1.5s.67 1.5 1.5 1.5 1.5-.67 1.5-1.5-.67-1.5-1.5-1.5zm0 8.5c-.55 0-1 .45-1 1s.45 1 1 1 1-.45 1-1-.45-1-1-1zm4-4.5c-.83 0-1.5.67-1.5 1.5s.67 1.5 1.5 1.5 1.5-.67 1.5-1.5-.67-1.5-1.5-1.5zm0-4c-.83 0-1.5.67-1.5 1.5s.67 1.5 1.5 1.5 1.5-.67 1.5-1.5-.67-1.5-1.5-1.5z"})});function z$(){return rvt}var nvt=(0,ft.jsx)("svg",{width:"24px",height:"24px",viewBox:"0 0 24 24",children:(0,ft.jsx)("path",{d:"M15 7v12.97l-4.21-1.81-.79-.34-.79.34L5 19.97V7h10m4-6H8.99C7.89 1 7 1.9 7 3h10c1.1 0 2 .9 2 2v13l2 1V3c0-1.1-.9-2-2-2zm-4 4H5c-1.1 0-2 .9-2 2v16l7-3 7 3V7c0-1.1-.9-2-2-2z"})});function hB(){return nvt}var ovt=(0,ft.jsx)("svg",{width:"24px",height:"24px",viewBox:"0 0 24 24",children:(0,ft.jsx)("path",{d:"M7 14c-1.66 0-3 1.34-3 3 0 1.31-1.16 2-2 2 .92 1.22 2.49 2 4 2 2.21 0 4-1.79 4-4 0-1.66-1.34-3-3-3zm13.71-9.37l-1.34-1.34a.9959.9959 0 00-1.41 0L9 12.25 11.75 15l8.96-8.96c.39-.39.39-1.02 0-1.41z"})});function J_(){return ovt}var ivt=(0,ft.jsx)("svg",{width:"24px",height:"24px",viewBox:"0 0 24 24",children:(0,ft.jsx)("path",{d:"M22.61 18.99l-9.08-9.08c.93-2.34.45-5.1-1.44-7C9.79.61 6.21.4 3.66 2.26L7.5 6.11 6.08 7.52 2.25 3.69C.39 6.23.6 9.82 2.9 12.11c1.86 1.86 4.57 2.35 6.89 1.48l9.11 9.11c.39.39 1.02.39 1.41 0l2.3-2.3c.4-.38.4-1.01 0-1.41zm-3 1.6l-9.46-9.46c-.61.45-1.29.72-2 .82-1.36.2-2.79-.21-3.83-1.25C3.37 9.76 2.93 8.5 3 7.26l3.09 3.09 4.24-4.24-3.09-3.09c1.24-.07 2.49.37 3.44 1.31 1.08 1.08 1.49 2.57 1.24 3.96-.12.71-.42 1.37-.88 1.96l9.45 9.45-.88.89z"})});function uGe(){return ivt}var avt=(0,ft.jsx)("svg",{width:"24px",height:"24px",viewBox:"0 0 24 24",children:(0,ft.jsx)("path",{d:"M22.7 19l-9.1-9.1c.9-2.3.4-5-1.5-6.9-2-2-5-2.4-7.4-1.3L9 6 6 9 1.6 4.7C.4 7.1.9 10.1 2.9 12.1c1.9 1.9 4.6 2.4 6.9 1.5l9.1 9.1c.4.4 1 .4 1.4 0l2.3-2.3c.5-.4.5-1.1.1-1.4z"})});function gGe(){return avt}var Avt=(0,ft.jsx)("svg",{width:"24px",height:"24px",viewBox:"0 0 24 24",children:(0,ft.jsx)("path",{d:"M14.25 2.26l-.08-.04-.01.02C13.46 2.09 12.74 2 12 2 6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10c0-4.75-3.31-8.72-7.75-9.74zM19.41 9h-7.99l2.71-4.7c2.4.66 4.35 2.42 5.28 4.7zM13.1 4.08L10.27 9l-1.15 2L6.4 6.3C7.84 4.88 9.82 4 12 4c.37 0 .74.03 1.1.08zM5.7 7.09L8.54 12l1.15 2H4.26C4.1 13.36 4 12.69 4 12c0-1.85.64-3.55 1.7-4.91zM4.59 15h7.98l-2.71 4.7c-2.4-.67-4.34-2.42-5.27-4.7zm6.31 4.91L14.89 13l2.72 4.7C16.16 19.12 14.18 20 12 20c-.38 0-.74-.04-1.1-.09zm7.4-3l-4-6.91h5.43c.17.64.27 1.31.27 2 0 1.85-.64 3.55-1.7 4.91z"})});function z_(){return Avt}var svt=(0,ft.jsx)("svg",{width:"24px",height:"24px",viewBox:"0 0 24 24",children:(0,ft.jsx)("path",{d:"M9.4 10.5l4.77-8.26C13.47 2.09 12.75 2 12 2c-2.4 0-4.6.85-6.32 2.25l3.66 6.35.06-.1zM21.54 9c-.92-2.92-3.15-5.26-6-6.34L11.88 9h9.66zm.26 1h-7.49l.29.5 4.76 8.25C21 16.97 22 14.61 22 12c0-.69-.07-1.35-.2-2zM8.54 12l-3.9-6.75C3.01 7.03 2 9.39 2 12c0 .69.07 1.35.2 2h7.49l-1.15-2zm-6.08 3c.92 2.92 3.15 5.26 6 6.34L12.12 15H2.46zm11.27 0l-3.9 6.76c.7.15 1.42.24 2.17.24 2.4 0 4.6-.85 6.32-2.25l-3.66-6.35-.93 1.6z"})});function mGe(){return svt}var cvt=(0,ft.jsx)("svg",{width:"24px",height:"24px",viewBox:"0 0 24 24",children:(0,ft.jsx)("path",{d:"M12 2C6.47 2 2 6.47 2 12s4.47 10 10 10 10-4.47 10-10S17.53 2 12 2zm0 18c-4.41 0-8-3.59-8-8s3.59-8 8-8 8 3.59 8 8-3.59 8-8 8zm3.59-13L12 10.59 8.41 7 7 8.41 10.59 12 7 15.59 8.41 17 12 13.41 15.59 17 17 15.59 13.41 12 17 8.41z"})});function fL(){return cvt}var lvt=(0,ft.jsx)("svg",{width:"24px",height:"24px",viewBox:"0 0 24 24",children:(0,ft.jsx)("path",{d:"M12 2C6.47 2 2 6.47 2 12s4.47 10 10 10 10-4.47 10-10S17.53 2 12 2zm5 13.59L15.59 17 12 13.41 8.41 17 7 15.59 10.59 12 7 8.41 8.41 7 12 10.59 15.59 7 17 8.41 13.41 12 17 15.59z"})});function K_(){return lvt}var uvt=(0,ft.jsx)("svg",{width:"24px",height:"24px",viewBox:"0 0 24 24",children:(0,ft.jsx)("path",{d:"M12 8c-2.21 0-4 1.79-4 4s1.79 4 4 4 4-1.79 4-4-1.79-4-4-4zm-7 7H3v4c0 1.1.9 2 2 2h4v-2H5v-4zM5 5h4V3H5c-1.1 0-2 .9-2 2v4h2V5zm14-2h-4v2h4v4h2V5c0-1.1-.9-2-2-2zm0 16h-4v2h4c1.1 0 2-.9 2-2v-4h-2v4z"})});function dGe(){return uvt}var gvt=(0,ft.jsx)("svg",{width:"24px",height:"24px",viewBox:"0 0 24 24",children:(0,ft.jsx)("path",{d:"M9 16.17L4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41z"})});function Hg(){return gvt}var mvt=(0,ft.jsx)("svg",{width:"24px",height:"24px",viewBox:"0 0 24 24",children:(0,ft.jsx)("path",{d:"M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z"})});function K$(){return mvt}var dvt=(0,ft.jsx)("svg",{width:"24px",height:"24px",viewBox:"0 0 24 24",children:(0,ft.jsx)("path",{d:"M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z"})});function Vg(){return dvt}var pvt=(0,ft.jsx)("svg",{width:"24px",height:"24px",viewBox:"0 0 24 24",children:(0,ft.jsx)("path",{d:"M19.35 10.04C18.67 6.59 15.64 4 12 4 9.11 4 6.6 5.64 5.35 8.04 2.34 8.36 0 10.91 0 14c0 3.31 2.69 6 6 6h13c2.76 0 5-2.24 5-5 0-2.64-2.05-4.78-4.65-4.96zM14 13v4h-4v-4H7l5-5 5 5h-3z"})});function pGe(){return pvt}var fvt=(0,ft.jsx)("svg",{width:"24px",height:"24px",viewBox:"0 0 24 24",children:(0,ft.jsx)("path",{d:"M9.4 16.6L4.8 12l4.6-4.6L8 6l-6 6 6 6 1.4-1.4zm5.2 0l4.6-4.6-4.6-4.6L16 6l6 6-6 6-1.4-1.4z"})});function fGe(){return fvt}var Bvt=(0,ft.jsx)("svg",{width:"24px",height:"24px",viewBox:"0 0 24 24",children:(0,ft.jsx)("path",{d:"M16 1H4c-1.1 0-2 .9-2 2v14h2V3h12V1zm-1 4H8c-1.1 0-1.99.9-1.99 2L6 21c0 1.1.89 2 1.99 2H19c1.1 0 2-.9 2-2V11l-6-6zM8 21V7h6v5h5v9H8z"})});function BGe(){return Bvt}var Ivt=(0,ft.jsx)("svg",{width:"24px",height:"24px",viewBox:"0 0 24 24",children:(0,ft.jsx)("path",{d:"M17 15h2V7c0-1.1-.9-2-2-2H9v2h8v8zM7 17V1H5v4H1v2h4v10c0 1.1.9 2 2 2h10v4h2v-4h4v-2H7z"})});function IGe(){return Ivt}var Cvt=(0,ft.jsx)("svg",{width:"24px",height:"24px",viewBox:"0 0 24 24",children:(0,ft.jsx)("path",{d:"M3 5v4h2V5h4V3H5c-1.1 0-2 .9-2 2zm2 10H3v4c0 1.1.9 2 2 2h4v-2H5v-4zm14 4h-4v2h4c1.1 0 2-.9 2-2v-4h-2v4zm0-16h-4v2h4v4h2V5c0-1.1-.9-2-2-2z"})});function CGe(){return Cvt}var hvt=(0,ft.jsx)("svg",{width:"24px",height:"24px",viewBox:"0 0 24 24",children:(0,ft.jsx)("path",{d:"M19 3H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm0 16H5V5h14v14zm-5.04-6.71l-2.75 3.54-1.96-2.36L6.5 17h11l-3.54-4.71z"})});function hGe(){return hvt}var yvt=(0,ft.jsx)("svg",{width:"24px",height:"24px",viewBox:"0 0 24 24",children:(0,ft.jsx)("path",{d:"M16 9v10H8V9h8m-1.5-6h-5l-1 1H5v2h14V4h-3.5l-1-1zM18 7H6v12c0 1.1.9 2 2 2h8c1.1 0 2-.9 2-2V7z"})});function Uc(){return yvt}var Qvt=(0,ft.jsx)("svg",{width:"24px",height:"24px",viewBox:"0 0 24 24",children:(0,ft.jsx)("path",{d:"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm1 15h-2v-2h2v2zm0-4h-2V7h2v6z"})});function j$(){return Qvt}var Evt=(0,ft.jsx)("svg",{width:"24px",height:"24px",viewBox:"0 0 24 24",children:(0,ft.jsx)("path",{d:"M20.5 11H19V7c0-1.1-.9-2-2-2h-4V3.5C13 2.12 11.88 1 10.5 1S8 2.12 8 3.5V5H4c-1.1 0-1.99.9-1.99 2v3.8H3.5c1.49 0 2.7 1.21 2.7 2.7s-1.21 2.7-2.7 2.7H2V20c0 1.1.9 2 2 2h3.8v-1.5c0-1.49 1.21-2.7 2.7-2.7 1.49 0 2.7 1.21 2.7 2.7V22H17c1.1 0 2-.9 2-2v-4h1.5c1.38 0 2.5-1.12 2.5-2.5S21.88 11 20.5 11z"})});function yGe(){return Evt}var bvt=(0,ft.jsx)("svg",{width:"24px",height:"24px",viewBox:"0 0 24 24",strokeWidth:"0.1px",children:(0,ft.jsx)("path",{d:"M3 13h2v-2H3v2zm0 4h2v-2H3v2zm2 4v-2H3c0 1.1.89 2 2 2zM3 9h2V7H3v2zm12 12h2v-2h-2v2zm4-18H9c-1.11 0-2 .9-2 2v10c0 1.1.89 2 2 2h10c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm0 12H9V5h10v10zm-8 6h2v-2h-2v2zm-4 0h2v-2H7v2z"})});function xvt(){return bvt}var Svt=(0,ft.jsx)("svg",{width:"24px",height:"24px",viewBox:"0 0 24 24",children:(0,ft.jsx)("path",{d:"M7 14H5v5h5v-2H7v-3zm-2-4h2V7h3V5H5v5zm12 7h-3v2h5v-5h-2v3zM14 5v2h3v3h2V5h-5z"})});function QGe(){return Svt}var Dvt=(0,ft.jsx)("svg",{width:"24px",height:"24px",viewBox:"0 0 24 24",children:(0,ft.jsx)("path",{d:"M19 9h-4V3H9v6H5l7 7 7-7zM5 18v2h14v-2H5z"})});function yB(){return Dvt}var vvt=(0,ft.jsx)("svg",{width:"24px",height:"24px",viewBox:"0 0 24 24",children:(0,ft.jsx)("path",{d:"M11 18h2v-2h-2v2zm1-16C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.41 0-8-3.59-8-8s3.59-8 8-8 8 3.59 8 8-3.59 8-8 8zm0-14c-2.21 0-4 1.79-4 4h2c0-1.1.9-2 2-2s2 .9 2 2c0 2-3 1.75-3 5h2c0-2.25 3-2.5 3-5 0-2.21-1.79-4-4-4z"})});function zl(){return vvt}var Fvt=(0,ft.jsx)("svg",{width:"24px",height:"24px",viewBox:"0 0 24 24",children:(0,ft.jsx)("path",{d:"M12 5.69l5 4.5V18h-2v-6H9v6H7v-7.81l5-4.5M12 3L2 12h3v8h6v-6h2v6h6v-8h3L12 3z"})});function BL(){return Fvt}var wvt=(0,ft.jsx)("svg",{width:"24px",height:"24px",viewBox:"0 0 24 24",children:(0,ft.jsx)("path",{d:"M19.5 9.5c-1.03 0-1.9.62-2.29 1.5h-2.92c-.39-.88-1.26-1.5-2.29-1.5s-1.9.62-2.29 1.5H6.79c-.39-.88-1.26-1.5-2.29-1.5C3.12 9.5 2 10.62 2 12s1.12 2.5 2.5 2.5c1.03 0 1.9-.62 2.29-1.5h2.92c.39.88 1.26 1.5 2.29 1.5s1.9-.62 2.29-1.5h2.92c.39.88 1.26 1.5 2.29 1.5 1.38 0 2.5-1.12 2.5-2.5s-1.12-2.5-2.5-2.5z"})});function Rvt(){return wvt}var Uvt=(0,ft.jsx)("svg",{width:"24px",height:"24px",viewBox:"0 0 24 24",children:(0,ft.jsx)("path",{d:"M6 10c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm12 0c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm-6 0c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2z"})});function PE(){return Uvt}var Lvt=(0,ft.jsx)("svg",{width:"24px",height:"24px",viewBox:"0 0 24 24",children:(0,ft.jsx)("path",{d:"M15.41 7.41L14 6l-6 6 6 6 1.41-1.41L10.83 12z"})});function W$(){return Lvt}var Tvt=(0,ft.jsx)("svg",{width:"24px",height:"24px",viewBox:"0 0 24 24",children:(0,ft.jsx)("path",{d:"M10 6L8.59 7.41 13.17 12l-4.58 4.59L10 18l6-6z"})});function X$(){return Tvt}var Pvt=(0,ft.jsx)("svg",{width:"24px",height:"24px",viewBox:"0 0 24 24",children:(0,ft.jsx)("path",{d:"M19 4H5c-1.11 0-2 .9-2 2v12c0 1.1.89 2 2 2h4v-2H5V8h14v10h-4v2h4c1.1 0 2-.9 2-2V6c0-1.1-.89-2-2-2zm-7 6l-4 4h3v6h2v-6h3l-4-4z"})});function j_(){return Pvt}var Gvt=(0,ft.jsx)("svg",{width:"24px",height:"24px",viewBox:"0 0 24 24",children:(0,ft.jsx)("path",{d:"M8 5v14l11-7z"})});function W_(){return Gvt}var Nvt=(0,ft.jsx)("svg",{width:"24px",height:"24px",viewBox:"0 0 24 24",children:(0,ft.jsx)("path",{d:"M17.65 6.35C16.2 4.9 14.21 4 12 4c-4.42 0-7.99 3.58-7.99 8s3.57 8 7.99 8c3.73 0 6.84-2.55 7.73-6h-2.08c-.82 2.33-3.04 4-5.65 4-3.31 0-6-2.69-6-6s2.69-6 6-6c1.66 0 3.14.69 4.22 1.78L13 11h7V4l-2.35 2.35z"})});function Dx(){return Nvt}var Mvt=(0,ft.jsx)("svg",{width:"24px",height:"24px",viewBox:"0 0 24 24",children:(0,ft.jsx)("path",{d:"M19 13H5v-2h14v2z"})});function IL(){return Mvt}var kvt=(0,ft.jsx)("svg",{width:"24px",height:"24px",viewBox:"0 0 24 24",children:(0,ft.jsx)("path",{d:"M13 3c-4.97 0-9 4.03-9 9H1l3.89 3.89.07.14L9 12H6c0-3.87 3.13-7 7-7s7 3.13 7 7-3.13 7-7 7c-1.93 0-3.68-.79-4.94-2.06l-1.42 1.42C8.27 19.99 10.51 21 13 21c4.97 0 9-4.03 9-9s-4.03-9-9-9zm-1 5v5l4.28 2.54.72-1.21-3.5-2.08V8H12z"})});function CL(){return kvt}var Hvt=(0,ft.jsx)("svg",{width:"24px",height:"24px",viewBox:"0 0 24 24",strokeWidth:"0.1px",children:(0,ft.jsx)("path",{d:"M17 3H5c-1.11 0-2 .9-2 2v14c0 1.1.89 2 2 2h14c1.1 0 2-.9 2-2V7l-4-4zm2 16H5V5h11.17L19 7.83V19zm-7-7c-1.66 0-3 1.34-3 3s1.34 3 3 3 3-1.34 3-3-1.34-3-3-3zM6 6h9v4H6z"})});function X_(){return Hvt}var Vvt=(0,ft.jsxs)("svg",{width:"24px",height:"24px",viewBox:"0 0 24 24",children:[(0,ft.jsx)("circle",{cx:"7",cy:"14",r:"3"}),(0,ft.jsx)("circle",{cx:"11",cy:"6",r:"3"}),(0,ft.jsx)("circle",{cx:"16.6",cy:"17.6",r:"3"})]});function Z$(){return Vvt}var _vt=(0,ft.jsx)("svg",{width:"24px",height:"24px",viewBox:"0 0 24 24",children:(0,ft.jsx)("path",{d:"M6 6h2v12H6zm3.5 6l8.5 6V6z"})});function EGe(){return _vt}var Yvt=(0,ft.jsx)("svg",{width:"24px",height:"24px",viewBox:"0 0 24 24",children:(0,ft.jsx)("path",{d:"M6 6h12v12H6z"})});function Z_(){return Yvt}var Ovt=(0,ft.jsx)("svg",{width:"24px",height:"24px",viewBox:"0 0 24 24",children:(0,ft.jsx)("path",{d:"M4 6h16v2H4zm2-4h12v2H6zm14 8H4c-1.1 0-2 .9-2 2v8c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2v-8c0-1.1-.9-2-2-2zm0 10H4v-8h16v8zm-10-7.27v6.53L16 16z"})});function q_(){return Ovt}var Jvt=(0,ft.jsx)("svg",{width:"24px",height:"24px",viewBox:"0 0 24 24",children:(0,ft.jsx)("path",{d:"M6.99 11L3 15l3.99 4v-3H14v-2H6.99v-3zM21 9l-3.99-4v3H10v2h7.01v3L21 9z"})});function bGe(){return Jvt}var zvt=(0,ft.jsx)("svg",{width:"24px",height:"24px",viewBox:"0 0 24 24",children:(0,ft.jsx)("path",{d:"M3 17v2h6v-2H3zM3 5v2h10V5H3zm10 16v-2h8v-2h-8v-2h-2v6h2zM7 9v2H3v2h4v2h2V9H7zm14 4v-2H11v2h10zm-6-4h2V7h4V5h-4V3h-2v6z"})});function tl(){return zvt}var Kvt=(0,ft.jsx)("svg",{width:"24px",height:"24px",viewBox:"0 0 24 24",children:(0,ft.jsx)("path",{d:"M12 6c3.79 0 7.17 2.13 8.82 5.5-.59 1.22-1.42 2.27-2.41 3.12l1.41 1.41c1.39-1.23 2.49-2.77 3.18-4.53C21.27 7.11 17 4 12 4c-1.27 0-2.49.2-3.64.57l1.65 1.65C10.66 6.09 11.32 6 12 6zm-1.07 1.14L13 9.21c.57.25 1.03.71 1.28 1.28l2.07 2.07c.08-.34.14-.7.14-1.07C16.5 9.01 14.48 7 12 7c-.37 0-.72.05-1.07.14zM2.01 3.87l2.68 2.68C3.06 7.83 1.77 9.53 1 11.5 2.73 15.89 7 19 12 19c1.52 0 2.98-.29 4.32-.82l3.42 3.42 1.41-1.41L3.42 2.45 2.01 3.87zm7.5 7.5l2.61 2.61c-.04.01-.08.02-.12.02-1.38 0-2.5-1.12-2.5-2.5 0-.05.01-.08.01-.13zm-3.4-3.4l1.75 1.75c-.23.55-.36 1.15-.36 1.78 0 2.48 2.02 4.5 4.5 4.5.63 0 1.23-.13 1.77-.36l.98.98c-.88.24-1.8.38-2.75.38-3.79 0-7.17-2.13-8.82-5.5.7-1.43 1.72-2.61 2.93-3.53z"})});function Ud(){return Kvt}var jvt=(0,ft.jsx)("svg",{width:"24px",height:"24px",viewBox:"0 0 24 24",children:(0,ft.jsx)("path",{d:"M12 6c3.79 0 7.17 2.13 8.82 5.5C19.17 14.87 15.79 17 12 17s-7.17-2.13-8.82-5.5C4.83 8.13 8.21 6 12 6m0-2C7 4 2.73 7.11 1 11.5 2.73 15.89 7 19 12 19s9.27-3.11 11-7.5C21.27 7.11 17 4 12 4zm0 5c1.38 0 2.5 1.12 2.5 2.5S13.38 14 12 14s-2.5-1.12-2.5-2.5S10.62 9 12 9m0-2c-2.48 0-4.5 2.02-4.5 4.5S9.52 16 12 16s4.5-2.02 4.5-4.5S14.48 7 12 7z"})});function Hm(){return jvt}var Wvt=(0,ft.jsx)("svg",{width:"24px",height:"24px",viewBox:"0 0 24 24",children:(0,ft.jsx)("path",{d:"M1 21h22L12 2 1 21zm12-3h-2v-2h2v2zm0-4h-2v-4h2v4z"})});function $_(){return Wvt}var Xvt=(0,ft.jsx)("svg",{width:"24px",height:"24px",viewBox:"0 0 24 24",children:(0,ft.jsx)("path",{d:"M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0 c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2 c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1 C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06 c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41 l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41 c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36 c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"})});function xGe(){return Xvt}var Zvt=(0,ft.jsxs)("svg",{width:"16px",height:"16px",viewBox:"0 0 16 16",children:[(0,ft.jsx)("path",{d:"M8 1.248c1.857 0 3.526.641 4.65 1.794a5 5 0 0 1 2.518 1.09C13.907 1.482 11.295 0 8 0 4.75 0 2.12 1.48.844 4.122a5 5 0 0 1 2.289-1.047C4.236 1.872 5.974 1.248 8 1.248"}),(0,ft.jsx)("path",{d:"M12 12a4 4 0 0 1-2.786-1.13l-.002-.002a1.6 1.6 0 0 0-.276-.167A2.2 2.2 0 0 0 8 10.5c-.414 0-.729.103-.935.201a1.6 1.6 0 0 0-.277.167l-.002.002A4 4 0 1 1 4 4h8a4 4 0 0 1 0 8"})]});function SGe(){return Zvt}var qvt=(0,ft.jsx)("svg",{width:"24px",height:"24px",viewBox:"0 0 24 24",children:(0,ft.jsx)("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M12 2 L20.66 7 L20.66 17 L12 22 L3.34 17 L3.34 7 Z M12 4.5 L18.5 8.25 L18.5 15.75 L12 19.5 L5.5 15.75 L5.5 8.25 Z"})});function $vt(){return qvt}var DGe=ODt,vGe=Z$,eY=Rvt,FGe=$vt,wGe=xvt;var li=kt(Qr()),Kl=class extends ny.Component{constructor(){super(...arguments);this.state={isExpanded:!!this.props.initialExpanded};this.headerClicked=()=>{this.props.onHeaderClick?this.props.onHeaderClick():this.setState({isExpanded:!this.state.isExpanded})}}render(){let r=this.props.hideOffset?"msp-control-group-children":"msp-control-group-children msp-control-offset";return this.props.childrenClassName&&(r+=" "+this.props.childrenClassName),(0,li.jsxs)("div",{className:"msp-control-group-wrapper",style:{position:"relative",marginTop:this.props.noTopMargin?0:void 0},children:[(0,li.jsx)("div",{className:"msp-control-group-header",style:{marginLeft:this.props.headerLeftMargin},title:this.props.title,children:(0,li.jsxs)(hr,{onClick:this.headerClicked,children:[!this.props.hideExpander&&(0,li.jsx)(Kn,{svg:this.state.isExpanded?rg:tg}),this.props.topRightIcon&&(0,li.jsx)(Kn,{svg:this.props.topRightIcon,style:{position:"absolute",right:"2px",top:0}}),(0,li.jsx)("b",{children:this.props.header})]})}),this.state.isExpanded&&(0,li.jsx)("div",{className:r,style:{display:this.state.isExpanded?"block":"none",maxHeight:this.props.maxHeight,overflow:"hidden",overflowY:"auto"},children:this.props.children})]})}};function RGe(e){return e}var _g=class extends ny.PureComponent{constructor(){super(...arguments);this.input=ny.createRef();this.delayHandle=void 0;this.pendingValue=void 0;this.state={originalValue:"",value:""};this.onBlur=()=>{this.setState({value:""+this.state.originalValue}),this.props.onBlur&&this.props.onBlur()};this.raiseOnChange=()=>{this.pendingValue!==void 0&&(this.props.onChange(this.pendingValue),this.pendingValue=void 0)};this.onChange=r=>{let n=r.target.value;if(this.props.isValid&&!this.props.isValid(n)||this.props.numeric&&Number.isNaN(+n)){this.clearTimeout(),this.setState({value:n});return}if(this.props.numeric)this.setState({value:n},()=>this.triggerChanged(n,+n));else{let i=(this.props.toValue||RGe)(n),a=(this.props.fromValue||RGe)(i);this.setState({value:a},()=>this.triggerChanged(a,i))}};this.onKeyUp=r=>{(r.charCode===27||r.keyCode===27||r.key==="Escape")&&this.props.blurOnEscape&&this.input.current&&this.input.current.blur()};this.onKeyPress=r=>{(r.keyCode===13||r.charCode===13||r.key==="Enter")&&(this.isPending&&(this.clearTimeout(),this.raiseOnChange()),this.props.blurOnEnter&&this.input.current&&this.input.current.blur(),this.props.onEnter&&this.props.onEnter()),r.stopPropagation()}}get isPending(){return typeof this.delayHandle<"u"}clearTimeout(){this.isPending&&(clearTimeout(this.delayHandle),this.delayHandle=void 0)}triggerChanged(r,n){this.clearTimeout(),r!==this.state.originalValue&&(this.props.delayMs?(this.pendingValue=n,this.delayHandle=setTimeout(this.raiseOnChange,this.props.delayMs)):this.props.onChange(n))}static getDerivedStateFromProps(r,n){let o=r.fromValue?r.fromValue(r.value):r.value;return o===n.originalValue?null:{originalValue:o,value:o}}render(){return(0,li.jsx)("input",{type:"text",className:this.props.className,style:this.props.style,ref:this.input,onBlur:this.onBlur,value:this.state.value,placeholder:this.props.placeholder,onChange:this.onChange,onKeyPress:this.props.onEnter||this.props.blurOnEnter||this.props.blurOnEscape?this.onKeyPress:void 0,onKeyDown:this.props.blurOnEscape?this.onKeyUp:void 0,disabled:!!this.props.isDisabled})}},tY=class extends ny.Component{constructor(){super(...arguments);this.state={isExpanded:!1};this.toggleExpanded=()=>this.setState({isExpanded:!this.state.isExpanded})}render(){let{label:r,pivot:n,controls:o}=this.props;return(0,li.jsxs)(li.Fragment,{children:[(0,li.jsx)(jl,{label:(0,li.jsxs)(li.Fragment,{children:[r,(0,li.jsx)("button",{className:"msp-btn-link msp-btn-icon msp-control-group-expander",onClick:this.toggleExpanded,title:`${this.state.isExpanded?"Less":"More"} options`,style:{background:"transparent",textAlign:"left",padding:"0"},children:(0,li.jsx)(Kn,{svg:this.state.isExpanded?IL:CB,style:{display:"inline-block"}})})]}),control:n,children:this.props.colorStripe&&(0,li.jsx)("div",{className:"msp-expandable-group-color-stripe",style:{backgroundColor:ke.toStyle(this.props.colorStripe)}})}),this.state.isExpanded&&(0,li.jsx)("div",{className:"msp-control-offset",children:o})]})}};function QB(e){return(0,li.jsxs)("div",{className:`msp-section-header${e.accent?" msp-transform-header-brand-"+e.accent:""}`,children:[e.icon&&(0,li.jsx)(Kn,{svg:e.icon}),e.title," ",(0,li.jsx)("small",{children:e.desc})]})}function hr(e){let t="msp-btn";e.inline||(t+=" msp-btn-block"),e.noOverflow&&(t+=" msp-no-overflow"),e.flex&&(t+=" msp-flex-item"),(e.commit==="on"||e.commit)&&(t+=" msp-btn-commit msp-btn-commit-on"),e.commit==="off"&&(t+=" msp-btn-commit msp-btn-commit-off"),e.children||(t+=" msp-btn-childless"),e.className&&(t+=" "+e.className);let r;return e.flex&&(typeof e.flex=="number"?r={flex:`0 0 ${e.flex}px`,padding:0,maxWidth:`${e.flex}px`}:typeof e.flex=="string"&&(r={flex:`0 0 ${e.flex}`,padding:0,maxWidth:e.flex})),e.style&&(r?Object.assign(r,e.style):r=e.style),(0,li.jsxs)("button",{onClick:e.onClick,title:e.title,disabled:e.disabled,style:r,className:t,"data-id":e["data-id"],"data-color":e["data-color"],onContextMenu:e.onContextMenu,onMouseEnter:e.onMouseEnter,onMouseLeave:e.onMouseLeave,children:[e.icon&&(0,li.jsx)(Kn,{svg:e.icon}),e.children]})}function Gr(e){let t=`msp-btn msp-btn-icon${e.small?"-small":""}${e.className?" "+e.className:""}`;typeof e.toggleState<"u"&&(t+=` msp-btn-link-toggle-${e.toggleState?"on":"off"}`),e.transparent&&(t+=" msp-transparent-bg");let r;return e.flex&&(typeof e.flex=="boolean"?r={flex:"0 0 32px",padding:0}:typeof e.flex=="number"?r={flex:`0 0 ${e.flex}px`,padding:0,maxWidth:`${e.flex}px`}:r={flex:`0 0 ${e.flex}`,padding:0,maxWidth:e.flex}),e.style&&(r?Object.assign(r,e.style):r=e.style),(0,li.jsxs)("button",{className:t,onClick:e.onClick,title:e.title,disabled:e.disabled,"data-id":e["data-id"],style:r,children:[e.svg&&(0,li.jsx)(Kn,{svg:e.svg}),e.extraContent]})}var la=class extends ny.PureComponent{constructor(){super(...arguments);this.onClick=r=>{r.currentTarget.blur(),this.props.toggle()}}render(){let r=this.props,n=r.label,o=r.isSelected?`${r.className||""} msp-control-current`:r.className;return(0,li.jsx)(hr,{icon:this.props.icon,onClick:this.onClick,title:this.props.title,inline:this.props.inline,disabled:r.disabled,style:r.style,className:o,children:n&&this.props.isSelected?(0,li.jsx)("b",{children:n}):n})}},Gs=class extends ny.PureComponent{constructor(){super(...arguments);this.state={isExpanded:!!this.props.initiallyExpanded};this.toggleExpanded=()=>this.setState({isExpanded:!this.state.isExpanded})}render(){return(0,li.jsxs)(li.Fragment,{children:[(0,li.jsx)("div",{className:"msp-control-group-header",style:{marginTop:this.props.marginTop!==void 0?this.props.marginTop:"1px",marginLeft:this.props.headerLeftMargin},children:(0,li.jsxs)("button",{className:"msp-btn msp-form-control msp-btn-block",onClick:this.toggleExpanded,style:this.props.headerStyle,children:[(0,li.jsx)(Kn,{svg:this.state.isExpanded?tg:rg}),this.props.header]})}),this.state.isExpanded&&(this.props.noOffset?this.props.children:(0,li.jsx)("div",{className:this.props.accent?"msp-accent-offset":"msp-control-offset",children:this.props.children}))]})}};function jl(e){let t="msp-control-row";return e.className&&(t+=" "+e.className),(0,li.jsxs)("div",{className:t,children:[(0,li.jsx)("span",{className:"msp-control-row-label",title:e.title,children:e.label}),(0,li.jsx)("div",{className:"msp-control-row-ctrl",children:e.control}),e.children]})}var vx=kt(Qr()),Iu=c1.createContext(void 0),pn=class extends c1.Component{constructor(r,n){super(r);this.subs=void 0;this.plugin=n,this.init&&this.init()}static{this.contextType=Iu}subscribe(r,n){typeof this.subs>"u"&&(this.subs=[]),this.subs.push(r.subscribe(n))}componentWillUnmount(){if(this.subs){for(let r of this.subs)r.unsubscribe();this.subs=void 0}}},ta=class extends c1.PureComponent{constructor(r,n){super(r,n);this.subs=void 0;this.plugin=n,this.init&&this.init()}static{this.contextType=Iu}subscribe(r,n){typeof this.subs>"u"&&(this.subs=[]),this.subs.push(r.subscribe(n))}componentWillUnmount(){if(this.subs){for(let r of this.subs)r.unsubscribe();this.subs=void 0}}},ma=class extends pn{toggleCollapsed(){this.setState({isCollapsed:!this.state.isCollapsed})}componentDidUpdate(t){this.props.initiallyCollapsed!==void 0&&t.initiallyCollapsed!==this.props.initiallyCollapsed&&this.setState({isCollapsed:this.props.initiallyCollapsed})}render(){if(this.state.isHidden)return null;let t=this.state.header.toLowerCase().replace(/\s/g,""),r=this.state.isCollapsed?"msp-transform-wrapper msp-transform-wrapper-collapsed":"msp-transform-wrapper";return(0,vx.jsxs)("div",{className:r,children:[(0,vx.jsx)("div",{id:t,className:"msp-transform-header",children:(0,vx.jsxs)(hr,{icon:this.state.brand?void 0:this.state.isCollapsed?rg:tg,noOverflow:!0,onClick:()=>this.toggleCollapsed(),className:this.state.brand?`msp-transform-header-brand msp-transform-header-brand-${this.state.brand.accent}`:void 0,title:`Click to ${this.state.isCollapsed?"expand":"collapse"}`,children:[(0,vx.jsx)(Kn,{svg:this.state.brand?.svg,inline:!0}),this.state.header,(0,vx.jsx)("small",{style:{margin:"0 6px"},children:this.state.isCollapsed?"":this.state.description})]})}),!this.state.isCollapsed&&this.renderControls()]})}constructor(t,r){super(t,r);let n=this.defaultState();t.initiallyCollapsed!==void 0&&(n.isCollapsed=t.initiallyCollapsed),t.header!==void 0&&(n.header=t.header),this.state=n}};var Ea=kt(Qa());var tee=kt(Qa());var Ns=kt(Qr()),tn=class extends tee.PureComponent{constructor(){super(...arguments);this.hide=()=>this.props.onSelect(void 0)}render(){let r=this.props,n=(0,Ns.jsx)($$,{items:r.items,onSelect:r.onSelect,current:r.current,multiselect:this.props.multiselect,noOffset:this.props.noOffset,noAccent:this.props.noAccent});return(0,Ns.jsxs)("div",{className:`msp-action-menu-options${r.header?"":" msp-action-menu-options-no-header"}`,children:[r.header&&(0,Ns.jsx)(Kl,{header:r.header,title:r.title,initialExpanded:!0,hideExpander:!0,hideOffset:!0,onHeaderClick:this.hide,topRightIcon:Vg,children:n}),!r.header&&n]})}};(s=>{function e(c,l){return l?{kind:"header",label:c,...l}:{kind:"header",label:c}}s.Header=e;function t(c,l,u){return{kind:"item",label:c,value:l,...u}}s.Item=t;function r(c,l){let{label:u,value:g,category:m,selected:p,icon:d,addOn:f,description:I}=l||{},C,y=[];for(let Q=0;Q<c.length;Q++){let E=c[Q];if(l?.filter&&!l.filter(E))continue;let b=m?.(E),x=u?u(E):""+E,S=g?g(E):E,w=I?I(E):typeof E=="string"?E:void 0,R;b?(C||(C=new Map),R=C.get(b),R||(R=[s.Header(b,{description:b})],C.set(b,R),y.push(R))):R=y;let T=f?.(E);R.push({kind:"item",label:x,value:S,icon:d?d(E):void 0,selected:p?p(E):void 0,addOn:T,description:w})}return y}s.createItems=r;let n={value:c=>c[0],label:c=>c[1],category:c=>c[2]};function o(c,l){return r(c,l?{...n,...l}:n)}s.createItemsFromSelectOptions=o;function i(c){if(oy(c))return!1;if(l1(c))return!!c.selected;for(let l of c)if(i(l))return!0;return!1}s.hasSelectedItem=i;function a(c,l){if(!oy(c)){if(l1(c))return c.value===l?c:void 0;for(let u of c){let g=a(u,l);if(g)return g}}}s.findItem=a;function A(c){if(!oy(c)){if(l1(c))return c;for(let l of c){let u=A(l);if(u)return u}}}s.getFirstItem=A})(tn||={});var $$=class e extends tee.PureComponent{constructor(){super(...arguments);this.state=e.createState(this.props);this.toggleExpanded=r=>{this.setState({isExpanded:!this.state.isExpanded}),r.currentTarget.blur()};this.selectAll=()=>{let r=eee(this.props.items,[]).filter(n=>!n.selected);this.props.onSelect(r)};this.selectNone=()=>{let r=eee(this.props.items,[]).filter(n=>!!n.selected);this.props.onSelect(r)}}static createState(r,n){let o=q$(r.items)&&oy(r.items[0])?r.items[0]:void 0,i=o?.isIndependent?!1:r.multiselect?tn.hasSelectedItem(r.items):!!r.current&&!!tn.findItem(r.items,r.current.value)||tn.hasSelectedItem(r.items);return{header:o,hasCurrent:i,isExpanded:i||(n??!!o?.initiallyExpanded)}}componentDidUpdate(r){if(this.props.items!==r.items||this.props.current!==r.current){let n=q$(this.props.items)&&q$(r.items)&&oy(this.props.items[0])&&oy(r.items[0])&&this.props.items[0].label===r.items[0].label?this.state.isExpanded:void 0;this.setState(e.createState(this.props,n))}}get multiselectHeader(){let{header:r,hasCurrent:n}=this.state;return(0,Ns.jsxs)("div",{className:"msp-flex-row msp-control-group-header",children:[(0,Ns.jsx)(hr,{icon:this.state.isExpanded?tg:rg,flex:!0,noOverflow:!0,onClick:this.toggleExpanded,title:`Click to ${this.state.isExpanded?"collapse":"expand"}.${r?.description?` ${r?.description}`:""}`,children:n?(0,Ns.jsx)("b",{children:r?.label}):r?.label}),(0,Ns.jsx)(hr,{icon:Hg,flex:!0,onClick:this.selectAll,style:{flex:"0 0 50px",textAlign:"right"},children:"All"}),(0,Ns.jsx)(hr,{icon:Vg,flex:!0,onClick:this.selectNone,style:{flex:"0 0 50px",textAlign:"right"},children:"None"})]})}get basicHeader(){let{header:r,hasCurrent:n}=this.state;return(0,Ns.jsx)("div",{className:"msp-control-group-header",style:{marginTop:"1px"},children:(0,Ns.jsx)(hr,{noOverflow:!0,icon:this.state.isExpanded?tg:rg,onClick:this.toggleExpanded,title:`Click to ${this.state.isExpanded?"collapse":"expand"}. ${r?.description?r?.description:""}`,children:n?(0,Ns.jsx)("b",{children:r?.label}):r?.label})})}render(){let{items:r,onSelect:n,current:o}=this.props;if(oy(r))return null;if(l1(r))return(0,Ns.jsx)(UGe,{item:r,onSelect:n,current:o,multiselect:this.props.multiselect});let{header:i}=this.state;return(0,Ns.jsxs)(Ns.Fragment,{children:[i&&(this.props.multiselect&&this.state.isExpanded?this.multiselectHeader:this.basicHeader),(0,Ns.jsx)("div",{className:this.props.noOffset?void 0:this.props.noAccent?"msp-control-offset":"msp-accent-offset",children:(!i||this.state.isExpanded)&&r.map((a,A)=>oy(a)?null:l1(a)?(0,Ns.jsx)(UGe,{item:a,onSelect:n,current:o,multiselect:this.props.multiselect},A):(0,Ns.jsx)(e,{items:a,onSelect:n,current:o,multiselect:this.props.multiselect,noAccent:!0},A))})]})}},UGe=({item:e,onSelect:t,current:r,multiselect:n})=>{let o=r===e,i=e.addOn?{position:"relative"}:void 0;return(0,Ns.jsxs)(hr,{icon:e.icon,noOverflow:!0,className:"msp-action-menu-button",onClick:a=>t(n?[e]:e,a),disabled:e.disabled,style:i,title:e.description,children:[o||e.selected?(0,Ns.jsx)("b",{children:e.label}):e.label,e.addOn]})};function q$(e){return!!e&&Array.isArray(e)}function l1(e){let t=e;return t&&t.kind==="item"}function oy(e){let t=e;return t&&t.kind==="header"}function eee(e,t){if(oy(e))return t;if(l1(e))return t.push(e),t;for(let r of e)eee(r,t);return t}var LGe=kt(Qa());var ree=[["black",0],["gray",8421504],["white",16777215],["red",13840661],["orange",14840576],["yellow",16565248],["green",6863872],["cyan",1484197],["blue",40160],["purple",8086783],["magenta",16394495],["violet",8200583]];var ac=kt(Qr()),u1=class extends LGe.PureComponent{constructor(){super(...arguments);this.state={isExpanded:!!this.props.param.isExpanded||!!this.props.hideNameRow,lightness:0};this.toggleExpanded=r=>{this.setState({isExpanded:!this.state.isExpanded}),r.currentTarget.blur()};this.onClickSwatch=r=>{let n=ke.fromHexString(r.currentTarget.getAttribute("data-color")||"0");n!==this.props.value&&(this.props.param.isExpanded||this.setState({isExpanded:!1}),this.update(n))};this.onR=r=>{let[,n,o]=ke.toRgb(this.props.value),i=ke.fromRgb(r,n,o);i!==this.props.value&&this.update(i)};this.onG=r=>{let[n,,o]=ke.toRgb(this.props.value),i=ke.fromRgb(n,r,o);i!==this.props.value&&this.update(i)};this.onB=r=>{let[n,o]=ke.toRgb(this.props.value),i=ke.fromRgb(n,o,r);i!==this.props.value&&this.update(i)};this.onRGB=r=>{let n=ke.fromHexStyle(r.currentTarget.value||"0");n!==this.props.value&&this.update(n)};this.onLighten=()=>{this.update(ke.lighten(this.props.value,.1))};this.onDarken=()=>{this.update(ke.darken(this.props.value,.1))}}update(r){this.props.onChange({param:this.props.param,name:this.props.name,value:r})}swatch(){return(0,ac.jsx)("div",{className:"msp-combined-color-swatch",children:ree.map(r=>(0,ac.jsx)(hr,{inline:!0,"data-color":r[1],onClick:this.onClickSwatch,style:{background:ke.toStyle(r[1])}},r[1]))})}render(){let r=this.props.param.label||uc(this.props.name),[n,o,i]=ke.toRgb(this.props.value),a=(0,ac.jsxs)(ac.Fragment,{children:[this.swatch(),(0,ac.jsx)(jl,{label:"RGB",className:"msp-control-label-short",control:(0,ac.jsxs)("div",{style:{display:"flex",textAlignLast:"center",left:"80px"},children:[(0,ac.jsx)(_g,{onChange:this.onR,numeric:!0,value:n,delayMs:250,style:{order:1,flex:"1 1 auto",minWidth:0},className:"msp-form-control",onEnter:this.props.onEnter,blurOnEnter:!0,blurOnEscape:!0}),(0,ac.jsx)(_g,{onChange:this.onG,numeric:!0,value:o,delayMs:250,style:{order:2,flex:"1 1 auto",minWidth:0},className:"msp-form-control",onEnter:this.props.onEnter,blurOnEnter:!0,blurOnEscape:!0}),(0,ac.jsx)(_g,{onChange:this.onB,numeric:!0,value:i,delayMs:250,style:{order:3,flex:"1 1 auto",minWidth:0},className:"msp-form-control",onEnter:this.props.onEnter,blurOnEnter:!0,blurOnEscape:!0}),(0,ac.jsx)("input",{onInput:this.onRGB,type:"color",value:ke.toHexStyle(this.props.value),style:{order:4,flex:"1 1 auto",minWidth:"32px",width:"32px",height:"32px",padding:"0 2px 0 2px",background:"none",border:"none",cursor:"pointer"}})]})}),(0,ac.jsxs)("div",{style:{display:"flex",textAlignLast:"center"},children:[(0,ac.jsx)(hr,{onClick:this.onLighten,style:{order:1,flex:"1 1 auto",minWidth:0},className:"msp-form-control",children:"Lighten"}),(0,ac.jsx)(hr,{onClick:this.onDarken,style:{order:1,flex:"1 1 auto",minWidth:0},className:"msp-form-control",children:"Darken"})]})]});return this.props.hideNameRow?a:(0,ac.jsxs)(ac.Fragment,{children:[(0,ac.jsx)(jl,{title:this.props.param.description,label:r,control:(0,ac.jsx)(hr,{onClick:this.toggleExpanded,inline:!0,className:"msp-combined-color-button",style:{background:ke.toStyle(this.props.value)}})}),this.state.isExpanded&&(0,ac.jsx)("div",{className:"msp-control-offset",children:a})]})}};var t6n=(function(){let e=new Map;for(let t of ree)e.set(t[1],t[0]);return e})();var iee=kt(Qa()),hC=kt(Qr());function TGe(e){switch(e.kind){case"scale-legend":return nee;case"table-legend":return oee;default:console.warn(`${e} has no associated UI component`);return}}var nee=class extends iee.PureComponent{render(){let{legend:t}=this.props,r=t.colors.map(n=>Array.isArray(n)?`${ke.toStyle(n[0])} ${100*n[1]}%`:ke.toStyle(n)).join(", ");return(0,hC.jsx)("div",{className:"msp-scale-legend",children:(0,hC.jsxs)("div",{style:{background:`linear-gradient(to right, ${r})`},children:[(0,hC.jsx)("span",{style:{float:"left"},children:t.minLabel}),(0,hC.jsx)("span",{style:{float:"right"},children:t.maxLabel})]})})}},oee=class extends iee.PureComponent{render(){let{legend:t}=this.props;return(0,hC.jsx)("div",{className:"msp-table-legend",children:t.table.map((r,n)=>{let[o,i]=r;return(0,hC.jsxs)("div",{children:[(0,hC.jsx)("div",{className:"msp-table-legend-color",style:{backgroundColor:ke.toStyle(i)}}),(0,hC.jsx)("div",{className:"msp-table-legend-text",children:o})]},n)})})}};var PGe=kt(Qa());var GGe=kt(Qr()),rY=class extends PGe.Component{constructor(t){super(t),this.state={show:!1},this.handleHover=this.handleHover.bind(this),this.handleHoverOff=this.handleHoverOff.bind(this),this.deletePoint=this.deletePoint.bind(this)}handleHover(){this.setState({show:!0});let t=Le.create(this.props.nX,this.props.nY);this.props.onmouseover(t)}handleHoverOff(){this.setState({show:!1}),this.props.onmouseover(void 0)}deletePoint(){this.props.delete(this.props.id)}render(){return[(0,GGe.jsx)("circle",{r:"10",id:`${this.props.id}`,cx:this.props.x,cy:this.props.y,onClick:this.props.onclick,onDoubleClick:this.props.delete(this.props.id),onMouseEnter:this.handleHover,onMouseLeave:this.handleHoverOff,onMouseDown:this.props.onmousedown,fill:"black"},`${this.props.id}circle`)]}};var oY=kt(Qa());var EB=kt(Qr()),eFt=.001,nY=class extends oY.Component{constructor(r){super(r);this.handleKeyDown=r=>{};this.handleKeyUp=r=>{};this.handleClick=r=>n=>{};this.handleMouseDown=r=>n=>{if(r===0||r===this.state.points.length-1||this.state.canSelectMultiple)return;let o=this.normalizePoint(Le.create(this.state.points[r][0],this.state.points[r][1]));this.ghostPoints.push(document.createElementNS(this.namespace,"circle")),this.ghostPoints[0].setAttribute("r","10"),this.ghostPoints[0].setAttribute("fill","orange"),this.ghostPoints[0].setAttribute("cx",`${o[0]}`),this.ghostPoints[0].setAttribute("cy",`${o[1]}`),this.ghostPoints[0].setAttribute("style","display: none"),this.gElement.appendChild(this.ghostPoints[0]),this.updatedX=o[0],this.updatedY=o[1],this.selected=[r]};this.deletePoint=r=>n=>{if(r===0||r===this.state.points.length-1)return;let o=this.state.points.filter((i,a)=>a!==r);o.sort((i,a)=>i[0]===a[0]?i[0]===0?i[1]-a[1]:i[1]===1?a[1]-i[1]:i[1]-a[1]:i[0]-a[0]),this.setState({points:o}),this.change(o),n.stopPropagation()};this.myRef=oY.createRef(),this.state={points:[Le.create(0,0),Le.create(1,0)],copyPoint:void 0,canSelectMultiple:!1},this.height=400,this.width=600,this.padding=70,this.selected=void 0,this.ghostPoints=[],this.namespace="http://www.w3.org/2000/svg";for(let n of this.props.data)this.state.points.push(n);this.state.points.sort((n,o)=>n[0]===o[0]?n[0]===0?n[1]-o[1]:n[1]===1?o[1]-n[1]:n[1]-o[1]:n[0]-o[0]),this.handleDrag=this.handleDrag.bind(this),this.handleMultipleDrag=this.handleMultipleDrag.bind(this),this.handleDoubleClick=this.handleDoubleClick.bind(this),this.refCallBack=this.refCallBack.bind(this),this.handlePointUpdate=this.handlePointUpdate.bind(this),this.change=this.change.bind(this),this.handleKeyUp=this.handleKeyUp.bind(this),this.handleLeave=this.handleLeave.bind(this),this.handleEnter=this.handleEnter.bind(this)}render(){let r=this.renderPoints(),n=this.renderLines(),o=this.renderHistogram(),i=this.renderAxes();return[(0,EB.jsx)("div",{children:(0,EB.jsxs)("svg",{className:"msp-canvas",ref:this.refCallBack,viewBox:`0 0 ${this.width+this.padding} ${this.height+this.padding}`,onMouseMove:this.handleDrag,onMouseUp:this.handlePointUpdate,onMouseLeave:this.handleLeave,onMouseEnter:this.handleEnter,tabIndex:0,onKeyDown:this.handleKeyDown,onKeyUp:this.handleKeyUp,onDoubleClick:this.handleDoubleClick,children:[(0,EB.jsxs)("g",{stroke:"black",fill:"black",children:[o,i,n,r]}),(0,EB.jsx)("g",{className:"ghost-points",stroke:"black",fill:"black"})]})},"LineGraph"),(0,EB.jsx)("div",{id:"modal-root"},"modal")]}componentDidMount(){this.gElement=document.getElementsByClassName("ghost-points")[0]}componentDidUpdate(r){if(r.data!==this.props.data){let n=[Le.create(0,0),Le.create(1,0)];for(let o of this.props.data)n.push(o);n.sort((o,i)=>o[0]===i[0]?o[0]===0?o[1]-i[1]:o[1]===1?i[1]-o[1]:o[1]-i[1]:o[0]-i[0]),this.selected=void 0,this.setState({points:n})}}change(r){let n=r.slice();n.shift(),n.pop(),this.props.onChange(n)}handleDrag(r){if(this.selected===void 0)return;let n=this.myRef.createSVGPoint(),o,i=this.padding/2;n.x=r.clientX,n.y=r.clientY;let a=n.matrixTransform(this.myRef.getScreenCTM().inverse());o=Le.create(a.x,a.y),(a.x<i||a.x>this.width+i)&&(a.y>this.height+i||a.y<i)?o=Le.create(this.updatedX,this.updatedY):a.x<i?o=Le.create(i,a.y):a.x>this.width+i?o=Le.create(this.width+i,a.y):a.y>this.height+i?o=Le.create(a.x,this.height+i):a.y<i?o=Le.create(a.x,i):o=Le.create(a.x,a.y),this.updatedX=o[0],this.updatedY=o[1];let A=this.unNormalizePoint(o);this.ghostPoints[0].setAttribute("style","display: visible"),this.ghostPoints[0].setAttribute("cx",`${o[0]}`),this.ghostPoints[0].setAttribute("cy",`${o[1]}`),this.props.onDrag(A)}handleMultipleDrag(){}handlePointUpdate(r){let n=this.selected;if(this.state.canSelectMultiple)return;if(n===void 0||n[0]===0||n[0]===this.state.points.length-1){this.setState({copyPoint:void 0});return}this.selected=void 0;let o=this.unNormalizePoint(Le.create(this.updatedX,this.updatedY)),i=this.state.points.filter((a,A)=>A!==n[0]);i.push(o),i.sort((a,A)=>a[0]===A[0]?a[0]===0?a[1]-A[1]:a[1]===1?A[1]-a[1]:a[1]-A[1]:a[0]-A[0]),this.setState({points:i}),this.change(i),this.gElement.innerHTML="",this.ghostPoints=[],document.removeEventListener("mousemove",this.handleDrag,!0),document.removeEventListener("mouseup",this.handlePointUpdate,!0)}handleDoubleClick(r){let n=this.myRef.createSVGPoint();n.x=r.clientX,n.y=r.clientY;let o=n.matrixTransform(this.myRef.getScreenCTM().inverse()),i=this.state.points,a=this.padding/2;if(o.x<a||o.x>this.width+a||o.y>this.height+a||o.y<this.padding/2)return;let A=this.unNormalizePoint(Le.create(o.x,o.y));i.push(A),i.sort((s,c)=>s[0]===c[0]?s[0]===0?s[1]-c[1]:s[1]===1?c[1]-s[1]:s[1]-c[1]:s[0]-c[0]),this.setState({points:i}),this.change(i)}handleLeave(){this.selected!==void 0&&(document.addEventListener("mousemove",this.handleDrag,!0),document.addEventListener("mouseup",this.handlePointUpdate,!0))}handleEnter(){document.removeEventListener("mousemove",this.handleDrag,!0),document.removeEventListener("mouseup",this.handlePointUpdate,!0)}get yAxisOptions(){return this.props.yAxis??{}}get isLogY(){return this.yAxisOptions.scale==="log"}get logMin(){return this.yAxisOptions.logMin??eFt}yToDisplay(r){if(!this.isLogY)return r;let n=this.logMin;if(r<=n)return 0;if(r>=1)return 1;let o=Math.log10(n);return(Math.log10(r)-o)/(0-o)}yFromDisplay(r){if(!this.isLogY)return r;let n=this.logMin;if(r<=0)return 0;if(r>=1)return 1;let o=Math.log10(n);return Math.pow(10,o+r*(0-o))}normalizePoint(r){let n=this.padding/2,o=this.width+n,i=this.height+n,a=r[0]*(o-n)+n,A=this.yToDisplay(r[1])*(i-n)+n,s=this.height+this.padding-A;return Le.create(a,s)}unNormalizePoint(r){let n=this.padding/2,o=this.width+n,i=this.height+n,a=(r[0]-n)/(o-n),A=(this.height+this.padding-r[1]-n)/(i-n),s=this.yFromDisplay(A);return Le.create(a,s)}refCallBack(r){r&&(this.myRef=r)}renderHistogram(){if(!this.props.volume)return null;let r=jr.getHistogram(this.props.volume.grid,jr.RobustStatsBinCount),n=$Ce(r,40),o=[],i=n.counts.length,a=this.width/i,A=this.padding/2,s=Es(n.counts)||1,c=this.isLogY,l=c?Math.log10(Math.max(2,s)):0;for(let u=0;u<i;u++){let g=this.width*(u+.5)/i+A,m=this.height+A,p=n.counts[u],d;c?(d=p>0?Math.log10(p)/l:0,d<0?d=0:d>1&&(d=1)):d=p/s;let f=this.height*(1-d)+A;o.push((0,EB.jsx)("line",{x1:g,x2:g,y1:m,y2:f,stroke:"#ded9ca",strokeWidth:a},`histogram${u}`))}return o}renderAxes(){let n=[],o=this.isLogY?[{y:this.logMin,label:this.logMin.toString()},{y:.01,label:"0.01"},{y:.1,label:"0.1"},{y:1,label:"1"}]:[{y:0,label:"0"},{y:.5,label:"0.5"},{y:1,label:"1"}];for(let i=0;i<o.length;i++){let{y:a,label:A}=o[i],s=this.normalizePoint(Le.create(0,a))[1];n.push((0,EB.jsx)("text",{x:4,y:s-4,textAnchor:"start",fontSize:"22",fill:"#888",stroke:"none",children:A},`ticklbl${i}`))}return n}renderPoints(){let r=[],n;for(let o=0;o<this.state.points.length;o++)o!==0&&o!==this.state.points.length-1&&(n=this.normalizePoint(this.state.points[o]),r.push((0,EB.jsx)(rY,{id:o,x:n[0],y:n[1],nX:this.state.points[o][0],nY:this.state.points[o][1],selected:!1,delete:this.deletePoint,onmouseover:this.props.onHover,onmousedown:this.handleMouseDown(o),onclick:this.handleClick(o)},o)));return r}renderLines(){let r=[];for(let i of this.state.points)r.push(this.normalizePoint(i));let n=[],o=r.length;for(let i=0;i<o-1;i++){let a=r[i][0],A=r[i][1],s=r[i+1][0],c=r[i+1][1];n.push((0,EB.jsx)("line",{x1:a,x2:s,y1:A,y2:c,stroke:"#cec9ba",strokeWidth:"5"},`lineOf${i}`))}return n}};var yC=kt(Qa());var Wl=kt(Qr()),GE=class extends yC.Component{constructor(){super(...arguments);this.state={isChanging:!1,current:0};this.begin=()=>{this.setState({isChanging:!0})};this.end=r=>{this.setState({isChanging:!1}),this.props.onChange(r)};this.updateCurrent=r=>{this.setState({current:r}),this.props.onChangeImmediate?.(r)};this.updateManually=r=>{this.setState({isChanging:!0});let n=r;this.props.step===1&&(n=Math.round(n)),n<this.props.min&&(n=this.props.min),n>this.props.max&&(n=this.props.max),this.setState({current:n,isChanging:!0})};this.onManualBlur=()=>{this.setState({isChanging:!1}),this.props.onChange(this.state.current)};this.onMouseWheel=r=>{let{dx:n,dy:o,dz:i}=e6(r),a=(n>=0?1:-1)*(o>=0?1:-1)*(i>=0?1:-1),A=r.getModifierState("Shift"),s=a*(this.props.max-this.props.min)/(A?100:25);this.updateCurrent(this.state.current+s)}}static getDerivedStateFromProps(r,n){return n.isChanging||r.value===n.current?null:{current:r.value}}render(){let r=this.props.step;return r===void 0&&(r=1),(0,Wl.jsxs)("div",{className:this.props.hideInput?"msp-slider msp-slider-no-input":"msp-slider",children:[(0,Wl.jsx)("div",{children:(0,Wl.jsx)(aY,{min:this.props.min,max:this.props.max,step:r,value:this.state.current,disabled:this.props.disabled,onBeforeChange:this.begin,onWheel:this.onMouseWheel,onChange:this.updateCurrent,onAfterChange:this.end})}),(0,Wl.jsx)("div",{children:(0,Wl.jsx)(_g,{numeric:!0,delayMs:50,value:this.state.current,blurOnEnter:!0,onBlur:this.onManualBlur,isDisabled:this.props.disabled,onChange:this.updateManually})})]})}},iY=class extends yC.Component{constructor(){super(...arguments);this.state={isChanging:!1,current:[0,1]};this.begin=()=>{this.setState({isChanging:!0})};this.end=r=>{this.setState({isChanging:!1}),this.props.onChange(r)};this.updateCurrent=r=>{this.setState({current:r})};this.updateMax=r=>{let n=r;this.props.step===1&&(n=Math.round(n)),n<this.state.current[0]?n=this.state.current[0]:n<this.props.min&&(n=this.props.min),n>this.props.max&&(n=this.props.max),this.props.onChange([this.state.current[0],n])};this.updateMin=r=>{let n=r;this.props.step===1&&(n=Math.round(n)),n<this.props.min&&(n=this.props.min),n>this.state.current[1]?n=this.state.current[1]:n>this.props.max&&(n=this.props.max),this.props.onChange([n,this.state.current[1]])}}static getDerivedStateFromProps(r,n){return n.isChanging||r.value[0]===n.current[0]&&r.value[1]===n.current[1]?null:{current:r.value}}render(){let r=this.props.step;return r===void 0&&(r=1),(0,Wl.jsxs)("div",{className:"msp-slider2",children:[(0,Wl.jsx)("div",{children:(0,Wl.jsx)(_g,{numeric:!0,delayMs:50,value:this.state.current[0],onEnter:this.props.onEnter,blurOnEnter:!0,isDisabled:this.props.disabled,onChange:this.updateMin})}),(0,Wl.jsx)("div",{children:(0,Wl.jsx)(aY,{min:this.props.min,max:this.props.max,step:r,value:this.state.current,disabled:this.props.disabled,onBeforeChange:this.begin,onChange:this.updateCurrent,onAfterChange:this.end,range:!0,allowCross:!0})}),(0,Wl.jsx)("div",{children:(0,Wl.jsx)(_g,{numeric:!0,delayMs:50,value:this.state.current[1],onEnter:this.props.onEnter,blurOnEnter:!0,isDisabled:this.props.disabled,onChange:this.updateMax})})]})}};function Aee(e){let t=[],r={}.hasOwnProperty;for(let n=0;n<arguments.length;n++){let o=arguments[n];if(!o)continue;let i=typeof o;if(i==="string"||i==="number")t.push(o);else if(Array.isArray(o))t.push(Aee.apply(null,o));else if(i==="object")for(let a in o)r.call(o,a)&&o[a]&&t.push(a)}return t.join(" ")}function NGe(e){return e.touches.length>1||e.type.toLowerCase()==="touchend"&&e.touches.length>0}function MGe(e,t){return e?t.touches[0].clientY:t.touches[0].pageX}function kGe(e,t){return e?t.clientY:t.pageX}function HGe(e,t){let r=t.getBoundingClientRect();return e?r.top+r.height*.5:r.left+r.width*.5}function aee(e){e.stopPropagation(),e.preventDefault()}var see=class extends yC.Component{render(){let{className:t,tipFormatter:r,vertical:n,offset:o,value:i,index:a}=this.props,A=n?{bottom:`${o}%`}:{left:`${o}%`};return(0,Wl.jsx)("div",{className:t,style:A,title:r(i,a)})}},aY=class extends yC.Component{constructor(r){super(r);this.sliderElement=yC.createRef();this.handleElements=[];this.dragOffset=0;this.startPosition=0;this.startValue=0;this._getPointsCache=void 0;this.onMouseDown=r=>{if(r.button!==0)return;let n=kGe(this.props.vertical,r);if(!this.isEventFromHandle(r))this.dragOffset=0;else{let o=HGe(this.props.vertical,r.target);this.dragOffset=n-o,n=o}this.onStart(n),this.addDocumentEvents("mouse"),aee(r)};this.onTouchMove=r=>{if(NGe(r)){this.end("touch");return}let n=MGe(this.props.vertical,r);this.onMove(r,n-this.dragOffset)};this.onTouchStart=r=>{if(NGe(r))return;let n=MGe(this.props.vertical,r);if(!this.isEventFromHandle(r))this.dragOffset=0;else{let o=HGe(this.props.vertical,r.target);this.dragOffset=n-o,n=o}this.onStart(n),this.addDocumentEvents("touch"),aee(r)};this.eventHandlers={touchmove:r=>this.onTouchMove(r),touchend:r=>this.end("touch"),mousemove:r=>this.onMouseMove(r),mouseup:r=>this.end("mouse")};this.calcOffset=r=>{let{min:n,max:o}=this.props;return(r-n)/(o-n)*100};let{range:n,min:o,max:i}=r,a=n?Array.apply(null,Array(+n+1)).map(()=>o):o,A="defaultValue"in r?r.defaultValue:a,s=r.value!==void 0?r.value:A,c=(n?s:[o,s]).map(u=>this.trimAlignValue(u)),l;n&&c[0]===c[c.length-1]&&c[0]===i?l=0:l=c.length-1,this.state={handle:null,recent:l,bounds:c}}static{this.defaultProps={prefixCls:"msp-slider-base",className:"",min:0,max:100,step:1,marks:{},handle:(0,Wl.jsx)(see,{className:"",vertical:!1,offset:0,tipFormatter:r=>r,value:0,index:0}),onBeforeChange:Hc,onChange:Hc,onAfterChange:Hc,tipFormatter:(r,n)=>r,disabled:!1,range:!1,vertical:!1,allowCross:!0,pushable:!1}}componentDidUpdate(r){if(!("value"in this.props||"min"in this.props||"max"in this.props))return;let{bounds:n}=this.state;if(r.range){let i=(this.props.value||n).map(a=>this.trimAlignValue(a,this.props));if(i.every((a,A)=>a===n[A]))return;this.setState({bounds:i}),n.some(a=>this.isValueOutOfBounds(a,this.props))&&this.props.onChange(i)}else{let o=this.props.value!==void 0?this.props.value:n[1],i=this.trimAlignValue(o,this.props);if(i===n[1]&&n[0]===r.min)return;this.setState({bounds:[r.min,i]}),this.isValueOutOfBounds(n[1],this.props)&&this.props.onChange(i)}}onChange(r){let n=this.props;!("value"in n)?this.setState(r):r.handle!==void 0&&this.setState({handle:r.handle});let i={...this.state,...r},a=n.range?i.bounds:i.bounds[1];n.onChange(a)}onMouseMove(r){let n=kGe(this.props.vertical,r);this.onMove(r,n-this.dragOffset)}onMove(r,n){aee(r);let o=this.props,i=this.state,a=n-this.startPosition;a=this.props.vertical?-a:a;let A=a/this.getSliderLength()*(o.max-o.min),s=this.trimAlignValue(this.startValue+A),c=i.bounds[i.handle];if(s===c)return;let l=[...i.bounds];l[i.handle]=s;let u=i.handle;if(o.pushable){let g=i.bounds[u];this.pushSurroundingHandles(l,u,g)}else o.allowCross&&(l.sort((g,m)=>g-m),u=l.indexOf(s));this.onChange({handle:u,bounds:l})}onStart(r){this.props.onBeforeChange(this.getValue());let o=this.calcValueByPos(r);this.startValue=o,this.startPosition=r;let i=this.state,{bounds:a}=i,A=1;if(this.props.range){let l=0;for(let g=1;g<a.length-1;++g)o>a[g]&&(l=g);Math.abs(a[l+1]-o)<Math.abs(a[l]-o)&&(l=l+1),A=l;let u=a[l+1]===a[l];u&&(A=i.recent),u&&o!==a[l+1]&&(A=o<a[l+1]?l:l+1)}this.setState({handle:A,recent:A});let s=i.bounds[A];if(o===s)return;let c=[...i.bounds];c[A]=o,this.onChange({bounds:c})}getPoints(){let{marks:r,step:n,min:o,max:i}=this.props,a=this._getPointsCache;if(!a||a.marks!==r||a.step!==n){let A={...r};if(n!==null)for(let c=o;c<=i;c+=n)A[c]=c;let s=Object.keys(A).map(parseFloat);s.sort((c,l)=>c-l),this._getPointsCache={marks:r,step:n,points:s}}return this._getPointsCache.points}getPrecision(r){let n=r.toString(),o=0;return n.indexOf(".")>=0&&(o=n.length-n.indexOf(".")-1),o}getSliderLength(){let r=this.sliderElement.current;return r?this.props.vertical?r.clientHeight:r.clientWidth:0}getSliderStart(){let n=this.sliderElement.current.getBoundingClientRect();return this.props.vertical?n.top:n.left}getValue(){let{bounds:r}=this.state;return this.props.range?r:r[1]}addDocumentEvents(r){r==="touch"?(document.addEventListener("touchmove",this.eventHandlers.touchmove),document.addEventListener("touchend",this.eventHandlers.touchend)):r==="mouse"&&(document.addEventListener("mousemove",this.eventHandlers.mousemove),document.addEventListener("mouseup",this.eventHandlers.mouseup))}calcValue(r){let{vertical:n,min:o,max:i}=this.props,a=Math.abs(r/this.getSliderLength());return n?(1-a)*(i-o)+o:a*(i-o)+o}calcValueByPos(r){let n=r-this.getSliderStart();return this.trimAlignValue(this.calcValue(n))}end(r){this.removeEvents(r),this.props.onAfterChange(this.getValue()),this.setState({handle:null})}isEventFromHandle(r){for(let n of this.handleElements)if(n.current===r.target)return!0;return!1}isValueOutOfBounds(r,n){return r<n.min||r>n.max}pushHandle(r,n,o,i){let a=r[n],A=r[n];for(;o*(A-a)<i;){if(!this.pushHandleOnePoint(r,n,o))return r[n]=a,!1;A=r[n]}return!0}pushHandleOnePoint(r,n,o){let i=this.getPoints(),A=i.indexOf(r[n])+o;if(A>=i.length||A<0)return!1;let s=n+o,c=i[A],{pushable:l}=this.props,u=o*(r[s]-c);return this.pushHandle(r,s,o,+l-u)?(r[n]=c,!0):!1}pushSurroundingHandles(r,n,o){let{pushable:i}=this.props,a=r[n],A=0;if(r[n+1]-a<+i?A=1:a-r[n-1]<+i&&(A=-1),A===0)return;let s=n+A,c=A*(r[s]-a);this.pushHandle(r,s,A,+i-c)||(r[n]=o)}removeEvents(r){r==="touch"?(document.removeEventListener("touchmove",this.eventHandlers.touchmove),document.removeEventListener("touchend",this.eventHandlers.touchend)):r==="mouse"&&(document.removeEventListener("mousemove",this.eventHandlers.mousemove),document.removeEventListener("mouseup",this.eventHandlers.mouseup))}trimAlignValue(r,n){let{handle:o,bounds:i}=this.state||{},{marks:a,step:A,min:s,max:c,allowCross:l}={...this.props,...n||{}},u=r;u<=s&&(u=s),u>=c&&(u=c),!l&&o!=null&&o>0&&u<=i[o-1]&&(u=i[o-1]),!l&&o!=null&&o<i.length-1&&u>=i[o+1]&&(u=i[o+1]);let g=Object.keys(a).map(parseFloat);if(A!==null){let d=Math.round((u-s)/A)*A+s;g.push(d)}let m=g.map(d=>Math.abs(u-d)),p=g[m.indexOf(Math.min.apply(Math,m))];return A!==null?parseFloat(p.toFixed(this.getPrecision(A))):p}render(){let{handle:r,bounds:n}=this.state,{className:o,prefixCls:i,disabled:a,vertical:A,range:s,step:c,marks:l,tipFormatter:u}=this.props,g=this.props.handle,m=n.map(this.calcOffset),p=`${i}-handle`,d=n.map((Q,E)=>Aee({[p]:!0,[`${p}-${E+1}`]:!0,[`${p}-lower`]:E===0,[`${p}-upper`]:E===n.length-1})),I={prefixCls:i,noTip:c===null||u===null,tipFormatter:u,vertical:A};if(this.handleElements.length!==n.length){this.handleElements=[];for(let Q=0;Q<n.length;Q++)this.handleElements.push(yC.createRef())}let C=n.map((Q,E)=>yC.cloneElement(g,{...I,className:d[E],value:Q,offset:m[E],dragging:r===E,index:E,key:E,ref:this.handleElements[E]}));s||C.shift();let y=Aee({[i]:!0,[`${i}-with-marks`]:Object.keys(l).length,[`${i}-disabled`]:a,[`${i}-vertical`]:this.props.vertical,[o]:!!o});return(0,Wl.jsxs)("div",{ref:this.sliderElement,className:y,onTouchStart:a?Hc:this.onTouchStart,onMouseDown:a?Hc:this.onMouseDown,onWheel:a?Hc:this.props.onWheel,children:[(0,Wl.jsx)("div",{className:`${i}-rail`}),C]})}};var tFt=/^#([0-9A-F]{3}|[0-9A-F]{4}|[0-9A-F]{6}|[0-9A-F]{8})$/i,rFt=/^rgb\(\s*(\d{1,3})\s*,\s*(\d{1,3})\s*,\s*(\d{1,3})\s*\)$/i;function QC(e){if(e==null)return;let t;if(tFt.test(e)&&(e.length===4?e=`#${e[1]}${e[1]}${e[2]}${e[2]}${e[3]}${e[3]}`:e.length===5?e=`#${e[1]}${e[1]}${e[2]}${e[2]}${e[3]}${e[3]}`:e.length===9&&(e=e.substring(0,7)),t=ke.fromHexStyle(e),t!==void 0&&!isNaN(t))||(t=xt[e.toLowerCase()],t!==void 0))return t;let r=rFt.exec(e);if(r){let n=parseInt(r[1],10),o=parseInt(r[2],10),i=parseInt(r[3],10);if(n>=0&&n<=255&&o>=0&&o<=255&&i>=0&&i<=255)return ke.fromRgb(n,o,i)}}function AY(e){let t=e.length,r=[];if(e.every(o=>Array.isArray(o))){let o=[...e];if(!o[0])return"linear-gradient(to right, #000 0%, #000 100%)";o.sort((i,a)=>i[1]-a[1]),r.push(`${ke.toStyle(o[0][0])} ${(100*o[0][1]).toFixed(2)}%`);for(let i=0,a=o.length-1;i<a;++i){let[A,s]=o[i],[c,l]=o[i+1],u=s+(l-s)/2;r.push(`${ke.toStyle(A)} ${(100*u).toFixed(2)}%`,`${ke.toStyle(c)} ${(100*u).toFixed(2)}%`)}r.push(`${ke.toStyle(o[o.length-1][0])} ${(100*o[o.length-1][1]).toFixed(2)}%`)}else{r.push(`${g1(e[0])} ${100*(1/t)}%`);for(let o=1,i=t-1;o<i;++o)r.push(`${g1(e[o])} ${100*(o/t)}%`,`${g1(e[o])} ${100*((o+1)/t)}%`);r.push(`${g1(e[t-1])} ${100*((t-1)/t)}%`)}return`linear-gradient(to right, ${r.join(", ")})`}function sY(e){if(e.length===0)return"linear-gradient(to right, #000 0%, #000 100%)";let t=e.every(n=>Array.isArray(n)),r;if(t){let n=[...e];n.sort((o,i)=>o[1]-i[1]),r=n.map(o=>g1(o,!0))}else r=e.map(n=>g1(n));return`linear-gradient(to right, ${r.join(", ")})`}function g1(e,t=!1){return Array.isArray(e)?t?`${ke.toStyle(e[0])} ${(100*e[1]).toFixed(2)}%`:ke.toStyle(e[0]):ke.toStyle(e)}function VGe(e,t=/,/){let r=[],n=e.replace(/\s+/g,""),o=0,i=0;for(let a=0,A=n.length;a<A;++a){let s=n[a];if(s==="("){i++;continue}else if(s===")"){i>0&&i--;continue}if(i>0||!t.test(s))continue;let c=n.substring(o,a);o=a+1;let l=QC(c);l!==void 0&&r.push(l)}if(o<n.length){let a=n.substring(o),A=QC(a);console.log(a,A),A!==void 0&&r.push(A)}return r}var dt=kt(Qr()),Mn=class extends Ea.PureComponent{constructor(){super(...arguments);this.onChange=r=>{if(this.props.onChange?.(r,this.props.values),this.props.onChangeValues){let n={...this.props.values,[r.name]:r.value};this.props.onChangeValues(n,this.props.values)}};this.paramGroups=VA(r=>nFt(r))}renderGroup(r){if(r.length===0)return null;let n=this.props.values,o=null,i;for(let[a,A,s]of r)A.hideIf?.(n)||(o||(o=[]),i=A.category,o.push((0,dt.jsx)(s,{param:A,onChange:this.onChange,onEnter:this.props.onEnter,isDisabled:this.props.isDisabled,name:a,value:n[a]},a)));return o?i?[(0,dt.jsx)(Gs,{header:i,children:o},i)]:o:null}renderPart(r){let n=null;for(let o of r){let i=this.renderGroup(o);if(i){n||(n=[]);for(let a of i)n.push(a)}}return n}render(){let r=this.paramGroups(this.props.params),n=this.renderPart(r.essentials),o=this.renderPart(r.advanced);return n&&o?(0,dt.jsxs)(dt.Fragment,{children:[n,(0,dt.jsx)(Gs,{header:"Advanced Options",children:o})]}):n||o}},lY=class extends pn{constructor(){super(...arguments);this.state={isDisabled:!1};this.setSettings=(r,n)=>{let o={...n,[r.name]:r.value},i=this.props.mapping.update(o,this.plugin);this.props.mapping.apply(i,this.plugin)}}componentDidMount(){this.subscribe(this.plugin.state.data.behaviors.isUpdating,r=>{this.setState({isDisabled:r})})}render(){let r=this.props.mapping.getTarget(this.plugin),n=this.props.mapping.getValues(r,this.plugin),o=this.props.mapping.params(this.plugin);return(0,dt.jsx)(Mn,{params:o,values:n,onChange:this.setSettings,isDisabled:this.state.isDisabled})}};function nFt(e){function t(a,A,s){let c=EL(A);if(c)if(!A.category)s.params[0].push([a,A,c]);else{s.map||(s.map=new Map);let l=s.map.get(A.category);l||(l=[],s.map.set(A.category,l),s.params.push(l)),l.push([a,A,c])}}function r(a,A){let s=a[0],c=A[0];return!s||!s[1].category?-1:!c||!c[1].category?1:s[1].category<c[1].category?-1:1}let n=Object.keys(e),o={params:[[]],map:void 0},i={params:[[]],map:void 0};for(let a of n){let A=e[a];A.isHidden||(A.isEssential?t(a,A,o):t(a,A,i))}return o.params.sort(r),i.params.sort(r),{essentials:o.params,advanced:i.params}}function EL(e){switch(e.type){case"value":return;case"boolean":return yL;case"number":return typeof e.min<"u"&&typeof e.max<"u"?uee:lee;case"converted":return xee;case"conditioned":return bee;case"multi-select":return yee;case"color":return u1;case"color-list":return e.offsets?pee:dee;case"vec3":return fee;case"mat4":return Bee;case"url":return Iee;case"file":return Cee;case"file-list":return hee;case"select":return m1;case"value-ref":return gY;case"data-ref":return;case"text":return uY;case"interval":return typeof e.min<"u"&&typeof e.max<"u"?mee:gee;case"group":return mY;case"mapped":return Qee;case"line-graph":return cee;case"script":return See;case"object-list":return QL;default:console.warn(`${e} has no associated UI component`);return}}var hL=class extends Ea.PureComponent{render(){let{legend:t,description:r}=this.props,n=t&&TGe(t);return(0,dt.jsx)("div",{className:"msp-help-text",children:(0,dt.jsxs)("div",{children:[(0,dt.jsxs)("div",{className:"msp-help-description",children:[(0,dt.jsx)(Kn,{svg:zl,inline:!0}),r]}),n&&(0,dt.jsx)("div",{className:"msp-help-legend",children:(0,dt.jsx)(n,{legend:t})})]})})}};function wx(e){let{props:t,state:r,control:n,toggleHelp:o,addOn:i}=e,a=[];t.param.shortLabel&&a.push("msp-control-label-short"),t.param.twoColumns&&a.push("msp-control-col-2"),t.param.multiline&&a.push("msp-control-twoline");let A=a.join(" "),s=t.param.label||uc(t.name),c=t.param.help?t.param.help(t.value):{description:t.param.description,legend:t.param.legend},l=c.description||c.legend,u=s+(l?". Click for help.":"");return(0,dt.jsxs)(dt.Fragment,{children:[(0,dt.jsx)(jl,{className:A,title:u,label:(0,dt.jsxs)(dt.Fragment,{children:[s,l&&(0,dt.jsx)(Dee,{show:r.showHelp,toggle:o,title:u})]}),control:n}),l&&r.showHelp&&(0,dt.jsx)("div",{className:"msp-control-offset",children:(0,dt.jsx)(hL,{legend:c.legend,description:c.description})}),i]})}function Dee({show:e,toggle:t,title:r}){return(0,dt.jsx)("button",{className:"msp-help msp-btn-link msp-btn-icon msp-control-group-expander",onClick:t,title:r||`${e?"Hide":"Show"} help`,style:{background:"transparent",textAlign:"left",padding:"0"},children:(0,dt.jsx)(Kn,{svg:zl})})}var Fx=class extends Ea.PureComponent{constructor(){super(...arguments);this.state={showHelp:!1};this.toggleHelp=()=>this.setState({showHelp:!this.state.showHelp})}update(r){this.props.onChange({param:this.props.param,name:this.props.name,value:r})}renderAddOn(){return null}render(){return wx({props:this.props,state:this.state,control:this.renderControl(),toggleHelp:this.toggleHelp,addOn:this.renderAddOn()})}},yL=class extends Fx{constructor(){super(...arguments);this.onClick=r=>{this.update(!this.props.value),r.currentTarget.blur()}}renderControl(){return(0,dt.jsxs)("button",{onClick:this.onClick,disabled:this.props.isDisabled,children:[(0,dt.jsx)(Kn,{svg:this.props.value?Hg:K$}),this.props.value?"On":"Off"]})}},cee=class extends Ea.PureComponent{constructor(){super(...arguments);this.state={isExpanded:!1,isOverPoint:!1,showPresets:!1,message:`${this.props.param.defaultValue.length} points`};this.onHover=r=>{this.setState({isOverPoint:!this.state.isOverPoint}),r?this.setState({message:this.pointToLabel(r)}):this.setState({message:`${this.props.value.length} points`})};this.onDrag=r=>{this.setState({message:this.pointToLabel(r)})};this.onChange=r=>{this.props.onChange({name:this.props.name,param:this.props.param,value:r})};this.toggleExpanded=r=>{this.setState({isExpanded:!this.state.isExpanded}),r.currentTarget.blur()};this.toggleShowPresets=r=>{this.setState({showPresets:!this.state.showPresets}),r.currentTarget.blur()};this.onSelectPreset=r=>{this.setState({showPresets:!1}),r&&this.onChange(r.value)}}pointToLabel(r){if(!r)return"";let n=this.props.param.getVolume?.();if(n){let{min:o,max:i,mean:a,sigma:A}=n.grid.stats,s=o+(i-o)*r[0],c=(s-a)/A;return`(${s.toFixed(2)} | ${c.toFixed(2)}\u03C3, ${r[1].toFixed(2)})`}else return`(${r[0].toFixed(2)}, ${r[1].toFixed(2)})`}render(){let r=this.props.param.label||uc(this.props.name),n=!!this.props.param.getPresets,o=n&&this.state.showPresets?tn.createItemsFromSelectOptions(this.props.param.getPresets()):null;return(0,dt.jsxs)(dt.Fragment,{children:[(0,dt.jsx)(jl,{label:r,control:(0,dt.jsxs)("div",{style:{display:"flex",textAlignLast:"center"},children:[(0,dt.jsx)("button",{onClick:this.toggleExpanded,disabled:this.props.isDisabled,style:{flex:"1 1 auto",overflow:"hidden",textOverflow:"ellipsis"},children:`${this.state.message}`}),n&&(0,dt.jsx)(Gr,{svg:hB,onClick:this.toggleShowPresets,toggleState:this.state.showPresets,title:"Presets",disabled:this.props.isDisabled,flex:!0})]})}),o&&(0,dt.jsx)("div",{className:"msp-control-offset",children:(0,dt.jsx)(tn,{items:o,onSelect:this.onSelectPreset})}),(0,dt.jsx)("div",{className:"msp-control-offset",style:{display:this.state.isExpanded?"block":"none",marginTop:1},children:(0,dt.jsx)(nY,{data:this.props.value,volume:this.props.param.getVolume?.(),yAxis:this.props.param.yAxis,onChange:this.onChange,onHover:this.onHover,onDrag:this.onDrag})})]})}},lee=class extends Ea.PureComponent{constructor(){super(...arguments);this.state={value:"0"};this.update=r=>{let n=r0(this.props.param.step||.01);r=parseFloat(r.toFixed(n)),this.props.onChange({param:this.props.param,name:this.props.name,value:r})}}render(){let r=this.props.param.label||uc(this.props.name),n=this.props.param.label||uc(this.props.name),o=r0(this.props.param.step||.01);return(0,dt.jsx)(jl,{title:this.props.param.description,label:n,control:(0,dt.jsx)(_g,{numeric:!0,value:parseFloat(this.props.value.toFixed(o)),onEnter:this.props.onEnter,placeholder:r,isDisabled:this.props.isDisabled,onChange:this.update})})}},uee=class extends Fx{constructor(){super(...arguments);this.onChange=r=>{this.update(r)}}renderControl(){let r=typeof this.props.value>"u"?this.props.param.defaultValue:this.props.value;return(0,dt.jsx)(GE,{value:r,min:this.props.param.min,max:this.props.param.max,step:this.props.param.step,onChange:this.onChange,onChangeImmediate:this.props.param.immediateUpdate?this.onChange:void 0,disabled:this.props.isDisabled,onEnter:this.props.onEnter})}},uY=class extends Fx{constructor(){super(...arguments);this.updateValue=r=>{r!==this.props.value&&this.update(r)}}renderControl(){let r=this.props.param.placeholder||this.props.param.label||uc(this.props.name);return(0,dt.jsx)(oFt,{props:this.props,placeholder:r,update:this.updateValue})}};function oFt({props:e,placeholder:t,update:r}){let[n,o]=Ea.useState(e.value),[i,a]=Ea.useState(!1);Ea.useEffect(()=>{o(e.value)},[e.value]);let A=u=>{i||e.param.disableInteractiveUpdates?o(u.target.value):(o(u.target.value),r(u.target.value))},s=u=>{a(!1);let g=u.target;e.param.disableInteractiveUpdates?o(g.value):(o(g.value),r(g.value))},c=u=>{e.param.disableInteractiveUpdates&&(o(u.target.value),r(u.target.value))},l=u=>{u.key==="Enter"&&(e.onEnter&&!e.param.multiline?(u.stopPropagation(),e.onEnter()):u.shiftKey||u.ctrlKey||u.metaKey?u.currentTarget.blur():e.param.disableInteractiveUpdates&&!e.param.multiline&&(o(n),r(n)))};return e.param.multiline?(0,dt.jsx)("div",{className:"msp-control-text-area-wrapper",children:(0,dt.jsx)("textarea",{value:n??"",placeholder:t,disabled:e.isDisabled,onChange:A,onBlur:c,onKeyDown:l,onCompositionStart:()=>a(!0),onCompositionEnd:s})}):(0,dt.jsx)("input",{type:"text",value:n??"",placeholder:t,disabled:e.isDisabled,onChange:A,onBlur:c,onKeyDown:l,onCompositionStart:()=>a(!0),onCompositionEnd:s})}var EC=class extends Ea.PureComponent{constructor(){super(...arguments);this.onChange=r=>{typeof this.props.param.defaultValue=="number"?this.update(parseInt(r.target.value,10)):this.update(r.target.value)}}update(r){this.props.onChange({param:this.props.param,name:this.props.name,value:r})}render(){let r=this.props.value!==void 0&&!this.props.param.options.some(n=>n[0]===this.props.value);return(0,dt.jsxs)("select",{className:"msp-form-control",title:this.props.title,value:this.props.value!==void 0?this.props.value:this.props.param.defaultValue,onChange:this.onChange,disabled:this.props.isDisabled,children:[r&&(0,dt.jsx)("option",{value:this.props.value,children:`[Invalid] ${this.props.value}`},this.props.value),this.props.param.options.map(([n,o])=>(0,dt.jsx)("option",{value:n,children:o},n))]})}},m1=class extends Ea.PureComponent{constructor(){super(...arguments);this.state={showHelp:!1,showOptions:!1};this.onSelect=r=>{!r||r.value===this.props.value?this.setState({showOptions:!1}):this.setState({showOptions:!1},()=>{this.props.onChange({param:this.props.param,name:this.props.name,value:r.value})})};this.toggle=()=>this.setState({showOptions:!this.state.showOptions});this.cycle=()=>{let{options:r}=this.props.param,n=r.findIndex(i=>i[0]===this.props.value),o=n===r.length-1?0:n+1;this.props.onChange({param:this.props.param,name:this.props.name,value:r[o][0]})};this.items=VA(r=>tn.createItemsFromSelectOptions(r.options));this.toggleHelp=()=>this.setState({showHelp:!this.state.showHelp})}renderControl(){let r=this.items(this.props.param),n=this.props.value!==void 0?tn.findItem(r,this.props.value):void 0,o=n?n.label:typeof this.props.value>"u"?`${tn.getFirstItem(r)?.label||""} [Default]`:`[Invalid] ${this.props.value}`,i=this.props.param.cycle?this.cycle:this.toggle,a=this.props.param.cycle?"center":"left",A=this.props.param.cycle?this.props.value==="on"?Hg:this.props.value==="off"?K$:void 0:void 0;return(0,dt.jsx)(la,{disabled:this.props.isDisabled,style:{textAlign:a,overflow:"hidden",textOverflow:"ellipsis"},label:o,title:o,icon:A,toggle:i,isSelected:this.state.showOptions,className:"msp-select-toggle"})}renderAddOn(){if(!this.state.showOptions)return null;let r=this.items(this.props.param),n=tn.findItem(r,this.props.value);return(0,dt.jsx)(tn,{items:r,current:n,onSelect:this.onSelect})}render(){return wx({props:this.props,state:this.state,control:this.renderControl(),toggleHelp:this.toggleHelp,addOn:this.renderAddOn()})}},gY=class extends Ea.PureComponent{constructor(){super(...arguments);this.state={showHelp:!1,showOptions:!1};this.onSelect=r=>{!r||r.value===this.props.value?this.setState({showOptions:!1}):this.setState({showOptions:!1},()=>{this.props.onChange({param:this.props.param,name:this.props.name,value:{ref:r.value}})})};this.toggle=()=>this.setState({showOptions:!this.state.showOptions});this.toggleHelp=()=>this.setState({showHelp:!this.state.showHelp})}get items(){return tn.createItemsFromSelectOptions(this.props.param.getOptions(this.context))}renderControl(){let r=this.items,n=this.props.value.ref?tn.findItem(r,this.props.value.ref):void 0,o=n?n.label:`[Ref] ${this.props.value.ref??""}`;return(0,dt.jsx)(la,{disabled:this.props.isDisabled,style:{textAlign:"left",overflow:"hidden",textOverflow:"ellipsis"},label:o,title:o,toggle:this.toggle,isSelected:this.state.showOptions})}renderAddOn(){if(!this.state.showOptions)return null;let r=this.items,n=tn.findItem(r,this.props.value.ref);return(0,dt.jsx)(tn,{items:r,current:n,onSelect:this.onSelect})}render(){return wx({props:this.props,state:this.state,control:this.renderControl(),toggleHelp:this.toggleHelp,addOn:this.renderAddOn()})}};gY.contextType=Iu;var gee=class extends Ea.PureComponent{constructor(){super(...arguments);this.state={isExpanded:!1};this.components={0:h.Numeric(0,{step:this.props.param.step},{label:"Min"}),1:h.Numeric(0,{step:this.props.param.step},{label:"Max"})};this.componentChange=({name:r,value:n})=>{let o=[...this.props.value];o[+r]=n,this.change(o)};this.toggleExpanded=r=>{this.setState({isExpanded:!this.state.isExpanded}),r.currentTarget.blur()}}change(r){this.props.onChange({name:this.props.name,param:this.props.param,value:r})}render(){let r=this.props.value,n=this.props.param.label||uc(this.props.name),o=r0(this.props.param.step||.01),i=`[${r[0].toFixed(o)}, ${r[1].toFixed(o)}]`;return(0,dt.jsxs)(dt.Fragment,{children:[(0,dt.jsx)(jl,{label:n,control:(0,dt.jsx)("button",{onClick:this.toggleExpanded,disabled:this.props.isDisabled,children:i})}),this.state.isExpanded&&(0,dt.jsx)("div",{className:"msp-control-offset",children:(0,dt.jsx)(Mn,{params:this.components,values:r,onChange:this.componentChange,onEnter:this.props.onEnter})})]})}},mee=class extends Fx{constructor(){super(...arguments);this.onChange=r=>{this.update(r)}}renderControl(){return(0,dt.jsx)(iY,{value:this.props.value,min:this.props.param.min,max:this.props.param.max,step:this.props.param.step,onChange:this.onChange,disabled:this.props.isDisabled,onEnter:this.props.onEnter})}};var iFt=Tu(sY),aFt=Tu(AY);function vee(e,t="0"){return{background:AFt(e.colors,e.kind==="set"),position:"absolute",bottom:"0",height:"4px",right:t,left:"0"}}function AFt(e,t){return t?aFt(e):iFt(e)}function sFt(){let e=t=>{let r=ns(t[0]);return(0,dt.jsx)("div",{style:vee({kind:r.type!=="qualitative"?"interpolate":"set",colors:r.list})})};return{ColorPresets:{all:tn.createItemsFromSelectOptions(CG,{addOn:e,description:t=>t[3]}),scale:tn.createItemsFromSelectOptions(hG,{addOn:e,description:t=>t[3]}),set:tn.createItemsFromSelectOptions(Due,{addOn:e,description:t=>t[3]})},ColorsParam:h.ObjectList({color:h.Color(0)},({color:t})=>ke.toHexString(t).toUpperCase()),OffsetColorsParam:h.ObjectList({color:h.Color(0),offset:h.Numeric(0,{min:0,max:1,step:.01})},({color:t,offset:r})=>`${ke.toHexString(t).toUpperCase()} [${r.toFixed(2)}]`),IsInterpolatedParam:h.Boolean(!1,{label:"Interpolated"})}}var cY;function _Ge(){return cY||(cY=sFt(),cY)}var dee=class extends Ea.PureComponent{constructor(){super(...arguments);this.state={showHelp:!1,show:void 0};this.toggleEdit=()=>this.setState({show:this.state.show==="edit"?void 0:"edit"});this.togglePresets=()=>this.setState({show:this.state.show==="presets"?void 0:"presets"});this.selectPreset=r=>{if(!r)return;this.setState({show:void 0});let n=ns(r.value);this.update({kind:n.type!=="qualitative"?"interpolate":"set",colors:n.list})};this.colorsChanged=({value:r})=>{this.update({kind:this.props.value.kind,colors:r.map(n=>n.color)})};this.isInterpolatedChanged=({value:r})=>{this.update({kind:r?"interpolate":"set",colors:this.props.value.colors})};this.toggleHelp=()=>this.setState({showHelp:!this.state.showHelp})}update(r){this.props.onChange({param:this.props.param,name:this.props.name,value:r})}renderControl(){let{value:r}=this.props;return(0,dt.jsxs)(dt.Fragment,{children:[(0,dt.jsxs)("button",{onClick:this.toggleEdit,style:{position:"relative",paddingRight:"33px"},children:[r.colors.length===1?"1 color":`${r.colors.length} colors`,(0,dt.jsx)("div",{style:vee(r,"33px")})]}),(0,dt.jsx)(Gr,{svg:hB,onClick:this.togglePresets,toggleState:this.state.show==="presets",title:"Color Presets",style:{padding:0,position:"absolute",right:0,top:0,width:"32px"}})]})}renderColors(){if(!this.state.show)return null;let{ColorPresets:r,ColorsParam:n,IsInterpolatedParam:o}=_Ge(),i=r[this.props.param.presetKind];if(this.state.show==="presets")return(0,dt.jsx)(tn,{items:i,onSelect:this.selectPreset});let a=this.props.value.colors.map(A=>({color:Array.isArray(A)?A[0]:A}));return(0,dt.jsxs)("div",{className:"msp-control-offset",children:[(0,dt.jsx)(QL,{name:"colors",param:n,value:a,onChange:this.colorsChanged,isDisabled:this.props.isDisabled,onEnter:this.props.onEnter}),(0,dt.jsx)(yL,{name:"isInterpolated",param:o,value:this.props.value.kind==="interpolate",onChange:this.isInterpolatedChanged,isDisabled:this.props.isDisabled,onEnter:this.props.onEnter})]})}render(){return wx({props:this.props,state:this.state,control:this.renderControl(),toggleHelp:this.toggleHelp,addOn:this.renderColors()})}},pee=class extends Ea.PureComponent{constructor(){super(...arguments);this.state={showHelp:!1,show:void 0};this.toggleEdit=()=>this.setState({show:this.state.show==="edit"?void 0:"edit"});this.togglePresets=()=>this.setState({show:this.state.show==="presets"?void 0:"presets"});this.selectPreset=r=>{if(!r)return;this.setState({show:void 0});let n=ns(r.value);this.update({kind:n.type!=="qualitative"?"interpolate":"set",colors:n.list})};this.colorsChanged=({value:r})=>{let n=r.map(o=>[o.color,o.offset]);n.sort((o,i)=>o[1]-i[1]),this.update({kind:this.props.value.kind,colors:n})};this.isInterpolatedChanged=({value:r})=>{this.update({kind:r?"interpolate":"set",colors:this.props.value.colors})};this.toggleHelp=()=>this.setState({showHelp:!this.state.showHelp})}update(r){this.props.onChange({param:this.props.param,name:this.props.name,value:r})}renderControl(){let{value:r}=this.props;return(0,dt.jsxs)(dt.Fragment,{children:[(0,dt.jsxs)("button",{onClick:this.toggleEdit,style:{position:"relative",paddingRight:"33px"},children:[r.colors.length===1?"1 color":`${r.colors.length} colors`,(0,dt.jsx)("div",{style:vee(r,"33px")})]}),(0,dt.jsx)(Gr,{svg:hB,onClick:this.togglePresets,toggleState:this.state.show==="presets",title:"Color Presets",style:{padding:0,position:"absolute",right:0,top:0,width:"32px"}})]})}renderColors(){if(!this.state.show)return null;let{ColorPresets:r,OffsetColorsParam:n,IsInterpolatedParam:o}=_Ge(),i=r[this.props.param.presetKind];if(this.state.show==="presets")return(0,dt.jsx)(tn,{items:i,onSelect:this.selectPreset});let a=this.props.value.colors,A=a.map((s,c)=>Array.isArray(s)?{color:s[0],offset:s[1]}:{color:s,offset:c/a.length});return A.sort((s,c)=>s.offset-c.offset),(0,dt.jsxs)("div",{className:"msp-control-offset",children:[(0,dt.jsx)(QL,{name:"colors",param:n,value:A,onChange:this.colorsChanged,isDisabled:this.props.isDisabled,onEnter:this.props.onEnter}),(0,dt.jsx)(yL,{name:"isInterpolated",param:o,value:this.props.value.kind==="interpolate",onChange:this.isInterpolatedChanged,isDisabled:this.props.isDisabled,onEnter:this.props.onEnter})]})}render(){return wx({props:this.props,state:this.state,control:this.renderControl(),toggleHelp:this.toggleHelp,addOn:this.renderColors()})}},fee=class extends Ea.PureComponent{constructor(){super(...arguments);this.state={isExpanded:!1};this.components={0:h.Numeric(0,{step:this.props.param.step},{label:this.props.param.fieldLabels&&this.props.param.fieldLabels.x||"X"}),1:h.Numeric(0,{step:this.props.param.step},{label:this.props.param.fieldLabels&&this.props.param.fieldLabels.y||"Y"}),2:h.Numeric(0,{step:this.props.param.step},{label:this.props.param.fieldLabels&&this.props.param.fieldLabels.z||"Z"})};this.componentChange=({name:r,value:n})=>{let o=B.copy(B.zero(),this.props.value);o[+r]=n,this.change(o)};this.toggleExpanded=r=>{this.setState({isExpanded:!this.state.isExpanded}),r.currentTarget.blur()}}change(r){this.props.onChange({name:this.props.name,param:this.props.param,value:r})}render(){let r=this.props.value,n=this.props.param.label||uc(this.props.name),o=r0(this.props.param.step||.01),i=`[${r[0].toFixed(o)}, ${r[1].toFixed(o)}, ${r[2].toFixed(o)}]`;return(0,dt.jsxs)(dt.Fragment,{children:[(0,dt.jsx)(jl,{label:n,control:(0,dt.jsx)("button",{onClick:this.toggleExpanded,disabled:this.props.isDisabled,children:(0,dt.jsx)("div",{title:i,className:"msp-no-overflow",style:{display:"block"},children:i})})}),this.state.isExpanded&&(0,dt.jsx)("div",{className:"msp-control-offset",children:(0,dt.jsx)(Mn,{params:this.components,values:r,onChange:this.componentChange,onEnter:this.props.onEnter})})]})}},Bee=class extends Ea.PureComponent{constructor(){super(...arguments);this.state={isExpanded:!1};this.components={json:h.Text(JSON.stringify(Y()),{description:"JSON array with 4x4 matrix in a column major (j * 4 + i indexing) format"})};this.componentChange=({name:r,value:n})=>{let o=Y.copy(Y(),this.props.value);r==="json"?Y.copy(o,JSON.parse(n)):o[+r]=n,this.change(o)};this.toggleExpanded=r=>{this.setState({isExpanded:!this.state.isExpanded}),r.currentTarget.blur()}}change(r){this.props.onChange({name:this.props.name,param:this.props.param,value:r})}changeValue(r){return n=>{let o=Y.copy(Y(),this.props.value);o[r]=n,this.change(o)}}get grid(){let r=this.props.value,n=[];for(let o=0;o<4;o++){let i=[];for(let a=0;a<4;a++)i.push((0,dt.jsx)(_g,{numeric:!0,delayMs:50,value:Y.getValue(r,o,a),onChange:this.changeValue(4*a+o),className:"msp-form-control",blurOnEnter:!0,isDisabled:this.props.isDisabled},a));n.push((0,dt.jsx)("div",{className:"msp-flex-row",children:i},o))}return(0,dt.jsx)("div",{className:"msp-parameter-matrix",children:n})}render(){let r={json:JSON.stringify(this.props.value)},n=this.props.param.label||uc(this.props.name);return(0,dt.jsxs)(dt.Fragment,{children:[(0,dt.jsx)(jl,{label:n,control:(0,dt.jsx)("button",{onClick:this.toggleExpanded,disabled:this.props.isDisabled,children:(0,dt.jsx)("div",{className:"msp-no-overflow",style:{display:"block"},children:"4\xD74 Matrix"})})}),this.state.isExpanded&&(0,dt.jsxs)("div",{className:"msp-control-offset",children:[this.grid,(0,dt.jsx)(Mn,{params:this.components,values:r,onChange:this.componentChange,onEnter:this.props.onEnter})]})]})}},Iee=class extends Fx{constructor(){super(...arguments);this.onChange=r=>{let n=r.target.value;n!==gn.getUrl(this.props.value||"")&&this.update(gn.Url(n))};this.onKeyPress=r=>{(r.keyCode===13||r.charCode===13||r.key==="Enter")&&this.props.onEnter&&this.props.onEnter(),r.stopPropagation()}}renderControl(){let r=this.props.param.label||uc(this.props.name);return(0,dt.jsx)("input",{type:"text",value:gn.getUrl(this.props.value||""),placeholder:r,onChange:this.onChange,onKeyPress:this.props.onEnter?this.onKeyPress:void 0,disabled:this.props.isDisabled})}},Cee=class extends Ea.PureComponent{constructor(){super(...arguments);this.state={showHelp:!1};this.onChangeFile=r=>{this.change(r.target.files[0])};this.toggleHelp=()=>this.setState({showHelp:!this.state.showHelp})}change(r){this.props.onChange({name:this.props.name,param:this.props.param,value:gn.File(r)})}renderControl(){let r=this.props.value;return(0,dt.jsxs)("div",{className:"msp-btn msp-btn-block msp-btn-action msp-loader-msp-btn-file",style:{marginTop:"1px"},children:[r?r.name:"Select a file..."," ",(0,dt.jsx)("input",{disabled:this.props.isDisabled,onChange:this.onChangeFile,type:"file",multiple:!1,accept:this.props.param.accept})]})}render(){return this.props.param.label?wx({props:this.props,state:this.state,control:this.renderControl(),toggleHelp:this.toggleHelp,addOn:null}):this.renderControl()}},hee=class extends Ea.PureComponent{constructor(){super(...arguments);this.state={showHelp:!1};this.onChangeFileList=r=>{this.change(r.target.files)};this.toggleHelp=()=>this.setState({showHelp:!this.state.showHelp})}change(r){let n=[];if(r)for(let o=0,i=r.length;o<i;++o)n.push(gn.File(r[o]));this.props.onChange({name:this.props.name,param:this.props.param,value:n})}renderControl(){let r=this.props.value,n=[];if(r)for(let i of r)n.push(i.name);let o=n.length===0?"Select files...":n.length===1?n[0]:`${n.length} files selected`;return(0,dt.jsxs)("div",{className:"msp-btn msp-btn-block msp-btn-action msp-loader-msp-btn-file",style:{marginTop:"1px"},children:[o," ",(0,dt.jsx)("input",{disabled:this.props.isDisabled,onChange:this.onChangeFileList,type:"file",multiple:!0,accept:this.props.param.accept})]})}render(){return this.props.param.label?wx({props:this.props,state:this.state,control:this.renderControl(),toggleHelp:this.toggleHelp,addOn:null}):this.renderControl()}},yee=class extends Ea.PureComponent{constructor(){super(...arguments);this.state={isExpanded:!1};this.toggleExpanded=r=>{this.setState({isExpanded:!this.state.isExpanded}),r.currentTarget.blur()}}change(r){this.props.onChange({name:this.props.name,param:this.props.param,value:r})}toggle(r){return n=>{this.props.value.indexOf(r)<0?this.change(this.props.value.concat(r)):this.change(this.props.value.filter(o=>o!==r)),n.currentTarget.blur()}}render(){let r=this.props.value,n=this.props.param.emptyValue,o=this.props.param.label||uc(this.props.name);return(0,dt.jsxs)(dt.Fragment,{children:[(0,dt.jsx)(jl,{label:o,control:(0,dt.jsx)("button",{onClick:this.toggleExpanded,disabled:this.props.isDisabled,children:r.length===0&&n?n:`${r.length} of ${this.props.param.options.length}`})}),this.state.isExpanded&&(0,dt.jsx)("div",{className:"msp-control-offset",children:this.props.param.options.map(([i,a])=>{let A=r.indexOf(i)>=0;return(0,dt.jsx)(hr,{onClick:this.toggle(i),disabled:this.props.isDisabled,style:{marginTop:"1px"},children:(0,dt.jsx)("span",{style:{float:A?"left":"right"},children:A?`\u2713 ${a}`:`${a} \u2717`})},i)})})]})}},mY=class extends Ea.PureComponent{constructor(){super(...arguments);this.state={isExpanded:!!this.props.param.isExpanded,showPresets:!1,showHelp:!1};this.onChangeParam=r=>{this.change({...this.props.value,[r.name]:r.value})};this.toggleExpanded=()=>this.setState({isExpanded:!this.state.isExpanded});this.toggleShowPresets=()=>this.setState({showPresets:!this.state.showPresets});this.presetItems=VA(r=>tn.createItemsFromSelectOptions(r.presets??[]));this.onSelectPreset=r=>{this.setState({showPresets:!1}),this.change(r?.value)}}change(r){this.props.onChange({name:this.props.name,param:this.props.param,value:r})}pivotedPresets(){if(!this.props.param.presets)return null;let r=this.props.param.label||uc(this.props.name);return(0,dt.jsxs)("div",{className:"msp-control-group-wrapper",children:[(0,dt.jsx)("div",{className:"msp-control-group-header",children:(0,dt.jsxs)("button",{className:"msp-btn msp-form-control msp-btn-block",onClick:this.toggleShowPresets,children:[(0,dt.jsx)(Kn,{svg:hB}),r," Presets"]})}),this.state.showPresets&&(0,dt.jsx)(tn,{items:this.presetItems(this.props.param),onSelect:this.onSelectPreset})]})}presets(){return this.props.param.presets?(0,dt.jsxs)(dt.Fragment,{children:[(0,dt.jsx)("div",{className:"msp-control-group-presets-wrapper",children:(0,dt.jsx)("div",{className:"msp-control-group-header",children:(0,dt.jsxs)("button",{className:"msp-btn msp-form-control msp-btn-block",onClick:this.toggleShowPresets,children:[(0,dt.jsx)(Kn,{svg:hB}),"Presets"]})})}),this.state.showPresets&&(0,dt.jsx)(tn,{items:this.presetItems(this.props.param),onSelect:this.onSelectPreset})]}):null}pivoted(){let r=this.props.param.pivot,n=this.props.param.params,o=n[r],i=EL(o),a=(0,dt.jsx)(i,{name:r,param:o,value:this.props.value[r],onChange:this.onChangeParam,onEnter:this.props.onEnter,isDisabled:this.props.isDisabled});if(!this.state.isExpanded)return(0,dt.jsxs)("div",{className:"msp-mapped-parameter-group",children:[a,(0,dt.jsx)(Gr,{svg:tl,onClick:this.toggleExpanded,toggleState:this.state.isExpanded,title:"More Options",style:{opacity:.7}})]});let A=Object.create(null);for(let s of Object.keys(n))s!==r&&(A[s]=n[s]);return(0,dt.jsxs)("div",{className:"msp-mapped-parameter-group",children:[a,(0,dt.jsx)(Gr,{svg:tl,onClick:this.toggleExpanded,toggleState:this.state.isExpanded,title:"More Options"}),(0,dt.jsxs)("div",{className:"msp-control-offset",children:[this.pivotedPresets(),(0,dt.jsx)(Mn,{params:A,onEnter:this.props.onEnter,values:this.props.value,onChange:this.onChangeParam,isDisabled:this.props.isDisabled})]})]})}render(){let r=this.props.param.params;if(Object.keys(r).length===0)return null;if(this.props.param.pivot)return this.pivoted();let n=this.props.param.label||uc(this.props.name),o=(0,dt.jsx)(Mn,{params:r,onChange:this.onChangeParam,values:this.props.value,onEnter:this.props.onEnter,isDisabled:this.props.isDisabled});return this.props.inMapped?(0,dt.jsx)("div",{className:"msp-control-offset",children:o}):this.props.param.isFlat?o:(0,dt.jsxs)("div",{className:"msp-control-group-wrapper",style:{position:"relative"},children:[(0,dt.jsx)("div",{className:"msp-control-group-header",children:(0,dt.jsxs)("button",{className:"msp-btn msp-form-control msp-btn-block",onClick:this.toggleExpanded,children:[(0,dt.jsx)(Kn,{svg:this.state.isExpanded?tg:rg}),n]})}),this.presets(),this.state.isExpanded&&(0,dt.jsx)("div",{className:"msp-control-offset",children:o})]})}},Qee=class extends Ea.PureComponent{constructor(){super(...arguments);this.state={isExpanded:!1};this.valuesCache={};this.onChangeName=r=>{this.change({name:r.value,params:this.getValues(r.value)})};this.onChangeParam=r=>{this.setValues(this.props.value.name,r.value),this.change({name:this.props.value.name,params:r.value})};this.toggleExpanded=()=>this.setState({isExpanded:!this.state.isExpanded})}setValues(r,n){this.valuesCache[r]=n}getValues(r){return r in this.valuesCache?this.valuesCache[r]:this.props.param.map(r).defaultValue}change(r){this.props.onChange({name:this.props.name,param:this.props.param,value:r})}areParamsEmpty(r){for(let n of Object.keys(r))if(!r[n].isHidden)return!1;return!0}render(){let r=this.props.value||this.props.param.defaultValue,n=this.props.param.map(r.name),o=this.props.param.label||uc(this.props.name),i=EL(n),a=this.props.param.help,A=a?{...this.props.param.select,help:c=>a({name:c,params:this.getValues(c)})}:this.props.param.select,s=(0,dt.jsx)(m1,{param:A,isDisabled:this.props.isDisabled,onChange:this.onChangeName,onEnter:this.props.onEnter,name:o,value:r.name});return i?n.type==="group"&&!n.isFlat?this.areParamsEmpty(n.params)?s:(0,dt.jsxs)("div",{className:"msp-mapped-parameter-group",children:[s,(0,dt.jsx)(Gr,{svg:tl,onClick:this.toggleExpanded,toggleState:this.state.isExpanded,title:`${o} Properties`,style:{opacity:this.state.isExpanded?void 0:.7}}),this.state.isExpanded&&(0,dt.jsx)(mY,{inMapped:!0,param:n,value:r.params,name:r.name,onChange:this.onChangeParam,onEnter:this.props.onEnter,isDisabled:this.props.isDisabled})]}):(0,dt.jsxs)(dt.Fragment,{children:[s,(0,dt.jsx)(i,{param:n,value:r.params,name:r.name,onChange:this.onChangeParam,onEnter:this.props.onEnter,isDisabled:this.props.isDisabled})]}):s}},dY=class extends Ea.PureComponent{constructor(){super(...arguments);this.state={current:this.props.value};this.onChangeParam=r=>{this.setState({current:{...this.state.current,[r.name]:r.value}})};this.apply=()=>{this.props.apply(this.state.current)}}componentDidUpdate(r){(this.props.params!==r.params||this.props.value!==r.value)&&this.setState({current:this.props.value})}render(){return(0,dt.jsxs)(dt.Fragment,{children:[(0,dt.jsx)(Mn,{params:this.props.params,onChange:this.onChangeParam,values:this.state.current,onEnter:this.apply,isDisabled:this.props.isDisabled}),(0,dt.jsx)("button",{className:"msp-btn msp-btn-block msp-form-control msp-control-top-offset",onClick:this.apply,disabled:this.props.isDisabled,children:this.props.isUpdate?"Update":"Add"})]})}},Eee=class extends Ea.PureComponent{constructor(){super(...arguments);this.state={isExpanded:!1};this.update=r=>{this.props.actions.update(r,this.props.index)};this.moveUp=()=>{this.props.actions.move(this.props.index,-1)};this.moveDown=()=>{this.props.actions.move(this.props.index,1)};this.remove=()=>{this.setState({isExpanded:!1}),this.props.actions.remove(this.props.index)};this.toggleExpanded=r=>{this.setState({isExpanded:!this.state.isExpanded}),r.currentTarget.blur()}}render(){return(0,dt.jsxs)(dt.Fragment,{children:[(0,dt.jsxs)("div",{className:"msp-param-object-list-item",children:[(0,dt.jsxs)("button",{className:"msp-btn msp-btn-block msp-form-control",onClick:this.toggleExpanded,children:[(0,dt.jsx)("span",{children:`${this.props.index+1}: `}),this.props.param.getLabel(this.props.value)]}),(0,dt.jsxs)("div",{children:[(0,dt.jsx)(Gr,{svg:LE,title:"Move Up",onClick:this.moveUp,small:!0}),(0,dt.jsx)(Gr,{svg:TE,title:"Move Down",onClick:this.moveDown,small:!0}),(0,dt.jsx)(Gr,{svg:Uc,title:"Remove",onClick:this.remove,small:!0})]})]}),this.state.isExpanded&&(0,dt.jsx)("div",{className:"msp-control-offset",children:(0,dt.jsx)(dY,{params:this.props.param.element,apply:this.update,value:this.props.value,isUpdate:!0,isDisabled:this.props.isDisabled})})]})}},QL=class extends Ea.PureComponent{constructor(){super(...arguments);this.state={isExpanded:!1,showPresets:!1};this.add=r=>{this.change([...this.props.value,r])};this.actions={update:(r,n)=>{let o=this.props.value.slice(0);o[n]=r,this.change(o)},move:(r,n)=>{let o=this.props.value;if(o.length===1)return;let i=(r+n)%o.length;i<0&&(i+=o.length),o=o.slice(0);let a=o[r];o[r]=o[i],o[i]=a,this.change(o)},remove:r=>{let n=this.props.value,o=[];for(let i=0;i<n.length;i++)r!==i&&o.push(n[i]);this.change(o)}};this.toggleExpanded=r=>{this.setState({isExpanded:!this.state.isExpanded}),r.currentTarget.blur()};this.toggleShowPresets=()=>this.setState({showPresets:!this.state.showPresets});this.presetItems=VA(r=>tn.createItemsFromSelectOptions(r.presets??[]));this.onSelectPreset=r=>{this.setState({showPresets:!1}),this.change(r?.value)}}change(r){this.props.onChange({name:this.props.name,param:this.props.param,value:r})}render(){let r=this.props.value,n=this.props.param.label||uc(this.props.name),o=`${r.length} item${r.length!==1?"s":""}`,i=!!this.props.param.presets,a=i?(0,dt.jsxs)("div",{className:"msp-flex-row",children:[(0,dt.jsx)("button",{onClick:this.toggleExpanded,disabled:this.props.isDisabled,children:o}),(0,dt.jsx)(Gr,{svg:hB,onClick:this.toggleShowPresets,toggleState:this.state.showPresets,title:"Presets",disabled:this.props.isDisabled})]}):(0,dt.jsx)("button",{onClick:this.toggleExpanded,disabled:this.props.isDisabled,children:o});return(0,dt.jsxs)(dt.Fragment,{children:[(0,dt.jsx)(jl,{label:n,control:a}),i&&this.state.showPresets&&(0,dt.jsx)(tn,{items:this.presetItems(this.props.param),onSelect:this.onSelectPreset}),this.state.isExpanded&&(0,dt.jsxs)("div",{className:"msp-control-offset",children:[this.props.value.map((A,s)=>(0,dt.jsx)(Eee,{param:this.props.param,value:A,index:s,actions:this.actions,isDisabled:this.props.isDisabled},s)),(0,dt.jsx)(Kl,{header:"New Item",children:(0,dt.jsx)(dY,{params:this.props.param.element,apply:this.add,value:this.props.param.ctor(),isDisabled:this.props.isDisabled})})]})]})}},bee=class extends Ea.PureComponent{constructor(){super(...arguments);this.onChangeCondition=r=>{this.change(this.props.param.conditionedValue(this.props.value,r.value))};this.onChangeParam=r=>{this.change(r.value)}}change(r){this.props.onChange({name:this.props.name,param:this.props.param,value:r})}render(){let r=this.props.value,n=this.props.param.conditionForValue(r),o=this.props.param.conditionParams[n],i=this.props.param.label||uc(this.props.name),a=EL(o),A=(0,dt.jsx)(m1,{param:this.props.param.select,isDisabled:this.props.isDisabled,onChange:this.onChangeCondition,onEnter:this.props.onEnter,name:`${i} Kind`,value:n});return a?(0,dt.jsxs)(dt.Fragment,{children:[A,(0,dt.jsx)(a,{param:o,value:r,name:i,onChange:this.onChangeParam,onEnter:this.props.onEnter,isDisabled:this.props.isDisabled})]}):A}},xee=class extends Ea.PureComponent{constructor(){super(...arguments);this.onChange=r=>{this.props.onChange({name:this.props.name,param:this.props.param,value:this.props.param.toValue(r.value)})}}render(){let r=this.props.param.fromValue(this.props.value),n=EL(this.props.param.converted);return n?(0,dt.jsx)(n,{param:this.props.param.converted,value:r,name:this.props.name,onChange:this.onChange,onEnter:this.props.onEnter,isDisabled:this.props.isDisabled}):null}},See=class extends Ea.PureComponent{constructor(){super(...arguments);this.onChange=({name:r,value:n})=>{let o=r;n!==this.props.value[o]&&this.props.onChange({param:this.props.param,name:this.props.name,value:{...this.props.value,[o]:n}})}}render(){let r={defaultValue:this.props.value.language,options:h.objectToOptions(zo.Info),type:"select"},n=(0,dt.jsx)(m1,{param:r,isDisabled:this.props.isDisabled,onChange:this.onChange,onEnter:this.props.onEnter,name:"language",value:this.props.value.language}),o={defaultValue:this.props.value.language,type:"text"},i=(0,dt.jsx)(uY,{param:o,isDisabled:this.props.isDisabled,onChange:this.onChange,name:"expression",value:this.props.value.expression});return(0,dt.jsxs)(dt.Fragment,{children:[n,this.props.value.language!=="mol-script"&&(0,dt.jsxs)("div",{className:"msp-help-text",style:{padding:"10px"},children:[(0,dt.jsx)(Kn,{svg:$_})," Support for PyMOL, VMD, and Jmol selections is an experimental feature and may not always work as intended."]}),i]})}};var ng=kt(Qr()),cFt={color:h.Color(xt.black,{description:"Display color of the volume."}),wireframe:h.Boolean(!1,{description:"Control display of the volume as a wireframe."}),opacity:h.Numeric(.3,{min:0,max:1,step:.01},{description:"Opacity of the volume."})},lFt=new Map([["em",[-5,5]],["2fo-fc",[0,3]],["fo-fc(+ve)",[1,5]],["fo-fc(-ve)",[-5,-1]]]),d1=class extends pn{constructor(){super(...arguments);this.ref=fr.findTagInSubtree(this.plugin.state.data.tree,this.props.bCell.transform.ref,this.props.name);this.getVisible=()=>{let r=this.plugin.state.data,n=this.ref;return n?!r.cells.get(n).state.isHidden:!1};this.toggleVisible=()=>{let r=this.plugin.state.data,n=this.ref;n&&Tm(r,n,!r.cells.get(n).state.isHidden)}}componentDidUpdate(){this.ref=fr.findTagInSubtree(this.plugin.state.data.tree,this.props.bCell.transform.ref,this.props.name)}componentDidMount(){this.subscribe(this.plugin.state.data.events.cell.stateUpdated,r=>{this.ref===r.ref&&this.forceUpdate()})}render(){let r=this.props,{isRelative:n,stats:o}=r,i=r.channels[r.name],{min:a,max:A,mean:s,sigma:c}=o,l=Math.round(100*(i.isoValue.kind==="relative"?i.isoValue.relativeValue:i.isoValue.absoluteValue))/100,u=(a-s)/c,g=(A-s)/c;if(!this.props.isUnbounded){let C=lFt.get(this.props.name);this.props.name==="em"?(u=Math.max(C[0],u),g=Math.min(C[1],g)):(u=C[0],g=C[1])}let m=s+c*u,p=s+c*g,d=f2(n?Math.round((p-m)/c)/100:c/100,2),f=n?u:m,I=n?g:p;return(0,ng.jsx)(tY,{label:r.label+(r.isRelative?" \u03C3":""),colorStripe:i.color,pivot:(0,ng.jsxs)("div",{className:"msp-volume-channel-inline-controls",children:[(0,ng.jsx)(GE,{value:l,min:f,max:I,step:d,onChange:C=>r.changeIso(r.name,C,n),onChangeImmediate:C=>r.changeIso(r.name,C,n),disabled:r.params.isDisabled,onEnter:r.params.events.onEnter}),(0,ng.jsx)(Gr,{svg:this.getVisible()?Hm:Ud,onClick:this.toggleVisible,toggleState:!1,disabled:r.params.isDisabled})]}),controls:(0,ng.jsx)(Mn,{onChange:({name:C,value:y})=>r.changeParams(r.name,C,y),params:cFt,values:i,onEnter:r.params.events.onEnter,isDisabled:r.params.isDisabled})})}},pY=class extends pn{constructor(){super(...arguments);this.changeIso=(r,n,o)=>{let i=this.props.params;this.newParams({...i,entry:{name:i.entry.name,params:{...i.entry.params,channels:{...i.entry.params.channels,[r]:{...i.entry.params.channels[r],isoValue:o?Ze.IsoValue.relative(n):Ze.IsoValue.absolute(n)}}}}})};this.changeParams=(r,n,o)=>{let i=this.props.params;this.newParams({...i,entry:{name:i.entry.name,params:{...i.entry.params,channels:{...i.entry.params.channels,[r]:{...i.entry.params.channels[r],[n]:o}}}}})};this.changeOption=({name:r,value:n})=>{let o=this.props.params;if(r==="entry")this.newParams({...o,entry:{name:n,params:o.entry.params}});else{let i=this.props.b.data,a=i.info.kind==="em",A=n.params.isRelative,s=i.info.header.sampling[0],c=o.entry.params.channels,u={...o.entry.params.view.name===n.name?o.entry.params.view.params:this.props.info.params.entry.map(o.entry.name).params.view.map(n.name).defaultValue};n.name==="selection-box"?u.radius=n.params.radius:n.name==="camera-target"?(u.radius=n.params.radius,u.dynamicDetailLevel=n.params.dynamicDetailLevel):n.name==="box"?(u.bottomLeft=n.params.bottomLeft,u.topRight=n.params.topRight):n.name==="auto"&&(u.radius=n.params.radius,u.selectionDetailLevel=n.params.selectionDetailLevel),u.isUnbounded=!!n.params.isUnbounded,this.newParams({...o,entry:{name:o.entry.name,params:{...o.entry.params,view:{name:n.name,params:u},detailLevel:n.params.detailLevel,channels:a?{em:this.convert(c.em,s.valuesInfo[0],A)}:{"2fo-fc":this.convert(c["2fo-fc"],s.valuesInfo[0],A),"fo-fc(+ve)":this.convert(c["fo-fc(+ve)"],s.valuesInfo[1],A),"fo-fc(-ve)":this.convert(c["fo-fc(-ve)"],s.valuesInfo[1],A)}}}})}}}areInitial(r){return h.areEqual(this.props.info.params,r,this.props.info.initialValues)}newParams(r){this.props.events.onChange(r,this.areInitial(r))}convert(r,n,o){return{...r,isoValue:o?Ze.IsoValue.toRelative(r.isoValue,n):Ze.IsoValue.toAbsolute(r.isoValue,n)}}render(){if(!this.props.b)return null;let r=this.props.b.data,n=r.info.kind==="em",o=n?"em":"2fo-fc",i=this.props.params,a=this.props.info.params.entry.map(i.entry.name),A=a.params.detailLevel,s={...A,label:"Dynamic Detail",defaultValue:a.params.view.map("camera-target").params.dynamicDetailLevel.defaultValue},c={...A,label:"Selection Detail",defaultValue:a.params.view.map("auto").params.selectionDetailLevel.defaultValue},l=r.info.header.sampling[0],u=i.entry.params.channels[o].isoValue.kind==="relative",g=h.Boolean(u,{description:"Use normalized or absolute isocontour scale.",label:"Normalized"}),m=!!i.entry.params.view.params.isUnbounded,p=h.Boolean(m,{description:"Show full/limited range of iso-values for more fine-grained control.",label:"Unbounded"}),d=i.entry.params.view.name==="off",f={entry:h.Select(i.entry.name,r.data.entries.map(C=>[C.dataId,C.dataId]),{isHidden:d,description:"Which entry with volume data to display."}),view:h.MappedStatic(i.entry.params.view.name,{off:h.Group({isRelative:h.Boolean(u,{isHidden:!0}),isUnbounded:h.Boolean(m,{isHidden:!0})},{description:"Display off."}),box:h.Group({bottomLeft:h.Vec3(B.zero()),topRight:h.Vec3(B.zero()),detailLevel:A,isRelative:g,isUnbounded:p},{description:"Static box defined by cartesian coords."}),"selection-box":h.Group({radius:h.Numeric(5,{min:0,max:50,step:.5},{description:"Radius in \u212B within which the volume is shown."}),detailLevel:A,isRelative:g,isUnbounded:p},{description:"Box around focused element."}),"camera-target":h.Group({radius:h.Numeric(.5,{min:0,max:1,step:.05},{description:"Radius within which the volume is shown (relative to the field of view)."}),detailLevel:{...A,isHidden:!0},dynamicDetailLevel:s,isRelative:g,isUnbounded:p},{description:"Box around camera target."}),cell:h.Group({detailLevel:A,isRelative:g,isUnbounded:p},{description:"Box around the structure's bounding box."}),auto:h.Group({radius:h.Numeric(5,{min:0,max:50,step:.5},{description:"Radius in \u212B within which the volume is shown."}),detailLevel:A,selectionDetailLevel:c,isRelative:g,isUnbounded:p},{description:"Box around focused element."})},{options:Is.ViewTypeOptions,description:'Controls what of the volume is displayed. "Off" hides the volume alltogether. "Bounded box" shows the volume inside the given box. "Around Focus" shows the volume around the element/atom last interacted with. "Around Camera" shows the volume around the point the camera is targeting. "Whole Structure" shows the volume for the whole structure.'})},I={entry:i.entry.name,view:{name:i.entry.params.view.name,params:{detailLevel:i.entry.params.detailLevel,radius:i.entry.params.view.params.radius,bottomLeft:i.entry.params.view.params.bottomLeft,topRight:i.entry.params.view.params.topRight,selectionDetailLevel:i.entry.params.view.params.selectionDetailLevel,dynamicDetailLevel:i.entry.params.view.params.dynamicDetailLevel,isRelative:u,isUnbounded:m}}};return d?(0,ng.jsx)(Mn,{onChange:this.changeOption,params:f,values:I,onEnter:this.props.events.onEnter,isDisabled:this.props.isDisabled}):(0,ng.jsxs)(ng.Fragment,{children:[!n&&(0,ng.jsx)(d1,{label:"2Fo-Fc",name:"2fo-fc",bCell:this.props.bCell,channels:i.entry.params.channels,changeIso:this.changeIso,changeParams:this.changeParams,isRelative:u,params:this.props,stats:l.valuesInfo[0],isUnbounded:m}),!n&&(0,ng.jsx)(d1,{label:"Fo-Fc(+ve)",name:"fo-fc(+ve)",bCell:this.props.bCell,channels:i.entry.params.channels,changeIso:this.changeIso,changeParams:this.changeParams,isRelative:u,params:this.props,stats:l.valuesInfo[1],isUnbounded:m}),!n&&(0,ng.jsx)(d1,{label:"Fo-Fc(-ve)",name:"fo-fc(-ve)",bCell:this.props.bCell,channels:i.entry.params.channels,changeIso:this.changeIso,changeParams:this.changeParams,isRelative:u,params:this.props,stats:l.valuesInfo[1],isUnbounded:m}),n&&(0,ng.jsx)(d1,{label:"EM",name:"em",bCell:this.props.bCell,channels:i.entry.params.channels,changeIso:this.changeIso,changeParams:this.changeParams,isRelative:u,params:this.props,stats:l.valuesInfo[0],isUnbounded:m}),(0,ng.jsx)(Mn,{onChange:this.changeOption,params:f,values:I,onEnter:this.props.events.onEnter,isDisabled:this.props.isDisabled})]})}};var NE=()=>({...A1(),customParamEditors:[[bx,pY]]});var uFt=5e3,zGe=10,KGe=1,Uee={numberOfSpherePoints:h.Numeric(175,{min:35,max:700,step:1},{description:"Number of spheres/directions to test for membrane placement. Original value is 350."}),stepSize:h.Numeric(1,{min:.25,max:4,step:.25},{description:"Thickness of membrane slices that will be tested"}),minThickness:h.Numeric(20,{min:10,max:30,step:1},{description:"Minimum membrane thickness used during refinement"}),maxThickness:h.Numeric(40,{min:30,max:50,step:1},{description:"Maximum membrane thickness used during refinement"}),asaCutoff:h.Numeric(40,{min:10,max:100,step:1},{description:"Relative ASA cutoff above which residues will be considered"}),adjust:h.Numeric(14,{min:0,max:30,step:1},{description:"Minimum length of membrane-spanning regions (original values: 14 for alpha-helices and 5 for beta sheets). Set to 0 to not optimize membrane thickness."}),tmdetDefinition:h.Boolean(!1,{description:"Use TMDET's classification of membrane-favoring amino acids. TMDET's classification shows better performance on porins and other beta-barrel structures."})},gFt=new Set(["ALA","CYS","GLY","HIS","ILE","LEU","MET","PHE","SER","TRP","VAL"]),mFt=new Set(["LEU","ILE","VAL","PHE","MET","GLY","TRP","TYR"]);function jGe(e,t){return ve.create("Compute Membrane Orientation",async r=>await yFt(r,e,t))}var dFt=B.add,pFt=B.clone,fFt=B.create,BFt=B.distance,bB=B.dot,IFt=B.magnitude,CFt=B.normalize,WGe=B.scale,YGe=B.scaleAndAdd,Rx=B.set,XGe=B.squaredDistance,fY=B.sub,bC=B.zero,p1=new gc;async function hFt(e,t,r){let n=W.Location.create(e),{label_atom_id:o,label_comp_id:i,x:a,y:A,z:s}=Ke.atom,c=t.asaCutoff/100;p1.reset();let l=new Array,u=new Array,g=new Array,m=t.tmdetDefinition?mFt:gFt;function p(C){return ge.isAtomic(C.unit)?C.unit.model.atomicHierarchy.residues.label_seq_id.valueKind(C.unit.residueIndex[C.element])===0:Ree()}let d=bC();for(let C=0,y=e.units.length;C<y;++C){let Q=e.units[C],{elements:E}=Q;n.unit=Q;for(let b=0,x=E.length;b<x;++b){let S=E[b];n.element=S,!(qy(Q,S)!==5||!p(n))&&(o(n)!=="CA"&&o(n)!=="BB"||JGe[i(n)]&&(Rx(d,a(n),A(n),s(n)),p1.includeStep(d),l.push(e.serialMapping.getSerialIndex(n.unit,n.element)),Vp.getValue(n,r)/JGe[i(n)]>c&&(u.push(e.serialMapping.getSerialIndex(n.unit,n.element)),g.push(SFt(m,i(n))))))}}p1.finishedIncludeStep();let f=pFt(p1.center);for(let C=0,y=l.length;C<y;C++)f1(n,e,l[C]),Rx(d,a(n),A(n),s(n)),p1.radiusStep(d);let I=1.2*Math.sqrt(p1.radiusSq);return{...t,structure:e,offsets:l,exposed:u,hydrophobic:g,centroid:f,extent:I,large:l.length>uFt}}async function yFt(e,t,r){let n={...h.getDefaultValues(bU),probeSize:4,traceOnly:!0,numberOfSpherePoints:184},o=await Vp.compute(t,n).runInContext(e),i=await hFt(t,r,o),a=Tee.initial(i),A=await wee(e,"Placing initial membrane...",i,qGe(i,i.numberOfSpherePoints),a),s=await wee(e,"Refining membrane placement...",i,xFt(i,A),a),c=A.qmax>s.qmax?A:s;i.adjust&&!i.large&&(c=await QFt(e,"Adjusting membrane thickness...",i,c,a));let l=bC(),u=bC();fY(l,c.planePoint1,c.planePoint2),CFt(l,l),dFt(u,c.planePoint1,c.planePoint2),WGe(u,u,.5);let g=EFt(i,c,u);return{planePoint1:c.planePoint1,planePoint2:c.planePoint2,normalVector:l,centroid:u,radius:g}}var Fee;(r=>{function e(n,o,i){return{planePoint1:n,planePoint2:o,stats:i}}r.initial=e;function t(n,o,i,a,A,s){let c=bC();return fY(c,s,n),{planePoint1:o,planePoint2:i,stats:a,normalVector:c,spherePoint:n,qmax:A}}r.scored=t})(Fee||={});async function wee(e,t,r,n,o){let{centroid:i,stepSize:a,minThickness:A,maxThickness:s,large:c}=r,l,u=0,g=bC();for(let m=0,p=n.length;m<p;m++){e.shouldUpdate&&t&&(m+1)%(c?KGe:zGe)===0&&await e.update({message:t,current:m+1,max:p});let d=n[m];fY(g,i,d),WGe(g,g,2);let f=IFt(g),I=Tee.sliced(r,a,d,g,f),C=[];for(let Q=0,E=f-a;Q<E;Q+=a){let b=bC(),x=bC();YGe(b,d,g,Q/f),YGe(x,d,g,(Q+a)/f);let S=I[Math.round(Q/a)];C.push(Fee.initial(b,x,S))}let y=Math.floor(A/a-1);for(let Q=0,E=s;Q<=E;){for(let b=0,x=C.length-1-y;b<x;b++){let S=0,w=0;for(let R=0;R<y;R++){let T=C[b+R];R===0||R===y-1?(S+=Math.floor(.5*T.stats.hphob),w+=.5*T.stats.hphil):(S+=T.stats.hphob,w+=T.stats.hphil)}if(S!==0){let R={hphob:S,hphil:w},T=bFt(R,o);T>=u&&(u=T,l=Fee.scored(d,C[b].planePoint1,C[b+y].planePoint2,R,u,i))}}y++,Q=(y+1)*a}}return l}async function QFt(e,t,r,n,o){let{minThickness:i,large:a}=r,A=.3,s=BFt(n.planePoint1,n.planePoint2),c=OGe(r,n).length,l=n,u=0,g=Math.ceil((s-i)/A);for(;s>i;){u++,e.shouldUpdate&&t&&u%(a?KGe:zGe)===0&&await e.update({message:t,current:u,max:g});let m={...r,maxThickness:s,stepSize:A},p=await wee(e,void 0,m,[n.spherePoint],o);if(p){let d=OGe(r,p).length;d>c&&(c=d,l=p)}s-=A}return l}function OGe(e,t){let{offsets:r,structure:n,adjust:o}=e,{normalVector:i,planePoint1:a,planePoint2:A}=t,{units:s}=n,{elementIndices:c,unitIndices:l}=n.serialMapping,u=bC(),{auth_seq_id:g}=Ke.residue,m=-bB(i,a),p=-bB(i,A),d=Math.min(m,p),f=Math.max(m,p),I=Object.create(null),C=Object.create(null),y=[],Q,E=null,b,x=s[0].model.atomicHierarchy.residues.auth_seq_id.value(s[0].chainIndex[0])-1,S=0,w=0;for(let v=0,U=r.length;v<U;v++){let G=s[l[r[v]]];ge.isAtomic(G)||Ree();let N=c[r[v]];Q=G.model.atomicHierarchy.chains.auth_asym_id.value(G.chainIndex[N]),Q!==E&&(I[Q]||(I[Q]=new Set),C[Q]||(C[Q]=new Set),E=Q),b=G.model.atomicHierarchy.residues.auth_seq_id.value(G.residueIndex[N]),Rx(u,G.conformation.x(N),G.conformation.y(N),G.conformation.z(N)),Lee(u,i,d,f)?I[Q].add(b):C[Q].add(b)}for(let v=0,U=r.length;v<U;v++){let G=s[l[r[v]]];ge.isAtomic(G)||Ree();let N=c[r[v]];Q=G.model.atomicHierarchy.chains.auth_asym_id.value(G.chainIndex[N]),b=G.model.atomicHierarchy.residues.auth_seq_id.value(G.residueIndex[N]),I[Q].has(b)&&(Q!==E&&(y.push({start:S,end:w}),E=Q,S=v,w=v),b!==x+1?(C[Q].has(x+1)&&(y.push({start:S,end:w}),S=v),x=b,w=v):(x++,w++))}y.push({start:S,end:w});let R=W.Location.create(n),T,L,F=[];for(let v=0,U=y.length;v<U;v++){let{start:G,end:N}=y[v];if(G===0||N===r.length-1)continue;f1(R,n,r[G-1]),Rx(u,R.unit.conformation.x(R.element),R.unit.conformation.y(R.element),R.unit.conformation.z(R.element));let k=-bB(i,u);f1(R,n,r[N+1]),Rx(u,R.unit.conformation.x(R.element),R.unit.conformation.y(R.element),R.unit.conformation.z(R.element));let J=-bB(i,u);if(Math.min(k,J)<d&&Math.max(k,J)>f){if(f1(R,n,r[G]),T=g(R),f1(R,n,r[N]),L=g(R),Math.abs(T-L)+1<o)return[];F.push(y[v])}}return F}function Ree(){throw new Error("Property only available for atomic models.")}function EFt(e,t,r){let{offsets:n,structure:o}=e,{normalVector:i,planePoint1:a,planePoint2:A}=t,s=W.Location.create(o),c=bC(),{x:l,y:u,z:g}=Ke.atom,m=-bB(i,a),p=-bB(i,A),d=Math.min(m,p),f=Math.max(m,p),I=0;for(let C=0,y=n.length;C<y;C++)if(f1(s,o,n[C]),Rx(c,l(s),u(s),g(s)),Lee(c,i,d,f)){let Q=XGe(c,r);Q>I&&(I=Q)}return Math.sqrt(I)}function bFt(e,t){t.hphob<1&&(t.hphob=.1),t.hphil<1&&(t.hphil+=1);let r=e.hphob+e.hphil;return(e.hphob*(t.hphil-e.hphil)-e.hphil*(t.hphob-e.hphob))/Math.sqrt(r*t.hphob*t.hphil*(t.hphob+t.hphil-r))}function ZGe(e,t,r,n){let o=-bB(t,r),i=-bB(t,n);return Lee(e,t,Math.min(o,i),Math.max(o,i))}function Lee(e,t,r,n){let o=-bB(t,e);return o>r&&o<n}function qGe(e,t){let{centroid:r,extent:n}=e,o=[],i=0,a,A,s;for(let c=1,l=t+1;c<l;c++){a=-1+2*(c-1)/(2*t-1),A=Math.acos(a),s=c===1||c===t?0:(i+3.6/Math.sqrt(2*t*(1-a*a)))%(2*Math.PI);let u=fFt(n*Math.sin(s)*Math.sin(A)+r[0],n*Math.cos(A)+r[1],n*Math.cos(s)*Math.sin(A)+r[2]);o[c-1]=u,i=s}return o}function xFt(e,t){let{numberOfSpherePoints:r,extent:n}=e,o=qGe(e,3e4),i=4,a=[],A=2*n/r;for(;a.length<r;){let s=(A+i)*(A+i);a=[];for(let c=0,l=o.length;c<l;c++)XGe(o[c],t.spherePoint)<s&&a.push(o[c]);i+=.2}return a}var Tee;(n=>{function e(o){let{exposed:i,hydrophobic:a}=o,A=0,s=0;for(let c=0,l=i.length;c<l;c++)a[c]?A++:s++;return{hphob:A,hphil:s}}n.initial=e;let t=bC();function r(o,i,a,A,s){let{exposed:c,hydrophobic:l,structure:u}=o,{units:g,serialMapping:m}=u,{unitIndices:p,elementIndices:d}=m,f=[];for(let I=0,C=s-i;I<C;I+=i)f[f.length]={hphob:0,hphil:0};for(let I=0,C=c.length;I<C;I++){let y=g[p[c[I]]],Q=d[c[I]];Rx(t,y.conformation.x(Q),y.conformation.y(Q),y.conformation.z(Q)),fY(t,t,a),l[I]?f[Math.floor(bB(t,A)/s/i)].hphob++:f[Math.floor(bB(t,A)/s/i)].hphil++}return f}n.sliced=r})(Tee||={});function SFt(e,t){return e.has(t)}var JGe={ALA:69.41,ARG:201.25,ASN:106.24,ASP:102.69,CYS:96.75,GLU:134.74,GLN:140.99,GLY:32.33,HIS:147.08,ILE:137.96,LEU:141.12,LYS:163.3,MET:156.64,PHE:164.11,PRO:119.9,SER:78.11,THR:101.7,TRP:211.26,TYR:177.38,VAL:114.28};function f1(e,t,r){return e.structure=t,e.unit=t.units[t.serialMapping.unitIndices[r]],e.element=t.serialMapping.elementIndices[r],e}var Pee={...Uee};var bL;(n=>{let e;(i=>i.Representation="membrane-orientation-3d")(e=n.Tag||={});let t=B();n.symbols={isTransmembrane:qs.Dynamic(iu("computed","membrane-orientation.is-transmembrane",Je.Bool),o=>{let{unit:i,structure:a}=o.element,{x:A,y:s,z:c}=Ke.atom;if(!ge.isAtomic(i))return 0;let l=og.get(a).value;if(!l)return 0;B.set(t,A(o.element),s(o.element),c(o.element));let{normalVector:u,planePoint1:g,planePoint2:m}=l;return ZGe(t,u,g,m)})}})(bL||={});var og=eA.createProvider({label:"Membrane Orientation",descriptor:{name:"anvil_computed_membrane_orientation",symbols:bL.symbols},type:"root",defaultParams:Pee,getParams:e=>Pee,isApplicable:DFt,obtain:async(e,t,r)=>{let n={...h.getDefaultValues(Pee),...r};try{return{value:await vFt(e,t,n)}}catch{return console.warn("Failed to predict membrane orientation. This happens for short peptides and entries without amino acids."),{value:void 0}}}});function DFt(e){if(!e.isAtomic)return!1;for(let t of e.models){let{byEntityKey:r}=t.sequence;for(let n of Object.keys(r)){let{kind:o,length:i}=r[+n].sequence;if(o==="protein"&&i>=15)return!0}}return!1}async function vFt(e,t,r){let n={...h.getDefaultValues(Uee),...r};return await jGe(t,n).runInContext(e.runtime)}var tNe={color:h.Color(xt.lightgrey),radiusFactor:h.Numeric(1.2,{min:.1,max:3,step:.01},{description:"Scale the radius of the membrane layer"})},FFt={...At.Params,...tNe,sectorOpacity:h.Numeric(.5,{min:0,max:1,step:.01})},wFt={...Zr.Params,...tNe,lineSizeAttenuation:h.Boolean(!1),linesSize:h.Numeric(.5,{min:.01,max:50,step:.01}),dashedLines:h.Boolean(!1)},rNe={"bilayer-planes":(e,t)=>yi(TFt,At.Utils,{modifyState:r=>({...r,markerActions:Ko.Highlighting}),modifyProps:r=>({...r,alpha:r.sectorOpacity,ignoreLight:!0,doubleSided:!1})}),"bilayer-rims":(e,t)=>yi(UFt,Zr.Utils,{modifyState:r=>({...r,markerActions:Ko.Highlighting})})},xL={...FFt,...wFt,visuals:h.MultiSelect(["bilayer-planes","bilayer-rims"],h.objectToOptions(rNe))};function RFt(e,t){return h.clone(xL)}function Gee(e,t){return Xt.createMulti("Membrane Orientation",e,t,Vn,rNe)}var Nee={name:"membrane-orientation",label:"Membrane Orientation",description:"Displays a grid of points representing membrane layers.",factory:Gee,getParams:RFt,defaultValues:h.getDefaultValues(xL),defaultColorTheme:{name:"shape-group"},defaultSizeTheme:{name:"shape-group"},isApplicable(e){return og.isApplicable(e)},ensureCustomProperties:{attach:(e,t)=>og.attach(e,t,void 0,!0),detach:e=>og.ref(e,!1)}};function nNe(e){return`${Um(Ye.Loci(e))} | Membrane Orientation`}function UFt(e,t,r,n){let{planePoint1:o,planePoint2:i,centroid:a,radius:A}=og.get(t).value,s=r.radiusFactor*A,c=Ii.create(128,64,n?.geometry);return $Ge(c,o,a,s,r),$Ge(c,i,a,s,r),Mr.create("Bilayer rims",t,c.getLines(),()=>r.color,()=>r.linesSize,()=>nNe(t))}function $Ge(e,t,r,n,o,i){let a=oNe(t,r,n),{indices:A,vertices:s}=a;for(let c=0,l=A.length;c<l;c+=3){if(o.dashedLines&&c%2===1)continue;let u=A[c]*3,g=A[c+1]*3,m=s[u],p=s[u+1],d=s[u+2],f=s[g],I=s[g+1],C=s[g+2];e.add(m,p,d,f,I,C,0)}}var B1=Y(),LFt=B();function oNe(e,t,r){B.dot(B.unitY,B.sub(LFt,e,t))===0?Y.targetTo(B1,e,t,B.unitY):Y.targetTo(B1,e,t,B.unitX),Y.setTranslation(B1,e),Y.mul(B1,B1,Y.rotX90);let n=YI({radius:r,segments:64});return mI(n,B1)}function TFt(e,t,r,n){let{planePoint1:o,planePoint2:i,centroid:a,radius:A}=og.get(t).value,s=We.createState(128,64,n&&n.geometry),c=r.radiusFactor*A;return eNe(s,o,a,c),eNe(s,i,a,c),Mr.create("Bilayer planes",t,We.getMesh(s),()=>r.color,()=>1,()=>nNe(t))}function eNe(e,t,r,n){let o=oNe(t,r,n);e.currentGroup=0,We.addPrimitive(e,Y.id,o),We.addPrimitiveFlipped(e,Y.id,o)}var iNe=bL.Tag,sNe=er.create({name:"anvil-membrane-orientation-prop",category:"custom-props",display:{name:"Membrane Orientation",description:"Data calculated with ANVIL algorithm."},ctor:class extends er.Handler{constructor(){super(...arguments);this.provider=og}register(){Zs.addCustomProp(this.provider.descriptor),this.ctx.customStructureProperties.register(this.provider,this.params.autoAttach),this.ctx.representation.structure.registry.add(Nee),this.ctx.query.structure.registry.add(aNe),this.ctx.genericRepresentationControls.set(iNe.Representation,t=>{let r=[];return t.structures.forEach(n=>{let o=n.genericRepresentations?.filter(i=>i.cell.transform.transformer.id===cNe.id)[0];o&&r.push(o)}),[r,"Membrane Orientation"]}),this.ctx.builders.structure.representation.registerPreset(ANe)}update(t){let r=this.params.autoAttach!==t.autoAttach;return this.params.autoAttach=t.autoAttach,this.ctx.customStructureProperties.setDefaultAutoAttach(this.provider.descriptor.name,this.params.autoAttach),r}unregister(){Zs.removeCustomProp(this.provider.descriptor),this.ctx.customStructureProperties.unregister(this.provider.descriptor.name),this.ctx.representation.structure.registry.remove(Nee),this.ctx.query.structure.registry.remove(aNe),this.ctx.genericRepresentationControls.delete(iNe.Representation),this.ctx.builders.structure.representation.unregisterPreset(ANe)}},params:()=>({autoAttach:h.Boolean(!1)})}),aNe=Qo("Residues Embedded in Membrane",ce.struct.modifier.union([ce.struct.modifier.wholeResidues([ce.struct.modifier.union([ce.struct.generator.atomGroups({"chain-test":ce.core.rel.eq([ce.ammp("objectPrimitive"),"atomistic"]),"atom-test":bL.symbols.isTransmembrane.symbol()})])])]),{description:"Select residues that are embedded between the membrane layers.",category:"Residue Property",ensureCustomProperties:(e,t)=>og.attach(e,t)});var cNe=Yt.BuiltIn({name:"membrane-orientation-3d",display:{name:"Membrane Orientation",description:"Membrane Orientation planes and rims. Data calculated with ANVIL algorithm."},from:te.Molecule.Structure,to:te.Shape.Representation3D,params:e=>({...xL})})({canAutoUpdate({oldParams:e,newParams:t}){return!0},apply({a:e,params:t},r){return ve.create("Membrane Orientation",async n=>{await og.attach({runtime:n,assetManager:r.managers.asset,errorContext:r.errorContext},e.data);let o=Gee({webgl:r.canvas3d?.webgl,...r.representation.structure.themes},()=>xL);return await o.createOrUpdate(t,e.data).runInContext(n),new te.Shape.Representation3D({repr:o,sourceData:e.data},{label:"Membrane Orientation"})})},update({a:e,b:t,newParams:r},n){return ve.create("Membrane Orientation",async o=>{await og.attach({runtime:o,assetManager:n.managers.asset,errorContext:n.errorContext},e.data);let i={...t.data.repr.props,...r};return await t.data.repr.createOrUpdate(i,e.data).runInContext(o),t.data.sourceData=e.data,lt.UpdateResult.Updated})},isApplicable(e){return og.isApplicable(e.data)}}),ANe={id:"preset-membrane-orientation",display:{name:"Membrane Orientation",group:"Annotation",description:"Shows orientation of membrane layers. Data calculated with ANVIL algorithm."},isApplicable(e){return og.isApplicable(e.data)},params:()=>ri.CommonParams,async apply(e,t,r){let n=Pn.resolveAndCheck(r.state.data,e),o=n?.obj?.data;if(!n||!o)return{};og.get(o).value||await r.runTask(ve.create("Membrane Orientation",async s=>{await og.attach({runtime:s,assetManager:r.managers.asset,errorContext:r.errorContext},o)}));let i=await PFt(r,n),a=uk.name,A=await ni.auto.apply(e,{...t,theme:{globalName:a,focus:{name:a}}},r);return{components:A.components,representations:{...A.representations,membraneOrientation:i}}}};function PFt(e,t,r,n){return e.state.data.build().to(t).applyOrUpdateTagged("membrane-orientation-3d",cNe,r,{state:n}).commit({revertOnError:!0})}var Mee=class e extends Error{constructor(t,r){let n=`${e.extractMessage(t)}: ${JSON.stringify({response:t,request:r})}`;super(n),this.response=t,this.request=r,typeof Error.captureStackTrace=="function"&&Error.captureStackTrace(this,e)}static extractMessage(t){return t.errors?t.errors[0].message:`GraphQL Error (Code: ${t.status})`}},BY=class{constructor(t,r){this.url=t;this.assetManager=r}async request(t,r,n){let o={"Content-Type":"application/json; charset=utf-8",Accept:"application/json"},i=JSON.stringify({query:r,variables:n},null,2),a=gn.getUrlAsset(this.assetManager,this.url,i,o),A=await this.assetManager.resolve(a,"json").runInContext(t);if(!A.data.errors&&A.data.data)return{data:A.data.data,dispose:A.dispose};{let s=typeof A.data=="string"?{error:A.data}:A.data;throw new Mee({...s},{query:r,variables:n})}}};var GFt=`
|
|
query AssemblySymmetry($assembly_id: String!, $entry_id: String!) {
|
|
assembly(assembly_id: $assembly_id, entry_id: $entry_id) {
|
|
rcsb_struct_symmetry {
|
|
clusters {
|
|
avg_rmsd
|
|
members {
|
|
asym_id
|
|
pdbx_struct_oper_list_ids
|
|
}
|
|
}
|
|
kind
|
|
oligomeric_state
|
|
rotation_axes {
|
|
order
|
|
start
|
|
end
|
|
}
|
|
stoichiometry
|
|
symbol
|
|
type
|
|
}
|
|
}
|
|
}
|
|
`,NFt=new Set(["author_and_software_defined_assembly","author_defined_assembly","complete icosahedral assembly","complete point assembly","representative helical assembly","software_defined_assembly"]);function MFt(e){if(!sn.is(e.models[0].sourceData))return!1;let t=e.models[0].sourceData.data.db;if(!t.pdbx_struct_assembly.details.isDefined)return!1;let r=e.units[0].conformation.operator.assembly?.id||"";if(r==="")return!0;let n=K.indicesOf(t.pdbx_struct_assembly.id,i=>i===r);if(n.length!==1)return!1;let o=t.pdbx_struct_assembly.details.value(n[0]);return NFt.has(o)}var pA;(u=>{let e;(p=>(p.Cluster="assembly-symmetry-cluster",p.Representation="assembly-symmetry-3d"))(e=u.Tag||={}),u.DefaultServerUrl="https://data.rcsb.org/graphql";function r(g){return!g||g.models.length!==1||!_t.hasPdbId(g.models[0])?!1:MFt(g)||_t.isIntegrative(g.models[0])}u.isApplicable=r;async function n(g,m,p){return r(m)?p.serverType==="pdbe"?i(g,m,p):o(g,m,p):{value:[]}}u.fetch=n;async function o(g,m,p){let d=new BY(p.serverUrl,g.assetManager),f={assembly_id:m.units[0].conformation.operator.assembly?.id||"deposited",entry_id:m.units[0].model.entryId},I=await d.request(g.runtime,GFt,f),C=[];return I.data.assembly?.rcsb_struct_symmetry?C=I.data.assembly.rcsb_struct_symmetry:console.error("expected `rcsb_struct_symmetry` field"),{value:C,assets:[I]}}u.fetchRCSB=o;async function i(g,m,p){let d=m.units[0].conformation.operator.assembly?.id||"-1",f=m.units[0].model.entryId.toLowerCase(),I=`${p.serverUrl}/${f}?assembly_id=${d}`,C=gn.getUrlAsset(g.assetManager,I),y;try{y=await g.assetManager.resolve(C,"json").runInContext(g.runtime)}catch(b){if(`${b}`.includes("404"))y=gn.Wrapper({},C,g.assetManager);else throw b}return{value:(y.data[f]??[]).map(b=>({kind:"Global Symmetry",oligomeric_state:b.oligomeric_state,stoichiometry:[b.stoichiometry],symbol:b.symbol,type:b.type,clusters:[],rotation_axes:b.rotation_axes})),assets:[y]}}function a(g){for(let m=0,p=g.length;m<p;++m)if(g[m].symbol!=="C1")return m;return-1}u.firstNonC1=a;function A(g){return!!g&&g.length>0}u.isRotationAxes=A;function s(g){let m=new Set;for(let p of g.clusters)if(p?.members)for(let d of p.members)d?.asym_id&&m.add(d.asym_id);return lo.toArray(m)}u.getAsymIds=s;function c(g,m){let p=ce.struct.modifier.union([ce.struct.generator.atomGroups({"chain-test":ce.core.set.has([ce.set(...m),ce.ammp("label_asym_id")])})]),f=au(p)(new qo(g));return Qt.unionStructure(f)}function l(g,m){let p=u.getAsymIds(m);return p.length>0?c(g,p):g}u.getStructure=l})(pA||={});function kFt(e){let t=h.Select(0,[[0,"First Symmetry"]]);if(e){let r=xB.get(e).value;if(r){let n=[[-1,"Off"]];for(let o=0,i=r.length;o<i;++o){let{symbol:a,kind:A}=r[o];a!=="C1"&&n.push([o,`${o+1}: ${a} ${A}`])}n.length>1?(t.options=n,t.defaultValue=n[1][0]):n.length=0}}return t}var xC={serverType:h.Select("rcsb",[["rcsb","RCSB"],["pdbe","PDBe"]]),serverUrl:h.Text(pA.DefaultServerUrl,{description:"GraphQL endpoint URL (if server type is RCSB) or PDBe API endpoint URL (if server type is PDBe)"})},xB=eA.createProvider({label:"Assembly Symmetry Data",descriptor:{name:"molstar_struct_symmetry_data"},type:"root",defaultParams:xC,getParams:e=>xC,isApplicable:e=>pA.isApplicable(e),obtain:async(e,t,r)=>{let n={...h.getDefaultValues(xC),...r};return await pA.fetch(e,t,n)}});function kee(e){return{...xC,symmetryIndex:kFt(e)}}var HFt=kee(),LA=eA.createProvider({label:"Assembly Symmetry",descriptor:{name:"molstar_struct_symmetry"},type:"root",defaultParams:HFt,getParams:kee,isApplicable:e=>pA.isApplicable(e),obtain:async(e,t,r)=>{let n={...h.getDefaultValues(kee(t)),...r};await xB.attach(e,t,n);let i=xB.get(t).value?.[n.symmetryIndex];return i||new Error(`No assembly symmetry found for index ${n.symmetryIndex}`),{value:i}}});var VFt=[.5,.5,.5,-.5,-.5,.5,-.5,.5,-.5,.5,-.5,-.5];var _Ft=[0,1,1,2,2,0,0,3,1,3,2,3];var YFt=dp(VFt,_Ft);function lNe(){return YFt}var SL={2:xt.deepskyblue,3:xt.lime,N:xt.red},OFt=Ba(Object.keys(SL).map(e=>[e,SL[e]]));function JFt(e){return e.name==="byOrder"?{description:"Color axes by their order",legend:OFt}:{}}var pNe={...At.Params,scale:h.Numeric(2,{min:.1,max:5,step:.1})},zFt={...pNe,axesColor:h.MappedStatic("byOrder",{byOrder:h.EmptyGroup(),uniform:h.Group({colorValue:h.Color(xt.orange)},{isFlat:!0})},{help:JFt})},KFt={...pNe,cageColor:h.Color(xt.orange)},fNe={cage:(e,t)=>yi(t1t,At.Utils,{modifyState:r=>({...r,markerActions:Ko.Highlighting})}),axes:(e,t)=>yi(XFt,At.Utils,{modifyState:r=>({...r,markerActions:Ko.Highlighting})})},Hee={...zFt,...KFt,visuals:h.MultiSelect(["axes","cage"],h.objectToOptions(fNe))};function BNe(e){let t=e.units[0].conformation.operator.assembly?.id||"";return TG(t)?`Assembly ${t}`:t}var SB=Y.identity(),INe=B(),SC=B(),uNe=B(),jFt=Tu(e=>{if(e<2)return tB(vs(48,!1));if(e===2){let t=tB(vs(48,!1)),r=Y.identity();return Y.scale(r,r,B.create(1,.35,1)),mI(t,r),t}else return e===3?r_():tB(vs(e,!1))});function WFt(e,t,r){let{scale:n}=t,{rotation_axes:o}=e;if(!pA.isRotationAxes(o))return At.createEmpty(r);let{start:i,end:a}=o[0],A=B.distance(i,a)/500*n;B.set(uNe,A*7,A*7,A*.4);let s={radiusTop:A,radiusBottom:A},c=We.createState(256,128,r);c.currentGroup=0,B.scale(SC,B.add(SC,i,a),.5);for(let l=0,u=o.length;l<u;++l){let{order:g,start:m,end:p}=o[l];c.currentGroup=l,Sn(c,m,p,1,s);let d=jFt(g);d&&(B.scale(SC,B.add(SC,m,p),.5),B.dot(B.unitY,B.sub(INe,m,SC))===0?Y.targetTo(SB,m,SC,B.unitY):Y.targetTo(SB,m,SC,B.unitX),Y.scale(SB,SB,uNe),Y.setTranslation(SB,m),We.addPrimitive(c,SB,d),Y.setTranslation(SB,p),We.addPrimitive(c,SB,d))}return We.getMesh(c)}function XFt(e,t,r,n){let o=LA.get(t).value,i=WFt(o,r,n&&n.geometry),a=s=>{if(r.axesColor.name==="byOrder"){let{rotation_axes:c}=o,l=c[s]?.order;return l===2?SL[2]:l===3?SL[3]:SL.N}else return r.axesColor.params.colorValue},A=s=>{let{type:c,symbol:l,kind:u,rotation_axes:g}=o,m=g[s]?.order;return[`<small>${t.model.entryId}</small>`,`<small>${BNe(t)}</small>`,`Axis ${s+1} with Order ${m} of ${c} ${u} (${l})`].join(" | ")};return Mr.create("Axes",t,i,a,()=>1,A)}var ZFt=Tu(e=>{if(e.startsWith("D")||e.startsWith("C")){let t=parseInt(e.substr(1)),r;if(t===2)r=eU(vs(4,!1));else if(t===3)r=kUe();else if(t>3)r=eU(vs(t,!1));else return;if(t%2===0)return r;{let n=Y.identity();return Y.rotate(n,n,1/t*Math.PI/2,B.unitZ),wD(FD(r),n)}}else{if(e==="O")return ORe();if(e==="I"){let t=SSe(),r=Y.identity();return Y.rotate(r,r,kr(31.7),B.unitX),wD(FD(t),r)}else if(e==="T")return lNe()}});function qFt(e){return e.startsWith("D")||e.startsWith("C")?.75:e==="O"?1.2:e==="I"?.25:e==="T"?.8:1}function $Ft(e,t,r,n,o){let i=B(),a=B(),A=B(),s=B(),c;if(t.startsWith("C"))c=[r[0]];else if(t.startsWith("D")){let l=parseInt(t.substr(1));if(l===2)c=r.filter(u=>u.order===2);else if(l>=3){let u=r.filter(m=>m.order===l)[0],g=r.filter(m=>m.order===2)[1];c=[u,g]}}else if(t==="O")c=r.filter(l=>l.order===4);else if(t==="I"){let l=r.filter(g=>g.order===5)[0],u=B.sub(B(),l.end,l.start);c=[l];for(let g of r.filter(m=>m.order===3)){let m=yA(B.angle(B.sub(s,g.end,g.start),u));if(!c[1]&&(So(m,100.81,.1)||So(m,79.19,.1))){c[1]=g;break}}}else t==="T"&&(c=r.filter(l=>l.order===2));if(Y.setIdentity(e),c){let[l,u]=c;if(B.scale(i,B.add(i,l.end,l.start),.5),B.copy(a,l.end),u)if(B.sub(s,u.end,u.start),B.sub(A,i,a),B.dot(A,s)<0&&B.negate(s,s),Y.targetTo(e,i,a,s),t.startsWith("D")){let{sphere:g}=o.lookup3d.boundary,m=g.radius*2*.8;if(we.hasExtrema(g)){let p=Ht.directionTransform(Ht(),e),d=gNe.map(f=>B.transformMat3(B(),f,p));m=dNe(g.extrema,d,g.center)*1.6}Y.scale(e,e,B.create(m,m,B.distance(l.start,l.end)*.9))}else Y.scaleUniformly(e,e,n*qFt(t));else{B.dot(B.unitY,B.sub(INe,l.end,l.start))===0?B.copy(s,B.unitY):B.copy(s,B.unitX),Y.targetTo(e,i,a,s);let{sphere:g}=o.lookup3d.boundary,m=g.radius*2*.8;if(we.hasExtrema(g)){let p=Ht.directionTransform(Ht(),e),d=gNe.map(f=>B.transformMat3(B(),f,p));m=dNe(g.extrema,d,g.center)}Y.scale(e,e,B.create(m,m,n*.9))}}}var gNe=(function(){let e=[],t=vs(12,!1,1);for(let r=0,n=t.length;r<n;r+=3)e.push(B.fromArray(B(),t,r));return e})(),mNe=B();function dNe(e,t,r){let n=0;for(let o of e)for(let i of t){B.projectPointOnVector(mNe,o,i,r);let a=B.distance(mNe,r);a>n&&(n=a)}return n}function e1t(e,t,r){let n=LA.get(e).value,{scale:o}=t,{rotation_axes:i,symbol:a}=n;if(!pA.isRotationAxes(i))return At.createEmpty(r);let A=pA.getStructure(e,n),s=ZFt(a);if(!s)return At.createEmpty(r);let{start:c,end:l}=i[0],u=B.distance(c,l),g=u/500*o,m=We.createState(256,128,r);return m.currentGroup=0,$Ft(SB,a,i,u,A),B.scale(SC,B.add(SC,c,l),.5),Y.setTranslation(SB,SC),We.addCage(m,SB,s,g,1,8),We.getMesh(m)}function t1t(e,t,r,n){let o=LA.get(t).value,i=e1t(t,r,n&&n.geometry),a=s=>r.cageColor,A=s=>{let{type:c,symbol:l,kind:u}=o;return t.model.entryId,[`<small>${t.model.entryId}</small>`,`<small>${BNe(t)}</small>`,`Cage of ${c} ${u} (${l})`].join(" | ")};return Mr.create("Cage",t,i,a,()=>1,A)}function CNe(e,t){return Xt.createMulti("Assembly Symmetry",e,t,Xt.StateBuilder,fNe)}var Vee=13421772;function r1t(e){switch(e.kind){case ge.Kind.Atomic:return Ke.chain.label_asym_id;case ge.Kind.Spheres:case ge.Kind.Gaussians:return Ke.coarse.asym_id}}function _ee(e,t){return`${e}-${t.join("|")}`}var hNe={...Pi({colorList:"red-yellow-blue"})};function n1t(e){return h.clone(hNe)}function yNe(e,t){let r=()=>Vee,n,o=e.structure&&LA.get(e.structure),i=o?.version,a=o?.value?.clusters;if(a?.length&&e.structure){let A=W.Location.create(e.structure),s=new Map;for(let g=0,m=a.length;g<m;++g){let{members:p}=a[g];for(let d=0,f=p.length;d<f;++d){let I=p[d].asym_id,C=[...p[d].pdbx_struct_oper_list_ids||[]];s.set(_ee(I,C),g),C.length===0&&(C.push("1"),s.set(_ee(I,C),g))}}let c=Yi(a.length,t);n=c.legend;let l=[],u=g=>{let{assembly:m}=g.unit.conformation.operator,p=r1t(g.unit)(g),d=s.get(_ee(p,m?.operList||l));return d!==void 0?c.color(d):Vee};r=g=>W.Location.is(g)?u(g):Et.isLocation(g)?(A.unit=g.aUnit,A.element=g.aUnit.elements[g.aIndex],u(A)):Vee}return{factory:yNe,granularity:"instance",color:r,props:t,contextHash:i,description:"Assigns chain colors according to assembly symmetry cluster membership data provided by RCSB PDB (calculated with BioJava) or by PDBe.",legend:n}}var Yee={name:pA.Tag.Cluster,label:"Assembly Symmetry Cluster",category:Br.Symmetry,factory:yNe,getParams:n1t,defaultValues:h.getDefaultValues(hNe),isApplicable:e=>pA.isApplicable(e.structure),ensureCustomProperties:{attach:(e,t)=>t.structure?LA.attach(e,t.structure,void 0,!0):Promise.resolve(),detach:e=>e.structure&&LA.ref(e.structure,!1)}};var Ms=kt(Qr());var DB=class extends ta{constructor(){super(...arguments);this.onChange=({name:r,value:n})=>{let o={...this.props.params,[r]:n};this.props.events.onChange(o,this.areInitial(o),this.validate(o))}}validate(r){}areInitial(r){return h.areEqual(this.props.info.params,r,this.props.info.initialValues)}render(){return(0,Ms.jsx)(Mn,{params:this.props.info.params,values:this.props.params,onChange:this.onChange,onEnter:this.props.events.onEnter,isDisabled:this.props.isDisabled})}};(n=>{function e(o){let i=Object.keys(o);for(let a of i)if(!o[a].isHidden)return!1;return!0}function t(o,i,a,A){let s=i.cells.get(A).obj,c=a.definition.params?a.definition.params(s,o):{};return{initialValues:h.getDefaultValues(c),params:c,isEmpty:e(c)}}n.infoFromAction=t;function r(o,i,a){let A=i.cells.get(a.ref),s=A.params&&A.params.definition||{};return{initialValues:A.params&&A.params.values||{},params:s,isEmpty:e(s)}}n.infoFromTransform=r})(DB||={});var I1=class extends ta{constructor(){super(...arguments);this.busy=new _A(!1);this.onEnter=()=>{this.state.error||this.apply()};this.autoApplyHandle=void 0;this.events={onEnter:this.onEnter,onChange:(r,n,o)=>{this.clearAutoApply(),this.setState({params:r,isInitial:n,error:o&&o[0]},()=>{!n&&!this.state.error&&this.canAutoApply(r)&&(this.clearAutoApply(),this.autoApplyHandle=setTimeout(this.apply,50))})}};this.apply=async()=>{this.clearAutoApply(),this.setState({busy:!0});try{await this.applyAction()}catch(r){console.error(r)}finally{this.props.onApply?.(),this.busy.next(!1)}};this.refresh=()=>{this.setState({params:this.getInfo().initialValues,isInitial:!0,error:void 0})};this.setDefault=()=>{let r=this.getInfo(),n=h.getDefaultValues(r.params);this.setState({params:n,isInitial:h.areEqual(r.params,n,r.initialValues),error:void 0})};this.toggleExpanded=()=>{this.setState({isCollapsed:!this.state.isCollapsed})}}clearAutoApply(){this.autoApplyHandle!==void 0&&(clearTimeout(this.autoApplyHandle),this.autoApplyHandle=void 0)}componentDidMount(){this.subscribe(this.plugin.behaviors.state.isBusy,r=>{this.busy.value!==r&&this.busy.next(r)}),this.subscribe(this.busy.pipe(O2(1)),r=>{this.setState({busy:r})})}renderApply(){let r=this.canApply();return this.props.autoHideApply&&(!r||this.canAutoApply(this.state.params))?null:(0,Ms.jsxs)("div",{className:"msp-transform-apply-wrap",children:[(0,Ms.jsx)(Gr,{svg:Dx,className:"msp-transform-default-params",onClick:this.setDefault,disabled:this.state.busy,title:"Set default params"}),(0,Ms.jsx)("div",{className:"msp-transform-apply-wider",children:(0,Ms.jsx)(hr,{icon:r?Hg:void 0,className:`msp-btn-commit msp-btn-commit-${r?"on":"off"}`,onClick:this.apply,disabled:!r,children:this.props.applyLabel||this.applyText()})})]})}renderDefault(){let r=this.getInfo(),n=r.isEmpty&&this.isUpdate(),o=this.getHeader(),i=this.getTransformerId(),a=this.plugin.customParamEditors.has(i)?this.plugin.customParamEditors.get(i):DB,A=this.state.isCollapsed?"msp-transform-wrapper msp-transform-wrapper-collapsed":"msp-transform-wrapper",s=null;if(!n&&!this.state.isCollapsed){let{a:l,b:u,bCell:g}=this.getSourceAndTarget(),m=this.renderApply();s=(0,Ms.jsxs)(Ms.Fragment,{children:[(0,Ms.jsx)(a,{info:r,a:l,b:u,bCell:g,events:this.events,params:this.state.params,isDisabled:this.state.busy}),m]})}let c=(0,Ms.jsxs)("div",{className:A,style:{marginBottom:this.props.noMargin?0:void 0},children:[o!=="none"&&!this.props.wrapInExpander&&(0,Ms.jsx)("div",{className:"msp-transform-header",children:(0,Ms.jsxs)(hr,{onClick:this.toggleExpanded,title:o.description,children:[!n&&(0,Ms.jsx)(Kn,{svg:this.state.isCollapsed?rg:tg}),o.name]})}),s]});return n||!this.props.wrapInExpander?c:(0,Ms.jsx)(Gs,{header:this.isUpdate()?`Update ${o==="none"?"":o.name}`:`Apply ${o==="none"?"":o.name}`,headerLeftMargin:this.props.expanderHeaderLeftMargin,children:c})}renderSimple(){let r=this.getInfo(),n=this.canApply(),o=(0,Ms.jsxs)("div",{className:"msp-flex-row",children:[(0,Ms.jsx)(hr,{icon:this.props.simpleApply?.icon,title:this.props.simpleApply?.title,disabled:this.state.busy||!n,onClick:this.apply,className:"msp-btn-apply-simple",children:this.props.simpleApply?.header}),!r.isEmpty&&(0,Ms.jsx)(la,{icon:tl,label:"",title:"Options",toggle:this.toggleExpanded,isSelected:!this.state.isCollapsed,disabled:this.state.busy,style:{flex:"0 0 40px",padding:0}})]});if(this.state.isCollapsed)return o;let i=this.getTransformerId(),a=this.plugin.customParamEditors.has(i)?this.plugin.customParamEditors.get(i):DB,{a:A,b:s,bCell:c}=this.getSourceAndTarget();return(0,Ms.jsxs)(Ms.Fragment,{children:[o,(0,Ms.jsx)(a,{info:r,a:A,b:s,bCell:c,events:this.events,params:this.state.params,isDisabled:this.state.busy})]})}render(){return this.props.simpleApply?this.renderSimple():this.renderDefault()}};var DC=class extends I1{constructor(){super(...arguments);this._getInfo=VA((r,n,o)=>DB.infoFromAction(this.plugin,this.props.state,this.props.action,this.props.nodeRef));this.state={plugin:this.plugin,ref:this.props.nodeRef,version:this.props.state.transforms.get(this.props.nodeRef).version,error:void 0,isInitial:!0,params:this.getInfo().initialValues,busy:!1,isCollapsed:this.props.initiallyCollapsed}}applyAction(){return yt.State.ApplyAction(this.plugin,{state:this.props.state,action:this.props.action.create(this.state.params),ref:this.props.nodeRef})}getInfo(){return this._getInfo(this.props.nodeRef,this.props.state.transforms.get(this.props.nodeRef).version,this.state?.isCollapsed)}getTransformerId(){return this.props.state.transforms.get(this.props.nodeRef).transformer.id}getHeader(){return this.props.hideHeader?"none":this.props.action.definition.display}canApply(){return!this.state.error&&!this.state.busy}canAutoApply(){return!1}applyText(){return"Apply"}isUpdate(){return!1}getSourceAndTarget(){return{a:this.props.state.cells.get(this.props.nodeRef).obj}}static getDerivedStateFromProps(r,n){let o=r.state.transforms.get(r.nodeRef).version;if(r.nodeRef===n.ref&&o===n.version)return null;let i=r.state.cells.get(r.nodeRef).obj,a=r.action.definition.params?h.getDefaultValues(r.action.definition.params(i,n.plugin)):{};return{plugin:n.plugin,ref:r.nodeRef,version:o,params:a,isInitial:!0,error:void 0}}};var ME=kt(Qr()),IY=class extends ma{constructor(){super(...arguments);this.paramsOnChange=r=>{this.updateAssemblySymmetry(r)}}defaultState(){return{header:"Assembly Symmetry",isCollapsed:!1,isBusy:!1,isHidden:!0,brand:{accent:"cyan",svg:yGe}}}componentDidMount(){this.subscribe(this.plugin.managers.structure.hierarchy.behaviors.selection,()=>{this.setState({isHidden:!this.canEnable(),description:zp.getSelectedStructuresDescription(this.plugin)})}),this.subscribe(this.plugin.state.events.cell.stateUpdated,r=>{r.cell.transform.transformer===vL&&this.forceUpdate()}),this.subscribe(this.plugin.behaviors.state.isBusy,r=>this.setState({isBusy:r}))}get pivot(){return this.plugin.managers.structure.hierarchy.selection.structures[0]}canEnable(){let{selection:r}=this.plugin.managers.structure.hierarchy;if(r.structures.length!==1)return!1;let n=this.pivot.cell;return n.obj?!!CY.definition.isApplicable?.(n.obj,n.transform,this.plugin):!1}renderEnable(){let r=this.pivot;return r.cell.parent?(0,ME.jsx)(DC,{state:r.cell.parent,action:o1t,initiallyCollapsed:!0,nodeRef:r.cell.transform.ref,simpleApply:{header:"Enable",icon:Hg}}):null}renderNoSymmetries(){return(0,ME.jsx)("div",{className:"msp-row-text",children:(0,ME.jsx)("div",{children:"No Symmetries for Assembly"})})}get params(){let r=this.pivot.cell.obj?.data,n=h.clone(r?LA.getParams(r):LA.defaultParams);return n.serverType.isHidden=!0,n.serverUrl.isHidden=!0,n}get values(){let r=this.pivot.cell.obj?.data;return r?LA.props(r):{...h.getDefaultValues(LA.defaultParams),symmetryIndex:-1}}async updateAssemblySymmetry(r){let n=this.pivot,o=LA.props(n.cell.obj.data);if(!h.areEqual(LA.defaultParams,o,r)){if(n.properties){let i=this.plugin.state.data.build();i.to(n.properties.cell).update(a=>{a.properties[LA.descriptor.name]=r}),await i.commit()}else{let i=this.plugin.customStructureProperties.getParams(n.cell.obj?.data),a=h.getDefaultValues(i);a.properties[LA.descriptor.name]=r,await this.plugin.builders.structure.insertStructureProperties(n.cell,a)}for(let i of this.plugin.managers.structure.hierarchy.currentComponentGroups)r.symmetryIndex===-1?i[0]?.representations[0]?.cell.transform.params?.colorTheme.name===pA.Tag.Cluster&&await this.plugin.managers.structure.component.updateRepresentationsTheme(i,{color:"default"}):(Oee(this.plugin,n.cell),hY(this.plugin).ApplyColors&&await this.plugin.managers.structure.component.updateRepresentationsTheme(i,{color:pA.Tag.Cluster}))}}get hasAssemblySymmetry3D(){return!this.pivot.cell.parent||!!fr.findTagInSubtree(this.pivot.cell.parent.tree,this.pivot.cell.transform.ref,pA.Tag.Representation)}get enable(){return!this.hasAssemblySymmetry3D&&this.values.symmetryIndex!==-1}get noSymmetries(){let r=this.pivot.cell.obj?.data,n=r&&xB.get(r).value;return n&&n.filter(o=>o.symbol!=="C1").length===0}renderParams(){return(0,ME.jsx)(ME.Fragment,{children:(0,ME.jsx)(Mn,{params:this.params,values:this.values,onChangeValues:this.paramsOnChange})})}renderControls(){return this.pivot?this.noSymmetries?this.renderNoSymmetries():this.enable?this.renderEnable():this.renderParams():null}},o1t=Pa.build({from:te.Molecule.Structure})(({a:e,ref:t,state:r},n)=>ve.create("Enable Assembly Symmetry",async o=>{let i=DL.params?.(e,n),a=i?h.getDefaultValues(i):Object.create(null);await DL.apply(t,a,n)}));var C1=pA.Tag,Jee=er.create({name:"assembly-symmetry-prop",category:"custom-props",display:{name:"Assembly Symmetry",description:"Assembly Symmetry data provided by RCSB PDB (calculated with BioJava) or by PDBe."},ctor:class extends er.Handler{constructor(){super(...arguments);this.provider=LA}register(){this.ctx.state.data.actions.add(CY),this.ctx.customStructureProperties.register(this.provider,this.params.autoAttach),this.ctx.representation.structure.themes.colorThemeRegistry.add(Yee),this.ctx.genericRepresentationControls.set(C1.Representation,t=>{let r=[];return t.structures.forEach(n=>{let o=n.genericRepresentations?.filter(i=>i.cell.transform.transformer.id===vL.id)[0];o&&r.push(o)}),[r,"Symmetries"]}),this.ctx.customStructureControls.set(C1.Representation,IY),this.ctx.builders.structure.representation.registerPreset(DL)}update(t){let r=this.params.autoAttach!==t.autoAttach;return this.params.autoAttach=t.autoAttach,this.ctx.customStructureProperties.setDefaultAutoAttach(this.provider.descriptor.name,this.params.autoAttach),r}unregister(){this.ctx.state.data.actions.remove(CY),this.ctx.customStructureProperties.unregister(this.provider.descriptor.name),this.ctx.representation.structure.themes.colorThemeRegistry.remove(Yee),this.ctx.genericRepresentationControls.delete(C1.Representation),this.ctx.customStructureControls.delete(C1.Representation),this.ctx.builders.structure.representation.unregisterPreset(DL)}},params:()=>({autoAttach:h.Boolean(!1),serverUrl:h.Text(pA.DefaultServerUrl)})}),CY=Pa.build({display:{name:"Assembly Symmetry",description:"Initialize Assembly Symmetry axes and cage. Data provided by RCSB PDB (calculated with BioJava) or by PDBe."},from:te.Molecule.Structure,isApplicable:e=>pA.isApplicable(e.data),params:(e,t)=>QNe(t)})(({a:e,ref:t,state:r,params:n},o)=>ve.create("Init Assembly Symmetry",async i=>{try{let A={runtime:i,assetManager:o.managers.asset,errorContext:o.errorContext};await xB.attach(A,e.data,n);let s=xB.get(e.data).value,c=s?pA.firstNonC1(s):-1;await LA.attach(A,e.data,{...n,symmetryIndex:c})}catch(A){o.log.error(`Assembly Symmetry: ${A}`);return}let a=r.build().to(t).applyOrUpdateTagged(pA.Tag.Representation,vL);await r.updateTree(a).runInContext(i)}));var vL=Yt.BuiltIn({name:C1.Representation,display:{name:"Assembly Symmetry",description:"Assembly Symmetry axes and cage. Data provided by RCSB PDB (calculated with BioJava) or by PDBe."},from:te.Molecule.Structure,to:te.Shape.Representation3D,params:e=>({...Hee})})({canAutoUpdate({oldParams:e,newParams:t}){return!0},apply({a:e,params:t},r){return ve.create("Assembly Symmetry",async n=>{await LA.attach({runtime:n,assetManager:r.managers.asset,errorContext:r.errorContext},e.data);let o=LA.get(e.data).value;if(!o||o.symbol==="C1")return po.Null;let i=CNe({webgl:r.canvas3d?.webgl,...r.representation.structure.themes},()=>Hee);await i.createOrUpdate(t,e.data).runInContext(n);let{type:a,kind:A,symbol:s}=o;return new te.Shape.Representation3D({repr:i,sourceData:e.data},{label:A,description:`${a} (${s})`})})},update({a:e,b:t,newParams:r},n){return ve.create("Assembly Symmetry",async o=>{await LA.attach({runtime:o,assetManager:n.managers.asset,errorContext:n.errorContext},e.data);let i=LA.get(e.data).value;if(!i||i.symbol==="C1")return lt.UpdateResult.Recreate;let a={...t.data.repr.props,...r};await t.data.repr.createOrUpdate(a,e.data).runInContext(o),t.data.sourceData=e.data;let{type:A,kind:s,symbol:c}=i;return t.label=s,t.description=`${A} (${c})`,lt.UpdateResult.Updated})},isApplicable(e){return pA.isApplicable(e.data)}}),DL={id:"preset-structure-representation-assembly-symmetry",display:{name:"Assembly Symmetry",group:"Annotation",description:"Shows Assembly Symmetry axes and cage; colors structure according to assembly symmetry cluster membership. Data provided by RCSB PDB (calculated with BioJava) or by PDBe."},isApplicable(e){return pA.isApplicable(e.data)},params:(e,t)=>({...ri.CommonParams,...QNe(t)}),async apply(e,t,r){let n=Pn.resolveAndCheck(r.state.data,e),o=n?.obj?.data;if(!n||!o)return{};xB.get(o).value||await r.runTask(ve.create("Assembly Symmetry",async s=>{let c={runtime:s,assetManager:r.managers.asset,errorContext:r.errorContext},l={serverType:t.serverType,serverUrl:t.serverUrl};await xB.attach(c,o,l);let u=xB.get(o).value,g=u?pA.firstNonC1(u):-1;await LA.attach(c,o,{...l,symmetryIndex:g})}));let i=await Oee(r,n),a=hY(r).ApplyColors&&i.isOk?C1.Cluster:void 0,A=await ni.auto.apply(e,{...t,theme:{globalName:a,focus:{name:a}}},r);return{components:A.components,representations:{...A.representations,assemblySymmetry:i}}}};function Oee(e,t,r,n){return e.state.data.build().to(t).applyOrUpdateTagged(pA.Tag.Representation,vL,r,{state:n}).commit({revertOnError:!0})}var Yg={DefaultServerType:new Gp("assembly-symmetry.server-type",xC.serverType.defaultValue),DefaultServerUrl:new Gp("assembly-symmetry.server-url",xC.serverUrl.defaultValue),ApplyColors:new Gp("assembly-symmetry.apply-colors",!0)};function hY(e){return{ApplyColors:e.config.get(Yg.ApplyColors)??Yg.ApplyColors.defaultValue??!0,DefaultServerType:e.config.get(Yg.DefaultServerType)??Yg.DefaultServerType.defaultValue??xC.serverType.defaultValue,DefaultServerUrl:e.config.get(Yg.DefaultServerUrl)??Yg.DefaultServerUrl.defaultValue??xC.serverUrl.defaultValue}}function QNe(e){let t=hY(e),r=h.clone(xC);return h.setDefaultValues(r,{serverType:t.DefaultServerType,serverUrl:t.DefaultServerUrl}),r}var ENe="images/cells.jpg";var bNe="images/nebula_left2.jpg";var xNe="images/nebula_bottom4.jpg";var SNe="images/nebula_back6.jpg";var DNe="images/nebula_right1.jpg";var vNe="images/nebula_top3.jpg";var FNe="images/nebula_front5.jpg";var wNe=er.create({name:"extension-backgrounds",category:"misc",display:{name:"Backgrounds"},ctor:class extends er.Handler{register(){this.ctx.config.set(jt.Background.Styles,[[{variant:{name:"off",params:{}}},"Off"],[{variant:{name:"radialGradient",params:{centerColor:16777215,edgeColor:8421504,ratio:.2,coverage:"viewport"}}},"Light Radial Gradient"],[{variant:{name:"image",params:{source:{name:"url",params:ENe},lightness:0,saturation:0,opacity:1,blur:0,coverage:"viewport"}}},"Normal Cells Image"],[{variant:{name:"skybox",params:{faces:{name:"urls",params:{nx:bNe,ny:xNe,nz:SNe,px:DNe,py:vNe,pz:FNe}},lightness:0,saturation:0,opacity:1,blur:.3,rotation:{x:0,y:0,z:0}}}},"Purple Nebula Skybox"]])}update(){return!1}unregister(){this.ctx.config.set(jt.Background.Styles,[])}},params:()=>({})});var zee={sceneBoundingSpheres:h.Boolean(!1,{description:"Show full scene bounding spheres."}),visibleSceneBoundingSpheres:h.Boolean(!1,{description:"Show visible scene bounding spheres."}),objectBoundingSpheres:h.Boolean(!1,{description:"Show bounding spheres of visible render objects."}),instanceBoundingSpheres:h.Boolean(!1,{description:"Show bounding spheres of visible instances."})},QY=class{constructor(t,r,n){this.objectsData=new Map;this.instancesData=new Map;this.scene=Zc.create(t,"blended"),this.parent=r,this._props={...h.getDefaultValues(zee),...n}}update(){let t=yY(this.scene,this.parent.boundingSphere,this.sceneData,xt.lightgrey,m1t);t&&(this.sceneData=t);let r=yY(this.scene,this.parent.boundingSphereVisible,this.visibleSceneData,xt.black,d1t);r&&(this.visibleSceneData=r),this.parent.forEach((n,o)=>{let i=this.objectsData.get(o),a=yY(this.scene,n.values.boundingSphere.ref.value,i,xt.tomato,p1t);a&&this.objectsData.set(o,a);let A=this.instancesData.get(o),s=yY(this.scene,n.values.invariantBoundingSphere.ref.value,A,xt.skyblue,f1t,{aTransform:o.values.aTransform,matrix:o.values.matrix,transform:o.values.transform,extraTransform:o.values.extraTransform,hasExtraTransform:o.values.hasExtraTransform,uInstanceCount:o.values.uInstanceCount,instanceCount:o.values.instanceCount,aInstance:o.values.aInstance,hasReflection:o.values.hasReflection,instanceGrid:o.values.instanceGrid});s&&this.instancesData.set(o,s)}),this.objectsData.forEach((n,o)=>{this.parent.has(o)||(this.scene.remove(n.renderObject),this.objectsData.delete(o))}),this.instancesData.forEach((n,o)=>{this.parent.has(o)||(this.scene.remove(n.renderObject),this.instancesData.delete(o))}),this.scene.update(void 0,!1),this.scene.commit()}syncVisibility(){this.sceneData&&(this.sceneData.renderObject.state.visible=this._props.sceneBoundingSpheres),this.visibleSceneData&&(this.visibleSceneData.renderObject.state.visible=this._props.visibleSceneBoundingSpheres),this.parent.forEach((t,r)=>{let n=this.objectsData.get(r);n&&(n.renderObject.state.visible=r.state.visible&&this._props.objectBoundingSpheres);let o=this.instancesData.get(r);o&&(o.renderObject.state.visible=r.state.visible&&this._props.instanceBoundingSpheres)})}clear(){this.sceneData=void 0,this.objectsData.clear(),this.scene.clear()}get isEnabled(){return this._props.sceneBoundingSpheres||this._props.visibleSceneBoundingSpheres||this._props.objectBoundingSpheres||this._props.instanceBoundingSpheres}get props(){return this._props}setProps(t){Object.assign(this._props,t),this.isEnabled&&this.update()}};function yY(e,t,r,n,o,i){if(!r||!we.equals(r.boundingSphere,t)){let a=g1t(t,r&&r.mesh),A=r?r.renderObject:B1t(a,n,o,i);return r?D.updateIfChanged(A.values.drawCount,lA.getDrawCount(a)):e.add(A),{boundingSphere:we.clone(t),renderObject:A,mesh:a}}}function g1t(e,t){let n=vm(2),o=We.createState(n,n/2,t);if(e.radius){cn(o,e.center,e.radius,2);let i=e.radius*.01;if(we.hasExtrema(e))for(let a of e.extrema)cn(o,a,i,0)}return We.getMesh(o)}var m1t=FA(),d1t=FA(),p1t=FA(),f1t=FA();function B1t(e,t,r,n){let o=At.Utils.createValuesSimple(e,{alpha:.1,doubleSided:!1,cellSize:0,batchSize:0},t,1,n);return $s("mesh",o,{disposed:!1,visible:!0,alphaFactor:1,pickable:!1,colorOnly:!1,opaque:!1,writeDepth:!1},r)}var Xee={clipObjects:h.Boolean(!1,{description:"Show clip-objects of visible render objects."})};function I1t(e,t,r,n,o,i,a,A,s,c){let l=g=>Math.round(g*1e5)/1e5,u=[e,t?1:0,l(r[n]),l(r[n+1]),l(r[n+2]),l(o[i]),l(o[i+1]),l(o[i+2]),l(o[i+3]),l(a[A]),l(a[A+1]),l(a[A+2])];for(let g=0;g<16;++g)u.push(l(s[c+g]));return u.join(",")}var C1t={[ha.Type.plane]:xt.orange,[ha.Type.sphere]:xt.green,[ha.Type.cube]:xt.dodgerblue,[ha.Type.cylinder]:xt.gold,[ha.Type.infiniteCone]:xt.crimson},h1t=FA(),y1t=FA(),Q1t=gr.setAxisAngle(gr(),B.create(1,0,0),-Math.PI/2),E1t=Y.fromQuat(Y(),Q1t),b1t=gr.setAxisAngle(gr(),B.create(1,0,0),Math.PI/2),x1t=Y.fromQuat(Y(),b1t),Kee=B(),FL=gr(),jee=B(),EY=Y(),wL=Y(),RNe=Y(),UNe=Y(),bY=Y(),Cu=Y(),vC=B(),S1t=B.create(0,1,0),D1t=B.create(0,0,1),Ux=B(),xY=class{constructor(t,r,n){this.objectsData=new Map;this.scene=Zc.create(t,"blended"),this.parent=r,this._props={...h.getDefaultValues(Xee),...n}}update(){let t=new Set,r=this.parent.boundingSphereVisible.radius||50;this.parent.forEach((n,o)=>{if(!o.state.visible)return;let i=o.values.dClipObjectCount.ref.value;if(i===0)return;let a=o.values.uClipObjectType.ref.value,A=o.values.uClipObjectInvert.ref.value,s=o.values.uClipObjectPosition.ref.value,c=o.values.uClipObjectRotation.ref.value,l=o.values.uClipObjectScale.ref.value,u=o.values.uClipObjectTransform.ref.value;for(let g=0;g<i;++g){let m=a[g];if(m===ha.Type.none)continue;let p=I1t(m,A[g],s,g*3,c,g*4,l,g*3,u,g*16);if(t.add(p),this.objectsData.has(p))continue;B.fromArray(Kee,s,g*3),gr.fromArray(FL,c,g*4),gr.normalize(FL,FL),B.fromArray(jee,l,g*3),Y.fromArray(EY,u,g*16),Y.fromQuat(RNe,FL),Y.fromTranslation(UNe,Kee),Y.mul(bY,UNe,RNe),Y.isIdentity(EY)||(Y.invert(wL,EY),Y.mul(bY,wL,bY));let d=v1t(m,bY,jee,r),f=C1t[m]||xt.white,I=T1t(d,f,h1t,m),C=A[g],y=P1t(Kee,FL,EY,jee,m,C),Q=G1t(y,y1t);this.scene.add(I),this.scene.add(Q),this.objectsData.set(p,{key:p,renderObject:I,indicatorRenderObject:Q,mesh:d})}}),this.objectsData.forEach((n,o)=>{t.has(o)||(this.scene.remove(n.renderObject),this.scene.remove(n.indicatorRenderObject),this.objectsData.delete(o))}),this.scene.update(void 0,!1),this.scene.commit()}syncVisibility(){let t=this._props.clipObjects;this.objectsData.forEach(r=>{r.renderObject.state.visible=t,r.indicatorRenderObject.state.visible=t})}clear(){this.objectsData.clear(),this.scene.clear()}get isEnabled(){return this._props.clipObjects}get props(){return this._props}setProps(t){Object.assign(this._props,t),this.isEnabled&&this.update()}};function v1t(e,t,r,n){switch(e){case ha.Type.plane:return F1t(t,n);case ha.Type.sphere:return LNe(t,r);case ha.Type.cube:return R1t(t,r);case ha.Type.cylinder:return U1t(t,r);case ha.Type.infiniteCone:return L1t(t,r,n);default:return LNe(t,r)}}function F1t(e,t){let r=Math.max(t*2,10);Y.mul(Cu,e,E1t),Y.scale(Cu,Cu,B.create(r,r,1));let n=mH(),o=We.createState(256,128);return We.addPrimitive(o,Cu,n),We.addPrimitiveFlipped(o,Cu,n),We.getMesh(o)}function LNe(e,t){let n=w1t(2);Y.scale(Cu,e,B.create(t[0]*.5,t[1]*.5,t[2]*.5));let o=10*Math.pow(2,4)+2,i=We.createState(o*3,o);return We.addPrimitive(i,Cu,n),We.getMesh(i)}var Wee;function w1t(e){return Wee||(Wee=nH(e)),Wee}function R1t(e,t){Y.scale(Cu,e,t);let r=dI(),n=We.createState(256,128);return We.addPrimitive(n,Cu,r),We.getMesh(n)}function U1t(e,t){let r=$R({radiusTop:1,radiusBottom:1,height:1,radialSegments:16,heightSegments:1,topCap:!0,bottomCap:!0});Y.scale(Cu,e,B.create(t[0]*.5,t[1],t[0]*.5));let n=r.vertices.length/3,o=We.createState(n*3,n);return We.addPrimitive(o,Cu,r),We.getMesh(o)}function L1t(e,t,r){let n=$R({radiusTop:0,radiusBottom:1,height:1,radialSegments:16,heightSegments:1,topCap:!1,bottomCap:!0}),o=Math.max(r*2,10),i=(t[1]||1)/(t[0]||1),a=o*i,A=Y.fromScaling(Y(),B.create(a,o,a)),s=Y.fromTranslation(Y(),B.create(0,-o*.5,0));Y.mul(Cu,s,A),Y.mul(Cu,x1t,Cu),Y.mul(Cu,e,Cu);let c=n.vertices.length/3,l=We.createState(c*3,c);return We.addPrimitive(l,Cu,n),We.getMesh(l)}function T1t(e,t,r,n){let o=n===ha.Type.plane?.25:.15,i=At.Utils.createValuesSimple(e,{alpha:o,doubleSided:!1,cellSize:0,batchSize:0},t,1);return $s("mesh",i,{disposed:!1,visible:!0,alphaFactor:1,pickable:!1,colorOnly:!1,opaque:!1,writeDepth:!1},r)}function P1t(e,t,r,n,o,i){let a=Math.max(n[0],n[1],n[2]),A=Math.max(a*.004,.01),s=A*.4,c=Math.max(a*.1,2);B.copy(Ux,e),Y.isIdentity(r)||(Y.invert(wL,r),B.transformMat4(Ux,Ux,wL));let l=o===ha.Type.infiniteCone?D1t:S1t;if(B.transformQuat(vC,l,t),o===ha.Type.infiniteCone&&B.negate(vC,vC),o===ha.Type.plane&&!i&&B.negate(vC,vC),!Y.isIdentity(r)){let m=B();B.add(m,e,B.scale(B(),vC,c)),B.transformMat4(m,m,wL),B.sub(vC,m,Ux),B.normalize(vC,vC)}let u=B();B.scaleAndAdd(u,Ux,vC,c);let g=We.createState(512,256);return cn(g,Ux,A,1),Sn(g,Ux,u,1,{radiusTop:s,radiusBottom:s,radialSegments:8}),cn(g,u,s*1.5,1),We.getMesh(g)}function G1t(e,t){let r=At.Utils.createValuesSimple(e,{alpha:.7,doubleSided:!1,cellSize:0,batchSize:0},xt.white,1);return $s("mesh",r,{disposed:!1,visible:!0,alphaFactor:1,pickable:!1,colorOnly:!1,opaque:!1,writeDepth:!1},t)}var TNe=B(),PNe=B(),h1=[];for(let e=0;e<8;++e)h1.push(B());var N1t=[[0,1,0],[2,3,0],[4,5,0],[6,7,0],[0,2,1],[1,3,1],[4,6,1],[5,7,1],[0,4,2],[1,5,2],[2,6,2],[3,7,2]];function SY(e,t,r){for(let n=0;n<8;++n)B.set(h1[n],n&1?1:0,n&2?1:0,n&4?1:0),B.transformMat4(h1[n],h1[n],t);for(let[n,o]of N1t)B.copy(TNe,h1[n]),B.copy(PNe,h1[o]),e.addVec(TNe,PNe,r)}var Zee={directVolumeEdges:h.Boolean(!1,{description:"Show edges of visible direct-volume render objects."})},M1t=FA(),DY=class{constructor(t,r,n){this.renderObjects=new Map;this.scene=Zc.create(t,"blended"),this.parent=r,this._props={...h.getDefaultValues(Zee),...n}}update(){let t=new Set(this.renderObjects.keys());this.parent.forEach((r,n)=>{if(!n.state.visible||n.type!=="direct-volume")return;let o=n.values,i=o.uUnitToCartn.ref.version+o.uGridDim.ref.version+o.aTransform.ref.version,a=this.renderObjects.get(n.id);if(a&&a.version===i){t.delete(n.id);return}a&&(this.scene.remove(a.ro),this.renderObjects.delete(n.id));let A=k1t(o);if(!A)return;let s=H1t(A,M1t);this.scene.add(s),this.renderObjects.set(n.id,{ro:s,version:i}),t.delete(n.id)});for(let r of t){let n=this.renderObjects.get(r);n&&(this.scene.remove(n.ro),this.renderObjects.delete(r))}this.scene.update(void 0,!1),this.scene.commit()}syncVisibility(){let t=this._props.directVolumeEdges;this.renderObjects.forEach(r=>{r.ro.state.visible=t})}clear(){this.renderObjects.clear(),this.scene.clear()}get isEnabled(){return this._props.directVolumeEdges}get props(){return this._props}setProps(t){Object.assign(this._props,t),this.isEnabled&&this.update()}};function k1t(e){let t=e.uUnitToCartn.ref.value,r=e.aTransform.ref.value,n=e.uInstanceCount.ref.value;if(e.boundingSphere.ref.value.radius<1e-6)return;let i=Ii.create(128*n);for(let a=0;a<n;++a){let A=Y();Y.fromArray(A,r,a*16);let s=Y.mul(Y(),A,t);SY(i,s,0)}return i.getLines()}function H1t(e,t){let r={...h.getDefaultValues(Zr.Params),sizeFactor:1,alpha:.8},n=Zr.Utils.createValuesSimple(e,r,xt.orange,1),o=Zr.Utils.createRenderableState(r);return o.pickable=!1,$s("lines",n,o,t)}var y1=B(),Q1=B(),GNe={segments:32,circlesPerDimension:1};function NNe(e,t,r,n,o){let i=o?.segments??GNe.segments,a=o?.circlesPerDimension??GNe.circlesPerDimension;for(let A=0;A<3;++A)for(let s=0;s<a;++s){let c=a===1?0:-t+2*t*(s+1)/(a+1),l=Math.sqrt(Math.max(0,t*t-c*c));l<1e-8||V1t(e,l,c,A,r,n,i)}}function V1t(e,t,r,n,o,i,a){for(let A=0;A<a;++A){let s=A/a*Math.PI*2,c=(A+1)/a*Math.PI*2,l=Math.cos(s)*t,u=Math.sin(s)*t,g=Math.cos(c)*t,m=Math.sin(c)*t;n===2?(B.set(y1,l,u,r),B.set(Q1,g,m,r)):n===1?(B.set(y1,l,r,u),B.set(Q1,g,r,m)):(B.set(y1,r,l,u),B.set(Q1,r,g,m)),B.transformMat4(y1,y1,o),B.transformMat4(Q1,Q1,o),e.addVec(y1,Q1,i)}}var RL=B(),UL=B(),LL=B(),TL=B();function MNe(e,t,r,n){B.fromArray(RL,t,0),B.fromArray(UL,t,3),B.fromArray(LL,t,6),B.fromArray(TL,t,9),B.transformMat4(RL,RL,r),B.transformMat4(UL,UL,r),B.transformMat4(LL,LL,r),B.transformMat4(TL,TL,r),e.addVec(RL,UL,n),e.addVec(UL,LL,n),e.addVec(LL,TL,n),e.addVec(TL,RL,n)}var qee={imageEdges:h.Boolean(!1,{description:"Show edges of visible image render objects."})},_1t=FA(),Y1t=FA(),$ee=B(),PL=B(),ete=gr(),GL=Y(),ff=Y(),vY=class{constructor(t,r,n){this.renderObjects=new Map;this.scene=Zc.create(t,"blended"),this.parent=r,this._props={...h.getDefaultValues(qee),...n}}update(){let t=new Set(this.renderObjects.keys());this.parent.forEach((r,n)=>{if(!n.state.visible||n.type!=="image")return;let o=n.values,i=o.aPosition.ref.version+o.uTrimType.ref.version+o.uTrimCenter.ref.version+o.uTrimRotation.ref.version+o.uTrimScale.ref.version+o.uTrimTransform.ref.version+o.aTransform.ref.version,a=this.renderObjects.get(n.id);if(a&&a.version===i){t.delete(n.id);return}if(a){for(let l of a.roList)this.scene.remove(l);this.renderObjects.delete(n.id)}let A=[],s=O1t(o);if(s){let l=HNe(s,_1t,xt.cyan,.8);this.scene.add(l),A.push(l)}let c=J1t(o);if(c){let l=HNe(c,Y1t,xt.yellow,.7);this.scene.add(l),A.push(l)}A.length>0&&this.renderObjects.set(n.id,{roList:A,version:i}),t.delete(n.id)});for(let r of t){let n=this.renderObjects.get(r);if(n){for(let o of n.roList)this.scene.remove(o);this.renderObjects.delete(r)}}this.scene.update(void 0,!1),this.scene.commit()}syncVisibility(){let t=this._props.imageEdges;this.renderObjects.forEach(r=>{for(let n of r.roList)n.state.visible=t})}clear(){this.renderObjects.clear(),this.scene.clear()}get isEnabled(){return this._props.imageEdges}get props(){return this._props}setProps(t){Object.assign(this._props,t),this.isEnabled&&this.update()}},Ld=new Float32Array(12);function O1t(e){let t=e.aPosition.ref.value,r=e.aTransform.ref.value,n=e.uInstanceCount.ref.value;if(t.length<12)return;Ld[0]=t[0],Ld[1]=t[1],Ld[2]=t[2],Ld[3]=t[3],Ld[4]=t[4],Ld[5]=t[5],Ld[6]=t[9],Ld[7]=t[10],Ld[8]=t[11],Ld[9]=t[6],Ld[10]=t[7],Ld[11]=t[8];let o=Ii.create(4*n);for(let i=0;i<n;++i){let a=Y();Y.fromArray(a,r,i*16),MNe(o,Ld,a,0)}return o.getLines()}function J1t(e){let t=e.uTrimType.ref.value;if(t===0)return;let r=e.aTransform.ref.value,n=e.uInstanceCount.ref.value;return B.copy($ee,e.uTrimCenter.ref.value),gr.copy(ete,e.uTrimRotation.ref.value),B.copy(PL,e.uTrimScale.ref.value),Y.copy(GL,e.uTrimTransform.ref.value),t===ha.Type.cube?kNe(r,n):t===ha.Type.sphere?z1t(r,n):kNe(r,n)}function kNe(e,t){let r=Y.fromQuat(Y(),ete),n=Y.fromTranslation(Y(),$ee),o=Y.fromScaling(Y(),PL);if(Y.mul(ff,n,r),Y.mul(ff,ff,o),!Y.isIdentity(GL)){let A=Y.invert(Y(),GL);Y.mul(ff,A,ff)}let i=Y.fromTranslation(Y(),B.create(-.5,-.5,-.5));Y.mul(ff,ff,i);let a=Ii.create(12*t);for(let A=0;A<t;++A){let s=Y();Y.fromArray(s,e,A*16);let c=Y.mul(Y(),s,ff);SY(a,c,0)}return a.getLines()}function z1t(e,t){let r=Math.max(PL[0]*.5,PL[1]*.5,PL[2]*.5),n=Y.fromQuat(Y(),ete),o=Y.fromTranslation(Y(),$ee);if(Y.mul(ff,o,n),!Y.isIdentity(GL)){let s=Y.invert(Y(),GL);Y.mul(ff,s,ff)}let i=32,a=3,A=Ii.create(i*3*a*t);for(let s=0;s<t;++s){let c=Y();Y.fromArray(c,e,s*16);let l=Y.mul(Y(),c,ff);NNe(A,r,l,0,{segments:i,circlesPerDimension:a})}return A.getLines()}function HNe(e,t,r,n){let o={...h.getDefaultValues(Zr.Params),sizeFactor:1,alpha:n},i=Zr.Utils.createValuesSimple(e,o,r,1),a=Zr.Utils.createRenderableState(o);return a.pickable=!1,$s("lines",i,a,t)}var rte={meshNormals:h.Boolean(!1,{description:"Show normals of visible mesh render objects."})},K1t=FA(),VNe=B(),_Ne=B(),tte=B(),E1=B(),FY=class{constructor(t,r,n){this.renderObjects=new Map;this.scene=Zc.create(t,"blended"),this.parent=r,this._props={...h.getDefaultValues(rte),...n}}update(){let t=new Set(this.renderObjects.keys()),r=new Set;this.parent.forEach((n,o)=>{if(!o.state.visible||o.type!=="mesh")return;if(r.add(o.id),this.renderObjects.has(o.id)){t.delete(o.id);return}let i=o.values,a=j1t(i);if(!a)return;let A=W1t(a,K1t);this.scene.add(A),this.renderObjects.set(o.id,A)});for(let n of t){let o=this.renderObjects.get(n);o&&(this.scene.remove(o),this.renderObjects.delete(n))}this.scene.update(void 0,!1),this.scene.commit()}syncVisibility(){let t=this._props.meshNormals;this.renderObjects.forEach(r=>{r.state.visible=t})}clear(){this.renderObjects.clear(),this.scene.clear()}get isEnabled(){return this._props.meshNormals}get props(){return this._props}setProps(t){Object.assign(this._props,t),this.isEnabled&&this.update()}};function j1t(e){let t=e.aPosition.ref.value,r=e.aNormal.ref.value,n=e.elements.ref.value,o=e.aTransform.ref.value,i=e.uInstanceCount.ref.value;if(t.length/3===0)return;let A=e.boundingSphere.ref.value,s=Math.max(A.radius*.01,.1),c=e.drawCount.ref.value,l=Ii.create(c*i);for(let u=0;u<i;++u){let g=u*16,m=Y();Y.fromArray(m,o,g);let p=new Set;for(let d=0;d<c;++d){let f=n[d];if(p.has(f))continue;p.add(f);let I=f*3;B.set(VNe,t[I],t[I+1],t[I+2]),B.set(_Ne,r[I],r[I+1],r[I+2]),B.transformMat4(tte,VNe,m),B.transformDirection(E1,_Ne,m),B.normalize(E1,E1),B.scaleAndAdd(E1,tte,E1,s),l.addVec(tte,E1,0)}}return l.getLines()}function W1t(e,t){let r={...h.getDefaultValues(Zr.Params),sizeFactor:1,alpha:.7},n=Zr.Utils.createValuesSimple(e,r,xt.magenta,1),o=Zr.Utils.createRenderableState(r);return o.pickable=!1,$s("lines",n,o,t)}var X1t={...zee,...Xee,...rte,...qee,...Zee},YNe=er.create({name:"extension-debug-helpers",category:"misc",display:{name:"Debug Helpers"},ctor:class extends er.Handler{async register(){await this.ctx.canvas3dInitialized;let e=this.ctx.canvas3d;if(!e)return;let t=e.debugRegistry,{ctx:r,parent:n}=t;t.register("bounding-sphere",new QY(r,n,this.params)),t.register("clip-object",new xY(r,n,this.params)),t.register("mesh",new FY(r,n,this.params)),t.register("image",new vY(r,n,this.params)),t.register("direct-volume",new DY(r,n,this.params))}update(e){let t=super.update(e),r=this.ctx.canvas3d;return t&&r&&(r.debugRegistry.setProps(e),r.requestDraw()),t}unregister(){let e=this.ctx.canvas3d;if(!e)return;let t=e.debugRegistry;t.unregister("bounding-sphere"),t.unregister("clip-object"),t.unregister("mesh"),t.unregister("image"),t.unregister("direct-volume")}},params:()=>X1t,canAutoUpdate:()=>!0});var ut={A:16761281,B:13160447,BII:23002,miB:3926267,Z:128526,IC:16407803,OPN:15269888,SYN:16776961,N:15921906},kE=16752906,wY={NANT_Upr:ut.N,NANT_Lwr:ut.N,AA00_Upr:ut.A,AA00_Lwr:ut.A,AA02_Upr:ut.A,AA02_Lwr:ut.A,AA03_Upr:ut.A,AA03_Lwr:ut.A,AA04_Upr:ut.A,AA04_Lwr:ut.A,AA08_Upr:ut.A,AA08_Lwr:ut.A,AA09_Upr:ut.A,AA09_Lwr:ut.A,AA01_Upr:ut.A,AA01_Lwr:ut.A,AA05_Upr:ut.A,AA05_Lwr:ut.A,AA06_Upr:ut.A,AA06_Lwr:ut.A,AA10_Upr:ut.A,AA10_Lwr:ut.A,AA11_Upr:ut.A,AA11_Lwr:ut.A,AA07_Upr:ut.A,AA07_Lwr:ut.A,AA12_Upr:ut.A,AA12_Lwr:ut.A,AA13_Upr:ut.A,AA13_Lwr:ut.A,AB01_Upr:ut.A,AB01_Lwr:ut.B,AB02_Upr:ut.A,AB02_Lwr:ut.B,AB03_Upr:ut.A,AB03_Lwr:ut.B,AB04_Upr:ut.A,AB04_Lwr:ut.B,AB05_Upr:ut.A,AB05_Lwr:ut.B,BA01_Upr:ut.B,BA01_Lwr:ut.A,BA05_Upr:ut.B,BA05_Lwr:ut.A,BA09_Upr:ut.B,BA09_Lwr:ut.A,BA08_Upr:ut.BII,BA08_Lwr:ut.A,BA10_Upr:ut.B,BA10_Lwr:ut.A,BA13_Upr:ut.BII,BA13_Lwr:ut.A,BA16_Upr:ut.BII,BA16_Lwr:ut.A,BA17_Upr:ut.BII,BA17_Lwr:ut.A,BB00_Upr:ut.B,BB00_Lwr:ut.B,BB01_Upr:ut.B,BB01_Lwr:ut.B,BB17_Upr:ut.B,BB17_Lwr:ut.B,BB02_Upr:ut.B,BB02_Lwr:ut.B,BB03_Upr:ut.B,BB03_Lwr:ut.B,BB11_Upr:ut.B,BB11_Lwr:ut.B,BB16_Upr:ut.B,BB16_Lwr:ut.B,BB04_Upr:ut.B,BB04_Lwr:ut.BII,BB05_Upr:ut.B,BB05_Lwr:ut.BII,BB07_Upr:ut.BII,BB07_Lwr:ut.BII,BB08_Upr:ut.BII,BB08_Lwr:ut.BII,BB10_Upr:ut.miB,BB10_Lwr:ut.miB,BB12_Upr:ut.miB,BB12_Lwr:ut.miB,BB13_Upr:ut.miB,BB13_Lwr:ut.miB,BB14_Upr:ut.miB,BB14_Lwr:ut.miB,BB15_Upr:ut.miB,BB15_Lwr:ut.miB,BB20_Upr:ut.miB,BB20_Lwr:ut.miB,IC01_Upr:ut.IC,IC01_Lwr:ut.IC,IC02_Upr:ut.IC,IC02_Lwr:ut.IC,IC03_Upr:ut.IC,IC03_Lwr:ut.IC,IC04_Upr:ut.IC,IC04_Lwr:ut.IC,IC05_Upr:ut.IC,IC05_Lwr:ut.IC,IC06_Upr:ut.IC,IC06_Lwr:ut.IC,IC07_Upr:ut.IC,IC07_Lwr:ut.IC,OP01_Upr:ut.OPN,OP01_Lwr:ut.OPN,OP02_Upr:ut.OPN,OP02_Lwr:ut.OPN,OP03_Upr:ut.OPN,OP03_Lwr:ut.OPN,OP04_Upr:ut.OPN,OP04_Lwr:ut.OPN,OP05_Upr:ut.OPN,OP05_Lwr:ut.OPN,OP06_Upr:ut.OPN,OP06_Lwr:ut.OPN,OP07_Upr:ut.OPN,OP07_Lwr:ut.OPN,OP08_Upr:ut.OPN,OP08_Lwr:ut.OPN,OP09_Upr:ut.OPN,OP09_Lwr:ut.OPN,OP10_Upr:ut.OPN,OP10_Lwr:ut.OPN,OP11_Upr:ut.OPN,OP11_Lwr:ut.OPN,OP12_Upr:ut.OPN,OP12_Lwr:ut.OPN,OP13_Upr:ut.OPN,OP13_Lwr:ut.OPN,OP14_Upr:ut.OPN,OP14_Lwr:ut.OPN,OP15_Upr:ut.OPN,OP15_Lwr:ut.OPN,OP16_Upr:ut.OPN,OP16_Lwr:ut.OPN,OP17_Upr:ut.OPN,OP17_Lwr:ut.OPN,OP18_Upr:ut.OPN,OP18_Lwr:ut.OPN,OP19_Upr:ut.OPN,OP19_Lwr:ut.OPN,OP20_Upr:ut.OPN,OP20_Lwr:ut.OPN,OP21_Upr:ut.OPN,OP21_Lwr:ut.OPN,OP22_Upr:ut.OPN,OP22_Lwr:ut.OPN,OP23_Upr:ut.OPN,OP23_Lwr:ut.OPN,OP24_Upr:ut.OPN,OP24_Lwr:ut.OPN,OP25_Upr:ut.OPN,OP25_Lwr:ut.OPN,OP26_Upr:ut.OPN,OP26_Lwr:ut.OPN,OP27_Upr:ut.OPN,OP27_Lwr:ut.OPN,OP28_Upr:ut.OPN,OP28_Lwr:ut.OPN,OP29_Upr:ut.OPN,OP29_Lwr:ut.OPN,OP30_Upr:ut.OPN,OP30_Lwr:ut.OPN,OP31_Upr:ut.OPN,OP31_Lwr:ut.OPN,OPS1_Upr:ut.OPN,OPS1_Lwr:ut.OPN,OP1S_Upr:ut.OPN,OP1S_Lwr:ut.SYN,AAS1_Upr:ut.SYN,AAS1_Lwr:ut.A,AB1S_Upr:ut.A,AB1S_Lwr:ut.SYN,AB2S_Upr:ut.A,AB2S_Lwr:ut.SYN,BB1S_Upr:ut.B,BB1S_Lwr:ut.SYN,BB2S_Upr:ut.B,BB2S_Lwr:ut.SYN,BBS1_Upr:ut.SYN,BBS1_Lwr:ut.B,ZZ01_Upr:ut.Z,ZZ01_Lwr:ut.Z,ZZ02_Upr:ut.Z,ZZ02_Lwr:ut.Z,ZZ1S_Upr:ut.Z,ZZ1S_Lwr:ut.SYN,ZZ2S_Upr:ut.Z,ZZ2S_Lwr:ut.SYN,ZZS1_Upr:ut.SYN,ZZS1_Lwr:ut.Z,ZZS2_Upr:ut.SYN,ZZS2_Lwr:ut.Z};var Vm;(o=>{function e(){return{timestamp_utc:JZ(new Date)}}o.createInfo=e;function t(i,a){return{name:i,instance(A){let s=a(A);return{fields:r,source:[{data:s,rowCount:1}]}}}}o.defaultInfoCategory=t;let r=[eo.Field.str("updated_datetime_utc",(i,a)=>a.timestamp_utc)];function n(i,a){if(!sn.is(a.sourceData)||!a.sourceData.data.frame.categoryNames.includes(i))return;let A=a.sourceData.data.frame.categories[i].getField("updated_datetime_utc");if(!(!A||A.rowCount===0))return{timestamp_utc:A.str(0)||JZ(new Date)}}o.tryGetInfoFromCif=n})(Vm||={});var RY={},Lc;(a=>{a.Schema={ndb_struct_ntc_step:{id:K.Schema.int,name:K.Schema.str,PDB_model_number:K.Schema.int,label_entity_id_1:K.Schema.int,label_asym_id_1:K.Schema.str,label_seq_id_1:K.Schema.int,label_comp_id_1:K.Schema.str,label_alt_id_1:K.Schema.str,label_entity_id_2:K.Schema.int,label_asym_id_2:K.Schema.str,label_seq_id_2:K.Schema.int,label_comp_id_2:K.Schema.str,label_alt_id_2:K.Schema.str,auth_asym_id_1:K.Schema.str,auth_seq_id_1:K.Schema.int,auth_asym_id_2:K.Schema.str,auth_seq_id_2:K.Schema.int,PDB_ins_code_1:K.Schema.str,PDB_ins_code_2:K.Schema.str},ndb_struct_ntc_step_summary:{step_id:K.Schema.int,assigned_CANA:K.Schema.str,assigned_NtC:K.Schema.str,confal_score:K.Schema.int,euclidean_distance_NtC_ideal:K.Schema.float,cartesian_rmsd_closest_NtC_representative:K.Schema.float,closest_CANA:K.Schema.str,closest_NtC:K.Schema.str,closest_step_golden:K.Schema.str}};function t(A,s,c){let l=new Array,u=new Array,{id:g,PDB_model_number:m,name:p,auth_asym_id_1:d,auth_seq_id_1:f,label_comp_id_1:I,label_alt_id_1:C,PDB_ins_code_1:y,auth_asym_id_2:Q,auth_seq_id_2:E,label_comp_id_2:b,label_alt_id_2:x,PDB_ins_code_2:S,_rowCount:w}=s;if(w!==c._rowCount)throw new Error("Inconsistent mmCIF data");for(let R=0;R<w;R++){let{NtC:T,confal_score:L,rmsd:F}=Z1t(g.value(R),R,c),v=m.value(R),U=d.value(R),G=f.value(R),N=v-1;(u.length<=N||!u[N])&&(u[N]=new Map);let k={PDB_model_number:v,name:p.value(R),auth_asym_id_1:U,auth_seq_id_1:G,label_comp_id_1:I.value(R),label_alt_id_1:C.value(R),PDB_ins_code_1:y.value(R),auth_asym_id_2:Q.value(R),auth_seq_id_2:E.value(R),label_comp_id_2:b.value(R),label_alt_id_2:x.value(R),PDB_ins_code_2:S.value(R),confal_score:L,NtC:T,rmsd:F};l.push(k);let J=u[N],H=J.get(U)??new Map,z=H.get(G)??[];z.push(l.length-1),H.set(G,z),J.set(U,H),u[N]=J}return{steps:l,mapping:u}}a.getStepsFromCif=t;async function r(A,s,c){let l=Vm.createInfo(),u=n(s);if(u===void 0)return{value:{info:l,data:void 0}};let g=t(s,u.steps,u.stepsSummary);return{value:{info:l,data:g}}}a.fromCif=r;function n(A){if(!sn.is(A.sourceData))throw new Error("Data format must be mmCIF");if(o(A))return{steps:om(a.Schema.ndb_struct_ntc_step,A.sourceData.data.frame.categories.ndb_struct_ntc_step),stepsSummary:om(a.Schema.ndb_struct_ntc_step_summary,A.sourceData.data.frame.categories.ndb_struct_ntc_step_summary)}}a.getCifData=n;function o(A){if(!sn.is(A.sourceData))return!1;let s=A.sourceData.data.frame.categoryNames;return s.includes("ndb_struct_ntc_step")&&s.includes("ndb_struct_ntc_step_summary")}function i(A){return!!A&&o(A)}a.isApplicable=i})(Lc||={});function Z1t(e,t,r){let{step_id:n,confal_score:o,assigned_NtC:i,cartesian_rmsd_closest_NtC_representative:a}=r;for(let A=t;A<r._rowCount;A++)if(e===n.value(A))return{NtC:i.value(A),confal_score:o.value(A),rmsd:a.value(A)};for(let A=0;A<t;A++)if(e===n.value(A))return{NtC:i.value(A),confal_score:o.value(A),rmsd:a.value(A)};throw new Error("Inconsistent mmCIF data")}var nte={...RY},ig=DA.createProvider({label:"Confal Pyramids",descriptor:{name:"confal_pyramids"},type:"static",defaultParams:nte,getParams:e=>nte,isApplicable:e=>Lc.isApplicable(e),obtain:async(e,t,r)=>{let n={...h.getDefaultValues(nte),...r};return Lc.fromCif(e,t,n)}});var b1;(t=>t.DataTag="dnatco-confal-half-step")(b1||={});var x1;(o=>{function e(i,a){return _f(b1.DataTag,{step:i,isLower:a},{})}o.Location=e;function t(i){return!!i&&i.kind==="data-location"&&i.tag===b1.DataTag}o.isLocation=t;function r(i,a){return ec(b1.DataTag,i,a,void 0,()=>a[0]!==void 0?ONe(i[a[0]]):"")}o.Loci=r;function n(i){return!!i&&i.kind==="data-loci"&&i.tag===b1.DataTag}o.isLoci=n})(x1||={});var q1t="Assigns colors to confal pyramids",JNe={...wY},zNe={colors:h.MappedStatic("default",{default:h.EmptyGroup(),custom:h.Group(Qm(JNe))})};function $1t(e){return h.clone(zNe)}function KNe(e,t){let r=t.colors.name==="default"?JNe:t.colors.params;function n(o,i){if(x1.isLocation(o)){let{step:a,isLower:A}=o.data,s=a.NtC+`_${A?"Lwr":"Upr"}`;return r[s]??kE}return kE}return{factory:KNe,granularity:"group",color:n,props:t,description:q1t,legend:Ba(Du(r).map(o=>[o.replace("_"," "),r[o]]).concat([["Error",kE]]))}}var NL={name:"confal-pyramids",label:"Confal Pyramids",category:Br.Residue,factory:KNe,getParams:$1t,defaultValues:h.getDefaultValues(zNe),isApplicable:e=>!!e.structure&&e.structure.models.some(t=>Lc.isApplicable(t)),ensureCustomProperties:{attach:(e,t)=>t.structure?ig.attach(e,t.structure.models[0],void 0,!0):Promise.resolve(),detach:e=>e.structure&&ig.ref(e.structure.models[0],!1)}};var ote=new Array,es;(a=>{function e(A){return A?{index:A.index,start:A.start,end:A.end}:void 0}a.copyResidue=e;function t(A,s,c,l,u){for(let g=s.start;g<s.end;g++){A.element=A.unit.elements[g];let m=Ke.atom.label_atom_id(A),p=Ke.atom.label_alt_id(A),d=Ke.residue.pdbx_PDB_ins_code(A);if(c.includes(m)&&(p===l||p.length===0)&&d===u)return A.element}return-1}a.getAtomIndex=t;function r(A,s,c){s.element=s.unit.elements[c.start];let l=Ke.unit.model_num(s)-1,u=Ke.chain.auth_asym_id(s),g=Ke.residue.auth_seq_id(s),m=Ke.residue.pdbx_PDB_ins_code(s),p=A.mapping[l];if(!p)return ote;let d=p.get(u);if(!d)return ote;let f=d.get(g);return f?m!==""?f.filter(I=>A.steps[I].PDB_ins_code_1===m):f:ote}a.getStepIndices=r;function n(A,s,c){let l=new Array,u=W.Location.create(A,s);for(let g=c.start;g<c.end;g++){u.element=Ee.getAt(s.elements,g);let m=Ke.atom.label_alt_id(u);m!==""&&!l.includes(m)&&l.push(m)}return l}a.residueAltIds=n;let o=W.Location.create();function i(A,s,c,l,u,g){o.structure=u.structure;for(let m of u.elements){o.unit=m.unit;let p=g==="label"?Ke.chain.label_asym_id:Ke.chain.auth_asym_id,d=g==="label"?Ke.residue.label_seq_id:Ke.residue.auth_seq_id,f=sr.transientSegments(m.unit.model.atomicHierarchy.chainAtomSegments,m.unit.elements),I=sr.transientSegments(m.unit.model.atomicHierarchy.residueAtomSegments,m.unit.elements),C=y=>Ee.getAt(m.unit.elements,y);for(;f.hasNext;){let y=f.move();if(o.element=C(y.start),p(o)===A)for(I.setSegment(y);I.hasNext;){let E=I.move();if(o.element=C(E.start),d(o)===s){if(Ke.residue.pdbx_PDB_ins_code(o)!==l||c&&!n(u.structure,m.unit,E).includes(c))continue;let S=E.start,w=E.end;return W.Loci(u.structure,[{unit:m.unit,indices:Ee.ofBounds(S,w)}])}}}}return Ir}a.residueToLoci=i})(es||={});function ewt(e,t,r,n,o,i,a,A,s){let c=es.getAtomIndex(e,t,["O3'","O3*"],n,i),l=es.getAtomIndex(e,r,["P"],o,a),u=es.getAtomIndex(e,r,["OP1"],o,a),g=es.getAtomIndex(e,r,["OP2"],o,a),m=es.getAtomIndex(e,r,["O5'","O5*"],o,a);return{O3:c,P:l,OP1:u,OP2:g,O5:m,confalScore:A,stepIdx:s}}var UY=class{moveStep(){if(this.residueOne=es.copyResidue(this.residueTwo),this.residueTwo=es.copyResidue(this.residueIt.move()),this.residueTwo.index===this.residueOne.index+1)return this.toPyramids(this.residueOne,this.residueTwo)}toPyramids(t,r){let n=es.getStepIndices(this.data,this.loc,t),o=[];for(let i of n){let a=this.data.steps[i];o.push(ewt(this.loc,t,r,a.label_alt_id_1,a.label_alt_id_2,a.PDB_ins_code_1,a.PDB_ins_code_2,a.confal_score,i))}return o}constructor(t,r){this.chainIt=sr.transientSegments(r.model.atomicHierarchy.chainAtomSegments,r.elements),this.residueIt=sr.transientSegments(r.model.atomicHierarchy.residueAtomSegments,r.elements);let n=ig.get(r.model).value;this.data=n?.data,this.chainIt.hasNext&&(this.residueIt.setSegment(this.chainIt.move()),this.residueIt.hasNext&&(this.residueTwo=this.residueIt.move())),this.loc=W.Location.create(t,r,-1)}get hasNext(){return this.data?this.residueIt.hasNext?!0:this.chainIt.hasNext:!1}move(){return this.residueIt.hasNext?this.moveStep():(this.residueIt.setSegment(this.chainIt.move()),this.residueIt.hasNext&&(this.residueTwo=this.residueIt.move()),this.moveStep())}};var jNe=Y.identity(),LY=B.zero(),ML=B.zero(),S1=B(),kL=B(),D1=B(),v1=B(),F1=B();function twt(e,t,r){B.sub(e,t,r),B.scale(e,e,.5),B.add(e,e,r)}function TY(e,t,r){B.sub(LY,e,t),B.scale(LY,LY,r),B.add(e,e,LY)}var rwt={...bo};function nwt(e){let{structure:t,group:r}=e,n=r.units.length,o=ig.get(t.model)?.value?.data;if(!o)return rn(0,1,1,()=>vA);let i=o.steps.length*2;return rn(i,n,1,(A,s)=>{if(i<=A)return vA;let c=Math.floor(A/2);return x1.Location(o.steps[c],A%2===1)})}function owt(e,t,r,n,o,i){if(!ge.isAtomic(t))return At.createEmpty(i);let a=ig.get(r.model)?.value?.data;if(!a)return At.createEmpty(i);let{steps:A,mapping:s}=a;if(A.length===0)return At.createEmpty(i);let c=6*A.length/s.length,l=We.createState(c,c/10,i),u=new UY(r,t);for(;u.hasNext;){let g=u.move();if(g)for(let m of g){let{O3:p,P:d,OP1:f,OP2:I,O5:C,confalScore:y}=m,Q=(y-20)/100,E=m.stepIdx*2;t.conformation.invariantPosition(p,S1),t.conformation.invariantPosition(d,kL),t.conformation.invariantPosition(f,D1),t.conformation.invariantPosition(I,v1),t.conformation.invariantPosition(C,F1),TY(S1,kL,Q),TY(D1,kL,Q),TY(v1,kL,Q),TY(F1,kL,Q),twt(ML,S1,F1),l.currentGroup=E;let b=Bm(3);b.add(S1,D1,v1),b.add(S1,ML,D1),b.add(S1,v1,ML),We.addPrimitive(l,jNe,b.getPrimitive()),l.currentGroup=E+1,b=Bm(3),b.add(ML,F1,D1),b.add(ML,v1,F1),b.add(F1,v1,D1),We.addPrimitive(l,jNe,b.getPrimitive())}}return We.getMesh(l)}function iwt(e,t,r){let{groupId:n,objectId:o,instanceId:i}=e;if(o!==r)return Ir;let{structure:a}=t,A=t.group.units[i];if(!ge.isAtomic(A))return Ir;let s=ig.get(a.model)?.value?.data;if(!s)return Ir;if(s.steps.length*2<=n)return Ir;let l=Math.floor(n/2);return x1.Loci(s.steps,[l])}function awt(e,t,r){return!1}function Awt(e){return Vo({defaultProps:h.getDefaultValues(rwt),createGeometry:owt,createLocationIterator:nwt,getLoci:iwt,eachLocation:awt,setUpdateState:(t,r,n)=>{}},e)}var swt={"confal-pyramids-symbol":(e,t)=>fo("Confal Pyramids Symbol Mesh",e,t,Awt)},WNe={...bo};function cwt(e,t){return h.clone(WNe)}function lwt(e,t){return Xt.createMulti("Confal Pyramids",e,t,Vn,swt)}var HL={name:"confal-pyramids",label:"Confal Pyramids",description:"Displays schematic depiction of conformer classes and confal values",factory:lwt,getParams:cwt,defaultValues:h.getDefaultValues(WNe),defaultColorTheme:{name:"confal-pyramids"},defaultSizeTheme:{name:"uniform"},isApplicable:e=>e.models.some(t=>Lc.isApplicable(t)),ensureCustomProperties:{attach:(e,t)=>ig.attach(e,t.model,void 0,!0),detach:e=>ig.ref(e.model,!1)}};var ite={id:"preset-structure-representation-confal-pyramids",display:{name:"Confal Pyramids",group:"Annotation",description:"Schematic depiction of conformer class and confal value."},isApplicable(e){return e.data.models.length>=1&&e.data.models.some(t=>Lc.isApplicable(t))},params:()=>ri.CommonParams,async apply(e,t,r){let n=Pn.resolveAndCheck(r.state.data,e),o=n?.obj?.data.model;if(!n||!o)return{};await r.runTask(ve.create("Confal Pyramids",async g=>{await ig.attach({runtime:g,assetManager:r.managers.asset,errorContext:r.errorContext},o)}));let{components:i,representations:a}=await ni.auto.apply(e,{...t},r),A=await r.builders.structure.tryCreateComponentStatic(n,"nucleic",{label:"Confal Pyramids"}),{update:s,builder:c,typeParams:l}=ri.reprBuilder(r,t),u;return a&&(u=c.buildRepresentation(s,A,{type:HL,typeParams:l,color:NL},{tag:"confal-pyramdis"})),await s.commit({revertOnError:!0}),{components:{...i,pyramids:A},representations:{...a,pyramidsRepr:u}}}},uwt=/\r?\n/g;function ONe(e){return`
|
|
<b>${e.auth_asym_id_1}</b> |
|
|
<b>${e.label_comp_id_1} ${e.auth_seq_id_1}${e.PDB_ins_code_1}${e.label_alt_id_1.length>0?` (alt ${e.label_alt_id_1})`:""}
|
|
${e.label_comp_id_2} ${e.auth_seq_id_2}${e.PDB_ins_code_2}${e.label_alt_id_2.length>0?` (alt ${e.label_alt_id_2})`:""} </b><br />
|
|
<i>NtC:</i> ${e.NtC} | <i>Confal score:</i> ${e.confal_score} | <i>RMSD:</i> ${e.rmsd.toFixed(2)}
|
|
`.replace(uwt,"")}var ate={...RY};async function gwt(e,t,r){let n=Vm.createInfo(),o=Lc.getCifData(t);if(o===void 0)return{value:{info:n,data:void 0}};let i=Lc.getStepsFromCif(t,o.steps,o.stepsSummary);return{value:{info:n,data:{data:i}}}}var ag=DA.createProvider({label:"NtC Tube",descriptor:{name:"ntc-tube"},type:"static",defaultParams:ate,getParams:e=>ate,isApplicable:e=>Lc.isApplicable(e),obtain:async(e,t,r)=>{let n={...h.getDefaultValues(ate),...r};return gwt(e,t,n)}});var Lx;(A=>{let e="dnatco-tube-segment-data",t="dnatco-tube-dummy";function r(s){return _f(e,s,{})}A.Location=r;function n(s){return!!s&&s.kind==="data-location"&&s.tag===e}A.isLocation=n;function o(s,c,l,u){return ec(e,s,l,u?()=>u:void 0,()=>c[0]!==void 0?XNe(s[c[0]]):"")}A.Loci=o;function i(){return ec(t,{},[],void 0,()=>"")}A.DummyLoci=i;function a(s){return!!s&&s.kind==="data-loci"&&s.tag===e}A.isLoci=a})(Lx||={});var mwt="Assigns colors to NtC Tube segments",VL={...wY,residueMarker:2236962,stepBoundaryMarker:6645093},ZNe={colors:h.MappedStatic("default",{default:h.EmptyGroup(),custom:h.Group(Qm(VL)),uniform:h.Color(15658734)}),markResidueBoundaries:h.Boolean(!0),markSegmentBoundaries:h.Boolean(!0)};function dwt(e){return h.clone(ZNe)}function qNe(e,t){let r=t.colors.name==="default"?VL:t.colors.name==="custom"?t.colors.params:{...Object.fromEntries(Du(VL).map(o=>[o,t.colors.params])),residueMarker:VL.residueMarker,stepBoundaryMarker:VL.stepBoundaryMarker};function n(o,i){if(Lx.isLocation(o)){let{data:a}=o,{step:A,kind:s}=a,c;return s==="upper"?c=A.NtC+"_Upr":s==="lower"?c=A.NtC+"_Lwr":s==="residue-boundary"?c=t.markResidueBoundaries?"residueMarker":A.NtC+"_Lwr":c=t.markSegmentBoundaries?"stepBoundaryMarker":A.NtC+"_Lwr",r[c]??kE}return kE}return{factory:qNe,granularity:"group",color:n,props:t,description:mwt,legend:Ba(Du(r).map(o=>[o.replace("_"," "),r[o]]).concat([["Error",kE]]))}}var _L={name:"ntc-tube",label:"NtC Tube",category:Br.Residue,factory:qNe,getParams:dwt,defaultValues:h.getDefaultValues(ZNe),isApplicable:e=>!!e.structure&&e.structure.models.some(t=>Lc.isApplicable(t)),ensureCustomProperties:{attach:(e,t)=>t.structure?ag.attach(e,t.structure.models[0],void 0,!0):Promise.resolve(),detach:e=>e.structure&&ag.ref(e.structure.models[0],!1)}};function HE(e,t,r,n,o,i){let a=es.getAtomIndex(t,r,n,o,i);return a!==-1?(t.unit.conformation.invariantPosition(a,e),!0):!1}var $Ne=B(),Ate=B(),eMe=B(),tMe=B(),rMe=B(),nMe=B(),oMe=B(),ste=["C5'","C5*"],cte=["O3'","O3*"],pwt=["O5'","O5*"],fwt=["P"];function Bwt(e,t,r,n,o,i,a,A,s,c){if(t){if(!HE($Ne,e,t,ste,o,A)||!HE(Ate,e,t,cte,o,A))return}else if(!HE(Ate,e,r,pwt,i,s))return;if(HE(eMe,e,r,ste,i,s)&&HE(tMe,e,r,cte,i,s)&&HE(rMe,e,n,ste,a,c)&&HE(nMe,e,n,cte,a,c)&&HE(oMe,e,n,fwt,a,c))return{p_1:$Ne,p0:Ate,p1:eMe,p2:tMe,p3:rMe,p4:nMe,pP:oMe}}function lte(e,t){for(let r=e.start;r<e.end;r++){let n=t.elements[r];if(je.has(t.gapElements,n))return!0}return!1}var PY=class{constructor(t,r){this.altIdOne="";this.insCodeOne="";this.chainIt=sr.transientSegments(r.model.atomicHierarchy.chainAtomSegments,r.elements),this.residueIt=sr.transientSegments(r.model.atomicHierarchy.residueAtomSegments,r.elements);let n=ag.get(r.model).value;this.data=n?.data,this.chainIt.hasNext&&(this.residueIt.setSegment(this.chainIt.move()),this.prime()),this.loc=W.Location.create(t,r,-1)}moveStep(){if(this.residueNext){if(this.residueTwo.index+1===this.residueNext.index)this.residuePrev=es.copyResidue(this.residueOne),this.residueOne=es.copyResidue(this.residueTwo),this.residueTwo=es.copyResidue(this.residueNext),this.residueNext=this.residueIt.hasNext?es.copyResidue(this.residueIt.move()):void 0;else{if(!this.residueIt.hasNext){this.residueNext=void 0;return}this.residuePrev=void 0,this.residueOne=es.copyResidue(this.residueNext),this.residueTwo=es.copyResidue(this.residueIt.move()),this.residueNext=this.residueIt.hasNext?es.copyResidue(this.residueIt.move()):void 0}return this.toSegment(this.residuePrev,this.residueOne,this.residueTwo,this.residueNext)}}prime(){this.residueIt.hasNext&&(this.residueTwo=es.copyResidue(this.residueIt.move())),this.residueIt.hasNext&&(this.residueNext=this.residueIt.move())}toSegment(t,r,n,o){let i=es.getStepIndices(this.data.data,this.loc,r);if(i.length===0)return;let a=i[0],A=this.data.data.steps[a],s=this.altIdOne,c=this.insCodeOne;this.altIdOne=A.label_alt_id_1,this.insCodeOne=A.PDB_ins_code_1;let l=A.label_alt_id_2,u=A.PDB_ins_code_2,g=!!t&<e(t,this.loc.unit)&<e(r,this.loc.unit),m=o?o.index!==n.index+1:!1,p=Bwt(this.loc,t,r,n,s,this.altIdOne,l,c,this.insCodeOne,u);if(p)return{...p,stepIdx:a,followsGap:g,firstInChain:!t,capEnd:!this.residueNext||m||lte(n,this.loc.unit)}}get hasNext(){return this.data?this.residueNext?!0:this.chainIt.hasNext:!1}move(){return this.residueNext?this.moveStep():(this.residuePrev=void 0,this.residueNext=void 0,this.residueIt.setSegment(this.chainIt.move()),this.prime(),this.moveStep())}};var pte=B.add,NY=B.copy,iMe=B.cross,Tx=B.fromArray,Iwt=B.matchDirection,VE=B.normalize,ute=B.orthogonalize,pMe=B.scale,Cwt=B.slerp,gte=B.spline,_E=B.sub,L1=B.toArray,fMe={...bo,linearSegments:h.Numeric(4,{min:2,max:8,step:1},ot.CustomQualityParamInfo),radialSegments:h.Numeric(22,{min:4,max:56,step:2},ot.CustomQualityParamInfo),residueMarkerWidth:h.Numeric(.05,{min:.01,max:.25,step:.01}),segmentBoundaryWidth:h.Numeric(.05,{min:.01,max:.25,step:.01})},aMe={highest:6,higher:6,high:4,medium:4,low:3,lower:3,lowest:2},AMe={highest:32,higher:26,high:22,medium:18,low:14,lower:10,lowest:6},sMe=B(),cMe=B(),lMe=B(),uMe=B(),gMe=B(),mte=B(),GY=B(),hwt=B(),YE=B(),vB=B(),w1=B(),YL=B(),mMe=B();function ywt(e,t,r,n,o,i){let{curvePoints:a,tangentVectors:A,linearSegments:s}=e,c=.5,l=i[1]-i[0];for(let u=0;u<=s;++u){let g=u*l/s+i[0];gte(sMe,t,r,n,o,g,c),gte(cMe,t,r,n,o,g-.01,c),gte(lMe,t,r,n,o,g+.01,c),L1(sMe,a,u*3),VE(YE,_E(YE,cMe,lMe)),L1(YE,A,u*3)}}function Qwt(e,t,r){let{curvePoints:n,tangentVectors:o,normalVectors:i,binormalVectors:a}=e,A=n.length/3;Tx(uMe,o,0),Tx(gMe,o,(A-1)*3),ute(mte,uMe,t),ute(GY,gMe,r),Iwt(GY,GY,mte),NY(YL,mte);let s=A-1;for(let c=0;c<A;++c){let l=MS(0,s,c)*s,u=c===0?0:1/(A-l);Tx(YE,o,c*3),ute(vB,YE,Cwt(hwt,YL,GY,u)),L1(vB,i,c*3),NY(YL,vB),VE(w1,iMe(w1,YE,vB)),L1(w1,a,c*3)}for(let c=1;c<s;++c)Tx(YL,i,(c-1)*3),Tx(vB,i,c*3),Tx(mMe,i,(c+1)*3),pMe(vB,pte(vB,YL,pte(vB,mMe,vB)),1/3),L1(vB,i,c*3),Tx(YE,o,c*3),VE(w1,iMe(w1,YE,vB)),L1(w1,a,c*3)}function R1(e,t,r,n,o,i,a,A=[0,1]){ywt(e,t,r,n,o,A),Qwt(e,i,a)}function Ewt(e){let{structure:t,group:r}=e,n=r.units.length,o=ag.get(t.model)?.value?.data;if(!o)return rn(0,1,1,()=>vA);let i=o.data.steps.length*4,a=(A,s)=>{if(A>i)return vA;let c=Math.floor(A/4),l=o.data.steps[c],u=A%4,g=u===0?"upper":u===1?"lower":u===2?"residue-boundary":"segment-boundary";return Lx.Location({step:l,kind:g})};return rn(BMe(o.data.steps)+1,n,1,a)}function bwt(e,t){let r=t.quality;if(r==="custom")return{linear:t.linearSegments,radial:t.radialSegments};if(r==="auto"){let n=zR(e);return{linear:aMe[n],radial:AMe[n]}}else return{linear:aMe[r],radial:AMe[r]}}function xwt(e,t){let r=es.residueToLoci(e.auth_asym_id_1,e.auth_seq_id_1,e.label_alt_id_1,e.PDB_ins_code_1,t,"auth"),n=es.residueToLoci(e.auth_asym_id_2,e.auth_seq_id_2,e.label_alt_id_2,e.PDB_ins_code_2,t,"auth");if(W.Loci.is(r)&&W.Loci.is(n))return Mf(t.structure,[W.Loci.toStructure(r),W.Loci.toStructure(n)]).boundary.sphere}function BMe(e){return e.length*4-1}function Swt(e,t,r,n,o,i){if(!ge.isAtomic(t))return At.createEmpty(i);let a=ag.get(r.model).value;if(a===void 0||a.data===void 0)return At.createEmpty(i);let{data:A}=a.data;if(A.steps.length===0)return At.createEmpty(i);let s=2,c=bwt(r,o),l=Math.floor(c.linear*4*A.steps.length/r.model.atomicHierarchy.chains._rowCount*c.radial),u=Math.floor(l/3),g=1*n.size.props.value,m=We.createState(l,u,i),p=Xh(c.linear),{curvePoints:d,normalVectors:f,binormalVectors:I,widthValues:C,heightValues:y}=p;for(let z=0;z<=c.linear;z++)C[z]=g,y[z]=g;let[Q,E]=[I,f],b=Xh(s),{curvePoints:x,normalVectors:S,binormalVectors:w,widthValues:R,heightValues:T}=b;for(let z=0;z<=s;z++)R[z]=g,T[z]=g;let[L,F]=[w,S],v=B(),U=B(),G=B(),N=o.residueMarkerWidth/2,k=new PY(r,t);for(;k.hasNext;){let z=k.move();if(!z)continue;let{p_1:_,p0:M,p1:q,p2:ne,p3:oe,p4:ae,pP:me}=z,Se=z.stepIdx*4,ee=Se+1,O=Se+2,X=Se+3,{rmShift:Ce,rmPos:Ne}=vwt(ne,oe,me);if(z.firstInChain?(VE(v,_E(v,ne,q)),VE(U,_E(U,Ne,ne))):(NY(v,U),VE(U,_E(U,Ne,ne))),R1(p,M,q,ne,oe,v,U),m.currentGroup=Se,Bu(m,d,Q,E,c.linear,c.radial,C,y,z.firstInChain||z.followsGap,!1,"rounded"),NY(v,U),VE(G,_E(G,oe,Ne)),VE(U,_E(U,ae,oe)),R1(p,q,ne,oe,ae,v,G,[0,Ce-N]),m.currentGroup=ee,Bu(m,d,Q,E,c.linear,c.radial,C,y,!1,!1,"rounded"),R1(b,q,ne,oe,ae,G,G,[Ce-N,Ce+N]),m.currentGroup=O,Bu(m,x,L,F,s,c.radial,R,T,!1,!1,"rounded"),z.capEnd?(R1(p,q,ne,oe,ae,G,U,[Ce+N,1]),m.currentGroup=ee,Bu(m,d,Q,E,c.linear,c.radial,C,y,!1,!0,"rounded")):(R1(p,q,ne,oe,ae,G,U,[Ce+N,1-o.segmentBoundaryWidth]),m.currentGroup=ee,Bu(m,d,Q,E,c.linear,c.radial,C,y,!1,!1,"rounded"),R1(b,q,ne,oe,ae,U,U,[1-o.segmentBoundaryWidth,1]),m.currentGroup=X,Bu(m,x,L,F,s,c.radial,R,T,!1,!1,"rounded")),z.followsGap){let $={radiusTop:g/2,radiusBottom:g/2,topCap:!0,bottomCap:!0,radialSegments:c.radial};m.currentGroup=Se,Rm(m,_,q,1,2*c.linear,!1,$)}}let J=we.expand(we(),t.boundary.sphere,1.05),H=We.getMesh(m);return H.setBoundingSphere(J),H}var U1=B(),dte=B(),dMe=B(),Dwt=Math.PI/2;function vwt(e,t,r){_E(U1,t,e),_E(dte,r,e);let n=B.angle(dte,U1),o=Dwt-Math.abs(n),a=Math.cos(o)*B.magnitude(dte)/B.magnitude(U1);return pMe(U1,U1,a),pte(dMe,U1,e),{rmShift:a,rmPos:dMe}}function Fwt(e,t,r){let{groupId:n,objectId:o,instanceId:i}=e;if(o!==r)return Ir;let{structure:a}=t,A=t.group.units[i];if(!ge.isAtomic(A))return Ir;let s=ag.get(a.model)?.value?.data??void 0;if(!s)return Ir;let c=BMe(s.data.steps);if(n>c)return Ir;let l=Math.floor(n/4),u=xwt(s.data.steps[l],Ye.toStructureElementLoci(a)),g=l*4+(c+1)*i;return Lx.Loci(s.data.steps,[l],[g],u)}function wwt(e,t,r){if(Lx.isLoci(e)){let n=e.elements[0];return r(Ue.ofBounds(n,n+4))}return!1}function Rwt(e){return Vo({defaultProps:h.getDefaultValues(fMe),createGeometry:Swt,createLocationIterator:Ewt,getLoci:Fwt,eachLocation:wwt,setUpdateState:(t,r,n)=>{t.createGeometry=r.quality!==n.quality||r.residueMarkerWidth!==n.residueMarkerWidth||r.segmentBoundaryWidth!==n.segmentBoundaryWidth||r.doubleSided!==n.doubleSided||r.alpha!==n.alpha||r.linearSegments!==n.linearSegments||r.radialSegments!==n.radialSegments}},e)}var Uwt={"ntc-tube-symbol":(e,t)=>fo("NtC Tube Mesh",e,t,Rwt)},IMe={...fMe};function Lwt(e,t){return h.clone(IMe)}function Twt(e,t){return Xt.createMulti("NtC Tube",e,t,Vn,Uwt)}var OL={name:"ntc-tube",label:"NtC Tube",description:"Displays schematic representation of NtC conformers",factory:Twt,getParams:Lwt,defaultValues:h.getDefaultValues(IMe),defaultColorTheme:{name:"ntc-tube"},defaultSizeTheme:{name:"uniform",props:{value:2}},isApplicable:e=>e.models.every(t=>Lc.isApplicable(t)),ensureCustomProperties:{attach:async(e,t)=>t.models.forEach(r=>ag.attach(e,r,void 0,!0)),detach:e=>e.models.forEach(t=>ag.ref(t,!1))}};var fte={id:"preset-structure-representation-ntc-tube",display:{name:"NtC Tube",group:"Annotation",description:"NtC Tube"},isApplicable(e){return e.data.models.length>=1&&e.data.models.some(t=>Lc.isApplicable(t))},params:()=>ri.CommonParams,async apply(e,t,r){let n=Pn.resolveAndCheck(r.state.data,e),o=n?.obj?.data.model;if(!n||!o)return{};await r.runTask(ve.create("NtC tube",async g=>{await ag.attach({runtime:g,assetManager:r.managers.asset,errorContext:r.errorContext},o)}));let{components:i,representations:a}=await ni.auto.apply(e,{...t},r),A=await r.builders.structure.tryCreateComponentStatic(n,"nucleic",{label:"NtC Tube"}),{update:s,builder:c,typeParams:l}=ri.reprBuilder(r,t),u;return a&&(u=c.buildRepresentation(s,A,{type:OL,typeParams:l,color:_L},{tag:"ntc-tube"})),await s.commit({revertOnError:!0}),{components:{...i,tube:A},representations:{...a,tubeRepr:u}}}},Pwt=/\r?\n/g;function XNe(e){return`
|
|
<b>${e.auth_asym_id_1}</b> |
|
|
<b>${e.label_comp_id_1} ${e.auth_seq_id_1}${e.PDB_ins_code_1}${e.label_alt_id_1.length>0?` (alt ${e.label_alt_id_1})`:""}
|
|
${e.label_comp_id_2} ${e.auth_seq_id_2}${e.PDB_ins_code_2}${e.label_alt_id_2.length>0?` (alt ${e.label_alt_id_2})`:""} </b><br />
|
|
<i>NtC:</i> ${e.NtC} | <i>Confal score:</i> ${e.confal_score} | <i>RMSD:</i> ${e.rmsd.toFixed(2)}
|
|
`.replace(Pwt,"")}var Bte=er.create({name:"dnatco-ntcs",category:"custom-props",display:{name:"DNATCO NtC Annotations",description:"DNATCO NtC Annotations"},ctor:class extends er.Handler{register(){this.ctx.customModelProperties.register(ig,this.params.autoAttach),this.ctx.customModelProperties.register(ag,this.params.autoAttach),this.ctx.representation.structure.themes.colorThemeRegistry.add(NL),this.ctx.representation.structure.registry.add(HL),this.ctx.representation.structure.themes.colorThemeRegistry.add(_L),this.ctx.representation.structure.registry.add(OL),this.ctx.builders.structure.representation.registerPreset(ite),this.ctx.builders.structure.representation.registerPreset(fte)}unregister(){this.ctx.customModelProperties.unregister(ig.descriptor.name),this.ctx.customModelProperties.unregister(ag.descriptor.name),this.ctx.representation.structure.registry.remove(HL),this.ctx.representation.structure.themes.colorThemeRegistry.remove(NL),this.ctx.representation.structure.registry.remove(OL),this.ctx.representation.structure.themes.colorThemeRegistry.remove(_L),this.ctx.builders.structure.representation.unregisterPreset(ite),this.ctx.builders.structure.representation.unregisterPreset(fte)}},params:()=>({autoAttach:h.Boolean(!0),showToolTip:h.Boolean(!0)})});var Gwt=64e3;async function Ite(e,t){let r=await hMe(e,t,{offset:0,size:Gwt}),n=r.length-1;for(;n>=0&&r[n]===0;n--);return g0(r.slice(0,n+1))}async function CMe(e,t,r,n){if(!t.offsets[n])throw new Error(`Resolution ${n} not available.`);let o=await hMe(e,r,t.offsets[n]),i=await e.runTask(ve.create("Unzip",a=>gD(a,o)));return{header:t,resolution:n,data:g0(i)}}async function hMe(e,t,r){return typeof t=="string"?await e.runTask(e.fetch({url:t,headers:{Range:`bytes=${r.offset}-${r.offset+r.size-1}`},type:"binary"})):t.slice(r.offset,r.offset+r.size)}function Nwt(e){let{data:t}=e,r=0;Bi(t,a=>Bi(a,A=>r+=A.start.length));let n={entity_id:new Array(r),chromosome:new Array(r),seq_id_begin:new Int32Array(r),seq_id_end:new Int32Array(r),start:new Int32Array(r),x:new Float32Array(r),y:new Float32Array(r),z:new Float32Array(r),r:new Float32Array(r),haplotype:new Array(r)},o=[B(),B(),B()],i=0;return Bi(t,(a,A)=>{Bi(a,(s,c)=>{let l=`${c}-${A}`,u=s.start.length;if(u===0)return;let g=s.x[0],m=s.y[0],p=s.z[0];B.set(o[0],g,m,p),B.set(o[2],g,m,p);for(let d=0;d<u;d++){n.entity_id[i]=l,n.chromosome[i]=c,n.start[i]=s.start[d],n.seq_id_begin[i]=i,n.seq_id_end[i]=i,g=s.x[d],m=s.y[d],p=s.z[d],B.set(o[1],g,m,p),d+1<u?B.set(o[2],s.x[d+1],s.y[d+1],s.z[d+1]):B.set(o[2],g,m,p),n.x[i]=g,n.y[i]=m,n.z[i]=p,n.r[i]=2/3*Math.min(B.distance(o[0],o[1]),B.distance(o[1],o[2])),n.haplotype[i]=A;let f=o[0];o[0]=o[1],o[1]=f,i++}u===1&&(n.r[i-1]=1)})}),n}async function Mwt(e,t){let r=Nwt(t),n=r.seq_id_begin.length,o=new Array(n),i=new Ca,a={customName:""};for(let l=0;l<n;++l){let u=r.entity_id[l];a.customName=u;let g=i.getEntityId(u,7,u,a);o[l]=g}let A=Jr.ofPartialColumns($o.ihm_sphere_obj_site,{id:K.range(0,n),entity_id:K.ofStringArray(o),seq_id_begin:K.ofIntArray(r.seq_id_begin),seq_id_end:K.ofIntArray(r.seq_id_end),asym_id:K.ofStringArray(r.chromosome),Cartn_x:K.ofFloatArray(r.x),Cartn_y:K.ofFloatArray(r.y),Cartn_z:K.ofFloatArray(r.z),object_radius:K.ofFloatArray(r.r),rmsf:K.ofConst(0,n,K.Schema.float),model_id:K.ofConst(1,n,K.Schema.int)},n),s=La({entity:i.getEntityTable(),ihm_model_list:Jr.ofPartialColumns($o.ihm_model_list,{model_id:K.ofIntArray([1]),model_name:K.ofStringArray(["G3D Model"])},1),ihm_sphere_obj_site:A}),c=await SA(s,{kind:"g3d",name:"G3D",data:t},e);return T1.set(c.representative,{haplotypes:Object.keys(t.data),haplotype:r.haplotype,resolution:t.resolution,start:r.start,chroms:r.chromosome}),c}function yMe(e){return ve.create("Parse G3D",async t=>Mwt(t,e))}var MY={haplotype:qs.Dynamic(iu("g3d","haplotype",Je.Str),e=>{if(ge.isAtomic(e.element.unit))return"";let t=T1.get(e.element.unit.model);if(!t)return"";let r=e.element.unit.model.coarseHierarchy.spheres.seq_id_begin.value(e.element.element);return t.haplotype[r]||""}),chromosome:qs.Dynamic(iu("g3d","chromosome",Je.Str),e=>{if(ge.isAtomic(e.element.unit))return"";let{asym_id:t}=e.element.unit.model.coarseHierarchy.spheres;return t.value(e.element.element)||""}),region:qs.Dynamic(iu("g3d","region",Je.Num),e=>{if(ge.isAtomic(e.element.unit))return"";let t=T1.get(e.element.unit.model);if(!t)return 0;let r=e.element.unit.model.coarseHierarchy.spheres.seq_id_begin.value(e.element.element);return t.start[r]||0})},T1=Ws.create({name:"g3d_info"});function QMe(e){return ce.struct.generator.atomGroups({"chain-test":ce.core.rel.eq([MY.haplotype.symbol(),e])})}var Cte={label:e=>{if(e.kind!=="element-loci"||pr.isEmpty(e))return;let t=e.elements[0];if(e.elements.length!==1||ge.isAtomic(t.unit))return;let r=T1.get(t.unit.model);if(!r)return;let n=t.unit.elements[Ee.getAt(t.indices,0)],o=t.unit.model.coarseHierarchy.spheres.seq_id_begin.value(n);return`<b>Start:</b> ${r.start[o]} <small>| resolution ${r.resolution}<small>`}};var bMe={label:"G3D",description:"G3D",category:el,binaryExtensions:["g3d"],parse:async(e,t)=>({trajectory:await e.state.data.build().to(t).apply(kwt,{},{state:{isGhost:!0}}).apply(SMe).commit()}),visuals:xMe};async function xMe(e,t){let r=e.builders.structure,n=await r.createModel(t.trajectory);if(!n)return;let o=await r.createStructure(n),i=T1.get(n.data);if(!i)return;let a=e.build().to(o),A=OQ(e,void 0,{type:"cartoon",color:"polymer-index",size:"uniform",sizeParams:{value:.25}});for(let s of i.haplotypes)a.apply(ze.Model.StructureSelectionFromExpression,{expression:QMe(s),label:Ra(s)}).apply(ze.Representation.StructureRepresentation3D,A);await a.commit()}var Px=class extends te.Create({name:"G3D Header",typeClass:"Data"}){},kwt=Yt.BuiltIn({name:"g3d-header-from-file",display:{name:"G3D Header",description:"Parse G3D Header"},from:te.Data.Binary,to:Px})({apply({a:e},t){return ve.create("Parse G3D",async()=>{let r=await Ite(t,e.data);return new Px({header:r,urlOrData:e.data,cache:{}},{label:r.name,description:r.genome})})}}),Hwt=Yt.BuiltIn({name:"g3d-header-from-url",display:{name:"G3D Header",description:"Parse G3D Header"},params:{url:h.Text("")},from:te.Root,to:Px})({apply({params:e},t){return ve.create("Parse G3D",async()=>{let r=await Ite(t,e.url);return new Px({header:r,urlOrData:e.url,cache:{}},{label:r.name,description:r.genome})})}}),SMe=Yt.BuiltIn({name:"g3d-trajecotry",display:{name:"G3D Trajectory",description:"Create G3D Trajectory"},params:e=>{if(!e)return{resolution:h.Numeric(2e5)};let t=e.data.header.resolutions;return{resolution:h.Select(t[t.length-1],t.map(r=>[r,""+r]))}},from:Px,to:te.Molecule.Trajectory})({apply({a:e,params:t},r){return ve.create("G3D Trajectory",async n=>{if(e.data.cache[t.resolution])return new te.Molecule.Trajectory(e.data.cache[t.resolution],{label:e.label,description:e.description});let o=await CMe(r,e.data.header,e.data.urlOrData,t.resolution),i=await yMe(o).runInContext(n);return e.data.cache[t.resolution]=i,new te.Molecule.Trajectory(i,{label:e.label,description:e.description})})}}),EMe=Pa.build({display:{name:"Load Genome 3D (G3D)",description:"Load G3D file from the specified URL."},from:te.Root,params:{url:h.Text("")}})(({params:e,state:t},r)=>ve.create("Genome3D",n=>t.transaction(async()=>{if(e.url.trim().length===0)throw new Error("Specify URL");r.behaviors.layout.leftPanelTabName.next("data");let o=await t.build().toRoot().apply(Hwt,{url:e.url}).apply(SMe).commit();await xMe(r,{trajectory:o})}).runInContext(n))),DMe=er.create({name:"g3d",category:"misc",display:{name:"G3D",description:"G3D Format Support"},ctor:class extends er.Handler{register(){this.ctx.state.data.actions.add(EMe),Bi(MY,e=>Zs.addSymbol(e)),this.ctx.managers.lociLabels.addProvider(Cte)}unregister(){this.ctx.state.data.actions.remove(EMe),Bi(MY,e=>Zs.removeSymbol(e)),this.ctx.managers.lociLabels.removeProvider(Cte)}}});var hte="geo-export",P1=B.fromArray,Vwt=B.sub,_wt=B.dot,Ywt=B.unitY,FC=class e{constructor(){this.options={includeHidden:!1,linesAsTriangles:!1,pointsAsTriangles:!1,primitivesQuality:"auto"}}static getSizeFromTexture(t,r){let n=t.array[r*3],o=t.array[r*3+1],i=t.array[r*3+2];return mp(n,o,i)/pQ}static getSize(t,r,n,o){let i=t.tSize.ref.value,a=0;switch(t.dSizeType.ref.value){case"uniform":a=t.uSize.ref.value;break;case"instance":a=e.getSizeFromTexture(i,r);break;case"group":a=e.getSizeFromTexture(i,n);break;case"groupInstance":let A=t.uGroupCount.ref.value;a=e.getSizeFromTexture(i,r*A+n);break;case"vertex":a=e.getSizeFromTexture(i,o);break;case"vertexInstance":let s=t.uVertexCount.ref.value;a=e.getSizeFromTexture(i,r*s+o);break}return a*t.uSizeFactor.ref.value}static getGroup(t,r){let n=r*4,o=t[n],i=t[n+1],a=t[n+2];return t instanceof Float32Array?mp(o*255+.5,i*255+.5,a*255+.5):mp(o,i,a)}static getInterpolatedColors(t,r){let{values:n,vertexCount:o,vertices:i,colorType:a,stride:A}=r,s=n.uColorGridTransform.ref.value,c=n.uColorGridDim.ref.value,l=n.uColorTexDim.ref.value,u=n.aTransform.ref.value,g=n.uInstanceCount.ref.value,m=O9(t,n.tColorGrid.ref.value).array;return WR({vertexCount:o,instanceCount:g,transformBuffer:u,positionBuffer:i,colorType:a,grid:m,gridDim:c,gridTexDim:l,gridTransform:s,vertexStride:A,colorStride:4,outputStride:3}).array}static getInterpolatedOverpaint(t,r){let{values:n,vertexCount:o,vertices:i,colorType:a,stride:A}=r,s=n.uOverpaintGridTransform.ref.value,c=n.uOverpaintGridDim.ref.value,l=n.uOverpaintTexDim.ref.value,u=n.aTransform.ref.value,g=n.uInstanceCount.ref.value,m=O9(t,n.tOverpaintGrid.ref.value).array;return WR({vertexCount:o,instanceCount:g,transformBuffer:u,positionBuffer:i,colorType:a,grid:m,gridDim:c,gridTexDim:l,gridTransform:s,vertexStride:A,colorStride:4,outputStride:4}).array}static getInterpolatedTransparency(t,r){let{values:n,vertexCount:o,vertices:i,colorType:a,stride:A}=r,s=n.uTransparencyGridTransform.ref.value,c=n.uTransparencyGridDim.ref.value,l=n.uTransparencyTexDim.ref.value,u=n.aTransform.ref.value,g=n.uInstanceCount.ref.value,m=ahe(t,n.tTransparencyGrid.ref.value).array;return WR({vertexCount:o,instanceCount:g,transformBuffer:u,positionBuffer:i,colorType:a,grid:m,gridDim:c,gridTexDim:l,gridTransform:s,vertexStride:A,colorStride:4,outputStride:1,itemOffset:3}).array}static quantizeColors(t,r){if(r<=1024)return;let n=B(),o=B(),i=B(),a=B(),A=new Map,s=[(g,m,p)=>ke.toVec3(n,g[m])[0]-ke.toVec3(n,g[p])[0],(g,m,p)=>ke.toVec3(n,g[m])[1]-ke.toVec3(n,g[p])[1],(g,m,p)=>ke.toVec3(n,g[m])[2]-ke.toVec3(n,g[p])[2]],c=(g,m,p,d)=>{if(m>p)return;if(m===p||d>=10){B.set(a,0,0,0);for(let y=m;y<=p;++y)ke.toVec3(n,g[y]),B.add(a,a,n);B.round(n,B.scale(n,a,1/(p-m+1)));let C=ke.fromArray(n,0);for(let y=m;y<=p;++y)A.set(g[y],C);return}B.set(o,255,255,255),B.set(i,0,0,0);for(let C=m;C<=p;++C){ke.toVec3(n,g[C]);for(let y=0;y<3;++y)B.min(o,o,n),B.max(i,i,n)}let f=0;i[1]-o[1]>i[f]-o[f]&&(f=1),i[2]-o[2]>i[f]-o[f]&&(f=2),kS(g,m,p+1,s[f],Lf);let I=m+p>>1;c(g,m,I,d+1),c(g,I+1,p,d+1)},l=new Set;for(let g=0;g<r;++g)l.add(ke.fromArray(t,g*3));let u=Array.from(l);c(u,0,u.length-1,0);for(let g=0;g<r;++g){let m=A.get(ke.fromArray(t,g*3));ke.toArray(m,t,g*3)}}static getInstance(t,r){let{mesh:n,meshes:o}=t;if(n!==void 0)return n;{let i=o[r];return{vertices:i.vertexBuffer.ref.value,normals:i.normalBuffer.ref.value,indices:i.indexBuffer.ref.value,groups:i.groupBuffer.ref.value,vertexCount:i.vertexCount,drawCount:i.triangleCount*3,vertexMapping:t.vertexMapping}}}static getColor(t,r,n,o){let{values:i,groups:a,instanceIndex:A,isGeoTexture:s,mode:c}=r,l=i.uGroupCount.ref.value,u=i.dColorType.ref.value,g=i.uColor.ref.value,m=i.tColor.ref.value.array,p=i.dOverpaintType.ref.value,d=i.dOverpaint.ref.value,f=i.tOverpaint.ref.value.array,I=i.dUsePalette.ref.value,C=r.vertexCount;r.vertexMapping?(t=r.vertexMapping[t],C=i.uVertexCount.ref.value):c==="lines"&&(t*=2,C*=2);let y=s?e.getGroup(a,t):i.dGeometryType.ref.value==="spheres"?i.tPositionGroup.ref.value.array[t*4+3]:i.aGroup.ref.value[t],Q;switch(u){case"uniform":Q=ke.fromNormalizedArray(g,0);break;case"instance":Q=ke.fromArray(m,A*3);break;case"group":{Q=ke.fromArray(m,y*3);break}case"groupInstance":{Q=ke.fromArray(m,(A*l+y)*3);break}case"vertex":Q=ke.fromArray(m,t*3);break;case"vertexInstance":Q=ke.fromArray(m,(A*C+t)*3);break;case"volume":Q=ke.fromArray(n,t*3);break;case"volumeInstance":Q=ke.fromArray(n,(A*C+t)*3);break;default:throw new Error("Unsupported color type.")}if(I){let E=i.tPalette.ref.value,b=E.array,x=b.length/3,[S,w,R]=ke.toRgb(Q),L=(S*256*256+w*256+R-1)/KA.PaletteScale*(x-1);if(E.filter==="nearest"){let F=Math.round(L);Q=ke.fromArray(b,F*3)}else{let F=Math.floor(L),v=F+1,U=L-F,G=ke.fromArray(b,F*3),N=ke.fromArray(b,v*3);Q=ke.interpolate(G,N,U)}}if(d){let E,b;switch(p){case"groupInstance":{let x=(A*l+y)*4;E=ke.fromArray(f,x),b=f[x+3]/255;break}case"vertexInstance":{let x=(A*C+t)*4;E=ke.fromArray(f,x),b=f[x+3]/255;break}case"volumeInstance":{let x=(A*C+t)*4;E=ke.fromArray(o,x),b=o[x+3]/255;break}default:throw new Error("Unsupported overpaint type.")}E=ke.interpolate(Q,E,b),Q=ke.interpolate(Q,E,b)}return Q}static getTransparency(t,r,n){let{values:o,instanceIndex:i,isGeoTexture:a,mode:A,groups:s}=r,c=o.uGroupCount.ref.value,l=o.dTransparency.ref.value,u=o.tTransparency.ref.value.array,g=o.dTransparencyType.ref.value,m=r.vertexCount;r.vertexMapping?(t=r.vertexMapping[t],m=o.uVertexCount.ref.value):A==="lines"&&(t*=2,m*=2);let p=a?e.getGroup(s,t):o.dGeometryType.ref.value==="spheres"?o.tPositionGroup.ref.value.array[t*4+3]:o.aGroup.ref.value[t],d=0;if(l)switch(g){case"groupInstance":{let f=i*c+p;d=u[f]/255;break}case"vertexInstance":{let f=i*m+t;d=u[f]/255;break}case"volumeInstance":{let f=i*m+t;d=n[f]/255;break}default:throw new Error("Unsupported transparency type.")}return d}async addMesh(t,r,n){let o=t.aPosition.ref.value,i=t.aNormal.ref.value,a=t.aGroup.ref.value,A=At.getOriginalData(t),s,c,l;A?(s=A.indexBuffer,c=A.vertexCount,l=A.triangleCount*3):(s=t.elements.ref.value,c=t.uVertexCount.ref.value,l=t.drawCount.ref.value),await this.addMeshWithColors({mesh:{vertices:o,normals:i,indices:s,groups:a,vertexCount:c,drawCount:l},meshes:void 0,values:t,isGeoTexture:!1,mode:"triangles",webgl:r,ctx:n})}async addLineStrips(t,r,n){let o=t.aStart.ref.value,i=t.aEnd.ref.value,a=t.aGroup.ref.value,A=t.stripCount.ref.value,s=t.stripOffsets.ref.value,c=t.aMapping.ref.value;if(this.options.linesAsTriangles){let l=t.instanceCount.ref.value,u=[],g=6,m=[];for(let p=0;p<l;++p){let d=We.createState(512,256);for(let f=0;f<A;++f){let I=s[f],C=s[f+1],y=[];for(let v=I;v<C;v+=2)c[v*2+1]<0||y.push(v);if(y.length===0)continue;let Q=y.length+1,E=Q-1,b=new Float32Array(Q*3),x=[],S=new Float32Array(Q),w=new Float32Array(Q),R=y[0];Yb(b,o,0,R*3,3),x.push(R);let T=e.getSize(t,p,a[R],R)*.03;S[0]=T,w[0]=T;for(let v=0;v<y.length;++v){let U=y[v];Yb(b,i,(v+1)*3,U*3,3),x.push(U);let G=e.getSize(t,p,a[U],U)*.03;S[v+1]=G,w[v+1]=G}let L=new Float32Array(Q*3),F=new Float32Array(Q*3);if(wU(b,L,F,Q),Bu(d,b,L,F,E,g,S,w,!0,!0,"elliptical"),p===0){for(let v=0;v<=E;++v)for(let U=0;U<g;++U)m.push(x[v]);for(let v=0;v<=g;++v)m.push(x[0]);for(let v=0;v<=g;++v)m.push(x[E])}}u.push(We.getMesh(d))}await this.addMeshWithColors({mesh:void 0,meshes:u,values:t,isGeoTexture:!1,mode:"triangles",webgl:r,ctx:n,vertexMapping:m})}else{let l=0;for(let f=0;f<A;++f){let I=s[f],C=s[f+1];for(let y=I;y<C;y+=2)c[y*2+1]<0||l++}let u=l*2,g=l,m=new Float32Array(u*3),p=[],d=0;for(let f=0;f<A;++f){let I=s[f],C=s[f+1];for(let y=I;y<C;y+=2)c[y*2+1]<0||(Yb(m,o,d*3,y*3,3),p[d]=y,d++,Yb(m,i,d*3,y*3,3),p[d]=y,d++)}await this.addMeshWithColors({mesh:{vertices:m,normals:void 0,indices:void 0,groups:a,vertexCount:u,drawCount:g,vertexMapping:p},meshes:void 0,values:t,isGeoTexture:!1,mode:"lines",webgl:r,ctx:n})}}async addLineSegments(t,r,n){let o=t.aStart.ref.value,i=t.aEnd.ref.value,a=t.aGroup.ref.value,A=t.uVertexCount.ref.value/4*2,s=t.drawCount.ref.value/6;if(this.options.linesAsTriangles){let c=B(),l=B(),u=t.instanceCount.ref.value,g=[],m=6,p=!0,d=!0,f=[];for(let I=0;I<u;++I){let C=We.createState(512,256);for(let y=0,Q=A*2;y<Q;y+=4){P1(c,o,y*3),P1(l,i,y*3);let E=a[y/4],b=e.getSize(t,I,E,y/4)*.03,x={radiusTop:b,radiusBottom:b,topCap:p,bottomCap:d,radialSegments:m},S=C.vertices.elementCount;if(Sn(C,c,l,1,x),I===0)for(let w=S;w<C.vertices.elementCount;++w)f.push(y)}g.push(We.getMesh(C))}await this.addMeshWithColors({mesh:void 0,meshes:g,values:t,isGeoTexture:!1,mode:"triangles",webgl:r,ctx:n,vertexMapping:f})}else{let c=A/2,l=new Float32Array(c*2*3);for(let u=0;u<c;++u)Yb(l,o,u*6,u*4*3,3),Yb(l,i,u*6+3,u*4*3,3);await this.addMeshWithColors({mesh:{vertices:l,normals:void 0,indices:void 0,groups:a,vertexCount:A,drawCount:s},meshes:void 0,values:t,isGeoTexture:!1,mode:"lines",webgl:r,ctx:n})}}async addLines(t,r,n){t.stripCount.ref.value!==0?await this.addLineStrips(t,r,n):await this.addLineSegments(t,r,n)}async addPoints(t,r,n){let o=t.aPosition.ref.value,i=t.aGroup.ref.value,a=t.uVertexCount.ref.value,A=t.drawCount.ref.value;if(this.options.pointsAsTriangles){let s=B(),c=t.instanceCount.ref.value,l=[],u=0,g=[];for(let m=0;m<c;++m){let p=We.createState(512,256);for(let d=0;d<a;++d){P1(s,o,d*3);let f=i[d],I=e.getSize(t,m,f,d)*.03,C=p.vertices.elementCount;if(cn(p,s,I,u),m===0)for(let y=C;y<p.vertices.elementCount;++y)g.push(d)}l.push(We.getMesh(p))}await this.addMeshWithColors({mesh:void 0,meshes:l,values:t,isGeoTexture:!1,mode:"triangles",webgl:r,ctx:n,vertexMapping:g})}else await this.addMeshWithColors({mesh:{vertices:o,normals:void 0,indices:void 0,groups:i,vertexCount:a,drawCount:A},meshes:void 0,values:t,isGeoTexture:!1,mode:"points",webgl:r,ctx:n})}async addSpheres(t,r,n){let o=B(),i=t.centerBuffer.ref.value,a=t.groupBuffer.ref.value,A=t.instanceCount.ref.value,s=t.uVertexCount.ref.value,c=[],l=s/6*A,u;switch(this.options.primitivesQuality){case"auto":l<2e3?u=3:l<2e4?u=2:u=1;break;case"high":u=3;break;case"medium":u=2;break;case"low":u=1;break;default:Or(this.options.primitivesQuality)}let g=[];for(let m=0;m<A;++m){let p=We.createState(512,256);for(let d=0;d<l;++d){P1(o,i,d*3);let f=a[d],I=e.getSize(t,m,f,d),C=p.vertices.elementCount;if(cn(p,o,I,u),m===0)for(let y=C;y<p.vertices.elementCount;++y)g.push(d)}c.push(We.getMesh(p))}await this.addMeshWithColors({mesh:void 0,meshes:c,values:t,isGeoTexture:!1,mode:"triangles",webgl:r,ctx:n,vertexMapping:g})}async addCylinders(t,r,n){let o=B(),i=B(),a=B(),A=t.aStart.ref.value,s=t.aEnd.ref.value,c=t.aScale.ref.value,l=t.aCap.ref.value,u=t.aGroup.ref.value,g=t.instanceCount.ref.value,m=t.uVertexCount.ref.value,p=[],d=m/6*g,f;switch(this.options.primitivesQuality){case"auto":d<2e3?f=36:d<2e4?f=24:f=12;break;case"high":f=36;break;case"medium":f=24;break;case"low":f=12;break;default:Or(this.options.primitivesQuality)}let I=[];for(let C=0;C<g;++C){let y=We.createState(512,256);for(let Q=0;Q<m;Q+=6){P1(o,A,Q*3),P1(i,s,Q*3),Vwt(a,i,o);let E=u[Q],b=e.getSize(t,C,E,Q)*c[Q],x=l[Q],S=x===1||x===3,w=x>=2;_wt(Ywt,a)>0&&([w,S]=[S,w]);let R={radiusTop:b,radiusBottom:b,topCap:S,bottomCap:w,radialSegments:f},T=y.vertices.elementCount;if(Sn(y,o,i,1,R),C===0)for(let L=T;L<y.vertices.elementCount;++L)I.push(Q)}p.push(We.getMesh(y))}await this.addMeshWithColors({mesh:void 0,meshes:p,values:t,isGeoTexture:!1,mode:"triangles",webgl:r,ctx:n,vertexMapping:I})}async addTextureMesh(t,r,n){r.namedFramebuffers[hte]||(r.namedFramebuffers[hte]=r.resources.framebuffer());let o=r.namedFramebuffers[hte],[i,a]=t.uGeoTexDim.ref.value,A=new Float32Array(i*a*4),s=new Float32Array(i*a*4),c=r.isWebGL2?new Uint8Array(i*a*4):new Float32Array(i*a*4);o.bind(),t.tPosition.ref.value.attachFramebuffer(o,0),r.readPixels(0,0,i,a,A),t.tNormal.ref.value.attachFramebuffer(o,0),r.readPixels(0,0,i,a,s),t.tGroup.ref.value.attachFramebuffer(o,0),r.readPixels(0,0,i,a,c);let l=t.uVertexCount.ref.value,u=t.drawCount.ref.value;await this.addMeshWithColors({mesh:{vertices:A,normals:s,indices:void 0,groups:c,vertexCount:l,drawCount:u},meshes:void 0,values:t,isGeoTexture:!0,mode:"triangles",webgl:r,ctx:n})}add(t,r,n){if(!(!t.state.visible&&!this.options.includeHidden)&&t.values.drawCount.ref.value!==0&&t.values.instanceCount.ref.value!==0)switch(t.type){case"mesh":return this.addMesh(t.values,r,n);case"lines":return this.addLines(t.values,r,n);case"points":return this.addPoints(t.values,r,n);case"spheres":return this.addSpheres(t.values,r,n);case"cylinders":return this.addCylinders(t.values,r,n);case"texture-mesh":return this.addTextureMesh(t.values,r,n)}}};var vMe=B.fromArray,Owt=B.normalize,FMe=B.toArray,Jwt=5121,zwt=5125,wMe=5126,yte=34962,Kwt=34963,jwt=1179937895,Wwt=1313821514,Xwt=5130562,Zwt=32,qwt=0;function $wt(e){switch(e){case"points":return 0;case"lines":return 1;case"triangles":return 4;default:Or(e)}}var kY=class e extends FC{constructor(r){super();this.fileExtension="glb";this.nodes=[];this.meshes=[];this.materials=[];this.materialMap=new Map;this.accessors=[];this.bufferViews=[];this.binaryBuffer=[];this.byteOffset=0;let n=B();B.add(n,r.min,r.max),B.scale(n,n,-.5),this.centerTransform=Y.fromTranslation(Y(),n)}static vec3MinMax(r){let n=[1/0,1/0,1/0],o=[-1/0,-1/0,-1/0];for(let i=0,a=r.length;i<a;i+=3)for(let A=0;A<3;++A)n[A]=Math.min(r[i+A],n[A]),o[A]=Math.max(r[i+A],o[A]);return[n,o]}addBuffer(r,n,o,i,a,A,s,c){this.binaryBuffer.push(r);let l=this.bufferViews.length;this.bufferViews.push({buffer:0,byteOffset:this.byteOffset,byteLength:r.byteLength,target:a}),this.byteOffset+=r.byteLength;let u=this.accessors.length;return this.accessors.push({bufferView:l,byteOffset:0,componentType:n,count:i,type:o,min:A,max:s,normalized:c}),u}addGeometryBuffers(r,n,o,i,a,A){let s=B(),c=A?4:3,l=new Float32Array(i*3),u,g;for(let C=0;C<i;++C)vMe(s,r,C*c),FMe(s,l,C*3);if(n){u=new Float32Array(i*3);for(let C=0;C<i;++C)vMe(s,n,C*c),Owt(s,s),FMe(s,u,C*3)}!A&&o&&(g=o.slice(0,a));let[m,p]=e.vec3MinMax(l),d=l.buffer,f=u?.buffer,I=A||!g?void 0:g.buffer;return p2||(d=t0(new Uint8Array(d),4),f&&(f=t0(new Uint8Array(f),4)),A||(I=t0(new Uint8Array(I),4))),{vertexAccessorIndex:this.addBuffer(d,wMe,"VEC3",i,yte,m,p),normalAccessorIndex:f?this.addBuffer(f,wMe,"VEC3",i,yte):void 0,indexAccessorIndex:A||!I?void 0:this.addBuffer(I,zwt,"SCALAR",a,Kwt)}}addColorBuffer(r,n,o,i){let{values:a,vertexCount:A}=r,s=a.uAlpha.ref.value,c=new Uint8Array(A*4);for(let u=0;u<A;++u){let g=e.getColor(u,r,n,o),m=e.getTransparency(u,r,i),p=s*(1-m);g=ke.sRGBToLinear(g),ke.toArray(g,c,u*4),c[u*4+3]=Math.round(p*255)}let l=c.buffer;return p2||(l=t0(new Uint8Array(l),4)),this.addBuffer(l,Jwt,"VEC4",A,yte,void 0,void 0,!0)}addMaterial(r,n,o,i,a){let A=`${r}|${n}|${o}|${i}`;return this.materialMap.has(A)||(this.materialMap.set(A,this.materials.length),this.materials.push({pbrMetallicRoughness:{baseColorFactor:[1,1,1,1],metallicFactor:r,roughnessFactor:n},emissiveFactor:[o,o,o],doubleSided:i,alphaMode:a?"BLEND":"OPAQUE"})),this.materialMap.get(A)}async addMeshWithColors(r){let{mesh:n,values:o,isGeoTexture:i,mode:a,webgl:A,ctx:s}=r,c=Y(),l=o.dColorType.ref.value,u=o.dOverpaintType.ref.value,g=o.dTransparencyType.ref.value,m=o.dTransparency.ref.value,p=o.aTransform.ref.value,d=o.uInstanceCount.ref.value,f=o.uMetalness.ref.value,I=o.uRoughness.ref.value,C=o.uEmissive.ref.value,y=o.uDoubleSided?.ref.value||o.hasReflection.ref.value,Q=o.uAlpha.ref.value<1,E=this.addMaterial(f,I,C,y,Q),b;if(A&&n&&(l==="volume"||l==="volumeInstance")){let G=i?4:3;b=e.getInterpolatedColors(A,{vertices:n.vertices,vertexCount:n.vertexCount,values:o,stride:G,colorType:l})}let x;if(A&&n&&u==="volumeInstance"){let G=i?4:3;x=e.getInterpolatedOverpaint(A,{vertices:n.vertices,vertexCount:n.vertexCount,values:o,stride:G,colorType:u})}let S;if(A&&n&&g==="volumeInstance"){let G=i?4:3;S=e.getInterpolatedTransparency(A,{vertices:n.vertices,vertexCount:n.vertexCount,values:o,stride:G,colorType:g})}let w=n!==void 0,R=w&&l!=="instance"&&!l.endsWith("Instance")&&!m,T,L,F,v,U;await s.update({isIndeterminate:!1,current:0,max:d});for(let G=0;G<d;++G){if(s.shouldUpdate&&await s.update({current:G+1}),G===0||!w||!R){let{vertices:k,normals:J,indices:H,groups:z,vertexCount:_,drawCount:M,vertexMapping:q}=e.getInstance(r,G);if(G===0||!w){let ne=this.addGeometryBuffers(k,J,H,_,M,i);T=ne.vertexAccessorIndex,L=ne.normalAccessorIndex,F=ne.indexAccessorIndex}(G===0||!R)&&(v=this.addColorBuffer({values:o,groups:z,vertexCount:_,instanceIndex:G,isGeoTexture:i,mode:a,vertexMapping:q},b,x,S)),U=this.meshes.length,this.meshes.push({primitives:[{attributes:{POSITION:T,NORMAL:L,COLOR_0:v},indices:F,material:E,mode:$wt(a)}]})}Y.fromArray(c,p,G*16),Y.mul(c,this.centerTransform,c);let N={mesh:U,matrix:c.slice()};this.nodes.push(N)}}async getData(){let r=this.byteOffset,n={asset:{version:"2.0",generator:`Mol* ${kp}`},scenes:[{nodes:QA(new Array(this.nodes.length))}],nodes:this.nodes,meshes:this.meshes,buffers:[{byteLength:r}],bufferViews:this.bufferViews,accessors:this.accessors,materials:this.materials},o=(I,C,y,Q)=>{let E=null;if(y%4!==0){let w=4-y%4;y+=w,E=new Uint8Array(w),E.fill(Q)}let b=new ArrayBuffer(8),x=new DataView(b);x.setUint32(0,y,!0),x.setUint32(4,I,!0);let S=[b,...C];return E&&S.push(E.buffer),[S,8+y]},i=JSON.stringify(n),a=new Uint8Array(i.length);Dh(a,i);let[A,s]=o(Wwt,[a.buffer],a.length,Zwt),[c,l]=o(Xwt,this.binaryBuffer,r,qwt),u=12+s+l,g=new ArrayBuffer(12),m=new DataView(g);m.setUint32(0,jwt,!0),m.setUint32(4,2,!0),m.setUint32(8,u,!0);let p=[g,...A,...c],d=new Uint8Array(u),f=0;for(let I of p)d.set(new Uint8Array(I),f),f+=I.byteLength;return{glb:d}}async getBlob(r){return new Blob([(await this.getData()).glb],{type:"model/gltf-binary"})}};var RMe=B.fromArray,e2t=B.transformMat4,t2t=B.transformMat3,r2t=Ht.directionTransform,HY=class e extends FC{constructor(r,n){super();this.filename=r;this.fileExtension="zip";this.obj=tr.create();this.mtl=tr.create();this.vertexOffset=0;this.materialSet=new Set;tr.writeSafe(this.obj,`mtllib ${r}.mtl
|
|
`);let o=B();B.add(o,n.min,n.max),B.scale(o,o,-.5),this.centerTransform=Y.fromTranslation(Y(),o)}updateMaterial(r,n){if(this.currentColor===r&&this.currentAlpha===n)return;this.currentColor=r,this.currentAlpha=n;let o=ke.toHexString(r)+n;if(tr.writeSafe(this.obj,`usemtl ${o}`),tr.newline(this.obj),!this.materialSet.has(o)){this.materialSet.add(o);let[i,a,A]=ke.toRgbNormalized(r).map(c=>Math.round(c*1e3)/1e3),s=this.mtl;tr.writeSafe(s,`newmtl ${o}
|
|
`),tr.writeSafe(s,`illum 2
|
|
`),tr.writeSafe(s,`Ns 163
|
|
`),tr.writeSafe(s,`Ni 0.001
|
|
`),tr.writeSafe(s,`Ka 0 0 0
|
|
`),tr.writeSafe(s,"Kd "),tr.writeFloat(s,i,1e3),tr.whitespace1(s),tr.writeFloat(s,a,1e3),tr.whitespace1(s),tr.writeFloat(s,A,1e3),tr.newline(s),tr.writeSafe(s,`Ks 0.25 0.25 0.25
|
|
`),tr.writeSafe(s,"d "),tr.writeFloat(s,n,1e3),tr.newline(s)}}async addMeshWithColors(r){let{mesh:n,values:o,isGeoTexture:i,mode:a,webgl:A,ctx:s}=r;if(a!=="triangles")return;let c=this.obj,l=Y(),u=Ht(),g=B(),m=i?4:3,p=o.dColorType.ref.value,d=o.dOverpaintType.ref.value,f=o.dTransparencyType.ref.value,I=o.uAlpha.ref.value,C=o.aTransform.ref.value,y=o.uInstanceCount.ref.value,Q;A&&n&&(p==="volume"||p==="volumeInstance")&&(Q=e.getInterpolatedColors(A,{vertices:n.vertices,vertexCount:n.vertexCount,values:o,stride:m,colorType:p}));let E;A&&n&&d==="volumeInstance"&&(E=e.getInterpolatedOverpaint(A,{vertices:n.vertices,vertexCount:n.vertexCount,values:o,stride:m,colorType:d}));let b;if(A&&n&&f==="volumeInstance"){let x=i?4:3;b=e.getInterpolatedTransparency(A,{vertices:n.vertices,vertexCount:n.vertexCount,values:o,stride:x,colorType:f})}await s.update({isIndeterminate:!1,current:0,max:y});for(let x=0;x<y;++x){s.shouldUpdate&&await s.update({current:x+1});let{vertices:S,normals:w,indices:R,groups:T,vertexCount:L,drawCount:F,vertexMapping:v}=e.getInstance(r,x);Y.fromArray(l,C,x*16),Y.mul(l,this.centerTransform,l),r2t(u,l);for(let N=0;N<L;++N)e2t(g,RMe(g,S,N*m),l),tr.writeSafe(c,"v "),tr.writeFloat(c,g[0],1e3),tr.whitespace1(c),tr.writeFloat(c,g[1],1e3),tr.whitespace1(c),tr.writeFloat(c,g[2],1e3),tr.newline(c);for(let N=0;N<L;++N)t2t(g,RMe(g,w,N*m),u),tr.writeSafe(c,"vn "),tr.writeFloat(c,g[0],100),tr.whitespace1(c),tr.writeFloat(c,g[1],100),tr.whitespace1(c),tr.writeFloat(c,g[2],100),tr.newline(c);let U={values:o,groups:T,vertexCount:L,instanceIndex:x,isGeoTexture:i,mode:a,vertexMapping:v},G=new Uint8Array(F*3);for(let N=0;N<F;N+=3){let k=i?N:R[N],J=e.getColor(k,U,Q,E);ke.toArray(J,G,N)}e.quantizeColors(G,L);for(let N=0;N<F;N+=3){let k=ke.fromArray(G,N),J=e.getTransparency(N,U,b),H=Math.round(I*(1-J)*10)/10;this.updateMaterial(k,H);let z=this.vertexOffset+(i?N:R[N])+1,_=this.vertexOffset+(i?N+1:R[N+1])+1,M=this.vertexOffset+(i?N+2:R[N+2])+1;tr.writeSafe(c,"f "),tr.writeInteger(c,z),tr.writeSafe(c,"//"),tr.writeIntegerAndSpace(c,z),tr.writeInteger(c,_),tr.writeSafe(c,"//"),tr.writeIntegerAndSpace(c,_),tr.writeInteger(c,M),tr.writeSafe(c,"//"),tr.writeInteger(c,M),tr.newline(c)}this.vertexOffset+=L}}async getData(){return{obj:tr.getString(this.obj),mtl:tr.getString(this.mtl)}}async getBlob(r){let{obj:n,mtl:o}=await this.getData(),i=new Uint8Array(n.length);Dh(i,n);let a=new Uint8Array(o.length);Dh(a,o);let A={[this.filename+".obj"]:i,[this.filename+".mtl"]:a};return new Blob([await s0(r,A)],{type:"application/zip"})}};var VY=B.fromArray,n2t=B.transformMat4,o2t=B.triangleNormal,i2t=B.toArray,_Y=class e extends FC{constructor(r){super();this.fileExtension="stl";this.triangleBuffers=[];this.triangleCount=0;let n=B();B.add(n,r.min,r.max),B.scale(n,n,-.5),this.centerTransform=Y.fromTranslation(Y(),n)}async addMeshWithColors(r){let{values:n,isGeoTexture:o,mode:i,ctx:a}=r;if(i!=="triangles")return;let A=Y(),s=B(),c=B(),l=B(),u=B(),g=o?4:3,m=n.aTransform.ref.value,p=n.uInstanceCount.ref.value;for(let d=0;d<p;++d){a.shouldUpdate&&await a.update({current:d+1});let{vertices:f,indices:I,vertexCount:C,drawCount:y}=e.getInstance(r,d);Y.fromArray(A,m,d*16),Y.mul(A,this.centerTransform,A);let Q=new Float32Array(C*3);for(let x=0;x<C;++x)n2t(s,VY(s,f,x*g),A),i2t(s,Q,x*3);let E=new ArrayBuffer(50*y),b=new DataView(E);for(let x=0;x<y;x+=3){VY(c,Q,(o?x:I[x])*3),VY(l,Q,(o?x+1:I[x+1])*3),VY(u,Q,(o?x+2:I[x+2])*3),o2t(s,c,l,u);let S=50*x;b.setFloat32(S,s[0],!0),b.setFloat32(S+4,s[1],!0),b.setFloat32(S+8,s[2],!0),b.setFloat32(S+12,c[0],!0),b.setFloat32(S+16,c[1],!0),b.setFloat32(S+20,c[2],!0),b.setFloat32(S+24,l[0],!0),b.setFloat32(S+28,l[1],!0),b.setFloat32(S+32,l[2],!0),b.setFloat32(S+36,u[0],!0),b.setFloat32(S+40,u[1],!0),b.setFloat32(S+44,u[2],!0)}this.triangleBuffers.push(E),this.triangleCount+=y}}async getData(){let r=new Uint8Array(84+50*this.triangleCount);Dh(r,`Exported from Mol* ${kp}`),new DataView(r.buffer).setUint32(80,this.triangleCount,!0);let o=84;for(let i of this.triangleBuffers)r.set(new Uint8Array(i),o),o+=i.byteLength;return{stl:r}}async getBlob(r){return new Blob([(await this.getData()).stl],{type:"model/stl"})}};var UMe=B.fromArray,a2t=B.transformMat4,A2t=B.transformMat3,s2t=Ht.directionTransform,YY=class e extends FC{constructor(r,n){super();this.fileExtension="usdz";this.meshes=[];this.materials=[];this.materialMap=new Map;let o=Y();Y.fromUniformScaling(o,Math.min(1/(n*2),1)),Y.translate(o,o,B.create(-(r.min[0]+r.max[0])/2,-r.min[1],-(r.min[2]+r.max[2])/2)),this.centerTransform=o}addMaterial(r,n,o,i){let a=`${r}|${n}|${o}|${i}`;if(this.materialMap.has(a))return this.materialMap.get(a);let A=this.materialMap.size;this.materialMap.set(a,A);let[s,c,l]=ke.toRgbNormalized(r).map(u=>Math.round(u*1e3)/1e3);return this.materials.push(`
|
|
def Material "material${A}"
|
|
{
|
|
token outputs:surface.connect = </material${A}/shader.outputs:surface>
|
|
def Shader "shader"
|
|
{
|
|
uniform token info:id = "UsdPreviewSurface"
|
|
color3f inputs:diffuseColor = (${s},${c},${l})
|
|
float inputs:opacity = ${n}
|
|
float inputs:metallic = ${o}
|
|
float inputs:roughness = ${i}
|
|
token outputs:surface
|
|
}
|
|
}
|
|
`),A}async addMeshWithColors(r){let{mesh:n,values:o,isGeoTexture:i,mode:a,webgl:A,ctx:s}=r;if(a!=="triangles")return;let c=Y(),l=Ht(),u=B(),g=i?4:3,m=o.dColorType.ref.value,p=o.dOverpaintType.ref.value,d=o.dTransparencyType.ref.value,f=o.uAlpha.ref.value,I=o.aTransform.ref.value,C=o.uInstanceCount.ref.value,y=o.uMetalness.ref.value,Q=o.uRoughness.ref.value,E;A&&n&&(m==="volume"||m==="volumeInstance")&&(E=e.getInterpolatedColors(A,{vertices:n.vertices,vertexCount:n.vertexCount,values:o,stride:g,colorType:m}));let b;if(A&&n&&p==="volumeInstance"){let S=i?4:3;b=e.getInterpolatedOverpaint(A,{vertices:n.vertices,vertexCount:n.vertexCount,values:o,stride:S,colorType:p})}let x;if(A&&n&&d==="volumeInstance"){let S=i?4:3;x=e.getInterpolatedTransparency(A,{vertices:n.vertices,vertexCount:n.vertexCount,values:o,stride:S,colorType:d})}await s.update({isIndeterminate:!1,current:0,max:C});for(let S=0;S<C;++S){s.shouldUpdate&&await s.update({current:S+1});let{vertices:w,normals:R,indices:T,groups:L,vertexCount:F,drawCount:v,vertexMapping:U}=e.getInstance(r,S);Y.fromArray(c,I,S*16),Y.mul(c,this.centerTransform,c),s2t(l,c);let G=tr.create(),N=tr.create(),k=tr.create();for(let M=0;M<F;++M)a2t(u,UMe(u,w,M*g),c),tr.writeSafe(G,M===0?"(":",("),tr.writeFloat(G,u[0],1e4),tr.writeSafe(G,","),tr.writeFloat(G,u[1],1e4),tr.writeSafe(G,","),tr.writeFloat(G,u[2],1e4),tr.writeSafe(G,")");for(let M=0;M<F;++M)A2t(u,UMe(u,R,M*g),l),tr.writeSafe(N,M===0?"(":",("),tr.writeFloat(N,u[0],100),tr.writeSafe(N,","),tr.writeFloat(N,u[1],100),tr.writeSafe(N,","),tr.writeFloat(N,u[2],100),tr.writeSafe(N,")");let J={values:o,groups:L,vertexCount:F,instanceIndex:S,isGeoTexture:i,mode:a,vertexMapping:U};for(let M=0;M<v;++M){let q=i?M:T[M];M>0&&tr.writeSafe(k,","),tr.writeInteger(k,q)}let H=new Uint8Array(v*3);for(let M=0;M<v;M+=3){let q=i?M:T[M],ne=e.getColor(q,J,E,b);ke.toArray(ne,H,M)}e.quantizeColors(H,F);let z=new Map;for(let M=0;M<v;M+=3){let q=ke.fromArray(H,M),ne=e.getTransparency(M,J,x),oe=Math.round(f*(1-ne)*10)/10,ae=this.addMaterial(q,oe,y,Q),me=z.get(ae);me===void 0&&(me=[],z.set(ae,me)),me.push(M/3)}let _;if(z.size===1)_=`rel material:binding = </material${z.keys().next().value}>`;else{let M=[];z.forEach((q,ne)=>{M.push(`
|
|
def GeomSubset "g${ne}"
|
|
{
|
|
uniform token elementType = "face"
|
|
uniform token familyName = "materialBind"
|
|
int[] indices = [${q.join(",")}]
|
|
rel material:binding = </material${ne}>
|
|
}
|
|
`)}),_=M.join("")}this.meshes.push(`
|
|
def Mesh "mesh${this.meshes.length}"
|
|
{
|
|
int[] faceVertexCounts = [${new Array(v/3).fill(3).join(",")}]
|
|
int[] faceVertexIndices = [${tr.getString(k)}]
|
|
point3f[] points = [${tr.getString(G)}]
|
|
normal3f[] primvars:normals = [${tr.getString(N)}] (
|
|
interpolation = "vertex"
|
|
)
|
|
uniform token subdivisionScheme = "none"
|
|
${_}
|
|
}
|
|
`)}}async getData(r){let o=[`#usda 1.0
|
|
(
|
|
customLayerData = {
|
|
string creator = "Mol* ${kp}"
|
|
}
|
|
metersPerUnit = 1
|
|
)
|
|
`,...this.materials,...this.meshes].join(""),i=new Uint8Array(o.length);return Dh(i,o),{usdz:await s0(r,{"model.usda":i},!0)}}async getBlob(r){let{usdz:n}=await this.getData(r);return new Blob([n],{type:"model/vnd.usdz+zip"})}};var Qte={format:h.Select("glb",[["glb","glTF 2.0 Binary (.glb)"],["stl","Stl (.stl)"],["obj","Wavefront (.obj)"],["usdz","Universal Scene Description (.usdz)"]])},OY=class extends du{constructor(r){super();this.plugin=r;this.behaviors={params:this.ev.behavior(h.getDefaultValues(Qte))}}getFilename(){let r=this.plugin.state.data.select(fr.Generators.rootsOfType(te.Molecule.Model)).map(i=>i.obj.data),n=new Set;return r.forEach(i=>n.add(i.entryId.toUpperCase())),`${lo.toArray(n).join("-")||"molstar-model"}`}exportGeometry(){let r=ve.create("Export Geometry",async n=>{try{let o=this.plugin.canvas3d?.getRenderObjects(),i=this.getFilename(),a=this.plugin.canvas3d?.boundingSphereVisible,A=Ct.fromSphere3D(Ct(),a),s;switch(this.behaviors.params.value.format){case"glb":s=new kY(A);break;case"obj":s=new HY(i,A);break;case"stl":s=new _Y(A);break;case"usdz":s=new YY(A,a.radius);break;default:throw new Error("Unsupported format.")}for(let l=0,u=o.length;l<u;++l)await n.update({message:`Exporting object ${l}/${u}`}),await s.add(o[l],this.plugin.canvas3d?.webgl,n);return{blob:await s.getBlob(n),filename:i+"."+s.fileExtension}}catch(o){throw this.plugin.log.error("Error during geometry export"),o}});return this.plugin.runTask(r,{useOverlay:!0})}};var OE=kt(Qr()),JY=class extends ma{constructor(){super(...arguments);this.save=async()=>{try{this.setState({busy:!0});let r=await this.controls.exportGeometry();uB(r.blob,r.filename)}catch(r){console.error(r)}finally{this.setState({busy:!1})}};this.viewInAR=async()=>{try{this.setState({busy:!0});let r=await this.controls.exportGeometry(),n=document.createElement("a");n.rel="ar",n.href=URL.createObjectURL(r.blob),n.appendChild(document.createElement("img")),setTimeout(()=>URL.revokeObjectURL(n.href),4e4),setTimeout(()=>n.dispatchEvent(new MouseEvent("click")))}catch(r){console.error(r)}finally{this.setState({busy:!1})}}}get controls(){return this._controls||(this._controls=new OY(this.plugin))}defaultState(){return{header:"Export Geometry",isCollapsed:!0,brand:{accent:"cyan",svg:aGe}}}renderControls(){this.isARSupported===void 0&&(this.isARSupported=!!document.createElement("a").relList?.supports?.("ar"));let r=this.controls;return(0,OE.jsxs)(OE.Fragment,{children:[(0,OE.jsx)(Mn,{params:Qte,values:r.behaviors.params.value,onChangeValues:n=>r.behaviors.params.next(n),isDisabled:this.state.busy}),(0,OE.jsx)(hr,{icon:yB,onClick:this.save,style:{marginTop:1},disabled:this.state.busy||!this.plugin.canvas3d?.reprCount.value,children:"Save"}),this.isARSupported&&r.behaviors.params.value.format==="usdz"&&(0,OE.jsx)(hr,{icon:iGe,onClick:this.viewInAR,style:{marginTop:1},disabled:this.state.busy||!this.plugin.canvas3d?.reprCount.value,children:"View in AR"})]})}componentDidMount(){if(!this.plugin.canvas3d)return;let r=ml(this.controls.behaviors.params,this.plugin.canvas3d.reprCount);this.subscribe(r,()=>{this.state.isCollapsed||this.forceUpdate()})}componentWillUnmount(){super.componentWillUnmount(),this._controls?.dispose(),this._controls=void 0}};var LMe=er.create({name:"extension-geo-export",category:"misc",display:{name:"Geometry Export"},ctor:class extends er.Handler{register(){this.ctx.customStructureControls.set("geo-export",JY)}update(){return!1}unregister(){this.ctx.customStructureControls.delete("geo-export")}},params:()=>({})});var ks;(s=>{let e={value:{local:[],localMap:new Map,localMetrics:new Map}};function t(c,l){if(!c||!sn.is(c.sourceData))return!1;let{db:u}=c.sourceData.data,g=u.ma_qa_metric.id.isDefined&&u.ma_qa_metric_local.ordinal_id.isDefined;if(l&&g){let m=l.toLowerCase();for(let p=0,d=u.ma_qa_metric._rowCount;p<d;p++){if(u.ma_qa_metric.mode.value(p)!=="local")continue;if(u.ma_qa_metric.name.value(p).toLowerCase().includes(m))return!0}return!1}else return g}s.isApplicable=t;function r(c,l){if(!c)return h.Select(void 0,[],{label:"Metric",isHidden:!0});let u=Og.get(c).value?.local;if(!u)return h.Select(void 0,[],{label:"Metric",isHidden:!0});let g=u.filter(m=>m.kind===l).map(m=>[m.id,`${m.name} (${m.type})`]);return h.Select(g[0]?.[0],g,{label:"Metric "})}s.getLocalOptions=r;async function n(c,l,u){if(!l||!sn.is(l.sourceData))return e;let{ma_qa_metric:g,ma_qa_metric_local:m}=l.sourceData.data.db,{model_id:p,label_asym_id:d,label_seq_id:f,metric_id:I,metric_value:C}=m,{index:y}=l.atomicHierarchy,Q=[],E=new Map,b=new Map,x=new Map;for(let w=0,R=g._rowCount;w<R;w++){if(g.mode.value(w)!=="local")continue;let T=g.id.value(w),L=g.name.value(w),F=g.type.value(w),v=new Map,U=F.toLowerCase().includes("plddt"),G=F.replace(/\s/g,"").includes("[0,1]"),N;G?N=[0,1]:U&&(N=[0,100]);let k,J=L.toLowerCase();J.includes("plddt")?k="pLDDT":J.includes("qmean")&&(k="qmean"),!k&&U&&(k="pLDDT"),!k&&G&&(k="qmean");let H={id:T,kind:k,type:F,name:L,domain:N,valueRange:[Number.MAX_VALUE,-Number.MAX_VALUE],values:v};if(E.set(T,H),Q.push(H),b.has(L)){console.warn(`local ma_qa_metric with name '${L}' already added`);continue}b.set(L,v),x.set(T,L)}let S={label_entity_id:"",label_asym_id:"",label_seq_id:0,pdbx_PDB_ins_code:void 0};for(let w=0,R=m._rowCount;w<R;w++){if(p.value(w)!==l.modelNum)continue;let T=d.value(w),L=y.findEntity(T);S.label_entity_id=l.entities.data.id.value(L),S.label_asym_id=T,S.label_seq_id=f.value(w);let F=y.findResidueLabel(S);if(F>=0){let v=E.get(I.value(w));if(!v)continue;let U=C.value(w),G=v.valueRange;U<G[0]&&(G[0]=U),U>G[1]&&(G[1]=U),v.values.set(F,U)}}return{value:{local:Array.from(E.values()),localMap:E,pLDDT:Q.find(w=>w.kind==="pLDDT")?.values,qmean:Q.find(w=>w.kind==="qmean")?.values,localMetrics:b}}}s.obtain=n;let o={ma_qa_metric:Nn.ma_qa_metric,ma_qa_metric_local_pairwise:Nn.ma_qa_metric_local_pairwise};function i(c){let{ma_qa_metric:l,ma_qa_metric_local_pairwise:u}=Oc(o,c),g=[];if(u._rowCount===0)return g;for(let m=0,p=l._rowCount;m<p;m++){if(l.mode.value(m)!=="local-pairwise")continue;let d=l.id.value(m),f=l.name.value(m);f.toLowerCase().includes("pae")&&g.push({id:d,name:f})}return g}s.findModelArchiveCIFPAEMetrics=i;function a(c,l,u){let g=Oc(o,l);if(!g.ma_qa_metric_local_pairwise._rowCount)return;let{ma_qa_metric:m,ma_qa_metric_local_pairwise:p}=g,{model_id:d,label_asym_id_1:f,label_seq_id_1:I,label_asym_id_2:C,label_seq_id_2:y,metric_id:Q,metric_value:E}=g.ma_qa_metric_local_pairwise,{index:b}=c.atomicHierarchy,x;for(let L=0,F=m._rowCount;L<F;L++){if(m.mode.value(L)!=="local-pairwise")continue;let v=m.id.value(L);if(v!==u)continue;let U=m.name.value(L);x={id:v,name:U,residueRange:[Number.MAX_SAFE_INTEGER,Number.MIN_SAFE_INTEGER],valueRange:[Number.MAX_VALUE,-Number.MAX_VALUE],values:{}}}if(!x)return;let{values:S,residueRange:w,valueRange:R}=x,T={label_entity_id:"",label_asym_id:"",label_seq_id:0,pdbx_PDB_ins_code:void 0};for(let L=0,F=p._rowCount;L<F;L++){if(d.value(L)!==c.modelNum||Q.value(L)!==u)continue;let v=f.value(L),U=b.findEntity(v);T.label_entity_id=c.entities.data.id.value(U),T.label_asym_id=v,T.label_seq_id=I.value(L);let G=b.findResidueLabel(T);if(G<0)continue;v=C.value(L),U=b.findEntity(v),T.label_entity_id=c.entities.data.id.value(U),T.label_asym_id=v,T.label_seq_id=y.value(L);let N=b.findResidueLabel(T);if(G<0)continue;let k=S[G];k||(k={},S[G]=k);let J=E.value(L);k[N]=J,G<w[0]&&(w[0]=G),N<w[0]&&(w[0]=N),G>w[1]&&(w[1]=G),N>w[1]&&(w[1]=N),J<R[0]&&(R[0]=J),J>R[1]&&(R[1]=J)}return x}s.pairwiseMetricFromModelArchiveCIF=a,s.symbols={pLDDT:qs.Dynamic(iu("ma","quality-assessment.pLDDT",Je.Num),c=>{let{unit:l,element:u}=c.element;return ge.isAtomic(l)?Og.get(l.model).value?.pLDDT?.get(l.model.atomicHierarchy.residueAtomSegments.index[u])??-1:-1}),qmean:qs.Dynamic(iu("ma","quality-assessment.qmean",Je.Num),c=>{let{unit:l,element:u}=c.element;return ge.isAtomic(l)?Og.get(l.model).value?.qmean?.get(l.model.atomicHierarchy.residueAtomSegments.index[u])??-1:-1})}})(ks||={});var Ete={},Og=DA.createProvider({label:"QualityAssessment",descriptor:{name:"ma_quality_assessment",symbols:ks.symbols},type:"static",defaultParams:Ete,getParams:e=>Ete,isApplicable:e=>ks.isApplicable(e),obtain:async(e,t,r)=>{let n={...h.getDefaultValues(Ete),...r};return await ks.obtain(e,t,n)}});var JL=11184810,c2t={"No Score":JL,"Very Low":16743749,Low:16767763,Confident:6671347,"Very High":21462},l2t=Ba(Object.entries(c2t));function TMe(e){return{metricId:ks.getLocalOptions(e.structure?.models[0],"pLDDT")}}function PMe(e,t){let r=()=>JL;if(e.structure){let n=W.Location.create(e.structure.root),o=i=>{let{unit:a,element:A}=i;if(!ge.isAtomic(a))return JL;let s=Og.get(a.model).value,l=(s?.localMap.get(t.metricId)?.values??s?.pLDDT)?.get(a.model.atomicHierarchy.residueAtomSegments.index[A]);return typeof l!="number"&&(l=a.model.atomicConformation.B_iso_or_equiv.value(A)),l<0?JL:l<=50?16743749:l<=70?16767763:l<=90?6671347:21462};r=i=>W.Location.is(i)?o(i):Et.isLocation(i)?(n.unit=i.aUnit,n.element=i.aUnit.elements[i.aIndex],o(n)):JL}return{factory:PMe,granularity:"group",preferSmoothing:!0,color:r,props:t,description:"Assigns residue colors according to the pLDDT Confidence score. If no Model Archive quality assessment score is available, the B-factor value is used instead.",legend:l2t}}var zY={name:"plddt-confidence",label:"pLDDT Confidence",category:Br.Validation,factory:PMe,getParams:TMe,defaultValues:h.getDefaultValues(TMe({})),isApplicable:e=>!!e.structure?.models.some(t=>ks.isApplicable(t,"pLDDT")||t.atomicConformation.B_iso_or_equiv.isDefined&&!_t.isExperimental(t)),ensureCustomProperties:{attach:async(e,t)=>{if(t.structure)for(let r of t.structure.models)await Og.attach(e,r,void 0,!0)},detach:async e=>{if(e.structure)for(let t of e.structure.models)Og.ref(t,!1)}}};var KY=11184810;function GMe(e){return{metricId:ks.getLocalOptions(e.structure?.models[0],"qmean")}}function NMe(e,t){let r=()=>KY,n=oa.create({domain:[0,1],listOrName:[[16732160,.5],[154365,1]]});if(e.structure){let o=W.Location.create(e.structure.root),i=a=>{let{unit:A,element:s}=a;if(!ge.isAtomic(A))return KY;let c=Og.get(A.model).value,u=(c?.localMap.get(t.metricId)?.values??c?.qmean)?.get(A.model.atomicHierarchy.residueAtomSegments.index[s])??-1;return u<0?KY:n.color(u)};r=a=>W.Location.is(a)?i(a):Et.isLocation(a)?(o.unit=a.aUnit,o.element=a.aUnit.elements[a.aIndex],i(o)):KY}return{factory:NMe,granularity:"group",preferSmoothing:!0,color:r,props:t,description:"Assigns residue colors according to the QMEAN score.",legend:n.legend}}var jY={name:"qmean-score",label:"QMEAN Score",category:Br.Validation,factory:NMe,getParams:GMe,defaultValues:h.getDefaultValues(GMe({})),isApplicable:e=>!!e.structure?.models.some(t=>ks.isApplicable(t,"qmean")),ensureCustomProperties:{attach:async(e,t)=>{if(t.structure)for(let r of t.structure.models)await Og.attach(e,r,void 0,!0)},detach:async e=>{if(e.structure)for(let t of e.structure.models)Og.ref(t,!1)}}};var iy=kt(Qa());var JE=kt(Qa());function u2t(e){let[,t]=JE.default.useState({}),r=JE.default.useRef();return r.current=e?.value,JE.default.useEffect(()=>{if(!e)return;let n=e.subscribe(o=>{r.current!==o&&t({})});return()=>n.unsubscribe()},[e]),e?.value}function g2t(e){return JE.default.useSyncExternalStore(JE.default.useCallback(t=>{let r=e?.pipe(O2(1)).subscribe(t);return()=>r?.unsubscribe()},[e]),JE.default.useCallback(()=>e?.value,[e]))}var m2t=JE.default.useSyncExternalStore?g2t:u2t;function Tc(e){return m2t(e)}var d2t=[17435,16252149];function p2t(e,t,r,n){let[o,i]=t.residueRange,[a,A]=t.valueRange,[s,c]=r,l=i-o+1,u=A-a,g=t.values,m=document.createElement("canvas");m.width=l,m.height=l;let p=m.getContext("2d");p.fillStyle=ke.toStyle(n),p.fillRect(0,0,m.width,m.height);let d=new Map,f=b=>{let x=Math.round(b*65535);if(d.has(x))return d.get(x);let S=ke.interpolate(s,c,x/65535),w=ke.toStyle(S);return d.set(x,w),w};for(let b=o;b<=i;b++){let x=g[b];if(x)for(let S=o;S<=i;S++){let w=x[S];if(typeof w!="number")continue;let R=b-o,T=S-o,L=(w-a)/u;p.fillStyle=f(L),p.fillRect(R,T,1,1),typeof g[S]?.[b]!="number"&&p.fillRect(T,R,1,1)}}let I=[],C=e.atomicHierarchy,{label_asym_id:y}=C.chains,Q=ed.residueChainIndex(C,o),E={startOffset:0,endOffset:1,label:y.value(Q)};I.push(E);for(let b=1;b<l;b++){Q=ed.residueChainIndex(C,o+b);let x=y.value(Q);x===E.label?E.endOffset=b+1:(E={startOffset:b,endOffset:b+1,label:x},I.push(E))}return{model:e,metric:t,chains:I,colorRange:[ke.toStyle(r[0]),ke.toStyle(r[1])],png:m.toDataURL("png")}}function MMe(e,t){return p2t(e,t,d2t,14869218)}var To=kt(Qr()),WY=class extends ma{constructor(){super(...arguments);this.interactivity=new _A({});this.queue=new AE}defaultState(){return{header:"Predicted Aligned Error",isCollapsed:!1,isHidden:!0,brand:{accent:"purple",svg:Z$},params:{},values:void 0,dataSources:[]}}toggleCollapsed(){if(!this.state.isCollapsed)this.setState({isCollapsed:!0});else{let r=kMe(this.plugin,this.state.values);this.setState({...r,isCollapsed:!1,isHidden:r.params.data.options.length===0||r.params.model.options.length===0})}}componentDidMount(){this.subscribe(s9([this.plugin.state.data.events.changed,this.plugin.behaviors.state.isAnimating]),([r,n])=>{if(n||this.state.isCollapsed)return;let o=kMe(this.plugin,this.state.values);this.setState({...o,isHidden:o.params.data.options.length===0||o.params.model.options.length===0})}),this.subscribe(f2t(this.interactivity),r=>{b2t(this.plugin,r)}),this.subscribe(B2t(this.interactivity),r=>{this.queue.enqueue(()=>x2t(this.plugin,r))})}renderControls(){let{params:r,values:n,dataSources:o}=this.state;return(0,To.jsxs)(To.Fragment,{children:[(0,To.jsx)(Mn,{params:r,values:n,onChangeValues:i=>this.setState({values:i})}),(0,To.jsx)(I2t,{plugin:this.plugin,values:n,dataSources:o,interactivity:this.interactivity})]})}};function f2t(e){return e.pipe(jc(16,void 0,{leading:!0,trailing:!0}),xD((t,r)=>t.crosshairOffset===r.crosshairOffset))}function B2t(e){return e.pipe(jc(66,void 0,{leading:!0,trailing:!0}),xD((t,r)=>t.boxStart===r.boxStart&&(t.mouseDown?t.crosshairOffset:t.boxEnd)===(r.mouseDown?r.crosshairOffset:r.boxEnd)))}var I2t=(0,iy.memo)(({plugin:e,values:t,dataSources:r,interactivity:n})=>{let o=e.managers.structure.hierarchy.current.models.find(c=>c.cell.transform.ref===t.model)?.cell.obj?.data,i=r.find(c=>c.id===t.data),A=e.state.data.cells.get(i?.dataRef)?.obj?.data.blocks[i?.blockIndex];if(!o||!A||!i)return(0,To.jsx)("div",{className:"msp-description",children:"Data not available"});let s=ks.pairwiseMetricFromModelArchiveCIF(o,A,i.metridId);return s?(0,To.jsx)(C2t,{interactivity:n,model:o,pairwiseMetric:s}):(0,To.jsx)("div",{className:"msp-description",children:"Data not available"})},(e,t)=>e.values.data===t.values.data&&e.values.model===t.values.model);function kMe(e,t){let r=e.managers.structure.hierarchy.current.models,n=e.state.data.selectQ(A=>A.root.subtree().ofType(te.Format.Cif)),o=[];for(let A of n){if(!A.obj?.data.blocks)continue;let s=0;for(let c of A.obj.data.blocks){for(let l of ks.findModelArchiveCIFPAEMetrics(c))o.push({id:`${A.transform.ref}:${s}:${l.id}`,metridId:l.id,label:`${c.header}: ${l.name}`,dataRef:A.transform.ref,blockIndex:s});s++}}let i={model:h.Select(r[0]?.cell.transform.ref,r.map(A=>[A.cell.transform.ref,A.cell.obj?.data.label]),{isHidden:r.length<=1}),data:h.Select(o[0]?.id,o.map(A=>[A.id,A.label]),{isHidden:o.length<=1})},a={model:i.model.options.find(A=>A[0]===t?.model)?.[0]??i.model.options[0]?.[0],data:i.data.options.find(A=>A[0]===t?.data)?.[0]??i.data.options[0]?.[0]};return{params:i,values:a,dataSources:o}}var ui=1e3,Yo=120,XY={ScoredOverpaint:16753920,ScoredLabel:12349696,AlignedOverpaint:1769403,AlignedLabel:1019496},C2t=(0,iy.memo)(({model:e,pairwiseMetric:t,interactivity:r})=>{let n=(0,iy.useRef)(),o=MMe(e,t);if((0,iy.useEffect)(()=>{if(!o){r.next({});return}r.next({model:e,drawing:o});let d=I=>{let C=r.value;if(!C.inside&&!C.mouseDown)return;let y=bte(n.current,I.clientX,I.clientY);r.next({...C,crosshairOffset:y})},f=I=>{if(!r.value.mouseDown)return;let C=bte(n.current,I.clientX,I.clientY);r.next({...r.value,mouseDown:!1,boxEnd:C})};return window.addEventListener("mousemove",d),window.addEventListener("mouseup",f),()=>{window.removeEventListener("mousemove",d),window.removeEventListener("mouseup",f)}},[e,r,o]),!o)return(0,To.jsx)(To.Fragment,{children:"Not available"});let{metric:i,colorRange:a,chains:A,png:s}=o,c=i.residueRange[1]-i.residueRange[0],l="#333",u="#000",g=80,m=Yo+ui+50,p="0 0 1140 1270";return(0,To.jsxs)("div",{style:{margin:"8px 8px 0 8px",position:"relative"},children:[(0,To.jsxs)("svg",{viewBox:p,width:"100%",children:[(0,To.jsx)("image",{x:Yo+1,y:Yo+1,width:ui-1,height:ui-1,href:s}),(0,To.jsx)("line",{x1:Yo,x2:Yo+ui,y1:Yo,y2:Yo+ui,style:{stroke:u,strokeDasharray:"15,15"}}),(0,To.jsxs)("linearGradient",{id:"legend-gradient",x1:0,x2:1,y1:0,y2:0,children:[(0,To.jsx)("stop",{offset:"0%",stopColor:a[0]}),(0,To.jsx)("stop",{offset:"100%",stopColor:a[1]})]}),(0,To.jsx)("rect",{x:Yo,y:m,width:ui,height:g,style:{fill:"url(#legend-gradient)",strokeWidth:1,stroke:l}}),(0,To.jsxs)("text",{x:Yo+20,y:m+g-22,style:{fontSize:"45px",fill:"white",fontWeight:"bold"},children:[em(i.valueRange[0],2)," \xC5"]}),(0,To.jsxs)("text",{x:Yo+ui-20,y:m+g-22,style:{fontSize:"45px",fill:"black",fontWeight:"bold"},textAnchor:"end",children:[em(i.valueRange[1],2)," \xC5"]}),(0,To.jsx)("text",{x:Yo+ui/2,y:m+g-22,style:{fontSize:"45px",fill:"black"},textAnchor:"middle",children:"Predicted Aligned Error"}),(0,To.jsx)("text",{x:Yo+ui/2,y:50,style:{fontSize:"45px",fontWeight:"bold",fill:ke.toStyle(XY.ScoredLabel)},textAnchor:"middle",children:"Scored Residue"}),(0,To.jsx)("text",{className:"msp-svg-text",style:{fontSize:"50px",fontWeight:"bold",fill:ke.toStyle(XY.AlignedLabel)},transform:`translate(50, ${Yo+ui/2}) rotate(270)`,textAnchor:"middle",children:"Aligned Residue"}),A.map(({startOffset:d,endOffset:f,label:I})=>{let C=Yo+ui*(d+(f-d)/2)/c,y=Yo+ui*f/c,Q=Yo+ui*d/c,E=e.atomicHierarchy.residues.label_seq_id,b=E.value(i.residueRange[0]+d),x=E.value(i.residueRange[0]+f-1);return(0,To.jsxs)(iy.Fragment,{children:[(0,To.jsxs)("text",{x:C,y:Yo-15,className:"msp-svg-text",style:{fontSize:"40px"},textAnchor:"middle",children:[I," ",b,"-",x]}),(0,To.jsxs)("text",{className:"msp-svg-text",style:{fontSize:"40px"},transform:`translate(${Yo-15}, ${C}) rotate(270)`,textAnchor:"middle",children:[I," ",b,"-",x]}),(0,To.jsx)("line",{x1:Q,x2:Q,y1:Yo-20,y2:Yo+ui+20,style:{stroke:u,strokeDasharray:"15,15"}}),(0,To.jsx)("line",{x1:y,x2:y,y1:Yo-20,y2:Yo+ui+20,style:{stroke:u,strokeDasharray:"15,15"}}),(0,To.jsx)("line",{x1:Yo-20,x2:Yo+ui+20,y1:Q,y2:Q,style:{stroke:u,strokeDasharray:"15,15"}}),(0,To.jsx)("line",{x1:Yo-20,x2:Yo+ui+20,y1:y,y2:y,style:{stroke:u,strokeDasharray:"15,15"}})]},d)})]}),(0,To.jsxs)("svg",{viewBox:p,style:{position:"absolute",inset:0},children:[(0,To.jsx)("rect",{x:Yo,y:Yo,width:ui,height:ui,style:{fill:"transparent",cursor:"crosshair"},ref:n,onMouseMove:d=>{r.next({...r.value,inside:!0}),d.currentTarget.style.stroke="black",d.currentTarget.style.strokeWidth="4px"},onMouseDown:d=>{r.next({...r.value,mouseDown:!0,boxStart:E2t(d)})},onMouseLeave:d=>{r.next({...r.value,inside:!1,crosshairOffset:void 0}),d.currentTarget.style.stroke="#333",d.currentTarget.style.strokeWidth="1px"}}),(0,To.jsx)(h2t,{drawing:o,interactity:r})]})]})},(e,t)=>e.model===t.model&&e.pairwiseMetric===t.pairwiseMetric);function h2t({drawing:e,interactity:t}){let r=Tc(t),{crosshairOffset:n,inside:o}=r,i=Q2t(r),a=y2t(r),A;if(a){let s=a?{fontSize:"45px",fill:"black",fontWeight:"bold",pointerEvents:"none",userSelect:"none"}:void 0,c,l,u;n[0]<ui/2?(c=Yo+n[0]+20,u="start"):(c=Yo+n[0]-20,u="end"),n[1]<ui/2?l=Yo+n[1]+65:l=Yo+n[1]-(a[2]?135:90)+20,A=(0,To.jsxs)("text",{y:l,style:s,textAnchor:u,children:[(0,To.jsxs)("tspan",{x:c,children:["S: ",a[0]]}),(0,To.jsxs)("tspan",{x:c,dy:45,children:["A: ",a[1]]}),a[2]&&(0,To.jsx)("tspan",{x:c,dy:45,children:a[2]})]})}return(0,To.jsxs)(To.Fragment,{children:[o&&n&&(0,To.jsx)("line",{x1:n[0]+Yo,x2:n[0]+Yo,y1:Yo,y2:Yo+ui,style:{pointerEvents:"none",stroke:"black",strokeDasharray:"5,5"}}),o&&n&&(0,To.jsx)("line",{x1:Yo,x2:Yo+ui,y1:n[1]+Yo,y2:n[1]+Yo,style:{pointerEvents:"none",stroke:"black",strokeDasharray:"5,5"}}),i&&(0,To.jsx)("rect",{x:Yo+i[0],y:Yo+i[1],width:i[2],height:i[3],style:{stroke:"#eee",strokeWidth:4,fill:"rgba(0, 0, 0, 0.15)",pointerEvents:"none"}}),A]})}function y2t(e){if(!e.drawing||!e.crosshairOffset||!e.inside)return;let{drawing:t}=e,r=zE(t,$t(e.crosshairOffset[0],0,ui)),n=zE(t,$t(e.crosshairOffset[1],0,ui)),o=t.metric.values[r]?.[n]??t.metric.values[n]?.[r],i=typeof o=="number"?`${em(o,2)} \xC5`:"";return[HMe(t,r),HMe(t,n),i]}function zE(e,t){let r=e.metric.residueRange[0]+Math.round(t/ui*(e.metric.residueRange[1]-e.metric.residueRange[0]+1));return $t(r,e.metric.residueRange[0],e.metric.residueRange[1])}function HMe(e,t){let r=e.model.atomicHierarchy,n=r.chains.label_asym_id,o=r.residues.label_seq_id,i=r.atoms.label_comp_id;return`${n.value(ed.residueChainIndex(r,t))} ${o.value(t)} ${i.value(ed.residueFirstAtomIndex(r,t))}`}function Q2t(e){let t=e.boxStart,r=e.mouseDown?e.crosshairOffset:e.boxEnd;if(!t||!r)return;let n=$t(Math.min(t[0],r[0]),0,ui),o=$t(Math.max(t[0],r[0]),0,ui)-n,i=$t(Math.min(t[1],r[1]),0,ui),a=$t(Math.max(t[1],r[1]),0,ui)-i;if(!(o<1&&a<1))return[n,i,o,a]}function E2t(e){return bte(e.currentTarget,e.clientX,e.clientY)}function bte(e,t,r){let n=e.getBoundingClientRect(),o=ui*(t-n.left)/n.width,i=ui*(r-n.top)/n.height;return[o,i]}function _Me(e,t){if(t){for(let r of e.managers.structure.hierarchy.current.models)if(r.cell.obj?.data===t)return r}}function b2t(e,t){let r=_Me(e,t.model)?.structures[0]?.cell.obj?.data;if(!t.drawing||!t.crosshairOffset||!t.inside||!r){e.managers.interactivity.lociHighlights.clearHighlights();return}let{drawing:n}=t,o=zE(n,$t(t.crosshairOffset[0],0,ui)),i=zE(n,$t(t.crosshairOffset[1],0,ui)),a=Ke.residue.key,A=Ah.loci(i0({residueTest:s=>{let c=a(s.element);return c===o||c===i}}),r);e.managers.interactivity.lociHighlights.highlightOnly({loci:A})}async function x2t(e,t){let r="modelarchive-pae-overpaint",n=e.state.data.selectQ(b=>b.root.subtree().withTag(r)),o=e.build();for(let b of n)o.delete(b);let i=_Me(e,t.model),a=i?.structures[0]?.cell.obj?.data;if(!t.drawing||!t.boxStart||!(t.boxEnd||t.crosshairOffset)||!a)return n?VMe(e,o):void 0;let A=t.boxStart,s=t.mouseDown?t.crosshairOffset:t.boxEnd,c=$t(Math.min(A[0],s[0]),0,ui),l=$t(Math.max(A[0],s[0]),0,ui),u=$t(Math.min(A[1],s[1]),0,ui),g=$t(Math.max(A[1],s[1]),0,ui);if(l-c<=1||g-u<=1)return n?VMe(e,o):void 0;let m=e.state.data.selectQ(b=>b.byRef(i.cell.transform.ref).subtree().ofType(te.Molecule.Structure.Representation3D)),p=Ke.residue.key,d=zE(t.drawing,c),f=zE(t.drawing,l),I=Ah.loci(i0({residueTest:b=>{let x=p(b.element);return x>=d&&x<=f}}),a),C=zE(t.drawing,u),y=zE(t.drawing,g),Q=Ah.loci(i0({residueTest:b=>{let x=p(b.element);return x>=C&&x<=y}}),a),E=[{bundle:W.Bundle.fromSubStructure(a,a),color:7829367,clear:!1},{bundle:W.Bundle.fromLoci(I),color:XY.ScoredOverpaint,clear:!1},{bundle:W.Bundle.fromLoci(Q),color:XY.AlignedOverpaint,clear:!1}];for(let b of m)o.to(b).apply(VX,{layers:E},{tags:[r],state:{isGhost:!0}});return o.commit()}async function VMe(e,t){await t.commit();let r=e.state.data.selectQ(n=>n.root.subtree().ofType(te.Molecule.Structure.Representation3DState));for(let n of r){let o=n.obj?.data;o&&(o.repr.setState(o.state),e.canvas3d?.update(o.repr))}}var xte={EnablePairwiseScorePlot:new Gp("ma-quality-assessment-prop.enable-pairwise-score-plot",!0)},OMe=er.create({name:"ma-quality-assessment-prop",category:"custom-props",display:{name:"Quality Assessment",description:"Data included in Model Archive files."},ctor:class extends er.Handler{constructor(){super(...arguments);this.provider=Og;this.labelProvider={label:t=>{if(this.params.showTooltip)return v2t(t)?.join("</br>")}}}register(){Zs.addCustomProp(this.provider.descriptor),this.ctx.customModelProperties.register(this.provider,this.params.autoAttach),this.ctx.managers.lociLabels.addProvider(this.labelProvider),this.ctx.representation.structure.themes.colorThemeRegistry.add(zY),this.ctx.representation.structure.themes.colorThemeRegistry.add(jY),this.ctx.query.structure.registry.add(YMe),this.ctx.builders.structure.representation.registerPreset(ZY),this.ctx.builders.structure.representation.registerPreset(qY),this.ctx.config.get(xte.EnablePairwiseScorePlot)&&this.ctx.customStructureControls.set("ma-quality-assessment-pairwise-plot",WY)}update(t){let r=this.params.autoAttach!==t.autoAttach;return this.params.autoAttach=t.autoAttach,this.params.showTooltip=t.showTooltip,this.ctx.customStructureProperties.setDefaultAutoAttach(this.provider.descriptor.name,this.params.autoAttach),r}unregister(){Zs.removeCustomProp(this.provider.descriptor),this.ctx.customStructureProperties.unregister(this.provider.descriptor.name),this.ctx.managers.lociLabels.removeProvider(this.labelProvider),this.ctx.representation.structure.themes.colorThemeRegistry.remove(zY),this.ctx.representation.structure.themes.colorThemeRegistry.remove(jY),this.ctx.query.structure.registry.remove(YMe),this.ctx.builders.structure.representation.unregisterPreset(ZY),this.ctx.builders.structure.representation.unregisterPreset(qY),this.ctx.customStructureControls.delete("ma-quality-assessment-pairwise-plot")}},params:()=>({autoAttach:h.Boolean(!1),showTooltip:h.Boolean(!0)})});function S2t(e){return e>50&&e<=70?"Low":e>70&&e<=90?"Confident":e>90?"Very high":"Very low"}function D2t(e,t,r){let n=e.name;return e.type!==e.name&&(n+=` (${e.type})`),r&&(n+=r),n+=`: ${t.toFixed(2)}`,e.kind==="pLDDT"&&(n+=` <small>(${S2t(t)})</small>`),n}function v2t(e){if(e.kind!=="element-loci"||e.elements.length===0)return;let t=[],r=new Map;for(let{indices:o,unit:i}of e.elements){let a=Og.get(i.model).value?.local;if(!a)continue;let A=i.model.atomicHierarchy.residueAtomSegments.index,{elements:s}=i;for(let c of a){let l=`${c.name}-${c.type}`,u=r.get(l);u||(u={metric:c,scoreSum:0,seenResidues:new Set},r.set(l,u),t.push(u));let g=c.values,{seenResidues:m}=u;Ee.forEach(o,p=>{let d=s[p],f=A[d],I=ko(f,i.id);if(m.has(I))return;let C=g.get(A[d]);typeof C>"u"||(u.scoreSum+=C,u.seenResidues.add(I))})}}if(t.length===0)return;let n=[];for(let{metric:o,scoreSum:i,seenResidues:a}of t){let A="";a.size>1&&(A=` <small>(${a.size} Residues avg.)</small>`);let s=i/a.size,c=D2t(o,s,A);n.push(c)}return n}var YMe=Qo("Confident pLDDT (> 70)",ce.struct.modifier.union([ce.struct.modifier.wholeResidues([ce.struct.modifier.union([ce.struct.generator.atomGroups({"chain-test":ce.core.rel.eq([ce.ammp("objectPrimitive"),"atomistic"]),"residue-test":ce.core.rel.gr([ks.symbols.pLDDT.symbol(),70])})])])]),{description:"Select residues with a pLDDT > 70 (confident).",category:"Validation",ensureCustomProperties:async(e,t)=>{for(let r of t.models)await Og.attach(e,r,void 0,!0)}}),ZY={id:"preset-structure-representation-ma-quality-assessment-plddt",display:{name:"Quality Assessment (pLDDT)",group:"Annotation",description:"Color structure based on pLDDT Confidence."},isApplicable(e){return!!e.data.models.some(t=>ks.isApplicable(t,"pLDDT"))},params:()=>ri.CommonParams,async apply(e,t,r){let n=Pn.resolveAndCheck(r.state.data,e),o=n?.obj?.data;if(!n||!o)return{};let i=zY.name;return await ni.auto.apply(e,{...t,theme:{globalName:i,focus:{name:i}}},r)}},qY={id:"preset-structure-representation-ma-quality-assessment-qmean",display:{name:"Quality Assessment (QMEAN)",group:"Annotation",description:"Color structure based on QMEAN Score."},isApplicable(e){return!!e.data.models.some(t=>ks.isApplicable(t,"qmean"))},params:()=>ri.CommonParams,async apply(e,t,r){let n=Pn.resolveAndCheck(r.state.data,e),o=n?.obj?.data;if(!n||!o)return{};let i=jY.name;return await ni.auto.apply(e,{...t,theme:{globalName:i,focus:{name:i}}},r)}};var Ste=kt(Qa());var JMe="__ModelExportName__",F2t={getStructureName(e){return e.inheritedPropertyData[JMe]},setStructureName(e,t){return e.inheritedPropertyData[JMe]=t}};async function zMe(e,t){try{await e.runTask(w2t(e,t),{useOverlay:!0})}catch(r){console.error(r),e.log.error("Model export failed. See console for details.")}}function w2t(e,t){return ve.create("Export",async r=>{await r.update({message:"Exporting...",isIndeterminate:!0,canAbort:!1});let n=t?.format??"cif",{structures:o}=e.managers.structure.hierarchy.current,i=[],a=new Map;for(let A of o){let s=A.transform?.cell.obj?.data??A.cell.obj?.data;if(!s)continue;if(s.models.length>1){e.log.warn(`[Export] Skipping ${A.cell.obj?.label}: Multimodel exports not supported.`);continue}if(s.units.some(u=>!ge.isAtomic(u))){e.log.warn(`[Export] Skipping ${A.cell.obj?.label}: Non-atomic model exports not supported.`);continue}let c=F2t.getStructureName(s)||s.model.entryId||"unnamed",l=a.has(c)?`${c}_${a.get(c)+1}.${n}`:`${c}.${n}`;a.set(c,(a.get(c)??0)+1),await r.update({message:`Exporting ${c}...`,isIndeterminate:!0,canAbort:!1}),s.elementCount>1e5&&await new Promise(u=>setTimeout(u,50));try{i.push([l,hj(c,s,n==="bcif",{copyAllCategories:!0})])}catch(u){throw n==="cif"&&s.elementCount>2e6&&e.log.warn("[Export] The structure might be too big to be exported as Text CIF, consider using the BinaryCIF format instead."),u}}if(i.length===1)uB(new Blob([i[0][1]]),i[0][0]);else if(i.length>1){let A={};for(let[c,l]of i)if(l instanceof Uint8Array)A[c]=l;else{let u=new Uint8Array(Xy(l));nI(u,0,l),A[c]=u}await r.update({message:"Compressing Data...",isIndeterminate:!0,canAbort:!1});let s=await s0(r,A);uB(new Blob([new Uint8Array(s,0,s.byteLength)]),`structures_${MV()}.zip`)}e.log.info("[Export] Done.")})}var KE=kt(Qr()),$Y=class extends ma{defaultState(){return{header:"Export Models",isCollapsed:!0,brand:{accent:"cyan",svg:yB}}}renderControls(){return(0,KE.jsx)(U2t,{plugin:this.plugin})}},KMe={format:h.Select("cif",[["cif","mmCIF"],["bcif","Binary mmCIF"]])},R2t=h.getDefaultValues(KMe);function U2t({plugin:e}){let[t,r]=(0,Ste.useState)(R2t),[n,o]=(0,Ste.useState)(!1);Tc(e.managers.structure.hierarchy.behaviors.selection);let i=Tc(e.behaviors.state.isBusy),a=e.managers.structure.hierarchy.current,A="Nothing to Export";return a.structures.length===1&&(A="Export"),a.structures.length>1&&(A="Export (as ZIP)"),(0,KE.jsxs)(KE.Fragment,{children:[(0,KE.jsx)(Mn,{params:KMe,values:t,onChangeValues:r,isDisabled:i||n}),(0,KE.jsx)(hr,{onClick:async()=>{o(!0);try{await zMe(e,{format:t.format})}finally{o(!1)}},style:{marginTop:1},disabled:i||a.structures.length===0||n,commit:a.structures.length?"on":"off",children:A})]})}var jMe=er.create({name:"extension-model-export",category:"misc",display:{name:"Model Export"},ctor:class extends er.Handler{register(){this.ctx.customStructureControls.set("model-export",$Y)}update(){return!1}unregister(){this.ctx.customStructureControls.delete("model-export")}},params:()=>({})});var ZMe=kt(XMe());async function qMe(e,t,r){await t.update({message:"Initializing...",isIndeterminate:!0}),L2t(r);let n=bc.getDuration(e,r.animation);if(n===void 0)throw new Error("The animation does not have the duration specified.");let o=await ZMe.createH264MP4Encoder(),{width:i,height:a}=r,A=r.viewport.width,s=r.viewport.height;A%2!==0&&(A-=1),s%2!==0&&(s-=1);let c={...r.viewport,width:A,height:s};o.width=A,o.height=s,r.quantizationParameter&&(o.quantizationParameter=r.quantizationParameter),r.fps&&(o.frameRate=r.fps),o.initialize();let l=e.animationLoop,u=e.canvas3d?.props,g=l.isAnimating,m=!0,p=!1;try{l.stop(),l.resetTime(0),r.customBackground!==void 0&&e.canvas3d?.setProps({renderer:{backgroundColor:r.customBackground},transparentBackground:!1},!0);let d=o.frameRate,f=Math.ceil(n/1e3*d),I=n/f;await t.update({message:"Rendering...",isIndeterminate:!1,current:0,max:f+1}),await r.pass.updateBackground(),await e.managers.animation.play(r.animation.definition,r.animation.params),m=!1;for(let C=0;C<=f;C++){await l.tick(C*I,{isSynchronous:!0,animation:{currentFrame:C,frameCount:f},manualDraw:!0,updateControls:!0});let y=await r.pass.getImageData(t,i,a,c);o.addFrameRgba(y.data),t.shouldUpdate&&await t.update({current:C+1})}return await t.update({message:"Applying finishing touches...",isIndeterminate:!0}),await e.managers.animation.stop(),m=!0,o.finalize(),p=!0,o.FS.readFile(o.outputFilename)}finally{p&&o.delete(),r.customBackground!==void 0&&e.canvas3d?.setProps({renderer:{backgroundColor:u?.renderer.backgroundColor},transparentBackground:u?.transparentBackground}),m||await e.managers.animation.stop(),g&&l.start()}}function L2t(e){if(e.viewport.x+e.viewport.width>e.width||e.viewport.y+e.viewport.height>e.height)throw new Error("Viewport exceeds the canvas dimensions.")}var Dte={quantization:h.Numeric(18,{min:10,max:51},{description:"Lower is better, but slower."})},eO=class extends du{constructor(r){super();this.plugin=r;this.currentNames=new Set;this.animations=[];this.behaviors={animations:this.ev.behavior({}),current:this.ev.behavior(void 0),canApply:this.ev.behavior({canApply:!1}),info:this.ev.behavior({width:0,height:0}),params:this.ev.behavior(h.getDefaultValues(Dte))};this.init()}setCurrent(r){let n=this.animations.find(a=>a.name===r);if(!n){this.behaviors.current.next(n);return}let o=n.params(this.plugin),i=h.getDefaultValues(o);this.behaviors.current.next({anim:n,params:o,values:i}),this.behaviors.canApply.next(n.canApply?.(this.plugin)??{canApply:!0})}setCurrentParams(r){this.behaviors.current.next({...this.behaviors.current.value,values:r})}get current(){return this.behaviors.current.value}render(){let r=ve.create("Export Animation",async n=>{try{let o=this.plugin.helpers.viewportScreenshot?.getSizeAndViewport(),i=this.current,a=await qMe(this.plugin,n,{animation:{definition:i.anim,params:i.values},...o,quantizationParameter:this.behaviors.params.value.quantization,pass:this.plugin.helpers.viewportScreenshot?.imagePass}),A=i.anim.display.name.toLowerCase().replace(/\s/g,"-").replace(/[^a-z0-9_\-]/g,"");return{movie:a,filename:`${this.plugin.helpers.viewportScreenshot?.getFilename("")}_${A}.mp4`}}catch(o){throw this.plugin.log.error("Error during animation export"),o}});return this.plugin.runTask(r,{useOverlay:!0})}get manager(){return this.plugin.managers.animation}syncInfo(){let n=this.plugin.helpers.viewportScreenshot?.getSizeAndViewport();n&&this.behaviors.info.next({width:n.viewport.width,height:n.viewport.height})}sync(){let r=this.manager.animations.filter(A=>A.isExportable);if(r.every(A=>this.currentNames.has(A.name))&&this.currentNames.size===r.length)return;let o={current:h.Select(r[0]?.name,r.map(A=>[A.name,A.display.name]),{label:"Animation"})},i=this.behaviors.current.value,a=!!r.find(A=>A.name===i?.anim.name);this.animations=r,a||this.setCurrent(r[0]?.name),this.behaviors.animations.next(o)}init(){this.plugin.canvas3d&&(this.subscribe(this.plugin.managers.animation.events.updated.pipe(cp(16)),()=>{this.sync()}),this.subscribe(this.plugin.canvas3d.resized,()=>this.syncInfo()),this.subscribe(this.plugin.helpers.viewportScreenshot?.events.previewed,()=>this.syncInfo()),this.subscribe(this.plugin.behaviors.state.isBusy,r=>this.updateCanApply(r)),this.subscribe(this.plugin.managers.snapshot.events.changed,r=>this.updateCanApply(r)),this.sync(),this.syncInfo())}updateCanApply(r){let n=this.current;!r&&n&&this.behaviors.canApply.next(n.anim.canApply?.(this.plugin)??{canApply:!0})}};var rl=kt(Qr()),tO=class extends ma{constructor(){super(...arguments);this.save=()=>{uB(new Blob([this.state.data.movie]),this.state.data.filename)};this.generate=async()=>{try{this.setState({busy:!0});let r=await this.controls.render();this.setState({busy:!1,data:r})}catch(r){console.error(r),this.setState({busy:!1})}}}get controls(){return this._controls||(this._controls=new eO(this.plugin))}defaultState(){return{header:"Export Animation",isCollapsed:!0,brand:{accent:"cyan",svg:q_}}}downloadControls(){return(0,rl.jsxs)(rl.Fragment,{children:[(0,rl.jsx)("div",{className:"msp-control-offset msp-help-text",children:(0,rl.jsx)("div",{className:"msp-help-description",style:{textAlign:"center"},children:"Rendering successful!"})}),(0,rl.jsx)(hr,{icon:yB,onClick:this.save,style:{marginTop:1},children:"Save Animation"}),(0,rl.jsx)(hr,{onClick:()=>this.setState({data:void 0}),style:{marginTop:6},children:"Clear"})]})}renderControls(){if(this.state.data)return this.downloadControls();let r=this.controls,n=r.behaviors.current.value,o=r.behaviors.info.value,i=r.behaviors.canApply.value;return(0,rl.jsxs)(rl.Fragment,{children:[(0,rl.jsx)(Mn,{params:r.behaviors.animations.value,values:{current:n?.anim.name},onChangeValues:a=>r.setCurrent(a.current),isDisabled:this.state.busy}),n&&(0,rl.jsx)(Mn,{params:n.params,values:n.values,onChangeValues:a=>r.setCurrentParams(a),isDisabled:this.state.busy}),(0,rl.jsx)("div",{className:"msp-control-offset msp-help-text",children:(0,rl.jsxs)("div",{className:"msp-help-description",style:{textAlign:"center"},children:["Resolution: ",o.width,"x",o.height,(0,rl.jsx)("br",{}),"Adjust in viewport using ",(0,rl.jsx)(Kn,{svg:z_,inline:!0})]})}),(0,rl.jsx)(Mn,{params:Dte,values:r.behaviors.params.value,onChangeValues:a=>r.behaviors.params.next(a),isDisabled:this.state.busy}),(0,rl.jsx)(hr,{onClick:this.generate,style:{marginTop:1},disabled:this.state.busy||!i.canApply,commit:i.canApply?"on":"off",children:i.canApply?"Render":i.reason??"Invalid params/state"})]})}componentDidMount(){let r=ml(this.controls.behaviors.animations,this.controls.behaviors.current,this.controls.behaviors.canApply,this.controls.behaviors.info,this.controls.behaviors.params);this.subscribe(r.pipe(cp(10)),()=>{this.state.isCollapsed||this.forceUpdate()})}componentWillUnmount(){super.componentWillUnmount(),this._controls?.dispose(),this._controls=void 0}};var $Me=er.create({name:"extension-mp4-export",category:"misc",display:{name:"MP4 Animation Export"},ctor:class extends er.Handler{register(){this.ctx.customStructureControls.set("mp4-export",tO)}update(){return!1}unregister(){this.ctx.customStructureControls.delete("mp4-export")}},params:()=>({})});async function eke(e,t){let r=new TextEncoder,n={"index.mvsj":r.encode(JSON.stringify(e))};for(let i of t)n[i.name]=typeof i.content=="string"?r.encode(i.content):i.content;let o=await sN(n).run();return new Uint8Array(o)}var T2t=function(e,t,r){if(r||arguments.length===2)for(var n=0,o=t.length,i;n<o;n++)(i||!(n in t))&&(i||(i=Array.prototype.slice.call(t,0,n)),i[n]=t[n]);return e.concat(i||Array.prototype.slice.call(t))};function tke(e){return e}function vte(e,t,r,n,o,i,a,A,s){switch(arguments.length){case 1:return e;case 2:return t(e);case 3:return r(t(e));case 4:return n(r(t(e)));case 5:return o(n(r(t(e))));case 6:return i(o(n(r(t(e)))));case 7:return a(i(o(n(r(t(e))))));case 8:return A(a(i(o(n(r(t(e)))))));case 9:return s(A(a(i(o(n(r(t(e))))))));default:{for(var c=arguments[0],l=1;l<arguments.length;l++)c=arguments[l](c);return c}}}var rO=function(e,t){var r=typeof e=="number"?function(n){return n.length>=e}:e;return function(){var n=Array.from(arguments);return r(arguments)?t.apply(this,n):function(o){return t.apply(void 0,T2t([o],n,!1))}}};var rke=function(e){return e._tag==="Left"};var nke=function(e){return{_tag:"Left",left:e}},oke=function(e){return{_tag:"Right",right:e}};function Fte(e){return function(t,r){return e.map(t,function(){return r})}}function ike(e){var t=Fte(e);return function(r){return t(r,void 0)}}function ake(e){return function(t,r){return e.chain(t,function(n){return e.map(r(n),function(){return n})})}}var Ake=nke,zL=oke,N2t=rO(2,function(e,t){return Hs(e)?e:t(e.right)}),ske=function(e,t){return vte(e,k2t(t))},M2t=function(e,t){return vte(e,V2t(t))};var wte="Either";var k2t=function(e){return function(t){return Hs(t)?t:zL(e(t.right))}},cke={URI:wte,map:ske},Zao=rO(2,Fte(cke)),qao=ike(cke);var H2t=function(e){return function(t){return Hs(t)?t:Hs(e)?e:zL(t.right(e.right))}},V2t=H2t;var _2t={URI:wte,map:ske,ap:M2t,chain:N2t};var Y2t={URI:wte,fromEither:tke};var Hs=rke;var $ao=rO(2,ake(_2t));var eAo={fromEither:Y2t.fromEither};var ba=(function(){var e=function(t,r){return e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,o){n.__proto__=o}||function(n,o){for(var i in o)Object.prototype.hasOwnProperty.call(o,i)&&(n[i]=o[i])},e(t,r)};return function(t,r){if(typeof r!="function"&&r!==null)throw new TypeError("Class extends value "+String(r)+" is not a constructor or null");e(t,r);function n(){this.constructor=t}t.prototype=r===null?Object.create(r):(n.prototype=r.prototype,new n)}})(),G1=function(){return G1=Object.assign||function(e){for(var t,r=1,n=arguments.length;r<n;r++){t=arguments[r];for(var o in t)Object.prototype.hasOwnProperty.call(t,o)&&(e[o]=t[o])}return e},G1.apply(this,arguments)},O2t=function(e,t,r){if(r||arguments.length===2)for(var n=0,o=t.length,i;n<o;n++)(i||!(n in t))&&(i||(i=Array.prototype.slice.call(t,0,n)),i[n]=t[n]);return e.concat(i||Array.prototype.slice.call(t))},jE=Ake,_m=function(e,t,r){return jE([{value:e,context:t,message:r}])},Vs=zL,Ki=(function(){function e(t,r,n,o){this.name=t,this.is=r,this.validate=n,this.encode=o,this.decode=this.decode.bind(this)}return e.prototype.pipe=function(t,r){var n=this;return r===void 0&&(r="pipe(".concat(this.name,", ").concat(t.name,")")),new e(r,t.is,function(o,i){var a=n.validate(o,i);return Hs(a)?a:t.validate(a.right,i)},this.encode===Ka&&t.encode===Ka?Ka:function(o){return n.encode(t.encode(o))})},e.prototype.asDecoder=function(){return this},e.prototype.asEncoder=function(){return this},e.prototype.decode=function(t){return this.validate(t,[{key:"",type:this,actual:t}])},e})();var Ka=function(e){return e};function J2t(e){return e.displayName||e.name||"<function".concat(e.length,">")}function ay(e,t,r,n){for(var o=e.length,i=Array(o+1),a=0;a<o;a++)i[a]=e[a];return i[o]={key:t,type:r,actual:n},i}function Nx(e,t){for(var r=t.length,n=0;n<r;n++)e.push(t[n])}var N1=Object.prototype.hasOwnProperty;function Ute(e){return Object.keys(e).map(function(t){return"".concat(t,": ").concat(e[t].name)}).join(", ")}function KL(e){for(var t=0;t<e.length;t++)if(e[t].encode!==Ka)return!1;return!0}function dke(e){return"{ ".concat(Ute(e)," }")}function pke(e){return"Partial<".concat(e,">")}function z2t(e,t,r,n){n===void 0&&(n="{ [K in ".concat(t.name,"]: ").concat(r.name," }"));for(var o=e.length,i={},a=0;a<o;a++)i[e[a]]=r;var A=SRt(i,n);return new bke(n,function(s){return A.is(s)},A.validate,A.encode,t,r)}function fke(e){var t;if(Ike(e)){var r=e.value;if(Pte.is(r))return t={},t[r]=null,t}else{if($2t(e))return e.keys;if(hke(e)){var n=e.types.map(function(o){return fke(o)});return n.some(Tte.is)?void 0:Object.assign.apply(Object,O2t([{}],n,!1))}}}function lke(e,t){for(var r=Object.keys(e),n=r.length,o=!1,i={},a=0;a<n;a++){var A=r[a];t.is(A)?i[A]=e[A]:o=!0}return o?i:e}function K2t(e,t,r){return r===void 0&&(r="{ [K in ".concat(e.name,"]: ").concat(t.name," }")),new bke(r,function(n){return FB.is(n)?Object.keys(n).every(function(o){return!e.is(o)||t.is(n[o])}):mke(t)&&Array.isArray(n)},function(n,o){if(FB.is(n)){for(var i={},a=[],A=Object.keys(n),s=A.length,c=!1,l=0;l<s;l++){var u=A[l],g=n[u],m=e.validate(u,ay(o,u,e,u));if(Hs(m))c=!0;else{var p=m.right;c=c||p!==u,u=p;var d=t.validate(g,ay(o,u,t,g));if(Hs(d))Nx(a,d.left);else{var f=d.right;c=c||f!==g,i[u]=f}}}return a.length>0?jE(a):Vs(c?i:n)}return mke(t)&&Array.isArray(n)?Vs(n):_m(n,o)},e.encode===Ka&&t.encode===Ka?function(n){return lke(n,e)}:function(n){for(var o={},i=Object.keys(lke(n,e)),a=i.length,A=0;A<a;A++){var s=i[A];o[String(e.encode(s))]=t.encode(n[s])}return o},e,t)}function j2t(e){return"("+e.map(function(t){return t.name}).join(" | ")+")"}function uke(e,t){for(var r=!0,n=!0,o=!FB.is(e),i=0,a=t;i<a.length;i++){var A=a[i];A!==e&&(r=!1),FB.is(A)&&(n=!1)}if(r)return e;if(n)return t[t.length-1];for(var s={},c=0,l=t;c<l.length;c++){var A=l[c];for(var u in A)(!N1.call(s,u)||o||A[u]!==e[u])&&(s[u]=A[u])}return s}function Lte(e){switch(e._tag){case"RefinementType":case"ReadonlyType":return Lte(e.type);case"InterfaceType":case"StrictType":case"PartialType":return e.props;case"IntersectionType":return e.types.reduce(function(t,r){return Object.assign(t,Lte(r))},{})}}function gke(e,t){for(var r=Object.getOwnPropertyNames(e),n=!1,o={},i=0;i<r.length;i++){var a=r[i];N1.call(t,a)?o[a]=e[a]:n=!0}return n?o:e}function W2t(e){return Cke(e)?"{| ".concat(Ute(e.props)," |}"):eRt(e)?pke("{| ".concat(Ute(e.props)," |}")):"Exact<".concat(e.name,">")}function X2t(e){return e.length>0}var Td={};function Bke(e,t){for(var r=[],n=0,o=e;n<o.length;n++){var i=o[n];t.indexOf(i)!==-1&&r.push(i)}return r}function Z2t(e,t){if(e===Td)return t;if(t===Td)return e;var r=Object.assign({},e);for(var n in t)if(N1.call(e,n)){var o=Bke(e[n],t[n]);if(X2t(o))r[n]=o;else{r=Td;break}}else r[n]=t[n];return r}function q2t(e,t){if(e===Td||t===Td)return Td;var r=Td;for(var n in e)if(N1.call(t,n)){var o=Bke(e[n],t[n]);o.length===0&&(r===Td&&(r={}),r[n]=e[n].concat(t[n]))}return r}function mke(e){return e._tag==="AnyType"}function Ike(e){return e._tag==="LiteralType"}function $2t(e){return e._tag==="KeyofType"}function Cke(e){return e._tag==="InterfaceType"}function eRt(e){return e._tag==="PartialType"}function tRt(e){return e._tag==="StrictType"}function rRt(e){return e._tag==="ExactType"}function nRt(e){return e._tag==="RefinementType"}function oRt(e){return e._tag==="IntersectionType"}function hke(e){return e._tag==="UnionType"}function iRt(e){return e._tag==="RecursiveType"}function aRt(e){return e._tag==="ReadonlyType"}var Rte=[];function Gx(e){if(Rte.indexOf(e)!==-1)return Td;if(Cke(e)||tRt(e)){var t=Td;for(var r in e.props){var n=e.props[r];Ike(n)&&(t===Td&&(t={}),t[r]=[n.value])}return t}else{if(rRt(e)||nRt(e)||aRt(e))return Gx(e.type);if(oRt(e))return e.types.reduce(function(i,a){return Z2t(i,Gx(a))},Td);if(hke(e))return e.types.slice(1).reduce(function(i,a){return q2t(i,Gx(a))},Gx(e.types[0]));if(iRt(e)){Rte.push(e);var o=Gx(e.type);return Rte.pop(),o}}return Td}function ARt(e){var t=Gx(e[0]),r=Object.keys(t),n=e.length,o=function(c){for(var l=t[c].slice(),u=[t[c]],g=1;g<n;g++){var m=e[g],p=Gx(m),d=p[c];if(d===void 0)return"continue-keys";if(d.some(function(f){return l.indexOf(f)!==-1}))return"continue-keys";l.push.apply(l,d),u.push(d)}return{value:[c,u]}};e:for(var i=0,a=r;i<a.length;i++){var A=a[i],s=o(A);if(typeof s=="object")return s.value;if(s==="continue-keys")continue e}}var sRt=(function(e){ba(t,e);function t(){var r=e.call(this,"null",function(n){return n===null},function(n,o){return r.is(n)?Vs(n):_m(n,o)},Ka)||this;return r._tag="NullType",r}return t})(Ki);var yke=new sRt,cRt=(function(e){ba(t,e);function t(){var r=e.call(this,"undefined",function(n){return n===void 0},function(n,o){return r.is(n)?Vs(n):_m(n,o)},Ka)||this;return r._tag="UndefinedType",r}return t})(Ki);var Tte=new cRt,lRt=(function(e){ba(t,e);function t(){var r=e.call(this,"void",Tte.is,Tte.validate,Ka)||this;return r._tag="VoidType",r}return t})(Ki);var nAo=new lRt,uRt=(function(e){ba(t,e);function t(){var r=e.call(this,"unknown",function(n){return!0},Vs,Ka)||this;return r._tag="UnknownType",r}return t})(Ki);var oAo=new uRt,gRt=(function(e){ba(t,e);function t(){var r=e.call(this,"string",function(n){return typeof n=="string"},function(n,o){return r.is(n)?Vs(n):_m(n,o)},Ka)||this;return r._tag="StringType",r}return t})(Ki);var Pte=new gRt,mRt=(function(e){ba(t,e);function t(){var r=e.call(this,"number",function(n){return typeof n=="number"},function(n,o){return r.is(n)?Vs(n):_m(n,o)},Ka)||this;return r._tag="NumberType",r}return t})(Ki);var oO=new mRt,dRt=(function(e){ba(t,e);function t(){var r=e.call(this,"bigint",function(n){return typeof n=="bigint"},function(n,o){return r.is(n)?Vs(n):_m(n,o)},Ka)||this;return r._tag="BigIntType",r}return t})(Ki);var iAo=new dRt,pRt=(function(e){ba(t,e);function t(){var r=e.call(this,"boolean",function(n){return typeof n=="boolean"},function(n,o){return r.is(n)?Vs(n):_m(n,o)},Ka)||this;return r._tag="BooleanType",r}return t})(Ki);var Qke=new pRt,fRt=(function(e){ba(t,e);function t(){var r=e.call(this,"UnknownArray",Array.isArray,function(n,o){return r.is(n)?Vs(n):_m(n,o)},Ka)||this;return r._tag="AnyArrayType",r}return t})(Ki);var nO=new fRt,BRt=(function(e){ba(t,e);function t(){var r=e.call(this,"UnknownRecord",function(n){return n!==null&&typeof n=="object"&&!Array.isArray(n)},function(n,o){return r.is(n)?Vs(n):_m(n,o)},Ka)||this;return r._tag="AnyDictionaryType",r}return t})(Ki);var FB=new BRt;var aAo=(function(e){ba(t,e);function t(r,n,o,i,a){var A=e.call(this,r,n,o,i)||this;return A.value=a,A._tag="LiteralType",A}return t})(Ki);var AAo=(function(e){ba(t,e);function t(r,n,o,i,a){var A=e.call(this,r,n,o,i)||this;return A.keys=a,A._tag="KeyofType",A}return t})(Ki);var IRt=(function(e){ba(t,e);function t(r,n,o,i,a,A){var s=e.call(this,r,n,o,i)||this;return s.type=a,s.predicate=A,s._tag="RefinementType",s}return t})(Ki);function CRt(e,t,r){return Fke(e,t,r)}var sAo=CRt(oO,function(e){return Number.isInteger(e)},"Int"),hRt=(function(e){ba(t,e);function t(r,n,o,i,a){var A=e.call(this,r,n,o,i)||this;return A.runDefinition=a,A._tag="RecursiveType",A}return t})(Ki);Object.defineProperty(hRt.prototype,"type",{get:function(){return this.runDefinition()},enumerable:!0,configurable:!0});var yRt=(function(e){ba(t,e);function t(r,n,o,i,a){var A=e.call(this,r,n,o,i)||this;return A.type=a,A._tag="ArrayType",A}return t})(Ki);function Eke(e,t){return t===void 0&&(t="Array<".concat(e.name,">")),new yRt(t,function(r){return nO.is(r)&&r.every(e.is)},function(r,n){var o=nO.validate(r,n);if(Hs(o))return o;for(var i=o.right,a=i.length,A=i,s=[],c=0;c<a;c++){var l=i[c],u=e.validate(l,ay(n,String(c),e,l));if(Hs(u))Nx(s,u.left);else{var g=u.right;g!==l&&(A===i&&(A=i.slice()),A[c]=g)}}return s.length>0?jE(s):Vs(A)},e.encode===Ka?Ka:function(r){return r.map(e.encode)},e)}var QRt=(function(e){ba(t,e);function t(r,n,o,i,a){var A=e.call(this,r,n,o,i)||this;return A.props=a,A._tag="InterfaceType",A}return t})(Ki);function iO(e,t){t===void 0&&(t=dke(e));var r=Object.keys(e),n=r.map(function(i){return e[i]}),o=r.length;return new QRt(t,function(i){if(FB.is(i)){for(var a=0;a<o;a++){var A=r[a],s=i[A];if(s===void 0&&!N1.call(i,A)||!n[a].is(s))return!1}return!0}return!1},function(i,a){var A=FB.validate(i,a);if(Hs(A))return A;for(var s=A.right,c=s,l=[],u=0;u<o;u++){var g=r[u],m=c[g],p=n[u],d=p.validate(m,ay(a,g,p,m));if(Hs(d))Nx(l,d.left);else{var f=d.right;(f!==m||f===void 0&&!N1.call(c,g))&&(c===s&&(c=G1({},s)),c[g]=f)}}return l.length>0?jE(l):Vs(c)},KL(n)?Ka:function(i){for(var a=G1({},i),A=0;A<o;A++){var s=r[A],c=n[A].encode;c!==Ka&&(a[s]=c(i[s]))}return a},e)}var ERt=(function(e){ba(t,e);function t(r,n,o,i,a){var A=e.call(this,r,n,o,i)||this;return A.props=a,A._tag="PartialType",A}return t})(Ki);function Gte(e,t){t===void 0&&(t=pke(dke(e)));var r=Object.keys(e),n=r.map(function(i){return e[i]}),o=r.length;return new ERt(t,function(i){if(FB.is(i)){for(var a=0;a<o;a++){var A=r[a],s=i[A];if(s!==void 0&&!e[A].is(s))return!1}return!0}return!1},function(i,a){var A=FB.validate(i,a);if(Hs(A))return A;for(var s=A.right,c=s,l=[],u=0;u<o;u++){var g=r[u],m=c[g],p=e[g],d=p.validate(m,ay(a,g,p,m));if(Hs(d))m!==void 0&&Nx(l,d.left);else{var f=d.right;f!==m&&(c===s&&(c=G1({},s)),c[g]=f)}}return l.length>0?jE(l):Vs(c)},KL(n)?Ka:function(i){for(var a=G1({},i),A=0;A<o;A++){var s=r[A],c=i[s];c!==void 0&&(a[s]=n[A].encode(c))}return a},e)}var bke=(function(e){ba(t,e);function t(r,n,o,i,a,A){var s=e.call(this,r,n,o,i)||this;return s.domain=a,s.codomain=A,s._tag="DictionaryType",s}return t})(Ki);function xke(e,t,r){var n=fke(e);return n?z2t(Object.keys(n),e,t,r):K2t(e,t,r)}var aO=(function(e){ba(t,e);function t(r,n,o,i,a){var A=e.call(this,r,n,o,i)||this;return A.types=a,A._tag="UnionType",A}return t})(Ki);function Ske(e,t){t===void 0&&(t=j2t(e));var r=ARt(e);if(r!==void 0&&e.length>0){var n=r[0],o=r[1],i=o.length,a=function(A){for(var s=0;s<i;s++)if(o[s].indexOf(A)!==-1)return s};return new URt(t,function(A){if(FB.is(A)){var s=a(A[n]);return s!==void 0?e[s].is(A):!1}return!1},function(A,s){var c=FB.validate(A,s);if(Hs(c))return c;var l=c.right,u=a(l[n]);if(u===void 0)return _m(A,s);var g=e[u];return g.validate(l,ay(s,String(u),g,l))},KL(e)?Ka:function(A){var s=a(A[n]);if(s===void 0)throw new Error("no codec found to encode value in union codec ".concat(t));return e[s].encode(A)},e,n)}else return new aO(t,function(A){return e.some(function(s){return s.is(A)})},function(A,s){for(var c=[],l=0;l<e.length;l++){var u=e[l],g=u.validate(A,ay(s,String(l),u,A));if(Hs(g))Nx(c,g.left);else return Vs(g.right)}return jE(c)},KL(e)?Ka:function(A){for(var s=0,c=e;s<c.length;s++){var l=c[s];if(l.is(A))return l.encode(A)}throw new Error("no codec found to encode value in union type ".concat(t))},e)}var bRt=(function(e){ba(t,e);function t(r,n,o,i,a){var A=e.call(this,r,n,o,i)||this;return A.types=a,A._tag="IntersectionType",A}return t})(Ki);function Dke(e,t){t===void 0&&(t="(".concat(e.map(function(n){return n.name}).join(" & "),")"));var r=e.length;return new bRt(t,function(n){return e.every(function(o){return o.is(n)})},e.length===0?Vs:function(n,o){for(var i=[],a=[],A=0;A<r;A++){var s=e[A],c=s.validate(n,ay(o,String(A),s,n));Hs(c)?Nx(a,c.left):i.push(c.right)}return a.length>0?jE(a):Vs(uke(n,i))},e.length===0?Ka:function(n){return uke(n,e.map(function(o){return o.encode(n)}))},e)}var xRt=(function(e){ba(t,e);function t(r,n,o,i,a){var A=e.call(this,r,n,o,i)||this;return A.types=a,A._tag="TupleType",A}return t})(Ki);function vke(e,t){t===void 0&&(t="[".concat(e.map(function(n){return n.name}).join(", "),"]"));var r=e.length;return new xRt(t,function(n){return nO.is(n)&&n.length===r&&e.every(function(o,i){return o.is(n[i])})},function(n,o){var i=nO.validate(n,o);if(Hs(i))return i;for(var a=i.right,A=a.length>r?a.slice(0,r):a,s=[],c=0;c<r;c++){var l=a[c],u=e[c],g=u.validate(l,ay(o,String(c),u,l));if(Hs(g))Nx(s,g.left);else{var m=g.right;m!==l&&(A===a&&(A=a.slice()),A[c]=m)}}return s.length>0?jE(s):Vs(A)},KL(e)?Ka:function(n){return e.map(function(o,i){return o.encode(n[i])})},e)}var cAo=(function(e){ba(t,e);function t(r,n,o,i,a){var A=e.call(this,r,n,o,i)||this;return A.type=a,A._tag="ReadonlyType",A}return t})(Ki);var lAo=(function(e){ba(t,e);function t(r,n,o,i,a){var A=e.call(this,r,n,o,i)||this;return A.type=a,A._tag="ReadonlyArrayType",A}return t})(Ki);var SRt=function(e,t){return vRt(iO(e),t)},DRt=(function(e){ba(t,e);function t(r,n,o,i,a){var A=e.call(this,r,n,o,i)||this;return A.type=a,A._tag="ExactType",A}return t})(Ki);function vRt(e,t){t===void 0&&(t=W2t(e));var r=Lte(e);return new DRt(t,e.is,function(n,o){var i=FB.validate(n,o);if(Hs(i))return i;var a=e.validate(n,o);return Hs(a)?a:zL(gke(a.right,r))},function(n){return e.encode(gke(n,r))},e)}var FRt=(function(e){ba(t,e);function t(){var r=e.call(this,"Function",function(n){return typeof n=="function"},function(n,o){return r.is(n)?Vs(n):_m(n,o)},Ka)||this;return r._tag="FunctionType",r}return t})(Ki);var uAo=new FRt,wRt=(function(e){ba(t,e);function t(){var r=e.call(this,"never",function(n){return!1},function(n,o){return _m(n,o)},function(){throw new Error("cannot encode never")})||this;return r._tag="NeverType",r}return t})(Ki);var gAo=new wRt,RRt=(function(e){ba(t,e);function t(){var r=e.call(this,"any",function(n){return!0},Vs,Ka)||this;return r._tag="AnyType",r}return t})(Ki);var mAo=new RRt;function Fke(e,t,r){return r===void 0&&(r="(".concat(e.name," | ").concat(J2t(t),")")),new IRt(r,function(n){return e.is(n)&&t(n)},function(n,o){var i=e.validate(n,o);if(Hs(i))return i;var a=i.right;return t(a)?Vs(a):_m(a,o)},e.encode,e,t)}var wke=Fke(oO,Number.isInteger,"Integer"),URt=(function(e){ba(t,e);function t(r,n,o,i,a,A){var s=e.call(this,r,n,o,i,a)||this;return s.tag=A,s}return t})(aO);var LRt=(function(e){ba(t,e);function t(){var r=e.call(this,"object",function(n){return n!==null&&typeof n=="object"},function(n,o){return r.is(n)?Vs(n):_m(n,o)},Ka)||this;return r._tag="ObjectType",r}return t})(Ki);var dAo=new LRt;var pAo=(function(e){ba(t,e);function t(r,n,o,i,a){var A=e.call(this,r,n,o,i)||this;return A.props=a,A._tag="StrictType",A}return t})(Ki);var nn=Pte,gi=wke,Hr=oO,Xo=Qke,wC=vke,TA=Eke,Ym=xke;function AO(e,t,r){if(!t)return iO(e,r);if(r===void 0){let n=[];for(let o in e)n.push(`${o}: ${e[o].name}`);for(let o in t)n.push(`${o}?: ${t[o].name}`);r=`{ ${n.join(", ")} }`}return Dke([iO(e),Gte(t)],r)}function Nte(e,t){if(t===void 0){let r=[];for(let n in e)r.push(`${n}?: ${e[n].name}`);t=`{ ${r.join(", ")} }`}return Gte(e,t)}function fA(e,t,...r){let n=[];for(let o of[e,t,...r])o instanceof aO?n.push(...o.types):n.push(o);return Ske(n)}function or(e){return fA(e,yke)}function Na(...e){if(e.length===0)throw new Error("literal type must have at least one value");let t=e.length===1?sG(e[0]):`(${e.map(n=>sG(n)).join(" | ")})`,r=new Set(e);return new Ki(t,(n=>r.has(n)),(n,o)=>r.has(n)?{_tag:"Right",right:n}:{_tag:"Left",left:[{value:n,context:o,message:`"${n}" is not a valid value for literal type ${t}`}]},n=>n)}function _n(e,t){return{type:e,required:!0,description:t}}function rt(e,t,r){return{type:e,required:!1,description:r,default:t}}function Uke(e,t){if(t===void 0&&!e.required)return;let r=e.type.decode(t);if(r._tag!=="Right")return TRt(r.left)}function TRt(e){if(e.length!==0)return e.map(PRt)}function PRt(e){return e.message!==void 0?e.message:`Invalid value ${MRt(e.value)} supplied to ${GRt(e.context)}`}function GRt(e){return e.map(t=>`${t.key}: ${t.type.name}`).join("/")}function NRt(e){return e.displayName||e.name||`<function ${e.length}>`}function MRt(e){return typeof e=="function"?NRt(e):typeof e=="number"&&!isFinite(e)?isNaN(e)?"NaN":e>0?"Infinity":"-Infinity":JSON.stringify(e)}function fn(e){return{type:"simple",fields:e}}function Ay(e,t,r){return{type:"union",discriminator:e,discriminatorDescription:t,cases:r}}function kRt(e){let t=Vb(e.fields,r=>_n(r.type,r.description));return fn(t)}function HRt(e){let t=Vb(e.cases,Mte);return Ay(e.discriminator,e.discriminatorDescription,t)}function Mte(e){return e.type==="simple"?kRt(e):HRt(e)}function kte(e,t,r={}){return HS(t)?e.type==="simple"?VRt(e,t,r):_Rt(e,t,r):[`Parameters must be an object, not ${t}`]}function VRt(e,t,r){for(let n in e.fields){let o=e.fields[n];if(Object.hasOwn(t,n)){let i=t[n],a=Uke(o,i);if(a)return[`Invalid value for parameter "${n}":`,...a.map(A=>" "+A)]}else{if(o.required)return[`Missing required parameter "${n}".`];if(r.requireAll)return[`Missing optional parameter "${n}".`]}}if(r.noExtra){for(let n in t)if(!Object.hasOwn(e.fields,n))return[`Unknown parameter "${n}".`]}}function _Rt(e,t,r){if(!Object.hasOwn(t,e.discriminator))return[`Missing required parameter "${e.discriminator}".`];let n=t[e.discriminator],o=e.cases[n];if(o===void 0){let a=Object.keys(e.cases).map(A=>`"${A}"`).join(" | ");return[`Invalid value for parameter "${e.discriminator}":`,`"${n}" is not a valid value for literal type (${a})`]}let i=kte(o,tu(t,[e.discriminator]),r);if(i)return i.unshift(`(case "${e.discriminator}": "${n}")`),i.map(a=>" "+a)}function Mx(e,t){return e.type==="simple"?YRt(e,t):ORt(e,t)}function YRt(e,t){let r={...t};for(let n in e.fields){let o=e.fields[n];!o.required&&r[n]===void 0&&(r[n]=o.default)}return r}function ORt(e,t){let r=t[e.discriminator],n=e.cases[r];return Mx(n,t)}function sO(e){return e.params??{}}function Lke(e){return e.custom??{}}function WE(e){return e.children??[]}function Tke(e){return{...e,nodes:Vb(e.nodes,t=>({...t,params:Mte(t.params)}))}}var Pke=Na("mmcif","bcif","pdb","pdbqt","gro","xyz","mol","sdf","mol2","lammpstrj","xtc","nctraj","dcd","trr","psf","prmtop","top","map","dx","dxbin"),jL=Na("cif","pdb","pdbqt","gro","xyz","mol","sdf","mol2","lammpstrj","xtc","nctraj","dcd","trr","psf","prmtop","top","map","dx","dxbin"),Gke=Na("model","assembly","symmetry","symmetry_mates"),Nke=Na("all","polymer","protein","nucleic","branched","ligand","ion","water","coarse"),JRt=Nte({label_entity_id:nn,label_asym_id:nn,auth_asym_id:nn,label_seq_id:gi,auth_seq_id:gi,pdbx_PDB_ins_code:nn,beg_label_seq_id:gi,end_label_seq_id:gi,beg_auth_seq_id:gi,end_auth_seq_id:gi,label_comp_id:nn,auth_comp_id:nn,residue_index:gi,label_atom_id:nn,auth_atom_id:nn,type_symbol:nn,atom_id:gi,atom_index:gi,instance_id:nn}),WL=JRt,cO=Na("whole_structure","entity","chain","auth_chain","residue","auth_residue","residue_range","auth_residue_range","atom","auth_atom","all_atomic"),Mke=Na("cif","bcif","json"),xa=wC([Hr,Hr,Hr]),Bf=TA(Hr),kke=Na("bottom-left","bottom-center","bottom-right","middle-left","middle-center","middle-right","top-left","top-center","top-right"),zRt=Nte({structure_ref:nn,expression_schema:cO,expressions:TA(WL)}),KRt=zRt,Ag=fA(xa,WL,KRt),Hte=TA(Hr),XL=TA(gi),Hke=TA(nn),jRt=new Ki("HexColor",(e=>typeof e=="string"),(e,t)=>XRt(e)?{_tag:"Right",right:e}:{_tag:"Left",left:[{value:e,context:t,message:`"${e}" is not a valid hex color string`}]},e=>e),WRt=/^#([0-9A-F]{3}){1,2}$/i;function XRt(e){return typeof e=="string"&&WRt.test(e)}var ZRt=new Ki("ColorName",(e=>typeof e=="string"),(e,t)=>qRt(e)?{_tag:"Right",right:e}:{_tag:"Left",left:[{value:e,context:t,message:`"${e}" is not a valid color name`}]},e=>e);function qRt(e){return e in xt}var mi=fA(ZRt,jRt);function Vke(e){return!!e&&Array.isArray(e)&&e.length===3&&typeof e[0]=="number"}function Vte(e){return!!e&&Array.isArray(e.expressions)}function _ke(e){return!!e&&typeof e=="object"&&!e.expressions}var _te=Na("Reds","Oranges","Greens","Blues","Purples","Greys","OrRd","BuGn","PuBuGn","GnBu","PuBu","BuPu","RdPu","PuRd","YlOrRd","YlOrBr","YlGn","YlGnBu","Magma","Inferno","Plasma","Viridis","Cividis","Turbo","Warm","Cool","CubehelixDefault","Rainbow","Sinebow","RdBu","RdGy","PiYG","BrBG","PRGn","PuOr","RdYlGn","RdYlBu","Spectral","Category10","Observable10","Tableau10","Set1","Set2","Set3","Pastel1","Pastel2","Dark2","Paired","Accent","Chainbow"),$Rt=Na("ElementSymbol","ResidueName","ResidueProperties","SecondaryStructure"),eUt=AO({kind:Na("categorical")},{colors:fA(_te,$Rt,TA(mi),Ym(nn,mi)),repeat_color_list:Xo,sort:Na("none","lexical","numeric"),sort_direction:Na("ascending","descending"),case_insensitive:Xo,missing_color:or(mi)}),tUt=eUt,Yke={kind:"categorical",colors:"Category10",repeat_color_list:!1,sort:"none",sort_direction:"ascending",case_insensitive:!1,missing_color:null},rUt=AO({kind:Na("discrete")},{colors:fA(_te,TA(mi),TA(wC([mi,Hr])),TA(wC([or(mi),or(Hr),or(Hr)]))),reverse:Xo,mode:Na("normalized","absolute"),value_domain:wC([or(Hr),or(Hr)])}),Yte=rUt,Oke={kind:"discrete",colors:"YlGn",reverse:!1,mode:"normalized",value_domain:[null,null]},nUt=AO({kind:Na("continuous")},{colors:fA(_te,TA(mi),TA(wC([mi,Hr]))),reverse:Xo,mode:Na("normalized","absolute"),value_domain:wC([or(Hr),or(Hr)]),underflow_color:or(fA(Na("auto"),mi)),overflow_color:or(fA(Na("auto"),mi))}),Ote=nUt,Jke={kind:"continuous",colors:"YlGn",reverse:!1,mode:"normalized",value_domain:[null,null],underflow_color:null,overflow_color:null},Jte=fA(tUt,Yte,Ote);var lO=Na("linear","bounce-in","bounce-out","bounce-in-out","circle-in","circle-out","circle-in-out","cubic-in","cubic-out","cubic-in-out","exp-in","exp-out","exp-in-out","quad-in","quad-out","quad-in-out","sin-in","sin-out","sin-in-out"),zte={noise_magnitude:rt(Hr,0,"Magnitude of the noise to apply to the interpolated value.")},ZL={target_ref:_n(nn,"Reference to the node."),property:_n(fA(nn,TA(fA(nn,gi))),"Value accessor."),start_ms:rt(Hr,0,"Start time of the transition in milliseconds."),duration_ms:_n(Hr,"Duration of the transition in milliseconds.")},uO={frequency:rt(gi,1,"Determines how many times the interpolation loops. Current T = frequency * t mod 1."),alternate_direction:rt(Xo,!1,"Whether to alternate the direction of the interpolation for frequency > 1.")},gO={easing:rt(lO,"linear","Easing function to use for the transition.")},oUt={...ZL,...uO,...gO,start:rt(or(fA(Hr,TA(Hr))),null,"Start value. If a list of values is provided, each element will be interpolated separately. If unset, parent state value is used."),end:rt(or(fA(Hr,TA(Hr))),null,"End value. If a list of values is provided, each element will be interpolated separately. If unset, only noise is applied."),discrete:rt(Xo,!1,"Whether to round the values to the closest integer. Useful for example for trajectory animation."),...zte},iUt={...ZL,...uO,...gO,start:rt(or(TA(Hr)),null,"Start value. If unset, parent state value is used. Must be array of length 3N (x1, y1, z1, x2, y2, z2, ...)."),end:rt(or(TA(Hr)),null,"End value. Must be array of length 3N (x1, y1, z1, x2, y2, z2, ...). If unset, only noise is applied."),spherical:rt(Xo,!1,"Whether to use spherical interpolation."),...zte},aUt={...ZL,...uO,...gO,start:rt(or(Bf),null,"Start value. If unset, parent state value is used."),end:rt(or(Bf),null,"End value. If unset, only noise is applied."),...zte},AUt={...ZL,...uO,...gO,start:rt(fA(or(mi),Ym(fA(gi,nn),mi)),null,"Start value. If unset, parent state value is used."),end:rt(fA(or(mi),Ym(fA(gi,nn),mi)),null,"End value."),palette:rt(or(fA(Yte,Ote)),null,"Palette to sample colors from. Overrides start and end values.")},sUt={...ZL,pivot:rt(or(xa),null,"Pivot point for rotation and scale."),rotation_start:rt(or(Bf),null,"Start rotation value. If unset, parent state value is used."),rotation_end:rt(or(Bf),null,"End rotation value. If unset, only noise is applied."),rotation_noise_magnitude:rt(Hr,0,"Magnitude of the noise to apply to the rotation."),rotation_easing:rt(lO,"linear","Easing function to use for the rotation."),rotation_frequency:rt(gi,1,"Determines how many times the rotation interpolation loops. Current T = frequency * t mod 1."),rotation_alternate_direction:rt(Xo,!1,"Whether to alternate the direction of the interpolation for frequency > 1."),translation_start:rt(or(xa),null,"Start translation value. If unset, parent state value is used."),translation_end:rt(or(xa),null,"End translation value. If unset, only noise is applied."),translation_noise_magnitude:rt(Hr,0,"Magnitude of the noise to apply to the translation."),translation_easing:rt(lO,"linear","Easing function to use for the translation."),translation_frequency:rt(gi,1,"Determines how many times the translation interpolation loops. Current T = frequency * t mod 1."),translation_alternate_direction:rt(Xo,!1,"Whether to alternate the direction of the interpolation for frequency > 1."),scale_start:rt(or(xa),null,"Start scale value. If unset, parent state value is used."),scale_end:rt(or(xa),null,"End scale value. If unset, only noise is applied."),scale_noise_magnitude:rt(Hr,0,"Magnitude of the noise to apply to the scale."),scale_easing:rt(lO,"linear","Easing function to use for the scale."),scale_frequency:rt(gi,1,"Determines how many times the scale interpolation loops. Current T = frequency * t mod 1."),scale_alternate_direction:rt(Xo,!1,"Whether to alternate the direction of the interpolation for frequency > 1.")},M1={rootKind:"animation",nodes:{animation:{description:"Animation root node",parent:[],params:fn({frame_time_ms:rt(Hr,1e3/60,"Frame time in milliseconds."),duration_ms:rt(or(Hr),null,"Total duration of the animation. If not specified, computed as maximum of all transitions."),autoplay:rt(Xo,!0,"Determines whether the animation should autoplay when a snapshot is loaded."),loop:rt(Xo,!1,"Determines whether the animation should loop when it reaches the end."),include_camera:rt(Xo,!1,"Determines whether the camera state should be included in the animation."),include_canvas:rt(Xo,!1,"Determines whether the canvas state should be included in the animation.")})},interpolate:{description:"This node enables interpolating between values",parent:["animation"],params:Ay("kind","Interpolation kind",{scalar:fn(oUt),vec3:fn(iUt),rotation_matrix:fn(aUt),transform_matrix:fn(sUt),color:fn(AUt)})}}};function hu(e,t,r){return Kke(e,void 0,t,r)}function Kke(e,t,r,n){r&&r(e,t);for(let o of e.children??[])Kke(o,e,r,n);n&&n(e,t)}function qL(e){let t=0,r=[];return hu(e,n=>r.push(" ".repeat(t++)+cUt(n)),n=>t--),r.join(`
|
|
`)}function cUt(e){return`- ${e.kind} ${$L(e.params??{})}${lUt(e.custom)}${uUt(e.ref)}`}function $L(e){return e?JSON.stringify(e).replace(/,("\w+":)/g,", $1").replace(/"(\w+)":/g,"$1: "):"undefined"}function lUt(e){return!e||Object.keys(e).length===0?"":`, custom: ${$L(e)}`}function uUt(e){return e===void 0?"":`, ref: "${e}"`}function gUt(e){return{kind:e.kind,params:e.params?{...e.params}:void 0,custom:e.custom?{...e.custom}:void 0,ref:e.ref}}function mUt(e){return mO(e,{})}function mO(e,t){let r=new Map,n;return hu(e,(o,i)=>{let a=t[o.kind];if(a){let A=a(o,i);if(!i&&A?.subtree.length===0)throw new Error("Cannot convert root to empty path");let s=i?r.get(i):void 0;for(let c of A.subtree)s?(s.children??=[]).push(c):n=c,s=c;r.set(o,s)}else{let A=gUt(o);i?(r.get(i).children??=[]).push(A):n=A,r.set(o,A)}}),n}function jke(e,t,r){let n=new Map,o=mUt(e);return hu(o,i=>{n.clear();let a=[];for(let A of i.children??[]){let s;if((!t||t.has(A.kind))&&!r?.has(A.kind)){let l=A.kind+WC(sO(A));s=n.get(l),s||n.set(l,A)}s?(s.children??=[]).push(...A.children??[]):a.push(A)}i.children=a}),o}function dO(e,t){let r={};for(let n in t.nodes)r[n]=o=>({subtree:[{kind:o.kind,params:Mx(t.nodes[n].params,o.params),custom:o.custom,ref:o.ref}]});return mO(e,r)}function Wke(e,t,r){hu(e,n=>{let o=n.params;if(o){for(let i in o)if(r.includes(i)){let a=o[i];typeof a=="string"&&(o[i]=Kte(a,t,jte()))}}})}function Kte(...e){let t;for(let r of e.reverse())r!==void 0&&(t===void 0?t=r:t=new URL(r,t).href);return t}function Xke(e,t,r=new Set){return hu(e,n=>{let o=n.params;if(o)for(let i of t){let a=o[i];typeof a=="string"&&r.add(a)}}),r}function Zke(e,t,r){hu(e,n=>{let o=n.params;if(o)for(let i of r){let a=o[i];typeof a=="string"&&typeof t[a]=="string"&&(o[i]=t[a])}})}function jte(){if(typeof window<"u")return window.location.href;if(typeof process<"u")return`file://${process.cwd().replace(/\/?$/,"/")}`}function kx(e,t,r={}){if(!HS(t))return[`Node must be an object, not ${t}`];if(!r.anyRoot&&t.kind!==e.rootKind)return[`Invalid root node kind "${t.kind}", root must be of kind "${e.rootKind}"`];let n=e.nodes[t.kind];if(!n)return[`Unknown node kind "${t.kind}"`];if(n.parent&&r.parent!==void 0&&!n.parent.includes(r.parent))return[`Node of kind "${t.kind}" cannot appear as a child of "${r.parent}". Allowed parents for "${t.kind}" are: ${n.parent.map(i=>`"${i}"`).join(", ")}`];let o=kte(n.params,sO(t),r);if(o)return[`Invalid parameters for node of kind "${t.kind}":`,...o.map(i=>" "+i)];if(t.custom!==void 0&&(typeof t.custom!="object"||t.custom===null))return[`Invalid "custom" for node of kind "${t.kind}": must be an object, not ${t.custom}.`];for(let i of WE(t)){let a=kx(e,i,{...r,anyRoot:!0,parent:t.kind});if(a)return a}}function pO(e,t,r,n){let o=kx(e,t,{noExtra:!0});if(o){console.warn(`Invalid ${r} tree:
|
|
${qL(t)}`),console.error(`${r} tree validation issues:`),n.log.error(`${r} tree validation issues:`);for(let i of o)console.error(" ",i),n.log.error(i);throw new Error("FormatError")}}function $ke(e={}){return new Wte(e)}var Jg=class{constructor(t,r){this._root=t;this._node=r}addChild(t,r){let{params:n,custom:o,ref:i}=ore(r),a={kind:t,params:n,custom:o,ref:i};return this._node.children??=[],this._node.children.push(a),a}},Wte=class extends Jg{constructor(r){let{custom:n,ref:o}=r;super(void 0,{kind:"root",custom:n,ref:o});this._animation=void 0;this.focus=sg(this,XE,"focus");this.primitives=sg(this,H1,"primitives");this.primitivesFromUri=sg(this,H1,"primitivesFromUri");this._root=this}getState(r){return{root:ii(this._node),metadata:ire.create(r)}}getSnapshot(r){return{root:ii(this._node),metadata:{...r},animation:this?._animation?ii(this._animation.node):void 0}}camera(r){return this.addChild("camera",r),this}canvas(r){return this.addChild("canvas",r),this}download(r){return new Zte(this._root,this.addChild("download",r))}animation(r={}){return this._animation??=new Xte(r),this._animation}extendRootCustomState(r){return this._node.custom={...this._node.custom,...r},this}},Xte=class{constructor(t){this._node={kind:"animation",children:[],...ore(t)}}get node(){return this._node}interpolate(t){let r={kind:"interpolate",...ore(t)};return this._node.children.push(r),this}},Zte=class extends Jg{parse(t){return new qte(this._root,this.addChild("parse",t))}},fO={model:["block_header","block_index","model_index","coordinates_ref"],assembly:["block_header","block_index","model_index","assembly_id","coordinates_ref"],symmetry:["block_header","block_index","model_index","ijk_min","ijk_max","coordinates_ref"],symmetry_mates:["block_header","block_index","model_index","radius","coordinates_ref"]},qte=class extends Jg{modelStructure(t={}){return new k1(this._root,this.addChild("structure",{type:"model",...ll(t,[...fO.model]),custom:t.custom,ref:t.ref}))}assemblyStructure(t={}){return new k1(this._root,this.addChild("structure",{type:"assembly",...ll(t,fO.assembly),custom:t.custom,ref:t.ref}))}symmetryStructure(t={}){return new k1(this._root,this.addChild("structure",{type:"symmetry",...ll(t,fO.symmetry),custom:t.custom,ref:t.ref}))}symmetryMatesStructure(t={}){return new k1(this._root,this.addChild("structure",{type:"symmetry_mates",...ll(t,fO.symmetry_mates),custom:t.custom,ref:t.ref}))}volume(t={}){return new ere(this._root,this.addChild("volume",t))}coordinates(t={}){return this.addChild("coordinates",t),this}},k1=class extends Jg{constructor(){super(...arguments);this.transform=sg(this,ZE,"transform");this.instance=sg(this,ZE,"instance");this.primitives=sg(this,H1,"primitives");this.primitivesFromUri=sg(this,H1,"primitivesFromUri")}component(r={}){let n={...r,selector:r.selector??"all"};return new eT(this._root,this.addChild("component",n))}componentFromUri(r){return new eT(this._root,this.addChild("component_from_uri",r))}componentFromSource(r){return new eT(this._root,this.addChild("component_from_source",r))}labelFromUri(r){return this.addChild("label_from_uri",r),this}labelFromSource(r){return this.addChild("label_from_source",r),this}tooltipFromUri(r){return this.addChild("tooltip_from_uri",r),this}tooltipFromSource(r){return this.addChild("tooltip_from_source",r),this}},eT=class extends Jg{constructor(){super(...arguments);this.focus=sg(this,XE,"focus");this.transform=sg(this,ZE,"transform");this.instance=sg(this,ZE,"instance")}representation(r={}){let n={...r,type:r.type??"cartoon"};return new $te(this._root,this.addChild("representation",n))}label(r){return this.addChild("label",r),this}tooltip(r){return this.addChild("tooltip",r),this}},$te=class extends Jg{color(t){return this.addChild("color",t),this}colorFromUri(t){return this.addChild("color_from_uri",t),this}colorFromSource(t){return this.addChild("color_from_source",t),this}opacity(t){return this.addChild("opacity",t),this}clip(t){return this.addChild("clip",t),this}},ere=class extends Jg{constructor(){super(...arguments);this.focus=sg(this,XE,"focus");this.transform=sg(this,ZE,"transform");this.instance=sg(this,ZE,"instance")}representation(r){return r||(r={type:"isosurface"}),new tre(this._root,this.addChild("volume_representation",r))}},tre=class extends Jg{constructor(){super(...arguments);this.focus=sg(this,XE,"focus")}color(r){return this.addChild("color",r),this}opacity(r){return this.addChild("opacity",r),this}clip(r){return this.addChild("clip",r),this}},rre=class extends Jg{constructor(){super(...arguments);this.focus=sg(this,XE,"focus")}mesh(r){return this.addChild("primitive",{kind:"mesh",...r}),this}lines(r){return this.addChild("primitive",{kind:"lines",...r}),this}tube(r){return this.addChild("primitive",{kind:"tube",...r}),this}arrow(r){return this.addChild("primitive",{kind:"arrow",...r}),this}distance(r){return this.addChild("primitive",{kind:"distance_measurement",...r}),this}angle(r){return this.addChild("primitive",{kind:"angle_measurement",...r}),this}label(r){return this.addChild("primitive",{kind:"label",...r}),this}ellipse(r){return this.addChild("primitive",{kind:"ellipse",...r}),this}ellipsoid(r){return this.addChild("primitive",{kind:"ellipsoid",...r}),this}sphere(r){return this.addChild("primitive",{kind:"ellipsoid",...r}),this}box(r){return this.addChild("primitive",{kind:"box",...r}),this}clip(r){return this.addChild("clip",r),this}},nre=class extends Jg{constructor(){super(...arguments);this.focus=sg(this,XE,"focus")}clip(r){return this.addChild("clip",r),this}};function sg(e,t,r){return t.prototype[r].bind(e)}var XE=class extends Jg{focus(t={}){return this.addChild("focus",t),this}},H1=class extends Jg{primitives(t={}){return new rre(this._root,this.addChild("primitives",t))}primitivesFromUri(t){return new nre(this._root,this.addChild("primitives_from_uri",t))}},ZE=class extends Jg{transform(t={}){return qke(t),this.addChild("transform",t),this}instance(t={}){return qke(t),this.addChild("instance",t),this}};function qke(e){if(e.rotation&&e.rotation.length!==9)throw new Error("ValueError: `rotation` parameter must be an array of 9 numbers");if(e.matrix&&e.matrix.length!==16)throw new Error("ValueError: `matrix` parameter must be an array of 16 numbers");if(e.matrix&&(e.translation||e.rotation))throw new Error("ValueError: `matrix` parameter cannot be used together with `translation` or `rotation` parameters")}function ore(e){let{custom:t,ref:r,...n}=e;return{params:n,custom:t,ref:r}}var eHe={start:_n(Ag,"Start point of the tube."),end:_n(Ag,"End point of the tube."),radius:rt(Hr,.05,"Tube radius (in Angstroms)."),dash_length:rt(or(Hr),null,"Length of each dash and gap between dashes. If not specified (null), draw full line."),color:rt(or(mi),null,"Color of the tube. If not specified, uses the parent primitives group `color`.")},dUt={vertices:_n(Hte,"3*n_vertices length array of floats with vertex position (x1, y1, z1, ...)."),indices:_n(XL,"3*n_triangles length array of indices into vertices that form triangles (t1_1, t1_2, t1_3, ...)."),triangle_groups:rt(or(XL),null,"Assign a number to each triangle to group them. If not specified, each triangle is considered a separate group (triangle i = group i)."),group_colors:rt(Ym(gi,mi),{},"Assign a color to each group. Where not assigned, uses `color`."),group_tooltips:rt(Ym(gi,nn),{},"Assign a tooltip to each group. Where not assigned, uses `tooltip`."),color:rt(or(mi),null,"Color of the triangles and wireframe. Can be overwritten by `group_colors`. If not specified, uses the parent primitives group `color`."),tooltip:rt(or(nn),null,"Tooltip shown when hovering over the mesh. Can be overwritten by `group_tooltips`. If not specified, uses the parent primitives group `tooltip`."),show_triangles:rt(Xo,!0,"Determine whether to render triangles of the mesh."),show_wireframe:rt(Xo,!1,"Determine whether to render wireframe of the mesh."),wireframe_width:rt(Hr,1,"Wireframe line width (in screen-space units)."),wireframe_color:rt(or(mi),null,"Wireframe color. If not specified, uses `group_colors`.")},pUt={vertices:_n(Hte,"3*n_vertices length array of floats with vertex position (x1, y1, z1, ...)."),indices:_n(XL,"2*n_lines length array of indices into vertices that form lines (l1_1, l1_2, ...)."),line_groups:rt(or(XL),null,"Assign a number to each triangle to group them. If not specified, each line is considered a separate group (line i = group i)."),group_colors:rt(Ym(gi,mi),{},"Assign a color to each group. Where not assigned, uses `color`."),group_tooltips:rt(Ym(gi,nn),{},"Assign a tooltip to each group. Where not assigned, uses `tooltip`."),group_widths:rt(Ym(gi,Hr),{},"Assign a line width to each group. Where not assigned, uses `width`."),color:rt(or(mi),null,"Color of the lines. Can be overwritten by `group_colors`. If not specified, uses the parent primitives group `color`."),tooltip:rt(or(nn),null,"Tooltip shown when hovering over the lines. Can be overwritten by `group_tooltips`. If not specified, uses the parent primitives group `tooltip`."),width:rt(Hr,1,"Line width (in screen-space units). Can be overwritten by `group_widths`.")},fUt={...eHe,tooltip:rt(or(nn),null,"Tooltip to show when hovering over the tube. If not specified, uses the parent primitives group `tooltip`.")},BUt={start:_n(Ag,"Start point of the arrow."),end:rt(or(Ag),null,"End point of the arrow."),direction:rt(or(xa),null,"If specified, the endpoint is computed as start + direction."),length:rt(or(Hr),null,"Length of the arrow. If unset, the distance between start and end is used."),show_start_cap:rt(Xo,!1,"Draw a cap at the start of the arrow."),start_cap_length:rt(or(Hr),null,"Length of the start cap. If not provided, will be 2 * start_cap_radius."),start_cap_radius:rt(or(Hr),null,"Radius of the start cap. If not provided, will be 2 * tube_radius."),show_end_cap:rt(Xo,!1,"Draw a cap at the end of the arrow."),end_cap_length:rt(or(Hr),null,"Length of the end cap. If not provided, will be 2 * end_cap_radius."),end_cap_radius:rt(or(Hr),null,"Radius of the end cap. If not provided, will be 2 * tube_radius."),show_tube:rt(Xo,!0,"Draw a tube connecting the start and end points."),tube_radius:rt(Hr,.05,"Tube radius (in Angstroms)."),tube_dash_length:rt(or(Hr),null,"Length of each dash and gap between dashes. If not specified (null), draw full line."),color:rt(or(mi),null,"Color of the tube. If not specified, uses the parent primitives group `color`."),tooltip:rt(or(nn),null,"Tooltip to show when hovering over the arrow. If not specified, uses the parent primitives group `tooltip`.")},IUt={...eHe,label_template:rt(nn,"{{distance}}","Template used to construct the label. Use {{distance}} as placeholder for the distance."),label_size:rt(or(Hr),null,"Size of the label (text height in Angstroms). If not specified, size will be relative to the distance (see label_auto_size_scale, label_auto_size_min)."),label_auto_size_scale:rt(Hr,.1,"Scaling factor for relative size."),label_auto_size_min:rt(Hr,0,"Minimum size for relative size."),label_color:rt(or(mi),null,"Color of the label. If not specified, uses the parent primitives group `label_color`.")},CUt={a:_n(Ag,"Point A."),b:_n(Ag,"Point B."),c:_n(Ag,"Point C."),label_template:rt(nn,"{{angle}}","Template used to construct the label. Use {{angle}} as placeholder for the angle in radians."),label_size:rt(or(Hr),null,"Size of the label (text height in Angstroms). If not specified, size will be relative to the distance (see label_auto_size_scale, label_auto_size_min)."),label_auto_size_scale:rt(Hr,.33,"Scaling factor for relative size."),label_auto_size_min:rt(Hr,0,"Minimum size for relative size."),label_color:rt(or(mi),null,"Color of the label. If not specified, uses the parent primitives group `label_color`."),show_vector:rt(Xo,!0,"Draw vectors between (a, b) and (b, c)."),vector_color:rt(or(mi),null,"Color of the vectors."),vector_radius:rt(Hr,.05,"Radius of the vectors."),show_section:rt(Xo,!0,"Draw a filled circle section representing the angle."),section_color:rt(or(mi),null,"Color of the angle section. If not specified, the primitives group color is used."),section_radius:rt(or(Hr),null,"Radius of the angle section. In angstroms."),section_radius_scale:rt(Hr,.33,"Factor to scale the radius of the angle section. Ignored if section_radius is set.")},hUt={position:_n(Ag,"Position of this label."),text:_n(nn,"The label."),label_size:rt(Hr,1,"Size of the label (text height in Angstroms)."),label_color:rt(or(mi),null,"Color of the label. If not specified, uses the parent primitives group `label_color`."),label_offset:rt(Hr,0,"Camera-facing offset to prevent overlap with geometry.")},yUt={color:rt(or(mi),null,"Color of the ellipse. If not specified, uses the parent primitives group `color`."),as_circle:rt(Xo,!1,"If true, ignores radius_minor/magnitude of the minor axis."),center:_n(Ag,"The center of the ellipse."),major_axis:rt(or(xa),null,"Major axis of this ellipse."),minor_axis:rt(or(xa),null,"Minor axis of this ellipse."),major_axis_endpoint:rt(or(Ag),null,"Major axis endpoint. If specified, overrides major axis to be major_axis_endpoint - center."),minor_axis_endpoint:rt(or(Ag),null,"Minor axis endpoint. If specified, overrides minor axis to be minor_axis_endpoint - center."),radius_major:rt(or(Hr),null,"Radius of the major axis. If unset, the length of the major axis is used."),radius_minor:rt(or(Hr),null,"Radius of the minor axis. If unset, the length of the minor axis is used."),theta_start:rt(Hr,0,"Start of the arc. In radians"),theta_end:rt(Hr,2*Math.PI,"End of the arc. In radians"),tooltip:rt(or(nn),null,"Tooltip to show when hovering over the tube. If not specified, uses the parent primitives group `tooltip`.")},QUt={color:rt(or(mi),null,"Color of the ellipsoid. If not specified, uses the parent primitives group `color`."),center:_n(Ag,"The center of the ellipsoid."),major_axis:rt(or(xa),null,"Major axis of this ellipsoid."),minor_axis:rt(or(xa),null,"Minor axis of this ellipsoid."),major_axis_endpoint:rt(or(Ag),null,"Major axis endpoint. If specified, overrides major axis to be major_axis_endpoint - center."),minor_axis_endpoint:rt(or(Ag),null,"Minor axis endpoint. If specified, overrides minor axis to be minor_axis_endpoint - center."),radius:rt(or(fA(xa,Hr)),null,"Radii of the ellipsoid along each axis."),radius_extent:rt(or(fA(xa,Hr)),null,"Added to the radii of the ellipsoid along each axis."),tooltip:rt(or(nn),null,"Tooltip to show when hovering over the tube. If not specified, uses the parent primitives group `tooltip`.")},EUt={center:_n(Ag,"The center of the box."),extent:rt(or(xa),null,"The width, the height, and the depth of the box. Added to the bounding box determined by the center."),show_faces:rt(Xo,!0,"Determine whether to render the faces of the box."),face_color:rt(or(mi),null,"Color of the box faces."),show_edges:rt(Xo,!1,"Determine whether to render the edges of the box."),edge_radius:rt(Hr,.1,"Radius of the box edges. In angstroms."),edge_color:rt(or(mi),null,"Color of the edges."),tooltip:rt(or(nn),null,"Tooltip to show when hovering over the tube. If not specified, uses the parent primitives group `tooltip`.")},tHe=Ay("kind","Kind of geometrical primitive",{mesh:fn(dUt),lines:fn(pUt),tube:fn(fUt),arrow:fn(BUt),distance_measurement:fn(IUt),angle_measurement:fn(CUt),label:fn(hUt),ellipse:fn(yUt),ellipsoid:fn(QUt),box:fn(EUt)});var bUt={size_factor:rt(Hr,1,"Scales the corresponding visuals."),tubular_helices:rt(Xo,!1,"Simplify corkscrew helices to tubes.")},xUt={size_factor:rt(Hr,1,"Scales the corresponding visuals.")},SUt={size_factor:rt(Hr,1,"Scales the corresponding visuals."),ignore_hydrogens:rt(Xo,!1,"Controls whether hydrogen atoms are drawn.")},DUt={size_factor:rt(Hr,1,"Scales the corresponding visuals."),ignore_hydrogens:rt(Xo,!1,"Controls whether hydrogen atoms are drawn.")},vUt={size_factor:rt(Hr,1,"Scales the corresponding visuals."),ignore_hydrogens:rt(Xo,!1,"Controls whether hydrogen atoms are drawn.")},FUt={size_factor:rt(Hr,1,"Scales the corresponding visuals.")},wUt={size_factor:rt(Hr,1,"Scales the corresponding visuals."),size_theme:rt(Na("uniform","uncertainty"),"uniform","Controls how the tube radius is determined. 'uniform' uses a constant radius scaled by size_factor. 'uncertainty' drives the radius from per-residue B-factor/RMSF values.")},RUt={surface_type:rt(Na("molecular","gaussian"),"molecular","Type of surface representation. (Default is 'molecular')"),size_factor:rt(Hr,1,"Scales the corresponding visuals."),ignore_hydrogens:rt(Xo,!1,"Controls whether hydrogen atoms are drawn.")},rHe=Ay("type","Representation type",{cartoon:fn(bUt),backbone:fn(xUt),ball_and_stick:fn(SUt),line:fn(DUt),spacefill:fn(vUt),carbohydrate:fn(FUt),surface:fn(RUt),putty:fn(wUt)}),UUt={relative_isovalue:rt(or(Hr),null,"Relative isovalue."),absolute_isovalue:rt(or(Hr),null,"Absolute isovalue. Overrides `relative_isovalue`."),show_wireframe:rt(Xo,!1,"Show mesh wireframe. Defaults to false."),show_faces:rt(Xo,!0,"Show mesh faces. Defaults to true.")},LUt={dimension:_n(Na("x","y","z"),"Dimension of the grid slice, i.e. 'x', 'y', or 'z'."),absolute_index:rt(or(gi),null,"Index of the grid slice in the specified dimension. 0-based index, i.e. 0 is the first slice."),relative_index:rt(or(Hr),null,"Relative index of the grid slice in the specified dimension. 0.0 is the first slice, 1.0 is the last slice. Overrides `absolute_index`."),relative_isovalue:rt(or(Hr),null,"Relative isovalue."),absolute_isovalue:rt(or(Hr),null,"Absolute isovalue. Overrides `relative_isovalue`.")},nHe=Ay("type","Representation type",{isosurface:fn(UUt),grid_slice:fn(LUt)}),are={check_transform:rt(or(Bf),null,"Transformation matrix to applied to each point before clipping. For example, can be used to clip volumes in the grid/fractional space. Default is null."),invert:rt(Xo,!1,"Inverts the clipping region. Default is false"),variant:rt(Na("object","pixel"),"pixel",'Variant of the clip node, either "object" or "pixel"')},oHe=Ay("type","Clip type",{plane:fn({...are,normal:_n(xa,"Normal vector of the clipping plane."),point:_n(xa,"Point on the clipping plane.")}),sphere:fn({...are,center:_n(xa,"Center of the clipping sphere."),radius:rt(Hr,1,"Radius of the clipping sphere.")}),box:fn({...are,center:_n(xa,"Center of the clipping box."),size:rt(xa,[1,1,1],"Size of the clipping box."),rotation:rt(Bf,[1,0,0,0,1,0,0,0,1],"Rotation matrix (3x3 matrix flattened in column major format (j*3+i indexing), this is equivalent to Fortran-order in numpy). This matrix will multiply the structure coordinates from the left. The default value is the identity matrix (corresponds to no rotation).")})});var BO=fA(Nke,WL,TA(WL)),IO={uri:_n(nn,"URL of the annotation resource."),format:_n(Mke,"Format of the annotation resource."),schema:_n(cO,"Annotation schema defines what fields in the annotation will be taken into account."),block_header:rt(or(nn),null,'Header of the CIF block to read annotation from (only applies when `format` is `"cif"` or `"bcif"`). If `null`, block is selected based on `block_index`.'),block_index:rt(gi,0,'0-based index of the CIF block to read annotation from (only applies when `format` is `"cif"` or `"bcif"` and `block_header` is `null`).'),category_name:rt(or(nn),null,'Name of the CIF category to read annotation from (only applies when `format` is `"cif"` or `"bcif"`). If `null`, the first category in the block is used.'),field_name:_n(nn,"Name of the column in CIF or field name (key) in JSON that contains the dependent variable (color/label/tooltip/component_id...)."),field_remapping:rt(Ym(nn,or(nn)),{},'Optional remapping of annotation field names `{ standardName1: actualName1, ... }`. Use `{ "label_asym_id": "X" }` to load actual field "X" as "label_asym_id". Use `{ "label_asym_id": null }` to ignore actual field "label_asym_id". Fields not mentioned here are mapped implicitely (i.e. actual name = standard name).')},CO={schema:_n(cO,"Annotation schema defines what fields in the annotation will be taken into account."),block_header:rt(or(nn),null,"Header of the CIF block to read annotation from. If `null`, block is selected based on `block_index`."),block_index:rt(gi,0,"0-based index of the CIF block to read annotation from (only applies when `block_header` is `null`)."),category_name:rt(or(nn),null,"Name of the CIF category to read annotation from. If `null`, the first category in the block is used."),field_name:_n(nn,"Name of the column in CIF or field name (key) in JSON that contains the dependent variable (color/label/tooltip/component_id...)."),field_remapping:rt(Ym(nn,or(nn)),{},'Optional remapping of annotation field names `{ standardName1: actualName1, ... }`. Use `{ "label_asym_id": "X" }` to load actual field "X" as "label_asym_id". Use `{ "label_asym_id": null }` to ignore actual field "label_asym_id". Fields not mentioned here are mapped implicitely (i.e. actual name = standard name).')},tT="white",iHe=fn({rotation:rt(Bf,[1,0,0,0,1,0,0,0,1],"Rotation matrix (3x3 matrix flattened in column major format (j*3+i indexing), this is equivalent to Fortran-order in numpy). This matrix will multiply the structure coordinates from the left. The default value is the identity matrix (corresponds to no rotation)."),translation:rt(xa,[0,0,0],"Translation vector, applied to the structure coordinates after rotation. The default value is the zero vector (corresponds to no translation)."),rotation_center:rt(or(fA(xa,Na("centroid"))),null,"Point to rotate the object around. Can be either a 3D vector or dynamically computed object centroid."),matrix:rt(or(Bf),null,"Transform matrix (4x4 matrix flattened in column major format (j*4+i indexing), this is equivalent to Fortran-order in numpy). This matrix will multiply the structure coordinates from the left. Takes precedence over `rotation` and `translation`.")}),yu={rootKind:"root",nodes:{root:{description:"Auxiliary node kind that only appears as the tree root.",parent:[],params:fn({})},download:{description:"This node instructs to retrieve a data resource.",parent:["root"],params:fn({url:_n(nn,"URL of the data resource.")})},parse:{description:"This node instructs to parse a data resource.",parent:["download"],params:fn({format:_n(Pke,"Format of the input data resource.")})},coordinates:{description:"This node instructs to retrieve molecular coordinates from a parsed data resource.",parent:["parse"],params:fn({})},structure:{description:'This node instructs to create a structure from a parsed data resource. "Structure" refers to an internal representation of molecular coordinates without any visual representation.',parent:["parse"],params:fn({type:_n(Gke,'Type of structure to be created (`"model"` for original model coordinates, `"assembly"` for assembly structure, `"symmetry"` for a set of crystal unit cells based on Miller indices, `"symmetry_mates"` for a set of asymmetric units within a radius from the original model).'),block_header:rt(or(nn),null,"Header of the CIF block to read coordinates from (only applies when the input data are from CIF or BinaryCIF). If `null`, block is selected based on `block_index`."),block_index:rt(gi,0,"0-based index of the CIF block to read coordinates from (only applies when the input data are from CIF or BinaryCIF and `block_header` is `null`)."),model_index:rt(gi,0,"0-based index of model in case the input data contain multiple models."),assembly_id:rt(or(nn),null,'Assembly identifier (only applies when `kind` is `"assembly"`). If `null`, the first assembly is selected.'),radius:rt(Hr,5,'Distance (in Angstroms) from the original model in which asymmetric units should be included (only applies when `kind` is `"symmetry_mates"`).'),ijk_min:rt(wC([gi,gi,gi]),[-1,-1,-1],'Miller indices of the bottom-left unit cell to be included (only applies when `kind` is `"symmetry"`).'),ijk_max:rt(wC([gi,gi,gi]),[1,1,1],'Miller indices of the top-right unit cell to be included (only applies when `kind` is `"symmetry"`).'),coordinates_ref:rt(or(nn),null,"Reference to a specific set of coordinates.")})},transform:{description:"This node instructs to rotate and/or translate coordinates OR provide a transformation matrix.",parent:["structure","component","volume"],params:iHe},instance:{description:"This node allows instantiation using the provided transformation parameters.",parent:["structure","component","volume"],params:iHe},component:{description:"This node instructs to create a component (i.e. a subset of the parent structure).",parent:["structure"],params:fn({selector:_n(BO,"Defines what part of the parent structure should be included in this component.")})},component_from_uri:{description:"This node instructs to create a component defined by an external annotation resource.",parent:["structure"],params:fn({...IO,field_name:rt(nn,"component","Name of the column in CIF or field name (key) in JSON that contains the component identifier."),field_values:rt(or(TA(nn)),null,"List of component identifiers (i.e. values in the field given by `field_name`) which should be included in this component. If `null`, component identifiers are ignored (all annotation rows are included), and `field_name` field can be dropped from the annotation.")})},component_from_source:{description:"This node instructs to create a component defined by an annotation resource included in the same file this structure was loaded from. Only applicable if the structure was loaded from an mmCIF or BinaryCIF file.",parent:["structure"],params:fn({...CO,field_name:rt(nn,"component","Name of the column in CIF or field name (key) in JSON that contains the component identifier."),field_values:rt(or(TA(nn)),null,"List of component identifiers (i.e. values in the field given by `field_name`) which should be included in this component. If `null`, component identifiers are ignored (all annotation rows are included), and `field_name` field can be dropped from the annotation.")})},representation:{description:"This node instructs to create a visual representation of a component.",parent:["component","component_from_uri","component_from_source"],params:rHe},volume:{description:'This node instructs to create a volume from a parsed data resource. "Volume" refers to an internal representation of volumetric data without any visual representation.',parent:["parse"],params:fn({channel_id:rt(or(nn),null,"Channel identifier (only applies when the input data contain multiple channels).")})},volume_representation:{description:"This node instructs to create a visual representation of a volume.",parent:["volume"],params:nHe},color:{description:"This node instructs to apply color to a visual representation.",parent:["representation","volume_representation"],params:fn({color:rt(mi,tT,'Color to apply to the representation. Can be either an X11 color name (e.g. `"red"`) or a hexadecimal code (e.g. `"#FF0011"`).'),selector:rt(BO,"all","Defines to what part of the representation this color should be applied.")})},color_from_uri:{description:"This node instructs to apply colors to a visual representation. The colors are defined by an external annotation resource.",parent:["representation"],params:fn({...IO,field_name:rt(nn,"color","Name of the column in CIF or field name (key) in JSON that contains the color."),palette:rt(or(Jte),null,"Customize mapping of annotation values to colors."),selector:rt(BO,"all","Defines to what part of the representation this coloring should be applied.")})},color_from_source:{description:"This node instructs to apply colors to a visual representation. The colors are defined by an annotation resource included in the same file this structure was loaded from. Only applicable if the structure was loaded from an mmCIF or BinaryCIF file.",parent:["representation"],params:fn({...CO,field_name:rt(nn,"color","Name of the column in CIF or field name (key) in JSON that contains the color."),palette:rt(or(Jte),null,"Customize mapping of annotation values to colors."),selector:rt(BO,"all","Defines to what part of the representation this coloring should be applied.")})},clip:{description:"This node instructs to apply clipping to a visual representation.",parent:["representation","volume_representation","primitives","primitives_from_uri"],params:oHe},opacity:{description:"This node instructs to apply opacity/transparency to a visual representation.",parent:["representation","volume_representation"],params:fn({opacity:_n(Hr,"Opacity of a representation. 0.0: fully transparent, 1.0: fully opaque.")})},label:{description:"This node instructs to add a label (textual visual representation) to a component.",parent:["component","component_from_uri","component_from_source"],params:fn({text:_n(nn,"Content of the shown label.")})},label_from_uri:{description:"This node instructs to add labels (textual visual representations) to parts of a structure. The labels are defined by an external annotation resource.",parent:["structure"],params:fn({...IO,field_name:rt(nn,"label","Name of the column in CIF or field name (key) in JSON that contains the label text."),text_format:rt(nn,"{}","Formatting template for the label text. Supports simplified f-string syntax."),group_by_fields:rt(or(TA(nn)),null,"Set of annotation fields for grouping annotation rows into label instances (i.e. annotation rows with the same values in all group-by fields will yield one label instance). Annotation row with undefined value in any group-by field is considered a separate label instance.")})},label_from_source:{description:"This node instructs to add labels (textual visual representations) to parts of a structure. The labels are defined by an annotation resource included in the same file this structure was loaded from. Only applicable if the structure was loaded from an mmCIF or BinaryCIF file.",parent:["structure"],params:fn({...CO,field_name:rt(nn,"label","Name of the column in CIF or field name (key) in JSON that contains the label text."),text_format:rt(nn,"{}","Formatting template for the label text. Supports simplified f-string syntax."),group_by_fields:rt(or(TA(nn)),null,"Set of annotation fields for grouping annotation rows into label instances (i.e. annotation rows with the same values in all group-by fields will yield one label instance). Annotation row with undefined value in any group-by field is considered a separate label instance.")})},tooltip:{description:'This node instructs to add a tooltip to a component. "Tooltip" is a text which is not a part of the visualization but should be presented to the users when they interact with the component (typically, the tooltip will be shown somewhere on the screen when the user hovers over a visual representation of the component).',parent:["component","component_from_uri","component_from_source"],params:fn({text:_n(nn,"Content of the shown tooltip.")})},tooltip_from_uri:{description:"This node instructs to add tooltips to parts of a structure. The tooltips are defined by an external annotation resource.",parent:["structure"],params:fn({...IO,field_name:rt(nn,"tooltip","Name of the column in CIF or field name (key) in JSON that contains the tooltip text."),text_format:rt(nn,"{}","Formatting template for the tooltip text. Supports simplified f-string syntax.")})},tooltip_from_source:{description:"This node instructs to add tooltips to parts of a structure. The tooltips are defined by an annotation resource included in the same file this structure was loaded from. Only applicable if the structure was loaded from an mmCIF or BinaryCIF file.",parent:["structure"],params:fn({...CO,field_name:rt(nn,"tooltip","Name of the column in CIF or field name (key) in JSON that contains the tooltip text."),text_format:rt(nn,"{}","Formatting template for the tooltip text. Supports simplified f-string syntax.")})},focus:{description:"This node instructs to set the camera focus to a component (zoom in).",parent:["root","component","component_from_uri","component_from_source","primitives","primitives_from_uri","volume","volume_representation"],params:fn({direction:rt(xa,[0,0,-1],"Vector describing the direction of the view (camera position -> focused target)."),up:rt(xa,[0,1,0],"Vector which will be aligned with the screen Y axis."),radius:rt(or(Hr),null,"Radius of the focused sphere (overrides `radius_factor` and `radius_extra`)."),radius_factor:rt(Hr,1,"Radius of the focused sphere relative to the radius of parent component (default: 1). Focused radius = component_radius * radius_factor + radius_extent."),radius_extent:rt(Hr,0,"Addition to the radius of the focused sphere, if computed from the radius of parent component (default: 0). Focused radius = component_radius * radius_factor + radius_extent.")})},camera:{description:"This node instructs to set the camera position and orientation.",parent:["root"],params:fn({target:_n(xa,"Coordinates of the point in space at which the camera is pointing."),position:_n(xa,"Coordinates of the camera."),up:rt(xa,[0,1,0],"Vector which will be aligned with the screen Y axis."),near:rt(or(Hr),null,"Near clipping plane distance from the position.")})},canvas:{description:"This node sets canvas properties.",parent:["root"],params:fn({background_color:rt(mi,"white",'Color of the canvas background. Can be either an X11 color name (e.g. `"red"`) or a hexadecimal code (e.g. `"#FF0011"`). Defaults to white.')})},primitives:{description:"This node groups a list of geometrical primitives",parent:["structure","root"],params:fn({color:rt(mi,"white","Default color for primitives in this group."),label_color:rt(mi,"white","Default label color for primitives in this group."),tooltip:rt(or(nn),null,"Default tooltip for primitives in this group."),opacity:rt(Hr,1,"Opacity of primitive geometry in this group."),label_opacity:rt(Hr,1,"Opacity of primitive labels in this group."),label_show_tether:rt(Xo,!1,"Whether to show a tether line between the label and the target. Defaults to false."),label_tether_length:rt(Hr,1,"Length of the tether line between the label and the target. Defaults to 1 (Angstrom)."),label_attachment:rt(kke,"middle-center",'How to attach the label to the target. Defaults to "middle-center".'),label_background_color:rt(or(mi),null,"Background color of the label. Defaults to none/transparent."),snapshot_key:rt(or(nn),null,"Load snapshot with the provided key when interacting with this primitives group."),instances:rt(or(TA(Bf)),null,"Instances of this primitive group defined as 4x4 column major (j * 4 + i indexing) transformation matrices.")})},primitives_from_uri:{description:"This node loads a list of primitives from URI",parent:["structure","root"],params:fn({uri:_n(nn,"Location of the resource."),format:_n(Na("mvs-node-json"),"Format of the data."),references:rt(Hke,[],"List of nodes the data are referencing.")})},primitive:{description:"This node represents a geometrical primitive",parent:["primitives"],params:tHe}}},sy=Tke(yu);var ire={create(e){return{...e,version:`${Qu.SupportedVersion}`,timestamp:TUt()}}},Qu={SupportedVersion:1,fromMVSJ(e){let t=JSON.parse(e),r=aHe(t?.metadata?.version);return r===void 0?console.error("Loaded MVS does not contain valid version info."):r>(aHe(Qu.SupportedVersion)??0)&&console.warn(`Loaded MVS is of higher version (${t.metadata.version}) than currently supported version (${Qu.SupportedVersion}). Some features may not work as expected.`),t},toMVSJ(e,t){return JSON.stringify(e,void 0,t)},async toMVSX(e,t={}){let{assets:r,baseUri:n,skipExternal:o,cache:i}=t;e=ii(e);let a=["uri","url"],A=e.kind==="multiple"?e.snapshots.map(u=>u.root):[e.root];if(!r){r={},i??={};let u=jte(),g=new Set;for(let m of A)Xke(m,a,g);for(let m of g){if(o&&PUt(m))continue;let p=Kte(m,n,u),d=i[p]??=await c0({url:p,type:"binary"}).run();r[m]=d}}let s={},c=[],l=0;for(let u in r){let g=u.split("/").pop().replace(/[^\w\.+-]/g,"_").slice(0,64),m=`./assets/${l++}-${g}`;s[u]=m,c.push({name:m,content:r[u]})}for(let u of A)Zke(u,s,a);return await eke(e,c)},isValid(e,t={}){return Qu.validationIssues(e,t)===void 0},validationIssues(e,t={}){let r=e?.metadata?.version;if(typeof r!="string")return[`MVSData.metadata.version must be a string, not ${typeof r}: ${r}`];if(e.kind==="single"||e.kind===void 0)return AHe(e,t);if(e.kind==="multiple"){if(e.snapshots===void 0)return['"snapshots" missing in MVS'];let n=[];for(let o of e.snapshots){let i=AHe(o,t);i&&n.push(...i)}return n.length>0?n:void 0}else return[`MVSData.kind must be 'single' or 'multiple', not ${e.kind}`]},toPrettyString(e){let t=e.kind==="multiple"?"multiple states":"single state",r=e.metadata.title!==void 0?` "${e.metadata.title}"`:"",n=e.kind==="multiple"?e.snapshots.map((o,i)=>`[Snapshot #${i}]
|
|
${qL(o.root)}`).join(`
|
|
`):qL(e.root);return`MolViewSpec ${t}${r} (version ${e.metadata.version}, created ${e.metadata.timestamp}):
|
|
${n}`},createBuilder(){return $ke()},createMultistate(e,t){return{kind:"multiple",snapshots:[...e],metadata:ire.create(t)}},stateToStates(e){return{kind:"multiple",metadata:e.metadata,snapshots:[{metadata:{title:e.metadata.title,description:e.metadata.description,description_format:e.metadata.description_format,key:void 0,linger_duration_ms:1e3,transition_duration_ms:250},root:e.root}]}}};function aHe(e){if(typeof e=="string")return parseInt(e.split(".")[0]);if(typeof e=="number")return Math.floor(e);console.error(`Version should be a string, not ${typeof e}: ${e}`)}function AHe(e,t={}){if(e.root===void 0)return['"root" missing in snapshot'];let r=kx(yu,e.root,t),n="animation"in e&&e.animation!==void 0?kx(M1,e.animation,t):void 0;if(r&&n)return[...r,...n];if(r)return r;if(n)return n}function TUt(){return new Date().toISOString()}function PUt(e){try{return!!new URL(e).protocol}catch{return!1}}async function sHe(e){let t=e.name.toLowerCase()||"file",r=["jpg","jpeg","png","gif","webp"].some(s=>t.endsWith(`.${s}`)),n=["mp3","wav","ogg"].some(s=>t.endsWith(`.${s}`)),o="application/octet-stream";if(r){let s=t.split(".").pop()?.toLowerCase();s==="jpg"?o="image/jpeg":o=`image/${s}`}else if(n){let s=t.split(".").pop()?.toLowerCase();s==="mp3"?o="audio/mpeg":o=`audio/${s}`}let i=await e.arrayBuffer(),a=new FileReader;return a.readAsDataURL(new Blob([i],{type:o})),await new Promise((s,c)=>{a.onload=()=>s(a.result),a.onerror=()=>c(a.error)})}function rT(e){return h.Converted(cHe,GUt,h.Text(cHe(null),{...e,disableInteractiveUpdates:!0,placeholder:e?.placeholder??"null"}))}function GUt(e){let t=parseFloat(e);return isNaN(t)?null:t}function cHe(e){return e===null?"":e.toString()}function Are(e){return h.Converted(lHe,NUt,h.Text(lHe(null),{...e,placeholder:e?.placeholder??"null"}))}function NUt(e){return e===""?null:e}function lHe(e){return e===null?"":e}async function gHe(e){try{return{ok:!0,value:await e}}catch(t){return{ok:!1,error:t}}}var wB=class{constructor(){this._map=new Map}get(t){return this._map.get(t)}add(t,r){this._map.has(t)||this._map.set(t,[]),this._map.get(t).push(r)}},nT=class{constructor(t){this.limit=t;this.array=new Array(t),this.map=new Map}get(t){return 0<=t&&t<this.limit?this.array[t]:this.map.get(t)}set(t,r){0<=t&&t<this.limit?this.array[t]=r:this.map.set(t,r)}};function wn(e){return e!=null}function qE(...e){return e.some(wn)}function hO(e){return e.filter(t=>t!=null)}function uHe(e){return(Ob(e)>>>0).toString(16).padStart(8,"0")}function yO(e){let t=e.split("").reverse().join("");return uHe(e)+uHe(t)}function Ui(e){return typeof e=="number"?e:QC(e)}function mHe(e,t){let r={};for(let n of Object.keys(t)){let o=t[n],i=!1;for(let a of e)if(a.is(o)){i=!0;break}if(!(!i||!o.tags)){for(let a of o.tags)if(a.startsWith("mvs-ref:")){r[a.substring(8)]=o.data;break}}}return r}function dHe(e,t,r){if(t)for(let n of Object.keys(t)){let o=t[n],i=!1;for(let a of e)if(a.is(o)){i=!0;break}if(!(!i||!o.tags)){for(let a of o.tags)if(a.startsWith("mvs-ref:")&&a.substring(8)===r)return o}}}var sre={getGroup(e,t){return e.grouped.slice(e.offsets[t],e.offsets[t+1])},groupIndices(e,t){let r=0,n=new Map,o=[];for(let A=0;A<e.length;A++){let s=t(e[A],A);if(!wn(s))o.push(r++);else{let c=n.get(s);c===void 0?(n.set(s,r),o.push(r),r++):o.push(c)}}let i=Vc(e.length).sort((A,s)=>o[A]-o[s]),a=[];for(let A=0;A<e.length;A++)(A===0||o[i[A]]!==o[i[A-1]])&&a.push(A);return a.push(i.length),{count:a.length-1,offsets:a,grouped:i}}};var $E=class{constructor(t,r){this.defaultValue=r,this.options=Object.keys(t).map(n=>[n,t[n]]),this.nameDict=t}PDSelect(t,r){return h.Select(t??this.defaultValue,this.options,r)}prettyName(t){return this.nameDict[t]}get values(){return this.options.map(([t,r])=>t)}};var ja={count(e){return e.from.length},empty(){return{from:[],to:[]}},single(e,t){return{from:[e],to:[t]}},add(e,t,r){let n=ja.count(e);if(n>0){let o=e.to[n-1];if(t<o)throw new Error("Overlapping ranges not allowed");t===o?e.to[n-1]=r:(e.from.push(t),e.to.push(r))}else e.from.push(t),e.to.push(r);return e},foreach(e,t){let r=ja.count(e);for(let n=0;n<r;n++)t(e.from[n],e.to[n])},map(e,t){let r=ja.count(e),n=new Array(r);for(let o=0;o<r;o++)n[o]=t(e.from[o],e.to[o]);return n},union(e){let t=ja.empty();for(let i of e)i&&(_y(t.from,i.from),_y(t.to,i.to));let r=Vc(t.from.length).sort((i,a)=>t.from[i]-t.from[a]),n=ja.empty(),o=-1;for(let i of r){let a=t.from[i],A=t.to[i];o>=0&&a<=n.to[o]?A>n.to[o]&&(n.to[o]=A):(n.from.push(a),n.to.push(A),o++)}return n},selectElementsInRanges(e,t,r,n={}){r??=[],r.length=0,n.value=void 0;let o=e.length,i=ja.count(t);if(o<=i){let a=je.findPredecessorIndex(je.ofSortedArray(t.to),e[0]+1);for(let A=0;A<o;A++){let s=e[A];for(;a<i&&t.to[a]<=s;)a++;a<i&&t.from[a]<=s&&(r.push(s),n.value??=A)}}else for(let a=0;a<i;a++){let A=t.from[a],s=t.to[a];for(let c=je.findPredecessorIndex(e,A);c<o;c++){let l=e[c];if(l<s)r.push(l),n.value??=c;else break}}return r}};var QO={get(e){return e._dynamicPropertyData["indices-and-sortings"]??=this.create(e)},create(e){return{atomic:MUt(e),spheres:pHe(e.coarseHierarchy.spheres),gaussians:pHe(e.coarseHierarchy.gaussians)}}};function MUt(e){let t=e.atomicHierarchy,r=t.atoms._rowCount;if(r===0)return;let n=t.chains._rowCount,{label_entity_id:o,label_asym_id:i,auth_asym_id:a}=t.chains,{label_seq_id:A,auth_seq_id:s,pdbx_PDB_ins_code:c}=t.residues,{label_comp_id:l,auth_comp_id:u}=t.atoms,{Present:g}=K.ValueKind,m=new wB,p=new wB,d=new wB,f=new Map,I=new Map,C=new Map,y=new Map,Q=new Map,E=!0,b=new Map,x=!0,S=new nT(r+1),w=new nT(r),R=new Set,T=new Set;for(let v=0;v<n;v++){m.add(o.value(v),v),p.add(i.value(v),v),d.add(a.value(v),v);let U=t.residueAtomSegments.index[t.chainAtomSegments.offsets[v]],G=t.residueAtomSegments.index[t.chainAtomSegments.offsets[v+1]-1]+1,N=jB(Vc(U,G),M=>A.valueKind(M)===g);f.set(v,RB.create(N,A.value));let k=jB(Vc(U,G),M=>s.valueKind(M)===g);I.set(v,RB.create(k,s.value));let J=Vc(U,G);C.set(v,RB.create(J,t.residueSourceIndex.value));let H=new wB,z=new wB,_=new wB;for(let M=U;M<G;M++){c.valueKind(M)===g&&H.add(c.value(M),M);let q=t.residueAtomSegments.offsets[M],ne=t.residueAtomSegments.offsets[M+1];for(let oe=q;oe<ne;oe++)R.add(l.value(oe)),T.add(u.value(oe));R.size>1&&(E=!1),T.size>1&&(x=!1);for(let oe of R)z.add(oe,M);for(let oe of T)_.add(oe,M);R.clear(),T.clear()}y.set(v,H),Q.set(v,z),b.set(v,_)}let L=e.atomicConformation.atomId.value,F=t.atomSourceIndex.value;for(let v=0;v<r;v++)S.set(L(v),v),w.set(F(v),v);return{chainsByLabelEntityId:m,chainsByLabelAsymId:p,chainsByAuthAsymId:d,residuesSortedByLabelSeqId:f,residuesSortedByAuthSeqId:I,residuesSortedBySourceIndex:C,residuesByInsCode:y,residuesByLabelCompId:Q,residuesByLabelCompIdIsPure:E,residuesByAuthCompId:b,residuesByAuthCompIdIsPure:x,atomsById:S,atomsBySourceIndex:w}}function pHe(e){if(e.count===0)return;let{entity_id:t,asym_id:r,seq_id_begin:n,seq_id_end:o,chainElementSegments:i}=e,{Present:a}=K.ValueKind,A=Math.max(i.count,0),s=new wB,c=new wB,l=new Map,u={count:A,label_entity_id:new Array(A),label_asym_id:new Array(A)};for(let g=0;g<A;g++){let m=i.offsets[g],p=i.offsets[g+1],d=t.value(m),f=r.value(m);u.label_entity_id[g]=d,u.label_asym_id[g]=f,s.add(d,g),c.add(f,g);let I=jB(Vc(m,p),Q=>n.valueKind(Q)===a&&o.valueKind(Q)===a),C=RB.create(I,n.value),y=C.keys.map(o.value);for(let Q=1;Q<y.length;Q++)y[Q-1]>y[Q]&&(y[Q]=y[Q-1]);l.set(g,{...C,endUpperBounds:je.ofSortedArray(y)})}return{chains:u,chainsByEntityId:s,chainsByAsymId:c,elementsSortedBySeqIdBegin:l}}var RB={create(e,t){e2(e,(n,o)=>t(n)-t(o)||n-o);let r=je.ofSortedArray(e.map(t));return{keys:e,values:r}},getKeysWithValue(e,t){return RB.getKeysWithValueInRange(e,t,t)},getKeysWithValueInRange(e,t,r){let{keys:n,values:o}=e;if(!n)return[];let i=n.length,a=t!==void 0?je.findPredecessorIndex(o,t):0,A;if(r!==void 0)for(A=a;A<i&&o[A]<=r;)A++;else A=i;return n.slice(a,A)}};var{str:UB,int:cy}=K.Schema,fHe=new $E({whole_structure:"Whole Structure",entity:"Entity",chain:"Chain (label*)",auth_chain:"Chain (auth*)",residue:"Residue (label*)",auth_residue:"Residue (auth*)",residue_range:"Residue range (label*)",auth_residue_range:"Residue range (auth*)",atom:"Atom (label*)",auth_atom:"Atom (auth*)",all_atomic:"All atomic selectors"},"all_atomic");function cre(e){return ll(BHe,kUt[e])}var BHe={group_id:UB,label_entity_id:UB,label_asym_id:UB,auth_asym_id:UB,label_seq_id:cy,auth_seq_id:cy,pdbx_PDB_ins_code:UB,beg_label_seq_id:cy,end_label_seq_id:cy,beg_auth_seq_id:cy,end_auth_seq_id:cy,label_comp_id:UB,auth_comp_id:UB,residue_index:cy,label_atom_id:UB,auth_atom_id:UB,type_symbol:UB,atom_id:cy,atom_index:cy,instance_id:UB},kUt={whole_structure:["group_id"],entity:["group_id","label_entity_id"],chain:["group_id","label_entity_id","label_asym_id"],auth_chain:["group_id","auth_asym_id"],residue:["group_id","label_entity_id","label_asym_id","label_seq_id","residue_index"],auth_residue:["group_id","auth_asym_id","auth_seq_id","pdbx_PDB_ins_code","residue_index"],residue_range:["group_id","label_entity_id","label_asym_id","beg_label_seq_id","end_label_seq_id"],auth_residue_range:["group_id","auth_asym_id","beg_auth_seq_id","end_auth_seq_id"],atom:["group_id","label_entity_id","label_asym_id","label_seq_id","residue_index","label_atom_id","type_symbol","atom_id","atom_index"],auth_atom:["group_id","auth_asym_id","auth_seq_id","pdbx_PDB_ins_code","residue_index","auth_atom_id","type_symbol","atom_id","atom_index"],all_atomic:Object.keys(BHe)};var eb=[];function lre(e,t,r,n){if(!n.atomic||wn(e.instance_id)&&e.instance_id!==r)return;let o=n.atomic,i=t.atomicHierarchy,a=i.atoms._rowCount;if(a===0)return;let A=qE(e.atom_id,e.atom_index),s=qE(e.label_atom_id,e.auth_atom_id,e.type_symbol)||wn(e.label_comp_id)&&!o.residuesByLabelCompIdIsPure||wn(e.auth_comp_id)&&!o.residuesByAuthCompIdIsPure,c=qE(e.label_seq_id,e.auth_seq_id,e.pdbx_PDB_ins_code,e.beg_label_seq_id,e.end_label_seq_id,e.beg_auth_seq_id,e.end_auth_seq_id,e.label_comp_id,e.auth_comp_id,e.residue_index),l=qE(e.label_asym_id,e.auth_asym_id,e.label_entity_id);if(A){let d=YUt(t,e,o);return d!==void 0?ja.single(d,d+1):void 0}if(!l&&!c&&!s)return ja.single(0,a);let u=HUt(t,e,o);if(!c&&!s){let d=i.chainAtomSegments.offsets,f=ja.empty();for(let I of u)ja.add(f,d[I],d[I+1]);return f}let g=VUt(t,e,o,u);if(!s){let d=i.residueAtomSegments.offsets,f=ja.empty();for(let I of g)ja.add(f,d[I],d[I+1]);return f}let m=_Ut(t,e,o,g),p=ja.empty();for(let d of m)ja.add(p,d,d+1);return p}function hHe(e,t,r,n){return ja.union(e.map(o=>lre(o,t,r,n)))}function HUt(e,t,r){let{auth_asym_id:n,label_entity_id:o,_rowCount:i}=e.atomicHierarchy.chains,a;return wn(t.label_asym_id)&&(a=r.chainsByLabelAsymId.get(t.label_asym_id)??eb),wn(t.auth_asym_id)&&(a?a=a.filter(A=>n.value(A)===t.auth_asym_id):a=r.chainsByAuthAsymId.get(t.auth_asym_id)??eb),wn(t.label_entity_id)&&(a?a=a.filter(A=>o.value(A)===t.label_entity_id):a=r.chainsByLabelEntityId.get(t.label_entity_id)??eb),a??=Vc(i),a}function VUt(e,t,r,n){let{label_seq_id:o,auth_seq_id:i,pdbx_PDB_ins_code:a}=e.atomicHierarchy.residues,{label_comp_id:A,auth_comp_id:s}=e.atomicHierarchy.atoms,{residueAtomSegments:c,chainAtomSegments:l,residueSourceIndex:u}=e.atomicHierarchy,{Present:g}=K.ValueKind,m=[];for(let p of n){let d;if(wn(t.label_seq_id)){let f=r.residuesSortedByLabelSeqId.get(p);d=RB.getKeysWithValue(f,t.label_seq_id)}if(wn(t.auth_seq_id))if(d)d=d.filter(f=>i.valueKind(f)===g&&i.value(f)===t.auth_seq_id);else{let f=r.residuesSortedByAuthSeqId.get(p);d=RB.getKeysWithValue(f,t.auth_seq_id)}if(wn(t.residue_index))if(d)d=d.filter(f=>u.value(f)===t.residue_index);else{let f=r.residuesSortedBySourceIndex.get(p);d=RB.getKeysWithValue(f,t.residue_index)}if(wn(t.pdbx_PDB_ins_code)&&(d?d=d.filter(f=>a.value(f)===t.pdbx_PDB_ins_code):d=r.residuesByInsCode.get(p).get(t.pdbx_PDB_ins_code)??eb),wn(t.beg_label_seq_id)||wn(t.end_label_seq_id))if(d)wn(t.beg_label_seq_id)&&(d=d.filter(f=>o.valueKind(f)===g&&o.value(f)>=t.beg_label_seq_id)),wn(t.end_label_seq_id)&&(d=d.filter(f=>o.valueKind(f)===g&&o.value(f)<=t.end_label_seq_id));else{let f=r.residuesSortedByLabelSeqId.get(p);d=RB.getKeysWithValueInRange(f,t.beg_label_seq_id,t.end_label_seq_id)}if(wn(t.beg_auth_seq_id)||wn(t.end_auth_seq_id))if(d)wn(t.beg_auth_seq_id)&&(d=d.filter(f=>i.valueKind(f)===g&&i.value(f)>=t.beg_auth_seq_id)),wn(t.end_auth_seq_id)&&(d=d.filter(f=>i.valueKind(f)===g&&i.value(f)<=t.end_auth_seq_id));else{let f=r.residuesSortedByAuthSeqId.get(p);d=RB.getKeysWithValueInRange(f,t.beg_auth_seq_id,t.end_auth_seq_id)}if(wn(t.label_comp_id)&&(d?r.residuesByLabelCompIdIsPure?d=d.filter(f=>A.value(c.offsets[f])===t.label_comp_id):d=d.filter(f=>{for(let I=c.offsets[f],C=c.offsets[f+1];I<C;I++)if(A.value(I)===t.label_comp_id)return!0}):d=r.residuesByLabelCompId.get(p).get(t.label_comp_id)??eb),wn(t.auth_comp_id)&&(d?r.residuesByAuthCompIdIsPure?d=d.filter(f=>s.value(c.offsets[f])===t.auth_comp_id):d=d.filter(f=>{for(let I=c.offsets[f],C=c.offsets[f+1];I<C;I++)if(s.value(I)===t.auth_comp_id)return!0}):d=r.residuesByAuthCompId.get(p).get(t.auth_comp_id)??eb),!d){let f=c.index[l.offsets[p]],I=c.index[l.offsets[p+1]-1]+1;d=Vc(f,I)}_y(m,d)}return e2(m,(p,d)=>p-d),m}function _Ut(e,t,r,n){let{label_atom_id:o,auth_atom_id:i,type_symbol:a,label_comp_id:A,auth_comp_id:s}=e.atomicHierarchy.atoms,c=e.atomicHierarchy.residueAtomSegments.offsets,l=[];for(let u of n){let g=Vc(c[u],c[u+1]);wn(t.label_atom_id)&&jB(g,m=>o.value(m)===t.label_atom_id),wn(t.auth_atom_id)&&jB(g,m=>i.value(m)===t.auth_atom_id),wn(t.type_symbol)&&jB(g,m=>a.value(m)===t.type_symbol?.toUpperCase()),wn(t.label_comp_id)&&!r.residuesByLabelCompIdIsPure&&jB(g,m=>A.value(m)===t.label_comp_id),wn(t.auth_comp_id)&&!r.residuesByAuthCompIdIsPure&&jB(g,m=>s.value(m)===t.auth_comp_id),_y(l,g)}return l}function YUt(e,t,r){let n;if(!wn(t.atom_id)&&!wn(t.atom_index))throw new Error("ArgumentError: at least one of row.atom_id, row.atom_index must be defined.");if(wn(t.atom_id)&&wn(t.atom_index)){let o=r.atomsById.get(t.atom_id),i=r.atomsBySourceIndex.get(t.atom_index);if(o!==i)return;n=o}if(wn(t.atom_id)&&(n=r.atomsById.get(t.atom_id)),wn(t.atom_index)&&(n=r.atomsBySourceIndex.get(t.atom_index)),n!==void 0&&OUt(e,n,t))return n}function OUt(e,t,r){let n=e.atomicHierarchy,o=n.chainAtomSegments.index[t],i=n.chains.label_asym_id.value(o),a=n.chains.auth_asym_id.value(o),A=n.chains.label_entity_id.value(o);if(!Om(r.label_asym_id,i)||!Om(r.auth_asym_id,a)||!Om(r.label_entity_id,A))return!1;let s=n.residueAtomSegments.index[t],c=n.residues.label_seq_id.valueKind(s)===K.ValueKind.Present?n.residues.label_seq_id.value(s):void 0,l=n.residues.auth_seq_id.valueKind(s)===K.ValueKind.Present?n.residues.auth_seq_id.value(s):void 0,u=n.residues.pdbx_PDB_ins_code.value(s),g=n.residueSourceIndex.value(s);if(!Om(r.label_seq_id,c)||!Om(r.auth_seq_id,l)||!Om(r.pdbx_PDB_ins_code,u)||!IHe(r.beg_label_seq_id,r.end_label_seq_id,c)||!IHe(r.beg_auth_seq_id,r.end_auth_seq_id,l)||!Om(r.residue_index,g))return!1;let m=n.atoms.label_comp_id.value(t),p=n.atoms.auth_comp_id.value(t),d=n.atoms.label_atom_id.value(t),f=n.atoms.auth_atom_id.value(t),I=n.atoms.type_symbol.value(t),C=e.atomicConformation.atomId.value(t),y=n.atomSourceIndex.value(t);return!(!Om(r.label_comp_id,m)||!Om(r.auth_comp_id,p)||!Om(r.label_atom_id,d)||!Om(r.auth_atom_id,f)||!Om(r.type_symbol?.toUpperCase(),I)||!Om(r.atom_id,C)||!Om(r.atom_index,y))}function Om(e,t){return!wn(e)||t===e}function IHe(e,t,r){return!(wn(e)&&(!wn(r)||r<e)||wn(t)&&(!wn(r)||r>t))}function ure(e,t,r,n){if(n.spheres&&!(wn(e.instance_id)&&e.instance_id!==r))return EHe(e,t.coarseHierarchy.spheres,n.spheres)}function yHe(e,t,r,n){return ja.union(e.map(o=>ure(o,t,r,n)))}function gre(e,t,r,n){if(n.gaussians&&!(wn(e.instance_id)&&e.instance_id!==r))return EHe(e,t.coarseHierarchy.gaussians,n.gaussians)}function QHe(e,t,r,n){return ja.union(e.map(o=>gre(o,t,r,n)))}function EHe(e,t,r){let n=t.count;if(n===0)return;let o=qE(e.label_seq_id,e.beg_label_seq_id,e.end_label_seq_id),i=qE(e.label_asym_id,e.label_entity_id);if(qE(e.auth_asym_id,e.auth_seq_id,e.pdbx_PDB_ins_code,e.beg_auth_seq_id,e.end_auth_seq_id,e.label_comp_id,e.auth_comp_id,e.residue_index,e.label_atom_id,e.auth_atom_id,e.type_symbol,e.atom_id,e.atom_index)){KUt();return}if(!i&&!o)return ja.single(0,n);let A=JUt(t,e,r);if(!o){let l=t.chainElementSegments.offsets,u=ja.empty();for(let g of A)ja.add(u,l[g],l[g+1]);return u}let s=zUt(t,e,r,A),c=ja.empty();for(let l of s)ja.add(c,l,l+1);return c}function JUt(e,t,r){let n;return wn(t.label_asym_id)&&(n=r.chainsByAsymId.get(t.label_asym_id)??eb),wn(t.label_entity_id)&&(n?n=n.filter(o=>e.entity_id.value(e.chainElementSegments.offsets[o])===t.label_entity_id):n=r.chainsByEntityId.get(t.label_entity_id)??eb),n??=Vc(e.chainElementSegments.count),n}function zUt(e,t,r,n){let o=[];for(let i of n){let a=r.elementsSortedBySeqIdBegin.get(i),A=Math.max(t.label_seq_id??-1/0,t.beg_label_seq_id??-1/0),s=Math.min(t.label_seq_id??1/0,t.end_label_seq_id??1/0),c=je.findPredecessorIndex(a.endUpperBounds,A),l=je.findPredecessorIndex(a.values,s+1);for(let u=c;u<l;u++){let g=a.keys[u];e.seq_id_end.value(g)>=A&&o.push(g)}}return e2(o,(i,a)=>i-a),o}var CHe=!1;function KUt(){CHe||(console.warn("Using unsupported selector fields (auth_asym_id, auth_seq_id, pdbx_PDB_ins_code, beg_auth_seq_id, end_auth_seq_id, label_comp_id, auth_comp_id, residue_index, label_atom_id, auth_atom_id, type_symbol, atom_id, atom_index) on a coarse structure. The resulting selection will be empty."),CHe=!0)}function EO(e){return W.Schema.toExpression(e)}function V1(e){return W.Schema.toExpression({items:e})}var jUt=new $E({json:"json",cif:"cif",bcif:"bcif"},"json"),WUt={json:"string",cif:"string",bcif:"binary"},mre={annotations:h.ObjectList({source:h.MappedStatic("source-cif",{"source-cif":h.EmptyGroup(),url:h.Group({url:h.Text(""),format:jUt.PDSelect()})}),schema:fHe.PDSelect(),cifBlock:h.MappedStatic("index",{index:h.Group({index:h.Numeric(0,{min:0,step:1},{description:"0-based index of the block"})}),header:h.Group({header:h.Text(void 0,{description:"Block header"})})},{description:"Specify which CIF block contains annotation data (only relevant when format=cif or format=bcif)"}),cifCategory:Are({placeholder:"Take first category",description:"Specify which CIF category contains annotation data (only relevant when format=cif or format=bcif)"}),fieldRemapping:h.ObjectList({standardName:h.Text("",{placeholder:" ",description:"Standard name of the selector field (e.g. label_asym_id)"}),actualName:Are({placeholder:"Ignore field",description:"Actual name of the field in the annotation data (e.g. spam_chain_id), null to ignore the field with standard name"})},e=>`"${e.standardName}": ${e.actualName===null?"null":`"${e.actualName}"`}`,{description:'Optional remapping of annotation field names { standardName1: actualName1, ... }. Use { "label_asym_id": "X" } to load actual field "X" as "label_asym_id". Use { "label_asym_id": null } to ignore actual field "label_asym_id". Fields not mentioned here are mapped implicitely (i.e. actual name = standard name).'}),id:h.Text("",{description:"Arbitrary identifier that can be referenced by MVSAnnotationColorTheme"})},e=>e.id)},ly=DA.createProvider({label:"MVS Annotations",descriptor:{name:"mvs-annotations"},type:"static",defaultParams:mre,getParams:e=>mre,isApplicable:e=>!0,obtain:async(e,t,r)=>{r={...h.getDefaultValues(mre),...r};let n=r.annotations??[];return{value:await pre.fromSpecs(e,n,t)}}}),pre=class e{constructor(t){this.dict=t}static async fromSpecs(t,r,n){let o=r.map(xHe),i=await aLt(t,o,n),a={};for(let A=0;A<r.length;A++){let s=r[A];try{let c=i[A];if(!c.ok)throw c.error;a[s.id]=await bO.fromSpec(t,s,c.value)}catch(c){t.errorContext?.add("mvs",`Failed to obtain annotation (${c}).
|
|
Annotation specification source params: ${JSON.stringify(s.source.params)}`),console.error(`Failed to obtain annotation (${c}).
|
|
Annotation specification:`,s),a[s.id]=bO.createEmpty(s.schema)}}return new e(a)}getAnnotation(t){return this.dict[t]}getAllAnnotations(){return Object.values(this.dict)}};function _1(e,t){let r=e.isEmpty?[]:e.models;for(let n of r)if(n.customProperties.has(ly.descriptor)){let i=ly.get(n).value?.getAnnotation(t);if(i)return{annotation:i,model:n}}return{annotation:void 0,model:void 0}}function XUt(e,t){return t===ge.Kind.Atomic?e.atoms:t===ge.Kind.Spheres?e.spheres:t===ge.Kind.Gaussians?e.gaussians:(console.warn(`Unknown Unit.Kind value: ${t}`),null)}var bO=class e{constructor(t,r,n){this.data=t;this.schema=r;this.fieldRemapping=n;this._indexedModels=new Map;this._rows=void 0;this._hasInstanceIds=void 0;this.nRows=$Ut(t)}static async fromSpec(t,r,n){n??=await bHe(t,xHe(r));let o;switch(n.format){case"json":o=n;break;case"cif":if(n.data.blocks.length===0)throw new Error("No block in CIF");let i=r.cifBlock,a;switch(i.name){case"header":let c=n.data.blocks.find(l=>l.header===i.params.header);if(!c)throw new Error(`CIF block with header "${i.params.header}" not found`);a=c;break;case"index":if(a=n.data.blocks[i.params.index],!a)throw new Error(`CIF block with index ${i.params.index} not found`);break}let A=r.cifCategory??Object.keys(a.categories)[0];if(!A)throw new Error("There are no categories in CIF block");let s=a.categories[A];if(!s)throw new Error(`CIF category "${A}" not found`);o={format:"cif",data:s};break}return new e(o,r.schema,Object.fromEntries(r.fieldRemapping.map(i=>[i.standardName,i.actualName])))}static createEmpty(t){return new e({format:"json",data:[]},t,{})}getValueForLocation(t,r){let n=this.getIndexedModel(t.unit.model,t.unit.conformation.operator.instanceId),o=XUt(n,t.unit.kind),i=o?o[t.element]:-1;return this.getValueForRow(i,r)}getValueForRow(t,r){if(!(t<0))switch(this.data.format){case"json":let n=ZUt(t,r,this.data.data);return n===void 0||typeof n=="string"?n:`${n}`;case"cif":return qUt(t,r,this.data.data)}}getIndexedModel(t,r){let n=this.hasInstanceIds()?`${t.id}:${r}`:t.id;if(!this._indexedModels.has(n)){let o=this.getRowForEachAtom(t,r);this._indexedModels.set(n,o)}return this._indexedModels.get(n)}getRowForEachAtom(t,r){let n=QO.get(t),o=t.atomicHierarchy.atoms._rowCount,i=t.coarseHierarchy.spheres.count,a=t.coarseHierarchy.gaussians.count,A=null,s=null,c=null,l=this.getRows();for(let u=0,g=l.length;u<g;u++){let m=l[u],p=lre(m,t,r,n);A=dre(A,o,p,u);let d=ure(m,t,r,n);s=dre(s,i,d,u);let f=gre(m,t,r,n);c=dre(c,a,f,u)}return{atoms:A,spheres:s,gaussians:c}}getRows(){return this._rows??=this._getRows()}_getRows(){switch(this.data.format){case"json":return rLt(this.data.data,this.schema,this.fieldRemapping);case"cif":return nLt(this.data.data,this.schema,this.fieldRemapping)}}hasInstanceIds(){return this._hasInstanceIds??=this.getRows().some(t=>wn(t.instance_id))}getDistinctValuesInField(t,r){let n=new Set,o=[];for(let i=0;i<this.nRows;i++){let a=this.getValueForRow(i,t);r&&(a=a?.toUpperCase()),a!==void 0&&!n.has(a)&&(n.add(a),o.push(a))}return o}};function ZUt(e,t,r){let n=r;return Array.isArray(n)?(n[e]??{})[t]:(n[t]??[])[e]}function qUt(e,t,r){let n=r.getField(t);if(n&&n.valueKind(e)===K.ValueKind.Present)return n.str(e)}function $Ut(e){switch(e.format){case"json":return eLt(e.data);case"cif":return tLt(e.data)}}function eLt(e){let t=e;if(Array.isArray(t))return t.length;{let r=Object.keys(t);return r.length>0?t[r[0]].length:0}}function tLt(e){return e.rowCount}function rLt(e,t,r){let n=e,o=cre(t),i=Object.keys(o);if(Array.isArray(n))return n.map(a=>iz(a,i,r));{let a=iz(n,i,r);return az(a)}}function nLt(e,t,r){let n=cre(t),o=Object.keys(n),i={};for(let a of o){let A=r[a];if(A===null)continue;A===void 0&&(A=a);let s=oLt(e,A,n[a]);s&&(i[a]=s)}return Object.keys(i).length===0?new Array(e.rowCount).fill({}):az(i)}function oLt(e,t,r){if(e.getField(t)===void 0)return;let o=om({[t]:r},e)[t];return iLt(o)}function iLt(e){let t=e.rowCount,r=K.ValueKind.Present,n=new Array(t);for(let o=0;o<t;o++)n[o]=e.valueKind(o)===r?e.value(o):void 0;return n}async function bHe(e,t,r){switch(t.kind){case"source-cif":return{format:"cif",data:ALt(r)};case"url":let n=gn.getUrlAsset(e.assetManager,t.url),o=WUt[t.format],a=(await e.assetManager.resolve(n,o).runInContext(e.runtime)).data;if(!a)throw new Error("Missing data");switch(t.format){case"json":return{format:"json",data:JSON.parse(a)};case"cif":case"bcif":let s=await Kc.parse(a).run();if(s.isError)throw new Error(`Failed to parse ${t.format}`);return{format:"cif",data:s.result}}}}async function aLt(e,t,r){let n={};for(let i of t){let a=WC(i);n[a]??=gHe(bHe(e,i,r))}let o=await Gce(n);return t.map(i=>o[WC(i)])}function ALt(e){if(e&&sn.is(e.sourceData)){if(e.sourceData.data.file)return e.sourceData.data.file;{let t=e.sourceData.data.frame,r=$b(Array.from(t.categoryNames),t.categories,t.header);return qb([r])}}else return console.warn("Could not get CifFile from Model, returning empty CifFile"),qb([])}function xHe(e){switch(e.source.name){case"url":return{kind:"url",...e.source.params};case"source-cif":return{kind:"source-cif"}}}function dre(e,t,r,n){if(!r||ja.count(r)===0)return e;let o=e??Array(t).fill(-1);return ja.foreach(r,(i,a)=>o.fill(n,i,a)),o}var SHe={isMvs:h.Boolean(!1,{description:"Flag this model as managed by MolViewSpec and enable MolViewSpec features"})},Y1=DA.createProvider({label:"MVS",descriptor:{name:"mvs-is-mvs-model"},type:"static",defaultParams:SHe,getParams:e=>SHe,isApplicable:e=>!0,obtain:async(e,t,r)=>({value:{}})});function sLt(e){return!!Y1.props(e)?.isMvs}function tb(e){return e.models.some(sLt)}var cLt={colors:h.MappedStatic("list",{list:h.ColorList("category-10",{description:"List of colors.",presetKind:"set"}),dictionary:h.ObjectList({value:h.Text(),color:h.Color(xt.white)},e=>`${e.value}: ${ke.toHexStyle(e.color)}`,{description:"Mapping of annotation values to colors."})}),repeatColorList:h.Boolean(!1,{hideIf:e=>e.colors.name!=="list",description:"Repeat color list once all colors are depleted (only applies if `colors` is a list)."}),sort:h.Select("none",[["none","None"],["lexical","Lexical"],["numeric","Numeric"]],{hideIf:e=>e.colors.name!=="list",description:"Sort actual annotation values before assigning colors from a list (none = take values in order of their first occurrence)."}),sortDirection:h.Select("ascending",[["ascending","Ascending"],["descending","Descending"]],{hideIf:e=>e.colors.name!=="list",description:"Sort direction."}),caseInsensitive:h.Boolean(!1,{description:"Treat annotation values as case-insensitive strings."}),setMissingColor:h.Boolean(!1,{description:"Allow setting a color for missing values."}),missingColor:h.Color(xt.white,{hideIf:e=>!e.setMissingColor,description:"Color to use when (a) `colors` is a dictionary and given key is not present, or (b) `color` is a list and there are more actual annotation values than listed colors and `repeat_color_list` is not true."})},lLt={colors:h.ObjectList({color:h.Color(xt.white),fromValue:h.Numeric(-1/0),toValue:h.Numeric(1/0)},e=>`${ke.toHexStyle(e.color)} [${e.fromValue}, ${e.toValue}]`,{description:"Mapping of annotation value ranges to colors."}),mode:h.Select("normalized",[["normalized","Normalized"],["absolute","Absolute"]],{description:"Defines whether the annotation values should be normalized before assigning color based on checkpoints in `colors` (`x_normalized = (x - x_min) / (x_max - x_min)`, where `[x_min, x_max]` are either `value_domain` if provided, or the lowest and the highest value encountered in the annotation)."}),xMin:rT({hideIf:e=>e.mode!=="normalized",placeholder:"auto",description:'Defines `x_min` for normalization of annotation values. If not provided, minimum of the actual values will be used. Only used when `mode` is `"normalized"'}),xMax:rT({hideIf:e=>e.mode!=="normalized",placeholder:"auto",description:'Defines `x_max` for normalization of annotation values. If not provided, maximum of the actual values will be used. Only used when `mode` is `"normalized"'})},uLt={colors:h.ColorList("yellow-green",{description:"List of colors, with optional checkpoints.",presetKind:"scale",offsets:!0}),mode:h.Select("normalized",[["normalized","Normalized"],["absolute","Absolute"]],{description:"Defines whether the annotation values should be normalized before assigning color based on checkpoints in `colors` (`x_normalized = (x - x_min) / (x_max - x_min)`, where `[x_min, x_max]` are either `value_domain` if provided, or the lowest and the highest value encountered in the annotation)."}),xMin:rT({hideIf:e=>e.mode!=="normalized",placeholder:"auto",description:'Defines `x_min` for normalization of annotation values. If not provided, minimum of the actual values will be used. Only used when `mode` is `"normalized"'}),xMax:rT({hideIf:e=>e.mode!=="normalized",placeholder:"auto",description:'Defines `x_max` for normalization of annotation values. If not provided, maximum of the actual values will be used. Only used when `mode` is `"normalized"'}),setUnderflowColor:h.Boolean(!1,{description:"Allow setting a color for values below the lowest checkpoint."}),underflowColor:h.Color(xt.white,{hideIf:e=>!e.setUnderflowColor,description:"Color for values below the lowest checkpoint."}),setOverflowColor:h.Boolean(!1,{description:"Allow setting a color for values above the highest checkpoint."}),overflowColor:h.Color(xt.white,{hideIf:e=>!e.setOverflowColor,description:"Color for values above the highest checkpoint."})},DHe={annotationId:h.Text("",{description:'Reference to "Annotation" custom model property'}),fieldName:h.Text("color",{description:"Annotation field (column) from which to take color values"}),background:h.Color(xt.gainsboro,{description:"Color for elements without annotation"}),palette:h.MappedStatic("direct",{direct:h.EmptyGroup(),categorical:h.Group(cLt),discrete:h.Group(lLt),continuous:h.Group(uLt)})};function vHe(e,t){let r=()=>t.background;if(e.structure&&!e.structure.isEmpty){let{annotation:n}=_1(e.structure,t.annotationId);if(n){let o=gLt(t.palette,n,t.fieldName),i=A=>{let s=n?.getValueForLocation(A,t.fieldName);return(s!==void 0?o(s):void 0)??t.background},a=W.Location.create(e.structure);r=A=>W.Location.is(A)?i(A):Et.isLocation(A)?(a.unit=A.aUnit,a.element=A.aUnit.elements[A.aIndex],i(a)):t.background}else console.error(`Annotation source "${t.annotationId}" not present`)}return{factory:vHe,granularity:"groupInstance",preferSmoothing:!1,color:r,props:t,description:"Assigns colors based on custom MolViewSpec annotation data."}}var xO={name:"mvs-annotation",label:"MVS Annotation",category:"Miscellaneous",factory:vHe,getParams:e=>DHe,defaultValues:h.getDefaultValues(DHe),isApplicable:e=>!!e.structure&&tb(e.structure)};function gLt(e,t,r){if(e.name==="direct")return Ui;if(e.name==="categorical")return mLt(e.params,t,r);if(e.name==="discrete")return dLt(e.params,t,r);if(e.name==="continuous")return pLt(e.params,t,r);throw new Error(`NotImplementedError: makePaletteFunction for ${e.name}`)}function mLt(e,t,r){let n={};if(e.colors.name==="dictionary")for(let{value:i,color:a}of e.colors.params){let A=e.caseInsensitive?i.toUpperCase():i;n[A]=a}else if(e.colors.name==="list"){let i=t.getDistinctValuesInField(r,e.caseInsensitive);e.sort==="lexical"?i.sort():e.sort==="numeric"&&i.sort((s,c)=>Number.parseFloat(s)-Number.parseFloat(c)),e.sortDirection==="descending"&&i.reverse();let a=e.colors.params.colors.map(ke.fromColorListEntry),A=0;for(let s of i)n[s]=a[A++],A>=a.length&&e.repeatColorList&&(A=0)}let o=e.setMissingColor?e.missingColor:void 0;return e.caseInsensitive?i=>n[i.toUpperCase()]??o:i=>n[i]??o}function dLt(e,t,r){if(e.colors.length===0)return()=>{};let n=FHe(e,t,r);return o=>{let i=parseFloat(o);if(isNaN(i))return;let a=n(i);for(let A=e.colors.length-1;A>=0;A--){let{color:s,fromValue:c,toValue:l}=e.colors[A];if(c<=a&&a<=l)return s}}}function pLt(e,t,r){let{colors:n,checkpoints:o}=fre(e);if(n.length===0)return()=>{};let i=FHe(e,t,r),a=e.setUnderflowColor?e.underflowColor:void 0,A=e.setOverflowColor?e.overflowColor:void 0;return s=>{let c=parseFloat(s);if(isNaN(c))return;let l=i(c),u=je.findPredecessorIndex(o,l);if(u===0)return l===o[0]?n[0]:a;if(u===o.length)return A;let g=(l-o[u-1])/(o[u]-o[u-1]);return ke.interpolate(n[u-1],n[u],g)}}function FHe(e,t,r){if(e.mode==="normalized"){let n=e.xMin,o=e.xMax;if(n===null||o===null){let i=t.getDistinctValuesInField(r,!1).map(parseFloat).filter(a=>!isNaN(a));i.length>0?(n??=i.reduce((a,A)=>a<A?a:A),o??=i.reduce((a,A)=>a>A?a:A)):(n??=0,o??=1)}return n===o?i=>i<n?-.5:i===n?.5:1.5:i=>(i-n)/(o-n)}else return n=>n}function fre(e){if(e.colors.colors.every(t=>Array.isArray(t))){let t=e.colors.colors.sort((o,i)=>o[1]-i[1]),r=t.map(ke.fromColorListEntry),n=je.ofSortedArray(t.map(o=>o[1]));return{colors:r,checkpoints:n}}else{let t=e.colors.colors.map(ke.fromColorListEntry),r=t.length-1,n=je.ofSortedArray(t.map((o,i)=>i/r));return{colors:t,checkpoints:n}}}function SO(e){let{n:t,varNames:r,varFormats:n,literals:o}=fLt(e),i;return{fstring:e,format(a){let A=i??=[];A.length=0;for(let s=0;s<t;s++){A.push(o[s]);let c=a(r[s]);if(c===void 0)return;A.push(hLt(c,n[s]))}return A.push(o[t]),A.join("")}}}function fLt(e){let t=[],r=[],n=[],o=0;for(let i=0;i<e.length;i++){let a=e[i];if(o>=0){if(a==="{")e[i+1]==="{"?i++:(t.push(e.slice(o,i).replace(/{{/g,"{").replace(/}}/g,"}")),o=-(i+1));else if(a==="}")if(e[i+1]==="}")i++;else throw new Error('ValueError: Invalid format template (unmatched "}")')}else{if(a==="{")throw new Error('ValueError: Invalid format template ("{" within tag)');if(a==="}"){let[A,s]=BLt(e.slice(-o,i));r.push(A),n.push(s),o=i+1}}}if(o<0)throw new Error('ValueError: Invalid format template (unmatched "{")');return t.push(e.slice(o,e.length).replace(/{{/g,"{").replace(/}}/g,"}")),{n:r.length,varNames:r,varFormats:n,literals:t}}function BLt(e){let t=e.indexOf(":");t<0&&(t=e.length);let r=e.slice(0,t),n=e.slice(t+1,void 0);return[r,wHe(n)]}var ILt=/^(?:(?<fill>.?)(?<align>[<>=^]))?(?<sign>[-+ ]?)(?<z>z?)(?<alt>#?)(?<zeros>0?)(?<width>\d*)(?<grouping>[,_]?)\.?(?<precision>\d*)(?<type>[bdeEfFgGnoxX%cs]?)$/,CLt=["b","d","e","E","f","F","g","G","n","o","x","X","%","c","s"];function wHe(e){let t=e.match(ILt);if(!t||!t.groups)throw new Error(`ValueError: Invalid formatting "${e}"`);let r=t.groups.type||"s",n=r!=="s"&&r!=="c",o=t.groups.sign,i=t.groups.z,a=t.groups.alt,A=t.groups.zeros,s=Number(t.groups.width),c=t.groups.grouping,l=t.groups.precision?Number(t.groups.precision):6,u=t.groups.fill||A||" ",g=t.groups.align||(n?A?"=":"<":">");return{type:r,sign:o,z:i,alt:a,zeros:A,width:s,grouping:c,precision:l,fillChar:u,align:g}}function hLt(e,t){if(typeof t=="string"&&(t=wHe(t)),t.z)throw new Error('NotImplementedError: Formatting option "z" not supported');if(t.alt)throw new Error('NotImplementedError: Formatting option "#" not supported');return QLt(yLt(e,t.sign,t.grouping,t.precision,t.type),t.width,t.align,t.fillChar)}function yLt(e,t,r,n,o){let i="";switch(o){case"s":return e;case"c":return String.fromCharCode(Number(e));case"d":i=`${Math.floor(Number(e))}`;break;case"f":case"F":i=Number(e).toFixed(n);break;case"e":case"E":i=Number(e).toExponential(n).replace(/(e[+-])(\d)$/,"$10$2"),o==="E"&&(i=i.replace("e","E"));break;case"%":i=`${(100*Number(e)).toFixed(n)}%`;break;default:throw CLt.includes(o)?new Error(`NotImplementedError: Formatting code "${o}" not supported`):new Error(`ValueError: Invalid format code "${o}"`)}if(r===","){let a=i.match(/(-?\d+)(.*)/);a&&(i=a[1].replace(/\B(?=(\d{3})+(?!\d))/g,",")+a[2])}return t==="+"&&i[0]!=="-"&&(i="+"+i),t===" "&&i[0]!=="-"&&(i=" "+i),i}function QLt(e,t,r,n){switch(r){case"<":return e.padEnd(t,n);case">":return e.padStart(t,n);case"=":return e.startsWith("+")||e.startsWith("-")||e.startsWith(" ")?e[0]+e.slice(1,void 0).padStart(t-1,n):e.padStart(t,n);case"^":let o=Math.max(0,Math.floor((t-e.length)/2));return e.padStart(e.length+o,n).padEnd(t,n)}}var iT=B(),DO=[],oT=new qi("98"),RHe=[],UHe={},Bre=class{constructor(t){this.rows=t;this.cache={};this.hasOperators=t.some(r=>wn(r.instance_id))}get(t){let r=t.conformation.operator.instanceId,n=`${t.model.id}:${t.kind}:${this.hasOperators?r:"*"}`;return this.cache[n]??=this.compute(t)}compute(t){let r=t.conformation.operator.instanceId,n=QO.get(t.model);switch(t.kind){case ge.Kind.Atomic:return hHe(this.rows,t.model,r,n);case ge.Kind.Spheres:return yHe(this.rows,t.model,r,n);case ge.Kind.Gaussians:return QHe(this.rows,t.model,r,n)}}},ELt=8;function vO(e,t,r){let n=W.Location.create(e),{units:o}=e,{type_symbol:i}=Ke.atom;DO.length=0;let a=0,A=0,s,c,l=new Bre(t);for(let u=0,g=o.length;u<g;u++){let m=o[u];if(r&&m.model.id!==r.id)continue;let p=m.kind===ge.Kind.Spheres?m.model.coarseHierarchy.spheres:m.kind===ge.Kind.Gaussians?m.model.coarseHierarchy.gaussians:void 0,d=l.get(m);ja.selectElementsInRanges(m.elements,d,RHe,UHe),n.unit=m;for(let f of RHe){if(n.element=f,_y(DO,m.conformation.position(f,iT)),s??=e.serialMapping.cumulativeUnitElementCount[u]+UHe.value,c??=aU(m,f)*1.2,p){let I=p.seq_id_end.value(f)-p.seq_id_begin.value(f)+1;A+=I*ELt}else i(n)!=="H"&&A++;a++}}if(a>0){let{center:u,radius:g}=a>1?bLt(DO):{center:B.fromArray(B(),DO,0),radius:c},m=(A||a)**(1/3);return{center:u,depth:g,scale:m,group:s}}}function bLt(e){let t=e.length;oT.reset();for(let r=0;r<t;r+=3)B.fromArray(iT,e,r),oT.includePosition(iT);oT.finishedIncludeStep();for(let r=0;r<t;r+=3)B.fromArray(iT,e,r),oT.radiusPosition(iT);return oT.getSphere()}var Ire={annotationId:h.Text("",{description:'Reference to "Annotation" custom model property',isEssential:!0}),fieldName:h.Text("label",{description:"Annotation field (column) from which to take label contents",isEssential:!0}),textFormat:h.Text("{}",{description:"Formatting template for the label text. Supports simplified f-string syntax. May reference multiple annotation fields. If value in any field is not defined, label will not be displayed.",isEssential:!0}),groupByFields:h.ObjectList({fieldName:h.Text()},e=>e.fieldName,{defaultValue:[{fieldName:"group_id"}],description:"Set of annotation fields for grouping annotation rows into label instances (i.e. annotation rows with the same values in all group-by fields will yield one label instance). Annotation row with undefined value in any group-by field is considered a separate label instance.",isEssential:!0}),...tu($h,["level","chainScale","residueScale","elementScale"]),borderColor:{...$h.borderColor,defaultValue:xt.black}};function LHe(e){return Xv({defaultProps:h.getDefaultValues(Ire),createGeometry:xLt,createLocationIterator:Wo.fromStructure,getLoci:za,eachLocation:Ja,setUpdateState:(t,r,n)=>{t.createGeometry=r.annotationId!==n.annotationId||r.fieldName!==n.fieldName||r.textFormat!==n.textFormat||!Fa(r.groupByFields,n.groupByFields)}},e)}function xLt(e,t,r,n,o){let{annotation:i,model:a}=_1(t,n.annotationId),A=i?.getRows()??[],s=sre.groupIndices(A,SLt(i,n.groupByFields.map(u=>u.fieldName))),c=rc.create(n,s.count,s.count/2,o),l=SO(n.textFormat);for(let u=0;u<s.count;u++){let g=sre.getGroup(s,u),m=l.format(f=>i.getValueForRow(g[0],f||n.fieldName));if(!m)continue;let p=g.map(f=>A[f]),d=vO(t,p,a);d&&c.add(m,d.center[0],d.center[1],d.center[2],d.depth,d.scale,d.group)}return c.getText()}function SLt(e,t){if(t.length===1){let r=t[0];return(n,o)=>e.getValueForRow(o,r)}return t.length===0?()=>"":(r,n)=>{let o=t.map(i=>e.getValueForRow(n,i));if(!o.includes(void 0))return o.join(" ")}}var PHe={"label-text":(e,t)=>Eo("Label text",e,t,LHe)},THe={...Ire,visuals:h.MultiSelect(["label-text"],h.objectToOptions(PHe))};function DLt(e,t){let r=Xt.createMulti("Label",e,t,Vn,PHe);return r.setState({pickable:!1,markerActions:0}),r}var FO={name:"mvs-annotation-label",label:"MVS Annotation Label",description:"Displays labels based on annotation custom model property",factory:DLt,getParams:()=>THe,defaultValues:h.getDefaultValues(THe),defaultColorTheme:{name:"uniform"},defaultSizeTheme:{name:"physical"},isApplicable:e=>e.elementCount>0&&tb(e)};var Cre={tooltips:h.ObjectList({annotationId:h.Text("",{description:'Reference to "MVS Annotation" custom model property'}),fieldName:h.Text("tooltip",{description:"Annotation field (column) from which to take color values"}),textFormat:h.Text("{}",{description:"Formatting template for tooltip text. Supports simplified f-string syntax. May reference multiple annotation fields. If value in any field is not defined, tooltip will not be displayed."})},e=>`${e.annotationId}:${e.fieldName}`)},Hx=eA.createProvider({label:"MVS Annotation Tooltips",descriptor:{name:"mvs-annotation-tooltips"},type:"local",defaultParams:Cre,getParams:e=>Cre,isApplicable:e=>e.root===e,obtain:async(e,t,r)=>({value:{...h.getDefaultValues(Cre),...r}})}),GHe={label:e=>{switch(e.kind){case"element-loci":if(!e.structure.customPropertyDescriptors.hasReference(Hx.descriptor))return;let t=W.Loci.getFirstLocation(e);if(!t)return;let r=Hx.get(t.structure).value;if(!r||r.tooltips.length===0)return;let n=ly.get(t.unit.model).value,o=r.tooltips.map(i=>SO(i.textFormat).format(a=>n?.getAnnotation(i.annotationId)?.getValueForLocation(t,a||i.fieldName)));return hO(o).join(" | ");default:return}}};var hre={annotationId:h.Text("",{description:'Reference to "Annotation" custom model property'}),fieldName:h.Text("component",{description:"Annotation field (column) from which to take component identifier"}),fieldValues:h.MappedStatic("all",{all:h.EmptyGroup(),selected:h.ObjectList({value:h.Text()},e=>e.value)}),nullIfEmpty:h.Optional(h.Boolean(!0,{isHidden:!1})),label:h.Text("",{isHidden:!1})},LB=lt.builderFactory("mvs"),yre=LB({name:"mvs-structure-component-from-annotation",display:{name:"MVS Annotation Component",description:"A molecular structure component defined by MVS annotation data."},from:te.Molecule.Structure,to:te.Molecule.Structure,params:hre})({apply({a:e,params:t,cache:r}){return Qre(e.data,t,r)},update:({a:e,b:t,oldParams:r,newParams:n,cache:o})=>FLt(e.data,t,r,n,o),dispose({b:e}){e?.data.customPropertyDescriptors.dispose()}});function vLt(e,t){let{annotation:r}=_1(e,t.annotationId);if(r){let n=r.getRows();if(t.fieldValues.name==="selected"){let a=new Set(t.fieldValues.params.map(A=>A.value));n=n.filter((A,s)=>a.has(r.getValueForRow(s,t.fieldName)))}let o=V1(n),{selection:i}=tc.createAndRun(e,o);return Qt.unionStructure(i)}else return Ye.Empty}function Qre(e,t,r){r.source=e;let n=vLt(e,t);if(t.nullIfEmpty&&n.elementCount===0)return po.Null;let o=t.label;if(o===void 0||o==="")if(t.fieldValues.name==="selected"&&t.fieldValues.params.length>0){let a=t.fieldValues.params,A=`"${a[0].value}"`;a.length===2?A+=` + "${a[1].value}"`:a.length>2&&(A+=` + ${a.length-1} more values`),o=`MVS Annotation Component (${t.fieldName}: ${A})`}else o="MVS Annotation Component";let i={label:o,description:Ye.elementDescription(n)};return new te.Molecule.Structure(n,i)}function FLt(e,t,r,n,o){let i=!o.source||!Ye.areEquivalent(e,o.source);return o.source=e,i?lt.UpdateResult.Recreate:ka(tu(n,["label"]),tu(r,["label"]))?n.label!==r.label?(t.label=n.label||t.label,lt.UpdateResult.Updated):lt.UpdateResult.Unchanged:lt.UpdateResult.Recreate}var wLt=new $E(Pce(F0e,e=>wu(e)),"all"),O1=h.MappedStatic("static",{static:wLt.PDSelect(),expression:h.Value(ce.struct.generator.all),bundle:h.Value(W.Bundle.Empty),script:h.Script({language:"mol-script",expression:"(sel.atom.all)"}),annotation:h.Group(ll(hre,["annotationId","fieldName","fieldValues"]))},{description:"Define a part of the structure where this layer applies (use Static:all to apply to the whole structure)"}),NHe={name:"static",params:"all"};function MHe(e){return e.name==="static"&&e.params==="all"}var J1={fromStructure(e){if(!e)return{};let t={};for(let r of e.units)t[r.id]=r.elements;return t},fromSelector(e,t){if(!e)return{};let r=aT(e,t);return this.fromStructure(r)},has(e,t){let r=e[t.unit.id];return r?je.has(r,t.element):!1}};function aT(e,t){let r=t.name==="annotation"?Qre(e,{...t.params,label:"",nullIfEmpty:!1},{}):uv(e,{type:t,label:"",nullIfEmpty:!1},{source:e});return te.Molecule.Structure.is(r)?r.data:Ye.Empty}var Ere={items:h.ObjectList({text:h.Text("\xAF\\_(\u30C4)_/\xAF"),position:h.MappedStatic("selection",{x_y_z:h.Group({x:h.Numeric(0),y:h.Numeric(0),z:h.Numeric(0),scale:h.Numeric(1,{min:0,max:20,step:.1})}),selection:h.Group({selector:O1})})},e=>e.text,{isEssential:!0}),...tu($h,["level","chainScale","residueScale","elementScale"]),borderColor:{...$h.borderColor,defaultValue:xt.black}};function kHe(e){return Xv({defaultProps:h.getDefaultValues(Ere),createGeometry:RLt,createLocationIterator:Wo.fromStructure,getLoci:za,eachLocation:Ja,setUpdateState:(t,r,n)=>{t.createGeometry=!ka(r.items,n.items)}},e)}function RLt(e,t,r,n,o){let i=n.items.length,a=rc.create(n,i,i/2,o);for(let A of n.items)switch(A.position.name){case"x_y_z":let s=A.position.params.scale;a.add(A.text,A.position.params.x,A.position.params.y,A.position.params.z,s,s,0);break;case"selection":let c=aT(t,A.position.params.selector),l=vO(c,[{}]),u=ULt(t,c)??0;l&&a.add(A.text,l.center[0],l.center[1],l.center[2],l.depth,l.scale,u);break}return a.getText()}function ULt(e,t){if(t.isEmpty)return;let r=t.units[0],n=r.elements[0];for(let o of e.units)if(o.model.id===r.model.id&&je.has(o.elements,n))return e.serialMapping.getSerialIndex(o,n)}var VHe={"label-text":(e,t)=>Eo("Label text",e,t,kHe)},HHe={...Ere,visuals:h.MultiSelect(["label-text"],h.objectToOptions(VHe))};function LLt(e,t){let r=Xt.createMulti("Label",e,t,Vn,VHe);return r.setState({pickable:!1,markerActions:0}),r}var wO={name:"mvs-custom-label",label:"MVS Custom Label",description:"Displays labels with custom text",factory:LLt,getParams:()=>HHe,defaultValues:h.getDefaultValues(HHe),defaultColorTheme:{name:"uniform"},defaultSizeTheme:{name:"physical"},isApplicable:e=>e.elementCount>0&&tb(e)};var bre={tooltips:h.ObjectList({text:h.Text("",{description:"Text of the tooltip"}),selector:O1},e=>e.text)},Vx=eA.createProvider({label:"MVS Custom Tooltips",descriptor:{name:"mvs-custom-tooltips"},type:"local",defaultParams:bre,getParams:e=>bre,isApplicable:e=>e.root===e,obtain:async(e,t,r)=>({value:{...h.getDefaultValues(bre),...r}.tooltips.map(i=>({selector:i.selector,text:i.text}))})}),_He={label:e=>{switch(e.kind){case"element-loci":if(!e.structure.customPropertyDescriptors.hasReference(Vx.descriptor))return;let t=W.Loci.getFirstLocation(e);if(!t)return;let r=Vx.get(t.structure).value;if(!r||r.length===0)return;let n=[];for(let o of r){let i=o.elementSet??=J1.fromSelector(t.structure,o.selector);J1.has(i,t)&&n.push(o.text)}return hO(n).join(" | ");default:return}}};var _x=class extends te.Create({name:"MVS Data",typeClass:"Data"}){},TLt=LB({name:"mvs-parse-mvsj",display:{name:"MolViewSpec from MVSJ",description:"Create MolViewSpec view from MVSJ data"},from:te.Data.String,to:_x})({apply({a:e},t){let r=Qu.fromMVSJ(am.toString(e.data)),n=NLt(e,t);return new _x({mvsData:r,sourceUrl:n})}}),PLt=LB({name:"mvs-parse-mvsx",display:{name:"MolViewSpec from MVSX",description:"Create MolViewSpec view from MVSX data"},from:te.Data.Binary,to:_x,params:{mainFilePath:h.Text("index.mvsj")}})({apply({a:e,params:t},r){return ve.create("Parse MVSX file",async n=>{let o=await z1(r,n,e.data,t.mainFilePath);return new _x(o)})}}),JHe={appendSnapshots:h.Boolean(!1,{description:"If true, add snapshots from MVS into current snapshot list; if false, replace the snapshot list."}),keepCamera:h.Boolean(!1,{description:"If true, any camera positioning from the MVS state will be ignored and the current camera position will be kept."}),keepCameraOrientation:h.Boolean(!1,{description:"If true, any camera orientation from the MVS state will be ignored and the current camera orientation will be kept (camera target position will be loaded from MVS). keepCamera option overrides this."}),applyExtensions:h.Boolean(!0,{description:"If true, apply builtin MVS-loading extensions (not a part of standard MVS specification)."})},xre=Pa.build({display:{name:"Load MVS Data"},from:_x,params:JHe})(({a:e,params:t},r)=>ve.create("Load MVS Data",async()=>{let{mvsData:n,sourceUrl:o}=e.data;await Pd(r,n,{appendSnapshots:t.appendSnapshots,keepCamera:t.keepCamera,keepCameraOrientation:t.keepCameraOrientation,sourceUrl:o,extensions:t.applyExtensions?void 0:[]})})),Sre={label:"MVSJ",description:"MVSJ",category:"Miscellaneous",stringExtensions:["mvsj"],parse:async(e,t)=>e.state.data.build().to(t).apply(TLt).commit(),visuals:async(e,t)=>{let r=Pn.resolveRef(t),n=h.getDefaultValues(JHe);return await e.state.data.applyAction(xre,n,r).run()}},zHe={label:"MVSX",description:"MVSX",category:"Miscellaneous",binaryExtensions:["mvsx"],parse:async(e,t)=>e.state.data.build().to(t).apply(PLt).commit(),visuals:Sre.visuals};async function z1(e,t,r,n){typeof n=="string"&&(n={mainFilePath:n});let o=n?.mainFilePath??"index.mvsj";(n?.doNotClearAssets??!1)||GLt(e);let a=`ni,MurmurHash3_128;${Ale(r,42)}`,A;try{A=await oQ(t,r.buffer)}catch(u){throw e.log.error("Invalid MVSX file"),u}for(let u in A){let g=YHe(a,u);MLt(e.managers.asset,g,A[u],{isFile:!0})}let s=A[o];if(!s)throw new Error(`File ${o} not found in the MVSX archive`);let c=Qu.fromMVSJ(kLt(s)),l=YHe(a,o);return{mvsData:c,sourceUrl:l}}async function RO(e,t,r,n){if(typeof t=="string"&&t.startsWith("base64")&&(t=Uint8Array.from(atob(t.substring(7)),o=>o.charCodeAt(0))),r==="mvsj"){t.BYTES_PER_ELEMENT&&t.buffer&&(t=new TextDecoder().decode(t));let o;typeof t=="string"?o=Qu.fromMVSJ(t):o=t,await Pd(e,o,{sanityChecks:!0,sourceUrl:void 0,...n})}else if(r==="mvsx"){if(typeof t=="string")throw new Error("loadMvsData: if `format` is 'mvsx', then `data` must be a Uint8Array or a base64-encoded string prefixed with 'base64,'.");await e.runTask(ve.create("Load MVSX file",async o=>{let i=await z1(e,o,t,{doNotClearAssets:n?.appendSnapshots});await Pd(e,i.mvsData,{sanityChecks:!0,...n,sourceUrl:i.sourceUrl})}))}else throw new Error(`Unknown MolViewSpec format: ${r}`);return t}function GLt(e){e.managers.asset.clearTag("mvsx-file")}function NLt(e,t){let n=t.state.data.selectQ(o=>o.ofTransformer(G0)).find(o=>o.obj===e)?.transform.params?.url;return n?gn.getUrl(n):void 0}function YHe(e,t){return new URL(t,`arcp://${e}/`).href}function MLt(e,t,r,n){let o=gn.getUrlAsset(e,t);if(!e.has(o)){let i=t.split("/").pop()??"file";e.set(o,new File([r],i),n?.isFile?{isStatic:!0,tag:"mvsx-file"}:void 0)}}function kLt(e){return OHe??=new TextDecoder,OHe.decode(e)}var OHe;var AT=-1;function HLt(e){return e>=0}var jHe=xt.white;function VLt(e,t){let r={help:o=>{let{name:i,params:a}=o,s=e.get(i).factory({},a);return{description:s.description,legend:s.legend}}},n=e.types.filter(([o,i,a])=>o!==UO&&e.get(o).isApplicable(t));return{layers:h.ObjectList({theme:h.Mapped("uniform",n,o=>h.Group(e.get(o).getParams({structure:Ye.Empty})),r),selection:O1},o=>Ra(o.theme.name),{description:"A list of layers, each defining a color theme. The last listed layer is the top layer (applies first). If the top layer does not provide color for a location or its selection does not cover the location, the underneath layers will apply."}),background:h.Color(jHe,{description:"Color for elements where no layer applies"})}}var _Lt={layers:[],background:jHe};function WHe(e,t,r){let{colorLayers:n,granularity:o,preferSmoothing:i}=OLt(e,t,r);function a(c,l){for(let u of n){if(!(!u.elementSet||J1.has(u.elementSet,c)))continue;let m=u.color(c,l);if(HLt(m))return m}return t.background}let A=W.Location.create(e.structure);return{factory:(c,l)=>WHe(c,l,r),granularity:o,preferSmoothing:i,color:(c,l)=>W.Location.is(c)?a(c,l):Et.isLocation(c)?(A.unit=c.aUnit,A.element=c.aUnit.elements[c.aIndex],a(A,l)):t.background,props:t,description:"Combines colors from multiple color themes."}}var K1=1,Dre=2,vre=4,KHe={uniform:0,instance:K1,group:Dre,groupInstance:Dre|K1,vertex:vre,vertexInstance:vre|K1};function YLt(e){return e&vre?e&K1?"vertexInstance":"vertex":e&Dre?e&K1?"groupInstance":"group":e&K1?"instance":"uniform"}function OLt(e,t,r){let n=[],o=0,i=!1;for(let a=t.layers.length-1;a>=0;a--){let A=t.layers[a],s=r.get(A.theme.name);if(!s){console.warn(`Skipping color theme '${A.theme.name}', cannot find it in registry.`);continue}s.ensureCustomProperties?.attach&&console.warn(`Multilayer color theme: layer "${s.name}" has ensureCustomProperties.attach method, but Multilayer color theme does not call it. If the layer does not work, make sure you call ensureCustomProperties.attach somewhere.`);let c=s.factory(e,A.theme.params);switch(c.granularity){case"uniform":case"instance":case"group":case"groupInstance":case"vertex":case"vertexInstance":let l,u;if(!e.structure)l={},u="uniform";else if(MHe(A.selection))l=void 0,u="uniform";else{let g=aT(e.structure,A.selection);l=J1.fromStructure(g),u=JLt(e.structure,g)}n.push({elementSet:l,color:c.color}),o|=KHe[u],o|=KHe[c.granularity];break;default:console.warn(`Skipping color theme '${A.theme.name}', cannot process granularity '${c.granularity}'`)}c.preferSmoothing&&(i=!0)}return{colorLayers:n,granularity:YLt(o),preferSmoothing:i}}function JLt(e,t){let r={};for(let c of e.units){let l=c.conformation.operator.instanceId;r[l]??=0,r[l]+=c.elements.length}let n={},o={};for(let c of t.units){let l=c.conformation.operator.instanceId;n[l]??=0,n[l]+=c.elements.length,(o[l]??={})[c.invariantId]=c.elements}let i=Object.keys(r),a=Object.keys(n),A=!a.every(c=>n[c]===r[c]),s;if(a.length===0)s=!1;else if(a.length<i.length)s=!0;else{s=!1;for(let c=1;c<a.length;c++)if(!ka(o[a[0]],o[a[c]])){s=!0;break}}return A?s?"groupInstance":"group":s?"instance":"uniform"}var UO="mvs-multilayer";function XHe(e){return{name:UO,label:"MVS Multi-layer",category:Br.Misc,factory:(t,r)=>WHe(t,r,e),getParams:t=>VLt(e,t),defaultValues:_Lt,isApplicable:t=>!!t.structure&&tb(t.structure)}}var sT=er.create({name:"molviewspec",category:"misc",display:{name:"MolViewSpec",description:"MolViewSpec extension"},ctor:class extends er.Handler{constructor(){super(...arguments);this.registrables={customModelProperties:[Y1,ly],customStructureProperties:[Vx,Hx],representations:[wO,FO],colorThemes:[xO,XHe(this.ctx.representation.structure.themes.colorThemeRegistry)],lociLabels:[_He,GHe],dragAndDropHandlers:[zLt],dataFormats:[{name:"MVSJ",provider:Sre},{name:"MVSX",provider:zHe}],actions:[xre]}}register(){for(let t of this.registrables.customModelProperties??[])this.ctx.customModelProperties.register(t,this.params.autoAttach);for(let t of this.registrables.customStructureProperties??[])this.ctx.customStructureProperties.register(t,this.params.autoAttach);for(let t of this.registrables.representations??[])this.ctx.representation.structure.registry.add(t);for(let t of this.registrables.colorThemes??[])this.ctx.representation.structure.themes.colorThemeRegistry.add(t);for(let t of this.registrables.lociLabels??[])this.ctx.managers.lociLabels.addProvider(t);for(let t of this.registrables.dragAndDropHandlers??[])this.ctx.managers.dragAndDrop.addHandler(t.name,t.handle);for(let t of this.registrables.dataFormats??[])this.ctx.dataFormats.add(t.name,t.provider);for(let t of this.registrables.actions??[])this.ctx.state.data.actions.add(t);this.ctx.state.data.registerRefResolver("mvs",(t,r)=>Ho.doPreOrder(t.tree,t.tree.root,{ref:r,ret:void 0},(o,i,a)=>{if(o.tags){for(let A of o.tags)if(A.startsWith("mvs-ref:")&&A.substring(8)===r)return a.ret=t.cells.get(o.ref)?.obj?.data,!1}}).ret),this.ctx.managers.markdownExtensions.registerRefResolver("mvs",(t,r)=>{let n=new Set(r.map(o=>`mvs-ref:${o}`));return Ho.doPreOrder(t.state.data.tree,t.state.data.tree.root,{mvsRefs:n,plugin:t,cells:[]},(o,i,a)=>{if(o.tags)for(let A of o.tags){if(!a.mvsRefs.has(A))continue;let s=a.plugin.state.data.cells.get(o.ref);if(s){a.cells.push(s);break}}}).cells}),this.ctx.managers.markdownExtensions.registerUriResolver("mvs",(t,r)=>{let{assets:n}=t.managers.asset,o=n.find(i=>i.file.name===r);if(o)try{return sHe(o.file)}catch(i){console.error(`MVS: Failed to convert asset file to data URI for '${r}'`,i);return}})}update(t){let r=this.params.autoAttach!==t.autoAttach;this.params.autoAttach=t.autoAttach;for(let n of this.registrables.customModelProperties??[])this.ctx.customModelProperties.setDefaultAutoAttach(n.descriptor.name,this.params.autoAttach);for(let n of this.registrables.customStructureProperties??[])this.ctx.customStructureProperties.setDefaultAutoAttach(n.descriptor.name,this.params.autoAttach);return r}unregister(){for(let t of this.registrables.customModelProperties??[])this.ctx.customModelProperties.unregister(t.descriptor.name);for(let t of this.registrables.customStructureProperties??[])this.ctx.customStructureProperties.unregister(t.descriptor.name);for(let t of this.registrables.representations??[])this.ctx.representation.structure.registry.remove(t);for(let t of this.registrables.colorThemes??[])this.ctx.representation.structure.themes.colorThemeRegistry.remove(t);for(let t of this.registrables.lociLabels??[])this.ctx.managers.lociLabels.removeProvider(t);for(let t of this.registrables.dragAndDropHandlers??[])this.ctx.managers.dragAndDrop.removeHandler(t.name);for(let t of this.registrables.dataFormats??[])this.ctx.dataFormats.remove(t.name);for(let t of this.registrables.actions??[])this.ctx.state.data.actions.remove(t);this.ctx.state.data.removeRefResolver("mvs"),this.ctx.managers.markdownExtensions.removeRefResolver("mvs")}},params:()=>({autoAttach:h.Boolean(!1)})}),omo=Lr.Behavior(sT),zLt={name:"mvs-mvsj-mvsx",async handle(e,t){let r=!1;for(let n of e){if(n.name.toLowerCase().endsWith(".mvsj")){let o=ve.create("Load MVSJ file",async i=>{let a=await n.text(),A=Qu.fromMVSJ(a);await Pd(t,A,{sanityChecks:!0,appendSnapshots:r,sourceUrl:void 0})});await t.runTask(o),r=!0}if(n.name.toLowerCase().endsWith(".mvsx")){let o=ve.create("Load MVSX file",async i=>{let a=await n.arrayBuffer(),A=new Uint8Array(a),s=await z1(t,i,A);await Pd(t,s.mvsData,{sanityChecks:!0,appendSnapshots:r,sourceUrl:s.sourceUrl})});await t.runTask(o),r=!0}}return r}};function ZHe(e,t){return e==="orthographic"?1/(2*Math.tan(t/2)):1/(2*Math.sin(t/2))}function qHe(e,t,r,n){let o=B.sub(B(),t,e),i=ZHe(r,n);return B.scaleAndAdd(o,e,o,i)}function $He(e,t,r,n){let o=B.sub(B(),t,e),i=ZHe(r,n)||1;return B.scaleAndAdd(o,e,o,1/i)}var KLt=xt.white,jLt=B();function WLt(e,t){let r=B.create(...t.target),n=B.create(...t.position),o=B.distance(r,n)/2;e.canvas3d&&(n=qHe(r,n,e.canvas3d.camera.state.mode,e.canvas3d.camera.state.fov));let i=B.create(...t.up);return B.orthogonalize(i,B.sub(jLt,r,n),i),{target:r,position:n,up:i,radius:o,radiusMax:o,minNear:t.near??void 0}}function eVe(e,t){let r=e.length>0?e[e.length-1]:void 0,n=r?.params.direction??yu.nodes.focus.params.fields.direction.default,o=r?.params.up??yu.nodes.focus.params.fields.up.default;return{targets:e.map(i=>({targetRef:i.target?.ref===en.RootRef?void 0:i.target?.ref,center:i.params.center?B.create(...i.params.center):void 0,radius:i.params.radius??void 0,radiusFactor:i.params.radius_factor,extraRadius:i.params.radius_extent})),direction:t?void 0:B.create(...n),up:t?void 0:B.create(...o)}}function Fre(e,t,r){let n={transitionStyle:"animate",transitionDurationInMs:r.previousTransitionDurationMs??0};if(t.camera.cameraParams!==void 0){let o=t.camera.cameraParams;if(r.ignoreCameraOrientation)n.focus=eVe([{target:void 0,params:{center:o.target,radius:B.distance(o.target,o.position)/2,direction:yu.nodes.focus.params.fields.direction.default,up:yu.nodes.focus.params.fields.up.default,radius_factor:1,radius_extent:0}}],!0);else{let i=e.canvas3d.camera.getSnapshot(),a=WLt(e,o);n.current={...i,...a}}}else n.focus=eVe(t.camera.focuses,r.ignoreCameraOrientation??!1);return n}function j1(e,t,r,n){return typeof e=="boolean"?e?{name:"on",params:{...h.getDefaultValues(r),...t}}:{name:"off",params:{}}:n}function XLt(e,t){return e?h.normalizeParams(DH,{variant:e},"children"):t}function tVe(e,t,r){let n=t?.params,o=Ui(n?.background_color)??KLt,i=t?.custom?.molstar_postprocessing,a=i?.enable_outline,A=i?.outline_params,s=i?.enable_shadow,c=i?.shadow_params,l=i?.enable_ssao,u=i?.ssao_params,g=i?.enable_fog,m=i?.fog_params,p=i?.enable_depth_of_field,d=i?.depth_of_field_params,f=i?.enable_bloom,I=i?.bloom_params,C=i?.background,y=r?.custom?.molstar_trackball,Q=y?.name,E=y?.params??{};return{...e,postprocessing:{...e.postprocessing,outline:j1(a,A,RH,e.postprocessing.outline),shadow:j1(s,c,UH,e.postprocessing.shadow),occlusion:j1(l,u,PH,e.postprocessing.occlusion),dof:j1(p,d,FH,e.postprocessing.dof),bloom:j1(f,I,wH,e.postprocessing.bloom),background:XLt(C,e.postprocessing.background)},cameraFog:j1(g,m,AZ,e.cameraFog),renderer:{...e.renderer,backgroundColor:o},trackball:{...e?.trackball,...Q?{animate:{name:Q,params:{...hR.animate.map(Q)?.defaultValue,...E}}}:{}}}}function rVe(e){let t=e.canvas3d?.props;e.canvas3d?.setProps({...t,postprocessing:{...t,outline:ii(Sd.postprocessing.outline),shadow:ii(Sd.postprocessing.shadow),occlusion:ii(Sd.postprocessing.occlusion),dof:ii(Sd.postprocessing.dof),bloom:ii(Sd.postprocessing.bloom),background:ii(Sd.postprocessing.background)},cameraFog:ii(Sd.cameraFog),trackball:{...t?.trackball,animate:{name:"off",params:{}}}})}function iVe(e){let t=new Set;for(let r of e.children??[]){if(r.kind!=="primitive")continue;let n=r.params;lT[n.kind].resolveRefs?.(n,t)}return t}var Jx=class extends te.Create({name:"Primitive Data",typeClass:"Object"}){},nVe=class extends te.Create({name:"Primitive Shapes",typeClass:"Object"}){},aVe=LB({name:"mvs-download-primitive-data",display:{name:"MVS Primitives"},from:[te.Root,te.Molecule.Structure],to:Jx,params:{uri:h.Url("",{isHidden:!0}),format:h.Text("mvs-node-json",{isHidden:!0})}})({apply({a:e,params:t,cache:r},n){return ve.create("Download Primitive Data",async o=>{let i=gn.getUrlAsset(n.managers.asset,t.uri),a=await n.managers.asset.resolve(i,"string").runInContext(o),A=JSON.parse(am.toString(a.data)),s=kx(yu,A,{anyRoot:!0});if(s)throw new Error(`Invalid primitive data from ${t.uri}:
|
|
${s.join(`
|
|
`)}`);if(A.kind!=="primitives")throw new Error(`Expected primitives node from ${t.uri}, got ${A.kind}`);let c=Mx(yu.nodes.primitives.params,A.params||{}),l={...A,params:c,children:A.children?.map(u=>{if(u.kind==="primitive"){let g=Mx(yu.nodes.primitive.params,u.params||{});return{...u,params:g}}return u})};return r.asset=a,new Jx({node:l,defaultStructure:te.Molecule.Structure.is(e)?e.data:void 0,structureRefs:{},primitives:cVe(l),options:{...l.params},positionCache:new Map,instances:lVe(l.params)},{label:"Primitive Data"})})},dispose({cache:e}){e?.asset?.dispose()}}),AVe=LB({name:"mvs-inline-primitive-data",display:{name:"MVS Primitives"},from:[te.Root,te.Molecule.Structure],to:Jx,params:{node:h.Value({kind:"primitives",params:Mx(yu.nodes.primitives.params,{})},{isHidden:!0})}})({apply({a:e,params:t}){return new Jx({node:t.node,defaultStructure:te.Molecule.Structure.is(e)?e.data:void 0,structureRefs:{},primitives:cVe(t.node),options:{...t.node.params},positionCache:new Map,instances:lVe(t.node.params)},{label:"Primitive Data"})}}),LO=LB({name:"mvs-build-primitive-shape",display:{name:"MVS Primitives"},from:Jx,to:te.Shape.Provider,params:{kind:h.Text("mesh"),clip:h.Value(void 0,{isHidden:!0})}})({apply({a:e,params:t,dependencies:r}){let n=r?mHe([te.Molecule.Structure],r):{},o={...e.data,structureRefs:n},i={snapshotKey:{...ZLt,defaultValue:e.data.options?.snapshot_key??""}},a={markdownCommands:{...qLt,defaultValue:e.data.node?.custom?.molstar_markdown_commands}},A=wu(t.kind);if(t.kind==="mesh"){if(!wre(e.data,"mesh"))return po.Null;let s=e.data.node.custom?.molstar_mesh_params;return new te.Shape.Provider({label:A,data:o,params:{...h.withDefaults(At.Params,{alpha:e.data.options?.opacity??1,clip:t.clip,...s}),...i,...a},getShape:(c,l,u,g)=>nTt(l,g?.geometry),geometryUtils:At.Utils},{label:A})}else if(t.kind==="labels"){if(!wre(e.data,"label"))return po.Null;let s=e.data.options,c=s?.label_background_color,l=e.data.node.custom?.molstar_label_params;return new te.Shape.Provider({label:A,data:o,params:{...h.withDefaults(eTt,{alpha:e.data.options?.label_opacity??1,attachment:s?.label_attachment??"middle-center",tether:s?.label_show_tether??!1,tetherLength:s?.label_tether_length??1,background:wn(c),backgroundColor:wn(c)?Ui(c):void 0,clip:t.clip,...l}),...i,...a},getShape:(u,g,m,p)=>iTt(g,p?.geometry,m),geometryUtils:tA.Utils},{label:A})}else if(t.kind==="lines"){if(!wre(e.data,"line"))return po.Null;let s=e.data.node.custom?.molstar_line_params;return new te.Shape.Provider({label:A,data:o,params:{...h.withDefaults(Zr.Params,{alpha:e.data.options?.opacity??1,clip:t.clip,...s}),...i,...a},getShape:(c,l,u,g)=>oTt(l,g?.geometry),geometryUtils:Zr.Utils},{label:A})}return po.Null}}),TO=LB({name:"shape-representation-3d",display:"3D Representation",from:te.Shape.Provider,to:te.Shape.Representation3D,params:(e,t)=>e?e.data.params:ot.Params})({canAutoUpdate(){return!0},apply({a:e,params:t}){return ve.create("Shape Representation",async r=>{let n={...h.getDefaultValues(e.data.params),...t},o=yi(e.data.getShape,e.data.geometryUtils);await o.createOrUpdate(n,e.data.data).runInContext(r);let i=!!t.snapshotKey?.trim()||!!t.markdownCommands;return i&&o.setState({pickable:i,markerActions:Ko.Highlighting}),new te.Shape.Representation3D({repr:o,sourceData:e.data},{label:e.data.label})})},update({a:e,b:t,newParams:r}){return ve.create("Shape Representation",async n=>{let o={...t.data.repr.props,...r};await t.data.repr.createOrUpdate(o,e.data.data).runInContext(n),t.data.sourceData=e.data;let i=!!r.snapshotKey?.trim()||!!r.markdownCommands;return i&&t.data.repr.setState({pickable:i,markerActions:Ko.Highlighting}),lt.UpdateResult.Updated})}}),ZLt=h.Text("",{isEssential:!0,disableInteractiveUpdates:!0,description:"Activate the snapshot with the provided key when clicking on the label"}),qLt=h.Value(void 0,{isHidden:!0}),cT=class{constructor(){this.current=-1;this.groupToNodeMap=new Map;this.sizes=new Map;this.colors=new Map;this.tooltips=new Map}allocateSingle(t){let r=++this.current;return this.groupToNodeMap.set(r,t),r}allocateMany(t,r){let n=new Map,o=this.current;for(let i of r){if(n.has(i))continue;let a=o+n.size+1;this.groupToNodeMap.set(a,t),n.set(i,a)}return this.current+=n.size+1,n}updateColor(t,r){let n=Ui(r);typeof n=="number"&&this.colors.set(t,n)}updateTooltip(t,r){typeof r=="string"&&this.tooltips.set(t,r)}updateSize(t,r){typeof r=="number"&&this.sizes.set(t,r)}};function $Lt(e,t){e.emptySelectionWarningPrinted||(console.warn("Some primitives use positions which refer to empty substructure, not showing these primitives.",t,"(There may be more)"),e.emptySelectionWarningPrinted=!0)}var sVe={...h.getDefaultValues(tA.Params),attachment:"middle-center",fontQuality:3,fontWeight:"normal",borderWidth:.15,borderColor:0,background:!1,backgroundOpacity:.5,tether:!1},eTt=h.withDefaults(tA.Params,sVe),lT={mesh:{builders:{mesh:aTt,line:ATt},isApplicable:{mesh:e=>e.show_triangles,line:e=>e.show_wireframe}},lines:{builders:{line:sTt}},tube:{builders:{mesh:gVe},resolveRefs:oVe},arrow:{builders:{mesh:cTt},resolveRefs:(e,t)=>{Kg(e.start,t),e.end&&Kg(e.end,t)}},label:{builders:{label:pTt},resolveRefs:dTt},distance_measurement:{builders:{mesh:lTt,label:uTt},resolveRefs:oVe},angle_measurement:{builders:{mesh:gTt,label:mTt},resolveRefs:(e,t)=>{Kg(e.a,t),Kg(e.b,t),Kg(e.c,t)}},ellipse:{builders:{mesh:fVe},resolveRefs:(e,t)=>{Kg(e.center,t),e.major_axis_endpoint&&Kg(e.major_axis_endpoint,t),e.minor_axis_endpoint&&Kg(e.minor_axis_endpoint,t)}},ellipsoid:{builders:{mesh:BTt},resolveRefs:(e,t)=>{Kg(e.center,t),e.major_axis_endpoint&&Kg(e.major_axis_endpoint,t),e.minor_axis_endpoint&&Kg(e.minor_axis_endpoint,t)}},box:{builders:{mesh:ITt},resolveRefs:(e,t)=>{Kg(e.center,t)}}};function cVe(e){return(e.children??[]).filter(t=>t.kind==="primitive")}function Kg(e,t){Vte(e)&&e.structure_ref&&t.add(e.structure_ref)}function wre(e,t){for(let r of e.primitives){let n=r.params,o=lT[n.kind];if(o.builders[t]){let a=o.isApplicable?.[t];if(a===void 0||a(n,e))return!0}}return!1}function uy(e,t,r){return gy(e,t,r,void 0,void 0)}var tTt=we.zero(),rTt=Ct.zero();function gy(e,t,r,n,o){let i,a;if(Vke(t))return r&&B.copy(r,t),n&&we.set(n,t,0),o&&Ct.set(o,t,t),!0;if(Vte(t)?(i=V1(t.expressions),a=t.structure_ref):_ke(t)&&(i=EO(t)),!i)throw console.error("Invalid expression",t),new Error("Invalid primitive potition expression, see console for details.");let A=a?e.structureRefs[a]:e.defaultStructure;if(!A)throw new Error(`Structure with ref '${a??"<default>"}' not found.`);let s=JSON.stringify(t);if(e.positionCache.has(s)){let[m,p,d]=e.positionCache.get(s);return r&&B.copy(r,p.center),n&&we.copy(n,p),o&&Ct.copy(o,d),m}let{selection:c}=tc.createAndRun(A,i),l,u,g;if(Qt.isEmpty(c))r&&B.set(r,0,0,0),l=rTt,u=tTt,g=!1,$Lt(e,t);else{let m=Qt.toLociWithSourceUnits(c),p=W.Loci.getBoundary(m);r&&B.copy(r,p.sphere.center),l=p.box,u=p.sphere,g=!0}return n&&we.copy(n,u),o&&Ct.copy(o,l),e.positionCache.set(s,[g,u,l]),g}function lVe(e){if(e?.instances?.length)return e.instances.map(t=>Y.fromArray(Y(),t,0))}function nTt(e,t){let r=We.createState(1024,1024,t),n={groups:new cT,mesh:r};r.currentGroup=-1;for(let s of e.primitives){let c=s.params,l=lT[c.kind];if(!l){console.warn(`Primitive ${c.kind} not supported`);continue}l.builders.mesh?.(e,n,s,c)}let{colors:o,tooltips:i}=n.groups,a=e.options?.tooltip??"",A=Ui(e.options?.color)??0;return Mr.create("Mesh",{kind:"mvs-primitives",node:e.node,groupToNode:n.groups.groupToNodeMap},We.getMesh(r),s=>o.get(s)??A,s=>1,s=>i.get(s)??a,e.instances)}function oTt(e,t){let r=Ii.create(1024,1024,t),n={groups:new cT,lines:r};for(let c of e.primitives){let l=c.params,u=lT[l.kind];if(!u){console.warn(`Primitive ${l.kind} not supported`);continue}u.builders.line?.(e,n,c,l)}let{colors:o,sizes:i,tooltips:a}=n.groups,A=e.options?.tooltip??"",s=Ui(e.options?.color)??0;return Mr.create("Lines",{kind:"mvs-primitives",node:e.node,groupToNode:n.groups.groupToNodeMap},r.getLines(),c=>o.get(c)??s,c=>i.get(c)??1,c=>a.get(c)??A,e.instances)}function iTt(e,t,r){let n=rc.create({...sVe,...r},1024,1024,t),o={groups:new cT,labels:n};for(let c of e.primitives){let l=c.params,u=lT[l.kind];if(!u){console.warn(`Primitive ${l.kind} not supported`);continue}u.builders.label?.(e,o,c,l)}let i=Ui(e.options?.label_color)??0,{colors:a,sizes:A,tooltips:s}=o.groups;return Mr.create("Labels",{kind:"mvs-primitives",node:e.node,groupToNode:o.groups.groupToNodeMap},n.getText(),c=>a.get(c)??i,c=>A.get(c)??1,c=>s.get(c)??"",e.instances)}function uVe(e,t,r,n,o){let i=B.zero(),a=B.zero(),A=B.zero(),{indices:s,vertices:c,triangle_groups:l}=n,u=Math.floor(s.length/3);l??=Vc(u);let g=t.allocateMany(r,l);for(let m=0;m<u;m++){let p=l[m],d=g.get(p);B.fromArray(i,c,3*s[3*m]),B.fromArray(a,c,3*s[3*m+1]),B.fromArray(A,c,3*s[3*m+2]),o(p,d,i,a,A)}}function aTt(e,{groups:t,mesh:r},n,o){if(!o.show_triangles)return;let{group_colors:i,group_tooltips:a,color:A,tooltip:s}=o;uVe(e,t,n,o,(c,l,u,g,m)=>{t.updateColor(l,i[c]??A),t.updateTooltip(l,a[c]??s),r.currentGroup=l,We.addTriangle(r,u,g,m)})}function ATt(e,{groups:t,lines:r},n,o){if(!o.show_wireframe)return;let i=o.wireframe_width,{group_colors:a,group_tooltips:A,wireframe_color:s,color:c,tooltip:l}=o;uVe(e,t,n,o,(u,g,m,p,d)=>{t.updateColor(g,s??a[u]??c),t.updateTooltip(g,A[u]??l),t.updateSize(g,i),r.add(m[0],m[1],m[2],p[0],p[1],p[2],g),r.add(p[0],p[1],p[2],d[0],d[1],d[2],g),r.add(d[0],d[1],d[2],m[0],m[1],m[2],g)})}function sTt(e,{groups:t,lines:r},n,o){let i=B.zero(),a=B.zero(),{indices:A,vertices:s,line_groups:c,group_colors:l,group_tooltips:u,group_widths:g}=o,m=o.width,p=Math.floor(A.length/2);c??=Vc(p);let d=t.allocateMany(n,c);for(let f=0;f<p;f++){let I=c[f],C=d.get(I);t.updateColor(C,l[I]??o.color),t.updateTooltip(C,u[I]??o.tooltip),t.updateSize(C,g[I]??m),B.fromArray(i,s,3*A[2*f]),B.fromArray(a,s,3*A[2*f+1]),r.add(i[0],i[1],i[2],a[0],a[1],a[2],C)}}function oVe(e,t){Kg(e.start,t),Kg(e.end,t)}var Yx=B.zero(),Ox=B.zero();function gVe(e,{groups:t,mesh:r},n,o,i){if(!i?.skipResolvePosition){let s=uy(e,o.start,Yx),c=uy(e,o.end,Ox);if(!s||!c)return}let a=o.radius,A={radiusBottom:a,radiusTop:a,topCap:!0,bottomCap:!0};if(r.currentGroup=t.allocateSingle(n),t.updateColor(r.currentGroup,o.color),t.updateTooltip(r.currentGroup,o.tooltip),o.dash_length){let s=B.distance(Yx,Ox),c=Math.ceil(s/(2*o.dash_length));Rm(r,Yx,Ox,1,c,!0,A)}else tU(r,Yx,Ox,A)}var ji={start:B.zero(),end:B.zero(),dir:B.zero(),startCap:B.zero(),endCap:B.zero()};function cTt(e,{groups:t,mesh:r},n,o){if(!uy(e,o.start,ji.start))return;if(o.end){if(!uy(e,o.end,ji.end))return}else if(o.direction)B.add(ji.end,ji.start,o.direction);else{console.warn('Primitive arrow does not contain "end" nor "distance". Not showing.');return}if(B.sub(ji.dir,ji.end,ji.start),B.normalize(ji.dir,ji.dir),o.length&&B.scaleAndAdd(ji.end,ji.start,ji.dir,o.length),B.distance(ji.start,ji.end)<.001)return;let A=o.tube_radius,s={radiusBottom:A,radiusTop:A,topCap:!o.show_end_cap,bottomCap:!o.show_start_cap};if(r.currentGroup=t.allocateSingle(n),t.updateColor(r.currentGroup,o.color),t.updateTooltip(r.currentGroup,o.tooltip),o.show_start_cap){let c=o.start_cap_radius??2*A,l=o.start_cap_length??2*c;B.scaleAndAdd(ji.startCap,ji.start,ji.dir,l),tU(r,ji.startCap,ji.start,{radiusBottom:c,radiusTop:0,topCap:!1,bottomCap:!0,radialSegments:12})}else B.copy(ji.startCap,ji.start);if(o.show_end_cap){let c=o.end_cap_radius??2*A,l=o.end_cap_length??2*c;B.scaleAndAdd(ji.endCap,ji.end,ji.dir,-l),tU(r,ji.endCap,ji.end,{radiusBottom:c,radiusTop:0,topCap:!1,bottomCap:!0,radialSegments:12})}else B.copy(ji.endCap,ji.end);if(o.show_tube)if(o.tube_dash_length){let c=B.distance(ji.startCap,ji.endCap),l=Math.ceil(c/(2*o.tube_dash_length));Rm(r,ji.startCap,ji.endCap,1,l,!0,s)}else tU(r,ji.startCap,ji.endCap,s)}function mVe(e,t,r){let n=uy(e,t,Yx),o=uy(e,r,Ox);if(n&&o)return B.distance(Yx,Ox)}function dVe(e,t){let r=`${em(e,2)} \xC5`;return typeof t.label_template=="string"?t.label_template.replace("{{distance}}",r):r}function lTt(e,t,r,n){let o=mVe(e,n.start,n.end);if(o===void 0)return;let i=dVe(o,n);gVe(e,t,r,{...n,tooltip:i},{skipResolvePosition:!0})}var W1=B.zero();function uTt(e,t,r,n){let{labels:o,groups:i}=t,a=mVe(e,n.start,n.end);if(a===void 0)return;let A;typeof n.label_size=="number"?A=n.label_size:A=Math.max(a*n.label_auto_size_scale,n.label_auto_size_min),B.add(W1,Yx,Ox),B.scale(W1,W1,.5);let s=i.allocateSingle(r);i.updateColor(s,n.label_color),i.updateSize(s,A),o.add(dVe(a,n),W1[0],W1[1],W1[2],1.05*n.radius,1,s)}var ln={isDefined:!1,a:B(),b:B(),c:B(),ba:B(),bc:B(),labelPos:B(),radius:0,label:""};function pVe(e,t){let r=uy(e,t.a,ln.a),n=uy(e,t.b,ln.b),o=uy(e,t.c,ln.c);if(ln.isDefined=r&&n&&o,!ln.isDefined)return;B.sub(ln.ba,ln.a,ln.b),B.sub(ln.bc,ln.c,ln.b);let i=yA(B.angle(ln.ba,ln.bc)),a=`${em(i,2)}\xB0`;ln.label=typeof t.label_template=="string"?t.label_template.replace("{{angle}}",a):a,typeof t.section_radius=="number"?ln.radius=t.section_radius:(ln.radius=Math.min(B.magnitude(ln.ba),B.magnitude(ln.bc)),typeof t.section_radius_scale=="number"&&(ln.radius*=t.section_radius_scale))}function gTt(e,t,r,n){if(pVe(e,n),!ln.isDefined)return;let{groups:o,mesh:i}=t;if(n.show_vector){let a=n.vector_radius??.05,A={radiusBottom:a,radiusTop:a,topCap:!0,bottomCap:!0};i.currentGroup=o.allocateSingle(r),o.updateColor(i.currentGroup,n.vector_color),o.updateTooltip(i.currentGroup,ln.label);let s=Math.ceil(B.magnitude(ln.ba)/(2*a));Rm(i,ln.a,ln.b,1,s,!0,A),s=Math.ceil(B.magnitude(ln.bc)/(2*a)),Rm(i,ln.b,ln.c,1,s,!0,A)}if(n.show_section){let a=B.angle(ln.ba,ln.bc);B.normalize(ln.ba,ln.ba),B.normalize(ln.bc,ln.bc),B.scale(ln.ba,ln.ba,ln.radius),B.scale(ln.bc,ln.bc,ln.radius),fVe(e,t,r,{kind:"ellipse",as_circle:!0,center:ln.b,major_axis_endpoint:null,major_axis:ln.ba,minor_axis_endpoint:null,minor_axis:ln.bc,radius_major:ln.radius,radius_minor:ln.radius,theta_start:0,theta_end:a,color:n.section_color,tooltip:ln.label})}}function mTt(e,t,r,n){let{labels:o,groups:i}=t;if(pVe(e,n),!ln.isDefined)return;B.normalize(ln.ba,ln.ba),B.normalize(ln.bc,ln.bc),B.scale(ln.ba,ln.ba,ln.radius),B.scale(ln.bc,ln.bc,ln.radius);let a;typeof n.label_size=="number"?a=n.label_size:a=Math.max(ln.radius*n.label_auto_size_scale,n.label_auto_size_min),B.add(ln.labelPos,ln.ba,ln.bc),B.normalize(ln.labelPos,ln.labelPos),B.scale(ln.labelPos,ln.labelPos,ln.radius),B.add(ln.labelPos,ln.labelPos,ln.b);let A=i.allocateSingle(r);i.updateColor(A,n.label_color),i.updateSize(A,a),o.add(ln.label,ln.labelPos[0],ln.labelPos[1],ln.labelPos[2],1,1,A)}function dTt(e,t){Kg(e.position,t)}var X1={position:B.zero(),sphere:we.zero()};function pTt(e,t,r,n){let{labels:o,groups:i}=t;if(!gy(e,n.position,X1.position,X1.sphere,void 0))return;let A=i.allocateSingle(r);i.updateColor(A,n.label_color),i.updateSize(A,n.label_size);let s=X1.sphere.radius+n.label_offset;o.add(n.text,X1.position[0],X1.position[1],X1.position[2],s,1,A)}var Rre=new Map;function fTt(e){let t=JSON.stringify(e);if(Rre.has(t))return Rre.get(t);let r=(e.thetaEnd??2*Math.PI)-(e.thetaStart??0);if(Math.abs(r)<.001)return null;let n=YI({radius:1,thetaStart:e.thetaStart??0,thetaLength:r,segments:Math.ceil(2*Math.PI/r*64)});return Rre.set(t,n),n}var di={centerPos:B.zero(),majorPos:B.zero(),minorPos:B.zero(),majorAxis:B.zero(),minorAxis:B.zero(),scale:B.zero(),normal:B.zero(),scaleXform:Y.identity(),rotationXform:Y.identity(),translationXform:Y.identity(),xform:Y.identity()};function fVe(e,t,r,n){let o=fTt({thetaStart:n.theta_start,thetaEnd:n.theta_end});if(!o||!gy(e,n.center,di.centerPos,void 0,void 0))return;if(n.major_axis_endpoint){if(!gy(e,n.major_axis_endpoint,di.majorPos,void 0,void 0))return;B.sub(di.majorAxis,di.majorPos,di.centerPos)}else B.copy(di.majorAxis,n.major_axis);if(n.minor_axis_endpoint){if(!gy(e,n.minor_axis_endpoint,di.minorPos,void 0,void 0))return;B.sub(di.minorAxis,di.minorPos,di.centerPos)}else B.copy(di.minorAxis,n.minor_axis);let{mesh:a,groups:A}=t;if(Y.fromTranslation(di.translationXform,di.centerPos),n.as_circle){let s=n.radius_major??B.magnitude(di.majorAxis);B.set(di.scale,s,1,s)}else{let s=n.radius_major??B.magnitude(di.majorAxis),c=n.radius_minor??B.magnitude(di.minorAxis);B.set(di.scale,c,1,s)}Y.fromScaling(di.scaleXform,di.scale),B.normalize(di.minorAxis,di.minorAxis),B.normalize(di.majorAxis,di.majorAxis),B.cross(di.normal,di.majorAxis,di.minorAxis),Y.targetTo(di.rotationXform,B.origin,di.majorAxis,di.normal),Y.mul(di.rotationXform,di.rotationXform,Y.rotY180),Y.mul3(di.xform,di.translationXform,di.rotationXform,di.scaleXform),a.currentGroup=A.allocateSingle(r),A.updateColor(a.currentGroup,n.color),A.updateTooltip(a.currentGroup,n.tooltip),We.addPrimitive(a,di.xform,o),We.addPrimitiveFlipped(a,di.xform,o)}var Ni={centerPos:B.zero(),majorPos:B.zero(),minorPos:B.zero(),majorAxis:B.zero(),minorAxis:B.zero(),sphere:we.zero(),radius:B.zero(),extent:B.zero(),up:B.zero()};function BTt(e,t,r,n){if(!gy(e,n.center,Ni.centerPos,Ni.sphere,void 0))return;if(n.major_axis_endpoint){if(!gy(e,n.major_axis_endpoint,Ni.majorPos,void 0,void 0))return;B.sub(Ni.majorAxis,Ni.majorPos,Ni.centerPos)}else n.major_axis?B.copy(Ni.majorAxis,n.major_axis):B.copy(Ni.majorAxis,B.unitX);if(n.minor_axis_endpoint){if(!gy(e,n.minor_axis_endpoint,Ni.minorPos,void 0,void 0))return;B.sub(Ni.minorAxis,Ni.minorPos,Ni.centerPos)}else n.minor_axis?B.copy(Ni.minorAxis,n.minor_axis):B.copy(Ni.minorAxis,B.unitY);if(typeof n.radius=="number")B.set(Ni.radius,n.radius,n.radius,n.radius);else if(n.radius)B.copy(Ni.radius,n.radius);else{let A=Ni.sphere.radius;B.set(Ni.radius,A,A,A)}typeof n.radius_extent=="number"?B.set(Ni.extent,n.radius_extent,n.radius_extent,n.radius_extent):n.radius_extent?B.copy(Ni.extent,n.radius_extent):B.set(Ni.extent,0,0,0),B.add(Ni.radius,Ni.radius,Ni.extent);let{mesh:i,groups:a}=t;i.currentGroup=a.allocateSingle(r),a.updateColor(i.currentGroup,n.color),a.updateTooltip(i.currentGroup,n.tooltip),B.normalize(Ni.majorAxis,Ni.majorAxis),B.normalize(Ni.minorAxis,Ni.minorAxis),B.cross(Ni.up,Ni.majorAxis,Ni.minorAxis),Mh(i,Ni.centerPos,Ni.up,Ni.minorAxis,Ni.radius,3)}var zg={center:B.zero(),boundary:Ct.zero(),size:B.zero(),cage:Q0(),translationXform:Y.identity(),scaleXform:Y.identity(),xform:Y.identity()};function ITt(e,t,r,n){if(!n.show_edges&&!n.show_faces||!gy(e,n.center,zg.center,void 0,zg.boundary)||(n.extent&&Ct.expand(zg.boundary,zg.boundary,n.extent),Ct.volume(zg.boundary)<.001))return;let{mesh:i,groups:a}=t;Y.fromScaling(zg.scaleXform,Ct.size(zg.size,zg.boundary)),Y.fromTranslation(zg.translationXform,zg.center),Y.mul(zg.xform,zg.translationXform,zg.scaleXform),n.show_faces&&(i.currentGroup=a.allocateSingle(r),a.updateColor(i.currentGroup,n.face_color),a.updateTooltip(i.currentGroup,n.tooltip),We.addPrimitive(i,zg.xform,dI())),n.show_edges&&(i.currentGroup=a.allocateSingle(r),a.updateColor(i.currentGroup,n.edge_color),a.updateTooltip(i.currentGroup,n.tooltip),We.addCage(i,zg.xform,Q0(),n.edge_radius,2,8))}var Ure=LB({name:"trajectory-with-coordinates",display:{name:"Trajectory with Coordinates",description:"Create a trajectory from existing model and the provided coordinates."},from:[te.Molecule.Model,te.Molecule.Topology],to:te.Molecule.Trajectory,params:{coordinatesRef:h.Text("",{isHidden:!0})}})({apply({a:e,params:t,dependencies:r}){return ve.create("Create trajectory from model/topology and coordinates",async n=>{let o=dHe([te.Molecule.Coordinates],r,t.coordinatesRef);if(!o)throw new Error("Coordinates not found.");let i=await Jk(n,e,o.data),a={label:"Trajectory",description:`${i.frameCount} model${i.frameCount===1?"":"s"}`};return new te.Molecule.Trajectory(i,a)})}});var Pc={aromatic:Ui("#15A4A4"),hydrophobic:Ui("#80A0F0"),polar:Ui("#15C015"),positive:Ui("#F01505"),negative:Ui("#C048C0"),proline:Ui("#C0C000"),cysteine:Ui("#F08080"),glycine:Ui("#F09048")},CTt={...yR,HIS:Pc.aromatic,TYR:Pc.aromatic,ALA:Pc.hydrophobic,VAL:Pc.hydrophobic,LEU:Pc.hydrophobic,ILE:Pc.hydrophobic,MET:Pc.hydrophobic,PHE:Pc.hydrophobic,TRP:Pc.hydrophobic,SER:Pc.polar,THR:Pc.polar,ASN:Pc.polar,GLN:Pc.polar,LYS:Pc.positive,ARG:Pc.positive,ASP:Pc.negative,GLU:Pc.negative,PRO:Pc.proline,CYS:Pc.cysteine,GLY:Pc.glycine},hTt={helix:Em.alphaHelix,strand:Em.betaStrand,turn:Em.betaTurn,bend:Em.bend,H:Em.alphaHelix,B:Em.betaStrand,E:Em.betaStrand,G:Em.threeTenHelix,I:Em.piHelix,P:10485760,T:Em.betaTurn,S:Em.bend},Lre={ElementSymbol:tu(XM,["C"]),ResidueName:yR,ResidueProperties:CTt,SecondaryStructure:hTt},zx={Reds:Kr.reds,Oranges:Kr.oranges,Greens:Kr.greens,Blues:Kr.blues,Purples:Kr.purples,Greys:Kr.greys,OrRd:Kr["orange-red"],BuGn:Kr["blue-green"],PuBuGn:Kr["purple-blue-green"],GnBu:Kr["green-blue"],PuBu:Kr["purple-blue"],BuPu:Kr["blue-purple"],RdPu:Kr["red-purple"],PuRd:Kr["purple-red"],YlOrRd:Kr["yellow-orange-red"],YlOrBr:Kr["yellow-orange-brown"],YlGn:Kr["yellow-green"],YlGnBu:Kr["yellow-green-blue"],Magma:Kr.magma,Inferno:Kr.inferno,Plasma:Kr.plasma,Viridis:Kr.viridis,Cividis:Kr.cividis,Turbo:Kr.turbo,Warm:Kr.warm,Cool:Kr.cool,CubehelixDefault:Kr["cubehelix-default"],Rainbow:Kr.rainbow,Sinebow:Kr.sinebow,RdBu:Kr["red-blue"],RdGy:Kr["red-grey"],PiYG:Kr["pink-yellow-green"],BrBG:Kr["brown-white-green"],PRGn:Kr["purple-green"],PuOr:Kr["purple-orange"],RdYlGn:Kr["red-yellow-green"],RdYlBu:Kr["red-yellow-blue"],Spectral:Kr.spectral,Category10:Kr["category-10"],Observable10:Kr["observable-10"],Tableau10:Kr["tableau-10"],Set1:Kr["set-1"],Set2:Kr["set-2"],Set3:Kr["set-3"],Pastel1:Kr["pastel-1"],Pastel2:Kr["pastel-2"],Dark2:Kr["dark-2"],Paired:Kr.paired,Accent:Kr.accent,Chainbow:Kr["turbo-no-black"]};function BVe(e,t,r,n,o){let i=qr.create(e,o?.replaceExisting??!1);yTt(i,t,r,n,o);let a=i.update.getTree({useHashVersion:!0}),A={tree:Ho.toJSON(a)};return{id:Hn.create22(),data:A}}function yTt(e,t,r,n,o){let i=new Map;o?.replaceExisting&&qr.deleteChildren(e);let a=(o?.extensions??[]).map(s=>({ext:s,extCtx:s.createExtensionContext(t,n)})),A=new Map;hu(t,(s,c)=>{let l=s.kind,u,g=c?i.get(c):e,m=r[l];if(m)if(g)u=m(g,s,n),u&&s.ref&&(qr.tag(u,Pre(s.ref)),A.set(s.ref,u.selector.ref)),i.set(s,u);else{console.warn(`No target found for this "${s.kind}" node`);return}if(g)for(let{ext:p,extCtx:d}of a)p.action(u??g,s,n,d)});for(let s of e.targetManager.allTargets)qr.dependsOn(s,A);a.forEach(s=>s.ext.disposeExtensionContext?.(s.extCtx,t,n))}var qr={create(e,t){let r=e.build(),n=r.toRoot();return{update:r,selector:n.selector,targetManager:new Tre(e,t),mvsDependencyRefs:new Set}},apply(e,t,r,n){let o=t.id;if(t.id===Xu.id){let s=r?.type?.name??"";o+=`:${s}`}let i=e.targetManager.getChildRef(e.selector,o),a=e.update.to(e.selector).apply(t,r,{...n,ref:i}),A={...e,selector:a.selector,mvsDependencyRefs:new Set,transformer:t,transformParams:r};return e.targetManager.allTargets.push(A),A},setMvsDependencies(e,t){return t.forEach(r=>e.mvsDependencyRefs.add(r)),e},dependsOn(e,t){if(!e.mvsDependencyRefs.size)return e;let r=Array.from(e.mvsDependencyRefs).map(n=>t.get(n)).filter(n=>n);return r.length&&e.update.to(e.selector).dependsOn(r),e},tag(e,t){return t.length>0&&e.update.to(e.selector).tag(t),e},deleteChildren(e){return e.update.currentTree.children.get(e.selector.ref).forEach(r=>e.update.delete(r)),e},commit(e){return e.update.commit()}},Tre=class{constructor(t,r){this._counter={};this.allTargets=[];r||t.state.data.cells.forEach(n=>{let o=n.transform.ref;if(o.startsWith("!mvs:")){let[i,a,A]=o.split(":"),s=parseInt(A)+1;s>(this._counter[a]??0)&&(this._counter[a]=s)}})}nextRef(t){this._counter[t]??=0;let r=this._counter[t]++;return`!mvs:${t}:${r}`}getChildRef(t,r){let n=t.ref.replace(/^!mvs:/,"")+":"+r,o=yO(n);return this.nextRef(o)}};function Pre(e){return e===void 0?[]:[`mvs-ref:${e}`]}var QTt=new Set(["color_from_uri","component_from_uri","label_from_uri","tooltip_from_uri"]),ETt=new Set(["color_from_source","component_from_source","label_from_source","tooltip_from_source"]);function bTt(e,t){if(e&&e.length!==9)throw new Error(`'rotation' param for 'transform' node must be array of 9 elements, found ${e}`);if(t&&t.length!==3)throw new Error(`'translation' param for 'transform' node must be array of 3 elements, found ${t}`);let r=Y.identity();if(e){let n=Ht.fromArray(Ht(),e,0);QVe(n,n),Y.fromMat3(r,n)}if(t&&Y.setTranslation(r,B.fromArray(B(),t,0)),!Y.isRotationAndTranslation(r))throw new Error(`'rotation' param for 'transform' is not a valid rotation matrix: ${e}`);return r}function xTt(e){if(e&&e.length!==9)throw new Error(`'rotation' param for 'transform' node must be array of 9 elements, found ${e}`);if(e){let t=Ht.fromArray(Ht(),e,0);QVe(t,t);let r=gr.fromMat3(gr(),t),n=B(),o=gr.getAxisAngle(n,r)*180/Math.PI;return{axis:n,angle:o}}return{axis:B.create(1,0,0),angle:0}}function QVe(e,t){let r=B.fromArray(STt,t,0),n=B.fromArray(DTt,t,3),o=B.fromArray(vTt,t,6);return B.normalize(r,r),B.orthogonalize(n,r,n),B.normalize(o,B.cross(o,r,n)),Ht.fromColumns(e,r,n,o),e}var STt=B(),DTt=B(),vTt=B();function uT(e,t){return bVe(e,t,$W,eX)}function EVe(e,t){return bVe(e,t,sX,cX)}function bVe(e,t,r,n){let o=e;for(let{params:a,ref:A}of IVe(t,"transform"))o=qr.apply(o,r,a),qr.tag(o,Pre(A));let i=IVe(t,"instance");return i.length>0&&(o=qr.apply(o,n,{transforms:i.map(a=>a.params)})),o}function IVe(e,t){let r=[],n=WE(e).filter(o=>o.kind===t);for(let o of n){let i=o.params.matrix;if(!i){let{rotation:a,translation:A,rotation_center:s}=o.params;if(s){let c=xTt(a);r.push({params:{transform:{name:"components",params:{translation:A?B.fromArray(B(),A,0):B.create(0,0,0),angle:c.angle,axis:c.axis,rotationCenter:s==="centroid"?{name:"centroid",params:{}}:{name:"point",params:{point:B.fromArray(B(),s,0)}}}}},ref:o.ref});continue}i=bTt(a,A)}r.push({params:{transform:{name:"matrix",params:{data:i,transpose:!1}}},ref:o.ref})}return r}function xVe(e,t){let r={};return hu(e,n=>{let o;if(QTt.has(n.kind)){let i=n.params;o={source:{name:"url",params:{url:i.uri,format:i.format}},schema:i.schema,cifBlock:CVe(i.block_header,i.block_index),cifCategory:i.category_name,fieldRemapping:Object.entries(i.field_remapping).map(([a,A])=>({standardName:a,actualName:A}))}}else if(ETt.has(n.kind)){let i=n.params;o={source:{name:"source-cif",params:{}},schema:i.schema,cifBlock:CVe(i.block_header,i.block_index),cifCategory:i.category_name,fieldRemapping:Object.entries(i.field_remapping).map(([a,A])=>({standardName:a,actualName:A}))}}if(o){let i=WC(o);r[i]??={...o,id:yO(i)},t.annotationMap.set(n,r[i].id)}}),Object.values(r)}function CVe(e,t){return wn(e)?{name:"header",params:{header:e}}:{name:"index",params:{index:t??0}}}function SVe(e,t){let r=[];return hu(e,n=>{if(n.kind==="tooltip_from_uri"||n.kind==="tooltip_from_source"){let o=t.annotationMap.get(n);o&&r.push({annotationId:o,fieldName:n.params.field_name,textFormat:n.params.text_format})}}),Mce(r)}function DVe(e,t){let r=[];return hu(e,(n,o)=>{if(n.kind==="tooltip"){if(o?.kind==="component")r.push({text:n.params.text,selector:gT(o.params.selector)});else if(o?.kind==="component_from_uri"||o?.kind==="component_from_source"){let i=mT(o,t);wn(i.annotationId)&&wn(i.fieldName)&&wn(i.fieldValues)&&r.push({text:n.params.text,selector:{name:"annotation",params:{annotationId:i.annotationId,fieldName:i.fieldName,fieldValues:i.fieldValues,label:i.label||"Annotation"}}})}}}),r}function vVe(e,t){let r=[];return hu(e,(n,o)=>{if(n.kind==="label"){if(o?.kind==="component")r.push({text:n.params.text,position:{name:"selection",params:{selector:gT(o.params.selector)}}});else if(o?.kind==="component_from_uri"||o?.kind==="component_from_source"){let i=mT(o,t);wn(i.annotationId)&&wn(i.fieldName)&&wn(i.fieldValues)&&r.push({text:n.params.text,position:{name:"selection",params:{selector:{name:"annotation",params:{annotationId:i.annotationId,fieldName:i.fieldName,fieldValues:i.fieldValues,label:i.label||"Annotation"}}}}})}}}),r}function PO(e){return e.ref!==void 0||e.custom!==void 0&&Object.keys(e.custom).length>0?!1:e.children&&e.children.every(t=>t.kind==="tooltip"||t.kind==="label")}function FVe(e){let t=e.params;switch(t.type){case"model":return{type:{name:"model",params:{}}};case"assembly":return{type:{name:"assembly",params:{id:t.assembly_id??void 0}}};case"symmetry":return{type:{name:"symmetry",params:{ijkMin:B.ofArray(t.ijk_min),ijkMax:B.ofArray(t.ijk_max)}}};case"symmetry_mates":return{type:{name:"symmetry-mates",params:{radius:t.radius}}};default:throw new Error(`NotImplementedError: Loading action for "structure" node, type "${t.type}"`)}}function gT(e){return e===void 0?NHe:typeof e=="string"?{name:"static",params:e}:Array.isArray(e)?{name:"expression",params:V1(e)}:{name:"expression",params:EO(e)}}function wVe(e){return e===void 0?"All":typeof e=="string"?Ra(e):Array.isArray(e)?`Custom Selection: [${e.map($L).join(", ")}]`:`Custom Selection: ${$L(e)}`}function Mre(e,t){let r=t.annotationMap.get(e),n=e.params.field_name,o=e.params.text_format,i=e.params.group_by_fields??[e.params.field_remapping.group_id??"group_id"],a=t.nearestReprMap?.get(e);return{type:{name:FO.name,params:{annotationId:r,fieldName:n,textFormat:o,groupByFields:i.map(A=>({fieldName:A}))}},colorTheme:jx(a,t)}}function mT(e,t){let r=t.annotationMap.get(e),{field_name:n,field_values:o}=e.params;return{annotationId:r,fieldName:n,fieldValues:o?{name:"selected",params:o.map(i=>({value:i}))}:{name:"all",params:{}},nullIfEmpty:!1}}function FTt(e){let t=UVe(e),r=e.params;switch(r.type){case"cartoon":return{type:{name:"cartoon",params:{alpha:t,tubularHelices:r.tubular_helices}},sizeTheme:{name:"uniform",params:{value:r.size_factor}}};case"backbone":return{type:{name:"backbone",params:{alpha:t}},sizeTheme:{name:"uniform",params:{value:r.size_factor}}};case"ball_and_stick":return{type:{name:"ball-and-stick",params:{sizeFactor:.5,sizeAspectRatio:.5,alpha:t,ignoreHydrogens:r.ignore_hydrogens}},sizeTheme:{name:"uniform",params:{value:r.size_factor}}};case"line":return{type:{name:"line",params:{alpha:t,ignoreHydrogens:r.ignore_hydrogens}},sizeTheme:{name:"uniform",params:{value:r.size_factor}}};case"spacefill":return{type:{name:"spacefill",params:{alpha:t,ignoreHydrogens:r.ignore_hydrogens}},sizeTheme:{name:"physical",params:{scale:r.size_factor}}};case"carbohydrate":return{type:{name:"carbohydrate",params:{alpha:t,sizeFactor:1.75}},sizeTheme:{name:"uniform",params:{value:r.size_factor}}};case"surface":return{type:{name:r.surface_type==="gaussian"?"gaussian-surface":"molecular-surface",params:{alpha:t,ignoreHydrogens:r.ignore_hydrogens}},sizeTheme:{name:"physical",params:{scale:r.size_factor}}};case"putty":{let n=r.size_theme??"uniform";return{type:{name:"putty",params:{alpha:t,sizeFactor:r.size_factor}},sizeTheme:n==="uncertainty"?{name:"uncertainty",params:{}}:{name:"uniform",params:{value:r.size_factor}}}}default:throw new Error("NotImplementedError")}}function RVe(e){let t=FTt(e),r=dT(e);return r&&(t.type.params={...t.type?.params,clip:r}),e.custom?.molstar_representation_params&&(t.type.params={...t.type.params,...e.custom.molstar_representation_params}),t}function UVe(e){let t=WE(e).filter(r=>r.kind==="opacity");return t.length>0?t[t.length-1].params.opacity:1}function Gre(e){return{invert:!!e.params.invert,transform:e.params.check_transform?Y.fromArray(Y(),e.params.check_transform,0):Y.identity()}}function wTt(e){switch(e.params.type){case"sphere":return{type:"sphere",position:B.ofArray(e.params.center),scale:typeof e.params.radius=="number"?B.create(2*e.params.radius,2*e.params.radius,2*e.params.radius):B.create(2,2,2),rotation:{axis:B.create(1,0,0),angle:0},...Gre(e)};case"plane":{let o=B.create(0,1,0),i=B.normalize(B(),B.ofArray(e.params.normal)),a=B.cross(B(),o,i),A=B.magnitude(a)<1e-6;return{type:"plane",position:B.ofArray(e.params.point),scale:B.create(1,1,1),rotation:{axis:A?B.unitX:a,angle:A?0:B.angle(o,i)*180/Math.PI},...Gre(e)}}case"box":let t=gr.fromMat3(gr(),Ht.fromArray(Ht(),e.params.rotation,0)),r=B(),n=gr.getAxisAngle(r,t)*180/Math.PI;return{type:"cube",position:B.ofArray(e.params.center),scale:B.ofArray(e.params.size),rotation:{axis:r,angle:n},...Gre(e)};default:console.warn(`Mol* MVS: Unsupported clip type "${e.params.type}" in node ${e.ref}.`)}}function dT(e){let t=WE(e).filter(o=>o.kind==="clip");if(!t.length)return;let r=t[0].params.variant==="object"?"instance":"pixel",n=t.map(wTt).filter(o=>!!o);return{variant:r,objects:n}}function hVe(e){return e.custom?"molstar_use_default_coloring"in e.custom||"molstar_color_theme_name"in e.custom:!1}function yVe(e){if(!e?.molstar_use_default_coloring)return{name:e?.molstar_color_theme_name??void 0,params:e?.molstar_color_theme_params??{}}}function jx(e,t){if(e?.kind==="representation"){let r=WE(e).filter(n=>n.kind==="color"||n.kind==="color_from_uri"||n.kind==="color_from_source");if(r.length===0)return{name:"uniform",params:{value:Ui(tT)}};if(r.length===1&&hVe(r[0]))return yVe(r[0].custom);if(r.length===1&&RTt(r[0]))return jx(r[0],t);{let n=r.map(o=>{let i=jx(o,t);if(i)return{theme:i,selection:gT(o.params.selector)}}).filter(o=>!!o);return{name:UO,params:{layers:n}}}}if(e?.kind==="color")return hVe(e)?yVe(e.custom):{name:"uniform",params:{value:Ui(e.params.color)}};if(e?.kind==="color_from_uri"||e?.kind==="color_from_source"){let r=t.annotationMap.get(e);if(r===void 0)return{name:"uniform",params:{}};let n=e.params.field_name;return{name:xO.name,params:{annotationId:r,fieldName:n,background:AT,palette:kre(e.params.palette)}}}}function RTt(e){return!wn(e.params.selector)||e.params.selector==="all"}var Kx=Ui(tT);function kre(e){if(!e)return{name:"direct",params:{}};if(e.kind==="categorical"){let t=Nre(Yke,e);return{name:"categorical",params:{colors:UTt(t.colors),repeatColorList:t.repeat_color_list,sort:t.sort,sortDirection:t.sort_direction,caseInsensitive:t.case_insensitive,setMissingColor:!!t.missing_color,missingColor:Ui(t.missing_color)??Kx}}}if(e.kind==="discrete"){let t=Nre(Oke,e);return{name:"discrete",params:{colors:LTt(t.colors,t.reverse),mode:t.mode,xMin:t.value_domain[0],xMax:t.value_domain[1]}}}if(e.kind==="continuous"){let t=Nre(Jke,e),r=TTt(t.colors,t.reverse);return{name:"continuous",params:{colors:r,mode:t.mode,xMin:t.value_domain[0],xMax:t.value_domain[1],setUnderflowColor:!!t.underflow_color,underflowColor:(t.underflow_color==="auto"?PTt(r.colors):Ui(t.underflow_color))??Kx,setOverflowColor:!!t.overflow_color,overflowColor:(t.overflow_color==="auto"?GTt(r.colors):Ui(t.overflow_color))??Kx}}}throw new Error(`NotImplementedError: palettePropsFromMVSPalette is not implemented for palette kind "${e.kind}"`)}function Nre(e,t){let r={...e};for(let n in t){let o=t[n];o!==void 0&&(r[n]=o)}return r}function UTt(e){if(typeof e=="string"){if(e in zx)return{name:"list",params:{kind:"set",colors:zx[e].list}};if(e in Lre){let t=Lre[e];return{name:"dictionary",params:Object.entries(t).map(([r,n])=>({value:r,color:n}))}}console.warn(`Could not find named color palette "${e}"`)}return Array.isArray(e)?{name:"list",params:{kind:"set",colors:e.map(t=>Ui(t)??Kx)}}:typeof e=="object"?{name:"dictionary",params:Object.entries(e).map(([t,r])=>({value:t,color:Ui(r)??Kx}))}:{name:"list",params:{kind:"set",colors:[]}}}function LTt(e,t){if(typeof e=="string"){if(e in zx){let r=zx[e],n=t?r.list.slice().reverse():r.list,o=1/n.length;return n.map((i,a)=>({color:ke.fromColorListEntry(i),fromValue:a*o,toValue:(a+1)*o}))}console.warn(`Could not find named color palette "${e}"`)}if(Array.isArray(e)&&e.every(r=>typeof r=="string")){let r=t?e.slice().reverse():e,n=1/e.length;return r.map((o,i)=>({color:Ui(o)??AT,fromValue:i*n,toValue:(i+1)*n}))}return Array.isArray(e)&&e.every(r=>Array.isArray(r)&&r.length===2)?e.map((r,n)=>({color:Ui(r[0])??AT,fromValue:r[1],toValue:e[n+1]?.[1]??1/0})):Array.isArray(e)&&e.every(r=>Array.isArray(r)&&r.length===3)?e.map(r=>({color:Ui(r[0])??AT,fromValue:r[1]??-1/0,toValue:r[2]??1/0})):[]}function TTt(e,t){if(typeof e=="string"){if(e in zx){let r=zx[e],n=t?r.list.slice().reverse():r.list,o=n.length-1;return{kind:"interpolate",colors:n.map((i,a)=>[ke.fromColorListEntry(i),a/o])}}console.warn(`Could not find named color palette "${e}"`)}if(Array.isArray(e)){if(e.every(r=>Array.isArray(r)))return{kind:"interpolate",colors:e.map(r=>[Ui(r[0])??Kx,r[1]])};{let r=t?e.slice().reverse():e,n=r.length-1;return{kind:"interpolate",colors:r.map((o,i)=>[Ui(o)??Kx,i/n])}}}return{kind:"interpolate",colors:[]}}function PTt(e){if(e.length!==0)return e.every(t=>Array.isArray(t))?ke.fromColorListEntry(e.reduce((t,r)=>t[1]<r[1]?t:r)):ke.fromColorListEntry(e[0])}function GTt(e){if(e.length!==0)return e.every(t=>Array.isArray(t))?ke.fromColorListEntry(e.reduce((t,r)=>t[1]>r[1]?t:r)):ke.fromColorListEntry(e[e.length-1])}function LVe(e){let t=new Map;return hu(e,void 0,(r,n)=>{r.kind==="representation"&&t.set(r,r),r.kind!=="structure"&&t.has(r)&&n&&!t.has(n)&&t.set(n,t.get(r))}),hu(e,(r,n)=>{!t.has(r)&&n&&t.has(n)&&t.set(r,t.get(n))}),t}function TVe(e){let t=UVe(e),r=dT(e),n=e.params,o=typeof n.absolute_isovalue=="number"?Ze.IsoValue.absolute(n.absolute_isovalue):Ze.IsoValue.relative(n.relative_isovalue??0);switch(n.type){case"isosurface":let i=[];return n.show_wireframe&&i.push("wireframe"),n.show_faces&&i.push("solid"),{type:{name:"isosurface",params:{alpha:t,isoValue:o,visuals:i,clip:r}}};case"grid_slice":let A={name:n.relative_index!==void 0?`relative${n.dimension.toUpperCase()}`:n.dimension,params:n.relative_index??n.relative_index};return{type:{name:"slice",params:{alpha:t,dimension:A,isoValue:o,clip:r}}};default:throw new Error("NotImplementedError")}}function PVe(e,t){if(e?.kind!=="volume_representation")return;let r=WE(e).filter(n=>n.kind==="color");if(r.length===0)return{name:"uniform",params:{value:Ui(tT)}};if(r.length===1)return jx(r[0],t)}async function kVe(e,t,r,n){if(!t.animation)return;let o=dO(t.animation,M1),i=o.children?.filter(p=>p.kind==="interpolate");if(!i?.length)return;let a=Math.max(t.animation.params?.duration_ms??0,...i.map(p=>(p.params.start_ms??0)+p.params.duration_ms)),A=[],s=o.params?.frame_time_ms??1e3/60,c=Math.ceil(a/s),l=VVe(t.root,new Map,[]),u=new Map,g=MTt(i),m;for(let p=0;p<=c;p++){let d=p*s,f=kTt(t.root,g,d,u,l);f===m||m&&ka(f,m)?A[A.length-1][1]+=s:A.push([f,s]),m=f,e.shouldUpdate&&await e.update({message:`Generating transition for snapshot ${r+1}/${n}`,current:p+1,max:c})}return{tree:o,frametimeMs:s,frames:A}}var rb=sU;function NTt(e){let t=e.params.property;return Array.isArray(t)?`${e.params.target_ref}:${t.join(".")}`:`${e.params.target_ref}:${t}`}function MTt(e){let t=new Map,r=[];for(let n of e){let o=NTt(n);if(!t.has(o)){let i=[];t.set(o,i),r.push(i)}t.get(o).push(n)}for(let n of r)n.sort((o,i)=>{let a=(o.params.start_ms??0)-(i.params.start_ms??0);return a!==0?a:o.params.duration_ms-i.params.duration_ms});return r}function kTt(e,t,r,n,o){let i=!1,a=Wc(e,A=>{for(let s of t){let c=s[0],l=o.get(c.params.target_ref);if(!l)continue;let u=HO(A,l,0),g=c.params.property[0]==="custom"?u?.custom:u?.params;if(!g)continue;let m=c.params.property[0]==="custom"?1:0,p=c,d;for(let E=s.length-1;E>0;E--){let b=s[E],x=b.params.start_ms??0;if(r>=x){p=b,d=E>0?s[E-1]:void 0;break}}n.has(p)||n.set(p,{});let f=n.get(p),I=p.params.start_ms??0,C=p.params.duration_ms??0,y=(r-I)/C,Q;p.params.kind==="transform_matrix"?Q=_Tt(p,g,$t(y,0,1),f,m,d):Q=VTt(p,g,y,f,m,d),Q!==void 0&&(i=!0,zTt(g,p.params.property,Q,m))}});return i?a:e}function MO(e,t,r){let n=e*(t||1);return n<1?n:r?Math.abs(n-1)<1e-6?1:(n=n%2,n>1?2-n:n):(n=n%1,n===0?1:n)}function HTt(e){if(!(!e||e.params.kind==="transform_matrix"))return e.params.end}function VTt(e,t,r,n,o,i){if(e.params.kind==="transform_matrix"||i&&i.params.kind==="transform_matrix")return;let a=e.params.start??HTt(i)??HO(t,e.params.property,o);e.params.kind==="color"&&!n.paletteFn&&(n.paletteFn=KTt(e));let A=e.params.end;if(r<=0)return a;if(r>=1-1e-6&&!e.params.alternate_direction&&e.params.kind!=="color")return A;let s=$t(r,0,1);if(s=MO(s,e.params.frequency??1,!!e.params.alternate_direction),s=(rb[e.params.easing??"linear"]??rb.linear)(s),e.params.kind==="scalar")return YTt(a,A,s,e.params.noise_magnitude??0,!!e.params.discrete);if(e.params.kind==="vec3")return OTt(a,A,s,e.params.noise_magnitude??0,!!e.params.spherical);if(e.params.kind==="rotation_matrix")return HVe(a,A,s,e.params.noise_magnitude??0,n);if(e.params.kind==="color"){if(n.paletteFn){let u=n.paletteFn(s);return ke.toHexStyle(u)}let l=typeof a=="object"?HO(t,e.params.property,o):void 0;return JTt(a,A,s,n,l)}}function Hre(e,t){if(!(!e||e.params.kind!=="transform_matrix"))return e.params[t]}var TB={pivotTranslation:Y(),pivotTranslationInv:Y(),rotation:Y(),scale:Y(),translation:Y(),pivotNeg:B(),temp:Y()};function _Tt(e,t,r,n,o,i){if(e.params.kind!=="transform_matrix"||i&&i.params.kind!=="transform_matrix")return;let a=HO(t,e.params.property,o)??Y.identity(),A=e.params.rotation_start??Hre(i,"rotation_start")??Ht.fromMat4(Ht(),a),s=e.params.translation_start??Hre(i,"translation_start")??Y.getTranslation(B(),a),c=e.params.scale_start??Hre(i,"scale_start")??Y.getScaling(B(),a),l=e.params.rotation_end,u=e.params.translation_end,g=e.params.scale_end,m,p,d;if(r<=0)m=A,p=s,d=c;else{let C=$t(r,0,1),y=MO(C,e.params.rotation_frequency??1,!!e.params.rotation_alternate_direction),Q=rb[e.params.rotation_easing??"linear"]??rb.linear;m=HVe(A,l,Q(y),e.params.rotation_noise_magnitude??0,n),y=MO(C,e.params.translation_frequency??1,!!e.params.translation_alternate_direction),Q=rb[e.params.translation_easing??"linear"]??rb.linear,p=GVe(s,u,Q(y),e.params.translation_noise_magnitude??0,!1),y=MO(C,e.params.scale_frequency??1,!!e.params.scale_alternate_direction),Q=rb[e.params.scale_easing??"linear"]??rb.linear,d=GVe(c,g,Q(y),e.params.scale_noise_magnitude??0,!1)}let f=e.params.pivot??B.zero();Y.fromTranslation(TB.translation,p),Y.fromScaling(TB.scale,d),Y.setIdentity(TB.rotation),Y.fromMat3(TB.rotation,m),Y.fromTranslation(TB.pivotTranslation,f),Y.fromTranslation(TB.pivotTranslationInv,B.negate(TB.pivotNeg,f));let I=Y();return Y.mul(I,TB.scale,TB.pivotTranslationInv),Y.mul(I,TB.rotation,I),Y.mul(I,TB.translation,I),I}function YTt(e,t,r,n,o){if(Array.isArray(e)){let i=Array.from({length:e.length}).fill(.1);if(!t||!Array.isArray(t)){for(let a=0;a<e.length;a++)i[a]=GO(e[a],t,r,n,o);return i}for(let a=0;a<e.length;a++)i[a]=GO(e[a],t[a],r,n,o);return i}if(Array.isArray(t)){let i=Array.from({length:t.length}).fill(.1);for(let a=0;a<t.length;a++)i[a]=GO(e,t[a],r,n,o);return i}return GO(e,t,r,n,o)}function GO(e,t,r,n,o){let i=typeof t=="number"?ho(e,t,r):e;return n&&(i+=(Math.random()-.5)*n),o&&(i=Math.round(i)),i}var NO={start:B(),end:B(),v:B()};function OTt(e,t,r,n,o){if((!t||e===t)&&!n)return e;let i=Array.from({length:e.length}).fill(.1);for(let a=0;a<e.length;a+=3){let A=B.fromArray(NO.start,e,a),s;if(t){let c=B.fromArray(NO.end,t,a);s=o?B.slerp(NO.v,A,c,r):B.lerp(NO.v,A,c,r)}else s=B.clone(A);n&&r<=1-1e-6&&(B.random(kO,n),B.add(s,s,kO)),B.toArray(s,i,a)}return i}var kO=B();function GVe(e,t,r,n,o){if((!t||e===t)&&!n)return e;let i;return t?i=o?B.slerp(B(),e,t,r):B.lerp(B(),e,t,r):i=B.clone(e),n&&r<=1-1e-6&&(B.random(kO,n),B.add(i,i,kO)),i}var If={start:gr(),end:gr(),v:gr(),noise:gr(),axis:B(),temp:Y()};function HVe(e,t,r,n,o){if((!t||e===t)&&!n)return e;if(t){o.rotation||(o.rotation={...XTt(e,t),start:gr.fromMat3(gr(),e),end:gr.fromMat3(gr(),t)});let{axis:i,angle:a,start:A,end:s}=o.rotation;a<1e-6?gr.setAxisAngle(If.v,i,r*2*Math.PI):gr.slerp(If.v,A,s,r)}else gr.fromMat3(If.v,e);return n&&r<=1-1e-6&&(B.random(If.axis,1),gr.setAxisAngle(If.noise,If.axis,2*Math.PI*n*(Math.random()-.5)),gr.multiply(If.v,If.noise,If.v)),Y.fromQuat(If.temp,If.v),Ht.fromMat4(Ht(),If.temp)}function NVe(e,t){if(e!=null){if(typeof e=="object"){let r={};if(t)for(let n of Object.keys(t)){let o=QC(t[n]);o!==void 0&&(r[n]=o)}for(let n of Object.keys(e)){let o=QC(e[n]);o!==void 0&&(r[n]=o)}return r}return QC(e)}}function JTt(e,t,r,n,o){let i=$t(r,0,1);if(n.paletteFn){let s=n.paletteFn(i);return ke.toHexStyle(s)}n.startColor===void 0&&(n.startColor=NVe(e,o)),n.endColor===void 0&&(n.endColor=NVe(t,void 0));let{startColor:a,endColor:A}=n;if(typeof a=="object"){if(typeof o!="object")throw new Error("Cannot interpolate from scalar color to color mapping");let s={...o,...a};if(typeof A=="object")for(let c of Object.keys(A))s[c]=ke.toHexStyle(ke.interpolate(a[c],A[c],i));else if(typeof A=="number")for(let c of Object.keys(a))s[c]=ke.toHexStyle(ke.interpolate(a[c],A,i));return s}if(typeof A=="object")throw new Error("Cannot interpolate from scalar color to color mapping");return typeof A=="number"&&typeof a=="number"?ke.toHexStyle(ke.interpolate(a,A,i)):e}function HO(e,t,r){if(typeof t=="string")return e?.[t];let n=e;for(let o=r;o<t.length&&n;o++)n=n[t[o]];return n}function zTt(e,t,r,n){if(!e)return;if(typeof t=="string"){e[t]=r;return}let o=e;for(let i=n;i<t.length&&o;i++)i===t.length-1?o[t[i]]=r:o=o[t[i]]}function VVe(e,t,r){if(e.ref&&t.set(e.ref,[...r]),!e.children)return t;r.push("children");for(let n=0;n<e.children.length;n++){let o=e.children[n];r.push(n),VVe(o,t,r),r.pop()}return r.pop(),t}function KTt(e){if(e.params.kind!=="color"||!e.params.palette)return;let t=kre(e.params.palette);if(t.name==="discrete")return jTt(t.params);if(t.name==="continuous")return WTt(t.params);throw new Error(`NotImplementedError: makePaletteFunction for ${e.name}`)}function jTt(e){let t=0;return e.colors.length===0?()=>t:r=>{let n=$t(r,0,1);for(let o=e.colors.length-1;o>=0;o--){let{color:i,fromValue:a,toValue:A}=e.colors[o];if(a<=n&&n<=A)return i}return t}}function WTt(e){let t=0,{colors:r,checkpoints:n}=fre(e);if(r.length===0)return()=>t;let o=e.setUnderflowColor?e.underflowColor:t,i=e.setOverflowColor?e.overflowColor:t;return a=>{let A=$t(a,0,1),s=je.findPredecessorIndex(n,A);if(s===0)return A===n[0]?r[0]:o;if(s===n.length)return i;let c=(A-n[s-1])/(n[s]-n[s-1]);return ke.interpolate(r[s-1],r[s],c)}}var MVe={Rt:Ht(),R:Ht()};function XTt(e,t){let r=e,n=t,o=Ht.transpose(MVe.Rt,r),i=Ht.mul(MVe.R,n,o),a=i[0]+i[4]+i[8],A=Math.acos($t((a-1)*.5,-1,1)),s=B(),c=1e-6,l=Math.sin(A);if(A<c)return B.set(s,0,0,1),A=0,{axis:s,angle:A};if(Math.PI-A>1e-4)return s[0]=(i[5]-i[7])/(2*l),s[1]=(i[6]-i[2])/(2*l),s[2]=(i[1]-i[3])/(2*l),B.normalize(s,s),{axis:s,angle:A};let u=Math.max(0,(i[0]+1)*.5),g=Math.max(0,(i[4]+1)*.5),m=Math.max(0,(i[8]+1)*.5),p=Math.sqrt(u),d=Math.sqrt(g),f=Math.sqrt(m);return p>=d&&p>=f?(p=Math.max(p,1e-8),d=(i[1]+i[3])/(4*p),f=(i[2]+i[6])/(4*p),B.set(s,p,d,f)):d>=p&&d>=f?(d=Math.max(d,1e-8),p=(i[1]+i[3])/(4*d),f=(i[5]+i[7])/(4*d),B.set(s,p,d,f)):(f=Math.max(f,1e-8),p=(i[2]+i[6])/(4*f),d=(i[5]+i[7])/(4*f),B.set(s,p,d,f)),B.normalize(s,s),{axis:s,angle:Math.PI}}var _Ve={id:"ww-pdb/is-hidden-custom-state",description:"Allow updating initial visibility of nodes",createExtensionContext:()=>({}),action:(e,t)=>{!t.custom||!t.custom?.is_hidden||e.update.to(e.selector).updateState({isHidden:!0})}};var ZTt={radius:h.Numeric(5,{min:0},{description:"Surroundings radius in Angstroms"}),includeSelf:h.Boolean(!0,{description:"Include parent selection itself in the surroundings"}),wholeResidues:h.Boolean(!0,{description:"Include whole residues, instead of individual atoms"}),nullIfEmpty:h.Optional(h.Boolean(!0,{isHidden:!0}))},YVe=Yt.BuiltIn({name:"structure-surroundings",display:{name:"Surroundings",description:"Surroundings of a structure component."},from:te.Molecule.Structure,to:te.Molecule.Structure,params:ZTt})({apply({a:e,params:t,cache:r}){let n=e.data,o=n.parent??n,i=W.Bundle.fromSubStructure(o,n),a=W.Bundle.toExpression(i),A=ce.struct.modifier.includeSurroundings({0:a,radius:t.radius,"as-whole-residues":t.wholeResidues});return t.includeSelf||(A=ce.struct.modifier.exceptBy({0:A,by:a})),uv(o,{label:`Surroundings (${t.radius} \xC5)`,type:{name:"expression",params:A},nullIfEmpty:t.nullIfEmpty},r)},dispose({b:e}){e?.data.customPropertyDescriptors.dispose()}});var qTt=5,OVe={id:"wwpdb/non-covalent-interactions",description:"Allow showing non-covalent interactions around components with molstar_show_non_covalent_interactions additional property",createExtensionContext:()=>({}),action:(e,t,r,n)=>{if(t.kind!=="component"&&t.kind!=="component_from_uri"&&t.kind!=="component_from_source")return;let o=Lke(t);if(!o.molstar_show_non_covalent_interactions)return;let i=qr.apply(e,YVe,{radius:o.molstar_non_covalent_interactions_radius_ang??qTt,includeSelf:!0,wholeResidues:!0,nullIfEmpty:!1});qr.apply(e,ze.Representation.StructureRepresentation3D,{type:{name:"ball-and-stick",params:{sizeFactor:.22,sizeAspectRatio:.73,adjustCylinderLength:!0,xrayShaded:!0,aromaticBonds:!1,multipleBonds:"off",excludeTypes:["hydrogen-bond","metal-coordination"]}},colorTheme:{name:"element-symbol",params:{}},sizeTheme:{name:"physical",params:{}}}),qr.apply(i,ze.Representation.StructureRepresentation3D,{type:{name:"ball-and-stick",params:{sizeFactor:.16,excludeTypes:["hydrogen-bond","metal-coordination"]}},colorTheme:{name:"element-symbol",params:{}},sizeTheme:{name:"physical",params:{}}}),qr.apply(i,ze.Representation.StructureRepresentation3D,{type:{name:"interactions",params:{}},colorTheme:{name:"interaction-type",params:{}},sizeTheme:{name:"uniform",params:{}}})}};var JVe={id:"wwpdb/volume-streaming",description:"Allow turning on volume streaming for a structure",createExtensionContext:()=>({}),action:(e,t,r,n)=>{if(t.kind!=="structure")return;let o=t.custom?.molstar_volume_streaming;if(!o)return;o===!0&&(o={});let i=qr.apply(e,M$,{serverUrl:o.server_url,autoEntries:!o.entries,entries:o.entries,defaultView:o.view,defaultChannelParams:o.channel_params&&Vb(o.channel_params,$Tt)},{state:{isCollapsed:!0}}),a=qr.apply(i,bx);qr.apply(a,ty,{channel:"2fo-fc"},{state:{isGhost:!0},tags:"2fo-fc"}),qr.apply(a,ty,{channel:"fo-fc(+ve)"},{state:{isGhost:!0},tags:"fo-fc(+ve)"}),qr.apply(a,ty,{channel:"fo-fc(-ve)"},{state:{isGhost:!0},tags:"fo-fc(-ve)"}),qr.apply(a,ty,{channel:"em"},{state:{isGhost:!0},tags:"em"})}};function $Tt(e){if(e)return{...e,color:Ui(e.color)}}var Vre={mmcif:{format:"cif",is_binary:!1},bcif:{format:"cif",is_binary:!0},pdb:{format:"pdb",is_binary:!1},pdbqt:{format:"pdbqt",is_binary:!1},gro:{format:"gro",is_binary:!1},xyz:{format:"xyz",is_binary:!1},mol:{format:"mol",is_binary:!1},sdf:{format:"sdf",is_binary:!1},mol2:{format:"mol2",is_binary:!1},lammpstrj:{format:"lammpstrj",is_binary:!1},xtc:{format:"xtc",is_binary:!0},nctraj:{format:"nctraj",is_binary:!0},dcd:{format:"dcd",is_binary:!0},trr:{format:"trr",is_binary:!0},psf:{format:"psf",is_binary:!1},prmtop:{format:"prmtop",is_binary:!1},top:{format:"top",is_binary:!1},map:{format:"map",is_binary:!0},dx:{format:"dx",is_binary:!1},dxbin:{format:"dxbin",is_binary:!0}},ePt=new Set(["psf","prmtop","top"]),tPt={download:e=>({subtree:[]}),parse:(e,t)=>{let{format:r,is_binary:n}=Vre[e.params.format];return t?.kind==="download"?{subtree:[{kind:"download",params:{...t.params,is_binary:n},custom:t.custom,ref:t.ref},{kind:"parse",params:{...e.params,format:r},custom:e.custom,ref:e.ref}]}:(console.warn('"parse" node is not being converted, this is suspicious'),{subtree:[{kind:"parse",params:{...e.params,format:r},custom:e.custom,ref:e.ref}]})},coordinates:(e,t)=>{if(t?.kind!=="parse")throw new Error(`Parent of "coordinates" must be "parse", not "${t?.kind}".`);let{format:r}=Vre[t.params.format];return{subtree:[{kind:"coordinates",params:{format:r},custom:e.custom,ref:e.ref}]}},structure:(e,t)=>{if(t?.kind!=="parse")throw new Error(`Parent of "structure" must be "parse", not "${t?.kind}".`);let{format:r}=Vre[t.params.format];if(ePt.has(t.params.format)){if(!e.params.coordinates_ref)throw new Error(`"structure" node with topology format "${t.params.format}" must have "coordinates_ref" parameter.`);return{subtree:[{kind:"topology_with_coordinates",params:{format:r,coordinates_ref:e.params.coordinates_ref}},{kind:"model",params:ll(e.params,["model_index"])},{kind:"structure",params:tu(e.params,["block_header","block_index","model_index","coordinates_ref"]),custom:e.custom,ref:e.ref}]}}else return e.params.coordinates_ref?{subtree:[{kind:"trajectory",params:{format:r,...ll(e.params,["block_header","block_index"])}},{kind:"model",params:{model_index:0}},{kind:"trajectory_with_coordinates",params:{coordinates_ref:e.params.coordinates_ref}},{kind:"model",params:ll(e.params,["model_index"])},{kind:"structure",params:tu(e.params,["block_header","block_index","model_index","coordinates_ref"]),custom:e.custom,ref:e.ref}]}:{subtree:[{kind:"trajectory",params:{format:r,...ll(e.params,["block_header","block_index"])}},{kind:"model",params:ll(e.params,["model_index"])},{kind:"structure",params:tu(e.params,["block_header","block_index","model_index","coordinates_ref"]),custom:e.custom,ref:e.ref}]}}},rPt=new Set(["download","parse","trajectory","model"]);function _re(e,t){let r=dO(e,yu);t&&Wke(r,t,["uri","url"]);let n=mO(r,tPt);if(n.kind!=="root")throw new Error("Root's type is not 'root' after conversion from MVS tree to Molstar tree.");return jke(n,rPt)}function nPt(e,t){return e=e.toLowerCase(),t.some(r=>r==="*"||e.endsWith(r))}var oPt={mmcif:[".cif",".mmif"],bcif:[".bcif"],pdb:[".pdb",".ent"],pdbqt:[".pdbqt"],gro:[".gro"],xyz:[".xyz"],mol:[".mol"],sdf:[".sdf"],mol2:[".mol2"],lammpstrj:[".lammpstrj"],xtc:[".xtc"],nctraj:[".nc",".nctraj"],dcd:[".dcd"],trr:[".trr"],psf:[".psf"],prmtop:[".prmtop",".parm7"],top:[".top"],map:[".map",".ccp4",".mrc",".mrcs"],dx:[".dx"],dxbin:[".dxbin"]};function iPt(e){let t=[];return hu(e,(r,n)=>{if(r.kind==="parse"&&n?.kind==="download"){let o=n.params.url,i=oPt[r.params.format];nPt(o,i)||t.push(`Parsing data from ${o} as ${r.params.format} format might be a mistake. The file extension doesn't match recommended file extensions (${i.join(", ")})`)}}),t.length>0?t:void 0}function zVe(e){let t=iPt(e);if(t){console.warn("There are potential issues in the MVS tree:");for(let r of t)console.warn(" ",r)}}var KVe={rootKind:"root",nodes:{...sy.nodes,download:{...sy.nodes.download,params:fn({...sy.nodes.download.params.fields,is_binary:_n(Xo,"Specifies whether file is downloaded as bytes array or string")})},parse:{...sy.nodes.parse,params:fn({format:_n(jL,"File format")})},coordinates:{description:"Auxiliary node corresponding to Molstar's CoordinatesFrom*.",parent:["parse"],params:fn({format:_n(jL,"File format")})},trajectory:{description:"Auxiliary node corresponding to Molstar's TrajectoryFrom*.",parent:["parse"],params:fn({format:_n(jL,"File format"),...ll(sy.nodes.structure.params.fields,["block_header","block_index"])})},trajectory_with_coordinates:{description:"Auxiliary node corresponding to assigning a separate coordinates to a trajectory.",parent:["model"],params:fn({coordinates_ref:_n(nn,"Coordinates reference")})},topology_with_coordinates:{description:"Auxiliary node corresponding to assigning a separate coordinates to a topology.",parent:["parse"],params:fn({format:_n(jL,"File format"),coordinates_ref:_n(nn,"Coordinates reference")})},model:{description:"Auxiliary node corresponding to Molstar's ModelFromTrajectory.",parent:["trajectory","trajectory_with_coordinates","topology_with_coordinates"],params:fn(ll(sy.nodes.structure.params.fields,["model_index"]))},structure:{...sy.nodes.structure,parent:["model"],params:fn(tu(sy.nodes.structure.params.fields,["block_header","block_index","model_index","coordinates_ref"]))}}};function Pd(e,t,r={}){let n=ve.create("Load MVS",o=>aPt(o,e,t,r));return e.runTask(n)}async function aPt(e,t,r,n={}){t.errorContext.clear("mvs");try{if(!t.state.hasBehavior(sT))throw new Error("MolViewSpec extension is not loaded.");t.managers.markdownExtensions.audio.dispose(),rVe(t);let i=r.kind==="multiple"?r:Qu.stateToStates(r),a=[];for(let A=0;A<i.snapshots.length;A++){let s=i.snapshots[A],c=A>0?i.snapshots[A-1]:i.snapshots[i.snapshots.length-1];pO(yu,s.root,"MVS",t),s.animation&&pO(M1,s.animation,"Animation",t),n.sanityChecks&&zVe(s.root);let l=_re(s.root,n.sourceUrl);pO(KVe,l,"Converted Molstar",t);let u=WVe(t,l,s.animation,{...s.metadata,previousTransitionDurationMs:c.metadata.transition_duration_ms},n);await APt(e,t,u,s,n,A,i.snapshots.length),a.push({...u,_transientData:{sourceMvsSnapshot:s}}),e.shouldUpdate&&await e.update({message:"Loading MVS...",current:A,max:i.snapshots.length})}n.appendSnapshots||t.managers.snapshot.clear();for(let A of a)t.managers.snapshot.add(A);if(a.length>0){let A=n.defaultSnapshotIndex??0;(A<0||A>=a.length)&&(A=0),await yt.State.Snapshots.Apply(t,{id:a[A].snapshot.id})}}catch(o){throw t.log.error(`${o}`),o}finally{if(!n.doNotReportErrors)for(let o of t.errorContext.get("mvs"))t.log.warn(o),yt.Toast.Show(t,{title:"Error",message:o,timeoutMs:1e4});t.errorContext.clear("mvs")}}async function APt(e,t,r,n,o,i,a){let A=await kVe(e,n,i,a);if(!A?.frames.length)return;let s={autoplay:!!A.tree.params?.autoplay,loop:!!A.tree.params?.loop,frames:[]};for(let c=0;c<A.frames.length;c++){let l=A.frames[c],u=_re(l[0],o.sourceUrl),g=WVe(t,u,n.animation,{...n.metadata,previousTransitionDurationMs:A.frametimeMs},o);Ho.reuseTransformParams(g.snapshot.data.tree,r.snapshot.data.tree),s.frames.push({durationInMs:l[1],data:g.snapshot.data,camera:A.tree.params?.include_camera?g.snapshot.camera:void 0,canvas3d:A.tree.params?.include_canvas?g.snapshot.canvas3d:void 0}),e.shouldUpdate&&await e.update({message:`Loading animation for snapshot ${i+1}/${a}...`,current:c+1,max:A.frames.length})}r.snapshot.transition=s}function WVe(e,t,r,n,o){let i=sPt.create(),a=BVe(e,t,cPt,i,{replaceExisting:!0,extensions:o?.extensions??lPt});a.canvas3d={props:e.canvas3d?tVe(e.canvas3d.props,i.canvas,r):void 0},o?.keepCamera||(o.keepCameraOrientation?a.camera=Fre(e,i,{previousTransitionDurationMs:n.previousTransitionDurationMs,ignoreCameraOrientation:!0}):a.camera=Fre(e,i,{previousTransitionDurationMs:n.previousTransitionDurationMs})),a.durationInMs=n.linger_duration_ms+(n.previousTransitionDurationMs??0),a.structureFocus={},t.custom?.molstar_on_load_markdown_commands&&(a.onLoadMarkdownCommands=t.custom.molstar_on_load_markdown_commands);let A={key:n.key,name:n.title,description:n.description,descriptionFormat:n.description_format??"markdown"};return Hp.Entry(a,A)}var sPt={create(){return{annotationMap:new Map,camera:{focuses:[]}}}},cPt={root(e,t,r){return r.nearestReprMap=LVe(t),e},download(e,t){return qr.apply(e,G0,{url:t.params.url,isBinary:t.params.is_binary})},parse(e,t){let r=t.params.format;switch(r){case"cif":return qr.apply(e,O6,{});case"pdb":case"pdbqt":case"gro":case"xyz":case"mol":case"sdf":case"mol2":case"xtc":case"lammpstrj":case"dcd":case"nctraj":case"trr":return e;case"psf":return qr.apply(e,J6,{});case"prmtop":return qr.apply(e,z6,{});case"top":return qr.apply(e,K6,{});case"map":return qr.apply(e,j6,{});case"dx":case"dxbin":return qr.apply(e,W6,{});default:console.error(`Unknown format in "parse" node: "${r}"`);return}},coordinates(e,t){let r=t.params.format;switch(r){case"nctraj":return qr.apply(e,kW);case"dcd":return qr.apply(e,GW);case"trr":return qr.apply(e,MW);case"xtc":return qr.apply(e,NW);case"lammpstrj":return qr.apply(e,HW);default:console.error(`Unknown format in "coordinates" node: "${r}"`);return}},trajectory(e,t){let r=t.params.format;switch(r){case"cif":return qr.apply(e,OW,{blockHeader:t.params.block_header??"",blockIndex:t.params.block_index??void 0});case"pdb":case"pdbqt":return qr.apply(e,JW,{variant:r});case"gro":return qr.apply(e,zW);case"xyz":return qr.apply(e,KW);case"mol":return qr.apply(e,WW);case"sdf":return qr.apply(e,XW);case"mol2":return qr.apply(e,ZW);case"lammpstrj":return qr.apply(e,jW);default:console.error(`Unknown format in "trajectory" node: "${r}"`);return}},trajectory_with_coordinates(e,t){let r=qr.apply(e,Ure,{coordinatesRef:t.params.coordinates_ref});return qr.setMvsDependencies(r,[t.params.coordinates_ref])},topology_with_coordinates(e,t){let r,n=t.params.format;switch(n){case"psf":r=qr.apply(e,VW,{});break;case"prmtop":r=qr.apply(e,_W,{});break;case"top":r=qr.apply(e,YW,{});break;default:console.error(`Unknown format in "topology_with_coordinates" node: "${n}"`);return}let o=qr.apply(r,Ure,{coordinatesRef:t.params.coordinates_ref});return qr.setMvsDependencies(o,[t.params.coordinates_ref])},model(e,t,r){let n=xVe(t,r),o=qr.apply(e,YR,{modelIndex:t.params.model_index});return qr.apply(o,OR,{properties:{[Y1.descriptor.name]:{isMvs:!0},[ly.descriptor.name]:{annotations:n}},autoAttach:[Y1.descriptor.name,ly.descriptor.name]}),o},structure(e,t,r){let n=FVe(t),o=qr.apply(e,qW,n),i=uT(o,t),a=SVe(t,r),A=DVe(t,r);qr.apply(o,JR,{properties:{[Hx.descriptor.name]:{tooltips:a},[Vx.descriptor.name]:{tooltips:A}},autoAttach:[Hx.descriptor.name,Vx.descriptor.name]});let s=vVe(t,r);if(s.length>0){let c=r.nearestReprMap?.get(t);qr.apply(o,Xu,{type:{name:wO.name,params:{items:s}},colorTheme:jx(c,r)})}return i},tooltip:void 0,tooltip_from_uri:void 0,tooltip_from_source:void 0,component(e,t){if(PO(t))return e;let r=t.params.selector;return uT(qr.apply(e,Cv,{type:gT(r),label:wVe(r),nullIfEmpty:!1}),t)},component_from_uri(e,t,r){if(PO(t))return;let n=mT(t,r);return uT(qr.apply(e,yre,n),t)},component_from_source(e,t,r){if(PO(t))return;let n=mT(t,r);return uT(qr.apply(e,yre,n),t)},representation(e,t,r){return qr.apply(e,Xu,{...RVe(t),colorTheme:jx(t,r)})},volume(e,t){let r;if(e.transformer?.definition.to.includes(te.Format.Ccp4))r=qr.apply(e,iX,{});else if(e.transformer?.definition.to.includes(te.Format.Dx))r=qr.apply(e,aX,{});else if(e.transformer?.definition.to.includes(te.Format.Cif))r=qr.apply(e,AX,{blockHeader:t.params.channel_id||void 0});else{console.error("Unsupported volume format");return}return EVe(r,t)},volume_representation(e,t,r){return qr.apply(e,_X,{...TVe(t),colorTheme:PVe(t,r)})},color:void 0,color_from_uri:void 0,color_from_source:void 0,label:void 0,label_from_uri(e,t,r){let n=Mre(t,r);return qr.apply(e,Xu,n)},label_from_source(e,t,r){let n=Mre(t,r);return qr.apply(e,Xu,n)},focus(e,t,r){return r.camera.focuses.push({target:e.selector,params:t.params}),e},camera(e,t,r){return r.camera.cameraParams=t.params,e},canvas(e,t,r){return r.canvas=t,e},primitives(e,t,r){let n=iVe(t),o=dT(t),i=qr.apply(e,AVe,{node:t});return qr.setMvsDependencies(i,n),jVe(i,n,o)},primitives_from_uri(e,t,r){let n=new Set(t.params.references),o=dT(t),i=qr.apply(e,aVe,{uri:t.params.uri,format:t.params.format});return qr.setMvsDependencies(i,n),jVe(i,n,o)}};function jVe(e,t,r){let n=qr.setMvsDependencies(qr.apply(e,LO,{kind:"mesh",clip:r},{state:{isGhost:!0}}),t);qr.apply(n,TO);let o=qr.setMvsDependencies(qr.apply(e,LO,{kind:"labels",clip:r},{state:{isGhost:!0}}),t);qr.apply(o,TO);let i=qr.setMvsDependencies(qr.apply(e,LO,{kind:"lines",clip:r},{state:{isGhost:!0}}),t);return qr.apply(i,TO),e}var lPt=[OVe,_Ve,JVe];var Cf;(g=>{g.DefaultServerUrl="https://www.ebi.ac.uk/pdbe/api/validation/residuewise_outlier_summary/entry/";function t(m,p){return`${p}/${m.toLowerCase()}`}g.getEntryUrl=t;function r(m){return!!m&&_t.hasPdbId(m)}g.isApplicable=r,g.Schema={pdbe_structure_quality_report:{updated_datetime_utc:K.Schema.str},pdbe_structure_quality_report_issues:{id:K.Schema.int,..._de,pdbx_PDB_model_num:K.Schema.int,issue_type_group_id:K.Schema.int},pdbe_structure_quality_report_issue_types:{group_id:K.Schema.int,issue_type:K.Schema.str}};function o(m,p){let d=Vm.createInfo(),f=mPt(m,p);return{info:d,data:f}}g.fromJson=o;async function i(m,p,d){let f=gn.getUrlAsset(m.assetManager,t(p.entryId,d.serverUrl)),I=await m.assetManager.resolve(f,"json").runInContext(m.runtime),C=I.data[p.entryId.toLowerCase()];if(!C)throw new Error("missing data");return{value:o(p,C),assets:[I]}}g.fromServer=i;function a(m,p,d){let f=Vm.tryGetInfoFromCif("pdbe_structure_quality_report",p);if(!f)return;let I=u(p),C=dPt(p,I.residues,I.groups);return{info:f,data:C}}g.fromCif=a;async function A(m,p,d){let f=a(m,p,d);return f?{value:f}:i(m,p,d)}g.fromCifOrServer=A;let s=[];function c(m){if(!ge.isAtomic(m.unit))return s;let p=PB.get(m.unit.model).value;if(!p||!p.data)return s;let d=m.unit.residueIndex[m.element];return p.data.issues.has(d)?p.data.issues.get(d):s}g.getIssues=c;function l(m){if(!m)return s;let p=PB.get(m.models[0]).value;return!p||!p.data?s:p.data.issueTypes}g.getIssueTypes=l;function u(m){if(!sn.is(m.sourceData))throw new Error("Data format must be mmCIF.");return{residues:om(g.Schema.pdbe_structure_quality_report_issues,m.sourceData.data.frame.categories.pdbe_structure_quality_report_issues),groups:om(g.Schema.pdbe_structure_quality_report_issue_types,m.sourceData.data.frame.categories.pdbe_structure_quality_report_issue_types)}}})(Cf||={});var Yre={serverUrl:h.Text(Cf.DefaultServerUrl,{description:"JSON API Server URL"})},PB=DA.createProvider({label:"Structure Quality Report",descriptor:{name:"pdbe_structure_quality_report",cifExport:{prefix:"pdbe",context(e){return gPt(e)},categories:[Vm.defaultInfoCategory("pdbe_structure_quality_report",e=>e.info),{name:"pdbe_structure_quality_report_issues",instance(e){return{fields:uPt,source:e.models.map(t=>({data:t,rowCount:t.elements.length}))}}},{name:"pdbe_structure_quality_report_issue_types",instance(e){return eo.Category.ofTable(e.issueTypes)}}]},symbols:{issueCount:qs.Dynamic(iu("pdbe","structure-quality.issue-count",Je.Num),e=>Cf.getIssues(e.element).length)}},type:"static",defaultParams:Yre,getParams:e=>Yre,isApplicable:e=>Cf.isApplicable(e),obtain:async(e,t,r)=>{let n={...h.getDefaultValues(Yre),...r};return await Cf.fromCifOrServer(e,t,n)}}),uPt=eo.fields().index("id").many(p0((e,t)=>t.elements[e],{includeModelNum:!0})).int("issue_type_group_id",(e,t)=>t.groupId[e]).getFields();function gPt(e){let t=new Map,r=[],n=[],o=[],i=Vm.createInfo();for(let a of e.structures){let A=PB.get(a.model).value;if(A&&(i=A.info),!A||!A.data)continue;let{elements:s,property:c}=A.data.issues.getElements(a);if(s.length===0)continue;let l=[];for(let u=0;u<s.length;u++){let g=c(u),m=g.join(",");if(!t.has(m)){let p=t.size+1;t.set(m,p);for(let d of g)n.push(p),o.push(d)}l[u]=t.get(m)}r.push({elements:s,groupId:l})}return{info:i,models:r,issueTypes:Jr.ofArrays(Cf.Schema.pdbe_structure_quality_report_issue_types,{group_id:n,issue_type:o})}}function mPt(e,t){let r=new Map;if(!t.molecules)return;let n=[];for(let o of t.molecules){let i=o.entity_id.toString();for(let a of o.chains){let A=a.struct_asym_id.toString();for(let s of a.models)if(+s.model_id.toString()===e.modelNum)for(let l of s.residues){let u=l.author_residue_number,g=l.author_insertion_code||"",m=e.atomicHierarchy.index.findResidue(i,A,u,g);r.set(m,l.outlier_types);for(let p of l.outlier_types)Po(n,p)}}}return{issues:N2.fromResidueMap(r),issueTypes:n}}function dPt(e,t,r){let n=new Map,{label_entity_id:o,label_asym_id:i,auth_seq_id:a,pdbx_PDB_ins_code:A,issue_type_group_id:s,pdbx_PDB_model_num:c,_rowCount:l}=t,u=pPt(r);for(let m=0;m<l;m++){if(c.value(m)!==e.modelNum)continue;let p=e.atomicHierarchy.index.findResidue(o.value(m),i.value(m),a.value(m),A.value(m));n.set(p,u.get(s.value(m)))}let g=[];return u.forEach(m=>{for(let p of m)Po(g,p)}),{issues:N2.fromResidueMap(n),issueTypes:g}}function pPt(e){let t=new Map,{group_id:r,issue_type:n}=e;for(let o=0;o<e._rowCount;o++){let i,a=r.value(o);t.has(a)?i=t.get(a):(i=[],t.set(a,i)),i.push(n.value(o))}return t}var hf=[ke.fromRgb(170,170,170),ke.fromRgb(0,255,0),ke.fromRgb(255,255,0),ke.fromRgb(255,128,0),ke.fromRgb(255,0,0)],fPt=[["No Issues",hf[1]],["One Issue",hf[2]],["Two Issues",hf[3]],["Three Or More Issues",hf[4]],["Not Applicable",hf[0]]],BPt={type:h.MappedStatic("issue-count",{"issue-count":h.Group({}),"specific-issue":h.Group({kind:h.Text()})})};function XVe(e,t){let r;if(e.structure&&!e.structure.isEmpty&&e.structure.models[0].customProperties.has(PB.descriptor)){let n=Cf.getIssues,o=W.Location.create(e.structure);if(t.type.name==="issue-count")r=i=>W.Location.is(i)?hf[Math.min(3,n(i).length)+1]:Et.isLocation(i)?(o.unit=i.aUnit,o.element=i.aUnit.elements[i.aIndex],hf[Math.min(3,n(o).length)+1]):hf[0];else{let i=t.type.params.kind;r=a=>W.Location.is(a)&&n(a).indexOf(i)>=0?hf[4]:Et.isLocation(a)?(o.unit=a.aUnit,o.element=a.aUnit.elements[a.aIndex],hf[Math.min(3,n(o).length)+1]):hf[0]}}else r=()=>hf[0];return{factory:XVe,granularity:"group",preferSmoothing:!0,color:r,props:t,description:"Assigns residue colors according to the number of quality issues or a specific quality issue. Data from wwPDB Validation Report, obtained via PDBe.",legend:Ba(fPt)}}var Ore={name:"pdbe-structure-quality-report",label:"Structure Quality Report",category:Br.Validation,factory:XVe,getParams:e=>{let t=Cf.getIssueTypes(e.structure);return t.length===0?{type:h.MappedStatic("issue-count",{"issue-count":h.Group({})})}:{type:h.MappedStatic("issue-count",{"issue-count":h.Group({}),"specific-issue":h.Group({kind:h.Select(t[0],h.arrayToOptions(t))},{isFlat:!0})})}},defaultValues:h.getDefaultValues(BPt),isApplicable:e=>Cf.isApplicable(e.structure?.models[0]),ensureCustomProperties:{attach:(e,t)=>t.structure?PB.attach(e,t.structure.models[0],void 0,!0):Promise.resolve(),detach:e=>e.structure&&PB.ref(e.structure.models[0],!1)}};var Jre=er.create({name:"pdbe-structure-quality-report-prop",category:"custom-props",display:{name:"Structure Quality Report",description:"Data from wwPDB Validation Report, obtained via PDBe."},ctor:class extends er.Handler{constructor(){super(...arguments);this.provider=PB;this.labelPDBeValidation={label:t=>{if(this.params.showTooltip)switch(t.kind){case"element-loci":if(t.elements.length===0)return;let r=t.elements[0],n=r.unit;if(!n.model.customProperties.hasReference(PB.descriptor))return;let o=W.Location.create(t.structure,n,n.elements[Ee.getAt(r.indices,0)]),i=Cf.getIssues(o);return i.length===0?"Validation: No Issues":`Validation: ${i.join(", ")}`;default:return}}}}register(){this.ctx.customModelProperties.register(this.provider,this.params.autoAttach),this.ctx.managers.lociLabels.addProvider(this.labelPDBeValidation),this.ctx.representation.structure.themes.colorThemeRegistry.add(Ore)}update(t){let r=this.params.autoAttach!==t.autoAttach;return this.params.autoAttach=t.autoAttach,this.params.showTooltip=t.showTooltip,this.ctx.customModelProperties.setDefaultAutoAttach(this.provider.descriptor.name,this.params.autoAttach),r}unregister(){this.ctx.customModelProperties.unregister(PB.descriptor.name),this.ctx.managers.lociLabels.removeProvider(this.labelPDBeValidation),this.ctx.representation.structure.themes.colorThemeRegistry.remove(Ore)}},params:()=>({autoAttach:h.Boolean(!1),showTooltip:h.Boolean(!0)})});var zre;(A=>{function e(s){let c=Fo.Provider.get(s);return c?.assemblies.length?c.assemblies[0].id:""}A.getFirstFromModel=e;function t(s){return s._staticPropertyData.__PDBePreferredAssebly__||e(s)}A.get=t;function r(s,c){s._staticPropertyData.__PDBePreferredAssebly__=c}A.Schema={pdbe_preferred_assembly:{assembly_id:K.Schema.str}},A.Descriptor={name:"pdbe_preferred_assembly",cifExport:{prefix:"pdbe",context(s){return t(s.firstModel)},categories:[{name:"pdbe_preferred_assembly",instance(s){return eo.Category.ofTable(Jr.ofArrays(A.Schema.pdbe_preferred_assembly,{assembly_id:[s]}))}}]}};function i(s){if(!sn.is(s.sourceData))return;let c=s.sourceData.data.frame.categories.pdbe_preferred_assembly;if(c)return om(A.Schema.pdbe_preferred_assembly,c).assembly_id.value(0)||e(s)}async function a(s,c){if(s.customProperties.has(A.Descriptor))return!0;let l=i(s);if(l===void 0&&c.PDBe_apiSourceJson){let u=await c.PDBe_apiSourceJson(s);if(!u)return!1;l=IPt(s,u)}else return!1;return l?(s.customProperties.add(A.Descriptor),r(s,l),!0):!1}A.attachFromCifOrApi=a})(zre||={});function IPt(e,t){let r=t[0]&&t[0].assemblies;if(!r||!r.length)return zre.getFirstFromModel(e);for(let n of r)if(n.preferred)return n.assembly_id;return r[0].assembly_id}var Kre;(a=>{function e(A){return A._staticPropertyData.__PDBeStructRefSeq__}a.get=e;function t(A,s){A._staticPropertyData.__PDBeStructRefSeq__=s}a.Schema={pdbe_struct_ref_domain:{id:K.Schema.int,db_name:K.Schema.str,db_code:K.Schema.str,identifier:K.Schema.str,name:K.Schema.str,label_entity_id:K.Schema.str,label_asym_id:K.Schema.str,beg_label_seq_id:K.Schema.int,beg_pdbx_PDB_ins_code:K.Schema.str,end_label_seq_id:K.Schema.int,end_pdbx_PDB_ins_code:K.Schema.str}},a.Descriptor={name:"pdbe_struct_ref_domain",cifExport:{prefix:"pdbe",context(A){return e(A.firstModel)},categories:[Vm.defaultInfoCategory("pdbe_struct_ref_domain_info",A=>A.info),{name:"pdbe_struct_ref_domain",instance(A){return!A||!A.data?eo.Category.Empty:eo.Category.ofTable(A.data)}}]}};function o(A){if(!sn.is(A.sourceData))return;let s=A.sourceData.data.frame.categories.pdbe_struct_ref_domain;if(s)return om(a.Schema.pdbe_struct_ref_domain,s)}async function i(A,s){if(A.customProperties.has(a.Descriptor))return!0;let c,l=Vm.tryGetInfoFromCif("pdbe_struct_ref_domain_info",A);if(l)c=o(A);else if(s.PDBe_apiSourceJson){let u=await s.PDBe_apiSourceJson(A);if(!u)return!1;l=Vm.createInfo(),c=CPt(A,u)}else return!1;return A.customProperties.add(a.Descriptor),t(A,{info:l,data:c}),!0}a.attachFromCifOrApi=i})(Kre||={});function CPt(e,t){let r=[],n=1;for(let o of Object.keys(t)){let i=t[o];for(let a of Object.keys(i)){let A=i[a];for(let s of A.mappings)r.push({id:n++,db_name:o,db_code:a,identifier:A.identifier,name:A.name,label_entity_id:""+s.entity_id,label_asym_id:s.struct_asym_id,beg_label_seq_id:s.start.residue_number,beg_pdbx_PDB_ins_code:s.start.author_insertion_code,end_label_seq_id:s.end.residue_number,end_pdbx_PDB_ins_code:s.end.author_insertion_code})}}return Jr.ofRows(Kre.Schema.pdbe_struct_ref_domain,r)}var _s;(c=>{let e;(p=>(p.DensityFit="rcsb-density-fit",p.GeometryQuality="rcsb-geometry-quality",p.RandomCoilIndex="rcsb-random-coil-index",p.Clashes="rcsb-clashes"))(e=c.Tag||={}),c.DefaultBaseUrl="https://files.rcsb.org/validation/view";function r(l,u){let g=l.toLowerCase();return`${u}/${g}_validation.xml`}c.getEntryUrl=r;function n(l){return!!l&&_t.hasPdbId(l)&&!_t.isIntegrative(l)}c.isApplicable=n;function o(l,u){return SPt(l,u)}c.fromXml=o;async function i(l,u,g){let m=gn.getUrlAsset(l.assetManager,r(u.entryId,g.baseUrl)),p=await l.assetManager.resolve(m,"xml").runInContext(l.runtime);return{value:o(p.data,u),assets:[p]}}c.fetch=i;async function a(l,u,g){if(g.input===null)throw new Error("No file given");let m=await l.assetManager.resolve(g.input,"xml").runInContext(l.runtime);return{value:o(m.data,u),assets:[m]}}c.open=a;async function A(l,u,g){switch(g.source.name){case"file":return a(l,u,g.source.params);case"server":return i(l,u,g.source.params)}}c.obtain=A,c.symbols={hasClash:qs.Dynamic(iu("rcsb","validation-report.has-clash",Je.Bool),l=>{let{unit:u,element:g}=l.element;if(!ge.isAtomic(u))return 0;let m=da.get(u.model).value;return m&&m.clashes.getVertexEdgeCount(g)>0}),issueCount:qs.Dynamic(iu("rcsb","validation-report.issue-count",Je.Num),l=>{let{unit:u,element:g}=l.element;return ge.isAtomic(u)&&da.get(u.model).value?.geometryIssues.get(u.residueIndex[g])?.size||0})}})(_s||={});var hPt={input:h.File({accept:".xml,.gz,.zip"})},yPt={baseUrl:h.Text(_s.DefaultBaseUrl,{description:"Base URL to directory tree"})},jre={source:h.MappedStatic("server",{file:h.Group(hPt,{label:"File",isFlat:!0}),server:h.Group(yPt,{label:"Server",isFlat:!0})},{options:[["file","File"],["server","Server"]]})},da=DA.createProvider({label:"Validation Report",descriptor:{name:"rcsb_validation_report",symbols:_s.symbols},type:"dynamic",defaultParams:jre,getParams:e=>jre,isApplicable:e=>_s.isApplicable(e),obtain:async(e,t,r)=>{let n={...h.getDefaultValues(jre),...r};return await _s.obtain(e,t,n)}});function QPt(e,t){let r=new Pu.Builder,{a:n,b:o,edgeProps:{id:i,magnitude:a,distance:A}}=t,s=B(),c=B();return Ye.eachUnitPair(e,(l,u)=>{let g=l.elements,m=u.elements;r.startUnitPair(l.id,u.id);for(let p=0,d=t.edgeCount*2;p<d;++p){let f=je.indexOf(g,n[p]),I=je.indexOf(m,o[p]);f!==-1&&I!==-1&&(l.conformation.position(n[p],s),u.conformation.position(o[p],c),So(A[p],B.distance(s,c),.1)&&r.add(f,I,{id:i[p],magnitude:a[p],distance:A[p]}))}r.finishUnitPair()},{maxRadius:Es(t.edgeProps.distance),validUnit:l=>ge.isAtomic(l),validUnitPair:(l,u)=>l.model===u.model}),new Pu(r.getMap())}function EPt(e,t){let r=[],n=[],o=[],i=[],a=[],A=B(),s=B(),{elements:c}=e,{a:l,b:u,edgeCount:g,edgeProps:m}=t;for(let C=0,y=g*2;C<y;++C){let Q=je.indexOf(c,l[C]),E=je.indexOf(c,u[C]);Q!==-1&&E!==-1&&(e.conformation.position(l[C],A),e.conformation.position(u[C],s),So(m.distance[C],B.distance(A,s),.1)&&(r.push(Q),n.push(E),o.push(m.id[C]),i.push(m.magnitude[C]),a.push(m.distance[C])))}let p=new fa.EdgeBuilder(c.length,r,n),d=new Int32Array(p.slotCount),f=new Float32Array(p.slotCount),I=new Float32Array(p.slotCount);for(let C=0,y=p.edgeCount;C<y;C++)p.addNextEdge(),p.assignProperty(d,o[C]),p.assignProperty(f,i[C]),p.assignProperty(I,a[C]);return p.createGraph({id:d,magnitude:f,distance:I})}function bPt(e,t){let r=_c.Mutable();for(let n=0,o=e.unitSymmetryGroups.length;n<o;++n){let i=e.unitSymmetryGroups[n];if(!ge.isAtomic(i.units[0]))continue;let a=EPt(i.units[0],t);for(let A=0,s=i.units.length;A<s;++A)r.set(i.units[A].id,a)}return{interUnit:QPt(e,t),intraUnit:r}}var my=eA.createProvider({label:"Clashes",descriptor:{name:"rcsb_clashes"},type:"local",defaultParams:{},getParams:e=>({}),isApplicable:e=>!0,obtain:async(e,t)=>{await da.attach(e,t.models[0]);let r=da.get(t.models[0]).value;return{value:bPt(t,r.clashes)}}});function Li(e,t){let r=e.getNamedItem(t);return r!==null?r.value:""}function Wre(e,t,r){let n=e.getNamedItem(t);return n!==null&&n.value===r}function ZVe(e){return{mean:parseFloat(Li(e,"mean")),obs:parseFloat(Li(e,"obsval")),stdev:parseFloat(Li(e,"stdev")),z:parseFloat(Li(e,"Zscore"))}}function qVe(e){return{mean:parseFloat(Li(e,"mean")),obs:parseFloat(Li(e,"obs")),stdev:parseFloat(Li(e,"stdev")),z:parseInt(Li(e,"z"))}}function RC(e,t,r){r.has(t)?r.get(t).push(e):r.set(t,[e])}function xPt(e){let t=[],r=[],n=[],o=[],i=[],a=new Map;return{add(A,s,c,l,u){let g=`${s}|${u?"s":""}`,m=a.get(g);m!==void 0?(t[t.length]=A,r[r.length]=m,n[n.length]=s,o[o.length]=c,i[i.length]=l):a.set(g,A)},get(){let A=new fa.EdgeBuilder(e,t,r),s=new Int32Array(A.slotCount),c=new Float32Array(A.slotCount),l=new Float32Array(A.slotCount);for(let u=0,g=A.edgeCount;u<g;u++)A.addNextEdge(),A.assignProperty(s,n[u]),A.assignProperty(c,o[u]),A.assignProperty(l,i[u]);return A.createGraph({id:s,magnitude:c,distance:l})}}}function SPt(e,t){let r=new Map,n=new Map,o=new Map,i=new Map,a={index:new Map,data:[]},A={index:new Map,data:[]},s=xPt(t.atomicHierarchy.atoms._rowCount),{index:c}=t.atomicHierarchy,l=e.getElementsByTagName("Entry");if(l.length===1){let p=l[0].getElementsByTagName("chemical_shift_list");if(p.length===1){let d=p[0].getElementsByTagName("random_coil_index");for(let f=0,I=d.length;f<I;++f){let{attributes:C}=d[f],y=parseFloat(Li(C,"value")),Q=Li(C,"chain"),E=Li(C,"rescode"),b=parseInt(Li(C,"resnum")),x=c.findResidueAuth({auth_asym_id:Q,auth_comp_id:E,auth_seq_id:b});x!==-1&&o.set(x,y)}}}let u=e.getElementsByTagName("ModelledSubgroup");for(let p=0,d=u.length;p<d;++p){let f=u[p],I=f.attributes,C=parseInt(Li(I,"model"));if(t.modelNum!==C)continue;let y=Li(I,"chain"),Q=Li(I,"resname"),E=parseInt(Li(I,"resnum")),b=Li(I,"icode").trim()||void 0,x=Li(I,"altcode").trim()||void 0,S=c.findResidueAuth({auth_asym_id:y,auth_comp_id:Q,auth_seq_id:E,pdbx_PDB_ins_code:b});if(S===-1)continue;I.getNamedItem("rsrz")!==null&&r.set(S,parseFloat(Li(I,"rsrz"))),I.getNamedItem("rscc")!==null&&n.set(S,parseFloat(Li(I,"rscc")));let w=Li(I,"seq")!==".",R=new Set;if(w){let F=f.getElementsByTagName("bond-outlier");F.length&&R.add("bond-outlier");for(let G=0,N=F.length;G<N;++G){let k=F[G].attributes,J=a.data.length,H=c.findAtomOnResidue(S,Li(k,"atom0")),z=c.findAtomOnResidue(S,Li(k,"atom1"));RC(J,H,a.index),RC(J,z,a.index),a.data.push({tag:"bond-outlier",atomA:H,atomB:z,...qVe(k)})}let v=f.getElementsByTagName("angle-outlier");v.length&&R.add("angle-outlier");for(let G=0,N=v.length;G<N;++G){let k=v[G].attributes,J=a.data.length,H=c.findAtomOnResidue(S,Li(k,"atom0")),z=c.findAtomOnResidue(S,Li(k,"atom1")),_=c.findAtomOnResidue(S,Li(k,"atom2"));RC(J,H,A.index),RC(J,z,A.index),RC(J,_,A.index),A.data.push({tag:"angle-outlier",atomA:H,atomB:z,atomC:_,...qVe(k)})}f.getElementsByTagName("plane-outlier").length&&R.add("plane-outlier"),Wre(I,"rota","OUTLIER")&&R.add("rotamer-outlier"),Wre(I,"rama","OUTLIER")&&R.add("ramachandran-outlier"),Wre(I,"RNApucker","outlier")&&R.add("RNApucker-outlier")}else{let F=f.getElementsByTagName("mog-bond-outlier");F.length&&R.add("mog-bond-outlier");for(let U=0,G=F.length;U<G;++U){let N=F[U].attributes,k=Li(N,"atoms").split(","),J=a.data.length,H=c.findAtomOnResidue(S,k[0]),z=c.findAtomOnResidue(S,k[1]);RC(J,H,a.index),RC(J,z,a.index),a.data.push({tag:"mog-bond-outlier",atomA:H,atomB:z,...ZVe(N)})}let v=f.getElementsByTagName("mog-angle-outlier");v.length&&R.add("mog-angle-outlier");for(let U=0,G=v.length;U<G;++U){let N=v[U].attributes,k=Li(N,"atoms").split(","),J=A.data.length,H=c.findAtomOnResidue(S,k[0]),z=c.findAtomOnResidue(S,k[1]),_=c.findAtomOnResidue(S,k[2]);RC(J,H,A.index),RC(J,z,A.index),RC(J,_,A.index),A.data.push({tag:"mog-angle-outlier",atomA:H,atomB:z,atomC:_,...ZVe(N)})}}let T=f.getElementsByTagName("clash");T.length&&R.add("clash");for(let F=0,v=T.length;F<v;++F){let U=T[F].attributes,G=parseInt(Li(U,"cid")),N=parseFloat(Li(U,"clashmag")),k=parseFloat(Li(U,"dist")),J=Li(U,"atom"),H=c.findAtomOnResidue(S,J,x);H!==-1&&s.add(H,G,N,k,!1)}let L=f.getElementsByTagName("symm-clash");L.length&&R.add("symm-clash");for(let F=0,v=L.length;F<v;++F){let U=L[F].attributes,G=parseInt(Li(U,"scid")),N=parseFloat(Li(U,"clashmag")),k=parseFloat(Li(U,"dist")),J=Li(U,"atom"),H=c.findAtomOnResidue(S,J,x);H!==-1&&s.add(H,G,N,k,!0)}i.set(S,R)}let g=s.get();return{rsrz:r,rscc:n,rci:o,geometryIssues:i,bondOutliers:a,angleOutliers:A,clashes:g}}var Xre=13421772;function $Ve(e,t){let r=()=>Xre,n=oa.create({reverse:!0,domain:[0,.6],listOrName:"red-yellow-blue"}),o=e.structure&&da.get(e.structure.models[0]),i=o?.version,a=o?.value?.rci,A=e.structure?.models[0];if(a&&A){let s=A.atomicHierarchy.residueAtomSegments.index,c=l=>{let u=a.get(s[l]);return u===void 0?Xre:n.color(u)};r=l=>W.Location.is(l)&&l.unit.model===A?c(l.element):Et.isLocation(l)&&l.aUnit.model===A?c(l.aUnit.elements[l.aIndex]):Xre}return{factory:$Ve,granularity:"group",preferSmoothing:!0,color:r,props:t,contextHash:i,description:"Assigns residue colors according to the Random Coil Index value. Data from wwPDB Validation Report, obtained via RCSB PDB.",legend:n.legend}}var VO={name:_s.Tag.RandomCoilIndex,label:"Random Coil Index",category:Br.Validation,factory:$Ve,getParams:()=>({}),defaultValues:h.getDefaultValues({}),isApplicable:e=>!!e.structure&&_s.isApplicable(e.structure.models[0])&&_t.isFromNmr(e.structure.models[0]),ensureCustomProperties:{attach:(e,t)=>t.structure?da.attach(e,t.structure.models[0],void 0,!0):Promise.resolve(),detach:e=>e.structure&&da.ref(e.structure.models[0],!1)}};var pT=9474192,t3e=2188972,r3e=16703627,n3e=16018755,o3e=10813478,DPt=Ba([["Data unavailable",pT],["No issues",t3e],["One issue",r3e],["Two issues",n3e],["Three or more issues",o3e]]);function e3e(e){let t=!!e.structure&&e.structure.models.length>0&&da.get(e.structure.models[0]).value,r=[];if(t){let n=new Set;t.geometryIssues.forEach(o=>o.forEach(i=>n.add(i))),n.forEach(o=>r.push([o,o]))}return{ignore:h.MultiSelect([],r)}}function i3e(e,t){let r=()=>pT,n=e.structure&&e.structure.models.length>0?da.get(e.structure.models[0]):void 0,o=n?.version,i=n?.value,a=e.structure?.models[0];if(i&&a){let{geometryIssues:A,clashes:s,bondOutliers:c,angleOutliers:l}=i,u=a.atomicHierarchy.residueAtomSegments.index,{polymerType:g}=a.atomicHierarchy.derived.residue,m=new Set(t.ignore),p=d=>{let f=u[d],I=A.get(f);if(I===void 0)return pT;let C=lo.differenceSize(I,m);switch(C>0&&g[f]===0&&(C=0,!m.has("clash")&&s.getVertexEdgeCount(d)>0&&(C+=1),!m.has("mog-bond-outlier")&&c.index.has(d)&&(C+=1),!m.has("mog-angle-outlier")&&l.index.has(d)&&(C+=1)),C){case void 0:return pT;case 0:return t3e;case 1:return r3e;case 2:return n3e;default:return o3e}};r=d=>W.Location.is(d)&&d.unit.model===a?p(d.element):Et.isLocation(d)&&d.aUnit.model===a?p(d.aUnit.elements[d.aIndex]):pT}return{factory:i3e,granularity:"group",preferSmoothing:!0,color:r,props:t,contextHash:o,description:"Assigns residue colors according to the number of (filtered) geometry issues. Data from wwPDB Validation Report, obtained via RCSB PDB.",legend:DPt}}var _O={name:_s.Tag.GeometryQuality,label:"Geometry Quality",category:Br.Validation,factory:i3e,getParams:e3e,defaultValues:h.getDefaultValues(e3e({})),isApplicable:e=>_s.isApplicable(e.structure?.models[0]),ensureCustomProperties:{attach:(e,t)=>t.structure?da.attach(e,t.structure.models[0],void 0,!0):Promise.resolve(),detach:e=>e.structure&&da.ref(e.structure.models[0],!1)}};function vPt(e,t,r,n,o,i){if(!ge.isAtomic(t))return At.createEmpty(i);let a=my.get(r).value.intraUnit.get(t.id),{edgeCount:A,a:s,b:c,edgeProps:l}=a,{magnitude:u}=l,{sizeFactor:g}=o;if(!A)return At.createEmpty(i);let{elements:m,conformation:p}=t,d={linkCount:A*2,position:(C,y,Q)=>{p.invariantPosition(m[s[Q]],C),p.invariantPosition(m[c[Q]],y)},style:C=>6,radius:C=>u[C]*g},{mesh:f,boundingSphere:I}=Qc(e,d,o,i);if(I)f.setBoundingSphere(I);else if(f.triangleCount>0){let C=we.expand(we(),r.boundary.sphere,1*g);f.setBoundingSphere(C)}return f}var a3e={...bo,...Nl,linkCap:h.Boolean(!0),sizeFactor:h.Numeric(1,{min:0,max:10,step:.01})};function FPt(e){return Vo({defaultProps:h.getDefaultValues(a3e),createGeometry:vPt,createLocationIterator:PPt,getLoci:LPt,eachLocation:TPt,setUpdateState:(t,r,n)=>{t.createGeometry=r.sizeFactor!==n.sizeFactor||r.radialSegments!==n.radialSegments||r.linkScale!==n.linkScale||r.linkSpacing!==n.linkSpacing||r.linkCap!==n.linkCap}},e)}function wPt(e,t,r,n){return gc.fromPairProvider(r.length,(o,i,a)=>{e.conformation.position(e.elements[t.a[r[o]]],i),e.conformation.position(e.elements[t.b[r[o]]],a)},n)}function RPt(e,t,r,n){let o=n[0];if(o===void 0)return"";let{edgeProps:{id:i,magnitude:a,distance:A}}=r,s=a[o].toFixed(2),c=A[o].toFixed(2);return[`Clash id: ${i[o]} | Magnitude: ${s} \u212B | Distance: ${c} \u212B`,kQ(Et.Location(e,t,r.a[o],e,t,r.b[o]))].join("</br>")}function UPt(e,t,r,n){return ec("intra-clashes",{unit:t,clashes:r},n,o=>wPt(t,r,n,o),()=>RPt(e,t,r,n))}function LPt(e,t,r){let{objectId:n,instanceId:o,groupId:i}=e;if(r===n){let{structure:a,group:A}=t,s=A.units[o];if(ge.isAtomic(s)){let c=my.get(a).value.intraUnit.get(s.id);return UPt(a,s,c,[i])}}return Ir}function TPt(e,t,r){return!1}function PPt(e){let{structure:t,group:r}=e,n=r.units[0],o=my.get(t).value.intraUnit.get(n.id),{a:i}=o,a=o.edgeCount*2,A=r.units.length,s=W.Location.create(t);return rn(a,A,1,(l,u)=>{let g=r.units[u];return s.unit=g,s.element=g.elements[i[l]],s})}function GPt(e,t,r,n,o){let i=my.get(t).value.interUnit,{edges:a,edgeCount:A}=i,{sizeFactor:s}=n;if(!A)return At.createEmpty(o);let c={linkCount:A,position:(g,m,p)=>{let d=a[p],f=t.unitMap.get(d.unitA),I=t.unitMap.get(d.unitB);f.conformation.position(f.elements[d.indexA],g),I.conformation.position(I.elements[d.indexB],m)},style:g=>6,radius:g=>a[g].props.magnitude*s},{mesh:l,boundingSphere:u}=Qc(e,c,n,o);if(u)l.setBoundingSphere(u);else{let g=we.expand(we(),t.boundary.sphere,1*s);l.setBoundingSphere(g)}return l}var A3e={...Us,...Nl,linkCap:h.Boolean(!0),sizeFactor:h.Numeric(1,{min:0,max:10,step:.01})};function NPt(e){return Oa({defaultProps:h.getDefaultValues(A3e),createGeometry:GPt,createLocationIterator:YPt,getLoci:VPt,eachLocation:_Pt,setUpdateState:(t,r,n)=>{t.createGeometry=r.sizeFactor!==n.sizeFactor||r.radialSegments!==n.radialSegments||r.linkScale!==n.linkScale||r.linkSpacing!==n.linkSpacing||r.linkCap!==n.linkCap}},e)}function MPt(e,t,r,n){return gc.fromPairProvider(r.length,(o,i,a)=>{let A=t.edges[r[o]],s=e.unitMap.get(A.unitA),c=e.unitMap.get(A.unitB);s.conformation.position(s.elements[A.indexA],i),c.conformation.position(c.elements[A.indexB],a)},n)}function kPt(e,t,r){let n=r[0];if(n===void 0)return"";let o=t.edges[n],i=e.unitMap.get(o.unitA),a=e.unitMap.get(o.unitB),A=o.props.magnitude.toFixed(2),s=o.props.distance.toFixed(2);return[`Clash id: ${o.props.id} | Magnitude: ${A} \u212B | Distance: ${s} \u212B`,kQ(Et.Location(e,i,o.indexA,e,a,o.indexB))].join("</br>")}function HPt(e,t,r){return ec("inter-clashes",t,r,n=>MPt(e,t,r,n),()=>kPt(e,t,r))}function VPt(e,t,r){let{objectId:n,groupId:o}=e;if(r===n){let i=my.get(t).value.interUnit;return HPt(t,i,[o])}return Ir}function _Pt(e,t,r){return!1}function YPt(e){let t=my.get(e).value.interUnit,r=t.edgeCount,n=1,o=W.Location.create(e);return rn(r,n,1,a=>{let A=t.edges[a];return o.unit=e.unitMap.get(A.unitA),o.element=o.unit.elements[A.indexA],o},!0)}var s3e={"intra-clash":(e,t)=>fo("Intra-unit clash cylinder",e,t,FPt),"inter-clash":(e,t)=>Eo("Inter-unit clash cylinder",e,t,NPt)},c3e={...a3e,...A3e,unitKinds:AB(["atomic"]),visuals:h.MultiSelect(["intra-clash","inter-clash"],h.objectToOptions(s3e))};function OPt(e,t){return h.clone(c3e)}function JPt(e,t){let r=Xt.createMulti("Clashes",e,t,Vn,s3e);return r.setState({markerActions:Ko.Highlighting}),r}var YO={name:_s.Tag.Clashes,label:"Validation Clashes",description:"Displays clashes between atoms as disks. Data from wwPDB Validation Report, obtained via RCSB PDB.",factory:JPt,getParams:OPt,defaultValues:h.getDefaultValues(c3e),defaultColorTheme:{name:"uniform",props:{value:16394495}},defaultSizeTheme:{name:"physical"},isApplicable:e=>e.elementCount>0,ensureCustomProperties:{attach:(e,t)=>my.attach(e,t,void 0,!0),detach:e=>my.ref(e,!1)}};var Zre=13421772;function l3e(e,t){let r=()=>Zre,n=oa.create({minLabel:"Poor",maxLabel:"Better",domain:[2,0],listOrName:"red-yellow-blue"}),o=oa.create({minLabel:"Poor",maxLabel:"Better",domain:[.678,1],listOrName:"red-yellow-blue"}),i=e.structure&&da.get(e.structure.models[0]),a=i?.version,A=e.structure?.models[0];if(i?.value&&A){let{rsrz:s,rscc:c}=i.value,l=A.atomicHierarchy.residueAtomSegments.index,u=g=>{let m=s.get(l[g]);if(m!==void 0)return n.color(m);let p=c.get(l[g]);return p!==void 0?o.color(p):Zre};r=g=>W.Location.is(g)&&g.unit.model===A?u(g.element):Et.isLocation(g)&&g.aUnit.model===A?u(g.aUnit.elements[g.aIndex]):Zre}return{factory:l3e,granularity:"group",preferSmoothing:!0,color:r,props:t,contextHash:a,description:"Assigns residue colors according to the density fit using normalized Real Space R (RSRZ) for polymer residues and real space correlation coefficient (RSCC) for ligands. Colors range from poor (RSRZ = 2 or RSCC = 0.678) - to better (RSRZ = 0 or RSCC = 1.0). Data from wwPDB Validation Report, obtained via RCSB PDB.",legend:n.legend}}var OO={name:_s.Tag.DensityFit,label:"Density Fit",category:Br.Validation,factory:l3e,getParams:()=>({}),defaultValues:h.getDefaultValues({}),isApplicable:e=>!!e.structure&&_s.isApplicable(e.structure.models[0])&&_t.isFromXray(e.structure.models[0])&&_t.probablyHasDensityMap(e.structure.models[0]),ensureCustomProperties:{attach:(e,t)=>t.structure?da.attach(e,t.structure.models[0],void 0,!0):Promise.resolve(),detach:e=>e.structure&&da.ref(e.structure.models[0],!1)}};var $re=er.create({name:"rcsb-validation-report-prop",category:"custom-props",display:{name:"Validation Report",description:"Data from wwPDB Validation Report, obtained via RCSB PDB."},ctor:class extends er.Handler{constructor(){super(...arguments);this.provider=da;this.labelProvider={label:t=>{if(this.params.showTooltip)return[zPt(t),KPt(t),jPt(t)].filter(r=>!!r).join("</br>")}}}register(){Zs.addCustomProp(this.provider.descriptor),this.ctx.customModelProperties.register(this.provider,this.params.autoAttach),this.ctx.managers.lociLabels.addProvider(this.labelProvider),this.ctx.representation.structure.themes.colorThemeRegistry.add(OO),this.ctx.representation.structure.themes.colorThemeRegistry.add(_O),this.ctx.representation.structure.themes.colorThemeRegistry.add(VO),this.ctx.representation.structure.registry.add(YO),this.ctx.query.structure.registry.add(qre),this.ctx.builders.structure.representation.registerPreset(u3e),this.ctx.builders.structure.representation.registerPreset(g3e),this.ctx.builders.structure.representation.registerPreset(m3e)}update(t){let r=this.params.autoAttach!==t.autoAttach;return this.params.autoAttach=t.autoAttach,this.params.showTooltip=t.showTooltip,this.ctx.customStructureProperties.setDefaultAutoAttach(this.provider.descriptor.name,this.params.autoAttach),r}unregister(){Zs.removeCustomProp(this.provider.descriptor),this.ctx.customStructureProperties.unregister(this.provider.descriptor.name),this.ctx.managers.lociLabels.removeProvider(this.labelProvider),this.ctx.representation.structure.themes.colorThemeRegistry.remove(OO),this.ctx.representation.structure.themes.colorThemeRegistry.remove(_O),this.ctx.representation.structure.themes.colorThemeRegistry.remove(VO),this.ctx.representation.structure.registry.remove(YO),this.ctx.query.structure.registry.remove(qre),this.ctx.builders.structure.representation.unregisterPreset(u3e),this.ctx.builders.structure.representation.unregisterPreset(g3e),this.ctx.builders.structure.representation.unregisterPreset(m3e)}},params:()=>({autoAttach:h.Boolean(!1),showTooltip:h.Boolean(!0),baseUrl:h.Text(_s.DefaultBaseUrl)})});function zPt(e){if(e.kind==="element-loci"){if(e.elements.length===0)return;if(e.elements.length===1&&Ee.size(e.elements[0].indices)===1){let{unit:a,indices:A}=e.elements[0],s=da.get(a.model).value;if(!s||!a.model.customProperties.hasReference(da.descriptor))return;let{bondOutliers:c,angleOutliers:l}=s,u=a.elements[Ee.start(A)],g=new Set,m=c.index.get(u);m&&m.forEach(f=>g.add(c.data[f].tag));let p=l.index.get(u);if(p&&p.forEach(f=>g.add(l.data[f].tag)),g.size===0)return"Geometry Quality <small>(1 Atom)</small>: no issues";let d=[];return g.forEach(f=>d.push(f)),`Geometry Quality <small>(1 Atom)</small>: ${d.join(", ")}`}let t=!1,r=new Set,n=new Map;for(let{indices:a,unit:A}of e.elements){let s=da.get(A.model).value;if(!s||!A.model.customProperties.hasReference(da.descriptor))continue;t=!0;let{geometryIssues:c}=s,l=A.model.atomicHierarchy.residueAtomSegments.index,{elements:u}=A;Ee.forEach(a,g=>{let m=u[g],p=l[m],d=ko(p,A.id);if(!r.has(d)){let f=c.get(p);f&&f.forEach(I=>{let C=n.get(I)||0;n.set(I,C+1)}),r.add(d)}})}if(!t)return;let o=`<small>(${r.size} ${r.size>1?"Residues":"Residue"})</small>`;if(n.size===0)return`Geometry Quality ${o}: no issues`;let i=[];return n.forEach((a,A)=>{i.push(`${A}${a>1?` \xD7 ${a}`:""}`)}),`Geometry Quality ${o}: ${i.join(", ")}`}}function KPt(e){if(e.kind==="element-loci"){if(e.elements.length===0)return;let t=new Set,r=new Set,n=new Set,o=0,i=0;for(let{indices:A,unit:s}of e.elements){let c=da.get(s.model).value;if(!c||!s.model.customProperties.hasReference(da.descriptor))continue;let{rsrz:l,rscc:u}=c,g=s.model.atomicHierarchy.residueAtomSegments.index,{elements:m}=s;Ee.forEach(A,p=>{let d=m[p],f=g[d],I=ko(f,s.id);if(!t.has(I)){let C=l.get(f),y=u.get(f);C!==void 0?(o+=C,r.add(I)):y!==void 0&&(i+=y,n.add(I)),t.add(I)}})}if(t.size===0)return;let a=[];if(r.size){let A=`<small>(${r.size} ${r.size>1?"Residues avg.":"Residue"})</small>`,s=o/r.size;a.push(`Real-Space R Z-score ${A}: ${s.toFixed(2)}`)}if(n.size){let A=`<small>(${n.size} ${n.size>1?"Residues avg.":"Residue"})</small>`,s=i/n.size;a.push(`Real-Space Correlation Coefficient ${A}: ${s.toFixed(2)}`)}if(a.length)return a.join("</br>")}}function jPt(e){if(e.kind==="element-loci"){if(e.elements.length===0)return;let t=new Set,r=0;for(let{indices:i,unit:a}of e.elements){let A=da.get(a.model).value;if(!A||!a.model.customProperties.hasReference(da.descriptor))continue;let{rci:s}=A,c=a.model.atomicHierarchy.residueAtomSegments.index,{elements:l}=a;Ee.forEach(i,u=>{let g=l[u],m=c[g],p=ko(m,a.id);if(!t.has(p)){let d=s.get(m);d!==void 0&&(r+=d,t.add(p))}})}if(t.size===0)return;let n=`<small>(${t.size} ${t.size>1?"Residues avg.":"Residue"})</small>`,o=r/t.size;return`Random Coil Index ${n}: ${o.toFixed(2)}`}}var qre=Qo("Residues with Clashes",ce.struct.modifier.union([ce.struct.modifier.wholeResidues([ce.struct.modifier.union([ce.struct.generator.atomGroups({"chain-test":ce.core.rel.eq([ce.ammp("objectPrimitive"),"atomistic"]),"atom-test":_s.symbols.hasClash.symbol()})])])]),{description:"Select residues with clashes in the wwPDB validation report.",category:"Residue Property",ensureCustomProperties:(e,t)=>da.attach(e,t.models[0])}),u3e={id:"preset-structure-representation-rcsb-validation-report-geometry-uality",display:{name:"Validation Report (Geometry Quality)",group:"Annotation",description:"Color structure based on geometry quality; show geometry clashes. Data from wwPDB Validation Report, obtained via RCSB PDB."},isApplicable(e){return e.data.models.length===1&&_s.isApplicable(e.data.models[0])},params:()=>ri.CommonParams,async apply(e,t,r){let n=Pn.resolveAndCheck(r.state.data,e),o=n?.obj?.data;if(!n||!o)return{};await r.runTask(ve.create("Validation Report",async d=>{await da.attach({runtime:d,assetManager:r.managers.asset,errorContext:r.errorContext},o.models[0])}));let i=_O.name,{components:a,representations:A}=await ni.auto.apply(e,{...t,theme:{globalName:i,focus:{name:i}}},r),s=await r.builders.structure.tryCreateComponentFromExpression(n,qre.expression,"clashes",{label:"Clashes"}),{update:c,builder:l,typeParams:u,color:g}=ri.reprBuilder(r,t),m,p;return A&&(m=l.buildRepresentation(c,s,{type:"ball-and-stick",typeParams:u,color:i},{tag:"clashes-ball-and-stick"}),p=l.buildRepresentation(c,s,{type:YO.name,typeParams:u,color:g},{tag:"clashes-repr"})),await c.commit({revertOnError:!0}),{components:{...a,clashes:s},representations:{...A,clashesBallAndStick:m,clashesRepr:p}}}},g3e={id:"preset-structure-representation-rcsb-validation-report-density-fit",display:{name:"Validation Report (Density Fit)",group:"Annotation",description:"Color structure based on density fit. Data from wwPDB Validation Report, obtained via RCSB PDB."},isApplicable(e){return e.data.models.length===1&&_s.isApplicable(e.data.models[0])&&_t.isFromXray(e.data.models[0])&&_t.probablyHasDensityMap(e.data.models[0])},params:()=>ri.CommonParams,async apply(e,t,r){let n=Pn.resolveAndCheck(r.state.data,e),o=n?.obj?.data;if(!n||!o)return{};await r.runTask(ve.create("Validation Report",async a=>{await da.attach({runtime:a,assetManager:r.managers.asset,errorContext:r.errorContext},o.models[0])}));let i=OO.name;return await ni.auto.apply(e,{...t,theme:{globalName:i,focus:{name:i}}},r)}},m3e={id:"preset-structure-representation-rcsb-validation-report-random-coil-index",display:{name:"Validation Report (Random Coil Index)",group:"Annotation",description:"Color structure based on Random Coil Index. Data from wwPDB Validation Report, obtained via RCSB PDB."},isApplicable(e){return e.data.models.length===1&&_s.isApplicable(e.data.models[0])&&_t.isFromNmr(e.data.models[0])},params:()=>ri.CommonParams,async apply(e,t,r){let n=Pn.resolveAndCheck(r.state.data,e),o=n?.obj?.data;if(!n||!o)return{};await r.runTask(ve.create("Validation Report",async a=>{await da.attach({runtime:a,assetManager:r.managers.asset,errorContext:r.errorContext},o.models[0])}));let i=VO.name;return await ni.auto.apply(e,{...t,theme:{globalName:i,focus:{name:i}}},r)}};var WPt={typeId:h.Select(0,[[0,"0"]])},p3e=h.clone(WPt);function XPt(e){return f3e(e).value?.params??p3e}var ene="sb-ncbr-partial-charges-property-data";function f3e(e){if(ene in e._staticPropertyData)return e._staticPropertyData[ene];let t;if(!nl.isApplicable(e))t={value:void 0};else{let r=ZPt(e),n=qPt(e),o=$Pt(e,n),i=d3e(n),a=d3e(o),A=eGt(i,a),s=Array.from(r.entries()).map(([l,u])=>[l,u]),c={typeId:h.Select(1,s)};t={value:{typeIdToMethod:r,typeIdToAtomIdToCharge:n,typeIdToResidueToCharge:o,maxAbsoluteAtomCharges:i,maxAbsoluteResidueCharges:a,maxAbsoluteAtomChargeAll:A,params:c}}}return e._staticPropertyData[ene]=t,t}function ZPt(e){let t=new Map,r=e.sourceData,n=r.data.frame.categories.sb_ncbr_partial_atomic_charges_meta.rowCount,o=r.data.frame.categories.sb_ncbr_partial_atomic_charges_meta.getField("id"),i=r.data.frame.categories.sb_ncbr_partial_atomic_charges_meta.getField("method");if(!o||!i)return t;for(let a=0;a<n;++a){let A=o.int(a),s=i.str(a);t.set(A,s)}return t}function qPt(e){let t=new Map,r=e.sourceData,n=r.data.frame.categories.sb_ncbr_partial_atomic_charges.rowCount,o=r.data.frame.categories.sb_ncbr_partial_atomic_charges.getField("type_id"),i=r.data.frame.categories.sb_ncbr_partial_atomic_charges.getField("atom_id"),a=r.data.frame.categories.sb_ncbr_partial_atomic_charges.getField("charge");if(!o||!i||!a)return t;for(let A=0;A<n;++A){let s=o.int(A),c=i.int(A);if(!(a.valueKind(A)===K.ValueKind.Present))continue;let u=a.float(A);t.has(s)||t.set(s,new Map),t.get(s)?.set(c,u)}return t}function $Pt(e,t){let{offsets:r,count:n}=e.atomicHierarchy.residueAtomSegments,{atomId:o}=e.atomicConformation,i=new Map;return t.forEach((a,A)=>{i.has(A)||i.set(A,new Map);let s=i.get(A);for(let c=0;c<n;c++){let l=0;for(let u=r[c],g=r[c+1];u<g;u++){let m=o.value(u);l+=a.get(m)||0}for(let u=r[c],g=r[c+1];u<g;u++){let m=o.value(u);s.set(m,l)}}}),i}function d3e(e){let t=new Map;return e.forEach((r,n)=>{let o=Array.from(r.values()),[i,a]=ul(o),A=Math.max(Math.abs(i),a);t.set(n,A)}),t}function eGt(e,t){let r=0;return e.forEach((n,o)=>{let i=e.get(o)||0;i>r&&(r=i)}),t.forEach((n,o)=>{let i=t.get(o)||0;i>r&&(r=i)}),r}function tne(e){if(!e||!sn.is(e.sourceData))return!1;let{categories:t}=e.sourceData.data.frame;return"atom_site"in t&&"sb_ncbr_partial_atomic_charges"in t&&"sb_ncbr_partial_atomic_charges_meta"in t}var nl=DA.createProvider({label:"SB NCBR Partial Charges Property Provider",descriptor:{name:"sb-ncbr-partial-charges-property-provider"},type:"static",defaultParams:p3e,getParams:e=>XPt(e),isApplicable:e=>tne(e),obtain:(e,t)=>Promise.resolve(f3e(t))});var dy={Bond:16777215,Error:65280,MissingCharge:6749952,Negative:16711680,Zero:16777215,Positive:255,getColor:(e,t)=>{if(e===0)return dy.Zero;if(e<=-t)return dy.Negative;if(e>=t)return dy.Positive;let r=t!==0?Math.abs(e)/t:1,n=e<0?dy.Negative:dy.Positive;return ke.interpolate(dy.Zero,n,r)}},B3e={maxAbsoluteCharge:h.Numeric(0,{min:0},{label:"Charge Range"}),absolute:h.Boolean(!1,{isHidden:!1,label:"Use Range"}),chargeType:h.Select("residue",[["atom","Atom charges"],["residue","Residue charges"]],{isHidden:!1})};function tGt(){return h.clone(B3e)}function I3e(e,t){let r=e.structure?.models[0];if(!r)throw new Error("No model found");let n=nl.get(r).value;if(!n)throw new Error("No partial charges data found");let{absolute:o,chargeType:i}=t,{typeIdToAtomIdToCharge:a,typeIdToResidueToCharge:A,maxAbsoluteAtomCharges:s,maxAbsoluteResidueCharges:c}=n,l=nl.props(r).typeId,u=a.get(l),g=A.get(l),m=0;o?m=t.maxAbsoluteCharge<0?0:t.maxAbsoluteCharge:i==="atom"?m=s.get(l)||0:m=c.get(l)||0;let p=nl.get(r)?.version,d=i==="atom"?u:g,f;return d?f=I=>{let C=-1;if(W.Location.is(I))ge.isAtomic(I.unit)&&(C=Ke.atom.id(I));else if(Et.isLocation(I)&&ge.isAtomic(I.aUnit)){let Q=W.Location.create(e.structure?.root);Q.unit=I.aUnit,Q.element=I.aUnit.elements[I.aIndex],C=Ke.atom.id(Q)}let y=d.get(C);return y===void 0?(console.warn("No charge found for id",C),dy.MissingCharge):dy.getColor(y,m)}:f=I=>dy.MissingCharge,{factory:I3e,granularity:"group",color:f,props:t,description:"Color atoms and residues based on their partial charge.",preferSmoothing:!1,contextHash:p}}var fT={label:"SB NCBR Partial Charges",name:"sb-ncbr-partial-charges",category:Br.Atom,factory:I3e,getParams:tGt,defaultValues:h.getDefaultValues(B3e),isApplicable:e=>!!e.structure&&e.structure.models.some(t=>nl.isApplicable(t)),ensureCustomProperties:{attach:(e,t)=>t.structure?nl.attach(e,t.structure.models[0],void 0,!0):Promise.resolve(),detach:e=>e.structure&&nl.ref(e.structure.models[0],!1)}};function C3e(e){return{label:t=>{if(!W.Loci.is(t))return;let r=t.structure.model;if(!tne(r))return;let n=nl.get(r).value;if(!n)return;let o=W.Loci.getFirstLocation(t);if(!o)return;let i=e.managers.interactivity.props.granularity;if(i!=="element"&&i!=="residue")return;let a=Ke.atom.id(o),{typeIdToAtomIdToCharge:A,typeIdToResidueToCharge:s}=n,c=nl.props(r).typeId,u=i==="residue"?s.get(c)?.get(a):A.get(c)?.get(a);return`<strong>${i==="residue"?"Residue charge":"Atom charge"}: ${u?.toFixed(4)||"undefined"}</strong>`},group:t=>t.toString().replace(/Model [0-9]+/g,"Models")}}var Z1={id:"sb-ncbr-partial-charges-preset",display:{name:"SB NCBR Partial Charges",group:"Annotation",description:"Color atoms and residues based on their partial charge."},isApplicable(e){return!!e.data.models.some(t=>nl.isApplicable(t))},params:()=>ri.CommonParams,async apply(e,t,r){let n=Pn.resolveAndCheck(r.state.data,e),o=n?.obj?.data;if(!n||!o)return{};let i=fT.name;return ni.auto.apply(e,{...t,theme:{globalName:i,focus:{name:i,params:{chargeType:"atom"}}}},r)}};var rne=er.create({name:"sb-ncbr-partial-charges",category:"misc",display:{name:"SB NCBR Partial Charges"},ctor:class extends er.Handler{constructor(){super(...arguments);this.SbNcbrPartialChargesLociLabelProvider=C3e(this.ctx)}register(){this.ctx.customModelProperties.register(nl,this.params.autoAttach),this.ctx.representation.structure.themes.colorThemeRegistry.add(fT),this.ctx.managers.lociLabels.addProvider(this.SbNcbrPartialChargesLociLabelProvider),this.ctx.builders.structure.representation.registerPreset(Z1)}unregister(){this.ctx.customModelProperties.unregister(nl.descriptor.name),this.ctx.representation.structure.themes.colorThemeRegistry.remove(fT),this.ctx.managers.lociLabels.removeProvider(this.SbNcbrPartialChargesLociLabelProvider),this.ctx.builders.structure.representation.unregisterPreset(Z1)}},params:()=>({autoAttach:h.Boolean(!0),showToolTip:h.Boolean(!0)})});var JO;(r=>(r.DefaultServerUrl="https://channelsdb2.biodata.ceitec.cz/api",r.DefaultServerType="pdb"))(JO||={});var h3e={serverType:h.Select("pdb",[["pdb","pdb"]]),serverUrl:h.Text(JO.DefaultServerUrl)},Wx={DefaultServerUrl:new Gp("channelsdb-server","https://channelsdb2.biodata.ceitec.cz/api"),DefaultServerType:new Gp("serverType","pdb")};function y3e(e){return{DefaultServerUrl:e.config.get(Wx.DefaultServerUrl)??Wx.DefaultServerUrl.defaultValue??JO.DefaultServerUrl,DefaultServerType:e.config.get(Wx.DefaultServerType)??Wx.DefaultServerType.defaultValue??JO.DefaultServerType}}var Q3e={webgl:h.Value(null),colorTheme:h.Color(16711680),visual:h.MappedStatic("mesh",{mesh:h.Group({resolution:h.Numeric(2)}),spheres:h.Group({resolution:h.Numeric(2)})}),samplingRate:h.Numeric(1,{min:.05,max:1,step:.05}),showRadii:h.Boolean(!1)},nb=class extends te.Create({name:"Tunnel Entry",typeClass:"Data"}){},q1=class extends te.Create({name:"Tunnels",typeClass:"Data"}){};async function E3e(e){let t=We.createState(512,512,e.prev?.geometry),r=e.tunnel,n=x3e(r.data,e.sampleRate);if(e.showRadii)for(let a=0;a<n.length;a+=1){let A=n[a];t.currentGroup=a;let s=[A.X,A.Y,A.Z];cn(t,s,A.Radius,e.resolution)}else for(let a=0;a<n.length;a+=1){let A=n[a];t.currentGroup=0;let s=[A.X,A.Y,A.Z];cn(t,s,A.Radius,e.resolution)}let o=We.getMesh(t),i=r.props.highlight_label?r.props.highlight_label:r.props.type&&r.props.id?`${r.props.type} ${r.props.id}`:"Tunnel";return e.showRadii?Mr.create(i,r.props,o,()=>e.color,()=>1,a=>`[${n[a].X.toFixed(3)}, ${n[a].Y.toFixed(3)}, ${n[a].Z.toFixed(3)}] - radius: ${n[a].Radius.toFixed(3)}`):Mr.create(i,r.props,o,()=>e.color,()=>1,()=>i)}async function b3e(e){let t=e.tunnel,r=await oGt(t.data,{detail:e.resolution,sampleRate:e.sampleRate,webgl:e.webgl,prev:e.prev?.geometry}),n=t.props.highlight_label?t.props.highlight_label:t.props.type&&t.props.id?`${t.props.type} ${t.props.id}`:"Tunnel";return Mr.create(n,t.props,r,()=>e.color,()=>1,()=>n)}function rGt(e){return B.create(e.X,e.Y,e.Z)}function x3e(e,t){let r=[];if(e.length<4)return e;r.push(e[0]);let n=rGt(e[0]),o=0,i=1/t;for(let a=1;a<e.length-2;a++){let A=e[a-1],s=e[a],c=e[a+1],l=e[a+2];for(let u=0;u<=1;u+=.05){let g=jd(A.X,s.X,c.X,l.X,u,.5),m=jd(A.Y,s.Y,c.Y,l.Y,u,.5),p=jd(A.Z,s.Z,c.Z,l.Z,u,.5),d=B.create(g,m,p),f=B.distance(n,d);o+=f,o>=i&&(r.push({X:g,Y:m,Z:p,Radius:jd(A.Radius,s.Radius,c.Radius,l.Radius,u,.5),Charge:ho(s.Charge,c.Charge,u),FreeRadius:jd(A.FreeRadius,s.FreeRadius,c.FreeRadius,l.FreeRadius,u,.5),T:ho(s.T,c.T,u),Distance:ho(s.Distance,c.Distance,u)}),n=d,o-=i)}}return r.push(e[e.length-1]),r}function nGt(e,t){let r={},n=[],o=[],i=[],a=[],A=[],s=Number.MIN_SAFE_INTEGER,c=0;for(let l of e)n.push(l.X),o.push(l.Y),i.push(l.Z),a.push(c),A.push(l.Radius+t),l.Radius>s&&(s=l.Radius),c++;return r={x:n,y:o,z:i,indices:Ee.ofSortedArray(a),radius:A,id:a},r}async function oGt(e,t){let r={...oTe},n=x3e(e,t.sampleRate),o=nGt(n,r.probeRadius),i=rd(o),a=0;for(let d=0;d<o.radius.length;++d){let f=o.radius[d];a<f&&(a=f)}let A=Np(i.box,r),{field:s,transform:c,maxRadius:l}=await aGt({positions:o,boundary:i,maxRadius:a,box:i.box,props:A}).run(),u={isoLevel:A.probeRadius,scalarField:s},g=await gf(u,t.prev).run(),m=Math.ceil(2/1);At.smoothEdges(g,{iterations:m,maxNewEdgeLength:Math.sqrt(2)}),At.transform(g,c),t.webgl&&!t.webgl.isWebGL2?(At.uniformTriangleGroup(g),D.updateIfChanged(g.varyingGroup,!1)):D.updateIfChanged(g.varyingGroup,!0);let p=we.expand(we(),i.sphere,l);return g.setBoundingSphere(p),g.meta.resolution=t.detail,g}function iGt(e,t){return e[0]=e[1]=e[2]=1,t[0]!==0?e[0]=(t[1]+t[2])/-t[0]:t[1]!==0?e[1]=(t[0]+t[2])/-t[1]:t[2]!==0&&(e[2]=(t[0]+t[1])/-t[2]),e}function aGt(e){return ve.create("Tunnel Surface",async t=>await sGt(t,e))}function AGt(e){let t=0,r=2*Math.PI/e,n=new Float32Array(e),o=new Float32Array(e);for(let i=0;i<e;i++)n[i]=Math.cos(t),o[i]=Math.sin(t),t+=r;return{cosTable:n,sinTable:o}}async function sGt(e,t){let r=-1;function n(Be,De,Te,be,Fe){if(r!==-1){let Ae=r;if(Ae!==be&&Ae!==Fe&&o(Ae,Be,De,Te))return Ae;r=-1}for(let Ae=0,fe=E.count;Ae<fe;++Ae){let Qe=Ee.getAt(b,E.indices[Ae]);if(Qe!==be&&Qe!==Fe&&o(Qe,Be,De,Te))return r=Qe,Qe}return-1}function o(Be,De,Te,be){let Fe=T[Be],Ae=x[Be]-De,fe=S[Be]-Te,Qe=w[Be]-be;return Ae*Ae+fe*fe+Qe*Qe<Fe*Fe}function i(Be,De){for(let Te=Be;Te<De;++Te){let be=Ee.getAt(b,Te),Fe=x[be],Ae=S[be],fe=w[be],Qe=T[be],Ie=Qe*Qe;Q.find(Fe,Ae,fe,Qe);let le=Math.ceil(Qe*I),Oe=Math.floor(I*(Fe-U)),tt=Math.floor(I*(Ae-G)),it=Math.floor(I*(fe-N)),Rt=Math.max(0,Oe-le),Mt=Math.max(0,tt-le),Bt=Math.max(0,it-le),Zt=Math.min(H,Oe+le+2),Nr=Math.min(z,tt+le+2),un=Math.min(_,it+le+2);for(let xn=Rt;xn<Zt;++xn){let On=O[xn]-Fe,Zo=xn*ne;for(let oi=Mt;oi<Nr;++oi){let pa=X[oi]-Ae,io=On*On+pa*pa,j=oi*M+Zo;for(let ue=Bt;ue<un;++ue){let et=Ce[ue]-fe,gt=io+et*et;if(gt<Ie){let ht=ue+j;Se[ht]<0&&(Se[ht]*=-1);let wt=Math.sqrt(gt),Ut=Qe/wt,Wt=On*Ut+Fe,qt=pa*Ut+Ae,Kt=et*Ut+fe;if(n(Wt,qt,Kt,be,-1)===-1){let Ot=Qe-wt;Ot<Se[ht]&&(Se[ht]=Ot,ee[ht]=R[Te])}}}}}}}async function a(){for(let Be=0;Be<L;Be+=Ne)i(Be,Math.min(Be+Ne,L)),e.shouldUpdate&&await e.update({message:"projecting points",current:Be,max:L})}let A=B(),s=B(),c=B(),l=B();function u(Be,De){let Te=T[Be],be=T[De],Fe=A[0]=x[De]-x[Be],Ae=A[1]=S[De]-S[Be],fe=A[2]=w[De]-w[Be],Qe=Fe*Fe+Ae*Ae+fe*fe,Ie=Math.sqrt(Qe),le=(Te*Te+Ie*Ie-be*be)/(2*Te*Ie),Oe=Te*le;B.normalize(A,A),iGt(c,A),B.normalize(c,c),B.cross(l,A,c),B.normalize(l,l);let tt=Math.sqrt(Te*Te-Oe*Oe);B.scale(c,c,tt),B.scale(l,l,tt),B.scale(A,A,Oe),s[0]=A[0]+x[Be],s[1]=A[1]+S[Be],s[2]=A[2]+w[Be],r=-1;for(let it=0;it<f;++it){let Rt=oe[it],Mt=ae[it],Bt=s[0]+Rt*c[0]+Mt*l[0],Zt=s[1]+Rt*c[1]+Mt*l[1],Nr=s[2]+Rt*c[2]+Mt*l[2];if(n(Bt,Zt,Nr,Be,De)===-1){let un=Math.floor(I*(Bt-U)),xn=Math.floor(I*(Zt-G)),On=Math.floor(I*(Nr-N)),Zo=Math.max(0,un-C),oi=Math.max(0,xn-C),pa=Math.max(0,On-C),io=Math.min(H,un+C+2),j=Math.min(z,xn+C+2),ue=Math.min(_,On+C+2);for(let et=Zo;et<io;++et){let gt=Bt-O[et],ht=et*ne;for(let wt=oi;wt<j;++wt){let Ut=Zt-X[wt],Wt=gt*gt+Ut*Ut,qt=wt*M+ht;for(let Kt=pa;Kt<ue;++Kt){let Ot=Nr-Ce[Kt],Ar=Wt+Ot*Ot,cr=Kt+qt,rr=Se[cr];if(rr>0&&Ar<rr*rr){Se[cr]=Math.sqrt(Ar);let yr=gt*A[0]+Ut*A[1]+Ot*A[2];ee[cr]=R[Ee.indexOf(b,yr<0?De:Be)]}}}}}}}function g(Be,De){for(let Te=Be;Te<De;++Te){let be=Ee.getAt(b,Te);Q.find(x[be],S[be],w[be],T[be]);for(let Fe=0,Ae=E.count;Fe<Ae;++Fe){let fe=Ee.getAt(b,E.indices[Fe]);be<fe&&u(be,fe)}}}async function m(){for(let Be=0;Be<L;Be+=Ne)g(Be,Math.min(Be+Ne,L)),e.shouldUpdate&&await e.update({message:"projecting torii",current:Be,max:L})}let{resolution:p,probeRadius:d,probePositions:f}=t.props,I=1/p,C=Math.max(5,2+Math.floor(d*I)),y=B.create(t.maxRadius,t.maxRadius,t.maxRadius);B.scale(y,y,2);let Q=ou(t.positions,t.boundary,y),E=Q.result;t.box===null&&(t.box=Q.boundary.box);let{indices:b,x,y:S,z:w,id:R,radius:T}=t.positions,L=Ee.size(b),F=t.maxRadius+p,v=Ct.expand(Ct(),t.box,B.create(F,F,F)),[U,G,N]=v.min,k=Ct.scale(Ct(),v,I),J=Ct.size(B(),k);B.ceil(J,J);let[H,z,_]=J,M=_,q=z,ne=M*q,{cosTable:oe,sinTable:ae}=AGt(f),me=Fr.Space(J,[0,1,2],Float32Array),Se=me.create(),ee=me.create();Se.fill(-1001),ee.fill(-1);let O=$d(H,U,p),X=$d(z,G,p),Ce=$d(_,N,p),Ne=Math.ceil(1e5/(Math.pow(Math.pow(t.maxRadius,3),3)*I));await a(),await m();let $=Fr.create(me,Se),pe=Fr.create(me,ee),ye=Y.identity();return Y.fromScaling(ye,B.create(p,p,p)),Y.setTranslation(ye,v.min),{field:$,idField:pe,transform:ye,resolution:p,maxRadius:t.maxRadius}}var zO=lt.builderFactory("sb-ncbr-tunnels"),nne=zO({name:"sb-ncbr-tunnels-from-data",display:{name:"Tunnels"},from:te.Root,to:q1,params:{data:h.Value([])}})({apply({params:e}){return new q1({tunnels:e.data})}}),one=zO({name:"sb-ncbr-tunnel-from-tunnels",display:{name:"Tunnel Selection"},from:q1,to:nb,params:e=>({index:h.Numeric(0,{min:0,max:e.data.tunnels.length-1,step:1})})})({apply({a:e,params:t}){return new nb({tunnel:e.data.tunnels[t.index]})}}),ine=zO({name:"sb-ncbr-tunnel-from-data",display:{name:"Tunnel Entry"},from:te.Root,to:nb,params:{data:h.Value(void 0,{isHidden:!0})}})({apply({params:e}){return new nb({tunnel:e.data})}}),BT=zO({name:"sb-ncbr-tunnel-shape-provider",display:{name:"Tunnel"},from:nb,to:te.Shape.Provider,params:e=>Q3e})({apply({a:e,params:t}){return ve.create("Tunnel Shape Representation",async r=>new te.Shape.Provider({label:"Surface",data:{params:t,data:e.data},params:At.Params,geometryUtils:At.Utils,getShape:(n,o,i,a)=>o.params.visual.name==="mesh"&&!o.params.showRadii?b3e({tunnel:o.data.tunnel,color:o.params.colorTheme,resolution:o.params.visual.params.resolution,sampleRate:o.params.samplingRate,webgl:o.params.webgl,prev:a}):E3e({tunnel:o.data.tunnel,color:o.params.colorTheme,resolution:o.params.visual.params.resolution,sampleRate:o.params.samplingRate,showRadii:o.params.showRadii,prev:a})},{label:e.data.tunnel.props.label??"Tunnel",description:e.data.tunnel.props.description??(e.data.tunnel.props.type&&e.data.tunnel.props.id)?`${e.data.tunnel.props.type} ${e.data.tunnel.props.id}`:""}))}});var S3e={channelsdb:h.EmptyGroup({label:"ChannelsDB"})},ane=Pa.build({display:{name:"Download Tunnels",description:"Load a tunnels from the provided source and create theirs representations"},from:te.Root,params:(e,t)=>({source:h.MappedStatic("pdb",{pdb:h.Group({provider:h.Group({id:h.Text("1tqn",{label:"PDB Id(s)",description:"One or more comma/space separated PDB ids."}),server:h.MappedStatic("channelsdb",S3e)},{pivot:"id"})},{isFlat:!0,label:"PDB"}),alphafolddb:h.Group({provider:h.Group({id:h.Text("Q8W3K0",{label:"UniProtKB AC(s)",description:"One or more comma/space separated ACs."}),server:h.MappedStatic("channelsdb",S3e)},{pivot:"id"})},{isFlat:!0,label:"AlphaFold DB",description:"Loads the predicted model if available"}),url:h.Group({url:h.Url("")},{isFlat:!0,label:"URL"})})})})(({params:e,state:t},r)=>ve.create("Download Tunnels",async n=>{r.behaviors.layout.leftPanelTabName.next("data");let o=e.source,i;switch(o.name){case"url":i=[{url:o.params.url}];break;case"pdb":i=o.params.provider.server.name==="channelsdb"?[{url:`${r?.config.get(Wx.DefaultServerUrl)}/channels/pdb/${o.params.provider.id}`}]:Or(o);break;case"alphafolddb":i=o.params.provider.server.name==="channelsdb"?[{url:`${r?.config.get(Wx.DefaultServerUrl)}/channels/alphafill/${o.params.provider.id.toLowerCase()}`}]:Or(o);break;default:Or(o)}await t.transaction(async()=>{let a=r.build(),A=r.canvas3dContext?.webgl;for(let s of i){let c=await(await fetch(s.url.toString())).json(),l=[];Object.entries(c.Channels).forEach(([u,g])=>{g.length>0&&g.forEach(m=>{l.push({data:m.Profile,props:{id:m.Id,type:m.Type}})})}),a.toRoot().apply(nne,{data:l}).apply(one).apply(BT,{webgl:A}).apply(ze.Representation.ShapeRepresentation3D),await a.commit()}}).runInContext(n)}));var Qyo=K.Schema.int,Eyo=K.Schema.float;var D3e=(function*(){let e=cGt(Object.values(xt)),t=0;for(;;)yield e[t],t++,t>=e.length&&(t=0)})();function cGt(e){let t=e.length;for(;t!==0;){let r=Math.floor(Math.random()*t);t-=1;let n=e[t];e[t]=e[r],e[r]=n}return e}var Ane=er.create({name:"sb-ncbr-tunnels",category:"misc",display:{name:"SB NCBR Tunnels"},ctor:class extends er.Handler{register(){this.ctx.state.data.actions.add(ane),this.ctx.builders.structure.representation.registerPreset(v3e)}unregister(){this.ctx.state.data.actions.remove(ane),this.ctx.builders.structure.representation.unregisterPreset(v3e)}},params:()=>({autoAttach:h.Boolean(!0)})});function lGt(e){return!!e&&e.models.length===1&&_t.hasPdbId(e.models[0])}var v3e={id:"sb-ncbr-preset-structure-tunnels",display:{name:"Tunnels",group:"Annotation",description:"Shows Tunnels from ChannelsDB contained in the structure."},isApplicable(e){return lGt(e.data)},params:(e,t)=>({...ri.CommonParams,...uGt(t)}),async apply(e,t,r){let n=Pn.resolveAndCheck(r.state.data,e),o=n?.obj?.data;if(!n||!o)return{};let i=r.build(),a=r.canvas3dContext?.webgl,A=await(await fetch(`${t.serverUrl}/channels/${t.serverType}/${o.model.entryId.toLowerCase()}`)).json(),s=[];Object.entries(A.Channels).forEach(([l,u])=>{u.length>0&&u.forEach(g=>{s.push({data:g.Profile,props:{id:g.Id,type:g.Type}})})}),await s.forEach(async l=>{await i.toRoot().apply(ine,{data:l}).apply(BT,{webgl:a,colorTheme:D3e.next().value}).apply(ze.Representation.ShapeRepresentation3D),await i.commit()});let c=await ni.auto.apply(e,{...t},r);return{components:c.components,representations:{...c.representations}}}};function uGt(e){let t=y3e(e),r=h.clone(h3e);return h.setDefaultValues(r,{serverType:t.DefaultServerType,serverUrl:t.DefaultServerUrl}),r}var BA;(r=>{let e;(o=>{function n(i){return{x:new Float64Array(i),y:new Float64Array(i),z:new Float64Array(i)}}o.empty=n})(e=r.Positions||={});function t(n,o,i){return o??={bTransform:Y.zero(),rmsd:0,nAlignedElements:0},i?gGt(i,n,o):i=new Xx(n,o),pGt(i),o}r.compute=t})(BA||={});var Xx=class{constructor(t,r){this.evdCache=Ax.createCache(4);this.translateB=Y.identity();this.rotateB=Y.identity();this.tempMatrix=Y.identity();this.a=t.a,this.b=t.b,this.length=t.length??t.a.x.length,t.centerA?this.centerA=t.centerA:this.centerA=t.centerA=KO(t.a,B(),this.length),t.centerB?this.centerB=t.centerB:this.centerB=t.centerB=KO(t.b,B(),this.length),this.result=r}};function gGt(e,t,r){e.a=t.a,e.b=t.b,e.length=t.length??t.a.x.length,t.centerA?e.centerA=t.centerA:t.centerA=KO(t.a,e.centerA,e.length),t.centerB?e.centerB=t.centerB:t.centerB=KO(t.b,e.centerB,e.length),e.result=r}function KO(e,t,r){let n=0,o=0,i=0;for(let a=0;a<r;a++)n+=e.x[a],o+=e.y[a],i+=e.z[a];return B.set(t,n/r,o/r,i/r),t}function mGt(e){let t=e.evdCache.matrix;Dn.makeZero(t);let r=e.a.x,n=e.a.y,o=e.a.z,i=e.b.x,a=e.b.y,A=e.b.z,s=e.centerA,c=e.centerB,l=0,u=e.length;for(let g=0;g<u;g++){let m=r[g]-s[0],p=n[g]-s[1],d=o[g]-s[2],f=i[g]-c[0],I=a[g]-c[1],C=A[g]-c[2];l+=m*m+p*p+d*d+f*f+I*I+C*C,Dn.add(t,0,0,m*f+p*I+d*C),Dn.add(t,0,1,-(d*I)+p*C),Dn.add(t,0,2,d*f-m*C),Dn.add(t,0,3,-(p*f)+m*I),Dn.add(t,1,0,-(d*I)+p*C),Dn.add(t,1,1,m*f-p*I-d*C),Dn.add(t,1,2,p*f+m*I),Dn.add(t,1,3,d*f+m*C),Dn.add(t,2,0,d*f-m*C),Dn.add(t,2,1,p*f+m*I),Dn.add(t,2,2,-(m*f)+p*I-d*C),Dn.add(t,2,3,d*I+p*C),Dn.add(t,3,0,-(p*f)+m*I),Dn.add(t,3,1,d*f+m*C),Dn.add(t,3,2,d*I+p*C),Dn.add(t,3,3,-(m*f)-p*I+d*C)}return l}function dGt(e){let t=e.evdCache.matrix,r=Dn.get(t,1,3),n=Dn.get(t,2,3),o=Dn.get(t,3,3),i=Dn.get(t,0,3),a=2*n*n,A=2*o*o,s=2*r*r,c=2*r*n,l=2*i*o,u=2*r*o,g=2*i*n,m=2*n*o,p=2*i*r,d=e.translateB;Y.setValue(d,0,3,-e.centerB[0]),Y.setValue(d,1,3,-e.centerB[1]),Y.setValue(d,2,3,-e.centerB[2]),d=e.rotateB,Y.setValue(d,0,0,1-a-A),Y.setValue(d,0,1,c+l),Y.setValue(d,0,2,u-g),Y.setValue(d,1,0,c-l),Y.setValue(d,1,1,1-s-A),Y.setValue(d,1,2,m+p),Y.setValue(d,2,0,u+g),Y.setValue(d,2,1,m-p),Y.setValue(d,2,2,1-s-a),Y.setValue(d,3,3,1),Y.mul(e.tempMatrix,e.rotateB,e.translateB),d=e.translateB,Y.setValue(d,0,3,e.centerA[0]),Y.setValue(d,1,3,e.centerA[1]),Y.setValue(d,2,3,e.centerA[2]),Y.mul(e.result.bTransform,e.translateB,e.tempMatrix)}function pGt(e){let t=mGt(e);Ax.compute(e.evdCache);let r=t-2*e.evdCache.eigenValues[3];r=r<0?0:Math.sqrt(r/e.length),dGt(e),e.result.rmsd=r,e.result.nAlignedElements=e.length}var fGt=(e,t)=>({representationPresetParams:h.Optional(h.Group(ri.CommonParams)),showOriginalCoordinates:h.Optional(h.Boolean(!0,{description:"Show original coordinates for 'model' and 'ideal' structure and do not align them."})),shownCoordinateType:h.Select("ideal",h.arrayToOptions(["ideal","model","both"]),{description:"What coordinate sets are visible."}),aromaticBonds:h.Boolean(!1,{description:"Display aromatic bonds with dashes"}),...TU.CommonParams(e,t)}),sne={id:"preset-trajectory-ccd",display:{name:"Chemical Component",group:"Preset",description:"Shows molecules from the Chemical Component Dictionary."},isApplicable:e=>sQ.is(e.data.representative.sourceData),params:fGt,async apply(e,t,r){let n=Pn.resolveAndCheck(r.state.data,e)?.obj?.data;if(!n)return{};let o=r.builders.structure,i=await o.createModel(e,{modelIndex:0}),a=await o.insertModelProperties(i,t.modelProperties,{isCollapsed:!0}),A=await o.createStructure(a||i,{name:"model",params:{}}),s=await o.insertStructureProperties(A,t.structureProperties),c=t.representationPreset||jO.id,l=t.representationPresetParams||{};if(l.ignoreHydrogens===void 0&&(l.ignoreHydrogens=!0),n.frameCount!==2){let d=sQ.CoordinateType.get(i.obj.data);return await o.representation.applyPreset(s,c,{...l,coordinateType:d}),{models:[i],structures:[A]}}let u=await o.createModel(e,{modelIndex:1}),g=await o.insertModelProperties(u,t.modelProperties,{isCollapsed:!0}),m=await o.createStructure(g||u,{name:"model",params:{}}),p=await o.insertStructureProperties(m,t.structureProperties);if(!t.showOriginalCoordinates){let[d,f]=BGt(A.obj.data,m.obj.data);if(!d)r.log.warn("Cannot align chemical components whose atom sets are disjoint.");else{let{bTransform:I,rmsd:C}=BA.compute({a:d,b:f});await IGt(r,m.cell,I),r.log.info(`Superposed [model] and [ideal] with RMSD ${C.toFixed(2)}.`)}}return await o.representation.applyPreset(s,c,{...l,aromaticBonds:t.aromaticBonds,coordinateType:"ideal",isHidden:t.shownCoordinateType==="model"}),await o.representation.applyPreset(p,c,{...l,aromaticBonds:t.aromaticBonds,coordinateType:"model",isHidden:t.shownCoordinateType==="ideal"}),{models:[i,u],structures:[A,m]}}};function BGt(e,t){let r=F3e(e),n=F3e(t),o=lo.intersection(new Set(r.keys()),new Set(n.keys())),i=[BA.Positions.empty(o.size),BA.Positions.empty(o.size)],a=0;return o.forEach(A=>{i[0].x[a]=e.model.atomicConformation.x[r.get(A)],i[0].y[a]=e.model.atomicConformation.y[r.get(A)],i[0].z[a]=e.model.atomicConformation.z[r.get(A)],i[1].x[a]=t.model.atomicConformation.x[n.get(A)],i[1].y[a]=t.model.atomicConformation.y[n.get(A)],i[1].z[a]=t.model.atomicConformation.z[n.get(A)],a++}),i}function F3e(e){let t=new Map,{label_atom_id:r}=e.model.atomicHierarchy.atoms;for(let n=0,o=r.rowCount;n<o;++n){let i=r.value(n);t.has(i)||t.set(i,t.size)}return t}function IGt(e,t,r){let n=e.state.data.build().to(t).insert(ze.Model.TransformStructureConformation,{transform:{name:"matrix",params:{data:r,transpose:!1}}});return e.runTask(e.state.data.updateTree(n))}var jO={id:"preset-structure-representation-chemical-component",display:{name:"Chemical Component",group:"Miscellaneous",description:"Show 'Ideal' and 'Model' coordinates of chemical components."},isApplicable:e=>sQ.is(e.data.model.sourceData),params:()=>({...ri.CommonParams,aromaticBonds:h.Boolean(!0),coordinateType:h.Select("ideal",h.arrayToOptions(["ideal","model"])),isHidden:h.Boolean(!1)}),async apply(e,t,r){let n=Pn.resolveAndCheck(r.state.data,e);if(!n)return{};let{aromaticBonds:o,coordinateType:i,isHidden:a}=t,A={[i]:await $c(r,n,"all",{label:wu(i),tags:[i]})},s=n.obj.data,{update:c,builder:l,typeParams:u}=ri.reprBuilder(r,t),g={[i]:l.buildRepresentation(c,A[i],{type:"ball-and-stick",typeParams:{...u,aromaticBonds:o}},{initialState:{isHidden:a}})};return A[i]?.cell?.state&&a&&en.assignState(A[i].cell.state,{isHidden:a}),await c.commit({revertOnError:!0}),await ri.updateFocusRepr(r,s,t.theme?.focus?.name,t.theme?.focus?.params),{components:A,representations:g}}};var w3e=er.create({name:"wwpdb-chemical-component-dictionary",category:"representation",display:{name:"wwPDB Chemical Compontent Dictionary",description:"Custom representation for data loaded from the CCD."},ctor:class extends er.Handler{register(){this.ctx.builders.structure.hierarchy.registerPreset(sne),this.ctx.builders.structure.representation.registerPreset(jO)}update(){return!1}unregister(){this.ctx.builders.structure.hierarchy.unregisterPreset(sne),this.ctx.builders.structure.representation.unregisterPreset(jO)}},params:()=>({})});var CGt=4,$1={RESIDUE_SEL:"structconn-focus-residue-sel",ATOM_SEL:"structconn-focus-atom-sel",RESIDUE_REPR:"structconn-focus-residue-repr",RESIDUE_NCI_REPR:"structconn-focus-residue-nci-repr",ATOM_REPR:"structconn-focus-atom-repr"},hGt={type:{name:"ball-and-stick",params:{sizeFactor:.25,sizeAspectRatio:.73,adjustCylinderLength:!0,xrayShaded:!0,aromaticBonds:!1,multipleBonds:"off",dashCount:1,dashCap:!1}},colorTheme:{name:"uniform",params:{value:xt.magenta}},sizeTheme:{name:"physical",params:{}}},yGt={type:{name:"ball-and-stick",params:{sizeFactor:.16}},colorTheme:{name:"element-symbol",params:{}},sizeTheme:{name:"physical",params:{}}},T3e={getStructConns(e,t){let n=cne(e,t)?.obj?.data;return n?R3e(n.model):{}},async inspectStructConn(e,t,r,n=!1){let o=cne(e,t),i=o?.obj?.data;if(!i)return console.error("Structure not found"),0;let A=(i.model._staticPropertyData["wwpdb-struct-conn-extension-data"]??=R3e(i.model))[r];if(!A)return console.error(`The structure does not contain struct_conn "${r}"`),0;n||await L3e(e,o);let s=await QGt(e,o,A);return EGt(e,o),s},async clearStructConnInspections(e,t){let r=cne(e,t);r&&(await L3e(e,r),bGt(e,r))}};function cne(e,t){let r=e.state.data.selectQ(n=>n.rootsOfType(te.Molecule.Structure));if(t){let n=r.find(o=>o.obj&&o.obj.data.model.entry.toLowerCase()===t.toLowerCase());return n||console.warn(`Structure with entry ID "${t}" was not found. Available structures: ${r.map(o=>o.obj?.data.model.entry)}`),n}else return r.length>1&&console.warn(`Structure entry ID was not specified, but there is more than one loaded structure (${r.map(n=>n.obj?.data.model.entry)}). Taking the first structure.`),r.length===0&&console.warn("There are no loaded structures."),r[0]}function R3e(e){if(!sn.is(e.sourceData))return console.error("Cannot get struct_conn because source data are not mmCIF."),{};let t=e.sourceData.data,{id:r,ptnr1_label_asym_id:n,ptnr1_label_seq_id:o,ptnr1_auth_seq_id:i,pdbx_ptnr1_PDB_ins_code:a,ptnr1_label_comp_id:A,ptnr1_label_atom_id:s,pdbx_ptnr1_label_alt_id:c,ptnr2_label_asym_id:l,ptnr2_label_seq_id:u,ptnr2_auth_seq_id:g,pdbx_ptnr2_PDB_ins_code:m,ptnr2_label_comp_id:p,ptnr2_label_atom_id:d,pdbx_ptnr2_label_alt_id:f,pdbx_dist_value:I}=t.db.struct_conn,C=r.rowCount,y={};for(let Q=0;Q<C;Q++){let E={id:r.value(Q),distance:I.value(Q),partner1:{asymId:n.value(Q),seqId:o.valueKind(Q)===K.ValueKinds.Present?o.value(Q):void 0,authSeqId:i.valueKind(Q)===K.ValueKinds.Present?i.value(Q):void 0,insCode:a.value(Q),compId:A.value(Q),atomId:s.value(Q),altId:c.value(Q)},partner2:{asymId:l.value(Q),seqId:u.valueKind(Q)===K.ValueKinds.Present?u.value(Q):void 0,authSeqId:g.valueKind(Q)===K.ValueKinds.Present?g.value(Q):void 0,insCode:m.value(Q),compId:p.value(Q),atomId:d.value(Q),altId:f.value(Q)}};y[E.id]=E}return y}function U3e(e,t){let{core:r,struct:n}=ce,o=[];for(let i of[e.partner1,e.partner2]){let a={"chain-test":r.rel.eq([n.atomProperty.macromolecular.label_asym_id(),i.asymId]),"group-by":n.atomProperty.core.operatorName()};i.seqId!==void 0?a["residue-test"]=r.rel.eq([n.atomProperty.macromolecular.label_seq_id(),i.seqId]):i.authSeqId!==void 0&&(a["residue-test"]=r.logic.and([r.rel.eq([n.atomProperty.macromolecular.auth_seq_id(),i.authSeqId]),r.rel.eq([n.atomProperty.macromolecular.pdbx_PDB_ins_code(),i.insCode])])),t==="residues"&&i.altId!==""&&(a["atom-test"]=r.rel.eq([n.atomProperty.macromolecular.label_alt_id(),i.altId])),t==="atoms"&&(a["atom-test"]=r.logic.and([r.rel.eq([n.atomProperty.macromolecular.label_atom_id(),i.atomId]),r.rel.eq([n.atomProperty.macromolecular.label_alt_id(),i.altId])])),o.push(n.filter.first([n.generator.atomGroups(a)]))}return n.combinator.merge(o.map(i=>n.modifier.union([i])))}async function QGt(e,t,r){let n=U3e(r,"residues"),o=U3e(r,"atoms"),i=e.build();i.to(t).apply(Cv,{label:`${r.id} (residues)`,type:{name:"expression",params:n}},{tags:[$1.RESIDUE_SEL]}).apply(Xu,yGt,{tags:[$1.RESIDUE_REPR]});let a=i.to(t).apply(Cv,{label:`${r.id} (atoms)`,type:{name:"expression",params:o}},{tags:[$1.ATOM_SEL]}),A=i.to(a.ref).apply(Xu,hGt,{tags:[$1.ATOM_REPR]});return await i.commit(),e.managers.camera.focusRenderObjects(A.selector.data?.repr.renderObjects,{extraRadius:CGt}),a.selector.obj?.data?.elementCount??0}async function L3e(e,t){let r=[...e.state.data.selectQ(o=>o.byRef(t.transform.ref).subtree().withTag($1.RESIDUE_SEL)),...e.state.data.selectQ(o=>o.byRef(t.transform.ref).subtree().withTag($1.ATOM_SEL))],n=e.build();for(let o of r)n.delete(o);await n.commit()}function EGt(e,t){let r=e.state.data.selectQ(n=>n.byRef(t.transform.ref).subtree().withTag("branched-snfg-3d"));for(let n of r)Tm(e.state.data,n.transform.ref,!0)}function bGt(e,t){let r=e.state.data.selectQ(n=>n.byRef(t.transform.ref).subtree().withTag("branched-snfg-3d"));for(let n of r)try{Tm(e.state.data,n.transform.ref,!1)}catch{}}var Xl=kt(Qr()),P3e={record:h.Text("",{description:"Zenodo ID."})};function xGt(e,t){let r=[],n=[],o=[],i=[],a=[],A=new Map,s=new Map,c=new Map,l=new Map;for(let{provider:{category:m,binaryExtensions:p,stringExtensions:d},name:f}of t.dataFormats.list)if(m===el){if(p)for(let I of p)A.set(I,{format:f,isBinary:!0});if(d)for(let I of d)A.set(I,{format:f,isBinary:!1})}else if(m===iC){if(p)for(let I of p)l.set(I,{format:f,isBinary:!0});if(d)for(let I of d)l.set(I,{format:f,isBinary:!1})}else if(m===aC){if(p)for(let I of p)s.set(I,{format:f,isBinary:!0});if(d)for(let I of d)s.set(I,{format:f,isBinary:!1})}else if(m===iE){if(p)for(let I of p)c.set(I,{format:f,isBinary:!0});if(d)for(let I of d)c.set(I,{format:f,isBinary:!1})}for(let m of e){let p=`${m.key} (${Cce(m.size)})`;if(A.has(m.type)){let{format:d,isBinary:f}=A.get(m.type);r.push([`${m.links.self}|${d}|${f}`,p]),n.push([`${m.links.self}|${d}|${f}`,p])}else if(l.has(m.type)){let{format:d,isBinary:f}=l.get(m.type);i.push([`${m.links.self}|${d}|${f}`,p])}else if(c.has(m.type)){let{format:d,isBinary:f}=c.get(m.type);n.push([`${m.links.self}|${d}|${f}`,p])}else if(s.has(m.type)){let{format:d,isBinary:f}=s.get(m.type);o.push([`${m.links.self}|${d}|${f}`,p])}else m.type==="zip"&&a.push([`${m.links.self}|${m.type}|true`,p])}let u={},g="";return r.length&&(g="structure",u.structure=h.Select(r[0][0],r)),n.length&&o.length&&(g||(g="trajectory"),u.trajectory=h.Group({topology:h.Select(n[0][0],n),coordinates:h.Select(o[0][0],o)},{isFlat:!0})),i.length&&(g||(g="volume"),u.volume=h.Select(i[0][0],i)),a.length&&(g||(g="compressed"),u.compressed=h.Select(a[0][0],a)),{type:h.MappedStatic(g,Object.keys(u).length?u:{"":h.EmptyGroup()})}}var WO=class extends ma{constructor(){super(...arguments);this.recordParamsOnChange=r=>{this.setState({recordValues:r})};this.importParamsOnChange=r=>{this.setState({importValues:r})};this.loadRecord=async()=>{try{this.setState({busy:!0});let r=await this.plugin.runTask(this.plugin.fetch({url:`https://zenodo.org/api/records/${this.state.recordValues.record}`,type:"json"})),n=xGt(r.files,this.plugin);this.setState({record:r,files:r.files,busy:!1,importValues:h.getDefaultValues(n),importParams:n})}catch(r){console.error(r),this.plugin.log.error(`Failed to load Zenodo record '${this.state.recordValues.record}'`),this.setState({busy:!1})}};this.loadFile=async r=>{try{this.setState({busy:!0});let n=r.type;if(n.name==="structure"){let o=Mg.createDefaultParams(this.plugin.state.data.root.obj,this.plugin),[i,a,A]=n.params.split("|");await this.plugin.runTask(this.plugin.state.data.applyAction(Mg,{source:{name:"url",params:{url:i,format:a,isBinary:A==="true",options:o.source.params.options}}}))}else if(n.name==="trajectory"){let[o,i,a]=n.params.topology.split("|"),[A,s]=n.params.coordinates.split("|");await this.plugin.runTask(this.plugin.state.data.applyAction(T$,{source:{name:"url",params:{model:{url:o,format:i,isBinary:a==="true"},coordinates:{url:A,format:s}}}}))}else if(n.name==="volume"){let[o,i,a]=n.params.split("|");await this.plugin.runTask(this.plugin.state.data.applyAction(sL,{source:{name:"url",params:{url:o,format:i,isBinary:a==="true"}}}))}else if(n.name==="compressed"){let[o,i,a]=n.params.split("|");await this.plugin.runTask(this.plugin.state.data.applyAction(iL,{url:o,format:i,isBinary:a==="true",visuals:!0}))}}catch(n){console.error(n),this.plugin.log.error("Failed to load Zenodo file")}finally{this.setState({busy:!1})}};this.clearRecord=()=>{this.setState({importValues:void 0,importParams:void 0,record:void 0,files:void 0})}}defaultState(){return{header:"Zenodo Import",isCollapsed:!0,brand:{accent:"cyan",svg:j_},recordValues:h.getDefaultValues(P3e),importValues:void 0,importParams:void 0,record:void 0,files:void 0}}renderLoadRecord(){return(0,Xl.jsxs)("div",{style:{marginBottom:10},children:[(0,Xl.jsx)(Mn,{params:P3e,values:this.state.recordValues,onChangeValues:this.recordParamsOnChange,isDisabled:this.state.busy}),(0,Xl.jsx)(hr,{onClick:this.loadRecord,style:{marginTop:1},disabled:this.state.busy||!this.state.recordValues.record,children:"Load Record"})]})}renderRecordInfo(r){return(0,Xl.jsxs)("div",{style:{marginBottom:10},children:[(0,Xl.jsx)("div",{className:"msp-help-text",children:(0,Xl.jsxs)("div",{children:["Record ",`${r.id}`,": ",(0,Xl.jsx)("i",{children:`${r.metadata.title}`})]})}),(0,Xl.jsx)(hr,{onClick:this.clearRecord,style:{marginTop:1},disabled:this.state.busy,children:"Clear"})]})}renderImportFile(r,n){return n.type.name?(0,Xl.jsxs)("div",{style:{marginBottom:10},children:[(0,Xl.jsx)(Mn,{params:r,values:this.state.importValues,onChangeValues:this.importParamsOnChange,isDisabled:this.state.busy}),(0,Xl.jsx)(hr,{onClick:()=>this.loadFile(n),style:{marginTop:1},disabled:this.state.busy,children:"Import File"})]}):(0,Xl.jsx)("div",{className:"msp-help-text",style:{marginBottom:10},children:(0,Xl.jsx)("div",{children:"No supported files"})})}renderControls(){return(0,Xl.jsxs)(Xl.Fragment,{children:[this.state.record?null:this.renderLoadRecord(),this.state.record?this.renderRecordInfo(this.state.record):null,this.state.importParams&&this.state.importValues?this.renderImportFile(this.state.importParams,this.state.importValues):null]})}};var G3e=er.create({name:"extension-zenodo-import",category:"misc",display:{name:"Zenodo Export"},ctor:class extends er.Handler{register(){this.ctx.customImportControls.set("zenodo-import",WO)}update(){return!1}unregister(){this.ctx.customImportControls.delete("zenodo-import")}},params:()=>({})});var lne={};ki(lne,{createMVSRefMap:()=>DGt,getCurrentMVSSnapshot:()=>FGt,queryMVSRef:()=>SGt,tryGetPrimitivesFromLoci:()=>vGt});function SGt(e,t){return e.state.data.selectQ(r=>r.root.subtree().withTag(`mvs-ref:${t}`))}function DGt(e){let t=e.state.data.tree,r=new Map;return Ho.doPreOrder(t,t.root,{mapping:r,plugin:e},(n,o,i)=>{if(n.tags)for(let a of n.tags){if(!a.startsWith("mvs-ref:"))continue;let A=a.substring(8),s=new UQ(n.ref,i.plugin.state.data);i.mapping.has(A)?i.mapping.get(A).push(s):i.mapping.set(A,[s])}}),r}function vGt(e){if(!OA.isLoci(e))return;let t=e.shape.sourceData;if(t?.kind!=="mvs-primitives")return;let r=[];for(let n of e.groups)Ee.forEach(n.ids,o=>{let i=t.groupToNode.get(o);i&&r.push(i)});return r.length>0?r:void 0}function FGt(e){return e.managers.snapshot.current?._transientData?.sourceMvsSnapshot}function vn(){return vn.zero()}(i=>{function e(){let a=[0,0,0];return a[0]=0,a}i.zero=e;function t(a){let A=i.zero();return A[0]=a[0]??0,A[1]=a[1]??0,A[2]=a[2]??0,A}i.fromArray=t;let r=XB();function n(a){return o(r,a),XB.toColor(r)}i.toColor=n;function o(a,A){let[s,c,l]=A;s/=360,c/=100,l/=100;let u=0,g=0,m=0,p=Math.floor(s*6),d=s*6-p,f=l*(1-c),I=l*(1-d*c),C=l*(1-(1-d)*c);switch(p%6){case 0:u=l,g=C,m=f;break;case 1:u=I,g=l,m=f;break;case 2:u=f,g=l,m=C;break;case 3:u=f,g=I,m=l;break;case 4:u=C,g=f,m=l;break;case 5:u=l,g=f,m=I;break}return a[0]=u,a[1]=g,a[2]=m,a}i.toRgb=o})(vn||={});var wGt={red:vn.toColor(vn.fromArray([0,100,100])),orange:vn.toColor(vn.fromArray([20,100,100])),gold:vn.toColor(vn.fromArray([40,100,100])),yellow:vn.toColor(vn.fromArray([60,100,100])),lime:vn.toColor(vn.fromArray([80,100,100])),green:vn.toColor(vn.fromArray([120,80,100])),sea:vn.toColor(vn.fromArray([150,100,100])),cyan:vn.toColor(vn.fromArray([180,100,85])),sky:vn.toColor(vn.fromArray([210,75,95])),blue:vn.toColor(vn.fromArray([240,70,100])),purple:vn.toColor(vn.fromArray([275,75,100])),magenta:vn.toColor(vn.fromArray([300,95,100])),hotpink:vn.toColor(vn.fromArray([335,100,100])),pink:vn.toColor(vn.fromArray([350,55,100])),peach:vn.toColor(vn.fromArray([25,75,100])),lilac:vn.toColor(vn.fromArray([275,55,100])),pinktint:vn.toColor(vn.fromArray([340,30,100])),peachtint:vn.toColor(vn.fromArray([25,50,100])),yellowtint:vn.toColor(vn.fromArray([60,50,100])),greentint:vn.toColor(vn.fromArray([135,40,100])),bluetint:vn.toColor(vn.fromArray([220,40,100])),lilactint:vn.toColor(vn.fromArray([275,35,100])),white:vn.toColor(vn.fromArray([0,0,100])),gray:vn.toColor(vn.fromArray([0,0,50])),brown:vn.toColor(vn.fromArray([20,45,75])),deadwhite:vn.toColor(vn.fromArray([0,0,100])),deadblack:vn.toColor(vn.fromArray([0,0,0])),invisible:vn.toColor(vn.fromArray([0,0,0]))},RGt=/[\s,]+/,k3e=/[^{}\s]*{[^{}]+}|[^{}\s]+/g,une=/^{+|}+$/g,H3e=/\s*=\s*/g;function XO(e,t){let r,n=t.white,o,i=!1,a=[],A=2;e=e.replace(H3e,"=");let s=e.match(k3e);for(let c=1;c<s.length;++c){let l=s[c];if(l[0]==="{")r=l.substring(1,l.length-1);else{let u=l.split("=");if(u.length===2)if(u[0]==="color"){let g=IT(u[1]);n=t[g]}else u[0]==="width"?A=parseInt(u[1]):u[0]==="master"?a.push(u[1].replace(une,"")):u[0]==="radius"?o=parseFloat(u[1]):console.log("Kinemage: Unknown list definition term found: "+u[0]);else l==="nobutton"?i=!0:console.log("Kinemage: Unknown list definition term found: "+l)}}return{listName:r,listColor:n,listMasters:a,listWidth:A,listRadius:o,nobutton:i}}function ZO(e,t){e=e.trim();let r=e.indexOf("{"),n=e.indexOf("}"),o=e.substr(n+1).split(RGt),i=e.substr(r+1,n-1),a=[parseFloat(o[o.length-3]),parseFloat(o[o.length-2]),parseFloat(o[o.length-1])],A,s,c,l=!1,u=!1,g=[];for(let m=4;m<=o.length;m++){let p=o[o.length-m];if(p in t&&(A=t[o[o.length-m]]),p.startsWith("width")&&(s=parseInt(p.substring(5))),p.startsWith("r=")&&(c=parseFloat(p.split("=")[1])),p.startsWith("P")&&(l=!0),p.startsWith("X")&&(u=!0),p.startsWith("'")&&p.endsWith("'")){let d=p.substring(1,p.length-1);for(let f=0;f<d.length;f++)g.push(d[f])}}return{label:i,position:a,color:A,radius:c,width:s,isLineBreak:l,isTriangleBreak:u,pointMasters:g}}function IT(e){let t=e.indexOf("{"),r=e.indexOf("}");return e.substring(t!==-1?t+1:0,r!==-1?r:void 0).trim()}function N3e(e){let t=e.indexOf("}");return t===-1?void 0:e.substr(t+1).trim()}function M3e(e){let t="",r=[],n={};e=e.replace(H3e,"=");let o=e.match(k3e);for(let i=1;i<o.length;++i){let a=o[i];if(a[0]==="{")t=a.substring(1,a.length-1);else{let A=a.split("=");A.length===2?A[0]==="master"?r.push(A[1].replace(une,"")):n[A[0]]=A[1].replace(une,""):n[A[0]]=!0}}return{groupName:t,groupFlags:n,groupMasters:r}}function UGt(e){let t="",r=[],n,o=e.match(/{([^}]+)}/);if(o){t=o[1];let i=e.match(/'([^']+)'/);if(i){let a=i[1];for(let A=0;A<a.length;A++)r.push(a[A]);e.includes(" on")?n=!0:e.includes(" off")&&(n=!1)}else console.log("Kinemage: Pointmaster definition missing tags: "+e)}else console.log("Kinemage: Pointmaster definition missing name: "+e);return{name:t,tags:r,on:n}}function LGt(e){let{labelArray:t,positionArray:r,colorArray:n,breakArray:o}=e,i=[];for(let u=0;u<(t.length-2)*3;++u)i[u]=t[u-Math.floor(u/3)*2];let a=[];for(let u=0;u<(n.length-2)*3;++u)a[u]=n[u-Math.floor(u/3)*2];let A=[];for(let u=0;u<(e.pointmasterArray.length-2)*3;++u)A[u]=e.pointmasterArray[u-Math.floor(u/3)*2];let s=[];for(let u=0;u<(o.length-2)*3;++u)s[u]=o[u-Math.floor(u/3)*2];let c=[];for(let u=0;u<(r.length/3-2)*9;++u)c[u]=r[u-Math.floor(u/9)*6];let l=[];for(let u=0;u<c.length/3;++u)l.push([c[u*3],c[u*3]+1,c[u*3]+2]);return{group:e.group,subgroup:e.subgroup,name:e.name,masterArray:e.masterArray,pointmasterArray:A,nobutton:e.nobutton,labelArray:i,positionArray:c,breakArray:s,colorArray:a,pairTriangleNormals:e.pairTriangleNormals}}function TGt(e){let{labelArray:t,positionArray:r,colorArray:n,breakArray:o}=e,i=[],a=[],A=[],s=[],c=[];for(let l=0;l<o.length/3;l++){let u=l*3,g=l*9;!o[u+1]&&!o[u+2]&&(i.push(t[u]),i.push(t[u+1]),i.push(t[u+2]),c.push(o[u]),c.push(o[u+1]),c.push(o[u+2]),a.push(r[g]),a.push(r[g+1]),a.push(r[g+2]),a.push(r[g+3]),a.push(r[g+4]),a.push(r[g+5]),a.push(r[g+6]),a.push(r[g+7]),a.push(r[g+8]),A.push(n[u]),A.push(n[u+1]),A.push(n[u+2]),s.push(e.pointmasterArray[u]),s.push(e.pointmasterArray[u+1]),s.push(e.pointmasterArray[u+2]))}return{group:e.group,subgroup:e.subgroup,name:e.name,masterArray:e.masterArray,pointmasterArray:s,nobutton:e.nobutton,labelArray:i,positionArray:a,breakArray:c,colorArray:A,pairTriangleNormals:e.pairTriangleNormals}}var qO=class{constructor(t){this._parse(t)}_parse(t){let r={comments:[],kinemage:void 0,onewidth:void 0,viewDict:{},pdbfile:void 0,texts:[],text:"",captions:[],caption:"",groupDict:{},subgroupDict:{},masterDict:{},pointmasterDict:{},dotLists:[],vectorLists:[],ballLists:[],ribbonLists:[],groupsAnimate:[],activeAnimateGroup:-1,groupsAnimate2:[],activeAnimateGroup2:-1};this.kinemage=r;let n=Object.assign({},wGt),o="",i,a="",A,s=!1,c="",l,u,g,m,p,d=!1,f="",I=null,C=null,y,Q,E,b,x,S,w,R,T,L,F=!1,v="",U,G,N,k,J,H,z,_=!1,M=!1,q="",ne=n.white,oe,ae,me,Se,ee,O=!1,X=!1,Ce=!1,Ne=!1;function $(ye,Be,De){for(let Te=ye;Te<Be;++Te){let be=De[Te];if(be[0]==="@"&&(s=!1,d=!1,F=!1,_=!1,O=!1,X=!1),!be)s=!1,d=!1,F=!1,_=!1;else if(be.startsWith("@dot")){let{listColor:Fe,listName:Ae,listMasters:fe,nobutton:Qe}=XO(be,n);s=!0,c="",u=[],g=[],m=[],p=[],l=Fe,i&&(fe=fe.concat(i)),A&&(fe=fe.concat(A)),r.dotLists.push({group:o,subgroup:a,name:Ae,masterArray:fe,pointmasterArray:p,nobutton:Qe,labelArray:u,positionArray:g,colorArray:m})}else if(be.startsWith("@vector")){let{listMasters:Fe,listName:Ae,listWidth:fe,listColor:Qe,nobutton:Ie}=XO(be,n);Fe&&Fe.forEach(function(le){r.masterDict[le]||(r.masterDict[le]={indent:!1,visible:!0})}),d=!0,f="",I=null,C=null,E=[],b=[],x=[],S=[],w=[],R=[],T=[],y=Qe,L=[],Q=2,fe&&(Q=fe),i&&(Fe=Fe.concat(i)),A&&(Fe=Fe.concat(A)),r.vectorLists.push({group:o,subgroup:a,name:Ae,masterArray:Fe,pointmasterArray:L,nobutton:Ie,label1Array:E,label2Array:b,position1Array:x,position2Array:S,color1Array:w,color2Array:R,width:T})}else if(be.startsWith("@ball")||be.startsWith("@sphere")){let{listName:Fe,listColor:Ae,listMasters:fe,listRadius:Qe,nobutton:Ie}=XO(be,n);fe&&fe.forEach(function(le){r.masterDict[le]||(r.masterDict[le]={indent:!1,visible:!0})}),F=!0,v="",k=[],U=[],J=[],H=[],z=[],G=Ae,N=Qe!==void 0?Qe:1,i&&(fe=fe.concat(i)),A&&(fe=fe.concat(A)),r.ballLists.push({group:o,subgroup:a,name:Fe,masterArray:fe,pointmasterArray:z,nobutton:Ie,labelArray:k,radiusArray:U,positionArray:J,colorArray:H})}else if(be.startsWith("@ribbon")||be.startsWith("@triangle")){let{listMasters:Fe,listName:Ae,listColor:fe,nobutton:Qe}=XO(be,n);Fe&&Fe.forEach(function(Ie){r.masterDict[Ie]||(r.masterDict[Ie]={indent:!1,visible:!0})}),_=!0,M=be.startsWith("@triangle"),q="",oe=[],ae=[],me=[],Se=[],ne=fe,ee=[],i&&(Fe=Fe.concat(i)),A&&(Fe=Fe.concat(A)),r.ribbonLists.push({group:o,subgroup:a,name:Ae,masterArray:Fe,pointmasterArray:ee,nobutton:Qe,labelArray:oe,positionArray:ae,breakArray:me,colorArray:Se,pairTriangleNormals:!M})}else if(be.startsWith("@text"))O=!0,r.texts.push(be.substr(5));else if(be.startsWith("@caption"))X=!0,r.captions.push(be.substr(8));else if(s){let{label:Fe,color:Ae,position:fe,pointMasters:Qe}=ZO(be,n);Fe==='"'?Fe=c:c=Fe,Ae===void 0&&(Ae=l),u.push(Fe),g.push(...fe),m.push(Ae),p.push(Qe)}else if(d){let Ae=be.replace(/(?!^){/g,`
|
|
{`).split(/\n/);for(let fe=0;fe<Ae.length;fe++){let Qe=Ae[fe],{label:Ie,color:le,width:Oe,position:tt,isLineBreak:it,pointMasters:Rt}=ZO(Qe,n);Ie==='"'&&(Ie=f),le===void 0&&(le=y),it||I!==null&&(Oe===void 0&&(Oe=Q),E.push(f),x.push(...I),w.push(C||y),b.push(Ie),S.push(...tt),R.push(le),T.push(Oe),L.push(Rt)),f=Ie,I=tt,C=le}}else if(F){let{label:Fe,radius:Ae,color:fe,position:Qe,pointMasters:Ie}=ZO(be,n);Fe==='"'?Fe=v:v=Fe,Ae===void 0&&(Ae=N),fe===void 0&&(fe=G),k.push(Fe),U.push(Ae),J.push(...Qe),H.push(fe),z.push(Ie)}else if(_){let{label:Fe,color:Ae,position:fe,isTriangleBreak:Qe,pointMasters:Ie}=ZO(be,n);Fe==='"'?Fe=q:q=Fe,Ae===void 0&&(Ae=ne),oe.push(Fe),ae.push(...fe),me.push(Qe),Se.push(Ae),ee.push(Ie)}else if(O)r.texts.push(be);else if(X)r.captions.push(be);else if(be.startsWith("@kinemage"))r.kinemage=parseInt(be.substr(9).trim());else if(be.startsWith("@onewidth"))r.onewidth=!0;else if(be.startsWith("@pdbfile"))r.pdbfile=IT(be);else if(be.startsWith("@group")){let{groupName:Fe,groupFlags:Ae,groupMasters:fe}=M3e(be);r.groupDict[Fe]||(r.groupDict[Fe]={dominant:!1,animate:!!Ae.animate,"2animate":!!Ae["2animate"],off:Ce||Ne?!0:!!Ae.off},Ae.animate&&(Ce=!0,r.groupsAnimate.push(Fe),r.activeAnimateGroup=0),Ae["2animate"]&&(Ne=!0,r.groupsAnimate2.push(Fe),r.activeAnimateGroup2=0),i=fe),o=Fe,i&&i.forEach(function(Qe){r.masterDict[Qe]||(r.masterDict[Qe]={indent:!1,visible:!0})});for(let Qe in Ae)r.groupDict[Fe][Qe]=Ae[Qe]}else if(be.startsWith("@subgroup")){let{groupName:Fe,groupFlags:Ae,groupMasters:fe}=M3e(be),Qe=o+":"+Fe;r.subgroupDict[Qe]||(r.subgroupDict[Qe]={dominant:!1,off:!!Ae.off,group:o},A=fe),a=Qe,A&&A.forEach(function(Ie){r.masterDict[Ie]||(r.masterDict[Ie]={indent:!1,visible:!0})});for(let Ie in Ae)r.subgroupDict[Qe][Ie]=Ae[Ie]}else if(be.startsWith("@master")){let Fe=IT(be),Ae=N3e(be);r.masterDict[Fe]||(r.masterDict[Fe]={indent:!1,visible:!0}),Ae==="on"?r.masterDict[Fe].visible=!0:Ae==="off"?r.masterDict[Fe].visible=!1:Ae==="indent"&&(r.masterDict[Fe].indent=!0)}else if(be.startsWith("@pointmaster")){let{name:Fe,tags:Ae,on:fe}=UGt(be);if(Fe.length>0&&Ae.length>0){r.masterDict[Fe]||(r.masterDict[Fe]={indent:!1,visible:fe!==!1});for(let Qe=0;Qe<Ae.length;Qe++)r.pointmasterDict[Ae[Qe]]=Fe}}else if(be.startsWith("@colorset")){let Fe=IT(be),Ae=N3e(be);Ae&&Ae in n&&(n[Fe]=n[Ae])}else if(/^@(\d*)viewid\b/.test(be)){let Fe=be.match(/^@(\d*)viewid\b/),Ae=Fe&&Fe[1]&&Fe[1].length>0?parseInt(Fe[1],10):1;r.viewDict[Ae]||(r.viewDict[Ae]={}),r.viewDict[Ae].name=IT(be)}else if(/^@(\d*)center\b/.test(be)){let Fe=be.match(/^@(\d*)center\b\s*(.*)$/),Ae=Fe&&Fe[1]&&Fe[1].length>0?parseInt(Fe[1],10):1,fe=Fe&&Fe[2]?Fe[2].trim():"",Ie=(fe.length>0?fe.split(/\s+/).filter(Boolean):[]).slice(0,3).map(parseFloat);Ie.length===3&&Ie.every(le=>!isNaN(le))&&(r.viewDict[Ae]||(r.viewDict[Ae]={}),r.viewDict[Ae].center=Ie)}else if(/^@(\d*)matrix\b/.test(be)){let Fe=be.match(/^@(\d*)matrix\b\s*(.*)$/),Ae=Fe&&Fe[1]&&Fe[1].length>0?parseInt(Fe[1],10):1,fe=Fe&&Fe[2]?Fe[2].trim():"",Ie=(fe.length>0?fe.split(/\s+/).filter(Boolean):[]).slice(0,9).map(parseFloat);Ie.length===9&&Ie.every(le=>!isNaN(le))&&(r.viewDict[Ae]||(r.viewDict[Ae]={}),r.viewDict[Ae].matrix=Ie)}else if(/^@(\d*)span\b/.test(be)){let Fe=be.match(/^@(\d*)span\b\s*(.*)$/),Ae=Fe&&Fe[1]&&Fe[1].length>0?parseInt(Fe[1],10):1,fe=Fe&&Fe[2]?Fe[2].trim():"",Qe=parseFloat(fe);isNaN(Qe)||(r.viewDict[Ae]||(r.viewDict[Ae]={}),r.viewDict[Ae].span=Qe)}else if(/^@(\d*)zoom\b/.test(be)){let Fe=be.match(/^@(\d*)zoom\b\s*(.*)$/),Ae=Fe&&Fe[1]&&Fe[1].length>0?parseInt(Fe[1],10):1,fe=Fe&&Fe[2]?Fe[2].trim():"",Qe=parseFloat(fe);isNaN(Qe)||(r.viewDict[Ae]||(r.viewDict[Ae]={}),r.viewDict[Ae].zoom=Qe)}else if(/^@(\d*)zslab\b/.test(be)){let Fe=be.match(/^@(\d*)zslab\b\s*(.*)$/),Ae=Fe&&Fe[1]&&Fe[1].length>0?parseInt(Fe[1],10):1,fe=Fe&&Fe[2]?Fe[2].trim():"",Qe=parseFloat(fe);isNaN(Qe)||(r.viewDict[Ae]||(r.viewDict[Ae]={}),r.viewDict[Ae].zslab=Qe)}else console.log("Kinemage: Unrecognized line: "+be)}}let pe=t.split(/\r?\n/);if($(0,pe.length,pe),r.text=r.texts.join(`
|
|
`).trim(),r.caption=r.captions.join(`
|
|
`).trim(),r.ribbonLists){let ye=[];r.ribbonLists.forEach(function(Be){ye.push(TGt(LGt(Be)))}),r.ribbonLists=ye}}};async function PGt(e,t){let r=[],n=e.split(/@kinemage\s+\d+/);n.length>1&&n.shift();for(let o of n)if(o.trim()){let a=new qO(o.trim()).kinemage;r.push(a)}return An.success(r)}function V3e(e){return ve.create("Parse KIN",async t=>await PGt(e,t))}var GGt={},gne={...GGt};var gEo={input:h.File({accept:".kin",multiple:!1})},CT;(o=>{let e;(a=>a.Representation="kinemage-3d")(e=o.Tag||={}),o.symbols={};async function r(i){let A=await V3e(i).run();if(A.isError)throw new Error("Failed to parse KIN data");return A.result}async function n(i){let a;if(i instanceof File)a=i;else if(i&&i.input&&i.input.file)a=i.input.file;else throw new Error("No file given");return{kinemages:await ve.create("Load KIN file",async c=>{let l=await a.text();return await r(l)}).run()}}o.open=n})(CT||={});var _3e=eA.createProvider({label:"Kinemage",descriptor:{name:"Kinemage_loaded_data",symbols:CT.symbols},type:"root",defaultParams:gne,getParams:e=>gne,isApplicable:NGt,obtain:async(e,t,r)=>{let n={...h.getDefaultValues(gne),...r};try{return{value:await MGt(e,t,n)}}catch{return console.warn("Failed to predict membrane orientation. This happens for short peptides and entries without amino acids."),{value:void 0}}}});function NGt(e){return!1}async function MGt(e,t,r){return{kinemages:[]}}function O3e(e){return{...Ds.Params}}var DEo=O3e();function J3e(e){return{...Zr.Params}}var vEo=J3e();function z3e(e){return{...At.Params}}var FEo=z3e();function K3e(e){return{...rA.Params}}var wEo=K3e();function $O(e,t,r,n,o){if(!o){let a=!0;for(let c=0;c<r.length;c++){let l=r[c],u=n.masterDict[l];if(u&&!u.visible){a=!1;break}}let A=n.groupDict[e];A&&A.off&&(a=!1);let s=n.subgroupDict[t];if(s&&(s.off&&(a=!1),s.group)){let c=n.groupDict[s.group];c&&c.off&&(a=!1)}return a}for(let a=0;a<r.length;a++){let A=r[a];if(o.masterVisibility.get(A)===!1)return!1}if(o.groupVisibility.get(e)===!1)return!1;if(t){if(o.subgroupVisibility.get(t)===!1)return!1;let A=n.subgroupDict[t];if(A&&A.group&&o.groupVisibility.get(A.group)===!1)return!1}return!0}async function kGt(e,t,r){let n=t.dotLists,o=SE.create(),i=[],a=[],A=0;for(let c=0;c<n.length;c++){let l=n[c],u=l.positionArray,g=l.colorArray,m=l.labelArray,p=l.masterArray;if(!$O(l.group,l.subgroup,p,t,r))continue;let f=u.length/3;for(let I=0;I<f;I++){let C=l.pointmasterArray[I],y=!0;for(let E=0;E<C.length;E++){let b=C[E],x=t.pointmasterDict[b];if(r){if(r.masterVisibility.get(x)===!1){y=!1;break}}else{let S=t.masterDict[x];if(S&&!S.visible){y=!1;break}}}if(!y)continue;let Q=A++;o.add(u[3*I+0],u[3*I+1],u[3*I+2],Q),i.push(g&&g.length>I?g[I]:ke.fromRgb(255,255,255)),a.push(m&&m.length>I?m[I]:"")}}return{points:o.getPoints(),colors:i,labels:a}}async function HGt(e,t,r){let n=t.vectorLists,o=Ii.create(),i=[],a=[],A=[],s=0;for(let l=0;l<n.length;l++){let u=n[l],g=u.position1Array,m=u.position2Array,p=u.width,d=u.color1Array,f=u.color2Array,I=u.label1Array,C=u.label2Array,y=u.masterArray;if(!$O(u.group,u.subgroup,y,t,r))continue;let E=g.length/3;for(let b=0;b<E;b++){let x=u.pointmasterArray[b],S=!0;for(let F=0;F<x.length;F++){let v=x[F],U=t.pointmasterDict[v];if(r){if(r.masterVisibility.get(U)===!1){S=!1;break}}else{let G=t.masterDict[U];if(G&&!G.visible){S=!1;break}}}if(!S)continue;let w=(g[3*b+0]+m[3*b+0])/2,R=(g[3*b+1]+m[3*b+1])/2,T=(g[3*b+2]+m[3*b+2])/2,L=s++;o.add(g[3*b+0],g[3*b+1],g[3*b+2],w,R,T,L),i.push(p&&p.length>b?p[b]:NaN),a.push(d&&d.length>b?d[b]:ke.fromRgb(255,255,255)),A.push(I&&I.length>b?I[b]:""),L=s++,o.add(w,R,T,m[3*b+0],m[3*b+1],m[3*b+2],L),i.push(p&&p.length>b?p[b]:NaN),a.push(f&&f.length>b?f[b]:ke.fromRgb(255,255,255)),A.push(C&&C.length>b?C[b]:"")}}return{lines:o.getLines(),widths:new Float32Array(i),colors:a,labels:A}}function Y3e(e,t,r,n,o,i){let a=B.add(B(),t,B.scale(B(),o,i)),A=B.add(B(),r,B.scale(B(),o,i)),s=B.add(B(),n,B.scale(B(),o,i));We.addTriangleWithNormal(e,a,A,s,o)}async function VGt(e,t,r){let n=t.ribbonLists,o=We.createState(),i=[],a=[],A=0;for(let c=0;c<n.length;c++){let l=n[c],u=l.positionArray,g=l.colorArray,m=l.labelArray,p=l.masterArray,d=l.pointmasterArray;if(!$O(l.group,l.subgroup,p,t,r))continue;o.currentGroup=c;let I=u.length/9,C;for(let y=0;y<I;y++){let Q=d[3*y],E=!0;for(let v=0;v<Q.length;v++){let U=Q[v],G=t.pointmasterDict[U];if(r){if(r.masterVisibility.get(G)===!1){E=!1;break}}else{let N=t.masterDict[G];if(N&&!N.visible){E=!1;break}}}if(!E)continue;let b=[];for(let v=0;v<3;v++){let U=B.zero();U[0]=u[3*(3*y+v)+0],U[1]=u[3*(3*y+v)+1],U[2]=u[3*(3*y+v)+2],b.push(U)}let x=A++;o.currentGroup=x;let S=g&&g.length>y*3?g[3*y]:ke.fromRgb(255,255,255);i.push(S);let w=m&&m.length>y?m[y]:"";a.push(w);let R=b[0],T=b[1],L=b[2],F=B.zero();B.triangleNormal(F,R,T,L),y%2===1&&(F=C||F),C=F,Y3e(o,R,T,L,F,.01),B.negate(F,F),Y3e(o,R,L,T,F,.01)}}return{mesh:We.getMesh(o),colors:i,labels:a}}async function _Gt(e,t,r){let n=t.ballLists,o=Kp.create(),i=[],a=[],A=[],s=0;for(let l=0;l<n.length;l++){let u=n[l],g=u.positionArray,m=u.radiusArray,p=u.colorArray,d=u.masterArray;if(!$O(u.group,u.subgroup,d,t,r))continue;let I=g.length/3;for(let C=0;C<I;C++){let y=u.pointmasterArray[C],Q=!0;for(let b=0;b<y.length;b++){let x=y[b],S=t.pointmasterDict[x];if(r){if(r.masterVisibility.get(S)===!1){Q=!1;break}}else{let w=t.masterDict[S];if(w&&!w.visible){Q=!1;break}}}if(!Q)continue;let E=s++;o.add(g[3*C+0],g[3*C+1],g[3*C+2],E),i.push(m&&m.length>C?m[C]:NaN),a.push(p&&p.length>C?p[C]:ke.fromRgb(255,255,255)),A.push(u.labelArray&&u.labelArray.length>C?u.labelArray[C]:"")}}return{spheres:o.getSpheres(),radii:new Float32Array(i),colors:a,labels:A}}function YGt(e){return async(r,n,o,i)=>{let{points:a,colors:A,labels:s}=await kGt(r,n.source,e),c=(g,m)=>A[g],l=(g,m)=>s[g];return Mr.create("kin-points",n.source,a,c,()=>1,l)}}function OGt(e){return async(r,n,o,i)=>{let{lines:a,widths:A,colors:s,labels:c}=await HGt(r,n.source,e),l=(p,d)=>{let f=A[p]/2;return f<1&&(f=1),Number.isFinite(f)?f:1},u=(p,d)=>s[p],g=(p,d)=>c[p];return Mr.create("kin-lines",n.source,a,u,l,g)}}function JGt(e){return async(r,n,o,i)=>{let{mesh:a,colors:A,labels:s}=await VGt(r,n.source,e);a||(console.warn("No mesh could be created from the KIN data. Creating an empty mesh instead."),a=At.createEmpty());let c=(g,m)=>A[g],l=(g,m)=>s[g];return Mr.create("kin-mesh",n.source,a,c,()=>1,l)}}function zGt(e){return async(r,n,o,i)=>{let{spheres:a,radii:A,colors:s,labels:c}=await _Gt(r,n.source,e),l=(p,d)=>{let f=A[p];return Number.isFinite(f)?f:1},u=(p,d)=>s[p],g=(p,d)=>c[p];return Mr.create("kin-spheres",n.source,a,u,l,g)}}function j3e(e,t,r,n){return ve.create("Kin Shape Points Provider",async o=>({label:n??"Points",data:{source:e,transforms:r?.transforms},params:O3e(e),getShape:YGt(t),geometryUtils:Ds.Utils}))}function W3e(e,t,r,n){return ve.create("Kin Shape Lines Provider",async o=>({label:n??"Lines",data:{source:e,transforms:r?.transforms},params:J3e(e),getShape:OGt(t),geometryUtils:Zr.Utils}))}function X3e(e,t,r,n){return ve.create("Kin Shape Mesh Provider",async o=>({label:n??"Meshes",data:{source:e,transforms:r?.transforms},params:z3e(e),getShape:JGt(t),geometryUtils:At.Utils}))}function Z3e(e,t,r,n){return ve.create("Kin Shape Spheres Provider",async o=>({label:n??"Spheres",data:{source:e,transforms:r?.transforms},params:K3e(e),getShape:zGt(t),geometryUtils:rA.Utils}))}var Sa=kt(Qr());function KGt(e){if(e)return e.length>30?e.substring(0,30)+"...":e}var hT=class extends ma{defaultState(){return{header:"Kinemage",isCollapsed:!1,isBusy:!1,isHidden:!0,brand:{accent:"cyan",svg:void 0}}}componentDidMount(){this.subscribe(this.plugin.state.data.events.cell.created,t=>this.onCellCreated(t)),this.subscribe(this.plugin.state.data.events.cell.removed,()=>this.onCellRemoved()),this.subscribe(this.plugin.state.data.events.cell.stateUpdated,()=>this.forceUpdate()),this.updateVisibility()}onCellCreated(t){this.updateVisibility()}onCellRemoved(){this.updateVisibility()}updateVisibility(){let t=this.getKinemageList();this.setState({isHidden:t.length===0})}getKinemageList(){let t=[];try{let r=this.plugin.state.data.cells;for(let[n,o]of r){let i=o.obj;i&&i.data&&i.data.kinData&&i.data.visibilityState&&t.push({kinData:i.data.kinData,ref:n,visControllerRef:n})}}catch(r){console.warn("Failed to enumerate kinemage nodes",r)}return t}getAllDescendants(t){let r=[],n=this.plugin.state.data.tree,o=[t];for(;o.length>0;){let i=o.shift(),a=n.children.get(i);if(a)for(let A of a.values())r.push(A),o.push(A)}return r}async applyView(t,r){let n=t.viewSnapshots?.[r];n&&await q3e(this.plugin,n)}async rebuildShapes(t,r){let n=this.plugin.state.data.build(),o=this.getAllDescendants(t);for(let a of o)n.delete(a);await n.commit();let i=this.plugin.state.data.build();r.dotLists.length>0&&i.to(t).apply(mne,{},{state:{isGhost:!0}}).apply(ze.Representation.ShapeRepresentation3D),r.vectorLists.length>0&&i.to(t).apply(dne,{},{state:{isGhost:!0}}).apply(ze.Representation.ShapeRepresentation3D),r.ribbonLists.length>0&&i.to(t).apply(pne,{},{state:{isGhost:!0}}).apply(ze.Representation.ShapeRepresentation3D,{doubleSided:!0}),r.ballLists.length>0&&i.to(t).apply(fne,{},{state:{isGhost:!0}}).apply(ze.Representation.ShapeRepresentation3D),await i.commit()}async toggleVisibility(t,r,n){try{let o=this.plugin.state.data.cells.get(t);if(!o||!o.transform||!o.transform.params)return;let i=o.transform.params,a={...i.groupVisibility},A={...i.subgroupVisibility},s={...i.masterVisibility};n.type==="group"?a[n.key]=!a[n.key]:n.type==="subgroup"?A[n.key]=!A[n.key]:s[n.key]=!s[n.key];let c=this.plugin.state.data.build();c.to(t).update({groupVisibility:a,subgroupVisibility:A,masterVisibility:s}),await c.commit(),await this.rebuildShapes(t,r)}catch(o){console.error("Failed to toggle kinemage visibility",o)}}async triggerAnimateForKin(t,r,n){try{let o=this.plugin.state.data.cells.get(t);if(!o||!o.transform||!o.transform.params)return;let i=o.transform.params,a=n==="animate"?r.groupsAnimate:r.groupsAnimate2,s=((n==="animate"?i.activeAnimateGroup:i.activeAnimateGroup2)+1)%Math.max(1,a.length),c=this.plugin.state.data.cells.get(t),l=c?.obj?.data?c.obj.data.visibilityState:null,u=l?Object.fromEntries(l.groupVisibility):{...i.groupVisibility};for(let p=0;p<a.length;p++)u[a[p]]=p===s;let g=this.plugin.state.data.build(),m={groupVisibility:u};n==="animate"?m.activeAnimateGroup=s:m.activeAnimateGroup2=s,l?(m.subgroupVisibility=Object.fromEntries(l.subgroupVisibility),m.masterVisibility=Object.fromEntries(l.masterVisibility)):(m.subgroupVisibility=i.subgroupVisibility,m.masterVisibility=i.masterVisibility),g.to(t).update(m),await g.commit(),await this.rebuildShapes(t,r)}catch(o){console.error("Failed to trigger animate",o)}}isVisible(t,r){try{let n=this.plugin.state.data.cells.get(t);if(!n||!n.transform||!n.transform.params)return!0;let o=n.transform.params;return r.type==="group"?o.groupVisibility[r.key]!==!1:r.type==="subgroup"?o.subgroupVisibility[r.key]!==!1:o.masterVisibility[r.key]!==!1}catch{return!0}}renderControls(){let t=this.getKinemageList();if(t.length===0)return(0,Sa.jsx)("div",{style:{padding:"6px"},children:"No Kinemage data"});let r=[];for(let{kinData:n,visControllerRef:o}of t){let i=n.pdbfile||KGt(n.caption)||"Kinemage",a=[];a.push((0,Sa.jsx)("div",{style:{padding:"6px",fontWeight:"bold",borderBottom:"1px solid rgba(255,255,255,0.1)"},children:i},"title-"+i));let A=Object.entries(n.viewDict||{});if(A.length>0)for(let[s,c]of A){let l=`View ${c.name||`View ${s}`}`;a.push((0,Sa.jsx)("div",{style:{padding:"2px 6px"},children:(0,Sa.jsx)("button",{className:"msp-btn msp-btn-block",onClick:()=>this.applyView(n,s),title:`Apply view: ${l}`,children:l})},"view-"+i+"-"+s))}n.groupsAnimate&&n.groupsAnimate.length>0&&a.push((0,Sa.jsx)("div",{style:{padding:"2px 6px"},children:(0,Sa.jsx)("button",{className:"msp-btn msp-btn-block",onClick:()=>this.triggerAnimateForKin(o,n,"animate"),title:"Cycle through animation frames",children:"Animate"})},"anim-"+i)),n.groupsAnimate2&&n.groupsAnimate2.length>0&&a.push((0,Sa.jsx)("div",{style:{padding:"2px 6px"},children:(0,Sa.jsx)("button",{className:"msp-btn msp-btn-block",onClick:()=>this.triggerAnimateForKin(o,n,"2animate"),title:"Cycle through second animation frames",children:"Animate2"})},"anim2-"+i));for(let[s,c]of Object.entries(n.groupDict||{})){if(!c.nobutton){let l=this.isVisible(o,{type:"group",key:s}),g=(n.groupsAnimate?.includes(s)??!1)||(n.groupsAnimate2?.includes(s)??!1)?`* ${s}`:s;a.push((0,Sa.jsx)("div",{style:{padding:"2px 6px"},children:(0,Sa.jsxs)("label",{style:{display:"flex",alignItems:"center",cursor:"pointer"},children:[(0,Sa.jsx)("input",{type:"checkbox",checked:l,onChange:()=>this.toggleVisibility(o,n,{type:"group",key:s}),style:{marginRight:"6px"}}),(0,Sa.jsx)("span",{title:g,children:g})]})},"group-"+i+"-"+s))}if(!c.dominant){for(let[l,u]of Object.entries(n.subgroupDict||{}))if(l.startsWith(s+":")){if(u.nobutton)continue;let g=this.isVisible(o,{type:"subgroup",key:l}),m=l.split(":")[1];a.push((0,Sa.jsx)("div",{style:{padding:"2px 6px",paddingLeft:"24px"},children:(0,Sa.jsxs)("label",{style:{display:"flex",alignItems:"center",cursor:"pointer"},children:[(0,Sa.jsx)("input",{type:"checkbox",checked:g,onChange:()=>this.toggleVisibility(o,n,{type:"subgroup",key:l}),style:{marginRight:"6px"}}),(0,Sa.jsx)("span",{title:m,children:m})]})},"subgroup-"+i+"-"+l))}}}for(let[s,c]of Object.entries(n.subgroupDict||{})){if(s.indexOf(":")!==-1||c.nobutton)continue;let l=this.isVisible(o,{type:"subgroup",key:s});a.push((0,Sa.jsx)("div",{style:{padding:"2px 6px"},children:(0,Sa.jsxs)("label",{style:{display:"flex",alignItems:"center",cursor:"pointer"},children:[(0,Sa.jsx)("input",{type:"checkbox",checked:l,onChange:()=>this.toggleVisibility(o,n,{type:"subgroup",key:s}),style:{marginRight:"6px"}}),(0,Sa.jsx)("span",{title:s,children:s})]})},"subgroup-"+i+"-"+s))}for(let[s]of Object.entries(n.masterDict||{})){let c=this.isVisible(o,{type:"master",key:s});a.push((0,Sa.jsx)("div",{style:{padding:"2px 6px"},children:(0,Sa.jsxs)("label",{style:{display:"flex",alignItems:"center",cursor:"pointer"},children:[(0,Sa.jsx)("input",{type:"checkbox",checked:c,onChange:()=>this.toggleVisibility(o,n,{type:"master",key:s}),style:{marginRight:"6px"}}),(0,Sa.jsx)("span",{title:s,children:s})]})},"master-"+i+"-"+s))}r.push((0,Sa.jsx)("div",{className:"msp-control-group-wrapper",children:a},"kin-block-"+i))}return(0,Sa.jsx)(Sa.Fragment,{children:r})}};var Bne=CT.Tag,Zx=lt.builderFactory("sb-kinemage"),yT=class extends te.Create({name:"Kinemage",typeClass:"Object"}){};async function q3e(e,t){if(t){if(e.canvas3d?.setProps({renderer:{...e.canvas3d.props.renderer,backgroundColor:0}}),t.target)try{let r=sx(e);if(r&&r.radius>0){let n=B.distance(t.target,r.center),o=(r.radius+n)/r.radius;e.canvas3d?.setProps({sceneRadiusFactor:o})}}catch(r){console.warn("Failed to adjust sceneRadiusFactor for view snapshot",r)}await yt.Camera.SetSnapshot(e,{snapshot:t})}}var $3e=Zx({name:"sb-kinemage-parse",display:{name:"Parse Kinemage"},from:[te.Data.String],to:yT,params:{label:h.Optional(h.Text("",{description:"Label for the Kinemage data"}))}})({apply({a:e,params:t}){return ve.create("Parse Kinemage",async r=>{let n=e.data,o;if(typeof n=="string"){let a=new File([n],"input.kin",{type:"text/plain"});o=await CT.open(a)}else throw new Error("Unsupported input type for ParseKinemage");for(let a of o.kinemages){a.viewSnapshots=a.viewSnapshots||Object.create(null);for(let[A,s]of Object.entries(a.viewDict)){let c=B.create(0,0,0);s.center&&B.set(c,s.center[0],s.center[1],s.center[2]);let l=Ht.identity();s.matrix&&(Ht.fromArray(l,s.matrix,0),Ht.transpose(l,l));let u=B.create(0,0,1);B.transformMat3(u,u,l);let g=B.create(0,1,0);B.transformMat3(g,g,l);let m=100;s.span&&(m=s.span),B.scale(u,u,m);let p=B.create(0,0,100);B.add(p,c,u);let d=100;if(s.zslab){let I=s.zslab/200;d=.5*m*I}let f={mode:"orthographic",fov:Math.PI/4,position:p,up:g,target:c,radius:d,radiusMax:1e4,fog:0,clipFar:!0,minNear:1,minFar:1};a.viewSnapshots[A]=f}}let i=t.label||o.kinemages[0]?.caption||"Kinemage";return new yT(o,{label:i,description:`Kinemage with ${o.kinemages.length} kinemage(s)`})})}}),e_e=Zx({name:"sb-kinemage-select",display:{name:"Select Kinemage"},from:yT,to:te.Format.Json,params:e=>{let r=(e?.data?.kinemages||[]).map((n,o)=>[o,n.pdbfile||n.caption||`Kinemage ${o}`]);return{index:h.Select(0,r,{description:"Which kinemage to use"})}}})({apply({a:e,params:t}){return ve.create("Select Kinemage",async r=>{let n=e.data.kinemages[t.index];if(!n)throw new Error(`No kinemage found at index ${t.index}`);let o=n.pdbfile||n.caption||`Kinemage ${t.index}`;return new te.Format.Json({kinData:n},{label:o,description:n.text||""})})}}),t_e=Zx({name:"sb-kinemage-visibility-controller",display:{name:"Kinemage Visibility Controller"},from:te.Format.Json,to:te.Format.Json,params:e=>{let t=e?.data?.kinData;if(!t)return{groupVisibility:h.Value({}),subgroupVisibility:h.Value({}),masterVisibility:h.Value({}),activeAnimateGroup:h.Numeric(0,{min:0,max:0,step:1},{description:"Active animate group index"}),activeAnimateGroup2:h.Numeric(0,{min:0,max:0,step:1},{description:"Active animate2 group index"})};let r={},n={},o={};for(let[i,a]of Object.entries(t.groupDict))r[i]=!a.off;for(let[i,a]of Object.entries(t.subgroupDict))n[i]=!a.off;for(let[i,a]of Object.entries(t.masterDict))o[i]=!!a.visible;return{groupVisibility:h.Value(r,{isHidden:!0}),subgroupVisibility:h.Value(n,{isHidden:!0}),masterVisibility:h.Value(o,{isHidden:!0}),activeAnimateGroup:h.Numeric(0,{min:0,max:Math.max(0,t.groupsAnimate.length-1),step:1},{description:"Active animate group index",isHidden:!0}),activeAnimateGroup2:h.Numeric(0,{min:0,max:Math.max(0,t.groupsAnimate2.length-1),step:1},{description:"Active animate2 group index",isHidden:!0})}}})({apply({a:e,params:t}){return ve.create("Kinemage Visibility Controller",async r=>{let n=e.data.kinData;if(!n)throw new Error("No kinData found in parent Format.Json node");let o={groupVisibility:new Map(Object.entries(t.groupVisibility)),subgroupVisibility:new Map(Object.entries(t.subgroupVisibility)),masterVisibility:new Map(Object.entries(t.masterVisibility)),activeAnimateGroup:t.activeAnimateGroup,activeAnimateGroup2:t.activeAnimateGroup2};return new te.Format.Json({kinData:n,visibilityState:o},{label:e.label,description:e.description})})}}),mne=Zx({name:"sb-kinemage-shape-points-provider",display:{name:"Kinemage Shape Points Provider"},from:te.Format.Json,to:te.Shape.Provider,params:{}})({apply({a:e}){return ve.create("Kinemage Points Shape Provider",async t=>{let r=e.data.kinData,n=e.data.visibilityState;if(!r)throw new Error("No kinData found in parent Format.Json node");let o=await j3e(r,n,{transforms:void 0},"Dots").runInContext(t);return new te.Shape.Provider(o,{label:r.pdbfile||r.caption||"Kinemage Points",description:r.text||""})})}}),dne=Zx({name:"sb-kinemage-shape-lines-provider",display:{name:"Kinemage Shape Lines Provider"},from:te.Format.Json,to:te.Shape.Provider,params:{}})({apply({a:e}){return ve.create("Kinemage Lines Shape Provider",async t=>{let r=e.data.kinData,n=e.data.visibilityState;if(!r)throw new Error("No kinData found in parent Format.Json node");let o=await W3e(r,n).runInContext(t);return new te.Shape.Provider(o,{label:r.pdbfile||r.caption||"Kinemage Lines",description:r.text||""})})}}),pne=Zx({name:"sb-kinemage-shape-mesh-provider",display:{name:"Kinemage Shape Mesh Provider"},from:te.Format.Json,to:te.Shape.Provider,params:{}})({apply({a:e}){return ve.create("Kinemage Mesh Shape Provider",async t=>{let r=e.data.kinData,n=e.data.visibilityState;if(!r)throw new Error("No kinData found in parent Format.Json node");let o=await X3e(r,n).runInContext(t);return new te.Shape.Provider(o,{label:r.pdbfile||r.caption||"Kinemage Meshes",description:r.text||""})})}}),fne=Zx({name:"sb-kinemage-shape-spheres-provider",display:{name:"Kinemage Shape Spheres Provider"},from:te.Format.Json,to:te.Shape.Provider,params:{}})({apply({a:e}){return ve.create("Kinemage Spheres Shape Provider",async t=>{let r=e.data.kinData,n=e.data.visibilityState;if(!r)throw new Error("No kinData found in parent Format.Json node");let o=await Z3e(r,n).runInContext(t);return new te.Shape.Provider(o,{label:r.pdbfile||r.caption||"Kinemage Spheres",description:r.text||""})})}}),r_e=er.create({name:"kinemage-data-prop",category:"custom-props",display:{name:"Kinemage data",description:"Data loaded from Kinemage."},ctor:class extends er.Handler{constructor(){super(...arguments);this.provider=_3e}register(){Zs.addCustomProp(this.provider.descriptor),this.ctx.customStructureProperties.register(this.provider,this.params.autoAttach),this.ctx.customStructureControls.set(Bne.Representation,hT),this.ctx.customControls&&typeof this.ctx.customControls.set=="function"&&this.ctx.customControls.set("kinemage",hT),this.ctx.managers.dragAndDrop.addHandler(Ine.name,Ine.handle),this.ctx.dataFormats.add("KIN",XGt)}update(t){let r=this.params.autoAttach!==t.autoAttach;return this.params.autoAttach=t.autoAttach,this.ctx.customStructureProperties.setDefaultAutoAttach(this.provider.descriptor.name,this.params.autoAttach),r}unregister(){Zs.removeCustomProp(this.provider.descriptor),this.ctx.customStructureProperties.unregister(this.provider.descriptor.name),this.ctx.genericRepresentationControls.delete(Bne.Representation),this.ctx.managers.dragAndDrop.removeHandler(Ine.name),this.ctx.dataFormats.remove("KIN");try{this.ctx.customStructureControls.delete(Bne.Representation)}catch{}if(this.ctx.customControls&&typeof this.ctx.customControls.delete=="function")try{this.ctx.customControls.delete("kinemage")}catch{}}},params:()=>({autoAttach:h.Boolean(!1)})});async function n_e(e,t,r){let n=e.state.data.cells.get(r.ref);if(!n?.obj?.data)return;let o=n.obj.data.kinData;o&&(o.dotLists.length>0&&await t.to(r.ref).apply(mne,{},{state:{isGhost:!0}}).apply(ze.Representation.ShapeRepresentation3D),o.vectorLists.length>0&&await t.to(r.ref).apply(dne,{},{state:{isGhost:!0}}).apply(ze.Representation.ShapeRepresentation3D),o.ribbonLists.length>0&&await t.to(r.ref).apply(pne,{},{state:{isGhost:!0}}).apply(ze.Representation.ShapeRepresentation3D,{doubleSided:!0}),o.ballLists.length>0&&await t.to(r.ref).apply(fne,{},{state:{isGhost:!0}}).apply(ze.Representation.ShapeRepresentation3D))}async function jGt(e,t,r){let n=e.state.data.build(),i=n.toRoot().apply(ze.Data.RawData,{data:t,label:r||"Kinemage File"}).apply($3e,{label:r});await n.commit();let A=e.state.data.cells.get(i.ref)?.obj?.data;if(!A||!A.kinemages||A.kinemages.length===0){console.warn("No kinemages found in parsed data");return}let s=[];for(let u=0;u<A.kinemages.length;u++){let g=e.state.data.build(),p=g.to(i.ref).apply(e_e,{index:u}).apply(t_e,{});await g.commit(),s.push(p.selector)}let c=e.state.data.build();for(let u of s)await n_e(e,c,u);await c.commit();async function l(u,g=2e3,m=50){let p=Date.now();for(;Date.now()-p<g;){try{let d=sx(u);if(d&&d.radius>0)return d}catch{}await new Promise(d=>setTimeout(d,m))}return null}try{let u=await l(e);u&&u.radius>0&&e.canvas3d&&(await yt.Camera.Focus(e,{center:u.center,radius:u.radius,durationMs:250}),e.canvas3d?.commit())}catch(u){console.warn("Failed to apply initial kinemage view snapshot",u)}return s[0]}async function WGt(e,t){let r=await t.text();return await jGt(e,r,t.name)}var Ine={name:"kin",async handle(e,t){let r=!1;for(let n of e)if(n.name.toLowerCase().endsWith(".kin")){let o=await WGt(t,n);r=r||!!o}return r}},XGt={label:"KIN",description:"Kinemage",category:"Miscellaneous",stringExtensions:["kin","KIN"],parse:async(e,t)=>{try{let r=e.state.data.build().to(t).apply($3e,{});await r.commit();let n=r.selector.ref,i=e.state.data.cells.get(n)?.obj?.data;if(!i||!i.kinemages||i.kinemages.length===0)return console.warn("No kinemages found in parsed data"),{};let a=[];for(let A=0;A<i.kinemages.length;A++){let s=e.state.data.build(),l=s.to(n).apply(e_e,{index:A}).apply(t_e,{});await s.commit(),a.push(l.selector)}return{visControllers:a}}catch(r){throw console.error("Failed to parse KIN file",r),r}},visuals:async(e,t)=>{if(!t?.visControllers||!Array.isArray(t.visControllers)){console.warn("[Kinemage] visuals: no visControllers array provided");return}let r=e.state.data.build();for(let o of t.visControllers)await n_e(e,r,o);await r.commit();async function n(o,i=2e3,a=50){let A=Date.now();for(;Date.now()-A<i;){try{let s=sx(o);if(s&&s.radius>0)return s}catch{}await new Promise(s=>setTimeout(s,a))}return null}try{let o=await n(e);o&&o.radius>0&&e.canvas3d&&(await yt.Camera.Focus(e,{center:o.center,radius:o.radius,durationMs:250}),e.canvas3d?.commit())}catch(o){console.warn("Failed to focus camera on kinemage",o)}}};var hne={};ki(hne,{applyStructureInteractivity:()=>Cne});function Cne(e,{expression:t,elements:r,action:n,applyGranularity:o=!1,filterStructure:i,focusOptions:a}){let A=Array.isArray(n)?n:[n];if(!t&&!r){A.includes("select")&&e.managers.interactivity.lociSelects.deselectAll(),A.includes("highlight")&&e.managers.interactivity.lociHighlights.clearHighlights();return}A.includes("select")&&e.managers.interactivity.lociSelects.deselectAll();let s=e.state.data.selectQ(l=>l.rootsOfType(te.Molecule.Structure)),c=!1;for(let l of s){if(!l.obj?.data||i&&!i(l.obj.data))continue;let u=t?W.Loci.fromExpression(l.obj.data,t):W.Loci.fromSchema(l.obj.data,r);for(let g of A)if(g==="select")e.managers.interactivity.lociSelects.select({loci:u},o);else if(g==="highlight")e.managers.interactivity.lociHighlights.highlight({loci:u},o);else if(g==="focus"&&!W.Loci.isEmpty(u)&&!c&&(e.managers.camera.focusLoci(u,a),c=!0,A.length===1))return}}var e4={};ki(e4,{loadAllModelsOrAssemblyFromUrl:()=>bne,loadAlphaFoldDb:()=>Fne,loadEmdb:()=>vne,loadFiles:()=>Gne,loadFullResolutionEMDBMap:()=>Une,loadMVSFromUrl:()=>Tne,loadModelArchive:()=>wne,loadMvsData:()=>Pne,loadMvsState:()=>ZGt,loadPdb:()=>Sne,loadPdbIhm:()=>Dne,loadSnapshotFromUrl:()=>Qne,loadStructureFromData:()=>xne,loadStructureFromUrl:()=>Ene,loadTrajectory:()=>Lne,loadUrl:()=>Nne,loadVolumeFromUrl:()=>Rne,setRemoteSnapshot:()=>yne});async function yne(e,t){await e.initialized;let r=`${e.config.get(jt.State.CurrentServer)}/get/${t}`;return yt.State.Snapshots.Fetch(e,{url:r})}async function Qne(e,t,r){return await e.initialized,yt.State.Snapshots.OpenUrl(e,{url:t,type:r})}async function Ene(e,t,r="mmcif",n=!1,o){await e.initialized;let i=Mg.createDefaultParams(e.state.data.root.obj,e);return e.runTask(e.state.data.applyAction(Mg,{source:{name:"url",params:{url:gn.Url(t),format:r,isBinary:n,label:o?.label,options:{...i.source.params.options,representationParams:o?.representationParams}}}}))}async function bne(e,t,r="mmcif",n=!1,o){await e.initialized;let i=await e.builders.data.download({url:t,isBinary:n},{state:{isGhost:!0}}),a=await e.builders.structure.parseTrajectory(i,r);await e.builders.structure.hierarchy.applyPreset(a,"all-models",{useDefaultIfSingleModel:!0,representationPresetParams:o?.representationParams})}async function xne(e,t,r,n){await e.initialized;let o=await e.builders.data.rawData({data:t,label:n?.dataLabel}),i=await e.builders.structure.parseTrajectory(o,r);await e.builders.structure.hierarchy.applyPreset(i,"default")}async function Sne(e,t,r){await e.initialized;let n=Mg.createDefaultParams(e.state.data.root.obj,e),o=e.config.get(jt.Download.DefaultPdbProvider);return e.runTask(e.state.data.applyAction(Mg,{source:{name:"pdb",params:{provider:{id:t,server:{name:o,params:N_[o].defaultValue}},options:{...n.source.params.options,representationParams:r?.representationParams}}}}))}async function Dne(e,t){await e.initialized;let r=Mg.createDefaultParams(e.state.data.root.obj,e);return e.runTask(e.state.data.applyAction(Mg,{source:{name:"pdb-ihm",params:{provider:{id:t,encoding:"bcif"},options:r.source.params.options}}}))}async function vne(e,t,r){await e.initialized;let n=e.config.get(jt.Download.DefaultEmdbProvider);return e.runTask(e.state.data.applyAction(sL,{source:{name:"pdb-emd-ds",params:{provider:{id:t,server:n},detail:r?.detail??3}}}))}async function Fne(e,t){await e.initialized;let r=Mg.createDefaultParams(e.state.data.root.obj,e);return e.runTask(e.state.data.applyAction(Mg,{source:{name:"alphafolddb",params:{provider:{id:t,encoding:"bcif"},options:{...r.source.params.options,representation:"preset-structure-representation-ma-quality-assessment-plddt"}}}}))}async function wne(e,t){await e.initialized;let r=Mg.createDefaultParams(e.state.data.root.obj,e);return e.runTask(e.state.data.applyAction(Mg,{source:{name:"modelarchive",params:{id:t,options:r.source.params.options}}}))}async function Rne(e,{url:t,format:r,isBinary:n},o,i){if(await e.initialized,!e.dataFormats.get(r))throw new Error(`Unknown density format: ${r}`);if(i?.isLazy){let a=e.build();return a.toRoot().apply(ze.Data.LazyVolume,{url:t,format:r,entryId:i?.entryId,isBinary:n,isovalues:o.map(A=>({alpha:1,volumeIndex:0,...A}))}),a.commit()}return e.dataTransaction(async()=>{let a=await e.builders.data.download({url:t,isBinary:n},{state:{isGhost:!0}}),A=await e.dataFormats.get(r).parse(e,a,{entryId:i?.entryId}),s=A.volume||A.volumes[0];if(!s?.isOk)throw new Error("Failed to parse any volume.");let c=e.build();for(let l of o){let u=A.volumes?.[l.volumeIndex??0]??A.volume,g=u.cell.obj.data;c.to(u).apply(ze.Representation.VolumeRepresentation3D,Op(e,s.data,{type:"isosurface",typeParams:{alpha:l.alpha??1,isoValue:Ze.adjustedIsoValue(g,l.value,l.type)},color:"uniform",colorParams:{value:l.color}}))}await c.commit()})}async function Une(e,t,r){await e.initialized;let n=parseInt(t.toUpperCase().replace("EMD-","")),o=`https://ftp.ebi.ac.uk/pub/databases/emdb/structures/EMD-${n}/map/emd_${n}.map.gz`;return e.dataTransaction(async()=>{let i=await e.build().toRoot().apply(ze.Data.Download,{url:o,isBinary:!0,label:t},{state:{isGhost:!0}}).apply(ze.Data.DeflateData).commit(),a=await e.dataFormats.get("ccp4").parse(e,i,{entryId:t}),A=a.volume||a.volumes[0];if(!A?.isOk)throw new Error("Failed to parse any volume.");let s=a.volumes?.[0]??a.volume;await e.build().to(s).apply(ze.Representation.VolumeRepresentation3D,Op(e,A.data,{type:"isosurface",typeParams:{alpha:1,isoValue:r.isoValue},color:"uniform",colorParams:{value:r.color??3390259}})).commit()})}async function Lne(e,t){await e.initialized;let r;if(t.model.kind==="model-data"||t.model.kind==="model-url"){let s=t.model.kind==="model-data"?await e.builders.data.rawData({data:t.model.data,label:t.modelLabel}):await e.builders.data.download({url:t.model.url,isBinary:t.model.isBinary,label:t.modelLabel}),c=await e.builders.structure.parseTrajectory(s,t.model.format??"mmcif");r=await e.builders.structure.createModel(c)}else{let s=t.model.kind==="topology-data"?await e.builders.data.rawData({data:t.model.data,label:t.modelLabel}):await e.builders.data.download({url:t.model.url,isBinary:t.model.isBinary,label:t.modelLabel});r=(await e.dataFormats.get(t.model.format).parse(e,s)).topology}let n=t.coordinates.kind==="coordinates-data"?await e.builders.data.rawData({data:t.coordinates.data,label:t.coordinatesLabel}):await e.builders.data.download({url:t.coordinates.url,isBinary:t.coordinates.isBinary,label:t.coordinatesLabel}),i=await e.dataFormats.get(t.coordinates.format).parse(e,n),a=await e.build().toRoot().apply(Iv,{modelRef:r.ref,coordinatesRef:i.ref},{dependsOn:[r.ref,i.ref]}).commit(),A=await e.builders.structure.hierarchy.applyPreset(a,t.preset??"default");return{model:r,coords:i,preset:A}}async function Tne(e,t,r,n){if(await e.initialized,r==="mvsj"){let o=await e.runTask(e.fetch({url:t,type:"string"})),i=Qu.fromMVSJ(am.toString(o));await Pd(e,i,{sanityChecks:!0,sourceUrl:t,...n})}else if(r==="mvsx"){let o=await e.runTask(e.fetch({url:t,type:"binary"}));await e.runTask(ve.create("Load MVSX file",async i=>{let a=await z1(e,i,o,{doNotClearAssets:n?.appendSnapshots});await Pd(e,a.mvsData,{sanityChecks:!0,sourceUrl:a.sourceUrl,...n})}))}else throw new Error(`Unknown MolViewSpec format: ${r}`)}async function Pne(e,t,r,n){return await e.initialized,RO(e,t,r,n)}async function ZGt(e,t,r){return await e.initialized,Pd(e,t,r)}async function Gne(e,t){await e.initialized;let r=t.filter(n=>{let o=n.name.toLowerCase();return o.endsWith(".molx")||o.endsWith(".molj")});return r.length>0?yt.State.Snapshots.OpenFile(e,{file:r[0]}):e.runTask(e.state.data.applyAction(Qx,{files:t.map(n=>gn.File(n)),format:{name:"auto",params:{}},visuals:!0}))}async function Nne(e,t,r,n=!1){return await e.initialized,e.runTask(ve.create("Load URL",async o=>{await e.state.data.applyAction(iL,{url:gn.Url(t),format:r,isBinary:n,visuals:!0}).runInContext(o)}))}var t4=class{constructor(t){this.mountQueue=new AE;let r=t?.spec??A1();this.plugin=new RE(r),this.init()}get initialized(){return this.plugin.initialized}async init(){await this.plugin.init()}mount(t){this.mountQueue.enqueue(()=>this.plugin.mountAsync(t))}unmount(){this.mountQueue.enqueue(()=>this.plugin.unmount())}};var r4=class{get initialized(){return this.plugin.initialized}async init(){await this.plugin.init()}constructor(t){let r=t?.spec??NE();this.plugin=new UE(r),this.init()}};var QT={mvs:Lr.Behavior(sT),backgrounds:Lr.Behavior(wNe),"debug-helpers":Lr.Behavior(YNe),"model-export":Lr.Behavior(jMe),"mp4-export":Lr.Behavior($Me),"geo-export":Lr.Behavior(LMe),"zenodo-import":Lr.Behavior(G3e),"wwpdb-chemical-component-dictionary":Lr.Behavior(w3e),kinemage:Lr.Behavior(r_e),"pdbe-structure-quality-report":Lr.Behavior(Jre),"dnatco-ntcs":Lr.Behavior(Bte),"assembly-symmetry":Lr.Behavior(Jee),"rcsb-validation-report":Lr.Behavior($re),"anvil-membrane-orientation":Lr.Behavior(sNe),g3d:Lr.Behavior(DMe),"ma-quality-assessment":Lr.Behavior(OMe),"sb-ncbr-partial-charges":Lr.Behavior(rne),tunnels:Lr.Behavior(Ane)},Mne={wwPDBStructConn:T3e,mvs:{MVSData:Qu,createBuilder:Qu.createBuilder,loadMVS:Pd,loadMVSData:RO,util:{...lne}},modelArchive:{qualityAssessment:{config:xte}},plugin:{interactivity:hne,loaders:e4,models:{PluginViewModel:t4,PluginUIViewModel:r4}}};var qGt={structure:{...Jj},volume:{Volume:Ze},shape:{Shape:Mr,ShapeGroup:OA},loci:{Loci:pr,DataLoci:ec,EveryLoci:Bp},math:{LinearAlgebra:{...oz}},plugin:{PluginContext:RE,PluginUIContext:UE,PluginConfig:jt,PluginBehavior:er,PluginSpec:Lr,PluginStateObject:te,PluginStateTransform:Yt,StateTransforms:ze,StateActions:CC,DefaultPluginSpec:A1,DefaultPluginUISpec:NE},extensions:{...Mne}};var F4e=kt(Qa());var fS=kt(Qa());var uw=kt(Qa());function o_e(e,t){let r=t||{};return(e[e.length-1]===""?[...e,""]:e).join((r.padRight?" ":"")+","+(r.padLeft===!1?"":" ")).trim()}var $Gt=/^[$_\p{ID_Start}][$_\u{200C}\u{200D}\p{ID_Continue}]*$/u,eNt=/^[$_\p{ID_Start}][-$_\u{200C}\u{200D}\p{ID_Continue}]*$/u,tNt={};function n4(e,t){return((t||tNt).jsx?eNt:$Gt).test(e)}var rNt=/[ \t\n\f\r]/g;function kne(e){return typeof e=="object"?e.type==="text"?i_e(e.value):!1:i_e(e)}function i_e(e){return e.replace(rNt,"")===""}var py=class{constructor(t,r,n){this.normal=r,this.property=t,n&&(this.space=n)}};py.prototype.normal={};py.prototype.property={};py.prototype.space=void 0;function Hne(e,t){let r={},n={};for(let o of e)Object.assign(r,o.property),Object.assign(n,o.normal);return new py(r,n,t)}function ET(e){return e.toLowerCase()}var Zl=class{constructor(t,r){this.attribute=r,this.property=t}};Zl.prototype.attribute="";Zl.prototype.booleanish=!1;Zl.prototype.boolean=!1;Zl.prototype.commaOrSpaceSeparated=!1;Zl.prototype.commaSeparated=!1;Zl.prototype.defined=!1;Zl.prototype.mustUseProperty=!1;Zl.prototype.number=!1;Zl.prototype.overloadedBoolean=!1;Zl.prototype.property="";Zl.prototype.spaceSeparated=!1;Zl.prototype.space=void 0;var bT={};ki(bT,{boolean:()=>xo,booleanish:()=>Ys,commaOrSpaceSeparated:()=>Jm,commaSeparated:()=>fy,number:()=>Dr,overloadedBoolean:()=>o4,spaceSeparated:()=>Da});var nNt=0,xo=qx(),Ys=qx(),o4=qx(),Dr=qx(),Da=qx(),fy=qx(),Jm=qx();function qx(){return 2**++nNt}var Vne=Object.keys(bT),$x=class extends Zl{constructor(t,r,n,o){let i=-1;if(super(t,r),a_e(this,"space",o),typeof n=="number")for(;++i<Vne.length;){let a=Vne[i];a_e(this,Vne[i],(n&bT[a])===bT[a])}}};$x.prototype.defined=!0;function a_e(e,t,r){r&&(e[t]=r)}function yf(e){let t={},r={};for(let[n,o]of Object.entries(e.properties)){let i=new $x(n,e.transform(e.attributes||{},n),o,e.space);e.mustUseProperty&&e.mustUseProperty.includes(n)&&(i.mustUseProperty=!0),t[n]=i,r[ET(n)]=n,r[ET(i.attribute)]=n}return new py(t,r,e.space)}var _ne=yf({properties:{ariaActiveDescendant:null,ariaAtomic:Ys,ariaAutoComplete:null,ariaBusy:Ys,ariaChecked:Ys,ariaColCount:Dr,ariaColIndex:Dr,ariaColSpan:Dr,ariaControls:Da,ariaCurrent:null,ariaDescribedBy:Da,ariaDetails:null,ariaDisabled:Ys,ariaDropEffect:Da,ariaErrorMessage:null,ariaExpanded:Ys,ariaFlowTo:Da,ariaGrabbed:Ys,ariaHasPopup:null,ariaHidden:Ys,ariaInvalid:null,ariaKeyShortcuts:null,ariaLabel:null,ariaLabelledBy:Da,ariaLevel:Dr,ariaLive:null,ariaModal:Ys,ariaMultiLine:Ys,ariaMultiSelectable:Ys,ariaOrientation:null,ariaOwns:Da,ariaPlaceholder:null,ariaPosInSet:Dr,ariaPressed:Ys,ariaReadOnly:Ys,ariaRelevant:null,ariaRequired:Ys,ariaRoleDescription:Da,ariaRowCount:Dr,ariaRowIndex:Dr,ariaRowSpan:Dr,ariaSelected:Ys,ariaSetSize:Dr,ariaSort:null,ariaValueMax:Dr,ariaValueMin:Dr,ariaValueNow:Dr,ariaValueText:null,role:null},transform(e,t){return t==="role"?t:"aria-"+t.slice(4).toLowerCase()}});function i4(e,t){return t in e?e[t]:t}function a4(e,t){return i4(e,t.toLowerCase())}var A_e=yf({attributes:{acceptcharset:"accept-charset",classname:"class",htmlfor:"for",httpequiv:"http-equiv"},mustUseProperty:["checked","multiple","muted","selected"],properties:{abbr:null,accept:fy,acceptCharset:Da,accessKey:Da,action:null,allow:null,allowFullScreen:xo,allowPaymentRequest:xo,allowUserMedia:xo,alpha:xo,alt:null,as:null,async:xo,autoCapitalize:null,autoComplete:Da,autoFocus:xo,autoPlay:xo,blocking:Da,capture:null,charSet:null,checked:xo,cite:null,className:Da,closedBy:null,colorSpace:null,cols:Dr,colSpan:Dr,command:null,commandFor:null,content:null,contentEditable:Ys,controls:xo,controlsList:Da,coords:Dr|fy,crossOrigin:null,data:null,dateTime:null,decoding:null,default:xo,defer:xo,dir:null,dirName:null,disabled:xo,download:o4,draggable:Ys,encType:null,enterKeyHint:null,fetchPriority:null,form:null,formAction:null,formEncType:null,formMethod:null,formNoValidate:xo,formTarget:null,headers:Da,height:Dr,hidden:o4,high:Dr,href:null,hrefLang:null,htmlFor:Da,httpEquiv:Da,id:null,imageSizes:null,imageSrcSet:null,inert:xo,inputMode:null,integrity:null,is:null,isMap:xo,itemId:null,itemProp:Da,itemRef:Da,itemScope:xo,itemType:Da,kind:null,label:null,lang:null,language:null,list:null,loading:null,loop:xo,low:Dr,manifest:null,max:null,maxLength:Dr,media:null,method:null,min:null,minLength:Dr,multiple:xo,muted:xo,name:null,nonce:null,noModule:xo,noValidate:xo,onAbort:null,onAfterPrint:null,onAuxClick:null,onBeforeMatch:null,onBeforePrint:null,onBeforeToggle:null,onBeforeUnload:null,onBlur:null,onCancel:null,onCanPlay:null,onCanPlayThrough:null,onChange:null,onClick:null,onClose:null,onContextLost:null,onContextMenu:null,onContextRestored:null,onCopy:null,onCueChange:null,onCut:null,onDblClick:null,onDrag:null,onDragEnd:null,onDragEnter:null,onDragExit:null,onDragLeave:null,onDragOver:null,onDragStart:null,onDrop:null,onDurationChange:null,onEmptied:null,onEnded:null,onError:null,onFocus:null,onFormData:null,onHashChange:null,onInput:null,onInvalid:null,onKeyDown:null,onKeyPress:null,onKeyUp:null,onLanguageChange:null,onLoad:null,onLoadedData:null,onLoadedMetadata:null,onLoadEnd:null,onLoadStart:null,onMessage:null,onMessageError:null,onMouseDown:null,onMouseEnter:null,onMouseLeave:null,onMouseMove:null,onMouseOut:null,onMouseOver:null,onMouseUp:null,onOffline:null,onOnline:null,onPageHide:null,onPageShow:null,onPaste:null,onPause:null,onPlay:null,onPlaying:null,onPopState:null,onProgress:null,onRateChange:null,onRejectionHandled:null,onReset:null,onResize:null,onScroll:null,onScrollEnd:null,onSecurityPolicyViolation:null,onSeeked:null,onSeeking:null,onSelect:null,onSlotChange:null,onStalled:null,onStorage:null,onSubmit:null,onSuspend:null,onTimeUpdate:null,onToggle:null,onUnhandledRejection:null,onUnload:null,onVolumeChange:null,onWaiting:null,onWheel:null,open:xo,optimum:Dr,pattern:null,ping:Da,placeholder:null,playsInline:xo,popover:null,popoverTarget:null,popoverTargetAction:null,poster:null,preload:null,readOnly:xo,referrerPolicy:null,rel:Da,required:xo,reversed:xo,rows:Dr,rowSpan:Dr,sandbox:Da,scope:null,scoped:xo,seamless:xo,selected:xo,shadowRootClonable:xo,shadowRootCustomElementRegistry:xo,shadowRootDelegatesFocus:xo,shadowRootMode:null,shadowRootSerializable:xo,shape:null,size:Dr,sizes:null,slot:null,span:Dr,spellCheck:Ys,src:null,srcDoc:null,srcLang:null,srcSet:null,start:Dr,step:null,style:null,tabIndex:Dr,target:null,title:null,translate:null,type:null,typeMustMatch:xo,useMap:null,value:Ys,width:Dr,wrap:null,writingSuggestions:null,align:null,aLink:null,archive:Da,axis:null,background:null,bgColor:null,border:Dr,borderColor:null,bottomMargin:Dr,cellPadding:null,cellSpacing:null,char:null,charOff:null,classId:null,clear:null,code:null,codeBase:null,codeType:null,color:null,compact:xo,declare:xo,event:null,face:null,frame:null,frameBorder:null,hSpace:Dr,leftMargin:Dr,link:null,longDesc:null,lowSrc:null,marginHeight:Dr,marginWidth:Dr,noResize:xo,noHref:xo,noShade:xo,noWrap:xo,object:null,profile:null,prompt:null,rev:null,rightMargin:Dr,rules:null,scheme:null,scrolling:Ys,standby:null,summary:null,text:null,topMargin:Dr,valueType:null,version:null,vAlign:null,vLink:null,vSpace:Dr,allowTransparency:null,autoCorrect:null,autoSave:null,credentialless:xo,disablePictureInPicture:xo,disableRemotePlayback:xo,exportParts:fy,part:Da,prefix:null,property:null,results:Dr,security:null,unselectable:null},space:"html",transform:a4});var s_e=yf({attributes:{accentHeight:"accent-height",alignmentBaseline:"alignment-baseline",arabicForm:"arabic-form",baselineShift:"baseline-shift",capHeight:"cap-height",className:"class",clipPath:"clip-path",clipRule:"clip-rule",colorInterpolation:"color-interpolation",colorInterpolationFilters:"color-interpolation-filters",colorProfile:"color-profile",colorRendering:"color-rendering",crossOrigin:"crossorigin",dataType:"datatype",dominantBaseline:"dominant-baseline",enableBackground:"enable-background",fillOpacity:"fill-opacity",fillRule:"fill-rule",floodColor:"flood-color",floodOpacity:"flood-opacity",fontFamily:"font-family",fontSize:"font-size",fontSizeAdjust:"font-size-adjust",fontStretch:"font-stretch",fontStyle:"font-style",fontVariant:"font-variant",fontWeight:"font-weight",glyphName:"glyph-name",glyphOrientationHorizontal:"glyph-orientation-horizontal",glyphOrientationVertical:"glyph-orientation-vertical",hrefLang:"hreflang",horizAdvX:"horiz-adv-x",horizOriginX:"horiz-origin-x",horizOriginY:"horiz-origin-y",imageRendering:"image-rendering",letterSpacing:"letter-spacing",lightingColor:"lighting-color",markerEnd:"marker-end",markerMid:"marker-mid",markerStart:"marker-start",maskType:"mask-type",navDown:"nav-down",navDownLeft:"nav-down-left",navDownRight:"nav-down-right",navLeft:"nav-left",navNext:"nav-next",navPrev:"nav-prev",navRight:"nav-right",navUp:"nav-up",navUpLeft:"nav-up-left",navUpRight:"nav-up-right",onAbort:"onabort",onActivate:"onactivate",onAfterPrint:"onafterprint",onBeforePrint:"onbeforeprint",onBegin:"onbegin",onCancel:"oncancel",onCanPlay:"oncanplay",onCanPlayThrough:"oncanplaythrough",onChange:"onchange",onClick:"onclick",onClose:"onclose",onCopy:"oncopy",onCueChange:"oncuechange",onCut:"oncut",onDblClick:"ondblclick",onDrag:"ondrag",onDragEnd:"ondragend",onDragEnter:"ondragenter",onDragExit:"ondragexit",onDragLeave:"ondragleave",onDragOver:"ondragover",onDragStart:"ondragstart",onDrop:"ondrop",onDurationChange:"ondurationchange",onEmptied:"onemptied",onEnd:"onend",onEnded:"onended",onError:"onerror",onFocus:"onfocus",onFocusIn:"onfocusin",onFocusOut:"onfocusout",onHashChange:"onhashchange",onInput:"oninput",onInvalid:"oninvalid",onKeyDown:"onkeydown",onKeyPress:"onkeypress",onKeyUp:"onkeyup",onLoad:"onload",onLoadedData:"onloadeddata",onLoadedMetadata:"onloadedmetadata",onLoadStart:"onloadstart",onMessage:"onmessage",onMouseDown:"onmousedown",onMouseEnter:"onmouseenter",onMouseLeave:"onmouseleave",onMouseMove:"onmousemove",onMouseOut:"onmouseout",onMouseOver:"onmouseover",onMouseUp:"onmouseup",onMouseWheel:"onmousewheel",onOffline:"onoffline",onOnline:"ononline",onPageHide:"onpagehide",onPageShow:"onpageshow",onPaste:"onpaste",onPause:"onpause",onPlay:"onplay",onPlaying:"onplaying",onPopState:"onpopstate",onProgress:"onprogress",onRateChange:"onratechange",onRepeat:"onrepeat",onReset:"onreset",onResize:"onresize",onScroll:"onscroll",onSeeked:"onseeked",onSeeking:"onseeking",onSelect:"onselect",onShow:"onshow",onStalled:"onstalled",onStorage:"onstorage",onSubmit:"onsubmit",onSuspend:"onsuspend",onTimeUpdate:"ontimeupdate",onToggle:"ontoggle",onUnload:"onunload",onVolumeChange:"onvolumechange",onWaiting:"onwaiting",onZoom:"onzoom",overlinePosition:"overline-position",overlineThickness:"overline-thickness",paintOrder:"paint-order",panose1:"panose-1",pointerEvents:"pointer-events",referrerPolicy:"referrerpolicy",renderingIntent:"rendering-intent",shapeRendering:"shape-rendering",stopColor:"stop-color",stopOpacity:"stop-opacity",strikethroughPosition:"strikethrough-position",strikethroughThickness:"strikethrough-thickness",strokeDashArray:"stroke-dasharray",strokeDashOffset:"stroke-dashoffset",strokeLineCap:"stroke-linecap",strokeLineJoin:"stroke-linejoin",strokeMiterLimit:"stroke-miterlimit",strokeOpacity:"stroke-opacity",strokeWidth:"stroke-width",tabIndex:"tabindex",textAnchor:"text-anchor",textDecoration:"text-decoration",textRendering:"text-rendering",transformOrigin:"transform-origin",typeOf:"typeof",underlinePosition:"underline-position",underlineThickness:"underline-thickness",unicodeBidi:"unicode-bidi",unicodeRange:"unicode-range",unitsPerEm:"units-per-em",vAlphabetic:"v-alphabetic",vHanging:"v-hanging",vIdeographic:"v-ideographic",vMathematical:"v-mathematical",vectorEffect:"vector-effect",vertAdvY:"vert-adv-y",vertOriginX:"vert-origin-x",vertOriginY:"vert-origin-y",wordSpacing:"word-spacing",writingMode:"writing-mode",xHeight:"x-height",playbackOrder:"playbackorder",timelineBegin:"timelinebegin"},properties:{about:Jm,accentHeight:Dr,accumulate:null,additive:null,alignmentBaseline:null,alphabetic:Dr,amplitude:Dr,arabicForm:null,ascent:Dr,attributeName:null,attributeType:null,azimuth:Dr,bandwidth:null,baselineShift:null,baseFrequency:null,baseProfile:null,bbox:null,begin:null,bias:Dr,by:null,calcMode:null,capHeight:Dr,className:Da,clip:null,clipPath:null,clipPathUnits:null,clipRule:null,color:null,colorInterpolation:null,colorInterpolationFilters:null,colorProfile:null,colorRendering:null,content:null,contentScriptType:null,contentStyleType:null,crossOrigin:null,cursor:null,cx:null,cy:null,d:null,dataType:null,defaultAction:null,descent:Dr,diffuseConstant:Dr,direction:null,display:null,dur:null,divisor:Dr,dominantBaseline:null,download:xo,dx:null,dy:null,edgeMode:null,editable:null,elevation:Dr,enableBackground:null,end:null,event:null,exponent:Dr,externalResourcesRequired:null,fill:null,fillOpacity:Dr,fillRule:null,filter:null,filterRes:null,filterUnits:null,floodColor:null,floodOpacity:null,focusable:null,focusHighlight:null,fontFamily:null,fontSize:null,fontSizeAdjust:null,fontStretch:null,fontStyle:null,fontVariant:null,fontWeight:null,format:null,fr:null,from:null,fx:null,fy:null,g1:fy,g2:fy,glyphName:fy,glyphOrientationHorizontal:null,glyphOrientationVertical:null,glyphRef:null,gradientTransform:null,gradientUnits:null,handler:null,hanging:Dr,hatchContentUnits:null,hatchUnits:null,height:null,href:null,hrefLang:null,horizAdvX:Dr,horizOriginX:Dr,horizOriginY:Dr,id:null,ideographic:Dr,imageRendering:null,initialVisibility:null,in:null,in2:null,intercept:Dr,k:Dr,k1:Dr,k2:Dr,k3:Dr,k4:Dr,kernelMatrix:Jm,kernelUnitLength:null,keyPoints:null,keySplines:null,keyTimes:null,kerning:null,lang:null,lengthAdjust:null,letterSpacing:null,lightingColor:null,limitingConeAngle:Dr,local:null,markerEnd:null,markerMid:null,markerStart:null,markerHeight:null,markerUnits:null,markerWidth:null,mask:null,maskContentUnits:null,maskType:null,maskUnits:null,mathematical:null,max:null,media:null,mediaCharacterEncoding:null,mediaContentEncodings:null,mediaSize:Dr,mediaTime:null,method:null,min:null,mode:null,name:null,navDown:null,navDownLeft:null,navDownRight:null,navLeft:null,navNext:null,navPrev:null,navRight:null,navUp:null,navUpLeft:null,navUpRight:null,numOctaves:null,observer:null,offset:null,onAbort:null,onActivate:null,onAfterPrint:null,onBeforePrint:null,onBegin:null,onCancel:null,onCanPlay:null,onCanPlayThrough:null,onChange:null,onClick:null,onClose:null,onCopy:null,onCueChange:null,onCut:null,onDblClick:null,onDrag:null,onDragEnd:null,onDragEnter:null,onDragExit:null,onDragLeave:null,onDragOver:null,onDragStart:null,onDrop:null,onDurationChange:null,onEmptied:null,onEnd:null,onEnded:null,onError:null,onFocus:null,onFocusIn:null,onFocusOut:null,onHashChange:null,onInput:null,onInvalid:null,onKeyDown:null,onKeyPress:null,onKeyUp:null,onLoad:null,onLoadedData:null,onLoadedMetadata:null,onLoadStart:null,onMessage:null,onMouseDown:null,onMouseEnter:null,onMouseLeave:null,onMouseMove:null,onMouseOut:null,onMouseOver:null,onMouseUp:null,onMouseWheel:null,onOffline:null,onOnline:null,onPageHide:null,onPageShow:null,onPaste:null,onPause:null,onPlay:null,onPlaying:null,onPopState:null,onProgress:null,onRateChange:null,onRepeat:null,onReset:null,onResize:null,onScroll:null,onSeeked:null,onSeeking:null,onSelect:null,onShow:null,onStalled:null,onStorage:null,onSubmit:null,onSuspend:null,onTimeUpdate:null,onToggle:null,onUnload:null,onVolumeChange:null,onWaiting:null,onZoom:null,opacity:null,operator:null,order:null,orient:null,orientation:null,origin:null,overflow:null,overlay:null,overlinePosition:Dr,overlineThickness:Dr,paintOrder:null,panose1:null,path:null,pathLength:Dr,patternContentUnits:null,patternTransform:null,patternUnits:null,phase:null,ping:Da,pitch:null,playbackOrder:null,pointerEvents:null,points:null,pointsAtX:Dr,pointsAtY:Dr,pointsAtZ:Dr,preserveAlpha:null,preserveAspectRatio:null,primitiveUnits:null,propagate:null,property:Jm,r:null,radius:null,referrerPolicy:null,refX:null,refY:null,rel:Jm,rev:Jm,renderingIntent:null,repeatCount:null,repeatDur:null,requiredExtensions:Jm,requiredFeatures:Jm,requiredFonts:Jm,requiredFormats:Jm,resource:null,restart:null,result:null,rotate:null,rx:null,ry:null,scale:null,seed:null,shapeRendering:null,side:null,slope:null,snapshotTime:null,specularConstant:Dr,specularExponent:Dr,spreadMethod:null,spacing:null,startOffset:null,stdDeviation:null,stemh:null,stemv:null,stitchTiles:null,stopColor:null,stopOpacity:null,strikethroughPosition:Dr,strikethroughThickness:Dr,string:null,stroke:null,strokeDashArray:Jm,strokeDashOffset:null,strokeLineCap:null,strokeLineJoin:null,strokeMiterLimit:Dr,strokeOpacity:Dr,strokeWidth:null,style:null,surfaceScale:Dr,syncBehavior:null,syncBehaviorDefault:null,syncMaster:null,syncTolerance:null,syncToleranceDefault:null,systemLanguage:Jm,tabIndex:Dr,tableValues:null,target:null,targetX:Dr,targetY:Dr,textAnchor:null,textDecoration:null,textRendering:null,textLength:null,timelineBegin:null,title:null,transformBehavior:null,type:null,typeOf:Jm,to:null,transform:null,transformOrigin:null,u1:null,u2:null,underlinePosition:Dr,underlineThickness:Dr,unicode:null,unicodeBidi:null,unicodeRange:null,unitsPerEm:Dr,values:null,vAlphabetic:Dr,vMathematical:Dr,vectorEffect:null,vHanging:Dr,vIdeographic:Dr,version:null,vertAdvY:Dr,vertOriginX:Dr,vertOriginY:Dr,viewBox:null,viewTarget:null,visibility:null,width:null,widths:null,wordSpacing:null,writingMode:null,x:null,x1:null,x2:null,xChannelSelector:null,xHeight:Dr,y:null,y1:null,y2:null,yChannelSelector:null,z:null,zoomAndPan:null},space:"svg",transform:i4});var Yne=yf({properties:{xLinkActuate:null,xLinkArcRole:null,xLinkHref:null,xLinkRole:null,xLinkShow:null,xLinkTitle:null,xLinkType:null},space:"xlink",transform(e,t){return"xlink:"+t.slice(5).toLowerCase()}});var One=yf({attributes:{xmlnsxlink:"xmlns:xlink"},properties:{xmlnsXLink:null,xmlns:null},space:"xmlns",transform:a4});var Jne=yf({properties:{xmlBase:null,xmlLang:null,xmlSpace:null},space:"xml",transform(e,t){return"xml:"+t.slice(3).toLowerCase()}});var zne={classId:"classID",dataType:"datatype",itemId:"itemID",strokeDashArray:"strokeDasharray",strokeDashOffset:"strokeDashoffset",strokeLineCap:"strokeLinecap",strokeLineJoin:"strokeLinejoin",strokeMiterLimit:"strokeMiterlimit",typeOf:"typeof",xLinkActuate:"xlinkActuate",xLinkArcRole:"xlinkArcrole",xLinkHref:"xlinkHref",xLinkRole:"xlinkRole",xLinkShow:"xlinkShow",xLinkTitle:"xlinkTitle",xLinkType:"xlinkType",xmlnsXLink:"xmlnsXlink"};var oNt=/[A-Z]/g,c_e=/-[a-z]/g,iNt=/^data[-\w.:]+$/i;function Kne(e,t){let r=ET(t),n=t,o=Zl;if(r in e.normal)return e.property[e.normal[r]];if(r.length>4&&r.slice(0,4)==="data"&&iNt.test(t)){if(t.charAt(4)==="-"){let i=t.slice(5).replace(c_e,ANt);n="data"+i.charAt(0).toUpperCase()+i.slice(1)}else{let i=t.slice(4);if(!c_e.test(i)){let a=i.replace(oNt,aNt);a.charAt(0)!=="-"&&(a="-"+a),t="data"+a}}o=$x}return new o(n,t)}function aNt(e){return"-"+e.toLowerCase()}function ANt(e){return e.charAt(1).toUpperCase()}var l_e=Hne([_ne,A_e,Yne,One,Jne],"html"),A4=Hne([_ne,s_e,Yne,One,Jne],"svg");function u_e(e){return e.join(" ").trim()}var S_e=kt(Q_e(),1);var c4=E_e("end"),ew=E_e("start");function E_e(e){return t;function t(r){let n=r&&r.position&&r.position[e]||{};if(typeof n.line=="number"&&n.line>0&&typeof n.column=="number"&&n.column>0)return{line:n.line,column:n.column,offset:typeof n.offset=="number"&&n.offset>-1?n.offset:void 0}}}function Xne(e){let t=ew(e),r=c4(e);if(t&&r)return{start:t,end:r}}function ob(e){return!e||typeof e!="object"?"":"position"in e||"type"in e?b_e(e.position):"start"in e||"end"in e?b_e(e):"line"in e||"column"in e?Zne(e):""}function Zne(e){return x_e(e&&e.line)+":"+x_e(e&&e.column)}function b_e(e){return Zne(e&&e.start)+"-"+Zne(e&&e.end)}function x_e(e){return e&&typeof e=="number"?e:1}var Ac=class extends Error{constructor(t,r,n){super(),typeof r=="string"&&(n=r,r=void 0);let o="",i={},a=!1;if(r&&("line"in r&&"column"in r?i={place:r}:"start"in r&&"end"in r?i={place:r}:"type"in r?i={ancestors:[r],place:r.position}:i={...r}),typeof t=="string"?o=t:!i.cause&&t&&(a=!0,o=t.message,i.cause=t),!i.ruleId&&!i.source&&typeof n=="string"){let s=n.indexOf(":");s===-1?i.ruleId=n:(i.source=n.slice(0,s),i.ruleId=n.slice(s+1))}if(!i.place&&i.ancestors&&i.ancestors){let s=i.ancestors[i.ancestors.length-1];s&&(i.place=s.position)}let A=i.place&&"start"in i.place?i.place.start:i.place;this.ancestors=i.ancestors||void 0,this.cause=i.cause||void 0,this.column=A?A.column:void 0,this.fatal=void 0,this.file="",this.message=o,this.line=A?A.line:void 0,this.name=ob(i.place)||"1:1",this.place=i.place||void 0,this.reason=this.message,this.ruleId=i.ruleId||void 0,this.source=i.source||void 0,this.stack=a&&i.cause&&typeof i.cause.stack=="string"?i.cause.stack:"",this.actual=void 0,this.expected=void 0,this.note=void 0,this.url=void 0}};Ac.prototype.file="";Ac.prototype.name="";Ac.prototype.reason="";Ac.prototype.message="";Ac.prototype.stack="";Ac.prototype.column=void 0;Ac.prototype.line=void 0;Ac.prototype.ancestors=void 0;Ac.prototype.cause=void 0;Ac.prototype.fatal=void 0;Ac.prototype.place=void 0;Ac.prototype.ruleId=void 0;Ac.prototype.source=void 0;var qne={}.hasOwnProperty,LNt=new Map,TNt=/[A-Z]/g,PNt=new Set(["table","tbody","thead","tfoot","tr"]),GNt=new Set(["td","th"]),D_e="https://github.com/syntax-tree/hast-util-to-jsx-runtime";function $ne(e,t){if(!t||t.Fragment===void 0)throw new TypeError("Expected `Fragment` in options");let r=t.filePath||void 0,n;if(t.development){if(typeof t.jsxDEV!="function")throw new TypeError("Expected `jsxDEV` in options when `development: true`");n=ONt(r,t.jsxDEV)}else{if(typeof t.jsx!="function")throw new TypeError("Expected `jsx` in production options");if(typeof t.jsxs!="function")throw new TypeError("Expected `jsxs` in production options");n=YNt(r,t.jsx,t.jsxs)}let o={Fragment:t.Fragment,ancestors:[],components:t.components||{},create:n,elementAttributeNameCase:t.elementAttributeNameCase||"react",evaluater:t.createEvaluater?t.createEvaluater():void 0,filePath:r,ignoreInvalidStyle:t.ignoreInvalidStyle||!1,passKeys:t.passKeys!==!1,passNode:t.passNode||!1,schema:t.space==="svg"?A4:l_e,stylePropertyNameCase:t.stylePropertyNameCase||"dom",tableCellAlignToStyle:t.tableCellAlignToStyle!==!1},i=v_e(o,e,void 0);return i&&typeof i!="string"?i:o.create(e,o.Fragment,{children:i||void 0},void 0)}function v_e(e,t,r){if(t.type==="element")return NNt(e,t,r);if(t.type==="mdxFlowExpression"||t.type==="mdxTextExpression")return MNt(e,t);if(t.type==="mdxJsxFlowElement"||t.type==="mdxJsxTextElement")return HNt(e,t,r);if(t.type==="mdxjsEsm")return kNt(e,t);if(t.type==="root")return VNt(e,t,r);if(t.type==="text")return _Nt(e,t)}function NNt(e,t,r){let n=e.schema,o=n;t.tagName.toLowerCase()==="svg"&&n.space==="html"&&(o=A4,e.schema=o),e.ancestors.push(t);let i=w_e(e,t.tagName,!1),a=JNt(e,t),A=toe(e,t);return PNt.has(t.tagName)&&(A=A.filter(function(s){return typeof s=="string"?!kne(s):!0})),F_e(e,a,i,t),eoe(a,A),e.ancestors.pop(),e.schema=n,e.create(t,i,a,r)}function MNt(e,t){if(t.data&&t.data.estree&&e.evaluater){let n=t.data.estree.body[0];return n.type,e.evaluater.evaluateExpression(n.expression)}ST(e,t.position)}function kNt(e,t){if(t.data&&t.data.estree&&e.evaluater)return e.evaluater.evaluateProgram(t.data.estree);ST(e,t.position)}function HNt(e,t,r){let n=e.schema,o=n;t.name==="svg"&&n.space==="html"&&(o=A4,e.schema=o),e.ancestors.push(t);let i=t.name===null?e.Fragment:w_e(e,t.name,!0),a=zNt(e,t),A=toe(e,t);return F_e(e,a,i,t),eoe(a,A),e.ancestors.pop(),e.schema=n,e.create(t,i,a,r)}function VNt(e,t,r){let n={};return eoe(n,toe(e,t)),e.create(t,e.Fragment,n,r)}function _Nt(e,t){return t.value}function F_e(e,t,r,n){typeof r!="string"&&r!==e.Fragment&&e.passNode&&(t.node=n)}function eoe(e,t){if(t.length>0){let r=t.length>1?t:t[0];r&&(e.children=r)}}function YNt(e,t,r){return n;function n(o,i,a,A){let c=Array.isArray(a.children)?r:t;return A?c(i,a,A):c(i,a)}}function ONt(e,t){return r;function r(n,o,i,a){let A=Array.isArray(i.children),s=ew(n);return t(o,i,a,A,{columnNumber:s?s.column-1:void 0,fileName:e,lineNumber:s?s.line:void 0},void 0)}}function JNt(e,t){let r={},n,o;for(o in t.properties)if(o!=="children"&&qne.call(t.properties,o)){let i=KNt(e,o,t.properties[o]);if(i){let[a,A]=i;e.tableCellAlignToStyle&&a==="align"&&typeof A=="string"&&GNt.has(t.tagName)?n=A:r[a]=A}}if(n){let i=r.style||(r.style={});i[e.stylePropertyNameCase==="css"?"text-align":"textAlign"]=n}return r}function zNt(e,t){let r={};for(let n of t.attributes)if(n.type==="mdxJsxExpressionAttribute")if(n.data&&n.data.estree&&e.evaluater){let i=n.data.estree.body[0];i.type;let a=i.expression;a.type;let A=a.properties[0];A.type,Object.assign(r,e.evaluater.evaluateExpression(A.argument))}else ST(e,t.position);else{let o=n.name,i;if(n.value&&typeof n.value=="object")if(n.value.data&&n.value.data.estree&&e.evaluater){let A=n.value.data.estree.body[0];A.type,i=e.evaluater.evaluateExpression(A.expression)}else ST(e,t.position);else i=n.value===null?!0:n.value;r[o]=i}return r}function toe(e,t){let r=[],n=-1,o=e.passKeys?new Map:LNt;for(;++n<t.children.length;){let i=t.children[n],a;if(e.passKeys){let s=i.type==="element"?i.tagName:i.type==="mdxJsxFlowElement"||i.type==="mdxJsxTextElement"?i.name:void 0;if(s){let c=o.get(s)||0;a=s+"-"+c,o.set(s,c+1)}}let A=v_e(e,i,a);A!==void 0&&r.push(A)}return r}function KNt(e,t,r){let n=Kne(e.schema,t);if(!(r==null||typeof r=="number"&&Number.isNaN(r))){if(Array.isArray(r)&&(r=n.commaSeparated?o_e(r):u_e(r)),n.property==="style"){let o=typeof r=="object"?r:jNt(e,String(r));return e.stylePropertyNameCase==="css"&&(o=WNt(o)),["style",o]}return[e.elementAttributeNameCase==="react"&&n.space?zne[n.property]||n.property:n.attribute,r]}}function jNt(e,t){try{return(0,S_e.default)(t,{reactCompat:!0})}catch(r){if(e.ignoreInvalidStyle)return{};let n=r,o=new Ac("Cannot parse `style` attribute",{ancestors:e.ancestors,cause:n,ruleId:"style",source:"hast-util-to-jsx-runtime"});throw o.file=e.filePath||void 0,o.url=D_e+"#cannot-parse-style-attribute",o}}function w_e(e,t,r){let n;if(!r)n={type:"Literal",value:t};else if(t.includes(".")){let o=t.split("."),i=-1,a;for(;++i<o.length;){let A=n4(o[i])?{type:"Identifier",name:o[i]}:{type:"Literal",value:o[i]};a=a?{type:"MemberExpression",object:a,property:A,computed:!!(i&&A.type==="Literal"),optional:!1}:A}n=a}else n=n4(t)&&!/^[a-z]/.test(t)?{type:"Identifier",name:t}:{type:"Literal",value:t};if(n.type==="Literal"){let o=n.value;return qne.call(e.components,o)?e.components[o]:o}if(e.evaluater)return e.evaluater.evaluateExpression(n);ST(e)}function ST(e,t){let r=new Ac("Cannot handle MDX estrees without `createEvaluater`",{ancestors:e.ancestors,place:t,ruleId:"mdx-estree",source:"hast-util-to-jsx-runtime"});throw r.file=e.filePath||void 0,r.url=D_e+"#cannot-handle-mdx-estrees-without-createevaluater",r}function WNt(e){let t={},r;for(r in e)qne.call(e,r)&&(t[XNt(r)]=e[r]);return t}function XNt(e){let t=e.replace(TNt,ZNt);return t.slice(0,3)==="ms-"&&(t="-"+t),t}function ZNt(e){return"-"+e.toLowerCase()}var DT={action:["form"],cite:["blockquote","del","ins","q"],data:["object"],formAction:["button","input"],href:["a","area","base","link"],icon:["menuitem"],itemId:null,manifest:["html"],ping:["a","area"],poster:["video"],src:["audio","embed","iframe","img","input","script","source","track","video"]};var ow=kt(Qr(),1),nOe=kt(Qa(),1);var qNt={};function tS(e,t){let r=t||qNt,n=typeof r.includeImageAlt=="boolean"?r.includeImageAlt:!0,o=typeof r.includeHtml=="boolean"?r.includeHtml:!0;return U_e(e,n,o)}function U_e(e,t,r){if($Nt(e)){if("value"in e)return e.type==="html"&&!r?"":e.value;if(t&&"alt"in e&&e.alt)return e.alt;if("children"in e)return R_e(e.children,t,r)}return Array.isArray(e)?R_e(e,t,r):""}function R_e(e,t,r){let n=[],o=-1;for(;++o<e.length;)n[o]=U_e(e[o],t,r);return n.join("")}function $Nt(e){return!!(e&&typeof e=="object")}var L_e=document.createElement("i");function tw(e){let t="&"+e+";";L_e.innerHTML=t;let r=L_e.textContent;return r.charCodeAt(r.length-1)===59&&e!=="semi"||r===t?!1:r}function sc(e,t,r,n){let o=e.length,i=0,a;if(t<0?t=-t>o?0:o+t:t=t>o?o:t,r=r>0?r:0,n.length<1e4)a=Array.from(n),a.unshift(t,r),e.splice(...a);else for(r&&e.splice(t,r);i<n.length;)a=n.slice(i,i+1e4),a.unshift(t,0),e.splice(...a),i+=1e4,t+=1e4}function jg(e,t){return e.length>0?(sc(e,e.length,0,t),e):t}var T_e={}.hasOwnProperty;function l4(e){let t={},r=-1;for(;++r<e.length;)eMt(t,e[r]);return t}function eMt(e,t){let r;for(r in t){let o=(T_e.call(e,r)?e[r]:void 0)||(e[r]={}),i=t[r],a;if(i)for(a in i){T_e.call(o,a)||(o[a]=[]);let A=i[a];tMt(o[a],Array.isArray(A)?A:A?[A]:[])}}}function tMt(e,t){let r=-1,n=[];for(;++r<t.length;)(t[r].add==="after"?e:n).push(t[r]);sc(e,0,0,n)}function u4(e,t){let r=Number.parseInt(e,t);return r<9||r===11||r>13&&r<32||r>126&&r<160||r>55295&&r<57344||r>64975&&r<65008||(r&65535)===65535||(r&65535)===65534||r>1114111?"\uFFFD":String.fromCodePoint(r)}function cg(e){return e.replace(/[\t\n\r ]+/g," ").replace(/^ | $/g,"").toLowerCase().toUpperCase()}var ol=ib(/[A-Za-z]/),Os=ib(/[\dA-Za-z]/),P_e=ib(/[#-'*+\--9=?A-Z^-~]/);function rS(e){return e!==null&&(e<32||e===127)}var vT=ib(/\d/),G_e=ib(/[\dA-Fa-f]/),N_e=ib(/[!-/:-@[-`{-~]/);function an(e){return e!==null&&e<-2}function pi(e){return e!==null&&(e<0||e===32)}function qn(e){return e===-2||e===-1||e===32}var nS=ib(/\p{P}|\p{S}/u),UC=ib(/\s/);function ib(e){return t;function t(r){return r!==null&&r>-1&&e.test(String.fromCharCode(r))}}function Qf(e){let t=[],r=-1,n=0,o=0;for(;++r<e.length;){let i=e.charCodeAt(r),a="";if(i===37&&Os(e.charCodeAt(r+1))&&Os(e.charCodeAt(r+2)))o=2;else if(i<128)/[!#$&-;=?-Z_a-z~]/.test(String.fromCharCode(i))||(a=String.fromCharCode(i));else if(i>55295&&i<57344){let A=e.charCodeAt(r+1);i<56320&&A>56319&&A<57344?(a=String.fromCharCode(i,A),o=1):a="\uFFFD"}else a=String.fromCharCode(i);a&&(t.push(e.slice(n,r),encodeURIComponent(a)),n=r+o+1,a=""),o&&(r+=o,o=0)}return t.join("")+e.slice(n)}function Yn(e,t,r,n){let o=n?n-1:Number.POSITIVE_INFINITY,i=0;return a;function a(s){return qn(s)?(e.enter(r),A(s)):t(s)}function A(s){return qn(s)&&i++<o?(e.consume(s),A):(e.exit(r),t(s))}}var M_e={tokenize:rMt};function rMt(e){let t=e.attempt(this.parser.constructs.contentInitial,n,o),r;return t;function n(A){if(A===null){e.consume(A);return}return e.enter("lineEnding"),e.consume(A),e.exit("lineEnding"),Yn(e,t,"linePrefix")}function o(A){return e.enter("paragraph"),i(A)}function i(A){let s=e.enter("chunkText",{contentType:"text",previous:r});return r&&(r.next=s),r=s,a(A)}function a(A){if(A===null){e.exit("chunkText"),e.exit("paragraph"),e.consume(A);return}return an(A)?(e.consume(A),e.exit("chunkText"),i):(e.consume(A),a)}}var H_e={tokenize:nMt},k_e={tokenize:oMt};function nMt(e){let t=this,r=[],n=0,o,i,a;return A;function A(y){if(n<r.length){let Q=r[n];return t.containerState=Q[1],e.attempt(Q[0].continuation,s,c)(y)}return c(y)}function s(y){if(n++,t.containerState._closeFlow){t.containerState._closeFlow=void 0,o&&C();let Q=t.events.length,E=Q,b;for(;E--;)if(t.events[E][0]==="exit"&&t.events[E][1].type==="chunkFlow"){b=t.events[E][1].end;break}I(n);let x=Q;for(;x<t.events.length;)t.events[x][1].end={...b},x++;return sc(t.events,E+1,0,t.events.slice(Q)),t.events.length=x,c(y)}return A(y)}function c(y){if(n===r.length){if(!o)return g(y);if(o.currentConstruct&&o.currentConstruct.concrete)return p(y);t.interrupt=!!(o.currentConstruct&&!o._gfmTableDynamicInterruptHack)}return t.containerState={},e.check(k_e,l,u)(y)}function l(y){return o&&C(),I(n),g(y)}function u(y){return t.parser.lazy[t.now().line]=n!==r.length,a=t.now().offset,p(y)}function g(y){return t.containerState={},e.attempt(k_e,m,p)(y)}function m(y){return n++,r.push([t.currentConstruct,t.containerState]),g(y)}function p(y){if(y===null){o&&C(),I(0),e.consume(y);return}return o=o||t.parser.flow(t.now()),e.enter("chunkFlow",{_tokenizer:o,contentType:"flow",previous:i}),d(y)}function d(y){if(y===null){f(e.exit("chunkFlow"),!0),I(0),e.consume(y);return}return an(y)?(e.consume(y),f(e.exit("chunkFlow")),n=0,t.interrupt=void 0,A):(e.consume(y),d)}function f(y,Q){let E=t.sliceStream(y);if(Q&&E.push(null),y.previous=i,i&&(i.next=y),i=y,o.defineSkip(y.start),o.write(E),t.parser.lazy[y.start.line]){let b=o.events.length;for(;b--;)if(o.events[b][1].start.offset<a&&(!o.events[b][1].end||o.events[b][1].end.offset>a))return;let x=t.events.length,S=x,w,R;for(;S--;)if(t.events[S][0]==="exit"&&t.events[S][1].type==="chunkFlow"){if(w){R=t.events[S][1].end;break}w=!0}for(I(n),b=x;b<t.events.length;)t.events[b][1].end={...R},b++;sc(t.events,S+1,0,t.events.slice(x)),t.events.length=b}}function I(y){let Q=r.length;for(;Q-- >y;){let E=r[Q];t.containerState=E[1],E[0].exit.call(t,e)}r.length=y}function C(){o.write([null]),i=void 0,o=void 0,t.containerState._closeFlow=void 0}}function oMt(e,t,r){return Yn(e,e.attempt(this.parser.constructs.document,t,r),"linePrefix",this.parser.constructs.disable.null.includes("codeIndented")?void 0:4)}function By(e){if(e===null||pi(e)||UC(e))return 1;if(nS(e))return 2}function ab(e,t,r){let n=[],o=-1;for(;++o<e.length;){let i=e[o].resolveAll;i&&!n.includes(i)&&(t=i(t,r),n.push(i))}return t}var FT={name:"attention",resolveAll:iMt,tokenize:aMt};function iMt(e,t){let r=-1,n,o,i,a,A,s,c,l;for(;++r<e.length;)if(e[r][0]==="enter"&&e[r][1].type==="attentionSequence"&&e[r][1]._close){for(n=r;n--;)if(e[n][0]==="exit"&&e[n][1].type==="attentionSequence"&&e[n][1]._open&&t.sliceSerialize(e[n][1]).charCodeAt(0)===t.sliceSerialize(e[r][1]).charCodeAt(0)){if((e[n][1]._close||e[r][1]._open)&&(e[r][1].end.offset-e[r][1].start.offset)%3&&!((e[n][1].end.offset-e[n][1].start.offset+e[r][1].end.offset-e[r][1].start.offset)%3))continue;s=e[n][1].end.offset-e[n][1].start.offset>1&&e[r][1].end.offset-e[r][1].start.offset>1?2:1;let u={...e[n][1].end},g={...e[r][1].start};V_e(u,-s),V_e(g,s),a={type:s>1?"strongSequence":"emphasisSequence",start:u,end:{...e[n][1].end}},A={type:s>1?"strongSequence":"emphasisSequence",start:{...e[r][1].start},end:g},i={type:s>1?"strongText":"emphasisText",start:{...e[n][1].end},end:{...e[r][1].start}},o={type:s>1?"strong":"emphasis",start:{...a.start},end:{...A.end}},e[n][1].end={...a.start},e[r][1].start={...A.end},c=[],e[n][1].end.offset-e[n][1].start.offset&&(c=jg(c,[["enter",e[n][1],t],["exit",e[n][1],t]])),c=jg(c,[["enter",o,t],["enter",a,t],["exit",a,t],["enter",i,t]]),c=jg(c,ab(t.parser.constructs.insideSpan.null,e.slice(n+1,r),t)),c=jg(c,[["exit",i,t],["enter",A,t],["exit",A,t],["exit",o,t]]),e[r][1].end.offset-e[r][1].start.offset?(l=2,c=jg(c,[["enter",e[r][1],t],["exit",e[r][1],t]])):l=0,sc(e,n-1,r-n+3,c),r=n+c.length-l-2;break}}for(r=-1;++r<e.length;)e[r][1].type==="attentionSequence"&&(e[r][1].type="data");return e}function aMt(e,t){let r=this.parser.constructs.attentionMarkers.null,n=this.previous,o=By(n),i;return a;function a(s){return i=s,e.enter("attentionSequence"),A(s)}function A(s){if(s===i)return e.consume(s),A;let c=e.exit("attentionSequence"),l=By(s),u=!l||l===2&&o||r.includes(s),g=!o||o===2&&l||r.includes(n);return c._open=!!(i===42?u:u&&(o||!g)),c._close=!!(i===42?g:g&&(l||!u)),t(s)}}function V_e(e,t){e.column+=t,e.offset+=t,e._bufferIndex+=t}var roe={name:"autolink",tokenize:AMt};function AMt(e,t,r){let n=0;return o;function o(m){return e.enter("autolink"),e.enter("autolinkMarker"),e.consume(m),e.exit("autolinkMarker"),e.enter("autolinkProtocol"),i}function i(m){return ol(m)?(e.consume(m),a):m===64?r(m):c(m)}function a(m){return m===43||m===45||m===46||Os(m)?(n=1,A(m)):c(m)}function A(m){return m===58?(e.consume(m),n=0,s):(m===43||m===45||m===46||Os(m))&&n++<32?(e.consume(m),A):(n=0,c(m))}function s(m){return m===62?(e.exit("autolinkProtocol"),e.enter("autolinkMarker"),e.consume(m),e.exit("autolinkMarker"),e.exit("autolink"),t):m===null||m===32||m===60||rS(m)?r(m):(e.consume(m),s)}function c(m){return m===64?(e.consume(m),l):P_e(m)?(e.consume(m),c):r(m)}function l(m){return Os(m)?u(m):r(m)}function u(m){return m===46?(e.consume(m),n=0,l):m===62?(e.exit("autolinkProtocol").type="autolinkEmail",e.enter("autolinkMarker"),e.consume(m),e.exit("autolinkMarker"),e.exit("autolink"),t):g(m)}function g(m){if((m===45||Os(m))&&n++<63){let p=m===45?g:u;return e.consume(m),p}return r(m)}}var LC={partial:!0,tokenize:sMt};function sMt(e,t,r){return n;function n(i){return qn(i)?Yn(e,o,"linePrefix")(i):o(i)}function o(i){return i===null||an(i)?t(i):r(i)}}var g4={continuation:{tokenize:lMt},exit:uMt,name:"blockQuote",tokenize:cMt};function cMt(e,t,r){let n=this;return o;function o(a){if(a===62){let A=n.containerState;return A.open||(e.enter("blockQuote",{_container:!0}),A.open=!0),e.enter("blockQuotePrefix"),e.enter("blockQuoteMarker"),e.consume(a),e.exit("blockQuoteMarker"),i}return r(a)}function i(a){return qn(a)?(e.enter("blockQuotePrefixWhitespace"),e.consume(a),e.exit("blockQuotePrefixWhitespace"),e.exit("blockQuotePrefix"),t):(e.exit("blockQuotePrefix"),t(a))}}function lMt(e,t,r){let n=this;return o;function o(a){return qn(a)?Yn(e,i,"linePrefix",n.parser.constructs.disable.null.includes("codeIndented")?void 0:4)(a):i(a)}function i(a){return e.attempt(g4,t,r)(a)}}function uMt(e){e.exit("blockQuote")}var m4={name:"characterEscape",tokenize:gMt};function gMt(e,t,r){return n;function n(i){return e.enter("characterEscape"),e.enter("escapeMarker"),e.consume(i),e.exit("escapeMarker"),o}function o(i){return N_e(i)?(e.enter("characterEscapeValue"),e.consume(i),e.exit("characterEscapeValue"),e.exit("characterEscape"),t):r(i)}}var d4={name:"characterReference",tokenize:mMt};function mMt(e,t,r){let n=this,o=0,i,a;return A;function A(u){return e.enter("characterReference"),e.enter("characterReferenceMarker"),e.consume(u),e.exit("characterReferenceMarker"),s}function s(u){return u===35?(e.enter("characterReferenceMarkerNumeric"),e.consume(u),e.exit("characterReferenceMarkerNumeric"),c):(e.enter("characterReferenceValue"),i=31,a=Os,l(u))}function c(u){return u===88||u===120?(e.enter("characterReferenceMarkerHexadecimal"),e.consume(u),e.exit("characterReferenceMarkerHexadecimal"),e.enter("characterReferenceValue"),i=6,a=G_e,l):(e.enter("characterReferenceValue"),i=7,a=vT,l(u))}function l(u){if(u===59&&o){let g=e.exit("characterReferenceValue");return a===Os&&!tw(n.sliceSerialize(g))?r(u):(e.enter("characterReferenceMarker"),e.consume(u),e.exit("characterReferenceMarker"),e.exit("characterReference"),t)}return a(u)&&o++<i?(e.consume(u),l):r(u)}}var __e={partial:!0,tokenize:pMt},p4={concrete:!0,name:"codeFenced",tokenize:dMt};function dMt(e,t,r){let n=this,o={partial:!0,tokenize:E},i=0,a=0,A;return s;function s(b){return c(b)}function c(b){let x=n.events[n.events.length-1];return i=x&&x[1].type==="linePrefix"?x[2].sliceSerialize(x[1],!0).length:0,A=b,e.enter("codeFenced"),e.enter("codeFencedFence"),e.enter("codeFencedFenceSequence"),l(b)}function l(b){return b===A?(a++,e.consume(b),l):a<3?r(b):(e.exit("codeFencedFenceSequence"),qn(b)?Yn(e,u,"whitespace")(b):u(b))}function u(b){return b===null||an(b)?(e.exit("codeFencedFence"),n.interrupt?t(b):e.check(__e,d,Q)(b)):(e.enter("codeFencedFenceInfo"),e.enter("chunkString",{contentType:"string"}),g(b))}function g(b){return b===null||an(b)?(e.exit("chunkString"),e.exit("codeFencedFenceInfo"),u(b)):qn(b)?(e.exit("chunkString"),e.exit("codeFencedFenceInfo"),Yn(e,m,"whitespace")(b)):b===96&&b===A?r(b):(e.consume(b),g)}function m(b){return b===null||an(b)?u(b):(e.enter("codeFencedFenceMeta"),e.enter("chunkString",{contentType:"string"}),p(b))}function p(b){return b===null||an(b)?(e.exit("chunkString"),e.exit("codeFencedFenceMeta"),u(b)):b===96&&b===A?r(b):(e.consume(b),p)}function d(b){return e.attempt(o,Q,f)(b)}function f(b){return e.enter("lineEnding"),e.consume(b),e.exit("lineEnding"),I}function I(b){return i>0&&qn(b)?Yn(e,C,"linePrefix",i+1)(b):C(b)}function C(b){return b===null||an(b)?e.check(__e,d,Q)(b):(e.enter("codeFlowValue"),y(b))}function y(b){return b===null||an(b)?(e.exit("codeFlowValue"),C(b)):(e.consume(b),y)}function Q(b){return e.exit("codeFenced"),t(b)}function E(b,x,S){let w=0;return R;function R(U){return b.enter("lineEnding"),b.consume(U),b.exit("lineEnding"),T}function T(U){return b.enter("codeFencedFence"),qn(U)?Yn(b,L,"linePrefix",n.parser.constructs.disable.null.includes("codeIndented")?void 0:4)(U):L(U)}function L(U){return U===A?(b.enter("codeFencedFenceSequence"),F(U)):S(U)}function F(U){return U===A?(w++,b.consume(U),F):w>=a?(b.exit("codeFencedFenceSequence"),qn(U)?Yn(b,v,"whitespace")(U):v(U)):S(U)}function v(U){return U===null||an(U)?(b.exit("codeFencedFence"),x(U)):S(U)}}}function pMt(e,t,r){let n=this;return o;function o(a){return a===null?r(a):(e.enter("lineEnding"),e.consume(a),e.exit("lineEnding"),i)}function i(a){return n.parser.lazy[n.now().line]?r(a):t(a)}}var wT={name:"codeIndented",tokenize:BMt},fMt={partial:!0,tokenize:IMt};function BMt(e,t,r){let n=this;return o;function o(c){return e.enter("codeIndented"),Yn(e,i,"linePrefix",5)(c)}function i(c){let l=n.events[n.events.length-1];return l&&l[1].type==="linePrefix"&&l[2].sliceSerialize(l[1],!0).length>=4?a(c):r(c)}function a(c){return c===null?s(c):an(c)?e.attempt(fMt,a,s)(c):(e.enter("codeFlowValue"),A(c))}function A(c){return c===null||an(c)?(e.exit("codeFlowValue"),a(c)):(e.consume(c),A)}function s(c){return e.exit("codeIndented"),t(c)}}function IMt(e,t,r){let n=this;return o;function o(a){return n.parser.lazy[n.now().line]?r(a):an(a)?(e.enter("lineEnding"),e.consume(a),e.exit("lineEnding"),o):Yn(e,i,"linePrefix",5)(a)}function i(a){let A=n.events[n.events.length-1];return A&&A[1].type==="linePrefix"&&A[2].sliceSerialize(A[1],!0).length>=4?t(a):an(a)?o(a):r(a)}}var noe={name:"codeText",previous:hMt,resolve:CMt,tokenize:yMt};function CMt(e){let t=e.length-4,r=3,n,o;if((e[r][1].type==="lineEnding"||e[r][1].type==="space")&&(e[t][1].type==="lineEnding"||e[t][1].type==="space")){for(n=r;++n<t;)if(e[n][1].type==="codeTextData"){e[r][1].type="codeTextPadding",e[t][1].type="codeTextPadding",r+=2,t-=2;break}}for(n=r-1,t++;++n<=t;)o===void 0?n!==t&&e[n][1].type!=="lineEnding"&&(o=n):(n===t||e[n][1].type==="lineEnding")&&(e[o][1].type="codeTextData",n!==o+2&&(e[o][1].end=e[n-1][1].end,e.splice(o+2,n-o-2),t-=n-o-2,n=o+2),o=void 0);return e}function hMt(e){return e!==96||this.events[this.events.length-1][1].type==="characterEscape"}function yMt(e,t,r){let n=this,o=0,i,a;return A;function A(g){return e.enter("codeText"),e.enter("codeTextSequence"),s(g)}function s(g){return g===96?(e.consume(g),o++,s):(e.exit("codeTextSequence"),c(g))}function c(g){return g===null?r(g):g===32?(e.enter("space"),e.consume(g),e.exit("space"),c):g===96?(a=e.enter("codeTextSequence"),i=0,u(g)):an(g)?(e.enter("lineEnding"),e.consume(g),e.exit("lineEnding"),c):(e.enter("codeTextData"),l(g))}function l(g){return g===null||g===32||g===96||an(g)?(e.exit("codeTextData"),c(g)):(e.consume(g),l)}function u(g){return g===96?(e.consume(g),i++,u):i===o?(e.exit("codeTextSequence"),e.exit("codeText"),t(g)):(a.type="codeTextData",l(g))}}var f4=class{constructor(t){this.left=t?[...t]:[],this.right=[]}get(t){if(t<0||t>=this.left.length+this.right.length)throw new RangeError("Cannot access index `"+t+"` in a splice buffer of size `"+(this.left.length+this.right.length)+"`");return t<this.left.length?this.left[t]:this.right[this.right.length-t+this.left.length-1]}get length(){return this.left.length+this.right.length}shift(){return this.setCursor(0),this.right.pop()}slice(t,r){let n=r??Number.POSITIVE_INFINITY;return n<this.left.length?this.left.slice(t,n):t>this.left.length?this.right.slice(this.right.length-n+this.left.length,this.right.length-t+this.left.length).reverse():this.left.slice(t).concat(this.right.slice(this.right.length-n+this.left.length).reverse())}splice(t,r,n){let o=r||0;this.setCursor(Math.trunc(t));let i=this.right.splice(this.right.length-o,Number.POSITIVE_INFINITY);return n&&RT(this.left,n),i.reverse()}pop(){return this.setCursor(Number.POSITIVE_INFINITY),this.left.pop()}push(t){this.setCursor(Number.POSITIVE_INFINITY),this.left.push(t)}pushMany(t){this.setCursor(Number.POSITIVE_INFINITY),RT(this.left,t)}unshift(t){this.setCursor(0),this.right.push(t)}unshiftMany(t){this.setCursor(0),RT(this.right,t.reverse())}setCursor(t){if(!(t===this.left.length||t>this.left.length&&this.right.length===0||t<0&&this.left.length===0))if(t<this.left.length){let r=this.left.splice(t,Number.POSITIVE_INFINITY);RT(this.right,r.reverse())}else{let r=this.right.splice(this.left.length+this.right.length-t,Number.POSITIVE_INFINITY);RT(this.left,r.reverse())}}};function RT(e,t){let r=0;if(t.length<1e4)e.push(...t);else for(;r<t.length;)e.push(...t.slice(r,r+1e4)),r+=1e4}function B4(e){let t={},r=-1,n,o,i,a,A,s,c,l=new f4(e);for(;++r<l.length;){for(;r in t;)r=t[r];if(n=l.get(r),r&&n[1].type==="chunkFlow"&&l.get(r-1)[1].type==="listItemPrefix"&&(s=n[1]._tokenizer.events,i=0,i<s.length&&s[i][1].type==="lineEndingBlank"&&(i+=2),i<s.length&&s[i][1].type==="content"))for(;++i<s.length&&s[i][1].type!=="content";)s[i][1].type==="chunkText"&&(s[i][1]._isInFirstContentOfListItem=!0,i++);if(n[0]==="enter")n[1].contentType&&(Object.assign(t,QMt(l,r)),r=t[r],c=!0);else if(n[1]._container){for(i=r,o=void 0;i--;)if(a=l.get(i),a[1].type==="lineEnding"||a[1].type==="lineEndingBlank")a[0]==="enter"&&(o&&(l.get(o)[1].type="lineEndingBlank"),a[1].type="lineEnding",o=i);else if(!(a[1].type==="linePrefix"||a[1].type==="listItemIndent"))break;o&&(n[1].end={...l.get(o)[1].start},A=l.slice(o,r),A.unshift(n),l.splice(o,r-o+1,A))}}return sc(e,0,Number.POSITIVE_INFINITY,l.slice(0)),!c}function QMt(e,t){let r=e.get(t)[1],n=e.get(t)[2],o=t-1,i=[],a=r._tokenizer;a||(a=n.parser[r.contentType](r.start),r._contentTypeTextTrailing&&(a._contentTypeTextTrailing=!0));let A=a.events,s=[],c={},l,u,g=-1,m=r,p=0,d=0,f=[d];for(;m;){for(;e.get(++o)[1]!==m;);i.push(o),m._tokenizer||(l=n.sliceStream(m),m.next||l.push(null),u&&a.defineSkip(m.start),m._isInFirstContentOfListItem&&(a._gfmTasklistFirstContentOfListItem=!0),a.write(l),m._isInFirstContentOfListItem&&(a._gfmTasklistFirstContentOfListItem=void 0)),u=m,m=m.next}for(m=r;++g<A.length;)A[g][0]==="exit"&&A[g-1][0]==="enter"&&A[g][1].type===A[g-1][1].type&&A[g][1].start.line!==A[g][1].end.line&&(d=g+1,f.push(d),m._tokenizer=void 0,m.previous=void 0,m=m.next);for(a.events=[],m?(m._tokenizer=void 0,m.previous=void 0):f.pop(),g=f.length;g--;){let I=A.slice(f[g],f[g+1]),C=i.pop();s.push([C,C+I.length-1]),e.splice(C,2,I)}for(s.reverse(),g=-1;++g<s.length;)c[p+s[g][0]]=p+s[g][1],p+=s[g][1]-s[g][0]-1;return c}var ooe={resolve:bMt,tokenize:xMt},EMt={partial:!0,tokenize:SMt};function bMt(e){return B4(e),e}function xMt(e,t){let r;return n;function n(A){return e.enter("content"),r=e.enter("chunkContent",{contentType:"content"}),o(A)}function o(A){return A===null?i(A):an(A)?e.check(EMt,a,i)(A):(e.consume(A),o)}function i(A){return e.exit("chunkContent"),e.exit("content"),t(A)}function a(A){return e.consume(A),e.exit("chunkContent"),r.next=e.enter("chunkContent",{contentType:"content",previous:r}),r=r.next,o}}function SMt(e,t,r){let n=this;return o;function o(a){return e.exit("chunkContent"),e.enter("lineEnding"),e.consume(a),e.exit("lineEnding"),Yn(e,i,"linePrefix")}function i(a){if(a===null||an(a))return r(a);let A=n.events[n.events.length-1];return!n.parser.constructs.disable.null.includes("codeIndented")&&A&&A[1].type==="linePrefix"&&A[2].sliceSerialize(A[1],!0).length>=4?t(a):e.interrupt(n.parser.constructs.flow,r,t)(a)}}function I4(e,t,r,n,o,i,a,A,s){let c=s||Number.POSITIVE_INFINITY,l=0;return u;function u(I){return I===60?(e.enter(n),e.enter(o),e.enter(i),e.consume(I),e.exit(i),g):I===null||I===32||I===41||rS(I)?r(I):(e.enter(n),e.enter(a),e.enter(A),e.enter("chunkString",{contentType:"string"}),d(I))}function g(I){return I===62?(e.enter(i),e.consume(I),e.exit(i),e.exit(o),e.exit(n),t):(e.enter(A),e.enter("chunkString",{contentType:"string"}),m(I))}function m(I){return I===62?(e.exit("chunkString"),e.exit(A),g(I)):I===null||I===60||an(I)?r(I):(e.consume(I),I===92?p:m)}function p(I){return I===60||I===62||I===92?(e.consume(I),m):m(I)}function d(I){return!l&&(I===null||I===41||pi(I))?(e.exit("chunkString"),e.exit(A),e.exit(a),e.exit(n),t(I)):l<c&&I===40?(e.consume(I),l++,d):I===41?(e.consume(I),l--,d):I===null||I===32||I===40||rS(I)?r(I):(e.consume(I),I===92?f:d)}function f(I){return I===40||I===41||I===92?(e.consume(I),d):d(I)}}function C4(e,t,r,n,o,i){let a=this,A=0,s;return c;function c(m){return e.enter(n),e.enter(o),e.consume(m),e.exit(o),e.enter(i),l}function l(m){return A>999||m===null||m===91||m===93&&!s||m===94&&!A&&"_hiddenFootnoteSupport"in a.parser.constructs?r(m):m===93?(e.exit(i),e.enter(o),e.consume(m),e.exit(o),e.exit(n),t):an(m)?(e.enter("lineEnding"),e.consume(m),e.exit("lineEnding"),l):(e.enter("chunkString",{contentType:"string"}),u(m))}function u(m){return m===null||m===91||m===93||an(m)||A++>999?(e.exit("chunkString"),l(m)):(e.consume(m),s||(s=!qn(m)),m===92?g:u)}function g(m){return m===91||m===92||m===93?(e.consume(m),A++,u):u(m)}}function h4(e,t,r,n,o,i){let a;return A;function A(g){return g===34||g===39||g===40?(e.enter(n),e.enter(o),e.consume(g),e.exit(o),a=g===40?41:g,s):r(g)}function s(g){return g===a?(e.enter(o),e.consume(g),e.exit(o),e.exit(n),t):(e.enter(i),c(g))}function c(g){return g===a?(e.exit(i),s(a)):g===null?r(g):an(g)?(e.enter("lineEnding"),e.consume(g),e.exit("lineEnding"),Yn(e,c,"linePrefix")):(e.enter("chunkString",{contentType:"string"}),l(g))}function l(g){return g===a||g===null||an(g)?(e.exit("chunkString"),c(g)):(e.consume(g),g===92?u:l)}function u(g){return g===a||g===92?(e.consume(g),l):l(g)}}function oS(e,t){let r;return n;function n(o){return an(o)?(e.enter("lineEnding"),e.consume(o),e.exit("lineEnding"),r=!0,n):qn(o)?Yn(e,n,r?"linePrefix":"lineSuffix")(o):t(o)}}var ioe={name:"definition",tokenize:vMt},DMt={partial:!0,tokenize:FMt};function vMt(e,t,r){let n=this,o;return i;function i(m){return e.enter("definition"),a(m)}function a(m){return C4.call(n,e,A,r,"definitionLabel","definitionLabelMarker","definitionLabelString")(m)}function A(m){return o=cg(n.sliceSerialize(n.events[n.events.length-1][1]).slice(1,-1)),m===58?(e.enter("definitionMarker"),e.consume(m),e.exit("definitionMarker"),s):r(m)}function s(m){return pi(m)?oS(e,c)(m):c(m)}function c(m){return I4(e,l,r,"definitionDestination","definitionDestinationLiteral","definitionDestinationLiteralMarker","definitionDestinationRaw","definitionDestinationString")(m)}function l(m){return e.attempt(DMt,u,u)(m)}function u(m){return qn(m)?Yn(e,g,"whitespace")(m):g(m)}function g(m){return m===null||an(m)?(e.exit("definition"),n.parser.defined.push(o),t(m)):r(m)}}function FMt(e,t,r){return n;function n(A){return pi(A)?oS(e,o)(A):r(A)}function o(A){return h4(e,i,r,"definitionTitle","definitionTitleMarker","definitionTitleString")(A)}function i(A){return qn(A)?Yn(e,a,"whitespace")(A):a(A)}function a(A){return A===null||an(A)?t(A):r(A)}}var aoe={name:"hardBreakEscape",tokenize:wMt};function wMt(e,t,r){return n;function n(i){return e.enter("hardBreakEscape"),e.consume(i),o}function o(i){return an(i)?(e.exit("hardBreakEscape"),t(i)):r(i)}}var Aoe={name:"headingAtx",resolve:RMt,tokenize:UMt};function RMt(e,t){let r=e.length-2,n=3,o,i;return e[n][1].type==="whitespace"&&(n+=2),r-2>n&&e[r][1].type==="whitespace"&&(r-=2),e[r][1].type==="atxHeadingSequence"&&(n===r-1||r-4>n&&e[r-2][1].type==="whitespace")&&(r-=n+1===r?2:4),r>n&&(o={type:"atxHeadingText",start:e[n][1].start,end:e[r][1].end},i={type:"chunkText",start:e[n][1].start,end:e[r][1].end,contentType:"text"},sc(e,n,r-n+1,[["enter",o,t],["enter",i,t],["exit",i,t],["exit",o,t]])),e}function UMt(e,t,r){let n=0;return o;function o(l){return e.enter("atxHeading"),i(l)}function i(l){return e.enter("atxHeadingSequence"),a(l)}function a(l){return l===35&&n++<6?(e.consume(l),a):l===null||pi(l)?(e.exit("atxHeadingSequence"),A(l)):r(l)}function A(l){return l===35?(e.enter("atxHeadingSequence"),s(l)):l===null||an(l)?(e.exit("atxHeading"),t(l)):qn(l)?Yn(e,A,"whitespace")(l):(e.enter("atxHeadingText"),c(l))}function s(l){return l===35?(e.consume(l),s):(e.exit("atxHeadingSequence"),A(l))}function c(l){return l===null||l===35||pi(l)?(e.exit("atxHeadingText"),A(l)):(e.consume(l),c)}}var Y_e=["address","article","aside","base","basefont","blockquote","body","caption","center","col","colgroup","dd","details","dialog","dir","div","dl","dt","fieldset","figcaption","figure","footer","form","frame","frameset","h1","h2","h3","h4","h5","h6","head","header","hr","html","iframe","legend","li","link","main","menu","menuitem","nav","noframes","ol","optgroup","option","p","param","search","section","summary","table","tbody","td","tfoot","th","thead","title","tr","track","ul"],soe=["pre","script","style","textarea"];var coe={concrete:!0,name:"htmlFlow",resolveTo:PMt,tokenize:GMt},LMt={partial:!0,tokenize:MMt},TMt={partial:!0,tokenize:NMt};function PMt(e){let t=e.length;for(;t--&&!(e[t][0]==="enter"&&e[t][1].type==="htmlFlow"););return t>1&&e[t-2][1].type==="linePrefix"&&(e[t][1].start=e[t-2][1].start,e[t+1][1].start=e[t-2][1].start,e.splice(t-2,2)),e}function GMt(e,t,r){let n=this,o,i,a,A,s;return c;function c(M){return l(M)}function l(M){return e.enter("htmlFlow"),e.enter("htmlFlowData"),e.consume(M),u}function u(M){return M===33?(e.consume(M),g):M===47?(e.consume(M),i=!0,d):M===63?(e.consume(M),o=3,n.interrupt?t:H):ol(M)?(e.consume(M),a=String.fromCharCode(M),f):r(M)}function g(M){return M===45?(e.consume(M),o=2,m):M===91?(e.consume(M),o=5,A=0,p):ol(M)?(e.consume(M),o=4,n.interrupt?t:H):r(M)}function m(M){return M===45?(e.consume(M),n.interrupt?t:H):r(M)}function p(M){let q="CDATA[";return M===q.charCodeAt(A++)?(e.consume(M),A===q.length?n.interrupt?t:L:p):r(M)}function d(M){return ol(M)?(e.consume(M),a=String.fromCharCode(M),f):r(M)}function f(M){if(M===null||M===47||M===62||pi(M)){let q=M===47,ne=a.toLowerCase();return!q&&!i&&soe.includes(ne)?(o=1,n.interrupt?t(M):L(M)):Y_e.includes(a.toLowerCase())?(o=6,q?(e.consume(M),I):n.interrupt?t(M):L(M)):(o=7,n.interrupt&&!n.parser.lazy[n.now().line]?r(M):i?C(M):y(M))}return M===45||Os(M)?(e.consume(M),a+=String.fromCharCode(M),f):r(M)}function I(M){return M===62?(e.consume(M),n.interrupt?t:L):r(M)}function C(M){return qn(M)?(e.consume(M),C):R(M)}function y(M){return M===47?(e.consume(M),R):M===58||M===95||ol(M)?(e.consume(M),Q):qn(M)?(e.consume(M),y):R(M)}function Q(M){return M===45||M===46||M===58||M===95||Os(M)?(e.consume(M),Q):E(M)}function E(M){return M===61?(e.consume(M),b):qn(M)?(e.consume(M),E):y(M)}function b(M){return M===null||M===60||M===61||M===62||M===96?r(M):M===34||M===39?(e.consume(M),s=M,x):qn(M)?(e.consume(M),b):S(M)}function x(M){return M===s?(e.consume(M),s=null,w):M===null||an(M)?r(M):(e.consume(M),x)}function S(M){return M===null||M===34||M===39||M===47||M===60||M===61||M===62||M===96||pi(M)?E(M):(e.consume(M),S)}function w(M){return M===47||M===62||qn(M)?y(M):r(M)}function R(M){return M===62?(e.consume(M),T):r(M)}function T(M){return M===null||an(M)?L(M):qn(M)?(e.consume(M),T):r(M)}function L(M){return M===45&&o===2?(e.consume(M),G):M===60&&o===1?(e.consume(M),N):M===62&&o===4?(e.consume(M),z):M===63&&o===3?(e.consume(M),H):M===93&&o===5?(e.consume(M),J):an(M)&&(o===6||o===7)?(e.exit("htmlFlowData"),e.check(LMt,_,F)(M)):M===null||an(M)?(e.exit("htmlFlowData"),F(M)):(e.consume(M),L)}function F(M){return e.check(TMt,v,_)(M)}function v(M){return e.enter("lineEnding"),e.consume(M),e.exit("lineEnding"),U}function U(M){return M===null||an(M)?F(M):(e.enter("htmlFlowData"),L(M))}function G(M){return M===45?(e.consume(M),H):L(M)}function N(M){return M===47?(e.consume(M),a="",k):L(M)}function k(M){if(M===62){let q=a.toLowerCase();return soe.includes(q)?(e.consume(M),z):L(M)}return ol(M)&&a.length<8?(e.consume(M),a+=String.fromCharCode(M),k):L(M)}function J(M){return M===93?(e.consume(M),H):L(M)}function H(M){return M===62?(e.consume(M),z):M===45&&o===2?(e.consume(M),H):L(M)}function z(M){return M===null||an(M)?(e.exit("htmlFlowData"),_(M)):(e.consume(M),z)}function _(M){return e.exit("htmlFlow"),t(M)}}function NMt(e,t,r){let n=this;return o;function o(a){return an(a)?(e.enter("lineEnding"),e.consume(a),e.exit("lineEnding"),i):r(a)}function i(a){return n.parser.lazy[n.now().line]?r(a):t(a)}}function MMt(e,t,r){return n;function n(o){return e.enter("lineEnding"),e.consume(o),e.exit("lineEnding"),e.attempt(LC,t,r)}}var loe={name:"htmlText",tokenize:kMt};function kMt(e,t,r){let n=this,o,i,a;return A;function A(H){return e.enter("htmlText"),e.enter("htmlTextData"),e.consume(H),s}function s(H){return H===33?(e.consume(H),c):H===47?(e.consume(H),E):H===63?(e.consume(H),y):ol(H)?(e.consume(H),S):r(H)}function c(H){return H===45?(e.consume(H),l):H===91?(e.consume(H),i=0,p):ol(H)?(e.consume(H),C):r(H)}function l(H){return H===45?(e.consume(H),m):r(H)}function u(H){return H===null?r(H):H===45?(e.consume(H),g):an(H)?(a=u,N(H)):(e.consume(H),u)}function g(H){return H===45?(e.consume(H),m):u(H)}function m(H){return H===62?G(H):H===45?g(H):u(H)}function p(H){let z="CDATA[";return H===z.charCodeAt(i++)?(e.consume(H),i===z.length?d:p):r(H)}function d(H){return H===null?r(H):H===93?(e.consume(H),f):an(H)?(a=d,N(H)):(e.consume(H),d)}function f(H){return H===93?(e.consume(H),I):d(H)}function I(H){return H===62?G(H):H===93?(e.consume(H),I):d(H)}function C(H){return H===null||H===62?G(H):an(H)?(a=C,N(H)):(e.consume(H),C)}function y(H){return H===null?r(H):H===63?(e.consume(H),Q):an(H)?(a=y,N(H)):(e.consume(H),y)}function Q(H){return H===62?G(H):y(H)}function E(H){return ol(H)?(e.consume(H),b):r(H)}function b(H){return H===45||Os(H)?(e.consume(H),b):x(H)}function x(H){return an(H)?(a=x,N(H)):qn(H)?(e.consume(H),x):G(H)}function S(H){return H===45||Os(H)?(e.consume(H),S):H===47||H===62||pi(H)?w(H):r(H)}function w(H){return H===47?(e.consume(H),G):H===58||H===95||ol(H)?(e.consume(H),R):an(H)?(a=w,N(H)):qn(H)?(e.consume(H),w):G(H)}function R(H){return H===45||H===46||H===58||H===95||Os(H)?(e.consume(H),R):T(H)}function T(H){return H===61?(e.consume(H),L):an(H)?(a=T,N(H)):qn(H)?(e.consume(H),T):w(H)}function L(H){return H===null||H===60||H===61||H===62||H===96?r(H):H===34||H===39?(e.consume(H),o=H,F):an(H)?(a=L,N(H)):qn(H)?(e.consume(H),L):(e.consume(H),v)}function F(H){return H===o?(e.consume(H),o=void 0,U):H===null?r(H):an(H)?(a=F,N(H)):(e.consume(H),F)}function v(H){return H===null||H===34||H===39||H===60||H===61||H===96?r(H):H===47||H===62||pi(H)?w(H):(e.consume(H),v)}function U(H){return H===47||H===62||pi(H)?w(H):r(H)}function G(H){return H===62?(e.consume(H),e.exit("htmlTextData"),e.exit("htmlText"),t):r(H)}function N(H){return e.exit("htmlTextData"),e.enter("lineEnding"),e.consume(H),e.exit("lineEnding"),k}function k(H){return qn(H)?Yn(e,J,"linePrefix",n.parser.constructs.disable.null.includes("codeIndented")?void 0:4)(H):J(H)}function J(H){return e.enter("htmlTextData"),a(H)}}var iS={name:"labelEnd",resolveAll:YMt,resolveTo:OMt,tokenize:JMt},HMt={tokenize:zMt},VMt={tokenize:KMt},_Mt={tokenize:jMt};function YMt(e){let t=-1,r=[];for(;++t<e.length;){let n=e[t][1];if(r.push(e[t]),n.type==="labelImage"||n.type==="labelLink"||n.type==="labelEnd"){let o=n.type==="labelImage"?4:2;n.type="data",t+=o}}return e.length!==r.length&&sc(e,0,e.length,r),e}function OMt(e,t){let r=e.length,n=0,o,i,a,A;for(;r--;)if(o=e[r][1],i){if(o.type==="link"||o.type==="labelLink"&&o._inactive)break;e[r][0]==="enter"&&o.type==="labelLink"&&(o._inactive=!0)}else if(a){if(e[r][0]==="enter"&&(o.type==="labelImage"||o.type==="labelLink")&&!o._balanced&&(i=r,o.type!=="labelLink")){n=2;break}}else o.type==="labelEnd"&&(a=r);let s={type:e[i][1].type==="labelLink"?"link":"image",start:{...e[i][1].start},end:{...e[e.length-1][1].end}},c={type:"label",start:{...e[i][1].start},end:{...e[a][1].end}},l={type:"labelText",start:{...e[i+n+2][1].end},end:{...e[a-2][1].start}};return A=[["enter",s,t],["enter",c,t]],A=jg(A,e.slice(i+1,i+n+3)),A=jg(A,[["enter",l,t]]),A=jg(A,ab(t.parser.constructs.insideSpan.null,e.slice(i+n+4,a-3),t)),A=jg(A,[["exit",l,t],e[a-2],e[a-1],["exit",c,t]]),A=jg(A,e.slice(a+1)),A=jg(A,[["exit",s,t]]),sc(e,i,e.length,A),e}function JMt(e,t,r){let n=this,o=n.events.length,i,a;for(;o--;)if((n.events[o][1].type==="labelImage"||n.events[o][1].type==="labelLink")&&!n.events[o][1]._balanced){i=n.events[o][1];break}return A;function A(g){return i?i._inactive?u(g):(a=n.parser.defined.includes(cg(n.sliceSerialize({start:i.end,end:n.now()}))),e.enter("labelEnd"),e.enter("labelMarker"),e.consume(g),e.exit("labelMarker"),e.exit("labelEnd"),s):r(g)}function s(g){return g===40?e.attempt(HMt,l,a?l:u)(g):g===91?e.attempt(VMt,l,a?c:u)(g):a?l(g):u(g)}function c(g){return e.attempt(_Mt,l,u)(g)}function l(g){return t(g)}function u(g){return i._balanced=!0,r(g)}}function zMt(e,t,r){return n;function n(u){return e.enter("resource"),e.enter("resourceMarker"),e.consume(u),e.exit("resourceMarker"),o}function o(u){return pi(u)?oS(e,i)(u):i(u)}function i(u){return u===41?l(u):I4(e,a,A,"resourceDestination","resourceDestinationLiteral","resourceDestinationLiteralMarker","resourceDestinationRaw","resourceDestinationString",32)(u)}function a(u){return pi(u)?oS(e,s)(u):l(u)}function A(u){return r(u)}function s(u){return u===34||u===39||u===40?h4(e,c,r,"resourceTitle","resourceTitleMarker","resourceTitleString")(u):l(u)}function c(u){return pi(u)?oS(e,l)(u):l(u)}function l(u){return u===41?(e.enter("resourceMarker"),e.consume(u),e.exit("resourceMarker"),e.exit("resource"),t):r(u)}}function KMt(e,t,r){let n=this;return o;function o(A){return C4.call(n,e,i,a,"reference","referenceMarker","referenceString")(A)}function i(A){return n.parser.defined.includes(cg(n.sliceSerialize(n.events[n.events.length-1][1]).slice(1,-1)))?t(A):r(A)}function a(A){return r(A)}}function jMt(e,t,r){return n;function n(i){return e.enter("reference"),e.enter("referenceMarker"),e.consume(i),e.exit("referenceMarker"),o}function o(i){return i===93?(e.enter("referenceMarker"),e.consume(i),e.exit("referenceMarker"),e.exit("reference"),t):r(i)}}var uoe={name:"labelStartImage",resolveAll:iS.resolveAll,tokenize:WMt};function WMt(e,t,r){let n=this;return o;function o(A){return e.enter("labelImage"),e.enter("labelImageMarker"),e.consume(A),e.exit("labelImageMarker"),i}function i(A){return A===91?(e.enter("labelMarker"),e.consume(A),e.exit("labelMarker"),e.exit("labelImage"),a):r(A)}function a(A){return A===94&&"_hiddenFootnoteSupport"in n.parser.constructs?r(A):t(A)}}var goe={name:"labelStartLink",resolveAll:iS.resolveAll,tokenize:XMt};function XMt(e,t,r){let n=this;return o;function o(a){return e.enter("labelLink"),e.enter("labelMarker"),e.consume(a),e.exit("labelMarker"),e.exit("labelLink"),i}function i(a){return a===94&&"_hiddenFootnoteSupport"in n.parser.constructs?r(a):t(a)}}var UT={name:"lineEnding",tokenize:ZMt};function ZMt(e,t){return r;function r(n){return e.enter("lineEnding"),e.consume(n),e.exit("lineEnding"),Yn(e,t,"linePrefix")}}var aS={name:"thematicBreak",tokenize:qMt};function qMt(e,t,r){let n=0,o;return i;function i(c){return e.enter("thematicBreak"),a(c)}function a(c){return o=c,A(c)}function A(c){return c===o?(e.enter("thematicBreakSequence"),s(c)):n>=3&&(c===null||an(c))?(e.exit("thematicBreak"),t(c)):r(c)}function s(c){return c===o?(e.consume(c),n++,s):(e.exit("thematicBreakSequence"),qn(c)?Yn(e,A,"whitespace")(c):A(c))}}var lg={continuation:{tokenize:rkt},exit:okt,name:"list",tokenize:tkt},$Mt={partial:!0,tokenize:ikt},ekt={partial:!0,tokenize:nkt};function tkt(e,t,r){let n=this,o=n.events[n.events.length-1],i=o&&o[1].type==="linePrefix"?o[2].sliceSerialize(o[1],!0).length:0,a=0;return A;function A(m){let p=n.containerState.type||(m===42||m===43||m===45?"listUnordered":"listOrdered");if(p==="listUnordered"?!n.containerState.marker||m===n.containerState.marker:vT(m)){if(n.containerState.type||(n.containerState.type=p,e.enter(p,{_container:!0})),p==="listUnordered")return e.enter("listItemPrefix"),m===42||m===45?e.check(aS,r,c)(m):c(m);if(!n.interrupt||m===49)return e.enter("listItemPrefix"),e.enter("listItemValue"),s(m)}return r(m)}function s(m){return vT(m)&&++a<10?(e.consume(m),s):(!n.interrupt||a<2)&&(n.containerState.marker?m===n.containerState.marker:m===41||m===46)?(e.exit("listItemValue"),c(m)):r(m)}function c(m){return e.enter("listItemMarker"),e.consume(m),e.exit("listItemMarker"),n.containerState.marker=n.containerState.marker||m,e.check(LC,n.interrupt?r:l,e.attempt($Mt,g,u))}function l(m){return n.containerState.initialBlankLine=!0,i++,g(m)}function u(m){return qn(m)?(e.enter("listItemPrefixWhitespace"),e.consume(m),e.exit("listItemPrefixWhitespace"),g):r(m)}function g(m){return n.containerState.size=i+n.sliceSerialize(e.exit("listItemPrefix"),!0).length,t(m)}}function rkt(e,t,r){let n=this;return n.containerState._closeFlow=void 0,e.check(LC,o,i);function o(A){return n.containerState.furtherBlankLines=n.containerState.furtherBlankLines||n.containerState.initialBlankLine,Yn(e,t,"listItemIndent",n.containerState.size+1)(A)}function i(A){return n.containerState.furtherBlankLines||!qn(A)?(n.containerState.furtherBlankLines=void 0,n.containerState.initialBlankLine=void 0,a(A)):(n.containerState.furtherBlankLines=void 0,n.containerState.initialBlankLine=void 0,e.attempt(ekt,t,a)(A))}function a(A){return n.containerState._closeFlow=!0,n.interrupt=void 0,Yn(e,e.attempt(lg,t,r),"linePrefix",n.parser.constructs.disable.null.includes("codeIndented")?void 0:4)(A)}}function nkt(e,t,r){let n=this;return Yn(e,o,"listItemIndent",n.containerState.size+1);function o(i){let a=n.events[n.events.length-1];return a&&a[1].type==="listItemIndent"&&a[2].sliceSerialize(a[1],!0).length===n.containerState.size?t(i):r(i)}}function okt(e){e.exit(this.containerState.type)}function ikt(e,t,r){let n=this;return Yn(e,o,"listItemPrefixWhitespace",n.parser.constructs.disable.null.includes("codeIndented")?void 0:5);function o(i){let a=n.events[n.events.length-1];return!qn(i)&&a&&a[1].type==="listItemPrefixWhitespace"?t(i):r(i)}}var y4={name:"setextUnderline",resolveTo:akt,tokenize:Akt};function akt(e,t){let r=e.length,n,o,i;for(;r--;)if(e[r][0]==="enter"){if(e[r][1].type==="content"){n=r;break}e[r][1].type==="paragraph"&&(o=r)}else e[r][1].type==="content"&&e.splice(r,1),!i&&e[r][1].type==="definition"&&(i=r);let a={type:"setextHeading",start:{...e[n][1].start},end:{...e[e.length-1][1].end}};return e[o][1].type="setextHeadingText",i?(e.splice(o,0,["enter",a,t]),e.splice(i+1,0,["exit",e[n][1],t]),e[n][1].end={...e[i][1].end}):e[n][1]=a,e.push(["exit",a,t]),e}function Akt(e,t,r){let n=this,o;return i;function i(c){let l=n.events.length,u;for(;l--;)if(n.events[l][1].type!=="lineEnding"&&n.events[l][1].type!=="linePrefix"&&n.events[l][1].type!=="content"){u=n.events[l][1].type==="paragraph";break}return!n.parser.lazy[n.now().line]&&(n.interrupt||u)?(e.enter("setextHeadingLine"),o=c,a(c)):r(c)}function a(c){return e.enter("setextHeadingLineSequence"),A(c)}function A(c){return c===o?(e.consume(c),A):(e.exit("setextHeadingLineSequence"),qn(c)?Yn(e,s,"lineSuffix")(c):s(c))}function s(c){return c===null||an(c)?(e.exit("setextHeadingLine"),t(c)):r(c)}}var O_e={tokenize:skt};function skt(e){let t=this,r=e.attempt(LC,n,e.attempt(this.parser.constructs.flowInitial,o,Yn(e,e.attempt(this.parser.constructs.flow,o,e.attempt(ooe,o)),"linePrefix")));return r;function n(i){if(i===null){e.consume(i);return}return e.enter("lineEndingBlank"),e.consume(i),e.exit("lineEndingBlank"),t.currentConstruct=void 0,r}function o(i){if(i===null){e.consume(i);return}return e.enter("lineEnding"),e.consume(i),e.exit("lineEnding"),t.currentConstruct=void 0,r}}var J_e={resolveAll:W_e()},z_e=j_e("string"),K_e=j_e("text");function j_e(e){return{resolveAll:W_e(e==="text"?ckt:void 0),tokenize:t};function t(r){let n=this,o=this.parser.constructs[e],i=r.attempt(o,a,A);return a;function a(l){return c(l)?i(l):A(l)}function A(l){if(l===null){r.consume(l);return}return r.enter("data"),r.consume(l),s}function s(l){return c(l)?(r.exit("data"),i(l)):(r.consume(l),s)}function c(l){if(l===null)return!0;let u=o[l],g=-1;if(u)for(;++g<u.length;){let m=u[g];if(!m.previous||m.previous.call(n,n.previous))return!0}return!1}}}function W_e(e){return t;function t(r,n){let o=-1,i;for(;++o<=r.length;)i===void 0?r[o]&&r[o][1].type==="data"&&(i=o,o++):(!r[o]||r[o][1].type!=="data")&&(o!==i+2&&(r[i][1].end=r[o-1][1].end,r.splice(i+2,o-i-2),o=i+2),i=void 0);return e?e(r,n):r}}function ckt(e,t){let r=0;for(;++r<=e.length;)if((r===e.length||e[r][1].type==="lineEnding")&&e[r-1][1].type==="data"){let n=e[r-1][1],o=t.sliceStream(n),i=o.length,a=-1,A=0,s;for(;i--;){let c=o[i];if(typeof c=="string"){for(a=c.length;c.charCodeAt(a-1)===32;)A++,a--;if(a)break;a=-1}else if(c===-2)s=!0,A++;else if(c!==-1){i++;break}}if(t._contentTypeTextTrailing&&r===e.length&&(A=0),A){let c={type:r===e.length||s||A<2?"lineSuffix":"hardBreakTrailing",start:{_bufferIndex:i?a:n.start._bufferIndex+a,_index:n.start._index+i,line:n.end.line,column:n.end.column-A,offset:n.end.offset-A},end:{...n.end}};n.end={...c.start},n.start.offset===n.end.offset?Object.assign(n,c):(e.splice(r,0,["enter",c,t],["exit",c,t]),r+=2)}r++}return e}var moe={};ki(moe,{attentionMarkers:()=>Bkt,contentInitial:()=>ukt,disable:()=>Ikt,document:()=>lkt,flow:()=>mkt,flowInitial:()=>gkt,insideSpan:()=>fkt,string:()=>dkt,text:()=>pkt});var lkt={42:lg,43:lg,45:lg,48:lg,49:lg,50:lg,51:lg,52:lg,53:lg,54:lg,55:lg,56:lg,57:lg,62:g4},ukt={91:ioe},gkt={[-2]:wT,[-1]:wT,32:wT},mkt={35:Aoe,42:aS,45:[y4,aS],60:coe,61:y4,95:aS,96:p4,126:p4},dkt={38:d4,92:m4},pkt={[-5]:UT,[-4]:UT,[-3]:UT,33:uoe,38:d4,42:FT,60:[roe,loe],91:goe,92:[aoe,m4],93:iS,95:FT,96:noe},fkt={null:[FT,J_e]},Bkt={null:[42,95]},Ikt={null:[]};function X_e(e,t,r){let n={_bufferIndex:-1,_index:0,line:r&&r.line||1,column:r&&r.column||1,offset:r&&r.offset||0},o={},i=[],a=[],A=[],s=!0,c={attempt:w(x),check:w(S),consume:Q,enter:E,exit:b,interrupt:w(S,{interrupt:!0})},l={code:null,containerState:{},defineSkip:I,events:[],now:f,parser:e,previous:null,sliceSerialize:p,sliceStream:d,write:m},u=t.tokenize.call(l,c),g;return t.resolveAll&&i.push(t),l;function m(F){return a=jg(a,F),C(),a[a.length-1]!==null?[]:(R(t,0),l.events=ab(i,l.events,l),l.events)}function p(F,v){return hkt(d(F),v)}function d(F){return Ckt(a,F)}function f(){let{_bufferIndex:F,_index:v,line:U,column:G,offset:N}=n;return{_bufferIndex:F,_index:v,line:U,column:G,offset:N}}function I(F){o[F.line]=F.column,L()}function C(){let F;for(;n._index<a.length;){let v=a[n._index];if(typeof v=="string")for(F=n._index,n._bufferIndex<0&&(n._bufferIndex=0);n._index===F&&n._bufferIndex<v.length;)y(v.charCodeAt(n._bufferIndex));else y(v)}}function y(F){s=void 0,g=F,u=u(F)}function Q(F){an(F)?(n.line++,n.column=1,n.offset+=F===-3?2:1,L()):F!==-1&&(n.column++,n.offset++),n._bufferIndex<0?n._index++:(n._bufferIndex++,n._bufferIndex===a[n._index].length&&(n._bufferIndex=-1,n._index++)),l.previous=F,s=!0}function E(F,v){let U=v||{};return U.type=F,U.start=f(),l.events.push(["enter",U,l]),A.push(U),U}function b(F){let v=A.pop();return v.end=f(),l.events.push(["exit",v,l]),v}function x(F,v){R(F,v.from)}function S(F,v){v.restore()}function w(F,v){return U;function U(G,N,k){let J,H,z,_;return Array.isArray(G)?q(G):"tokenize"in G?q([G]):M(G);function M(me){return Se;function Se(ee){let O=ee!==null&&me[ee],X=ee!==null&&me.null,Ce=[...Array.isArray(O)?O:O?[O]:[],...Array.isArray(X)?X:X?[X]:[]];return q(Ce)(ee)}}function q(me){return J=me,H=0,me.length===0?k:ne(me[H])}function ne(me){return Se;function Se(ee){return _=T(),z=me,me.partial||(l.currentConstruct=me),me.name&&l.parser.constructs.disable.null.includes(me.name)?ae(ee):me.tokenize.call(v?Object.assign(Object.create(l),v):l,c,oe,ae)(ee)}}function oe(me){return s=!0,F(z,_),N}function ae(me){return s=!0,_.restore(),++H<J.length?ne(J[H]):k}}}function R(F,v){F.resolveAll&&!i.includes(F)&&i.push(F),F.resolve&&sc(l.events,v,l.events.length-v,F.resolve(l.events.slice(v),l)),F.resolveTo&&(l.events=F.resolveTo(l.events,l))}function T(){let F=f(),v=l.previous,U=l.currentConstruct,G=l.events.length,N=Array.from(A);return{from:G,restore:k};function k(){n=F,l.previous=v,l.currentConstruct=U,l.events.length=G,A=N,L()}}function L(){n.line in o&&n.column<2&&(n.column=o[n.line],n.offset+=o[n.line]-1)}}function Ckt(e,t){let r=t.start._index,n=t.start._bufferIndex,o=t.end._index,i=t.end._bufferIndex,a;if(r===o)a=[e[r].slice(n,i)];else{if(a=e.slice(r,o),n>-1){let A=a[0];typeof A=="string"?a[0]=A.slice(n):a.shift()}i>0&&a.push(e[o].slice(0,i))}return a}function hkt(e,t){let r=-1,n=[],o;for(;++r<e.length;){let i=e[r],a;if(typeof i=="string")a=i;else switch(i){case-5:{a="\r";break}case-4:{a=`
|
|
`;break}case-3:{a=`\r
|
|
`;break}case-2:{a=t?" ":" ";break}case-1:{if(!t&&o)continue;a=" ";break}default:a=String.fromCharCode(i)}o=i===-2,n.push(a)}return n.join("")}function doe(e){let n={constructs:l4([moe,...(e||{}).extensions||[]]),content:o(M_e),defined:[],document:o(H_e),flow:o(O_e),lazy:{},string:o(z_e),text:o(K_e)};return n;function o(i){return a;function a(A){return X_e(n,i,A)}}}function poe(e){for(;!B4(e););return e}var Z_e=/[\0\t\n\r]/g;function foe(){let e=1,t="",r=!0,n;return o;function o(i,a,A){let s=[],c,l,u,g,m;for(i=t+(typeof i=="string"?i.toString():new TextDecoder(a||void 0).decode(i)),u=0,t="",r&&(i.charCodeAt(0)===65279&&u++,r=void 0);u<i.length;){if(Z_e.lastIndex=u,c=Z_e.exec(i),g=c&&c.index!==void 0?c.index:i.length,m=i.charCodeAt(g),!c){t=i.slice(u);break}if(m===10&&u===g&&n)s.push(-3),n=void 0;else switch(n&&(s.push(-5),n=void 0),u<g&&(s.push(i.slice(u,g)),e+=g-u),m){case 0:{s.push(65533),e++;break}case 9:{for(l=Math.ceil(e/4)*4,s.push(-2);e++<l;)s.push(-1);break}case 10:{s.push(-4),e=1;break}default:n=!0,e=1}u=g+1}return A&&(n&&s.push(-5),t&&s.push(t),s.push(null)),s}}var ykt=/\\([!-/:-@[-`{-~])|&(#(?:\d{1,7}|x[\da-f]{1,6})|[\da-z]{1,31});/gi;function q_e(e){return e.replace(ykt,Qkt)}function Qkt(e,t,r){if(t)return t;if(r.charCodeAt(0)===35){let o=r.charCodeAt(1),i=o===120||o===88;return u4(r.slice(i?2:1),i?16:10)}return tw(r)||e}var eYe={}.hasOwnProperty;function Boe(e,t,r){return t&&typeof t=="object"&&(r=t,t=void 0),Ekt(r)(poe(doe(r).document().write(foe()(e,t,!0))))}function Ekt(e){let t={transforms:[],canContainEols:["emphasis","fragment","heading","paragraph","strong"],enter:{autolink:i(De),autolinkProtocol:w,autolinkEmail:w,atxHeading:i($),blockQuote:i(ee),characterEscape:w,characterReference:w,codeFenced:i(O),codeFencedFenceInfo:a,codeFencedFenceMeta:a,codeIndented:i(O,a),codeText:i(X,a),codeTextData:w,data:w,codeFlowValue:w,definition:i(Ce),definitionDestinationString:a,definitionLabelString:a,definitionTitleString:a,emphasis:i(Ne),hardBreakEscape:i(pe),hardBreakTrailing:i(pe),htmlFlow:i(ye,a),htmlFlowData:w,htmlText:i(ye,a),htmlTextData:w,image:i(Be),label:a,link:i(De),listItem:i(be),listItemValue:g,listOrdered:i(Te,u),listUnordered:i(Te),paragraph:i(Fe),reference:M,referenceString:a,resourceDestinationString:a,resourceTitleString:a,setextHeading:i($),strong:i(Ae),thematicBreak:i(Qe)},exit:{atxHeading:s(),atxHeadingSequence:E,autolink:s(),autolinkEmail:Se,autolinkProtocol:me,blockQuote:s(),characterEscapeValue:R,characterReferenceMarkerHexadecimal:ne,characterReferenceMarkerNumeric:ne,characterReferenceValue:oe,characterReference:ae,codeFenced:s(f),codeFencedFence:d,codeFencedFenceInfo:m,codeFencedFenceMeta:p,codeFlowValue:R,codeIndented:s(I),codeText:s(U),codeTextData:R,data:R,definition:s(),definitionDestinationString:Q,definitionLabelString:C,definitionTitleString:y,emphasis:s(),hardBreakEscape:s(L),hardBreakTrailing:s(L),htmlFlow:s(F),htmlFlowData:R,htmlText:s(v),htmlTextData:R,image:s(N),label:J,labelText:k,lineEnding:T,link:s(G),listItem:s(),listOrdered:s(),listUnordered:s(),paragraph:s(),referenceString:q,resourceDestinationString:H,resourceTitleString:z,resource:_,setextHeading:s(S),setextHeadingLineSequence:x,setextHeadingText:b,strong:s(),thematicBreak:s()}};tYe(t,(e||{}).mdastExtensions||[]);let r={};return n;function n(Ie){let le={type:"root",children:[]},Oe={stack:[le],tokenStack:[],config:t,enter:A,exit:c,buffer:a,resume:l,data:r},tt=[],it=-1;for(;++it<Ie.length;)if(Ie[it][1].type==="listOrdered"||Ie[it][1].type==="listUnordered")if(Ie[it][0]==="enter")tt.push(it);else{let Rt=tt.pop();it=o(Ie,Rt,it)}for(it=-1;++it<Ie.length;){let Rt=t[Ie[it][0]];eYe.call(Rt,Ie[it][1].type)&&Rt[Ie[it][1].type].call(Object.assign({sliceSerialize:Ie[it][2].sliceSerialize},Oe),Ie[it][1])}if(Oe.tokenStack.length>0){let Rt=Oe.tokenStack[Oe.tokenStack.length-1];(Rt[1]||$_e).call(Oe,void 0,Rt[0])}for(le.position={start:Ab(Ie.length>0?Ie[0][1].start:{line:1,column:1,offset:0}),end:Ab(Ie.length>0?Ie[Ie.length-2][1].end:{line:1,column:1,offset:0})},it=-1;++it<t.transforms.length;)le=t.transforms[it](le)||le;return le}function o(Ie,le,Oe){let tt=le-1,it=-1,Rt=!1,Mt,Bt,Zt,Nr;for(;++tt<=Oe;){let un=Ie[tt];switch(un[1].type){case"listUnordered":case"listOrdered":case"blockQuote":{un[0]==="enter"?it++:it--,Nr=void 0;break}case"lineEndingBlank":{un[0]==="enter"&&(Mt&&!Nr&&!it&&!Zt&&(Zt=tt),Nr=void 0);break}case"linePrefix":case"listItemValue":case"listItemMarker":case"listItemPrefix":case"listItemPrefixWhitespace":break;default:Nr=void 0}if(!it&&un[0]==="enter"&&un[1].type==="listItemPrefix"||it===-1&&un[0]==="exit"&&(un[1].type==="listUnordered"||un[1].type==="listOrdered")){if(Mt){let xn=tt;for(Bt=void 0;xn--;){let On=Ie[xn];if(On[1].type==="lineEnding"||On[1].type==="lineEndingBlank"){if(On[0]==="exit")continue;Bt&&(Ie[Bt][1].type="lineEndingBlank",Rt=!0),On[1].type="lineEnding",Bt=xn}else if(!(On[1].type==="linePrefix"||On[1].type==="blockQuotePrefix"||On[1].type==="blockQuotePrefixWhitespace"||On[1].type==="blockQuoteMarker"||On[1].type==="listItemIndent"))break}Zt&&(!Bt||Zt<Bt)&&(Mt._spread=!0),Mt.end=Object.assign({},Bt?Ie[Bt][1].start:un[1].end),Ie.splice(Bt||tt,0,["exit",Mt,un[2]]),tt++,Oe++}if(un[1].type==="listItemPrefix"){let xn={type:"listItem",_spread:!1,start:Object.assign({},un[1].start),end:void 0};Mt=xn,Ie.splice(tt,0,["enter",xn,un[2]]),tt++,Oe++,Zt=void 0,Nr=!0}}}return Ie[le][1]._spread=Rt,Oe}function i(Ie,le){return Oe;function Oe(tt){A.call(this,Ie(tt),tt),le&&le.call(this,tt)}}function a(){this.stack.push({type:"fragment",children:[]})}function A(Ie,le,Oe){this.stack[this.stack.length-1].children.push(Ie),this.stack.push(Ie),this.tokenStack.push([le,Oe||void 0]),Ie.position={start:Ab(le.start),end:void 0}}function s(Ie){return le;function le(Oe){Ie&&Ie.call(this,Oe),c.call(this,Oe)}}function c(Ie,le){let Oe=this.stack.pop(),tt=this.tokenStack.pop();if(tt)tt[0].type!==Ie.type&&(le?le.call(this,Ie,tt[0]):(tt[1]||$_e).call(this,Ie,tt[0]));else throw new Error("Cannot close `"+Ie.type+"` ("+ob({start:Ie.start,end:Ie.end})+"): it\u2019s not open");Oe.position.end=Ab(Ie.end)}function l(){return tS(this.stack.pop())}function u(){this.data.expectingFirstListItemValue=!0}function g(Ie){if(this.data.expectingFirstListItemValue){let le=this.stack[this.stack.length-2];le.start=Number.parseInt(this.sliceSerialize(Ie),10),this.data.expectingFirstListItemValue=void 0}}function m(){let Ie=this.resume(),le=this.stack[this.stack.length-1];le.lang=Ie}function p(){let Ie=this.resume(),le=this.stack[this.stack.length-1];le.meta=Ie}function d(){this.data.flowCodeInside||(this.buffer(),this.data.flowCodeInside=!0)}function f(){let Ie=this.resume(),le=this.stack[this.stack.length-1];le.value=Ie.replace(/^(\r?\n|\r)|(\r?\n|\r)$/g,""),this.data.flowCodeInside=void 0}function I(){let Ie=this.resume(),le=this.stack[this.stack.length-1];le.value=Ie.replace(/(\r?\n|\r)$/g,"")}function C(Ie){let le=this.resume(),Oe=this.stack[this.stack.length-1];Oe.label=le,Oe.identifier=cg(this.sliceSerialize(Ie)).toLowerCase()}function y(){let Ie=this.resume(),le=this.stack[this.stack.length-1];le.title=Ie}function Q(){let Ie=this.resume(),le=this.stack[this.stack.length-1];le.url=Ie}function E(Ie){let le=this.stack[this.stack.length-1];if(!le.depth){let Oe=this.sliceSerialize(Ie).length;le.depth=Oe}}function b(){this.data.setextHeadingSlurpLineEnding=!0}function x(Ie){let le=this.stack[this.stack.length-1];le.depth=this.sliceSerialize(Ie).codePointAt(0)===61?1:2}function S(){this.data.setextHeadingSlurpLineEnding=void 0}function w(Ie){let Oe=this.stack[this.stack.length-1].children,tt=Oe[Oe.length-1];(!tt||tt.type!=="text")&&(tt=fe(),tt.position={start:Ab(Ie.start),end:void 0},Oe.push(tt)),this.stack.push(tt)}function R(Ie){let le=this.stack.pop();le.value+=this.sliceSerialize(Ie),le.position.end=Ab(Ie.end)}function T(Ie){let le=this.stack[this.stack.length-1];if(this.data.atHardBreak){let Oe=le.children[le.children.length-1];Oe.position.end=Ab(Ie.end),this.data.atHardBreak=void 0;return}!this.data.setextHeadingSlurpLineEnding&&t.canContainEols.includes(le.type)&&(w.call(this,Ie),R.call(this,Ie))}function L(){this.data.atHardBreak=!0}function F(){let Ie=this.resume(),le=this.stack[this.stack.length-1];le.value=Ie}function v(){let Ie=this.resume(),le=this.stack[this.stack.length-1];le.value=Ie}function U(){let Ie=this.resume(),le=this.stack[this.stack.length-1];le.value=Ie}function G(){let Ie=this.stack[this.stack.length-1];if(this.data.inReference){let le=this.data.referenceType||"shortcut";Ie.type+="Reference",Ie.referenceType=le,delete Ie.url,delete Ie.title}else delete Ie.identifier,delete Ie.label;this.data.referenceType=void 0}function N(){let Ie=this.stack[this.stack.length-1];if(this.data.inReference){let le=this.data.referenceType||"shortcut";Ie.type+="Reference",Ie.referenceType=le,delete Ie.url,delete Ie.title}else delete Ie.identifier,delete Ie.label;this.data.referenceType=void 0}function k(Ie){let le=this.sliceSerialize(Ie),Oe=this.stack[this.stack.length-2];Oe.label=q_e(le),Oe.identifier=cg(le).toLowerCase()}function J(){let Ie=this.stack[this.stack.length-1],le=this.resume(),Oe=this.stack[this.stack.length-1];if(this.data.inReference=!0,Oe.type==="link"){let tt=Ie.children;Oe.children=tt}else Oe.alt=le}function H(){let Ie=this.resume(),le=this.stack[this.stack.length-1];le.url=Ie}function z(){let Ie=this.resume(),le=this.stack[this.stack.length-1];le.title=Ie}function _(){this.data.inReference=void 0}function M(){this.data.referenceType="collapsed"}function q(Ie){let le=this.resume(),Oe=this.stack[this.stack.length-1];Oe.label=le,Oe.identifier=cg(this.sliceSerialize(Ie)).toLowerCase(),this.data.referenceType="full"}function ne(Ie){this.data.characterReferenceType=Ie.type}function oe(Ie){let le=this.sliceSerialize(Ie),Oe=this.data.characterReferenceType,tt;Oe?(tt=u4(le,Oe==="characterReferenceMarkerNumeric"?10:16),this.data.characterReferenceType=void 0):tt=tw(le);let it=this.stack[this.stack.length-1];it.value+=tt}function ae(Ie){let le=this.stack.pop();le.position.end=Ab(Ie.end)}function me(Ie){R.call(this,Ie);let le=this.stack[this.stack.length-1];le.url=this.sliceSerialize(Ie)}function Se(Ie){R.call(this,Ie);let le=this.stack[this.stack.length-1];le.url="mailto:"+this.sliceSerialize(Ie)}function ee(){return{type:"blockquote",children:[]}}function O(){return{type:"code",lang:null,meta:null,value:""}}function X(){return{type:"inlineCode",value:""}}function Ce(){return{type:"definition",identifier:"",label:null,title:null,url:""}}function Ne(){return{type:"emphasis",children:[]}}function $(){return{type:"heading",depth:0,children:[]}}function pe(){return{type:"break"}}function ye(){return{type:"html",value:""}}function Be(){return{type:"image",title:null,url:"",alt:null}}function De(){return{type:"link",title:null,url:"",children:[]}}function Te(Ie){return{type:"list",ordered:Ie.type==="listOrdered",start:null,spread:Ie._spread,children:[]}}function be(Ie){return{type:"listItem",spread:Ie._spread,checked:null,children:[]}}function Fe(){return{type:"paragraph",children:[]}}function Ae(){return{type:"strong",children:[]}}function fe(){return{type:"text",value:""}}function Qe(){return{type:"thematicBreak"}}}function Ab(e){return{line:e.line,column:e.column,offset:e.offset}}function tYe(e,t){let r=-1;for(;++r<t.length;){let n=t[r];Array.isArray(n)?tYe(e,n):bkt(e,n)}}function bkt(e,t){let r;for(r in t)if(eYe.call(t,r))switch(r){case"canContainEols":{let n=t[r];n&&e[r].push(...n);break}case"transforms":{let n=t[r];n&&e[r].push(...n);break}case"enter":case"exit":{let n=t[r];n&&Object.assign(e[r],n);break}}}function $_e(e,t){throw e?new Error("Cannot close `"+e.type+"` ("+ob({start:e.start,end:e.end})+"): a different token (`"+t.type+"`, "+ob({start:t.start,end:t.end})+") is open"):new Error("Cannot close document, a token (`"+t.type+"`, "+ob({start:t.start,end:t.end})+") is still open")}function Q4(e){let t=this;t.parser=r;function r(n){return Boe(n,{...t.data("settings"),...e,extensions:t.data("micromarkExtensions")||[],mdastExtensions:t.data("fromMarkdownExtensions")||[]})}}function rYe(e,t){let r={type:"element",tagName:"blockquote",properties:{},children:e.wrap(e.all(t),!0)};return e.patch(t,r),e.applyData(t,r)}function nYe(e,t){let r={type:"element",tagName:"br",properties:{},children:[]};return e.patch(t,r),[e.applyData(t,r),{type:"text",value:`
|
|
`}]}function oYe(e,t){let r=t.value?t.value+`
|
|
`:"",n={},o=t.lang?t.lang.split(/\s+/):[];o.length>0&&(n.className=["language-"+o[0]]);let i={type:"element",tagName:"code",properties:n,children:[{type:"text",value:r}]};return t.meta&&(i.data={meta:t.meta}),e.patch(t,i),i=e.applyData(t,i),i={type:"element",tagName:"pre",properties:{},children:[i]},e.patch(t,i),i}function iYe(e,t){let r={type:"element",tagName:"del",properties:{},children:e.all(t)};return e.patch(t,r),e.applyData(t,r)}function aYe(e,t){let r={type:"element",tagName:"em",properties:{},children:e.all(t)};return e.patch(t,r),e.applyData(t,r)}function AYe(e,t){let r=typeof e.options.clobberPrefix=="string"?e.options.clobberPrefix:"user-content-",n=String(t.identifier).toUpperCase(),o=Qf(n.toLowerCase()),i=e.footnoteOrder.indexOf(n),a,A=e.footnoteCounts.get(n);A===void 0?(A=0,e.footnoteOrder.push(n),a=e.footnoteOrder.length):a=i+1,A+=1,e.footnoteCounts.set(n,A);let s={type:"element",tagName:"a",properties:{href:"#"+r+"fn-"+o,id:r+"fnref-"+o+(A>1?"-"+A:""),dataFootnoteRef:!0,ariaDescribedBy:["footnote-label"]},children:[{type:"text",value:String(a)}]};e.patch(t,s);let c={type:"element",tagName:"sup",properties:{},children:[s]};return e.patch(t,c),e.applyData(t,c)}function sYe(e,t){let r={type:"element",tagName:"h"+t.depth,properties:{},children:e.all(t)};return e.patch(t,r),e.applyData(t,r)}function cYe(e,t){if(e.options.allowDangerousHtml){let r={type:"raw",value:t.value};return e.patch(t,r),e.applyData(t,r)}}function E4(e,t){let r=t.referenceType,n="]";if(r==="collapsed"?n+="[]":r==="full"&&(n+="["+(t.label||t.identifier)+"]"),t.type==="imageReference")return[{type:"text",value:"!["+t.alt+n}];let o=e.all(t),i=o[0];i&&i.type==="text"?i.value="["+i.value:o.unshift({type:"text",value:"["});let a=o[o.length-1];return a&&a.type==="text"?a.value+=n:o.push({type:"text",value:n}),o}function lYe(e,t){let r=String(t.identifier).toUpperCase(),n=e.definitionById.get(r);if(!n)return E4(e,t);let o={src:Qf(n.url||""),alt:t.alt};n.title!==null&&n.title!==void 0&&(o.title=n.title);let i={type:"element",tagName:"img",properties:o,children:[]};return e.patch(t,i),e.applyData(t,i)}function uYe(e,t){let r={src:Qf(t.url)};t.alt!==null&&t.alt!==void 0&&(r.alt=t.alt),t.title!==null&&t.title!==void 0&&(r.title=t.title);let n={type:"element",tagName:"img",properties:r,children:[]};return e.patch(t,n),e.applyData(t,n)}function gYe(e,t){let r={type:"text",value:t.value.replace(/\r?\n|\r/g," ")};e.patch(t,r);let n={type:"element",tagName:"code",properties:{},children:[r]};return e.patch(t,n),e.applyData(t,n)}function mYe(e,t){let r=String(t.identifier).toUpperCase(),n=e.definitionById.get(r);if(!n)return E4(e,t);let o={href:Qf(n.url||"")};n.title!==null&&n.title!==void 0&&(o.title=n.title);let i={type:"element",tagName:"a",properties:o,children:e.all(t)};return e.patch(t,i),e.applyData(t,i)}function dYe(e,t){let r={href:Qf(t.url)};t.title!==null&&t.title!==void 0&&(r.title=t.title);let n={type:"element",tagName:"a",properties:r,children:e.all(t)};return e.patch(t,n),e.applyData(t,n)}function pYe(e,t,r){let n=e.all(t),o=r?xkt(r):fYe(t),i={},a=[];if(typeof t.checked=="boolean"){let l=n[0],u;l&&l.type==="element"&&l.tagName==="p"?u=l:(u={type:"element",tagName:"p",properties:{},children:[]},n.unshift(u)),u.children.length>0&&u.children.unshift({type:"text",value:" "}),u.children.unshift({type:"element",tagName:"input",properties:{type:"checkbox",checked:t.checked,disabled:!0},children:[]}),i.className=["task-list-item"]}let A=-1;for(;++A<n.length;){let l=n[A];(o||A!==0||l.type!=="element"||l.tagName!=="p")&&a.push({type:"text",value:`
|
|
`}),l.type==="element"&&l.tagName==="p"&&!o?a.push(...l.children):a.push(l)}let s=n[n.length-1];s&&(o||s.type!=="element"||s.tagName!=="p")&&a.push({type:"text",value:`
|
|
`});let c={type:"element",tagName:"li",properties:i,children:a};return e.patch(t,c),e.applyData(t,c)}function xkt(e){let t=!1;if(e.type==="list"){t=e.spread||!1;let r=e.children,n=-1;for(;!t&&++n<r.length;)t=fYe(r[n])}return t}function fYe(e){let t=e.spread;return t??e.children.length>1}function BYe(e,t){let r={},n=e.all(t),o=-1;for(typeof t.start=="number"&&t.start!==1&&(r.start=t.start);++o<n.length;){let a=n[o];if(a.type==="element"&&a.tagName==="li"&&a.properties&&Array.isArray(a.properties.className)&&a.properties.className.includes("task-list-item")){r.className=["contains-task-list"];break}}let i={type:"element",tagName:t.ordered?"ol":"ul",properties:r,children:e.wrap(n,!0)};return e.patch(t,i),e.applyData(t,i)}function IYe(e,t){let r={type:"element",tagName:"p",properties:{},children:e.all(t)};return e.patch(t,r),e.applyData(t,r)}function CYe(e,t){let r={type:"root",children:e.wrap(e.all(t))};return e.patch(t,r),e.applyData(t,r)}function hYe(e,t){let r={type:"element",tagName:"strong",properties:{},children:e.all(t)};return e.patch(t,r),e.applyData(t,r)}function yYe(e,t){let r=e.all(t),n=r.shift(),o=[];if(n){let a={type:"element",tagName:"thead",properties:{},children:e.wrap([n],!0)};e.patch(t.children[0],a),o.push(a)}if(r.length>0){let a={type:"element",tagName:"tbody",properties:{},children:e.wrap(r,!0)},A=ew(t.children[1]),s=c4(t.children[t.children.length-1]);A&&s&&(a.position={start:A,end:s}),o.push(a)}let i={type:"element",tagName:"table",properties:{},children:e.wrap(o,!0)};return e.patch(t,i),e.applyData(t,i)}function QYe(e,t,r){let n=r?r.children:void 0,i=(n?n.indexOf(t):1)===0?"th":"td",a=r&&r.type==="table"?r.align:void 0,A=a?a.length:t.children.length,s=-1,c=[];for(;++s<A;){let u=t.children[s],g={},m=a?a[s]:void 0;m&&(g.align=m);let p={type:"element",tagName:i,properties:g,children:[]};u&&(p.children=e.all(u),e.patch(u,p),p=e.applyData(u,p)),c.push(p)}let l={type:"element",tagName:"tr",properties:{},children:e.wrap(c,!0)};return e.patch(t,l),e.applyData(t,l)}function EYe(e,t){let r={type:"element",tagName:"td",properties:{},children:e.all(t)};return e.patch(t,r),e.applyData(t,r)}function xYe(e){let t=String(e),r=/\r?\n|\r/g,n=r.exec(t),o=0,i=[];for(;n;)i.push(bYe(t.slice(o,n.index),o>0,!0),n[0]),o=n.index+n[0].length,n=r.exec(t);return i.push(bYe(t.slice(o),o>0,!1)),i.join("")}function bYe(e,t,r){let n=0,o=e.length;if(t){let i=e.codePointAt(n);for(;i===9||i===32;)n++,i=e.codePointAt(n)}if(r){let i=e.codePointAt(o-1);for(;i===9||i===32;)o--,i=e.codePointAt(o-1)}return o>n?e.slice(n,o):""}function SYe(e,t){let r={type:"text",value:xYe(String(t.value))};return e.patch(t,r),e.applyData(t,r)}function DYe(e,t){let r={type:"element",tagName:"hr",properties:{},children:[]};return e.patch(t,r),e.applyData(t,r)}var vYe={blockquote:rYe,break:nYe,code:oYe,delete:iYe,emphasis:aYe,footnoteReference:AYe,heading:sYe,html:cYe,imageReference:lYe,image:uYe,inlineCode:gYe,linkReference:mYe,link:dYe,listItem:pYe,list:BYe,paragraph:IYe,root:CYe,strong:hYe,table:yYe,tableCell:EYe,tableRow:QYe,text:SYe,thematicBreak:DYe,toml:b4,yaml:b4,definition:b4,footnoteDefinition:b4};function b4(){}var TYe=typeof self=="object"?self:globalThis,FYe=(e,t)=>{switch(e){case"Function":case"SharedWorker":case"Worker":case"eval":case"setInterval":case"setTimeout":throw new TypeError("unable to deserialize "+e)}return new TYe[e](t)},Fkt=(e,t)=>{let r=(o,i)=>(e.set(i,o),o),n=o=>{if(e.has(o))return e.get(o);let[i,a]=t[o];switch(i){case 0:case-1:return r(a,o);case 1:{let A=r([],o);for(let s of a)A.push(n(s));return A}case 2:{let A=r({},o);for(let[s,c]of a)A[n(s)]=n(c);return A}case 3:return r(new Date(a),o);case 4:{let{source:A,flags:s}=a;return r(new RegExp(A,s),o)}case 5:{let A=r(new Map,o);for(let[s,c]of a)A.set(n(s),n(c));return A}case 6:{let A=r(new Set,o);for(let s of a)A.add(n(s));return A}case 7:{let{name:A,message:s}=a;return r(typeof TYe[A]=="function"?FYe(A,s):new Error(s),o)}case 8:return r(BigInt(a),o);case"BigInt":return r(Object(BigInt(a)),o);case"ArrayBuffer":return r(new Uint8Array(a).buffer,a);case"DataView":{let{buffer:A}=new Uint8Array(a);return r(new DataView(A),a)}}return r(FYe(i,a),o)};return n},hoe=e=>Fkt(new Map,e)(0);var AS="",{toString:wkt}={},{keys:Rkt}=Object,LT=e=>{let t=typeof e;if(t!=="object"||!e)return[0,t];let r=wkt.call(e).slice(8,-1);switch(r){case"Array":return[1,AS];case"Object":return[2,AS];case"Date":return[3,AS];case"RegExp":return[4,AS];case"Map":return[5,AS];case"Set":return[6,AS];case"DataView":return[1,r]}return r.includes("Array")?[1,r]:e instanceof Error?[7,e.name||"Error"]:[2,r]},S4=([e,t])=>e===0&&(t==="function"||t==="symbol"),Ukt=(e,t,r,n)=>{let o=(a,A)=>{let s=n.push(a)-1;return r.set(A,s),s},i=a=>{if(r.has(a))return r.get(a);let[A,s]=LT(a);switch(A){case 0:{let l=a;switch(s){case"bigint":A=8,l=a.toString();break;case"function":case"symbol":if(e)throw new TypeError("unable to serialize "+s);l=null;break;case"undefined":return o([-1],a)}return o([A,l],a)}case 1:{if(s){let g=a;return s==="DataView"?g=new Uint8Array(a.buffer):s==="ArrayBuffer"&&(g=new Uint8Array(a)),o([s,[...g]],a)}let l=[],u=o([A,l],a);for(let g of a)l.push(i(g));return u}case 2:{if(s)switch(s){case"BigInt":return o([s,a.toString()],a);case"Boolean":case"Number":case"String":return o([s,a.valueOf()],a)}if(t&&"toJSON"in a)return i(a.toJSON());let l=[],u=o([A,l],a);for(let g of Rkt(a))(e||!S4(LT(a[g])))&&l.push([i(g),i(a[g])]);return u}case 3:return o([A,isNaN(a.getTime())?AS:a.toISOString()],a);case 4:{let{source:l,flags:u}=a;return o([A,{source:l,flags:u}],a)}case 5:{let l=[],u=o([A,l],a);for(let[g,m]of a)(e||!(S4(LT(g))||S4(LT(m))))&&l.push([i(g),i(m)]);return u}case 6:{let l=[],u=o([A,l],a);for(let g of a)(e||!S4(LT(g)))&&l.push(i(g));return u}}let{message:c}=a;return o([A,{name:s,message:c}],a)};return i},yoe=(e,{json:t,lossy:r}={})=>{let n=[];return Ukt(!(t||r),!!t,new Map,n)(e),n};var rw=typeof structuredClone=="function"?(e,t)=>t&&("json"in t||"lossy"in t)?hoe(yoe(e,t)):structuredClone(e):(e,t)=>hoe(yoe(e,t));function Lkt(e,t){let r=[{type:"text",value:"\u21A9"}];return t>1&&r.push({type:"element",tagName:"sup",properties:{},children:[{type:"text",value:String(t)}]}),r}function Tkt(e,t){return"Back to reference "+(e+1)+(t>1?"-"+t:"")}function PYe(e){let t=typeof e.options.clobberPrefix=="string"?e.options.clobberPrefix:"user-content-",r=e.options.footnoteBackContent||Lkt,n=e.options.footnoteBackLabel||Tkt,o=e.options.footnoteLabel||"Footnotes",i=e.options.footnoteLabelTagName||"h2",a=e.options.footnoteLabelProperties||{className:["sr-only"]},A=[],s=-1;for(;++s<e.footnoteOrder.length;){let c=e.footnoteById.get(e.footnoteOrder[s]);if(!c)continue;let l=e.all(c),u=String(c.identifier).toUpperCase(),g=Qf(u.toLowerCase()),m=0,p=[],d=e.footnoteCounts.get(u);for(;d!==void 0&&++m<=d;){p.length>0&&p.push({type:"text",value:" "});let C=typeof r=="string"?r:r(s,m);typeof C=="string"&&(C={type:"text",value:C}),p.push({type:"element",tagName:"a",properties:{href:"#"+t+"fnref-"+g+(m>1?"-"+m:""),dataFootnoteBackref:"",ariaLabel:typeof n=="string"?n:n(s,m),className:["data-footnote-backref"]},children:Array.isArray(C)?C:[C]})}let f=l[l.length-1];if(f&&f.type==="element"&&f.tagName==="p"){let C=f.children[f.children.length-1];C&&C.type==="text"?C.value+=" ":f.children.push({type:"text",value:" "}),f.children.push(...p)}else l.push(...p);let I={type:"element",tagName:"li",properties:{id:t+"fn-"+g},children:e.wrap(l,!0)};e.patch(c,I),A.push(I)}if(A.length!==0)return{type:"element",tagName:"section",properties:{dataFootnotes:!0,className:["footnotes"]},children:[{type:"element",tagName:i,properties:{...rw(a),id:"footnote-label"},children:[{type:"text",value:o}]},{type:"text",value:`
|
|
`},{type:"element",tagName:"ol",properties:{},children:e.wrap(A,!0)},{type:"text",value:`
|
|
`}]}}var sb=(function(e){if(e==null)return Mkt;if(typeof e=="function")return D4(e);if(typeof e=="object")return Array.isArray(e)?Pkt(e):Gkt(e);if(typeof e=="string")return Nkt(e);throw new Error("Expected function, string, or object as test")});function Pkt(e){let t=[],r=-1;for(;++r<e.length;)t[r]=sb(e[r]);return D4(n);function n(...o){let i=-1;for(;++i<t.length;)if(t[i].apply(this,o))return!0;return!1}}function Gkt(e){let t=e;return D4(r);function r(n){let o=n,i;for(i in e)if(o[i]!==t[i])return!1;return!0}}function Nkt(e){return D4(t);function t(r){return r&&r.type===e}}function D4(e){return t;function t(r,n,o){return!!(kkt(r)&&e.call(this,r,typeof n=="number"?n:void 0,o||void 0))}}function Mkt(){return!0}function kkt(e){return e!==null&&typeof e=="object"&&"type"in e}var GYe=[],v4=!0,sS=!1,F4="skip";function TT(e,t,r,n){let o;typeof t=="function"&&typeof r!="function"?(n=r,r=t):o=t;let i=sb(o),a=n?-1:1;A(e,void 0,[])();function A(s,c,l){let u=s&&typeof s=="object"?s:{};if(typeof u.type=="string"){let m=typeof u.tagName=="string"?u.tagName:typeof u.name=="string"?u.name:void 0;Object.defineProperty(g,"name",{value:"node ("+(s.type+(m?"<"+m+">":""))+")"})}return g;function g(){let m=GYe,p,d,f;if((!t||i(s,c,l[l.length-1]||void 0))&&(m=Hkt(r(s,l)),m[0]===sS))return m;if("children"in s&&s.children){let I=s;if(I.children&&m[0]!==F4)for(d=(n?I.children.length:-1)+a,f=l.concat(I);d>-1&&d<I.children.length;){let C=I.children[d];if(p=A(C,d,f)(),p[0]===sS)return p;d=typeof p[1]=="number"?p[1]:d+a}}return m}}}function Hkt(e){return Array.isArray(e)?e:typeof e=="number"?[v4,e]:e==null?GYe:[e]}function cS(e,t,r,n){let o,i,a;typeof t=="function"&&typeof r!="function"?(i=void 0,a=t,o=r):(i=t,a=r,o=n),TT(e,i,A,o);function A(s,c){let l=c[c.length-1],u=l?l.children.indexOf(s):void 0;return a(s,u,l)}}var Qoe={}.hasOwnProperty,Vkt={};function MYe(e,t){let r=t||Vkt,n=new Map,o=new Map,i=new Map,a={...vYe,...r.handlers},A={all:c,applyData:Ykt,definitionById:n,footnoteById:o,footnoteCounts:i,footnoteOrder:[],handlers:a,one:s,options:r,patch:_kt,wrap:Jkt};return cS(e,function(l){if(l.type==="definition"||l.type==="footnoteDefinition"){let u=l.type==="definition"?n:o,g=String(l.identifier).toUpperCase();u.has(g)||u.set(g,l)}}),A;function s(l,u){let g=l.type,m=A.handlers[g];if(Qoe.call(A.handlers,g)&&m)return m(A,l,u);if(A.options.passThrough&&A.options.passThrough.includes(g)){if("children"in l){let{children:d,...f}=l,I=rw(f);return I.children=A.all(l),I}return rw(l)}return(A.options.unknownHandler||Okt)(A,l,u)}function c(l){let u=[];if("children"in l){let g=l.children,m=-1;for(;++m<g.length;){let p=A.one(g[m],l);if(p){if(m&&g[m-1].type==="break"&&(!Array.isArray(p)&&p.type==="text"&&(p.value=NYe(p.value)),!Array.isArray(p)&&p.type==="element")){let d=p.children[0];d&&d.type==="text"&&(d.value=NYe(d.value))}Array.isArray(p)?u.push(...p):u.push(p)}}}return u}}function _kt(e,t){e.position&&(t.position=Xne(e))}function Ykt(e,t){let r=t;if(e&&e.data){let n=e.data.hName,o=e.data.hChildren,i=e.data.hProperties;if(typeof n=="string")if(r.type==="element")r.tagName=n;else{let a="children"in r?r.children:[r];r={type:"element",tagName:n,properties:{},children:a}}r.type==="element"&&i&&Object.assign(r.properties,rw(i)),"children"in r&&r.children&&o!==null&&o!==void 0&&(r.children=o)}return r}function Okt(e,t){let r=t.data||{},n="value"in t&&!(Qoe.call(r,"hProperties")||Qoe.call(r,"hChildren"))?{type:"text",value:t.value}:{type:"element",tagName:"div",properties:{},children:e.all(t)};return e.patch(t,n),e.applyData(t,n)}function Jkt(e,t){let r=[],n=-1;for(t&&r.push({type:"text",value:`
|
|
`});++n<e.length;)n&&r.push({type:"text",value:`
|
|
`}),r.push(e[n]);return t&&e.length>0&&r.push({type:"text",value:`
|
|
`}),r}function NYe(e){let t=0,r=e.charCodeAt(t);for(;r===9||r===32;)t++,r=e.charCodeAt(t);return e.slice(t)}function w4(e,t){let r=MYe(e,t),n=r.one(e,void 0),o=PYe(r),i=Array.isArray(n)?{type:"root",children:n}:n||{type:"root",children:[]};return o&&("children"in i,i.children.push({type:"text",value:`
|
|
`},o)),i}function R4(e,t){return e&&"run"in e?async function(r,n){let o=w4(r,{file:n,...t});await e.run(o,n)}:function(r,n){return w4(r,{file:n,...e||t})}}function Eoe(e){if(e)throw e}var T4=kt(KYe(),1);function PT(e){if(typeof e!="object"||e===null)return!1;let t=Object.getPrototypeOf(e);return(t===null||t===Object.prototype||Object.getPrototypeOf(t)===null)&&!(Symbol.toStringTag in e)&&!(Symbol.iterator in e)}function boe(){let e=[],t={run:r,use:n};return t;function r(...o){let i=-1,a=o.pop();if(typeof a!="function")throw new TypeError("Expected function as last argument, not "+a);A(null,...o);function A(s,...c){let l=e[++i],u=-1;if(s){a(s);return}for(;++u<o.length;)(c[u]===null||c[u]===void 0)&&(c[u]=o[u]);o=c,l?jYe(l,A)(...c):a(null,...c)}}function n(o){if(typeof o!="function")throw new TypeError("Expected `middelware` to be a function, not "+o);return e.push(o),t}}function jYe(e,t){let r;return n;function n(...a){let A=e.length>a.length,s;A&&a.push(o);try{s=e.apply(this,a)}catch(c){let l=c;if(A&&r)throw l;return o(l)}A||(s&&s.then&&typeof s.then=="function"?s.then(i,o):s instanceof Error?o(s):i(s))}function o(a,...A){r||(r=!0,t(a,...A))}function i(a){o(null,a)}}var GB={basename:zkt,dirname:Kkt,extname:jkt,join:Wkt,sep:"/"};function zkt(e,t){if(t!==void 0&&typeof t!="string")throw new TypeError('"ext" argument must be a string');GT(e);let r=0,n=-1,o=e.length,i;if(t===void 0||t.length===0||t.length>e.length){for(;o--;)if(e.codePointAt(o)===47){if(i){r=o+1;break}}else n<0&&(i=!0,n=o+1);return n<0?"":e.slice(r,n)}if(t===e)return"";let a=-1,A=t.length-1;for(;o--;)if(e.codePointAt(o)===47){if(i){r=o+1;break}}else a<0&&(i=!0,a=o+1),A>-1&&(e.codePointAt(o)===t.codePointAt(A--)?A<0&&(n=o):(A=-1,n=a));return r===n?n=a:n<0&&(n=e.length),e.slice(r,n)}function Kkt(e){if(GT(e),e.length===0)return".";let t=-1,r=e.length,n;for(;--r;)if(e.codePointAt(r)===47){if(n){t=r;break}}else n||(n=!0);return t<0?e.codePointAt(0)===47?"/":".":t===1&&e.codePointAt(0)===47?"//":e.slice(0,t)}function jkt(e){GT(e);let t=e.length,r=-1,n=0,o=-1,i=0,a;for(;t--;){let A=e.codePointAt(t);if(A===47){if(a){n=t+1;break}continue}r<0&&(a=!0,r=t+1),A===46?o<0?o=t:i!==1&&(i=1):o>-1&&(i=-1)}return o<0||r<0||i===0||i===1&&o===r-1&&o===n+1?"":e.slice(o,r)}function Wkt(...e){let t=-1,r;for(;++t<e.length;)GT(e[t]),e[t]&&(r=r===void 0?e[t]:r+"/"+e[t]);return r===void 0?".":Xkt(r)}function Xkt(e){GT(e);let t=e.codePointAt(0)===47,r=Zkt(e,!t);return r.length===0&&!t&&(r="."),r.length>0&&e.codePointAt(e.length-1)===47&&(r+="/"),t?"/"+r:r}function Zkt(e,t){let r="",n=0,o=-1,i=0,a=-1,A,s;for(;++a<=e.length;){if(a<e.length)A=e.codePointAt(a);else{if(A===47)break;A=47}if(A===47){if(!(o===a-1||i===1))if(o!==a-1&&i===2){if(r.length<2||n!==2||r.codePointAt(r.length-1)!==46||r.codePointAt(r.length-2)!==46){if(r.length>2){if(s=r.lastIndexOf("/"),s!==r.length-1){s<0?(r="",n=0):(r=r.slice(0,s),n=r.length-1-r.lastIndexOf("/")),o=a,i=0;continue}}else if(r.length>0){r="",n=0,o=a,i=0;continue}}t&&(r=r.length>0?r+"/..":"..",n=2)}else r.length>0?r+="/"+e.slice(o+1,a):r=e.slice(o+1,a),n=a-o-1;o=a,i=0}else A===46&&i>-1?i++:i=-1}return r}function GT(e){if(typeof e!="string")throw new TypeError("Path must be a string. Received "+JSON.stringify(e))}var WYe={cwd:qkt};function qkt(){return"/"}function nw(e){return!!(e!==null&&typeof e=="object"&&"href"in e&&e.href&&"protocol"in e&&e.protocol&&e.auth===void 0)}function XYe(e){if(typeof e=="string")e=new URL(e);else if(!nw(e)){let t=new TypeError('The "path" argument must be of type string or an instance of URL. Received `'+e+"`");throw t.code="ERR_INVALID_ARG_TYPE",t}if(e.protocol!=="file:"){let t=new TypeError("The URL must be of scheme file");throw t.code="ERR_INVALID_URL_SCHEME",t}return $kt(e)}function $kt(e){if(e.hostname!==""){let n=new TypeError('File URL host must be "localhost" or empty on darwin');throw n.code="ERR_INVALID_FILE_URL_HOST",n}let t=e.pathname,r=-1;for(;++r<t.length;)if(t.codePointAt(r)===37&&t.codePointAt(r+1)===50){let n=t.codePointAt(r+2);if(n===70||n===102){let o=new TypeError("File URL path must not include encoded / characters");throw o.code="ERR_INVALID_FILE_URL_PATH",o}}return decodeURIComponent(t)}var xoe=["history","path","basename","stem","extname","dirname"],lS=class{constructor(t){let r;t?nw(t)?r={path:t}:typeof t=="string"||eHt(t)?r={value:t}:r=t:r={},this.cwd="cwd"in r?"":WYe.cwd(),this.data={},this.history=[],this.messages=[],this.value,this.map,this.result,this.stored;let n=-1;for(;++n<xoe.length;){let i=xoe[n];i in r&&r[i]!==void 0&&r[i]!==null&&(this[i]=i==="history"?[...r[i]]:r[i])}let o;for(o in r)xoe.includes(o)||(this[o]=r[o])}get basename(){return typeof this.path=="string"?GB.basename(this.path):void 0}set basename(t){Doe(t,"basename"),Soe(t,"basename"),this.path=GB.join(this.dirname||"",t)}get dirname(){return typeof this.path=="string"?GB.dirname(this.path):void 0}set dirname(t){ZYe(this.basename,"dirname"),this.path=GB.join(t||"",this.basename)}get extname(){return typeof this.path=="string"?GB.extname(this.path):void 0}set extname(t){if(Soe(t,"extname"),ZYe(this.dirname,"extname"),t){if(t.codePointAt(0)!==46)throw new Error("`extname` must start with `.`");if(t.includes(".",1))throw new Error("`extname` cannot contain multiple dots")}this.path=GB.join(this.dirname,this.stem+(t||""))}get path(){return this.history[this.history.length-1]}set path(t){nw(t)&&(t=XYe(t)),Doe(t,"path"),this.path!==t&&this.history.push(t)}get stem(){return typeof this.path=="string"?GB.basename(this.path,this.extname):void 0}set stem(t){Doe(t,"stem"),Soe(t,"stem"),this.path=GB.join(this.dirname||"",t+(this.extname||""))}fail(t,r,n){let o=this.message(t,r,n);throw o.fatal=!0,o}info(t,r,n){let o=this.message(t,r,n);return o.fatal=void 0,o}message(t,r,n){let o=new Ac(t,r,n);return this.path&&(o.name=this.path+":"+o.name,o.file=this.path),o.fatal=!1,this.messages.push(o),o}toString(t){return this.value===void 0?"":typeof this.value=="string"?this.value:new TextDecoder(t||void 0).decode(this.value)}};function Soe(e,t){if(e&&e.includes(GB.sep))throw new Error("`"+t+"` cannot be a path: did not expect `"+GB.sep+"`")}function Doe(e,t){if(!e)throw new Error("`"+t+"` cannot be empty")}function ZYe(e,t){if(!e)throw new Error("Setting `"+t+"` requires `path` to be set too")}function eHt(e){return!!(e&&typeof e=="object"&&"byteLength"in e&&"byteOffset"in e)}var qYe=(function(e){let n=this.constructor.prototype,o=n[e],i=function(){return o.apply(i,arguments)};return Object.setPrototypeOf(i,n),i});var tHt={}.hasOwnProperty,Roe=class e extends qYe{constructor(){super("copy"),this.Compiler=void 0,this.Parser=void 0,this.attachers=[],this.compiler=void 0,this.freezeIndex=-1,this.frozen=void 0,this.namespace={},this.parser=void 0,this.transformers=boe()}copy(){let t=new e,r=-1;for(;++r<this.attachers.length;){let n=this.attachers[r];t.use(...n)}return t.data((0,T4.default)(!0,{},this.namespace)),t}data(t,r){return typeof t=="string"?arguments.length===2?(woe("data",this.frozen),this.namespace[t]=r,this):tHt.call(this.namespace,t)&&this.namespace[t]||void 0:t?(woe("data",this.frozen),this.namespace=t,this):this.namespace}freeze(){if(this.frozen)return this;let t=this;for(;++this.freezeIndex<this.attachers.length;){let[r,...n]=this.attachers[this.freezeIndex];if(n[0]===!1)continue;n[0]===!0&&(n[0]=void 0);let o=r.call(t,...n);typeof o=="function"&&this.transformers.use(o)}return this.frozen=!0,this.freezeIndex=Number.POSITIVE_INFINITY,this}parse(t){this.freeze();let r=L4(t),n=this.parser||this.Parser;return voe("parse",n),n(String(r),r)}process(t,r){let n=this;return this.freeze(),voe("process",this.parser||this.Parser),Foe("process",this.compiler||this.Compiler),r?o(void 0,r):new Promise(o);function o(i,a){let A=L4(t),s=n.parse(A);n.run(s,A,function(l,u,g){if(l||!u||!g)return c(l);let m=u,p=n.stringify(m,g);nHt(p)?g.value=p:g.result=p,c(l,g)});function c(l,u){l||!u?a(l):i?i(u):r(void 0,u)}}}processSync(t){let r=!1,n;return this.freeze(),voe("processSync",this.parser||this.Parser),Foe("processSync",this.compiler||this.Compiler),this.process(t,o),eOe("processSync","process",r),n;function o(i,a){r=!0,Eoe(i),n=a}}run(t,r,n){$Ye(t),this.freeze();let o=this.transformers;return!n&&typeof r=="function"&&(n=r,r=void 0),n?i(void 0,n):new Promise(i);function i(a,A){let s=L4(r);o.run(t,s,c);function c(l,u,g){let m=u||t;l?A(l):a?a(m):n(void 0,m,g)}}}runSync(t,r){let n=!1,o;return this.run(t,r,i),eOe("runSync","run",n),o;function i(a,A){Eoe(a),o=A,n=!0}}stringify(t,r){this.freeze();let n=L4(r),o=this.compiler||this.Compiler;return Foe("stringify",o),$Ye(t),o(t,n)}use(t,...r){let n=this.attachers,o=this.namespace;if(woe("use",this.frozen),t!=null)if(typeof t=="function")s(t,r);else if(typeof t=="object")Array.isArray(t)?A(t):a(t);else throw new TypeError("Expected usable value, not `"+t+"`");return this;function i(c){if(typeof c=="function")s(c,[]);else if(typeof c=="object")if(Array.isArray(c)){let[l,...u]=c;s(l,u)}else a(c);else throw new TypeError("Expected usable value, not `"+c+"`")}function a(c){if(!("plugins"in c)&&!("settings"in c))throw new Error("Expected usable value but received an empty preset, which is probably a mistake: presets typically come with `plugins` and sometimes with `settings`, but this has neither");A(c.plugins),c.settings&&(o.settings=(0,T4.default)(!0,o.settings,c.settings))}function A(c){let l=-1;if(c!=null)if(Array.isArray(c))for(;++l<c.length;){let u=c[l];i(u)}else throw new TypeError("Expected a list of plugins, not `"+c+"`")}function s(c,l){let u=-1,g=-1;for(;++u<n.length;)if(n[u][0]===c){g=u;break}if(g===-1)n.push([c,...l]);else if(l.length>0){let[m,...p]=l,d=n[g][1];PT(d)&&PT(m)&&(m=(0,T4.default)(!0,d,m)),n[g]=[c,m,...p]}}}},Uoe=new Roe().freeze();function voe(e,t){if(typeof t!="function")throw new TypeError("Cannot `"+e+"` without `parser`")}function Foe(e,t){if(typeof t!="function")throw new TypeError("Cannot `"+e+"` without `compiler`")}function woe(e,t){if(t)throw new Error("Cannot call `"+e+"` on a frozen processor.\nCreate a new processor first, by calling it: use `processor()` instead of `processor`.")}function $Ye(e){if(!PT(e)||typeof e.type!="string")throw new TypeError("Expected node, got `"+e+"`")}function eOe(e,t,r){if(!r)throw new Error("`"+e+"` finished async. Use `"+t+"` instead")}function L4(e){return rHt(e)?e:new lS(e)}function rHt(e){return!!(e&&typeof e=="object"&&"message"in e&&"messages"in e)}function nHt(e){return typeof e=="string"||oHt(e)}function oHt(e){return!!(e&&typeof e=="object"&&"byteLength"in e&&"byteOffset"in e)}var iHt="https://github.com/remarkjs/react-markdown/blob/main/changelog.md",tOe=[],rOe={allowDangerousHtml:!0},aHt=/^(https?|ircs?|mailto|xmpp)$/i,AHt=[{from:"astPlugins",id:"remove-buggy-html-in-markdown-parser"},{from:"allowDangerousHtml",id:"remove-buggy-html-in-markdown-parser"},{from:"allowNode",id:"replace-allownode-allowedtypes-and-disallowedtypes",to:"allowElement"},{from:"allowedTypes",id:"replace-allownode-allowedtypes-and-disallowedtypes",to:"allowedElements"},{from:"className",id:"remove-classname"},{from:"disallowedTypes",id:"replace-allownode-allowedtypes-and-disallowedtypes",to:"disallowedElements"},{from:"escapeHtml",id:"remove-buggy-html-in-markdown-parser"},{from:"includeElementIndex",id:"#remove-includeelementindex"},{from:"includeNodeIndex",id:"change-includenodeindex-to-includeelementindex"},{from:"linkTarget",id:"remove-linktarget"},{from:"plugins",id:"change-plugins-to-remarkplugins",to:"remarkPlugins"},{from:"rawSourcePos",id:"#remove-rawsourcepos"},{from:"renderers",id:"change-renderers-to-components",to:"components"},{from:"source",id:"change-source-to-children",to:"children"},{from:"sourcePos",id:"#remove-sourcepos"},{from:"transformImageUri",id:"#add-urltransform",to:"urlTransform"},{from:"transformLinkUri",id:"#add-urltransform",to:"urlTransform"}];function NT(e){let t=sHt(e),r=cHt(e);return lHt(t.runSync(t.parse(r),r),e)}function sHt(e){let t=e.rehypePlugins||tOe,r=e.remarkPlugins||tOe,n=e.remarkRehypeOptions?{...e.remarkRehypeOptions,...rOe}:rOe;return Uoe().use(Q4).use(r).use(R4,n).use(t)}function cHt(e){let t=e.children||"",r=new lS;return typeof t=="string"?r.value=t:(""+t,void 0),r}function lHt(e,t){let r=t.allowedElements,n=t.allowElement,o=t.components,i=t.disallowedElements,a=t.skipHtml,A=t.unwrapDisallowed,s=t.urlTransform||oOe;for(let l of AHt)Object.hasOwn(t,l.from)&&(""+l.from+(l.to?"use `"+l.to+"` instead":"remove it")+iHt+l.id,void 0);return r&&i&&void 0,cS(e,c),$ne(e,{Fragment:ow.Fragment,components:o,ignoreInvalidStyle:!0,jsx:ow.jsx,jsxs:ow.jsxs,passKeys:!0,passNode:!0});function c(l,u,g){if(l.type==="raw"&&g&&typeof u=="number")return a?g.children.splice(u,1):g.children[u]={type:"text",value:l.value},u;if(l.type==="element"){let m;for(m in DT)if(Object.hasOwn(DT,m)&&Object.hasOwn(l.properties,m)){let p=l.properties[m],d=DT[m];(d===null||d.includes(l.tagName))&&(l.properties[m]=s(String(p||""),m,l))}}if(l.type==="element"){let m=r?!r.includes(l.tagName):i?i.includes(l.tagName):!1;if(!m&&n&&typeof u=="number"&&(m=!n(l,u,g)),m&&g&&typeof u=="number")return A&&l.children?g.children.splice(u,1,...l.children):g.children.splice(u,1),u}}}function oOe(e){let t=e.indexOf(":"),r=e.indexOf("?"),n=e.indexOf("#"),o=e.indexOf("/");return t===-1||o!==-1&&t>o||r!==-1&&t>r||n!==-1&&t>n||aHt.test(e.slice(0,t))?e:""}var Iy=kt(Qr()),P4=class extends pn{constructor(){super(...arguments);this.updateParams=r=>{this.plugin.managers.animation.updateParams({[r.name]:r.value})};this.updateCurrentParams=r=>{this.plugin.managers.animation.updateCurrentParams({[r.name]:r.value})};this.startOrStop=()=>{let r=this.plugin.managers.animation;r.state.animationState==="playing"?r.stop():(this.props.onStart&&this.props.onStart(),r.start())}}componentDidMount(){this.subscribe(this.plugin.managers.animation.events.updated,()=>this.forceUpdate())}render(){let r=this.plugin.managers.animation;if(r.isEmpty)return null;let n=r.state.animationState==="playing",o=r.current.anim.canApply?.(this.plugin);return(0,Iy.jsxs)(Iy.Fragment,{children:[(0,Iy.jsx)(Mn,{params:r.getParams(),values:r.state.params,onChange:this.updateParams,isDisabled:n}),(0,Iy.jsx)(Mn,{params:r.current.params,values:r.current.paramValues,onChange:this.updateCurrentParams,isDisabled:n}),(0,Iy.jsx)("div",{className:"msp-flex-row",children:(0,Iy.jsx)(hr,{icon:r.state.animationState!=="playing"?void 0:W_,onClick:this.startOrStop,disabled:o!==void 0&&o.canApply===!1,children:r.state.animationState==="playing"?"Stop":o===void 0||o.canApply?"Start":o.reason||"Start"})})]})}};var uHt=kt(Qr());var ug=class extends I1{constructor(){super(...arguments);this._getInfo=VA(r=>DB.infoFromTransform(this.plugin,this.props.state,r));this.state={error:void 0,isInitial:!0,params:this.getInfo().initialValues,busy:!1,isCollapsed:this.props.initiallyCollapsed}}applyAction(){return this.props.customUpdate?this.props.customUpdate(this.state.params):this.plugin.state.updateTransform(this.props.state,this.props.transform.ref,this.state.params)}getInfo(){return this._getInfo(this.props.transform)}getTransformerId(){return this.props.transform.transformer.id}getHeader(){return this.props.customHeader||this.props.transform.transformer.definition.display}canApply(){let{state:r}=this.props,n=r.cells.get(this.props.transform.ref);if(!n)return!1;if(n.status==="error"){let o=r.cells.get(this.props.transform.parent);return o?o.status==="ok":!1}return!this.state.error&&!this.state.busy&&!this.state.isInitial}applyText(){return this.canApply()?"Update":"Nothing to Update"}isUpdate(){return!0}getSourceAndTarget(){let r=this.props.state.cells.get(this.props.transform.ref);return{a:this.props.state.cells.get(this.props.transform.parent).obj,b:r?.obj,bCell:r}}canAutoApply(r){let n=this.props.transform.transformer.definition.canAutoUpdate;if(!n)return!1;let{state:o}=this.props,i=o.cells.get(this.props.transform.ref);if(!i||!i.sourceRef||i.status!=="ok")return!1;let a=o.cells.get(i.sourceRef);return n({a:a.obj,b:i.obj,oldParams:this.getInfo().initialValues,newParams:r},this.plugin)}componentDidMount(){super.componentDidMount(),this.props.toggleCollapsed&&this.subscribe(this.props.toggleCollapsed,()=>this.setState({isCollapsed:!this.state.isCollapsed})),this.subscribe(this.plugin.state.events.object.updated,({ref:r,state:n})=>{this.props.transform.ref!==r||this.props.state!==n||this.state.params!==this.props.transform.params&&(this._getInfo=VA(o=>DB.infoFromTransform(this.plugin,this.props.state,o)),this.setState({params:this.props.transform.params,isInitial:!0}))})}componentDidUpdate(r){if(this.props.transform!==r.transform){let n=this.props.state.cells.get(this.props.transform.ref);this.setState({params:n.params?.values||{},isInitial:!0,error:void 0,simpleOnly:this.state.simpleOnly})}}};var Gc=kt(Qr()),G4=class extends ta{get current(){return this.plugin.managers.structure.hierarchy.behaviors.selection}componentDidMount(){this.subscribe(this.current,()=>this.forceUpdate())}get unitcell(){let{selection:t}=this.plugin.managers.structure.hierarchy;if(t.structures.length===0)return null;let r=[];for(let n of t.structures){let o=n.model;o?.unitcell&&o.unitcell?.cell.obj&&r.push(o.unitcell)}return r.length===0?null:(0,Gc.jsx)(N4,{refs:r,labelMultiple:"Unit Cells"})}get customControls(){let t=[];return this.plugin.genericRepresentationControls.forEach((r,n)=>{let[o,i]=r(this.plugin.managers.structure.hierarchy.selection);o.length>0&&t.push((0,Gc.jsx)("div",{children:(0,Gc.jsx)(N4,{refs:o,labelMultiple:i})},n))}),t.length>0?t:null}render(){return(0,Gc.jsx)(Gc.Fragment,{children:(0,Gc.jsxs)("div",{style:{marginTop:"6px"},children:[this.unitcell,this.customControls]})})}},N4=class extends ta{constructor(){super(...arguments);this.state={showOptions:!1};this.toggleVisibility=r=>{r.preventDefault(),this.plugin.managers.structure.hierarchy.toggleVisibility(this.props.refs),r.currentTarget.blur()};this.highlight=r=>{r.preventDefault(),this.pivot.cell.parent&&yt.Interactivity.Object.Highlight(this.plugin,{state:this.pivot.cell.parent,ref:this.props.refs.map(n=>n.cell.transform.ref)})};this.clearHighlight=r=>{r.preventDefault(),yt.Interactivity.ClearHighlights(this.plugin)};this.focus=r=>{r.preventDefault();let n=!0;for(let i of this.props.refs)if(!i.cell.state.isHidden){n=!1;break}n&&this.plugin.managers.structure.hierarchy.toggleVisibility(this.props.refs,"show");let o=[];for(let i of this.props.refs){if(i.cell.state.isHidden)continue;let a=i.cell.obj?.data.repr.getLoci();a&&o.push(a)}this.plugin.managers.camera.focusLoci(o)};this.toggleOptions=()=>this.setState({showOptions:!this.state.showOptions})}componentDidMount(){this.subscribe(this.plugin.state.events.cell.stateUpdated,r=>{bm.ObjectEvent.isCell(r,this.pivot?.cell)&&this.forceUpdate()})}get pivot(){return this.props.refs[0]}render(){let{refs:r,labelMultiple:n}=this.props;if(r.length===0)return null;let o=r[0],i,a;if(r.length===1){let{obj:A}=o.cell;if(!A)return null;i=A?.label,a=A?.description}else i=`${r.length} ${n||"Objects"}`;return(0,Gc.jsxs)(Gc.Fragment,{children:[(0,Gc.jsxs)("div",{className:"msp-flex-row",children:[(0,Gc.jsxs)("button",{className:"msp-form-control msp-control-button-label",title:`${i}. Click to focus.`,onClick:this.focus,onMouseEnter:this.highlight,onMouseLeave:this.clearHighlight,style:{textAlign:"left"},children:[i," ",(0,Gc.jsx)("small",{children:a})]}),(0,Gc.jsx)(Gr,{svg:o.cell.state.isHidden?Ud:Hm,toggleState:!1,className:"msp-form-control",onClick:this.toggleVisibility,title:`${o.cell.state.isHidden?"Show":"Hide"}`,small:!0,flex:!0}),r.length===1&&(0,Gc.jsx)(Gr,{svg:PE,className:"msp-form-control",onClick:this.toggleOptions,title:"Options",toggleState:this.state.showOptions,flex:!0})]}),r.length===1&&this.state.showOptions&&o.cell.parent&&(0,Gc.jsx)(Gc.Fragment,{children:(0,Gc.jsx)("div",{className:"msp-control-offset",children:(0,Gc.jsx)(ug,{state:o.cell.parent,transform:o.cell.transform,customHeader:"none",autoHideApply:!0})})})]})}};var oo=kt(Qr()),M4=class extends ma{defaultState(){return{header:"Components",isCollapsed:!1,isDisabled:!1,brand:{accent:"blue",svg:pL}}}componentDidMount(){this.subscribe(this.plugin.managers.structure.hierarchy.behaviors.selection,t=>this.setState({description:zp.getSelectedStructuresDescription(this.plugin)}))}renderControls(){return(0,oo.jsxs)(oo.Fragment,{children:[(0,oo.jsx)(Loe,{}),(0,oo.jsx)(Poe,{}),(0,oo.jsx)(G4,{})]})}},Loe=class extends ta{constructor(){super(...arguments);this.state={isEmpty:!0,isBusy:!1,canUndo:!1};this.togglePreset=this.toggleAction("preset");this.toggleAdd=this.toggleAction("add");this.toggleOptions=this.toggleAction("options");this.hideAction=()=>this.setState({action:void 0});this.applyPreset=r=>{if(this.hideAction(),!r)return;let n=this.plugin.managers.structure,{structures:o}=n.hierarchy.selection;r.value===null?n.component.clear(o):n.component.applyPreset(o,r.value)};this.undo=()=>{let r=this.plugin.state.data.undo();r&&this.plugin.runTask(r)}}get isDisabled(){return this.state.isBusy||this.state.isEmpty}componentDidMount(){this.subscribe(this.plugin.managers.structure.hierarchy.behaviors.selection,r=>this.setState({action:this.state.action!=="options"||r.structures.length===0?void 0:"options",isEmpty:r.structures.length===0})),this.subscribe(this.plugin.behaviors.state.isBusy,r=>{this.setState({isBusy:r,action:this.state.action!=="options"?void 0:"options"})}),this.subscribe(this.plugin.state.data.events.historyUpdated,({state:r})=>{this.setState({canUndo:r.canUndo})})}toggleAction(r){return()=>this.setState({action:this.state.action===r?void 0:r})}get presetControls(){return(0,oo.jsx)(tn,{items:this.presetActions,onSelect:this.applyPreset})}get presetActions(){let r=this.plugin.managers.structure.component.pivotStructure,n=this.plugin.builders.structure.representation.getPresets(r?.cell.obj);return tn.createItems(n,{label:o=>o.display.name,category:o=>o.display.group,description:o=>o.display.description})}render(){let r=this.state.canUndo?`Undo ${this.plugin.state.data.latestUndoLabel}`:"Some mistakes of the past can be undone.";return(0,oo.jsxs)(oo.Fragment,{children:[(0,oo.jsxs)("div",{className:"msp-flex-row",children:[(0,oo.jsx)(la,{icon:hB,label:"Preset",title:"Apply a representation preset for the current structure(s).",toggle:this.togglePreset,isSelected:this.state.action==="preset",disabled:this.isDisabled}),(0,oo.jsx)(la,{icon:CB,label:"Add",title:"Add a new representation component for a selection.",toggle:this.toggleAdd,isSelected:this.state.action==="add",disabled:this.isDisabled}),(0,oo.jsx)(la,{icon:tl,label:"",title:"Options that are applied to all applicable representations.",style:{flex:"0 0 40px",padding:0},toggle:this.toggleOptions,isSelected:this.state.action==="options",disabled:this.isDisabled}),(0,oo.jsx)(Gr,{svg:CL,className:"msp-flex-item",flex:"40px",onClick:this.undo,disabled:!this.state.canUndo||this.isDisabled,title:r})]}),this.state.action==="preset"&&this.presetControls,this.state.action==="add"&&(0,oo.jsx)("div",{className:"msp-control-offset",children:(0,oo.jsx)(MT,{onApply:this.hideAction})}),this.state.action==="options"&&(0,oo.jsx)("div",{className:"msp-control-offset",children:(0,oo.jsx)(Toe,{isDisabled:this.isDisabled})})]})}},MT=class extends ta{constructor(){super(...arguments);this.state=this.createState();this.apply=()=>{let r=this.props.forSelection?this.currentStructures:this.selectedStructures;this.props.onApply(),this.plugin.managers.structure.component.add(this.state.values,r)};this.paramsChanged=r=>this.setState({values:r})}createState(){let r=Jp.getAddParams(this.plugin);return{params:r,values:h.getDefaultValues(r)}}get selectedStructures(){return this.plugin.managers.structure.component.currentStructures}get currentStructures(){return this.plugin.managers.structure.hierarchy.current.structures}render(){return(0,oo.jsxs)(oo.Fragment,{children:[(0,oo.jsx)(Mn,{params:this.state.params,values:this.state.values,onChangeValues:this.paramsChanged}),(0,oo.jsx)(hr,{icon:CB,title:"Use Selection and optional Representation to create a new Component.",className:"msp-btn-commit msp-btn-commit-on",onClick:this.apply,style:{marginTop:"1px"},children:"Create Component"})]})}},Toe=class extends ta{constructor(){super(...arguments);this.update=r=>this.plugin.managers.structure.component.setOptions(r)}componentDidMount(){this.subscribe(this.plugin.managers.structure.component.events.optionsUpdated,()=>this.forceUpdate())}render(){return(0,oo.jsx)(Mn,{params:Jp.OptionsParams,values:this.plugin.managers.structure.component.state.options,onChangeValues:this.update,isDisabled:this.props.isDisabled})}},Poe=class extends ta{componentDidMount(){this.subscribe(this.plugin.managers.structure.hierarchy.behaviors.selection,()=>{this.forceUpdate()})}render(){let t=this.plugin.managers.structure.hierarchy.currentComponentGroups;return t.length===0?null:(0,oo.jsx)("div",{style:{marginTop:"6px"},children:t.map(r=>(0,oo.jsx)(Goe,{group:r},r[0].cell.transform.ref))})}},Goe=class extends ta{constructor(){super(...arguments);this.state={action:void 0};this.toggleVisible=r=>{r.preventDefault(),r.currentTarget.blur(),this.plugin.managers.structure.component.toggleVisibility(this.props.group)};this.selectAction=r=>{r&&(r?.value)()};this.remove=()=>this.plugin.managers.structure.hierarchy.remove(this.props.group,!0);this.toggleAction=()=>this.setState({action:this.state.action==="action"?void 0:"action"});this.toggleLabel=()=>this.setState({action:this.state.action==="label"?void 0:"label"});this.highlight=r=>{r.preventDefault(),this.props.group[0].cell.parent&&yt.Interactivity.Object.Highlight(this.plugin,{state:this.props.group[0].cell.parent,ref:this.props.group.map(n=>n.cell.transform.ref)})};this.clearHighlight=r=>{r.preventDefault(),yt.Interactivity.ClearHighlights(this.plugin)};this.focus=()=>{let r=!0;for(let n of this.props.group)if(!n.cell.state.isHidden){r=!1;break}r&&this.plugin.managers.structure.hierarchy.toggleVisibility(this.props.group,"show"),this.plugin.managers.camera.focusSpheres(this.props.group,n=>{if(!n.cell.state.isHidden)return n.cell.obj?.data.boundary.sphere})};this.updateLabel=r=>{this.plugin.managers.structure.component.updateLabel(this.pivot,r)}}get pivot(){return this.props.group[0]}componentDidMount(){this.subscribe(this.plugin.state.events.cell.stateUpdated,r=>{bm.ObjectEvent.isCell(r,this.pivot.cell)&&this.forceUpdate()})}get colorByActions(){let r=this.plugin.managers.structure.component,o=this.pivot.representations[0].cell.transform.params?.colorTheme.name,i=SFe(this.plugin,this.pivot.cell.obj?.data);return tn.createItemsFromSelectOptions(i,{value:a=>()=>r.updateRepresentationsTheme(this.props.group,{color:a[0]}),selected:a=>a[0]===o})}get actions(){let r=this.plugin.managers.structure.component,n=[[tn.Header("Add Representation"),...Jp.getRepresentationTypes(this.plugin,this.props.group[0]).map(o=>tn.Item(o[1],()=>r.addRepresentation(this.props.group,o[0])))]];return this.pivot.representations.length>0&&n.push([tn.Header("Set Coloring",{isIndependent:!0}),...this.colorByActions]),r.canBeModified(this.props.group[0])&&n.push([tn.Header("Modify by Selection"),tn.Item("Include",()=>r.modifyByCurrentSelection(this.props.group,"union"),{icon:gL}),tn.Item("Subtract",()=>r.modifyByCurrentSelection(this.props.group,"subtract"),{icon:mL}),tn.Item("Intersect",()=>r.modifyByCurrentSelection(this.props.group,"intersect"),{icon:dL})]),n.push(tn.Item("Select This",()=>r.selectThis(this.props.group),{icon:Sx})),r.canBeModified(this.props.group[0])&&n.push(tn.Item("Edit Label",this.toggleLabel)),n}get reprLabel(){let r=this.pivot;return r.representations.length===0?"No repr.":r.representations.length===1?r.representations[0].cell.obj?.label:`${r.representations.length} reprs`}render(){let r=this.pivot,n=r.cell,o=n.obj?.label,i=this.reprLabel;return(0,oo.jsxs)(oo.Fragment,{children:[(0,oo.jsxs)("div",{className:"msp-flex-row",children:[(0,oo.jsxs)(hr,{noOverflow:!0,className:"msp-control-button-label",title:`${o}. Click to focus.`,onClick:this.focus,onMouseEnter:this.highlight,onMouseLeave:this.clearHighlight,style:{textAlign:"left"},children:[o,(0,oo.jsx)("small",{className:"msp-25-lower-contrast-text",style:{float:"right"},children:i})]}),(0,oo.jsx)(Gr,{svg:n.state.isHidden?Ud:Hm,toggleState:!1,onClick:this.toggleVisible,title:`${n.state.isHidden?"Show":"Hide"} component`,small:!0,className:"msp-form-control",flex:!0}),(0,oo.jsx)(Gr,{svg:Uc,toggleState:!1,onClick:this.remove,title:"Remove",small:!0,className:"msp-form-control",flex:!0}),(0,oo.jsx)(Gr,{svg:PE,onClick:this.toggleAction,title:"Actions",toggleState:this.state.action==="action",className:"msp-form-control",flex:!0})]}),this.state.action==="label"&&(0,oo.jsx)("div",{className:"msp-control-offset",style:{marginBottom:"6px"},children:(0,oo.jsx)(jl,{label:"Label",control:(0,oo.jsxs)("div",{style:{display:"flex",textAlignLast:"center"},children:[(0,oo.jsx)(_g,{onChange:this.updateLabel,value:o,style:{flex:"1 1 auto",minWidth:0},className:"msp-form-control",blurOnEnter:!0,blurOnEscape:!0}),(0,oo.jsx)(Gr,{svg:Hg,onClick:this.toggleLabel,className:"msp-form-control msp-control-button-label",flex:!0})]})})}),this.state.action==="action"&&(0,oo.jsxs)("div",{className:"msp-accent-offset",children:[(0,oo.jsx)("div",{style:{marginBottom:"6px"},children:(0,oo.jsx)(tn,{items:this.actions,onSelect:this.selectAction,noOffset:!0})}),(0,oo.jsx)("div",{style:{marginBottom:"6px"},children:r.representations.map(a=>(0,oo.jsx)(Noe,{group:this.props.group,representation:a},a.cell.transform.ref))})]})]})}},Noe=class extends ta{constructor(){super(...arguments);this.remove=()=>this.plugin.managers.structure.component.removeRepresentations(this.props.group,this.props.representation);this.toggleVisible=r=>{r.preventDefault(),r.currentTarget.blur(),this.plugin.managers.structure.component.toggleVisibility(this.props.group,this.props.representation)};this.update=r=>this.plugin.managers.structure.component.updateRepresentations(this.props.group,this.props.representation,r)}componentDidMount(){this.subscribe(this.plugin.state.events.cell.stateUpdated,r=>{bm.ObjectEvent.isCell(r,this.props.representation.cell)&&this.forceUpdate()})}render(){let r=this.props.representation.cell;return(0,oo.jsxs)("div",{className:"msp-representation-entry",children:[r.parent&&(0,oo.jsx)(Gs,{header:`${r.obj?.label||""} Representation`,noOffset:!0,children:(0,oo.jsx)(ug,{state:r.parent,transform:r.transform,customHeader:"none",customUpdate:this.update,noMargin:!0})}),(0,oo.jsx)(Gr,{svg:Uc,onClick:this.remove,title:"Remove",small:!0,className:"msp-default-bg",toggleState:!1,style:{position:"absolute",top:0,right:"32px",lineHeight:"24px",height:"24px",textAlign:"right",width:"44px",paddingRight:"6px",background:"none"}}),(0,oo.jsx)(Gr,{svg:this.props.representation.cell.state.isHidden?Ud:Hm,toggleState:!1,onClick:this.toggleVisible,title:"Toggle Visibility",small:!0,className:"msp-default-bg",style:{position:"absolute",top:0,right:0,lineHeight:"24px",height:"24px",textAlign:"right",width:"32px",paddingRight:"6px",background:"none"}})]})}};var AOe=kt(Qa());function gHt(e,t){let r=[],n=t==="auth"?"auth_asym_id":"label_asym_id",o=t==="auth"?"auth_seq_id":"label_seq_id";for(let a of e)if(a.kind==="range")r.push(ce.struct.generator.atomGroups({"chain-test":ce.core.rel.eq([ce.ammp(n),a.asym_id]),"residue-test":ce.core.rel.inRange([ce.ammp(o),a.seq_id_beg,a.seq_id_end])}));else{let A=(a.ins_code??"").trim();r.push(ce.struct.generator.atomGroups({"chain-test":ce.core.rel.eq([ce.ammp(n),a.asym_id]),"residue-test":ce.core.logic.and([ce.core.rel.eq([ce.ammp(o),a.seq_id]),ce.core.rel.eq([ce.ammp("pdbx_PDB_ins_code"),A])])}))}let i=ce.struct.combinator.merge(r);return au(i)}function mHt(e){let t=yo.create();for(let[n,o]of e)for(let i=n;i<=o;i++)yo.add(t,i,i);let r=ce.struct.generator.atomGroups({"atom-test":ce.core.set.has([ce.set(...t.array),ce.ammp("id")])});return au(r)}function dHt(e){let t=yo.create();for(let[n,o]of e)for(let i=n;i<=o;i++)yo.add(t,i.toString(),i.toString());let r=ce.struct.generator.atomGroups({"atom-test":ce.core.set.has([ce.set(...t.array),ce.acp("elementSymbol")])});return au(r)}function pHt(e){let t=ce.struct.generator.atomGroups({"atom-test":ce.core.set.has([ce.set(...e),ce.acp("elementSymbol")])});return au(t)}function fHt(e,t,r){if(!(!e||t.length===0||Number.isNaN(+t[0])))return Number.isNaN(r)?{kind:"single",asym_id:e,seq_id:+t[0],ins_code:t[1]}:{kind:"range",asym_id:e,seq_id_beg:+t[0],seq_id_end:r}}function BHt(e){return e?e.split(":"):[]}function IHt(e){return e.split(",").map(t=>t.trim().split(/\s+|[-]/g).filter(r=>!!r)).map(t=>fHt(t[0],BHt(t[1]),+t[2])).filter(t=>!!t)}function iOe(e){return e.split(",").map(t=>t.trim().split(/\s+|[-]/g).filter(r=>!!r)).filter(t=>t.length===1||t.length===2).map(t=>t.length===1?[+t[0],+t[0]]:[+t[0],+t[1]])}function aOe(e,t){if(t==="atom-id"){let r=iOe(e);return mHt(r)}else if(t==="element-symbol"){if(/[a-zA-Z]/.test(e))return pHt(e.split(",").map(n=>n.trim()));{let n=iOe(e);return dHt(n)}}else{let r=IHt(e);return gHt(r,t)}}var H4=kt(Qa());var hn=kt(Qr());function CHt(e){return Object.keys(e).map(t=>[t,e[t]]).filter(t=>Gt.isBinding(t[1]))}var iw=class extends H4.PureComponent{getBindingComponents(){let t=CHt(this.props.bindings);return(0,hn.jsx)(hn.Fragment,{children:t.map(r=>{let[n,o]=r;return Gt.isEmpty(o)?null:(0,hn.jsxs)("div",{style:{marginBottom:"6px"},children:[(0,hn.jsx)("b",{children:o.action}),(0,hn.jsx)("br",{}),(0,hn.jsx)("span",{dangerouslySetInnerHTML:{__html:Gt.format(o,n)}})]},n)})})}render(){return(0,hn.jsx)(Gd,{children:this.getBindingComponents()})}},Gd=class extends H4.PureComponent{render(){return(0,hn.jsx)("div",{className:"msp-help-text",children:(0,hn.jsx)("div",{children:this.props.children})})}},Nd=class extends H4.PureComponent{constructor(){super(...arguments);this.state={header:this.props.header,isExpanded:!!this.props.initiallyExpanded};this.toggleExpanded=()=>this.setState({isExpanded:!this.state.isExpanded})}render(){return(0,hn.jsxs)("div",{className:"msp-control-group-wrapper",children:[(0,hn.jsx)("div",{className:"msp-control-group-header",children:(0,hn.jsxs)(hr,{onClick:this.toggleExpanded,children:[(0,hn.jsx)(Kn,{svg:this.state.isExpanded?tg:rg}),this.props.header]})}),this.state.isExpanded&&(0,hn.jsx)("div",{className:"msp-control-offset",style:{display:this.state.isExpanded?"block":"none"},children:this.props.children})]})}};function Moe(e){return(0,hn.jsx)("div",{className:"msp-simple-help-section",children:e.header})}var uS=class extends pn{constructor(){super(...arguments);this.getInteractionBindings=VA(r=>{let n;return r.forEach(o=>{let i=o.params?.values;i?.bindings&&Object.keys(i.bindings).length>0&&(n||(n={}),Object.assign(n,i.bindings))}),n})}componentDidMount(){this.subscribe(this.plugin.events.canvas3d.settingsUpdated,()=>this.forceUpdate())}render(){let r=this.getInteractionBindings(this.plugin.state.behaviors.cells);return(0,hn.jsxs)(hn.Fragment,{children:[!this.props.selectOnly&&this.plugin.canvas3d&&(0,hn.jsx)(Nd,{header:"Moving in 3D",children:(0,hn.jsx)(iw,{bindings:this.plugin.canvas3d.attribs.trackball.bindings})},"trackball"),!!r&&(0,hn.jsx)(Nd,{header:"Mouse & Key Controls",children:(0,hn.jsx)(iw,{bindings:r})},"interactions")]})}},k4=class extends pn{componentDidMount(){this.subscribe(this.plugin.events.canvas3d.settingsUpdated,()=>this.forceUpdate())}formatTriggers(t){return t.triggers.map(r=>Gt.Trigger.format(r)).join(" or ")}getTriggerFor(t,r){let o=this.plugin.state.behaviors.select(fr.Generators.ofTransformer(t)),i=o.length===1?o[0].params:void 0,a=i?i.values.bindings:{},A=r in a?a[r]:Gt.Empty;return this.formatTriggers(A)}render(){let t=this.getTriggerFor(ZZ,"clickSelectToggle"),r=this.getTriggerFor(nx,"clickFocus");return(0,hn.jsxs)("div",{children:[(0,hn.jsx)(Moe,{header:"Interface Controls"}),(0,hn.jsxs)(Nd,{header:"Inline Help",children:[(0,hn.jsx)(Gd,{children:"Many user interface elements show a little questionmark icon when hovered over. Clicking the icon toggles the display of an inline help text."}),(0,hn.jsx)(Gd,{children:"Tooltips may provide additional information on a user interface element and are shown when hovering over it with the mouse."})]}),(0,hn.jsx)(Nd,{header:"Selections",children:(0,hn.jsxs)(Gd,{children:["The viewer allows changing colors and representations for selections of atoms, residues or chains. Selections can be created by",(0,hn.jsxs)("ul",{style:{paddingLeft:"20px"},children:[(0,hn.jsxs)("li",{children:["picking elements on the 3D canvas or the sequence view using the mouse, e.g. toggle selection using ",t," (for more see help section on ",(0,hn.jsx)("i",{children:"Mouse Controls"}),")"]}),(0,hn.jsxs)("li",{children:["using the ",(0,hn.jsx)("i",{children:"Add"}),", ",(0,hn.jsx)("i",{children:"Remove"})," and ",(0,hn.jsx)("i",{children:"Only"})," dropdown buttons in the ",(0,hn.jsx)("i",{children:"Manage Selection"})," panel which allow modifing the current selection by predefined sets"]})]})]})}),(0,hn.jsx)(Nd,{header:"Coloring",children:(0,hn.jsxs)(Gd,{children:["There are two ways to color structures. Every representation (e.g. cartoon or spacefill) has a color theme which can be changed using the dropdown for each representation in the ",(0,hn.jsx)("i",{children:"Structure Settings"})," panel. Additionally any selection atoms, residues or chains can by given a custom color. For that, first select the parts of the structure to be colored (see help section on ",(0,hn.jsx)("i",{children:"Selections"}),") and, second, choose a color from the color dropdown botton in the ",(0,hn.jsx)("i",{children:"Selection"})," row of the ",(0,hn.jsx)("i",{children:"Change Representation"})," panel. The theme color can be seen as a base color that is overpainted by the custom color. Custom colors can be removed for a selection with the 'Clear' option in the color dropdown."]})}),(0,hn.jsx)(Nd,{header:"Representations",children:(0,hn.jsxs)(Gd,{children:["Structures can be shown with many different representations (e.g. cartoon or spacefill). The ",(0,hn.jsx)("i",{children:"Change Representation"})," panel offers a collection of predefined styles which can be applied using the ",(0,hn.jsx)("i",{children:"Preset"})," dropdown button. Additionally any selection atoms, residues or chains can by shown with a custom representation. For that, first select the parts of the structure to be mofified (see help section on ",(0,hn.jsx)("i",{children:"Selections"}),") and, second, choose a representation to hide or show from the ",(0,hn.jsx)("i",{children:"Show"})," and ",(0,hn.jsx)("i",{children:"Hide"})," dropdown bottons in the ",(0,hn.jsx)("i",{children:"Selection"})," row of the ",(0,hn.jsx)("i",{children:"Change Representation"})," panel. The ",(0,hn.jsx)("i",{children:"Everything"})," row applies the action to the whole structure instead of the current selection."]})}),(0,hn.jsx)(Nd,{header:"Surroundings",children:(0,hn.jsxs)(Gd,{children:["To show the surroundings of a residue or ligand, click it in the 3D scene or in the sequence widget using ",r,"."]})}),(0,hn.jsx)(Moe,{header:"How-to Guides"}),(0,hn.jsx)(Nd,{header:"Create an Image",children:(0,hn.jsxs)(Gd,{children:[(0,hn.jsxs)("p",{children:["Use the ",(0,hn.jsx)(Kn,{svg:mGe})," icon in the viewport to bring up the screenshot controls."]}),(0,hn.jsxs)("p",{children:["To adjust the size of the image, use the ",(0,hn.jsx)("i",{children:"Resolution"})," dropdown."]})]})}),(0,hn.jsx)(Moe,{header:"Mouse Controls"}),(0,hn.jsx)(uS,{})]})}};var Fn=kt(Qr()),cb=class extends ta{constructor(){super(...arguments);this._toggleSelMode=()=>{this.plugin.selectionMode=!this.plugin.selectionMode}}componentDidMount(){this.subscribe(this.plugin.events.canvas3d.settingsUpdated,()=>this.forceUpdate()),this.subscribe(this.plugin.layout.events.updated,()=>this.forceUpdate()),this.subscribe(this.plugin.behaviors.interaction.selectionMode,()=>this.forceUpdate())}render(){let r=this.props.inline?{background:"transparent",width:"auto",height:"auto",lineHeight:"unset"}:{background:"transparent"};return(0,Fn.jsx)(Gr,{svg:DGe,onClick:this._toggleSelMode,title:"Toggle Selection Mode",style:r,toggleState:this.plugin.selectionMode})}},V4={granularity:aE.Params.granularity},aw=new Map([["add","Add/Union Selection"],["remove","Remove/Subtract Selection"],["intersect","Intersect Selection"],["set","Set Selection"]]),_4=class extends pn{constructor(){super(...arguments);this.state={action:void 0,helper:void 0,isEmpty:!0,isBusy:!1,canUndo:!1,structureSelectionParams:V4};this.set=(r,n)=>{this.plugin.managers.structure.selection.fromSelectionQuery(r,n,!1)};this.selectQuery=(r,n)=>{if(!r||!this.state.action){this.setState({action:void 0});return}let o=this.state.action;n?.shiftKey?this.set(o,r.value):this.setState({action:void 0},()=>{this.set(o,r.value)})};this.selectHelper=(r,n)=>{if(console.log(r),!r||!this.state.action){this.setState({action:void 0,helper:void 0});return}this.setState({helper:r.value.kind})};this.queriesItems=[];this.queriesVersion=-1;this.helpersItems=void 0;this.toggleAdd=this.showAction("add");this.toggleRemove=this.showAction("remove");this.toggleIntersect=this.showAction("intersect");this.toggleSet=this.showAction("set");this.toggleTheme=this.showAction("theme");this.toggleAddComponent=this.showAction("add-component");this.toggleHelp=this.showAction("help");this.setGranuality=({value:r})=>{this.plugin.managers.interactivity.setProps({granularity:r})};this.turnOff=()=>this.plugin.selectionMode=!1;this.undo=()=>{let r=this.plugin.state.data.undo();r&&this.plugin.runTask(r)};this.subtract=()=>{let r=this.plugin.managers.structure.hierarchy.getStructuresWithSelection(),n=[];for(let o of r)n.push(...o.components);n.length!==0&&this.plugin.managers.structure.component.modifyByCurrentSelection(n,"subtract")}}componentDidMount(){this.subscribe(this.plugin.managers.structure.hierarchy.behaviors.selection,n=>{let o=n.hierarchy.structures.length===0;this.state.isEmpty!==o&&this.setState({isEmpty:o}),this.queriesVersion=-1,this.forceUpdate()}),this.subscribe(this.plugin.behaviors.state.isBusy,n=>{this.setState({isBusy:n,action:void 0})}),this.subscribe(this.plugin.managers.interactivity.events.propsUpdated,()=>{this.forceUpdate()}),this.subscribe(this.plugin.state.data.events.historyUpdated,({state:n})=>{this.setState({canUndo:n.canUndo})});let r=this.plugin.spec.components?.selectionTools?.granularityOptions;if(r){let n=new Set(r),o={...V4,granularity:{...V4.granularity,options:V4.granularity.options.filter(([i])=>n.has(i))}};this.setState({structureSelectionParams:o})}}get isDisabled(){return this.state.isBusy||this.state.isEmpty}get structures(){let r=[];for(let n of this.plugin.managers.structure.hierarchy.selection.structures){let o=n.cell.obj?.data;o&&r.push(o)}return r}get queries(){let{registry:r}=this.plugin.query.structure;if(r.version!==this.queriesVersion){let n=this.structures,o=[...r.list,...HDe(n),...kDe(n),...MDe(n)].sort((i,a)=>a.priority-i.priority);this.queriesItems=tn.createItems(o,{filter:i=>i!==Oi.current&&!i.isHidden,label:i=>i.label,category:i=>i.category,description:i=>i.description}),this.queriesVersion=r.version}return this.queriesItems}get helpers(){if(this.helpersItems)return this.helpersItems;let r=[{kind:"residue-list",category:"Helpers",label:"Atom/Residue Identifier List",description:"Create a selection from a list of atom/residue ranges."}];return this.helpersItems=tn.createItems(r,{label:n=>n.label,category:n=>n.category,description:n=>n.description}),this.helpersItems}showAction(r){return()=>this.setState({action:this.state.action===r?void 0:r,helper:void 0})}render(){let r=this.plugin.managers.interactivity.props.granularity,n=this.plugin.spec.components?.selectionTools?.hide,o=this.state.canUndo?`Undo ${this.plugin.state.data.latestUndoLabel}`:"Some mistakes of the past can be undone.",i;if(this.state.action&&!this.state.helper)i=(0,Fn.jsxs)(Fn.Fragment,{children:[this.state.action&&this.state.action!=="theme"&&this.state.action!=="add-component"&&this.state.action!=="help"&&(0,Fn.jsxs)("div",{className:"msp-selection-viewport-controls-actions",children:[(0,Fn.jsx)(tn,{header:aw.get(this.state.action),title:"Click to close.",items:this.queries,onSelect:this.selectQuery,noOffset:!0}),(0,Fn.jsx)(tn,{items:this.helpers,onSelect:this.selectHelper,noOffset:!0})]}),this.state.action==="theme"&&(0,Fn.jsx)("div",{className:"msp-selection-viewport-controls-actions",children:(0,Fn.jsx)(Kl,{header:"Theme",title:"Click to close.",initialExpanded:!0,hideExpander:!0,hideOffset:!0,onHeaderClick:this.toggleTheme,topRightIcon:Vg,children:(0,Fn.jsx)(koe,{onApply:this.toggleTheme})})}),this.state.action==="add-component"&&(0,Fn.jsx)("div",{className:"msp-selection-viewport-controls-actions",children:(0,Fn.jsx)(Kl,{header:"Add Component",title:"Click to close.",initialExpanded:!0,hideExpander:!0,hideOffset:!0,onHeaderClick:this.toggleAddComponent,topRightIcon:Vg,children:(0,Fn.jsx)(MT,{onApply:this.toggleAddComponent,forSelection:!0})})}),this.state.action==="help"&&(0,Fn.jsx)("div",{className:"msp-selection-viewport-controls-actions",children:(0,Fn.jsxs)(Kl,{header:"Help",title:"Click to close.",initialExpanded:!0,hideExpander:!0,hideOffset:!0,onHeaderClick:this.toggleHelp,topRightIcon:Vg,maxHeight:"300px",children:[(0,Fn.jsx)(Nd,{header:"Selection Operations",children:(0,Fn.jsxs)(Gd,{children:["Use ",(0,Fn.jsx)(Kn,{svg:gL,inline:!0})," ",(0,Fn.jsx)(Kn,{svg:mL,inline:!0})," ",(0,Fn.jsx)(Kn,{svg:dL,inline:!0})," ",(0,Fn.jsx)(Kn,{svg:Sx,inline:!0})," to modify the selection."]})}),(0,Fn.jsx)(Nd,{header:"Representation Operations",children:(0,Fn.jsxs)(Gd,{children:["Use ",(0,Fn.jsx)(Kn,{svg:J_,inline:!0})," ",(0,Fn.jsx)(Kn,{svg:pL,inline:!0})," ",(0,Fn.jsx)(Kn,{svg:IL,inline:!0})," ",(0,Fn.jsx)(Kn,{svg:CL,inline:!0})," to color, create components, remove from components, or undo actions."]})}),(0,Fn.jsx)(uS,{selectOnly:!0})]})})]});else if(aw.has(this.state.action)&&this.state.helper==="residue-list"){let a=()=>this.setState({action:void 0,helper:void 0});i=(0,Fn.jsx)("div",{className:"msp-selection-viewport-controls-actions",children:(0,Fn.jsx)(Kl,{header:"Atom/Residue Identifier List",title:"Click to close.",initialExpanded:!0,hideExpander:!0,hideOffset:!0,onHeaderClick:a,topRightIcon:Vg,children:(0,Fn.jsx)(yHt,{modifier:this.state.action,plugin:this.plugin,close:a})})})}return(0,Fn.jsxs)(Fn.Fragment,{children:[(0,Fn.jsxs)("div",{className:"msp-flex-row",style:{background:"none"},children:[!n?.granularity&&(0,Fn.jsx)(EC,{title:"Picking Level for selecting and highlighting",param:this.state.structureSelectionParams.granularity,name:"granularity",value:r,onChange:this.setGranuality,isDisabled:this.isDisabled}),!n?.union&&(0,Fn.jsx)(la,{icon:gL,title:`${aw.get("add")}. Hold shift key to keep menu open.`,toggle:this.toggleAdd,isSelected:this.state.action==="add",disabled:this.isDisabled}),!n?.subtract&&(0,Fn.jsx)(la,{icon:mL,title:`${aw.get("remove")}. Hold shift key to keep menu open.`,toggle:this.toggleRemove,isSelected:this.state.action==="remove",disabled:this.isDisabled}),!n?.intersect&&(0,Fn.jsx)(la,{icon:dL,title:`${aw.get("intersect")}. Hold shift key to keep menu open.`,toggle:this.toggleIntersect,isSelected:this.state.action==="intersect",disabled:this.isDisabled}),!n?.set&&(0,Fn.jsx)(la,{icon:Sx,title:`${aw.get("set")}. Hold shift key to keep menu open.`,toggle:this.toggleSet,isSelected:this.state.action==="set",disabled:this.isDisabled}),!n?.theme&&(0,Fn.jsx)(la,{icon:J_,title:"Apply Theme to Selection",toggle:this.toggleTheme,isSelected:this.state.action==="theme",disabled:this.isDisabled,style:{marginLeft:"10px"}}),!n?.componentAdd&&(0,Fn.jsx)(la,{icon:pL,title:"Create Component of Selection with Representation",toggle:this.toggleAddComponent,isSelected:this.state.action==="add-component",disabled:this.isDisabled}),!n?.componentRemove&&(0,Fn.jsx)(Gr,{svg:IL,title:"Remove/subtract Selection from all Components",onClick:this.subtract,disabled:this.isDisabled}),!n?.undo&&(0,Fn.jsx)(Gr,{svg:CL,onClick:this.undo,disabled:!this.state.canUndo||this.isDisabled,title:o}),!n?.help&&(0,Fn.jsx)(la,{icon:zl,title:"Show/hide help",toggle:this.toggleHelp,style:{marginLeft:"10px"},isSelected:this.state.action==="help"}),!n?.cancel&&this.plugin.config.get(jt.Viewport.ShowSelectionMode)&&(0,Fn.jsx)(Gr,{svg:fL,title:"Turn selection mode off",onClick:this.turnOff})]}),i]})}},Y4=class extends pn{constructor(){super(...arguments);this.state={isEmpty:!0,isBusy:!1};this.clear=()=>this.plugin.managers.interactivity.lociSelects.deselectAll();this.focus=()=>{if(this.plugin.managers.structure.selection.stats.elementCount===0)return;let{sphere:r}=this.plugin.managers.structure.selection.getBoundary();this.plugin.managers.camera.focusSphere(r)};this.highlight=r=>{this.plugin.managers.interactivity.lociHighlights.clearHighlights(),this.plugin.managers.structure.selection.entries.forEach(n=>{this.plugin.managers.interactivity.lociHighlights.highlight({loci:n.selection},!1)})};this.clearHighlight=()=>{this.plugin.managers.interactivity.lociHighlights.clearHighlights()}}componentDidMount(){this.subscribe(this.plugin.managers.structure.selection.events.changed,()=>{this.forceUpdate()}),this.subscribe(this.plugin.managers.structure.hierarchy.behaviors.selection,r=>{let n=r.structures.length===0;this.state.isEmpty!==n&&this.setState({isEmpty:n})}),this.subscribe(this.plugin.behaviors.state.isBusy,r=>{this.setState({isBusy:r})})}get isDisabled(){return this.state.isBusy||this.state.isEmpty}get stats(){let r=this.plugin.managers.structure.selection.stats;return r.structureCount===0||r.elementCount===0?"Nothing Selected":`${Ru(r.label)} Selected`}render(){let r=this.plugin.managers.structure.selection.stats,n=r.structureCount===0||r.elementCount===0;return n&&this.props.hideOnEmpty?null:(0,Fn.jsx)(Fn.Fragment,{children:(0,Fn.jsxs)("div",{className:"msp-flex-row",children:[(0,Fn.jsx)(hr,{noOverflow:!0,onClick:this.focus,title:"Click to Focus Selection",disabled:n,onMouseEnter:this.highlight,onMouseLeave:this.clearHighlight,style:{textAlignLast:n?void 0:"left"},children:this.stats}),!n&&(0,Fn.jsx)(Gr,{svg:fL,onClick:this.clear,title:"Clear",className:"msp-form-control",flex:!0})]})})}},koe=class extends ta{constructor(){super(...arguments);this._params=VA(r=>Jp.getThemeParams(this.plugin,r));this.state={values:h.getDefaultValues(this.params)};this.apply=()=>{this.plugin.managers.structure.component.applyTheme(this.state.values,this.plugin.managers.structure.hierarchy.current.structures),this.props.onApply?.()};this.paramsChanged=r=>this.setState({values:r})}get params(){return this._params(this.plugin.managers.structure.component.pivotStructure)}render(){return(0,Fn.jsxs)(Fn.Fragment,{children:[(0,Fn.jsx)(Mn,{params:this.params,values:this.state.values,onChangeValues:this.paramsChanged}),(0,Fn.jsx)(hr,{icon:J_,className:"msp-btn-commit msp-btn-commit-on",onClick:this.apply,style:{marginTop:"1px"},children:"Apply Theme"})]})}},sOe={idType:h.Select("auth",h.arrayToOptions(["auth","label","atom-id","element-symbol"])),identifiers:h.Text("",{description:"A comma separated list of atom identifiers (e.g. 10, 15-25), element symbols (e.g. N, C or 20-200) or residue ranges in given chain (e.g. A 10-15, B 25, C 30:i)"})},hHt=h.getDefaultValues(sOe);function yHt({modifier:e,plugin:t,close:r}){let[n,o]=AOe.useState(hHt),i=()=>{if(n.identifiers.trim().length!==0)try{r();let a=aOe(n.identifiers,n.idType);t.managers.structure.selection.fromCompiledQuery(e,a,!1)}catch(a){console.error(a),t.log.error("Failed to create selection")}};return(0,Fn.jsxs)(Fn.Fragment,{children:[(0,Fn.jsx)(Mn,{params:sOe,values:n,onChangeValues:o,onEnter:i}),(0,Fn.jsxs)(hr,{className:"msp-btn-commit msp-btn-commit-on",disabled:n.identifiers.trim().length===0,onClick:i,style:{marginTop:"1px"},children:[wu(e)," Selection"]})]})}var Co=kt(Qr()),O4=class extends ma{defaultState(){return{isCollapsed:!1,header:"Measurements",brand:{accent:"gray",svg:sGe}}}renderControls(){return(0,Co.jsxs)(Co.Fragment,{children:[(0,Co.jsx)(Voe,{}),(0,Co.jsx)(Hoe,{})]})}},Hoe=class extends ta{componentDidMount(){this.subscribe(this.plugin.managers.structure.measurement.behaviors.state,()=>{this.forceUpdate()})}renderGroup(t,r){let n=[];for(let o of t)o.obj&&n.push((0,Co.jsx)(Yoe,{cell:o},o.obj.id));return n.length?(0,Co.jsx)(Gs,{header:r,initiallyExpanded:!0,children:n}):null}render(){let t=this.plugin.managers.structure.measurement.state;return(0,Co.jsxs)("div",{style:{marginTop:"6px"},children:[this.renderGroup(t.labels,"Labels"),this.renderGroup(t.distances,"Distances"),this.renderGroup(t.angles,"Angles"),this.renderGroup(t.dihedrals,"Dihedrals"),this.renderGroup(t.orientations,"Orientations"),this.renderGroup(t.planes,"Planes")]})}},Voe=class extends ta{constructor(){super(...arguments);this.state={isBusy:!1,action:void 0};this.measureDistance=()=>{let r=this.plugin.managers.structure.selection.additionsHistory;this.plugin.managers.structure.measurement.addDistance(r[0].loci,r[1].loci)};this.measureAngle=()=>{let r=this.plugin.managers.structure.selection.additionsHistory;this.plugin.managers.structure.measurement.addAngle(r[0].loci,r[1].loci,r[2].loci)};this.measureDihedral=()=>{let r=this.plugin.managers.structure.selection.additionsHistory;this.plugin.managers.structure.measurement.addDihedral(r[0].loci,r[1].loci,r[2].loci,r[3].loci)};this.addLabel=()=>{let r=this.plugin.managers.structure.selection.additionsHistory;this.plugin.managers.structure.measurement.addLabel(r[0].loci)};this.addOrientation=()=>{let r=[];this.plugin.managers.structure.selection.entries.forEach(n=>{r.push(n.selection)}),this.plugin.managers.structure.measurement.addOrientation(r)};this.addPlane=()=>{let r=[];this.plugin.managers.structure.selection.entries.forEach(n=>{r.push(n.selection)}),this.plugin.managers.structure.measurement.addPlane(r)};this.selectAction=r=>{this.toggleAdd(),r&&(r?.value)()};this.toggleAdd=()=>this.setState({action:this.state.action==="add"?void 0:"add"});this.toggleOptions=()=>this.setState({action:this.state.action==="options"?void 0:"options"})}componentDidMount(){this.subscribe(this.selection.events.additionsHistoryUpdated,()=>{this.forceUpdate(),this.updateOrderLabels()}),this.subscribe(this.plugin.behaviors.state.isBusy,r=>{this.setState({isBusy:r})})}componentWillUnmount(){this.clearOrderLabels(),super.componentWillUnmount()}componentDidUpdate(r,n){this.state.action!==n.action&&this.updateOrderLabels()}clearOrderLabels(){this.plugin.managers.structure.measurement.addOrderLabels([])}updateOrderLabels(){if(this.state.action!=="add"){this.clearOrderLabels();return}let r=[],n=this.selection.additionsHistory;for(let o=0;o<n.length&&o<4;o++)r.push(n[o].loci);this.plugin.managers.structure.measurement.addOrderLabels(r)}get selection(){return this.plugin.managers.structure.selection}get actions(){let r=this.selection.additionsHistory;return[{kind:"item",label:`Label ${r.length===0?" (1 selection item required)":" (1st selection item)"}`,value:this.addLabel,disabled:r.length===0},{kind:"item",label:`Distance ${r.length<2?" (2 selection items required)":" (top 2 selection items)"}`,value:this.measureDistance,disabled:r.length<2},{kind:"item",label:`Angle ${r.length<3?" (3 selection items required)":" (top 3 items)"}`,value:this.measureAngle,disabled:r.length<3},{kind:"item",label:`Dihedral ${r.length<4?" (4 selection items required)":" (top 4 selection items)"}`,value:this.measureDihedral,disabled:r.length<4},{kind:"item",label:`Orientation ${r.length===0?" (selection required)":" (current selection)"}`,value:this.addOrientation,disabled:r.length===0},{kind:"item",label:`Plane ${r.length===0?" (selection required)":" (current selection)"}`,value:this.addPlane,disabled:r.length===0}]}highlight(r){this.plugin.managers.interactivity.lociHighlights.highlightOnly({loci:r},!1)}moveHistory(r,n){this.plugin.managers.structure.selection.modifyHistory(r,n,4)}focusLoci(r){this.plugin.managers.camera.focusLoci(r)}historyEntry(r,n){let o=this.plugin.managers.structure.selection.additionsHistory;return(0,Co.jsxs)("div",{className:"msp-flex-row",onMouseEnter:()=>this.highlight(r.loci),onMouseLeave:()=>this.plugin.managers.interactivity.lociHighlights.clearHighlights(),children:[(0,Co.jsxs)(hr,{noOverflow:!0,title:"Click to focus. Hover to highlight.",onClick:()=>this.focusLoci(r.loci),style:{width:"auto",textAlign:"left"},children:[n,". ",(0,Co.jsx)("span",{dangerouslySetInnerHTML:{__html:r.label}})]}),o.length>1&&(0,Co.jsx)(Gr,{svg:TE,small:!0,className:"msp-form-control",onClick:()=>this.moveHistory(r,"up"),flex:"20px",title:"Move up"}),o.length>1&&(0,Co.jsx)(Gr,{svg:LE,small:!0,className:"msp-form-control",onClick:()=>this.moveHistory(r,"down"),flex:"20px",title:"Move down"}),(0,Co.jsx)(Gr,{svg:Uc,small:!0,className:"msp-form-control",onClick:()=>this.plugin.managers.structure.selection.modifyHistory(r,"remove"),flex:!0,title:"Remove"})]},r.id)}add(){let r=this.plugin.managers.structure.selection.additionsHistory,n=[];for(let a=0,A=Math.min(r.length,4);a<A;a++)n.push(this.historyEntry(r[a],a+1));let i=this.plugin.config.get(jt.Viewport.ShowSelectionMode)?(0,Co.jsxs)(Co.Fragment,{children:[" ","(toggle ",(0,Co.jsx)(cb,{inline:!0})," mode)"]}):null;return(0,Co.jsxs)(Co.Fragment,{children:[(0,Co.jsx)(tn,{items:this.actions,onSelect:this.selectAction}),n.length>0&&(0,Co.jsx)("div",{className:"msp-control-offset",children:n}),n.length===0&&(0,Co.jsx)("div",{className:"msp-control-offset msp-help-text",children:(0,Co.jsxs)("div",{className:"msp-help-description",children:[(0,Co.jsx)(Kn,{svg:zl,inline:!0}),"Add one or more selections",i]})})]})}render(){return(0,Co.jsxs)(Co.Fragment,{children:[(0,Co.jsxs)("div",{className:"msp-flex-row",children:[(0,Co.jsx)(la,{icon:CB,label:"Add",toggle:this.toggleAdd,isSelected:this.state.action==="add",disabled:this.state.isBusy,className:"msp-btn-apply-simple"}),(0,Co.jsx)(la,{icon:tl,label:"",title:"Options",toggle:this.toggleOptions,isSelected:this.state.action==="options",disabled:this.state.isBusy,style:{flex:"0 0 40px",padding:0}})]}),this.state.action==="add"&&this.add(),this.state.action==="options"&&(0,Co.jsx)(_oe,{})]})}},_oe=class extends ta{constructor(){super(...arguments);this.state={isDisabled:!1};this.changed=r=>{this.plugin.managers.structure.measurement.setOptions(r)}}componentDidMount(){this.subscribe(this.plugin.managers.structure.measurement.behaviors.state,()=>{this.forceUpdate()}),this.subscribe(this.plugin.behaviors.state.isBusy,r=>{this.setState({isDisabled:r})})}render(){let r=this.plugin.managers.structure.measurement.state;return(0,Co.jsx)("div",{className:"msp-control-offset",children:(0,Co.jsx)(Mn,{params:_q,values:r.options,onChangeValues:this.changed,isDisabled:this.state.isDisabled})})}},Yoe=class extends ta{constructor(){super(...arguments);this.state={showUpdate:!1};this.delete=()=>{yt.State.RemoveObject(this.plugin,{state:this.props.cell.parent,ref:this.props.cell.transform.parent,removeParentGhosts:!0})};this.toggleVisibility=r=>{r.preventDefault(),yt.State.ToggleVisibility(this.plugin,{state:this.props.cell.parent,ref:this.props.cell.transform.parent}),r.currentTarget.blur()};this.highlight=()=>{if(!this.selections)return;this.plugin.managers.interactivity.lociHighlights.clearHighlights();for(let o of this.lociArray)this.plugin.managers.interactivity.lociHighlights.highlight({loci:o},!1);let n=this.props.cell.obj?.data.repr.getAllLoci();if(n)for(let o of n)this.plugin.managers.interactivity.lociHighlights.highlight({loci:o},!1)};this.clearHighlight=()=>{this.plugin.managers.interactivity.lociHighlights.clearHighlights()};this.toggleUpdate=()=>this.setState({showUpdate:!this.state.showUpdate});this.focus=()=>{if(!this.selections)return;let n=pr.getBundleBoundingSphere({loci:this.lociArray});n&&this.plugin.managers.camera.focusSphere(n)};this.selectAction=r=>{r&&(this.setState({showUpdate:!1}),(r?.value)())}}componentDidMount(){this.subscribe(this.plugin.state.events.cell.stateUpdated,r=>{this.forceUpdate()})}get selections(){return this.props.cell.obj?.data.sourceData}get lociArray(){let r=this.selections;return r?r.infos?[r.infos[0].loci]:r.pairs?r.pairs[0].loci:r.triples?r.triples[0].loci:r.quads?r.quads[0].loci:r.locis?r.locis:[]:[]}get label(){let r=this.selections;return r?r.infos?Um(r.infos[0].loci,{condensed:!0}):r.pairs?wv(r.pairs[0],{condensed:!0,unitLabel:this.plugin.managers.structure.measurement.state.options.distanceUnitLabel}):r.triples?Rv(r.triples[0],{condensed:!0}):r.quads?Uv(r.quads[0],{condensed:!0}):r.locis?MQ(r.locis,{countsOnly:!0}):"<empty>":"<empty>"}get actions(){return this.props.cell.sourceRef,[tn.Item("Select This",()=>this.plugin.managers.structure.selection.fromSelections(this.props.cell.sourceRef),{icon:Sx})]}render(){let{cell:r}=this.props,{obj:n}=r;return n?(0,Co.jsxs)(Co.Fragment,{children:[(0,Co.jsxs)("div",{className:"msp-flex-row",onMouseEnter:this.highlight,onMouseLeave:this.clearHighlight,children:[(0,Co.jsx)("button",{className:"msp-form-control msp-control-button-label msp-no-overflow",title:"Click to focus. Hover to highlight.",onClick:this.focus,style:{width:"auto",textAlign:"left"},children:(0,Co.jsx)("span",{dangerouslySetInnerHTML:{__html:this.label}})}),(0,Co.jsx)(Gr,{svg:r.state.isHidden?Ud:Hm,toggleState:!1,small:!0,className:"msp-form-control",onClick:this.toggleVisibility,flex:!0,title:r.state.isHidden?"Show":"Hide"}),(0,Co.jsx)(Gr,{svg:Uc,small:!0,className:"msp-form-control",onClick:this.delete,flex:!0,title:"Delete",toggleState:!1}),(0,Co.jsx)(Gr,{svg:PE,className:"msp-form-control",onClick:this.toggleUpdate,flex:!0,title:"Actions",toggleState:this.state.showUpdate})]},n.id),this.state.showUpdate&&r.parent&&(0,Co.jsx)(Co.Fragment,{children:(0,Co.jsxs)("div",{className:"msp-accent-offset",children:[(0,Co.jsx)(tn,{items:this.actions,onSelect:this.selectAction,noOffset:!0}),(0,Co.jsx)(Gs,{header:"Options",noOffset:!0,children:(0,Co.jsx)(ug,{state:r.parent,transform:r.transform,customHeader:"none",autoHideApply:!0})})]})})]}):null}};var TC=kt(Qr());function Ooe(e,t,r,n){let o=je.indexOf(t.unit.elements,t.element),i=W.Loci(t.structure,[{unit:t.unit,indices:Ee.ofSingleton(o)}]),a=n==="residue"?W.Loci.extendToWholeResidues(i):W.Loci.extendToWholeChains(i),A=Ke.entity.pdbx_description(t).join(", ");for(let s of r.units){let c=W.Loci(a.structure,[{unit:s,indices:a.elements[0].indices}]),l=Um(c,{reverse:!0,hidePrefix:!0,htmlStyling:!1,granularity:n});l||(l=Um(c,{hidePrefix:!1,htmlStyling:!1})),r.units.length>1&&(l+=` | ${c.elements[0].unit.conformation.operator.name}`);let u={label:l,category:A,loci:c};e.has(A)?e.get(A).push(u):e.set(A,[u])}}function QHt(e){let t=new Map,r=W.Location.create(e);for(let o of e.unitSymmetryGroups){if(!ge.isAtomic(o.units[0]))continue;r.unit=o.units[0],r.element=o.elements[0];let i=ge.Traits.is(r.unit.traits,ge.Trait.MultiChain),a=Ke.entity.type(r),A=a==="non-polymer",s=a==="branched";if(!!Ke.entity.prd_id(r))Ooe(t,r,o,"chain");else if(A&&!i)Ooe(t,r,o,"residue");else if(s||A&&i){let l=r.unit,{index:u}=l.model.atomicHierarchy.residueAtomSegments,g=-1;for(let m=0,p=l.elements.length;m<p;++m){let d=l.elements[m],f=u[d];f!==g&&(r.element=d,Ooe(t,r,o,"residue"),g=f)}}}let n=[];return t.forEach((o,i)=>{o.length===1?n.push({label:`${i}: ${o[0].label}`,loci:o[0].loci}):o.length<2e3&&n.push(...o)}),n}var J4=class extends pn{constructor(){super(...arguments);this.state={isBusy:!1,showAction:!1};this.getSelectionItems=VA(r=>{let n=[];for(let o of r){let i=o.cell.obj?.data;if(i){let a=QHt(i);a.length>0&&n.push([tn.Header(i.label,{description:i.label}),...tn.createItems(a,{label:A=>A.label,category:A=>A.category,description:A=>A.label})])}}return n});this.selectAction=(r,n)=>{if(!r||!this.state.showAction){this.setState({showAction:!1});return}let o=r.value;n?.shiftKey?this.plugin.managers.structure.focus.addFromLoci(o.loci):this.plugin.managers.structure.focus.set(o),this.focusCamera(!0)};this.toggleAction=()=>this.setState({showAction:!this.state.showAction});this.focusCameraClick=()=>{this.focusCamera(!1)};this.clear=()=>{this.plugin.managers.structure.focus.clear(),this.plugin.managers.camera.reset()};this.highlightCurrent=()=>{let{current:r}=this.plugin.managers.structure.focus;r&&this.plugin.managers.interactivity.lociHighlights.highlightOnly({loci:r.loci},!1)};this.clearHighlights=()=>{this.plugin.managers.interactivity.lociHighlights.clearHighlights()}}componentDidMount(){this.subscribe(this.plugin.managers.structure.focus.behaviors.current,r=>{this.getSelectionItems([]),this.forceUpdate()}),this.subscribe(this.plugin.managers.structure.focus.events.historyUpdated,r=>{this.forceUpdate()}),this.subscribe(this.plugin.behaviors.state.isBusy,r=>{this.setState({isBusy:r,showAction:!1})})}get isDisabled(){return this.state.isBusy||this.plugin.managers.structure.hierarchy.selection.structures.length===0}get actionItems(){let r=[],{history:n}=this.plugin.managers.structure.focus;n.length>0&&r.push([tn.Header("History",{description:"Previously focused on items."}),...tn.createItems(n,{label:a=>a.label,description:a=>a.category&&a.label!==a.category?`${a.category} | ${a.label}`:a.label})]);let o=this.getSelectionItems(this.plugin.managers.structure.hierarchy.selection.structures);if(o.length===1){let A=o[0][0];A.initiallyExpanded=!0}let i=[];return o.length>0&&i.push(...o),r.length>0&&i.push(...r),i}focusCamera(r){let{current:n}=this.plugin.managers.structure.focus;n&&this.plugin.managers.camera.focusLoci(n.loci,{optimizeDirection:r})}getToggleBindingLabel(){let r=this.plugin.state.behaviors.transforms.get(nx.id);if(!r)return"";let n=r.params?.bindings.clickFocus;return!n||Gt.isEmpty(n)?"":Gt.formatTriggers(n)}render(){let{current:r}=this.plugin.managers.structure.focus,n=r?.label||"Nothing Focused",o="Click to Center Camera";if(!r){o="Select focus using the menu";let i=this.getToggleBindingLabel();i&&(o+=`
|
|
or use '${i}' on element`)}return(0,TC.jsxs)(TC.Fragment,{children:[(0,TC.jsxs)("div",{className:"msp-flex-row",children:[(0,TC.jsx)(hr,{noOverflow:!0,onClick:this.focusCameraClick,title:o,onMouseEnter:this.highlightCurrent,onMouseLeave:this.clearHighlights,disabled:this.isDisabled||!r,style:{textAlignLast:r?"left":void 0},children:n}),r&&(0,TC.jsx)(Gr,{svg:fL,onClick:this.clear,title:"Clear",className:"msp-form-control",flex:!0,disabled:this.isDisabled}),(0,TC.jsx)(la,{icon:dGe,title:"Select a focus target to center on an show its surroundings. Hold shift to focus on multiple targets.",toggle:this.toggleAction,isSelected:this.state.showAction,disabled:this.isDisabled,style:{flex:"0 0 40px",padding:0}})]}),this.state.showAction&&(0,TC.jsx)(tn,{items:this.actionItems,onSelect:this.selectAction})]})}};var Eu=kt(Qr()),z4=class extends ma{constructor(){super(...arguments);this.item=r=>{let n=this.plugin.managers.structure.hierarchy.seletionSet,o;switch(r.kind){case"model":{let a=r.cell.obj?.data;a&&_t.TrajectoryInfo.get(a).size>1&&(o=`${r.cell.obj?.data.entryId} | Model ${_t.TrajectoryInfo.get(a).index+1} of ${_t.TrajectoryInfo.get(a).size}`),o=`${r.cell.obj?.data.entryId} | ${r.cell.obj?.label}`;break}case"structure":{let a=r.cell.obj?.data.models[0];if(a&&_t.TrajectoryInfo.get(a).size>1){o=`${a.entryId} | ${r.cell.obj?.label} (Model ${_t.TrajectoryInfo.get(a).index+1} of ${_t.TrajectoryInfo.get(a).size})`;break}else if(a){o=`${a.entryId} | ${r.cell.obj?.label}`;break}else{o=`${r.cell.obj?.label}`;break}}default:o=r.cell.obj?.label;break}return{kind:"item",label:o||r.kind,selected:n.has(r.cell.transform.ref),value:[r]}};this.getTrajectoryItems=r=>r.models.length===0?this.item(r):[tn.Header(r.cell.obj?.label),...r.models.map(this.getModelItems)];this.getModelItems=r=>{if(r.structures.length===0)return this.item(r);if(r.structures.length===1){let n=this.plugin.managers.structure.hierarchy.seletionSet,o=r.structures[0];return{label:`${r.cell.obj?.label} | ${o.cell.obj?.label}`,selected:n.has(o.cell.transform.ref),value:[r,o]}}return[tn.Header(r.cell.obj?.label),...r.structures.map(this.item)]};this.selectHierarchy=r=>{if(!r||r.length===0)return;let n=[];for(let o of r)for(let i of o.value)n.push(i);this.plugin.managers.structure.hierarchy.updateCurrent(n,r[0].selected?"remove":"add")};this.toggleHierarchy=()=>this.setState({show:this.state.show!=="hierarchy"?"hierarchy":void 0});this.togglePreset=()=>this.setState({show:this.state.show!=="presets"?"presets":void 0});this.applyPreset=r=>{if(this.setState({show:void 0}),!r)return;let n=this.plugin.managers.structure,{trajectories:o}=n.hierarchy.selection;n.hierarchy.applyPreset(o,r.value)};this.updateModelQueueParams=void 0;this.isUpdatingModel=!1;this.updateStructureModel=r=>{this.updateModelQueueParams=r,this._updateStructureModel()};this.updateStructure=r=>{let{selection:n}=this.plugin.managers.structure.hierarchy,o=n.structures[0];return this.plugin.managers.structure.hierarchy.updateStructure(o,r)}}defaultState(){return{header:"Structure",isCollapsed:!1,isBusy:!1,brand:{accent:"purple",svg:oGe}}}componentDidMount(){this.subscribe(this.plugin.managers.structure.hierarchy.behaviors.selection,()=>this.forceUpdate()),this.subscribe(this.plugin.behaviors.state.isBusy,r=>{this.setState({isBusy:r})})}get hierarchyItems(){let r=this.plugin.managers.structure.hierarchy,{current:n}=r,o=[];return n.trajectories.length>1&&o.push([tn.Header("Trajectories"),...n.trajectories.map(this.item)]),(n.models.length>1||n.trajectories.length>1)&&o.push([tn.Header("Models"),...n.models.map(this.item)]),n.trajectories.length===1&&n.models.length===1?o.push(...n.structures.map(this.item)):n.structures.length>0&&o.push([tn.Header("Structures"),...n.structures.map(this.item)]),o}get isEmpty(){let{structures:r,models:n,trajectories:o}=this.plugin.managers.structure.hierarchy.current;return o.length===0&&n.length===0&&r.length===0}get label(){let{structures:r,models:n,trajectories:o}=this.plugin.managers.structure.hierarchy.selection;if(r.length===1){let i=r[0];return i.model?.trajectory?.models&&i.model.trajectory.models.length===1?i.cell.obj?.data.label:i.model?`${i.model.cell.obj?.label} | ${i.cell.obj?.data.label}`:i.cell.obj?.data.label}if(r.length>1){let a=r[0]?.model?.trajectory,A=!0;for(let s of r)if(s?.model?.trajectory!==a){A=!1;break}return A&&a?`${a.cell.obj?.label} | ${r.length} structures`:`${r.length} structures`}if(n.length>0){let i=n[0].trajectory;if(n.length===1){let A=n[0].cell.obj?.data;return A&&_t.TrajectoryInfo.get(A).size>1?`${i?.cell.obj?.label} | Model ${_t.TrajectoryInfo.get(A).index+1} of ${_t.TrajectoryInfo.get(A).size}`:`${i?.cell.obj?.label} | Model`}let a=!0;for(let A of n)if(A.trajectory!==i){a=!1;break}return a?`${i?.cell.obj?.label} | ${n.length} models`:`${n.length} models`}return o.length>0?o.length===1?`${o[0].cell.obj?.label} trajectory`:`${o.length} trajectories`:o.length===0&&n.length===0&&r.length===0?"Nothing Loaded":"Nothing Selected"}get presetActions(){let r=[],{trajectories:n}=this.plugin.managers.structure.hierarchy.selection;if(n.length===0)return r;let o=this.plugin.builders.structure.hierarchy.getPresets(n[0].cell.obj);if(n.length>1){let i=new Set(o);for(let a=1;a<n.length;a++){let A=this.plugin.builders.structure.hierarchy.getPresets(n[a].cell.obj),s=new Set(A);for(let c of A)s.has(c)||i.delete(c)}o=o.filter(a=>i.has(a))}for(let i of o)r.push(tn.Item(i.display.name,i,{description:i.display.description}));return r}async _updateStructureModel(){if(!this.updateModelQueueParams||this.isUpdatingModel)return;let r=this.updateModelQueueParams;this.updateModelQueueParams=void 0;try{this.isUpdatingModel=!0;let{selection:n}=this.plugin.managers.structure.hierarchy,o=n.structures[0].model;await this.plugin.state.updateTransform(this.plugin.state.data,o.cell.transform.ref,r,"Model Index")}finally{this.isUpdatingModel=!1,this._updateStructureModel()}}get modelIndex(){let{selection:r}=this.plugin.managers.structure.hierarchy;if(r.structures.length!==1)return null;let n=r.structures[0].model;if(!n||n.cell.transform.transformer!==ze.Model.ModelFromTrajectory||!n.cell.obj||_t.TrajectoryInfo.get(n.cell.obj.data).size<=1)return null;let o=n.cell.params?.definition;return o?(0,Eu.jsx)(Mn,{params:o,values:n.cell.params?.values,onChangeValues:this.updateStructureModel,isDisabled:this.state.isBusy}):null}get structureType(){let{selection:r}=this.plugin.managers.structure.hierarchy;if(r.structures.length!==1)return null;let n=r.structures[0];return!n.cell.params?.definition||!n.cell.parent?null:(0,Eu.jsx)(ug,{state:n.cell.parent,transform:n.cell.transform,customHeader:"none",customUpdate:this.updateStructure,noMargin:!0,autoHideApply:!0})}get transform(){let{selection:r}=this.plugin.managers.structure.hierarchy;if(r.structures.length!==1)return null;let n=r.structures[0];if(!n.cell.parent)return null;let o=fr.tryFindDecorator(this.plugin.state.data,n.cell.transform.ref,ze.Model.TransformStructureConformation);if(o)return(0,Eu.jsx)(Gs,{header:"Conformation Transform",children:(0,Eu.jsx)(ug,{state:o.parent,transform:o.transform,customHeader:"none",noMargin:!0,autoHideApply:!0})})}renderControls(){let r=this.state.isBusy||this.isEmpty,n=this.presetActions,o=this.label;return(0,Eu.jsxs)(Eu.Fragment,{children:[(0,Eu.jsxs)("div",{className:"msp-flex-row",style:{marginTop:"1px"},children:[(0,Eu.jsx)(hr,{noOverflow:!0,flex:!0,onClick:this.toggleHierarchy,disabled:r,title:o,children:o}),n.length>0&&(0,Eu.jsx)(Gr,{svg:hB,className:"msp-form-control",flex:"40px",onClick:this.togglePreset,title:"Apply a structure presets to the current hierarchy.",toggleState:this.state.show==="presets",disabled:r})]}),this.state.show==="hierarchy"&&(0,Eu.jsx)(tn,{items:this.hierarchyItems,onSelect:this.selectHierarchy,multiselect:!0}),this.state.show==="presets"&&(0,Eu.jsx)(tn,{items:n,onSelect:this.applyPreset}),this.modelIndex,this.structureType,this.transform,(0,Eu.jsxs)("div",{style:{marginTop:"6px"},children:[(0,Eu.jsx)(J4,{}),(0,Eu.jsx)(Y4,{hideOnEmpty:!0})]})]})}};var Oo=kt(Qr()),K4=class extends ma{defaultState(){return{header:"Volume Streaming",isCollapsed:!1,isBusy:!1,isHidden:!0,brand:{accent:"cyan",svg:z$}}}componentDidMount(){this.subscribe(this.plugin.managers.structure.hierarchy.behaviors.selection,()=>{this.setState({isHidden:!this.canEnable(),description:zp.getSelectedStructuresDescription(this.plugin)})}),this.subscribe(this.plugin.state.events.cell.stateUpdated,t=>{en.hasTag(t.cell.transform,Is.RootTag)&&this.forceUpdate()}),this.subscribe(this.plugin.behaviors.state.isBusy,t=>{this.setState({isBusy:t})})}get pivot(){return this.plugin.managers.structure.hierarchy.selection.structures[0]}canEnable(){let{selection:t}=this.plugin.managers.structure.hierarchy;if(t.structures.length!==1)return!1;let r=this.pivot.cell;return r.obj?!!cL.definition.isApplicable?.(r.obj,r.transform,this.plugin):!1}renderEnable(){let t=this.pivot;if(!t.cell.parent)return null;let r=fr.findTagInSubtree(t.cell.parent.tree,this.pivot.cell.transform.ref,Is.RootTag),n=r&&t.cell.parent.cells.get(r),o=n&&n.status==="error"?{header:n.errorText&&n.errorText?.includes("404")?"No Density Data Available":"Error Enabling",icon:j$,title:n.errorText}:n&&n.obj?.data.entries.length===0?{header:"Error Enabling",icon:j$,title:"No Entry for Streaming Found"}:{header:"Enable",icon:Hg,title:"Enable"};return(0,Oo.jsx)(DC,{state:t.cell.parent,action:cL,initiallyCollapsed:!0,nodeRef:t.cell.transform.ref,simpleApply:o})}renderParams(){let t=this.pivot;if(!t.cell.parent)return null;let r=t.volumeStreaming?.cell.transform.params?.entry.params.view.name==="selection-box"&&this.plugin.state.behaviors.cells.get(nx.id)?.params?.values?.bindings;return(0,Oo.jsxs)(Oo.Fragment,{children:[(0,Oo.jsx)(ug,{state:t.cell.parent,transform:t.volumeStreaming.cell.transform,customHeader:"none",noMargin:!0}),r&&(0,Oo.jsx)(Gs,{header:"Controls Help",children:(0,Oo.jsx)(iw,{bindings:r})})]})}renderControls(){let t=this.pivot;return t?t.volumeStreaming?this.renderParams():this.renderEnable():null}},j4=class extends ma{constructor(){super(...arguments);this.item=r=>{let n=this.plugin.managers.volume.hierarchy.selection,o=r.cell.obj?.label||"Volume";return{kind:"item",label:(r.kind==="lazy-volume"?"Load ":"")+(o||r.kind),selected:n===r,value:r}};this.selectCurrent=r=>{if(this.toggleHierarchy(),!r)return;let n=r.value;n.kind==="volume"?this.plugin.managers.volume.hierarchy.setCurrent(n):this.lazyLoad(n.cell)};this.selectAdd=r=>{r&&(this.setState({show:void 0}),r.value())};this.toggleHierarchy=()=>this.setState({show:this.state.show!=="hierarchy"?"hierarchy":void 0});this.toggleAddRepr=()=>this.setState({show:this.state.show!=="add-repr"?"add-repr":void 0});this.toggleVisibility=()=>{let r=this.plugin.managers.volume.hierarchy,{current:n}=r,o=!n.volumes[0]?.representations[0]?.cell.state.isHidden;this.plugin.managers.volume.hierarchy.toggleVisibility(n.volumes.flatMap(i=>i.representations),o?"hide":"show")}}defaultState(){return{header:"Volume",isCollapsed:!1,isBusy:!1,isHidden:!0,brand:{accent:"purple",svg:z$}}}componentDidMount(){this.subscribe(this.plugin.managers.volume.hierarchy.behaviors.selection,r=>{this.setState({isHidden:r.hierarchy.volumes.length===0&&r.hierarchy.lazyVolumes.length===0})}),this.subscribe(this.plugin.behaviors.state.isBusy,r=>{this.setState({isBusy:r})})}get hierarchyItems(){let r=this.plugin.managers.volume.hierarchy,{current:n}=r,o=[];for(let i of n.volumes)o.push(this.item(i));for(let i of n.lazyVolumes)o.push(this.item(i));return o}get addActions(){let r=this.plugin.managers.volume.hierarchy,n=r.selection;return[...sE.getRepresentationTypes(this.plugin,n).map(i=>tn.Item(i[1],()=>r.addRepresentation(n,i[0])))]}get isEmpty(){let{volumes:r,lazyVolumes:n}=this.plugin.managers.volume.hierarchy.current;return r.length===0&&n.length===0}get label(){if(this.state.loadingLabel)return`Loading ${this.state.loadingLabel}...`;let r=this.plugin.managers.volume.hierarchy.selection;return r?r?.cell.obj?.label||"Volume":"Nothing Selected"}async lazyLoad(r){let{url:n,isBinary:o,format:i,entryId:a,isovalues:A}=r.obj.data;this.setState({isBusy:!0,loadingLabel:r.obj.label});try{let s=this.plugin;await s.dataTransaction(async()=>{let c=await s.builders.data.download({url:n,isBinary:o},{state:{isGhost:!0}}),l=await s.dataFormats.get(i).parse(s,c,{entryId:a}),u=l.volume||l.volumes[0];if(!u?.isOk)throw new Error("Failed to parse any volume.");let g=s.build();for(let m of A)g.to(l.volumes?.[m.volumeIndex??0]??l.volume).apply(ze.Representation.VolumeRepresentation3D,Op(this.plugin,u.data,{type:"isosurface",typeParams:{alpha:m.alpha??1,isoValue:m.type==="absolute"?{kind:"absolute",absoluteValue:m.value}:{kind:"relative",relativeValue:m.value}},color:"uniform",colorParams:{value:m.color}}));await g.commit(),await s.build().delete(r).commit()})}finally{this.setState({isBusy:!1,loadingLabel:void 0})}}renderControls(){let r=this.state.isBusy||this.isEmpty,n=this.label,o=this.plugin.managers.volume.hierarchy.selection,i=this.plugin.managers.volume.hierarchy,{current:a}=i;return(0,Oo.jsxs)(Oo.Fragment,{children:[(0,Oo.jsxs)("div",{className:"msp-flex-row",style:{marginTop:"1px"},children:[(0,Oo.jsx)(hr,{noOverflow:!0,flex:!0,onClick:this.toggleHierarchy,disabled:r,title:n,children:n}),!this.isEmpty&&o&&(0,Oo.jsx)(Gr,{svg:CB,onClick:this.toggleAddRepr,title:"Apply a structure presets to the current hierarchy.",toggleState:this.state.show==="add-repr",disabled:r}),!this.isEmpty&&(0,Oo.jsx)(Gr,{svg:Hm,onClick:this.toggleVisibility,toggleState:!1,title:"Toggle visibility of all volumes.",disabled:r})]}),this.state.show==="hierarchy"&&(0,Oo.jsx)(tn,{items:this.hierarchyItems,onSelect:this.selectCurrent}),this.state.show==="add-repr"&&(0,Oo.jsx)(tn,{items:this.addActions,onSelect:this.selectAdd}),a.volumes.length>0&&(0,Oo.jsx)("div",{style:{marginTop:"6px"},children:a.volumes.map(A=>(0,Oo.jsx)(EHt,{volume:A},A.cell.transform.ref))})]})}};function EHt({volume:e}){return(0,Oo.jsxs)(Oo.Fragment,{children:[(0,Oo.jsx)("div",{className:"msp-control-group-header",style:{marginTop:"1px"},children:(0,Oo.jsx)("div",{children:(0,Oo.jsx)("b",{children:e.cell.obj?.label??"n/a"})})}),e.representations.map(t=>(0,Oo.jsx)(Joe,{volume:e,representation:t},t.cell.transform.ref))]})}var Joe=class extends ta{constructor(){super(...arguments);this.state={action:void 0};this.updateIsoValueEvent=new Jn;this.remove=()=>this.plugin.managers.volume.hierarchy.remove([this.props.representation],!0);this.toggleVisible=r=>{r.preventDefault(),r.currentTarget.blur(),this.plugin.managers.volume.hierarchy.toggleVisibility([this.props.representation])};this.toggleColor=()=>{this.setState({action:this.state.action==="select-color"?void 0:"select-color"})};this.toggleUpdate=()=>this.setState({action:this.state.action==="update"?void 0:"update"});this.highlight=r=>{r.preventDefault(),this.props.representation.cell.parent&&yt.Interactivity.Object.Highlight(this.plugin,{state:this.props.representation.cell.parent,ref:this.props.representation.cell.transform.ref})};this.clearHighlight=r=>{r.preventDefault(),yt.Interactivity.ClearHighlights(this.plugin)};this.focus=()=>{let r=this.props.representation,n=r.cell.obj?.data.repr.getAllLoci();r.cell.state.isHidden&&this.plugin.managers.volume.hierarchy.toggleVisibility([this.props.representation],"show"),n&&this.plugin.managers.camera.focusLoci(n,{extraRadius:1})};this.updateColor=({value:r})=>{let n=this.props.representation.cell.transform;return this.plugin.build().to(n.ref).update({...n.params,colorTheme:{name:"uniform",params:{value:r}}}).commit()};this.requestIsoValueUpdate=r=>{this.updateIsoValueEvent.next(r)};this.updateIsoValue=r=>{let n=this.props.representation.cell.transform;return this.plugin.build().to(n.ref).update({...n.params,type:{...n.params?.type,params:{...n.params?.type.params,isoValue:r.isoValue}}}).commit()};this.isoValueParams=VA((r,n)=>{let i=this.props.representation.cell.transform.params;if(i?.type.name==="isosurface")return{isoValue:Ze.createIsoValueParam(i.type.params.isoValue,this.props.volume.cell.obj?.data.grid?.stats)}})}componentDidMount(){this.subscribe(this.plugin.state.events.cell.stateUpdated,r=>{bm.ObjectEvent.isCell(r,this.props.representation.cell)&&this.forceUpdate()}),this.subscribe(this.updateIsoValueEvent.pipe(jc(100,void 0,{leading:!1,trailing:!0})),this.updateIsoValue)}get color(){let r=this.props.representation.cell;if(r.transform.params?.colorTheme.name==="uniform")return r.transform.params?.colorTheme.params.value}get isIsoSurface(){return this.props.representation.cell.transform.params?.type.name==="isosurface"}render(){let r=this.props.representation.cell,n=r.transform.params,o=this.color,i=this.isoValueParams(r.transform.ref,n?.type.name);return(0,Oo.jsxs)(Oo.Fragment,{children:[(0,Oo.jsxs)("div",{className:"msp-flex-row",children:[o!==void 0&&(0,Oo.jsx)(hr,{style:{backgroundColor:ke.toStyle(o),minWidth:32,width:32},onClick:this.toggleColor}),(0,Oo.jsxs)(hr,{noOverflow:!0,className:"msp-control-button-label",title:`${r.obj?.label}. Click to focus.`,onClick:this.focus,onMouseEnter:this.highlight,onMouseLeave:this.clearHighlight,style:{textAlign:"left"},children:[r.obj?.label,(0,Oo.jsx)("small",{className:"msp-25-lower-contrast-text",style:{float:"right"},children:r.obj?.description})]}),(0,Oo.jsx)(Gr,{svg:r.state.isHidden?Ud:Hm,toggleState:!1,onClick:this.toggleVisible,title:`${r.state.isHidden?"Show":"Hide"} component`,small:!0,className:"msp-form-control",flex:!0}),(0,Oo.jsx)(Gr,{svg:Uc,onClick:this.remove,title:"Remove",small:!0}),(0,Oo.jsx)(Gr,{svg:PE,onClick:this.toggleUpdate,title:"Actions",toggleState:this.state.action==="update"})]}),this.state.action==="update"&&!!r.parent&&(0,Oo.jsx)("div",{style:{marginBottom:"6px"},className:"msp-accent-offset",children:(0,Oo.jsxs)("div",{children:[!!i&&(0,Oo.jsx)("div",{style:{marginBottom:"1px"},children:(0,Oo.jsx)(Mn,{params:i,values:{isoValue:n?.type.params.isoValue},onChangeValues:this.requestIsoValueUpdate})}),(0,Oo.jsx)(ug,{state:r.parent,transform:r.transform,customHeader:"none",noMargin:!0})]})}),this.state.action==="select-color"&&o!==void 0&&(0,Oo.jsx)("div",{style:{marginBottom:"6px",marginTop:1},className:"msp-accent-offset",children:(0,Oo.jsx)(Kl,{header:"Select Color",initialExpanded:!0,hideExpander:!0,hideOffset:!0,onHeaderClick:this.toggleColor,topRightIcon:Vg,noTopMargin:!0,childrenClassName:"msp-viewport-controls-panel-controls",children:(0,Oo.jsx)(u1,{param:bHt,value:this.color,onChange:this.updateColor,name:"color",hideNameRow:!0})})})]})}},bHt=h.Color(1184274);var zoe;(r=>{function e(n){let o=new Map;if(ge.isAtomic(n.unit)){let{label_seq_id:i}=n.unit.model.atomicHierarchy.residues,{residueIndex:a}=n.unit;for(let A=0,s=Ee.size(n.indices);A<s;++A){let c=Ee.getAt(n.indices,A),l=n.unit.elements[c],u=i.value(a[l]);o.has(u)?o.get(u).push(c):o.set(u,[c])}}else if(ge.isCoarse(n.unit)){let{seq_id_begin:i}=ge.isSpheres(n.unit)?n.unit.model.coarseHierarchy.spheres:n.unit.model.coarseHierarchy.gaussians;for(let a=0,A=Ee.size(n.indices);a<A;++a){let s=Ee.getAt(n.indices,a),c=n.unit.elements[s],l=i.value(c);o.set(l,[s])}}return o}r.createSeqIdIndicesMap=e;function t(n,o={}){let i=cOe(n.a.unit),a=cOe(n.b.unit),A=e(n.a),s=e(n.b),c=[],l=[],{aliA:u,aliB:g,score:m}=Rk(i.code.toArray(),a.code.toArray(),o),p=0,d=0;for(let C=0,y=u.length;C<y;++C){if(u[C]==="-"||g[C]==="-"){u[C]!=="-"&&(p+=1),g[C]!=="-"&&(d+=1);continue}let Q=i.seqId.value(p),E=a.seqId.value(d);if(A.has(Q)&&s.has(E)){let b=A.get(Q),x=s.get(E);for(let S=0,w=Math.min(b.length,x.length);S<w;++S)c.push(b[S]),l.push(x[S])}p+=1,d+=1}let f=Ee.intersect(Ee.ofSortedArray(c),n.a.indices),I=Ee.intersect(Ee.ofSortedArray(l),n.b.indices);return{a:{unit:n.a.unit,indices:f},b:{unit:n.b.unit,indices:I},score:m}}r.compute=t})(zoe||={});function xHt(e){switch(e.kind){case ge.Kind.Atomic:return e.model.atomicHierarchy.index.getEntityFromChain(e.chainIndex[e.elements[0]]);case ge.Kind.Spheres:return e.model.coarseHierarchy.spheres.entityKey[e.elements[0]];case ge.Kind.Gaussians:return e.model.coarseHierarchy.gaussians.entityKey[e.elements[0]]}}function cOe(e){return e.model.sequence.byEntityKey[xHt(e)].sequence}function Koe(e){let t=[];if(e.length<=0)return t;let r=DHt(e),n={a:lb(e[0],r),b:lb(e[1],r)};t[0]=BA.compute(n);for(let o=2;o<e.length;o++)n.b=lb(e[o],r),n.centerB=void 0,t.push(BA.compute(n));return t}var SHt=/(polypeptide|cyclic-pseudo-peptide)/i;function lOe(e){let t=[];if(e.length<=0)return t;let r=W.Loci.getFirstLocation(e[0]),o=Ke.entity.subtype(r).match(SHt)?"blosum62":"default";for(let i=1;i<e.length;i++){let{a,b:A,score:s}=zoe.compute({a:e[0].elements[0],b:e[i].elements[0]},{substMatrix:o}),c=W.Loci(e[0].structure,[a]),l=W.Loci(e[i].structure,[A]),u=Ee.size(a.indices);t.push({...BA.compute({a:lb(c,u),b:lb(l,u)}),alignmentScore:s})}return t}function lb(e,t){let r=BA.Positions.empty(t),n=0;for(let o of e.elements){let{unit:i,indices:a}=o,{elements:A,conformation:s}=i;for(let c=0,l=Ee.size(a);c<l;c++){let u=A[Ee.getAt(a,c)];if(r.x[n]=s.x(u),r.y[n]=s.y(u),r.z[n]=s.z(u),n++,n>=t)break}if(n>=t)break}return r}function DHt(e){if(e.length===0)return 0;let t=W.Loci.size(e[0]);for(let r=1;r<e.length;r++){let n=W.Loci.size(e[r]);n<t&&(t=n)}return t}function uOe(e,t){let r=new Map;for(let s=0;s<e.length;s++)RHt(e[s],r,s,t?.traceOnly??!0,t?.includeResidueTest??wHt);let n=Array.from(r.values()),o=FHt(e.length,n),i=[],a=[],A=[];for(let s of o)if(s.count===0)i.push([s.i,s.j]);else{let[c,l]=vHt(n,s.i,s.j,s.count),u=BA.compute({a:c,b:l});Number.isNaN(u.rmsd)?a.push([s.i,s.j]):A.push({transform:u,pivot:s.i,other:s.j})}return{entries:A,zeroOverlapPairs:i,failedPairs:a}}function vHt(e,t,r,n){let o=BA.Positions.empty(n),i=BA.Positions.empty(n),a=0;for(let{pivots:A}of e){let s=A[t],c=A[r];if(!s||!c)continue;let l=Math.min(s[2]-s[1],c[2]-c[1]);for(let u=0;u<l;u++){let g=s[1]+u;o.x[a]=s[0].conformation.x(g),o.y[a]=s[0].conformation.y(g),o.z[a]=s[0].conformation.z(g),g=c[1]+u,i.x[a]=c[0].conformation.x(g),i.y[a]=c[0].conformation.y(g),i.z[a]=c[0].conformation.z(g),a++}}return[o,i]}function FHt(e,t){let r=[];for(let o=0;o<e;o++){r[o]=[];for(let i=0;i<e;i++)r[o][i]=0}for(let{pivots:o}of t)for(let i=0;i<e;i++){if(!o[i])continue;let a=o[i][2]-o[i][1];for(let A=i+1;A<e;A++){if(!o[A])continue;let s=o[A][2]-o[A][1];r[i][A]=r[i][A]+Math.min(a,s)}}let n=[];for(let o=1;o<e;o++)n[o-1]={i:0,j:o,count:r[0][o]};return n}function wHt(){return!0}function RHt(e,t,r,n,o){let i=W.Location.create(e);for(let a of e.units){if(a.kind!==ge.Kind.Atomic)continue;let{elements:A,model:s}=a;i.unit=a;let c=Mu.Provider.get(s).value;if(!c)return;let{dbName:l,accession:u,num:g}=c,m=sr.transientSegments(a.model.atomicHierarchy.chainAtomSegments,A),p=sr.transientSegments(a.model.atomicHierarchy.residueAtomSegments,A),d=a.model.atomicHierarchy.derived.residue.traceElementIndex;for(;m.hasNext;){let f=m.move();for(p.setSegment(f);p.hasNext;){let I=p.move(),C=I.index;if(!l[C])continue;let y=d[C],Q,E;if(n){if(Q=y,Q===-1)continue;E=Q+1}else Q=A[I.start],E=A[I.end-1]+1;if(i.element=y>=0?y:Q,!o(i,C,Q,E))continue;let b=`${l[C]}-${u[C]}-${g[C]}`;if(!t.has(b))t.set(b,{key:b,pivots:{[r]:[a,Q,E]}});else{let x=t.get(b);x.pivots[r]||(x.pivots[r]=[a,Q,E])}}}}}var Woe;(a=>{a.Positions=BA.Positions;function t(A){let s=!1;A.a.x.length<A.b.x.length&&(s=!0,A={a:A.b,b:A.a,seqA:A.seqB,seqB:A.seqA});let{a:c,b:l}=A,u=c.x.length,g=l.x.length;if(u===0||g===0)return{bTransform:Y.identity(),tmScoreA:0,tmScoreB:0,rmsd:0,alignedLength:0,sequenceIdentity:0,alignmentA:[],alignmentB:[]};let m=i(c),p=i(l),d=r(u),f=r(g),I=Math.min(u,g),C=Math.min(d,f),y=$t(C,4.5,8),Q=1.5*Math.pow(I,.3)+3.5,E=new joe(m,p,u,g,C,y,Q);E.align();let{alignmentA:b,alignmentB:x,transform:S}=E.getBestAlignment(),w=n(m,p,b,x,S,d,u),R=n(m,p,b,x,S,f,g),T=o(m,p,b,x,S),L=0;if(A.seqA&&A.seqB){let F=0;for(let v=0;v<b.length;v++)A.seqA[b[v]]===A.seqB[x[v]]&&F++;L=b.length>0?F/b.length:0}return s?{bTransform:Y.invert(S,S),tmScoreA:R,tmScoreB:w,rmsd:T,alignedLength:b.length,sequenceIdentity:L,alignmentA:x,alignmentB:b}:{bTransform:S,tmScoreA:w,tmScoreB:R,rmsd:T,alignedLength:b.length,sequenceIdentity:L,alignmentA:b,alignmentB:x}}a.compute=t;function r(A){if(A<=21)return .5;let s=1.24*Math.pow(A-15,1/3)-1.8;return Math.max(s,.5)}a.calculateD0=r;function n(A,s,c,l,u,g,m){if(c.length===0)return 0;let p=g*g,d=0,f=B();for(let I=0;I<c.length;I++){let C=c[I],y=l[I];B.transformMat4(f,s[y],u);let Q=B.squaredDistance(A[C],f);d+=1/(1+Q/p)}return d/m}function o(A,s,c,l,u){if(c.length===0)return 0;let g=0,m=B();for(let p=0;p<c.length;p++)B.transformMat4(m,s[l[p]],u),g+=B.squaredDistance(A[c[p]],m);return Math.sqrt(g/c.length)}function i(A){let s=A.x.length,c=new Array(s);for(let l=0;l<s;l++)c[l]=[A.x[l],A.y[l],A.z[l]];return c}})(Woe||={});var joe=class{constructor(t,r,n,o,i,a,A){this.bestScore=-1;this.bestAlignmentA=[];this.bestAlignmentB=[];this.bestTransform=Y.identity();this.xa=t,this.ya=r,this.lenA=n,this.lenB=o,this.lMin=Math.min(n,o),this.d0=i,this.d0Search=a,this.scoreD8=A;let s=n+1,c=o+1,l=0,u=new Uint8Array(s*c),g=new Float64Array(s*c);this.dpPath=new Array(s),this.dpVal=new Array(s);for(let m=0;m<=n;m++)l=m*c,this.dpPath[m]=u.subarray(l,l+c),this.dpVal[m]=g.subarray(l,l+c);this.j2i=new Array(o).fill(-1),this.posA=BA.Positions.empty(n),this.posB=BA.Positions.empty(o),this.rmsdResult={bTransform:Y.zero(),rmsd:0,nAlignedElements:0},this.rmsdState=new Xx({a:this.posA,b:this.posB,length:0},this.rmsdResult),this.yt=Array.from({length:o},()=>[.1,0,0]),this.tmpAlignA=new Uint16Array(n),this.tmpAlignB=new Uint16Array(o),this.incrSequence=Uint16Array.from({length:Math.max(n,o)},(m,p)=>p)}align(){let{lMin:t}=this;if(this.getInitialAlignment(),this.refineAlignment(),this.tryGaplessThreading(),this.bestScore<.5){for(let n=5;n<=Math.min(12,t);n++)this.tryFragmentInitializationMedium(n);for(let n=16;n<=Math.min(30,t);n+=2)this.tryFragmentInitializationMedium(n);let r=[Math.floor(t*.15),Math.floor(t*.25),Math.floor(t*.4),Math.floor(t*.6)].filter(n=>n>30);for(let n of r)this.tryFragmentInitializationFast(n)}this.refineAlignment();for(let r=this.d0+3;r>=Math.max(1,this.d0-3);r--)this.refineWithCutoff(r);this.refineWithCutoff(this.d0*.8),this.optimizeFinalAlignment()}optimizeFinalAlignment(){let{xa:t,ya:r,d0:n,lMin:o,tmpAlignA:i,tmpAlignB:a}=this,A=[8,7,6,5.5,5,4.5,4],s=B(),c=0;for(let l of A){let u=l*l;c=0;for(let p=0;p<this.bestAlignmentA.length;p++){let d=this.bestAlignmentA[p],f=this.bestAlignmentB[p];B.transformMat4(s,r[f],this.bestTransform),B.squaredDistance(s,t[d])<=u&&(i[c]=d,a[c]=f,c++)}if(c<3)break;let g=this.kabsch(i.subarray(0,c),a.subarray(0,c)),m=this.scoreTM(this.bestAlignmentA,this.bestAlignmentB,g,n,o);m>this.bestScore&&(this.bestScore=m,Y.copy(this.bestTransform,g))}this.bestScore=this.scoreTM(this.bestAlignmentA,this.bestAlignmentB,this.bestTransform,n,o)}scoreTM(t,r,n,o,i){let{xa:a,ya:A}=this,s=o*o,c=0,l=B();for(let u=0;u<t.length;u++){let g=t[u],m=r[u];B.transformMat4(l,A[m],n);let p=B.squaredDistance(l,a[g]);c+=1/(1+p/s)}return c/i}refineWithCutoff(t){if(t<1)return;let{xa:r,ya:n,yt:o,lMin:i,d0:a,d0Search:A,scoreD8:s,tmpAlignA:c,tmpAlignB:l}=this,u=t*t,g=B(),m=0;for(let p=0;p<10&&!(this.bestAlignmentA.length<3);p++){m=0;for(let x=0;x<this.bestAlignmentA.length;x++){let S=this.bestAlignmentA[x],w=this.bestAlignmentB[x];B.transformMat4(g,n[w],this.bestTransform),B.squaredDistance(g,r[S])<=u&&(c[m]=S,l[m]=w,m++)}if(m<3)break;let d=c.subarray(0,m),f=l.subarray(0,m),I=this.kabsch(d,f);for(let x=0;x<this.lenB;x++)B.transformMat4(o[x],n[x],I);let C=A+1;this.nwdpStructure(r,o,C*C,-.6),m=0;for(let x=0;x<this.lenB;x++)this.j2i[x]>=0&&(c[m]=this.j2i[x],l[m]=x,m++);if(m<3)break;let y=c.subarray(0,m),Q=l.subarray(0,m),E=this.trimmedKabschWithTransformedCoordinates(y,Q,o,s),b=this.scoreTMWithCutoff(y,Q,E,a,i,s);if(b>this.bestScore)this.bestScore=b,this.bestAlignmentA=y.slice(),this.bestAlignmentB=Q.slice(),Y.copy(this.bestTransform,E);else break}}tryGaplessThreading(){let{lenA:t,lenB:r,lMin:n,d0:o,scoreD8:i,incrSequence:a}=this;for(let A=-r+4;A<=t-4;A++){let s=Math.max(0,A),c=Math.min(t,A+r),l=c-s;if(l<4)continue;let u=s-A,g=a.subarray(s,c),m=a.subarray(u,u+l),p=this.kabsch(g,m);this.scoreTMWithCutoff(g,m,p,o,n,i)>this.bestScore*.8&&this.extendFromSeed(p)}}tryFragmentInitializationMedium(t){let{lenA:r,lenB:n,lMin:o,d0:i,scoreD8:a,incrSequence:A}=this,s=r-t,c=n-t,l=Math.max(2,Math.floor(t/2));for(let u=0;u<=s;u+=l){let g=A.subarray(u,u+t);for(let m=0;m<=c;m+=l){let p=A.subarray(m,m+t),d=this.kabsch(g,p);this.scoreTMWithCutoff(g,p,d,i,o,a)>this.bestScore*.3&&this.extendFromSeed(d)}}}tryFragmentInitializationFast(t){let{lenA:r,lenB:n,d0:o,lMin:i,scoreD8:a,incrSequence:A}=this,s=r-t,c=n-t,l=Math.max(t,10);for(let u=0;u<=s;u+=l){let g=A.subarray(u,u+t);for(let m=0;m<=c;m+=l){let p=A.subarray(m,m+t),d=this.kabsch(g,p);this.scoreTMWithCutoff(g,p,d,o,i,a)>this.bestScore*.5&&this.extendFromSeed(d)}}}getInitialAlignment(){let{xa:t,ya:r,lenB:n,d0:o,lMin:i,d0Search:a,scoreD8:A,j2i:s}=this,c=a*a;this.nwdpStructure(t,r,c,-.6),this.bestAlignmentA=[],this.bestAlignmentB=[];for(let l=0;l<n;l++)s[l]>=0&&(this.bestAlignmentA.push(s[l]),this.bestAlignmentB.push(l));this.bestAlignmentA.length>=3&&(Y.copy(this.bestTransform,this.kabsch(this.bestAlignmentA,this.bestAlignmentB)),this.bestScore=this.scoreTMWithCutoff(this.bestAlignmentA,this.bestAlignmentB,this.bestTransform,o,i,A))}extendFromSeed(t){let{xa:r,ya:n,yt:o,lenB:i,lMin:a,d0:A,d0Search:s,scoreD8:c,tmpAlignA:l,tmpAlignB:u}=this,g=t,m=[],p=[],d=-1,f=0;for(let I=0;I<20;I++){for(let x=0;x<i;x++)B.transformMat4(o[x],n[x],g);let C=s+1;this.nwdpStructure(r,o,C*C,-.6),f=0;for(let x=0;x<i;x++)this.j2i[x]>=0&&(l[f]=this.j2i[x],u[f]=x,f++);if(f<3)break;let y=l.subarray(0,f),Q=u.subarray(0,f);if(this.alignmentsEqual(y,Q,m,p))break;let E=this.trimmedKabschWithTransformedCoordinates(y,Q,o,c),b=this.scoreTMWithCutoff(y,Q,E,A,a,c);if(b<=d)break;d=b,m=y.slice(),p=Q.slice(),g=E,b>this.bestScore&&(this.bestScore=b,this.bestAlignmentA=m,this.bestAlignmentB=p,Y.copy(this.bestTransform,E))}}trimmedKabsch(t,r,n,o){let{xa:i,ya:a}=this,A=o*o,s=[],c=[],l=B();for(let u=0;u<t.length;u++){let g=t[u],m=r[u];B.transformMat4(l,a[m],n),B.squaredDistance(l,i[g])<=A&&(s.push(g),c.push(m))}return s.length<3?this.kabsch(t,r):this.kabsch(s,c)}trimmedKabschWithTransformedCoordinates(t,r,n,o){let{xa:i}=this,a=o*o,A=[],s=[];for(let c=0;c<t.length;c++){let l=t[c],u=r[c];B.squaredDistance(n[u],i[l])<=a&&(A.push(l),s.push(u))}return A.length<3?this.kabsch(t,r):this.kabsch(A,s)}refineAlignment(){let{xa:t,ya:r,yt:n,lMin:o,lenB:i,d0:a,d0Search:A,scoreD8:s,tmpAlignA:c,tmpAlignB:l}=this,u=20,g=0;for(let m=0;m<u&&!(this.bestAlignmentA.length<3);m++){let p=this.trimmedKabsch(this.bestAlignmentA,this.bestAlignmentB,this.bestTransform,s);for(let Q=0;Q<i;Q++)B.transformMat4(n[Q],r[Q],p);let d=A+1;this.nwdpStructure(t,n,d*d,-.6),g=0;for(let Q=0;Q<this.lenB;Q++)this.j2i[Q]>=0&&(c[g]=this.j2i[Q],l[g]=Q,g++);if(g<3)break;let f=c.subarray(0,g),I=l.subarray(0,g);if(this.alignmentsEqual(f,I,this.bestAlignmentA,this.bestAlignmentB))break;let C=this.kabsch(f,I),y=this.scoreTMWithCutoff(f,I,C,a,o,s);if(y>this.bestScore)this.bestScore=y,this.bestAlignmentA=f.slice(),this.bestAlignmentB=I.slice(),Y.copy(this.bestTransform,C);else break}}alignmentsEqual(t,r,n,o){if(t.length!==n.length)return!1;for(let i=0;i<t.length;i++)if(t[i]!==n[i]||r[i]!==o[i])return!1;return!0}scoreTMWithCutoff(t,r,n,o,i,a){let{xa:A,ya:s}=this,c=o*o,l=a*a,u=0,g=B();for(let m=0;m<t.length;m++){let p=t[m],d=r[m];B.transformMat4(g,s[d],n);let f=B.squaredDistance(g,A[p]);f<=l&&(u+=1/(1+f/c))}return u/i}nwdpStructure(t,r,n,o){let{lenA:i,lenB:a,dpPath:A,dpVal:s,j2i:c}=this;for(let g=0;g<=i;g++)s[g][0]=0,A[g][0]=0;for(let g=0;g<=a;g++)s[0][g]=0,A[0][g]=0,c[g]=-1;for(let g=1;g<=i;g++)for(let m=1;m<=a;m++){let p=B.squaredDistance(t[g-1],r[m-1]),d=s[g-1][m-1]+1/(1+p/n),f=s[g-1][m];A[g-1][m]&&(f+=o);let I=s[g][m-1];A[g][m-1]&&(I+=o),d>=f&&d>=I?(A[g][m]=1,s[g][m]=d):(A[g][m]=0,s[g][m]=I>=f?I:f)}let l=i,u=a;for(;l>0&&u>0;)if(A[l][u])c[u-1]=l-1,l--,u--;else{let g=s[l-1][u];A[l-1][u]&&(g+=o);let m=s[l][u-1];A[l][u-1]&&(m+=o),m>=g?u--:l--}}kabsch(t,r){let n=t.length;if(n<3)return Y.identity();let{xa:o,ya:i,posA:a,posB:A,rmsdResult:s,rmsdState:c}=this,l=o[0],u=i[0];for(let g=0;g<n;g++)l=o[t[g]],u=i[r[g]],a.x[g]=l[0],a.y[g]=l[1],a.z[g]=l[2],A.x[g]=u[0],A.y[g]=u[1],A.z[g]=u[2];return BA.compute({a,b:A,length:n},s,c),s.bTransform}getBestAlignment(){return{alignmentA:this.bestAlignmentA,alignmentB:this.bestAlignmentB,transform:this.bestTransform}}};function gOe(e,t){let r=W.Loci.size(e),n=W.Loci.size(t);if(r===0||n===0)return{bTransform:Y.identity(),tmScoreA:0,tmScoreB:0,rmsd:0,alignedLength:0,sequenceIdentity:0,alignmentA:[],alignmentB:[]};let o=lb(e,r),i=lb(t,n);return Woe.compute({a:o,b:i})}var ub=class e{constructor(t){this.nbits=t,this.words=new Uint32Array(t+31>>>5)}static full(t){let r=new e(t);r.words.fill(4294967295);let n=t&31;return n!==0&&(r.words[r.words.length-1]=~(4294967295<<n)),r}clone(){let t=new e(this.nbits);return t.words.set(this.words),t}zero(){this.words.fill(0)}set(t){this.words[t>>>5]|=1<<(t&31)}clear(t){this.words[t>>>5]&=~(1<<(t&31))}get(t){return(this.words[t>>>5]&1<<(t&31))!==0}and(t){let r=this.words,n=t.words;for(let o=0,i=r.length;o<i;o++)r[o]&=n[o]}andNot(t){let r=this.words,n=t.words;for(let o=0,i=r.length;o<i;o++)r[o]&=~n[o]}or(t){let r=this.words,n=t.words;for(let o=0,i=r.length;o<i;o++)r[o]|=n[o]}isEmpty(){let t=this.words;for(let r=0,n=t.length;r<n;r++)if(t[r]!==0)return!1;return!0}cardinality(){let t=this.words,r=0;for(let n=0,o=t.length;n<o;n++)r+=UHt(t[n]);return r}nextSetBit(t){if(t<0&&(t=0),t>=this.nbits)return-1;let r=this.words,n=t>>>5,o=r[n]&4294967295<<(t&31);for(;;){if(o!==0){let i=(n<<5)+(31-Math.clz32(o&-o));return i<this.nbits?i:-1}if(++n>=r.length)return-1;o=r[n]}}};function UHt(e){return e=e-(e>>>1&1431655765),e=(e&858993459)+(e>>>2&858993459),(e+(e>>>4)&252645135)*16843009>>>24}var qoe;(r=>{r.DefaultOptions={vertexTest:()=>!0,edgeTest:()=>!0,pathCutoff:1,maxTimeMs:400,maxIterations:1e7,minMatchedVertices:1,maxCliques:64};function t(n,o,i={},a){let A={...r.DefaultOptions,...i},s=LHt(n,o,A);if(s.n===0)return[];let c=new Zoe(A.maxCliques),l=THt(s,A,c);return a&&(a.truncated=l),c.bestSize<A.minMatchedVertices?[]:c.cliques.map(u=>PHt(s,u))}r.find=t})(qoe||={});var Xoe=class{constructor(t){this.nbits=t;this.free=[]}acquire(){let t=this.free.pop();return t!==void 0?t:new ub(this.nbits)}acquireCopy(t){let r=this.acquire();return r.words.set(t.words),r}release(t){this.free.push(t)}};function LHt(e,t,r){let n=e.vertexCount,o=t.vertexCount,i=[],a=[];for(let d=0;d<n;d++)for(let f=0;f<o;f++)r.vertexTest(d,f)&&(i.push(d),a.push(f));let A=i.length,s=Int32Array.from(i),c=Int32Array.from(a),l=new Array(A),u=new Array(A);for(let d=0;d<A;d++)l[d]=new ub(A),u[d]=new ub(A);let g=r.pathCutoff>0,m=g?fa.graphShortestPaths(e):void 0,p=g?fa.graphShortestPaths(t):void 0;for(let d=0;d<A;d++){let f=s[d],I=c[d];for(let C=d+1;C<A;C++){let y=s[C],Q=c[C];if(f===y||I===Q)continue;let E=e.getDirectedEdgeIndex(f,y),b=t.getDirectedEdgeIndex(I,Q),x=E>=0,S=b>=0,w=!1;x&&S&&(w=r.edgeTest(E,b));let R=!1;if(!w&&g&&!x&&!S){let T=m[f][y],L=p[I][Q];T>=0&&L>=0&&Math.abs(T-L)<=r.pathCutoff&&(R=!0)}(w||R)&&(l[d].set(C),l[C].set(d),w&&(u[d].set(C),u[C].set(d)))}}return{n:A,pairA:s,pairB:c,adj:l,cadj:u}}var Zoe=class{constructor(t){this.bestSize=0;this.cliques=[];this.cap=Math.max(1,t)}offer(t){let r=t.length;if(!(r<this.bestSize)){if(r>this.bestSize){this.bestSize=r,this.cliques=[t];return}this.cliques.length<this.cap&&this.cliques.push(t)}}};function THt(e,t,r){let n=e.n;if(n===0)return!1;let o=Math.max(1,t.minMatchedVertices),i=e.adj,a=e.cadj,A=new Array(n);for(let I=0;I<n;I++){let C=i[I].clone();C.andNot(a[I]),A[I]=C}let s=ub.full(n),c=new ub(n),l=new Xoe(n),u=Date.now()+t.maxTimeMs,g=t.maxIterations,m=0,p=!1,d=()=>p?!0:g>0&&m>g||Date.now()>u?(p=!0,!0):!1,f=(I,C,y,Q,E)=>{if(d())return;if(m++,C.isEmpty()&&Q.isEmpty()){let x=I.cardinality();if(x>=o){let S=new Array(x),w=0;for(let R=I.nextSetBit(0);R>=0;R=I.nextSetBit(R+1))S[w++]=R;r.offer(S)}return}let b=l.acquireCopy(C);for(let x=b.nextSetBit(0);x>=0;x=b.nextSetBit(x+1)){C.clear(x);let S=A[x],w=a[x],R=i[x],T=l.acquireCopy(I);T.set(x);let L=l.acquireCopy(y);L.and(S);let F=l.acquireCopy(E);F.and(S);let v=l.acquireCopy(C);v.and(R);let U=l.acquireCopy(Q);U.and(R);let G=l.acquireCopy(y);if(G.and(w),v.or(G),G.words.set(E.words),G.and(w),U.or(G),l.release(G),f(T,v,L,U,F),l.release(U),l.release(v),l.release(F),l.release(L),l.release(T),Q.set(x),d())break}l.release(b)};for(let I=0;I<n;I++){let C=A[I],y=a[I],Q=l.acquire();Q.zero(),Q.set(I);let E=l.acquireCopy(s);E.andNot(c),E.and(C);let b=l.acquireCopy(s);b.andNot(c),b.and(y);let x=l.acquireCopy(C);x.and(c);let S=l.acquireCopy(y);if(S.and(c),f(Q,b,E,S,x),l.release(S),l.release(x),l.release(b),l.release(E),l.release(Q),c.set(I),d())break}return p}function PHt(e,t){let r=t.map(n=>[e.pairA[n],e.pairB[n]]);return r.sort((n,o)=>n[0]-o[0]),r}var W4={vertexTest:(e,t)=>e.elementSymbol===t.elementSymbol,edgeTest:(e,t,r,n)=>{let o=(t&It.Flag.Aromatic)!==0,i=(n&It.Flag.Aromatic)!==0;if(o||i)return o===i;let a=e|0,A=r|0;return a>0&&A>0?a===A:!0},ignoreHydrogens:!0,pathCutoff:1,maxTimeMs:400,minMatchedAtoms:3,maxIterations:1e7,maxCliquesForPose:64};function GHt(e){return e.kind===ge.Kind.Atomic}function $oe(e){if(W.Loci.isEmpty(e))return;let t=W.Location.create(e.structure),r=W.Loci.getFirstLocation(e,t);if(!r||Ke.entity.type(r)==="polymer")return;let n=Ke.residue.key(r),o=Ke.atom.label_comp_id(r),i=!0;if(W.Loci.forEachLocation(e,a=>{i&&(Ke.entity.type(a)==="polymer"&&(i=!1),Ke.residue.key(a)!==n&&(i=!1))}),!!i)return{residueKey:n,compId:o}}function mOe(e){let t=$oe(e);if(!t||e.elements.length!==1)return;let n=e.elements[0].unit;if(!GHt(n))return;let{residueKey:o,compId:i}=t,a=[];if(W.Loci.forEachLocation(e,S=>{a.push(S.element)}),a.length===0)return;let A=W.Location.create(e.structure,n);for(let S=0;S<a.length;S++)if(A.element=a[S],Ke.residue.key(A)!==o)return;a.sort((S,w)=>S-w);let s=new Array(a.length),c=new Map,l=a.map((S,w)=>{A.element=S;let R=je.indexOf(n.elements,S);return s[w]=R,c.set(R,w),{index:w,element:S,atomName:Ke.atom.label_atom_id(A),elementSymbol:Ke.atom.type_symbol(A)}}),{offset:u,b:g,edgeProps:m}=n.bonds,p=m.order,d=m.flags,f=[],I=[],C=[],y=[];for(let S=0;S<l.length;S++){let w=s[S];for(let R=u[w],T=u[w+1];R<T;R++){let L=c.get(g[R]);L===void 0||L<=S||(f.push(S),I.push(L),C.push(p[R]),y.push(d[R]))}}let Q=new fa.EdgeBuilder(l.length,f,I),E=new Int32Array(Q.slotCount),b=new Int32Array(Q.slotCount);for(let S=0;S<Q.edgeCount;S++)Q.addNextEdge(),Q.assignProperty(E,C[S]),Q.assignProperty(b,y[S]);let x=Q.createGraph({order:E,flags:b});return{structure:e.structure,unit:n,compId:i,residueKey:o,vertices:l,bonds:x}}function NHt(e,t){if(!e.compId||!t.compId||e.compId.toUpperCase()!==t.compId.toUpperCase())return;let r=new Map;for(let i of t.vertices){let a=i.atomName||"";if(!a)continue;let A=r.get(a);A?A.push(i.index):r.set(a,[i.index])}let n=new Uint8Array(t.vertices.length),o=[];for(let i of e.vertices){let a=i.atomName||"";if(!a)continue;let A=r.get(a);if(!A)continue;let s=-1;for(let c=0;c<A.length;c++){let l=A[c];if(!n[l]&&t.vertices[l].elementSymbol===i.elementSymbol){s=l;break}}if(s<0)for(let c=0;c<A.length;c++){let l=A[c];if(!n[l]){s=l;break}}s<0||(n[s]=1,o.push([i.index,s]))}if(o.length)return o.sort((i,a)=>i[0]-a[0]),o}function dOe(e){let t=e.elementSymbol.toUpperCase();return t==="H"||t==="D"}function MHt(e,t,r={},n){let o={...W4,...r},i=o.ignoreHydrogens,a=e.bonds.edgeProps.order,A=e.bonds.edgeProps.flags,s=t.bonds.edgeProps.order,c=t.bonds.edgeProps.flags;return qoe.find(e.bonds,t.bonds,{vertexTest:(l,u)=>i&&(dOe(e.vertices[l])||dOe(t.vertices[u]))?!1:o.vertexTest(e.vertices[l],t.vertices[u]),edgeTest:(l,u)=>o.edgeTest(a[l],A[l],s[u],c[u]),pathCutoff:o.pathCutoff,maxTimeMs:o.maxTimeMs,maxIterations:o.maxIterations,minMatchedVertices:o.minMatchedAtoms,maxCliques:o.maxCliquesForPose},n)}function pOe(e,t,r,n,o){let i=e.unit.conformation,a=t.unit.conformation;for(let A=0;A<r.length;A++){let s=e.vertices[r[A][0]].element,c=t.vertices[r[A][1]].element;n.x[A]=i.x(s),n.y[A]=i.y(s),n.z[A]=i.z(s),o.x[A]=a.x(c),o.y[A]=a.y(c),o.z[A]=a.z(c)}}function fOe(e,t,r){let n=new Array(r.length),o=new Array(r.length);for(let i=0;i<r.length;i++)n[i]=e.vertices[r[i][0]].element,o[i]=t.vertices[r[i][1]].element;return{referenceElements:n,targetElements:o}}function BOe(e,t,r={}){let n={...W4,...r},o=mOe(e),i=mOe(t);if(!o||!i)return;let a=NHt(o,i);if(a&&a.length>=n.minMatchedAtoms){let y=a.length,Q=BA.Positions.empty(y),E=BA.Positions.empty(y);pOe(o,i,a,Q,E);let{bTransform:b,rmsd:x}=BA.compute({a:Q,b:E,length:y}),{referenceElements:S,targetElements:w}=fOe(o,i,a);return{method:"atom-name",atomCount:y,rmsd:x,bTransform:b,referenceElements:S,targetElements:w,truncated:!1}}let A={truncated:!1},s=MHt(o,i,n,A);if(s.length===0)return;let c=s[0].length,l=BA.Positions.empty(c),u=BA.Positions.empty(c),g={bTransform:Y.zero(),rmsd:0,nAlignedElements:0},m=new Xx({a:l,b:u,length:c},g),p=Number.POSITIVE_INFINITY,d,f=Y.zero();for(let y of s)pOe(o,i,y,l,u),BA.compute({a:l,b:u,length:c},g,m),g.rmsd<p&&(p=g.rmsd,Y.copy(f,g.bTransform),d=y);if(!d)return;let{referenceElements:I,targetElements:C}=fOe(o,i,d);return{method:"mccs",atomCount:d.length,rmsd:p,bTransform:f,referenceElements:I,targetElements:C,truncated:A.truncated}}var Bn=kt(Qr()),X4=class extends ma{defaultState(){return{isCollapsed:!1,header:"Superposition",brand:{accent:"gray",svg:wGe},isHidden:!0}}componentDidMount(){this.subscribe(this.plugin.managers.structure.hierarchy.behaviors.selection,t=>{this.setState({isHidden:t.structures.length<2})})}renderControls(){return(0,Bn.jsx)(Bn.Fragment,{children:(0,Bn.jsx)(eie,{})})}},IOe={alignSequences:h.Boolean(!0,{isEssential:!0,description:"For Chain-based 3D superposition, perform a sequence alignment and use the aligned residue pairs to guide the 3D superposition."}),traceOnly:h.Boolean(!0,{description:"For Chain- and Uniprot-based 3D superposition, base superposition only on CA (and equivalent) atoms."})},kHt=h.getDefaultValues(IOe),HHt="SuperpositionTransform";function VHt(e){return e?!Qt.isEmpty(Oi.ligand.query(new qo(e))):!1}var eie=class extends ta{constructor(){super(...arguments);this.state={isBusy:!1,canUseDb:!1,canUseLigands:!1,action:void 0,options:kHt};this.superposeChains=async()=>{let{query:r}=this.state.options.traceOnly?Oi.trace:Oi.polymer,n=this.chainEntries,o=n.map(c=>{let l=W.Loci.toStructure(c.loci),u=Qt.toLociWithSourceUnits(r(new qo(l)));return W.Loci.remap(u,this.getRootStructure(c.loci.structure))}),a=this.plugin.managers.structure.hierarchy.findStructure(o[0]?.structure)?.transform?.cell.obj?.data.coordinateSystem,A=this.state.options.alignSequences?lOe(o):Koe(o),s=n[0];for(let c=1,l=o.length;c<l;++c){let u=n[c],{bTransform:g,rmsd:m}=A[c-1];await this.transform(u.cell,g,a);let p=Ru(s.label),d=Ru(u.label);this.plugin.log.info(`Superposed [${p}] and [${d}] with RMSD ${m.toFixed(2)}.`)}await this.cameraReset()};this.superposeAtoms=async()=>{let r=this.atomEntries,n=r.map(s=>W.Loci.remap(s.loci,this.getRootStructure(s.loci.structure))),o=Koe(n),a=this.plugin.managers.structure.hierarchy.findStructure(n[0]?.structure)?.transform?.cell.obj?.data.coordinateSystem,A=r[0];for(let s=1,c=n.length;s<c;++s){let l=r[s],{bTransform:u,rmsd:g}=o[s-1];await this.transform(l.cell,u,a);let m=Ru(A.label),p=Ru(l.label),d=r[s].atoms.length;this.plugin.log.info(`Superposed ${d} ${d===1?"atom":"atoms"} of [${m}] and [${p}] with RMSD ${g.toFixed(2)}.`)}await this.cameraReset()};this.superposeMccs=async()=>{let r=this.ligandEntries;if(r.length<2)return;if(r.filter(l=>l.ligands.length!==1).length){this.plugin.log.error("Ligand superposition: please select exactly 1 ligand per structure (remove extras in the history list).");return}let o=r[0],i=o.ligands[0],a=W.Loci.remap(i.loci,this.getRootStructure(i.loci.structure)),s=this.plugin.managers.structure.hierarchy.findStructure(a.structure)?.transform?.cell.obj?.data.coordinateSystem,c=ve.create("Ligand Superposition",async l=>{let u=0;for(let g=1;g<r.length;g++){l.shouldUpdate&&await l.update(`Superposing ligand ${g} of ${r.length-1}...`);let m=r[g],p=m.ligands[0],d=W.Loci.remap(p.loci,this.getRootStructure(p.loci.structure)),f=BOe(a,d,W4);if(!f){this.plugin.log.warn(`Ligand superposition: insufficient overlap for ${Ru(m.label)}.`);continue}await this.transform(m.cell,f.bTransform,s),u++;let I=Ru(o.label),C=Ru(m.label);this.plugin.log.info(`Ligand superposed [${I}] and [${C}] via ${f.method} using ${f.atomCount} atoms (RMSD ${f.rmsd.toFixed(2)} \xC5).`),f.truncated&&this.plugin.log.warn(`Ligand superposition: MCCS search for [${C}] hit its time budget; the alignment may not be optimal.`)}u>0&&!W.Loci.isEmpty(a)?this.plugin.managers.camera.focusLoci(a):await this.cameraReset()});await this.plugin.runTask(c,{useOverlay:!0})};this.superposeDb=async()=>{let r=this.plugin.managers.structure.hierarchy.behaviors.selection.value.structures,n=this.state.options.traceOnly,o=r.map(u=>u.cell.obj?.data),{entries:i,failedPairs:a,zeroOverlapPairs:A}=uOe(o,{traceOnly:n}),s=r[0]?.transform?.cell.obj?.data.coordinateSystem,c=0;for(let u of i)await this.transform(r[u.other].cell,u.transform.bTransform,s),c+=u.transform.rmsd;c/=Math.max(i.length-1,1);let l=u=>`[${u.map(([g,m])=>`(${o[g].models[0].entryId}, ${o[m].models[0].entryId})`).join(", ")}]`;A.length&&this.plugin.log.warn(`Superposition: No UNIPROT mapping overlap between structures ${l(A)}.`),a.length&&this.plugin.log.error(`Superposition: Failed to superpose structures ${l(a)}.`),i.length&&(this.plugin.log.info(`Superposed ${i.length+1} structures with avg. RMSD ${c.toFixed(2)} \xC5.`),await this.cameraReset())};this.superposeTMAlign=async()=>{let{query:r}=this.state.options.traceOnly?Oi.trace:Oi.polymer,n=this.chainEntries,o=n.map(s=>{let c=W.Loci.toStructure(s.loci),l=Qt.toLociWithSourceUnits(r(new qo(c)));return W.Loci.remap(l,this.getRootStructure(s.loci.structure))}),a=this.plugin.managers.structure.hierarchy.findStructure(o[0]?.structure)?.transform?.cell.obj?.data.coordinateSystem,A=ve.create("TM-align Superposition",async s=>{let c=n[0];for(let l=1,u=o.length;l<u;++l){s.shouldUpdate&&await s.update(`Superposing pair ${l} of ${u-1}...`);let g=n[l],m=gOe(o[0],o[l]),{bTransform:p,tmScoreA:d,tmScoreB:f,rmsd:I,alignedLength:C}=m;await this.transform(g.cell,p,a);let y=Ru(c.label),Q=Ru(g.label);this.plugin.log.info(`TM-align [${y}] and [${Q}]: TM-score=${d.toFixed(4)}/${f.toFixed(4)}, RMSD=${I.toFixed(2)} \xC5, aligned ${C} residues.`)}await this.cameraReset()});await this.plugin.runTask(A,{useOverlay:!0})};this.toggleByChains=()=>this.setState({action:this.state.action==="byChains"?void 0:"byChains"});this.toggleByAtoms=()=>this.setState({action:this.state.action==="byAtoms"?void 0:"byAtoms"});this.toggleByTMAlign=()=>this.setState({action:this.state.action==="byTMAlign"?void 0:"byTMAlign"});this.toggleByMccs=()=>this.setState({action:this.state.action==="byMccs"?void 0:"byMccs"});this.toggleOptions=()=>this.setState({action:this.state.action==="options"?void 0:"options"});this.setOptions=r=>{this.setState({options:r})}}componentDidMount(){this.subscribe(this.selection.events.changed,()=>{this.forceUpdate()}),this.subscribe(this.selection.events.additionsHistoryUpdated,()=>{this.forceUpdate()}),this.subscribe(this.plugin.behaviors.state.isBusy,r=>{this.setState({isBusy:r})}),this.subscribe(this.plugin.managers.structure.hierarchy.behaviors.selection,r=>{this.setState({canUseDb:r.structures.every(n=>!!n.cell.obj?.data&&n.cell.obj.data.models.some(o=>Mu.Provider.isApplicable(o))),canUseLigands:r.structures.filter(n=>VHt(n.cell.obj?.data)).length>=2})})}get selection(){return this.plugin.managers.structure.selection}async transform(r,n,o){let i=Pn.resolveAndCheck(this.plugin.state.data,r);if(!i)return;let a=this.plugin.state.data.selectQ(l=>l.byRef(i.transform.ref).subtree().withTransformer(ze.Model.TransformStructureConformation))[0],s={transform:{name:"matrix",params:{data:o&&!Y.isIdentity(o.matrix)?Y.mul(Y(),o.matrix,n):n,transpose:!1}}},c=a?this.plugin.state.data.build().to(a).update(s):this.plugin.state.data.build().to(r).insert(ze.Model.TransformStructureConformation,s,{tags:HHt});await this.plugin.runTask(this.plugin.state.data.updateTree(c))}getRootStructure(r){let n=this.plugin.helpers.substructureParent.get(r);return this.plugin.state.data.selectQ(o=>o.byValue(n).rootOfType(te.Molecule.Structure))[0].obj?.data}async cameraReset(){await new Promise(r=>requestAnimationFrame(r)),yt.Camera.Reset(this.plugin)}highlight(r){this.plugin.managers.interactivity.lociHighlights.highlightOnly({loci:r},!1)}moveHistory(r,n){this.plugin.managers.structure.selection.modifyHistory(r,n,void 0,!0)}focusLoci(r){this.plugin.managers.camera.focusLoci(r)}lociEntry(r,n){return(0,Bn.jsx)("div",{className:"msp-flex-row",children:(0,Bn.jsx)(hr,{noOverflow:!0,title:"Click to focus. Hover to highlight.",onClick:()=>this.focusLoci(r.loci),style:{width:"auto",textAlign:"left"},onMouseEnter:()=>this.highlight(r.loci),onMouseLeave:()=>this.plugin.managers.interactivity.lociHighlights.clearHighlights(),children:(0,Bn.jsx)("span",{dangerouslySetInnerHTML:{__html:r.label}})})},n)}historyEntry(r,n){let o=this.plugin.managers.structure.selection.additionsHistory;return(0,Bn.jsxs)("div",{className:"msp-flex-row",children:[(0,Bn.jsxs)(hr,{noOverflow:!0,title:"Click to focus. Hover to highlight.",onClick:()=>this.focusLoci(r.loci),style:{width:"auto",textAlign:"left"},onMouseEnter:()=>this.highlight(r.loci),onMouseLeave:()=>this.plugin.managers.interactivity.lociHighlights.clearHighlights(),children:[n,". ",(0,Bn.jsx)("span",{dangerouslySetInnerHTML:{__html:r.label}})]}),o.length>1&&(0,Bn.jsx)(Gr,{svg:TE,small:!0,className:"msp-form-control",onClick:()=>this.moveHistory(r,"up"),flex:"20px",title:"Move up"}),o.length>1&&(0,Bn.jsx)(Gr,{svg:LE,small:!0,className:"msp-form-control",onClick:()=>this.moveHistory(r,"down"),flex:"20px",title:"Move down"}),(0,Bn.jsx)(Gr,{svg:Uc,small:!0,className:"msp-form-control",onClick:()=>this.plugin.managers.structure.selection.modifyHistory(r,"remove"),flex:!0,title:"Remove"})]},r.id)}atomsLociEntry(r,n){return(0,Bn.jsxs)("div",{children:[(0,Bn.jsx)("div",{className:"msp-control-group-header",children:(0,Bn.jsx)("div",{className:"msp-no-overflow",title:r.label,children:r.label})}),(0,Bn.jsx)("div",{className:"msp-control-offset",children:r.atoms.map((o,i)=>this.historyEntry(o,i))})]},n)}ligandsLociEntry(r,n){return(0,Bn.jsxs)("div",{children:[(0,Bn.jsx)("div",{className:"msp-control-group-header",children:(0,Bn.jsx)("div",{className:"msp-no-overflow",title:r.label,children:r.label})}),(0,Bn.jsx)("div",{className:"msp-control-offset",children:r.ligands.map((o,i)=>this.historyEntry(o,i))})]},n)}get chainEntries(){let r=W.Location.create(),n=[];return this.plugin.managers.structure.selection.entries.forEach(({selection:o},i)=>{let a=Pn.resolveAndCheck(this.plugin.state.data,i);if(!a||W.Loci.isEmpty(o))return;let A=W.Loci.getFirstLocation(o,r);if(o.elements.length>1||Ke.entity.type(A)!=="polymer")return;let s=W.Stats.ofLoci(o),c=Y0(s,{countsOnly:!0}),l=bd(A,{reverse:!0,granularity:"chain"}).split("|"),u=`${c} | ${l[0]} | ${l[l.length-1]}`;n.push({loci:o,label:u,cell:a})}),n}get atomEntries(){let r=new Map,n=this.plugin.managers.structure.selection.additionsHistory;for(let i=0,a=n.length;i<a;++i){let A=n[i];if(W.Loci.size(A.loci)!==1)continue;let s=A.loci.structure;r.has(s)?r.get(s).push(A):r.set(s,[A])}let o=[];return r.forEach((i,a)=>{let A=this.plugin.helpers.substructureParent.get(a),s=[];for(let u=0,g=i.length;u<g;++u)s.push(i[u].loci.elements[0]);let c=W.Loci(i[0].loci.structure,s),l=c.structure.label.split(" | ")[0];o.push({loci:c,label:l,cell:A,atoms:i})}),o}get ligandEntries(){let r=new Map,n=this.plugin.managers.structure.selection.additionsHistory;for(let i=0,a=n.length;i<a;++i){let A=n[i];if(!$oe(A.loci))continue;let s=A.loci.structure;r.has(s)?r.get(s).push(A):r.set(s,[A])}let o=[];return r.forEach((i,a)=>{let A=this.plugin.helpers.substructureParent.get(a),s=[];for(let u=0,g=i.length;u<g;++u)s.push(i[u].loci.elements[0]);let c=W.Loci(i[0].loci.structure,s),l=c.structure.label.split(" | ")[0];o.push({loci:c,label:l,cell:A,ligands:i})}),o}toggleHint(){return this.plugin.config.get(jt.Viewport.ShowSelectionMode)?(0,Bn.jsxs)(Bn.Fragment,{children:[" ","(toggle ",(0,Bn.jsx)(cb,{inline:!0})," mode)"]}):null}addByChains(){let r=this.chainEntries;return(0,Bn.jsxs)(Bn.Fragment,{children:[r.length>0&&(0,Bn.jsx)("div",{className:"msp-control-offset",children:r.map((n,o)=>this.lociEntry(n,o))}),r.length<2&&(0,Bn.jsx)("div",{className:"msp-control-offset msp-help-text",children:(0,Bn.jsxs)("div",{className:"msp-help-description",children:[(0,Bn.jsx)(Kn,{svg:zl,inline:!0}),"Add 2 or more selections",this.toggleHint()," from separate structures. Selections must be limited to single polymer chains or residues therein."]})}),r.length>1&&(0,Bn.jsx)(hr,{title:"Superpose structures by selected chains.",className:"msp-btn-commit msp-btn-commit-on",onClick:this.superposeChains,style:{marginTop:"1px"},children:"Superpose"})]})}addByAtoms(){let r=this.atomEntries;return(0,Bn.jsxs)(Bn.Fragment,{children:[r.length>0&&(0,Bn.jsx)("div",{className:"msp-control-offset",children:r.map((n,o)=>this.atomsLociEntry(n,o))}),r.length<2&&(0,Bn.jsx)("div",{className:"msp-control-offset msp-help-text",children:(0,Bn.jsxs)("div",{className:"msp-help-description",children:[(0,Bn.jsx)(Kn,{svg:zl,inline:!0}),"Add 1 or more selections",this.toggleHint()," from separate structures. Selections must be limited to single atoms."]})}),r.length>1&&(0,Bn.jsx)(hr,{title:"Superpose structures by selected atoms.",className:"msp-btn-commit msp-btn-commit-on",onClick:this.superposeAtoms,style:{marginTop:"1px"},children:"Superpose"})]})}addByTMAlign(){let r=this.chainEntries;return(0,Bn.jsxs)(Bn.Fragment,{children:[r.length>0&&(0,Bn.jsx)("div",{className:"msp-control-offset",children:r.map((n,o)=>this.lociEntry(n,o))}),r.length<2&&(0,Bn.jsx)("div",{className:"msp-control-offset msp-help-text",children:(0,Bn.jsxs)("div",{className:"msp-help-description",children:[(0,Bn.jsx)(Kn,{svg:zl,inline:!0}),"Add 2 or more selections",this.toggleHint()," from separate structures. Selections must be limited to single polymer chains. TM-align performs structure-based alignment independent of sequence."]})}),r.length>1&&(0,Bn.jsx)(hr,{title:"Superpose structures using TM-align (structure-based alignment).",className:"msp-btn-commit msp-btn-commit-on",onClick:this.superposeTMAlign,style:{marginTop:"1px"},children:"TM-align Superpose"})]})}superposeByDbMapping(){return(0,Bn.jsx)(Bn.Fragment,{children:(0,Bn.jsx)(hr,{icon:eY,title:"Superpose structures using intersection of residues from SIFTS UNIPROT mapping.",onClick:this.superposeDb,disabled:this.state.isBusy,children:"UniProt"})})}addByMccs(){let r=this.ligandEntries;return(0,Bn.jsxs)(Bn.Fragment,{children:[r.length>0&&(0,Bn.jsx)("div",{className:"msp-control-offset",children:r.map((n,o)=>this.ligandsLociEntry(n,o))}),r.length<2&&(0,Bn.jsx)("div",{className:"msp-control-offset msp-help-text",children:(0,Bn.jsxs)("div",{className:"msp-help-description",children:[(0,Bn.jsx)(Kn,{svg:zl,inline:!0}),"Add 1 selection",this.toggleHint()," per structure (2+ structures total). Selections must be confined to a single ligand residue. Fast path matches atom names when compound name matches."]})}),r.length>1&&(0,Bn.jsx)(hr,{title:"Superpose structures by selected ligands (atom-name fast path, then Maximum Common Connected Subgraph).",className:"msp-btn-commit msp-btn-commit-on",onClick:this.superposeMccs,style:{marginTop:"1px"},children:"Superpose"})]})}render(){return(0,Bn.jsxs)(Bn.Fragment,{children:[(0,Bn.jsxs)("div",{className:"msp-flex-row",children:[(0,Bn.jsx)(la,{icon:eY,label:"Chains",title:"Superpose selected polymer chains, optionally guided by a sequence alignment (see Options). Select one chain (or residues within it) per structure; 2+ structures.",toggle:this.toggleByChains,isSelected:this.state.action==="byChains",disabled:this.state.isBusy}),(0,Bn.jsx)(la,{icon:eY,label:"TM-align",title:"Sequence-independent structural alignment of polymer chains (TM-align) \u2014 best when sequence identity is low. Select one chain per structure; 2+ structures.",toggle:this.toggleByTMAlign,isSelected:this.state.action==="byTMAlign",disabled:this.state.isBusy}),this.state.canUseDb&&this.superposeByDbMapping(),(0,Bn.jsx)(la,{icon:tl,label:"",title:"Options for chain- and UniProt-based superposition (sequence-guided alignment, trace/CA-only).",toggle:this.toggleOptions,isSelected:this.state.action==="options",disabled:this.state.isBusy,style:{flex:"0 0 40px",padding:0}})]}),(0,Bn.jsxs)("div",{className:"msp-flex-row",children:[this.state.canUseLigands&&(0,Bn.jsx)(la,{icon:FGe,label:"Ligands",title:"Superpose ligands by atom-name match (identical compound) or maximum common connected subgraph (MCCS) otherwise. Select one ligand residue per structure; 2+ structures.",toggle:this.toggleByMccs,isSelected:this.state.action==="byMccs",disabled:this.state.isBusy}),(0,Bn.jsx)(la,{icon:vGe,label:"Atoms",title:"Superpose by manually selected atoms, paired in selection order. Pick the same atoms, in the same order, in each structure (1+ per structure).",toggle:this.toggleByAtoms,isSelected:this.state.action==="byAtoms",disabled:this.state.isBusy})]}),this.state.action==="byChains"&&this.addByChains(),this.state.action==="byAtoms"&&this.addByAtoms(),this.state.action==="byTMAlign"&&this.addByTMAlign(),this.state.action==="byMccs"&&this.state.canUseLigands&&this.addByMccs(),this.state.action==="options"&&(0,Bn.jsx)("div",{className:"msp-control-offset",children:(0,Bn.jsx)(Mn,{params:IOe,values:this.state.options,onChangeValues:this.setOptions,isDisabled:this.state.isBusy})})]})}};var Js=kt(Qr()),Z4=class extends ma{defaultState(){return{isCollapsed:!1,header:"Quick Styles",brand:{accent:"gray",svg:AGe}}}renderControls(){return(0,Js.jsx)(Js.Fragment,{children:(0,Js.jsx)(tie,{})})}},tie=class extends ta{constructor(){super(...arguments);this.state={busy:!1,style:"default"}}async applyRepresentation(r){this.setState({busy:!0}),await _Ht(this.plugin,r),await hOe(this.plugin,this.state.style),this.setState({busy:!1})}async applyStyle(r){this.setState({busy:!0}),await hOe(this.plugin,r),this.setState({busy:!1,style:r})}render(){return(0,Js.jsxs)(Js.Fragment,{children:[(0,Js.jsx)(COe,{title:"Apply Representation",children:(0,Js.jsxs)("div",{className:"msp-flex-row",children:[(0,Js.jsx)(hr,{title:"Applies default representation preset (depends on structure size)",onClick:()=>this.applyRepresentation("default"),disabled:this.state.busy,children:"Default"}),(0,Js.jsx)(hr,{title:"Applies cartoon polymer and ball-and-stick ligand representation preset",onClick:()=>this.applyRepresentation("cartoon"),disabled:this.state.busy,children:"Cartoon"}),(0,Js.jsx)(hr,{title:"Applies spacefill representation preset",onClick:()=>this.applyRepresentation("spacefill"),disabled:this.state.busy,children:"Spacefill"}),(0,Js.jsx)(hr,{title:"Applies molecular surface representation preset",onClick:()=>this.applyRepresentation("surface"),disabled:this.state.busy,children:"Surface"})]})}),(0,Js.jsx)(COe,{title:"Apply Style",children:(0,Js.jsxs)("div",{className:"msp-flex-row",children:[(0,Js.jsx)(hr,{title:"Applies default appearance (no outline, no ignore-light)",onClick:()=>this.applyStyle("default"),disabled:this.state.busy,children:"Default"}),(0,Js.jsx)(hr,{title:"Applies illustrative appearance (outline, ignore-light)",onClick:()=>this.applyStyle("illustrative"),disabled:this.state.busy,children:"Illustrative"})]})})]})}};function COe(e){return(0,Js.jsxs)("div",{className:"msp-control-group-wrapper",children:[(0,Js.jsx)("div",{className:"msp-control-group-header",children:(0,Js.jsx)("div",{children:(0,Js.jsx)("b",{children:e.title})})}),e.children]})}async function _Ht(e,t){let{structures:r}=e.managers.structure.hierarchy.selection;switch(t){case"default":let n=e.config.get(jt.Structure.DefaultRepresentationPreset)||ni.auto.id,o=e.builders.structure.representation.resolveProvider(n);await e.managers.structure.component.applyPreset(r,o);break;case"spacefill":await e.managers.structure.component.applyPreset(r,ni.illustrative);break;case"cartoon":await e.managers.structure.component.applyPreset(r,ni["polymer-and-ligand"]);break;case"surface":await e.managers.structure.component.applyPreset(r,ni["molecular-surface"]);break}}async function hOe(e,t){if(t==="default"&&(await e.managers.structure.component.setOptions({...e.managers.structure.component.state.options,ignoreLight:!1}),e.canvas3d)){let r=h.getDefaultValues(Hv);e.canvas3d.setProps({postprocessing:{outline:r.outline,occlusion:r.occlusion,shadow:r.shadow}})}if(t==="illustrative"&&(await e.managers.structure.component.setOptions({...e.managers.structure.component.state.options,ignoreLight:!0}),e.canvas3d)){let r=e.canvas3d.props.postprocessing;e.canvas3d.setProps({postprocessing:{outline:{name:"on",params:r.outline.name==="on"?r.outline.params:{scale:1,color:0,threshold:.33,includeTransparent:!0}},occlusion:{name:"on",params:r.occlusion.name==="on"?r.occlusion.params:{multiScale:{name:"off",params:{}},radius:5,bias:.8,blurKernelSize:15,blurDepthBias:.5,samples:32,resolutionScale:1,color:0,transparentThreshold:.4}},shadow:{name:"off",params:{}}}})}}var zm=kt(Qr()),q4=class extends ma{defaultState(){return{isCollapsed:!1,header:"Procedural Animation",brand:{accent:"gray",svg:O_}}}renderControls(){return(0,zm.jsx)(rie,{})}},rie=class extends ta{constructor(){super(...arguments);this.state={busy:!1}}get components(){return this.plugin.managers.structure.hierarchy.selection.structures.flatMap(r=>r.components)}async applyUncertaintyWiggle(){this.setState({busy:!0});try{let r=this.plugin.managers.structure.component.state.options;await this.plugin.managers.structure.component.setOptions({...r,animation:{...r.animation,wiggleAmplitude:0,tumbleAmplitude:0}}),await lRe(this.plugin,this.components)}finally{this.setState({busy:!1})}}async applyDynamics(){this.setState({busy:!0});try{let r=this.plugin.managers.structure.component.state.options;await this.plugin.managers.structure.component.setOptions({...r,animation:{...r.animation,wiggleSpeed:7,wiggleAmplitude:1,wiggleFrequency:.2}}),await Mq(this.plugin,this.components)}finally{this.setState({busy:!1})}}async clearWiggle(){this.setState({busy:!0});try{let r=this.plugin.managers.structure.component.state.options;await this.plugin.managers.structure.component.setOptions({...r,animation:{...r.animation,wiggleAmplitude:0,tumbleAmplitude:0}}),await Mq(this.plugin,this.components)}finally{this.setState({busy:!1})}}render(){return(0,zm.jsx)(zm.Fragment,{children:(0,zm.jsxs)("div",{className:"msp-control-group-wrapper",children:[(0,zm.jsx)("div",{className:"msp-control-group-header",children:(0,zm.jsx)("div",{children:(0,zm.jsx)("b",{children:"Apply Wiggle"})})}),(0,zm.jsxs)("div",{className:"msp-flex-row",children:[(0,zm.jsx)(hr,{title:"Set wiggle speed to 8 and amplitude to 1",onClick:()=>this.applyDynamics(),disabled:this.state.busy,children:"Dynamics"}),(0,zm.jsx)(hr,{title:"Set per-group wiggle amplitude based on B-factor / RMSF uncertainty",onClick:()=>this.applyUncertaintyWiggle(),disabled:this.state.busy,children:"Uncertainty"}),(0,zm.jsx)(hr,{title:"Set wiggle/tumble amplitude to zero and remove per-group wiggle layers",onClick:()=>this.clearWiggle(),disabled:this.state.busy,children:"Clear"})]})]})})}};var NB=kt(Qa());function nie(e,t){let r=String(e);if(typeof t!="string")throw new TypeError("Expected character");let n=0,o=r.indexOf(t);for(;o!==-1;)n++,o=r.indexOf(t,o+t.length);return n}function oie(e){if(typeof e!="string")throw new TypeError("Expected a string");return e.replace(/[|\\{}()[\]^$+*?.]/g,"\\$&").replace(/-/g,"\\x2d")}function iie(e,t,r){let o=sb((r||{}).ignore||[]),i=YHt(t),a=-1;for(;++a<i.length;)TT(e,"text",A);function A(c,l){let u=-1,g;for(;++u<l.length;){let m=l[u],p=g?g.children:void 0;if(o(m,p?p.indexOf(m):void 0,g))return;g=m}if(g)return s(c,l)}function s(c,l){let u=l[l.length-1],g=i[a][0],m=i[a][1],p=0,f=u.children.indexOf(c),I=!1,C=[];g.lastIndex=0;let y=g.exec(c.value);for(;y;){let Q=y.index,E={index:y.index,input:y.input,stack:[...l,c]},b=m(...y,E);if(typeof b=="string"&&(b=b.length>0?{type:"text",value:b}:void 0),b===!1?g.lastIndex=Q+1:(p!==Q&&C.push({type:"text",value:c.value.slice(p,Q)}),Array.isArray(b)?C.push(...b):b&&C.push(b),p=Q+y[0].length,I=!0),!g.global)break;y=g.exec(c.value)}return I?(p<c.value.length&&C.push({type:"text",value:c.value.slice(p)}),u.children.splice(f,1,...C)):C=[c],f+C.length}}function YHt(e){let t=[];if(!Array.isArray(e))throw new TypeError("Expected find and replace tuple or list of tuples");let r=!e[0]||Array.isArray(e[0])?e:[e],n=-1;for(;++n<r.length;){let o=r[n];t.push([OHt(o[0]),JHt(o[1])])}return t}function OHt(e){return typeof e=="string"?new RegExp(oie(e),"g"):e}function JHt(e){return typeof e=="function"?e:function(){return e}}var aie="phrasing",Aie=["autolink","link","image","label"];function cie(){return{transforms:[ZHt],enter:{literalAutolink:zHt,literalAutolinkEmail:sie,literalAutolinkHttp:sie,literalAutolinkWww:sie},exit:{literalAutolink:XHt,literalAutolinkEmail:WHt,literalAutolinkHttp:KHt,literalAutolinkWww:jHt}}}function lie(){return{unsafe:[{character:"@",before:"[+\\-.\\w]",after:"[\\-.\\w]",inConstruct:aie,notInConstruct:Aie},{character:".",before:"[Ww]",after:"[\\-.\\w]",inConstruct:aie,notInConstruct:Aie},{character:":",before:"[ps]",after:"\\/",inConstruct:aie,notInConstruct:Aie}]}}function zHt(e){this.enter({type:"link",title:null,url:"",children:[]},e)}function sie(e){this.config.enter.autolinkProtocol.call(this,e)}function KHt(e){this.config.exit.autolinkProtocol.call(this,e)}function jHt(e){this.config.exit.data.call(this,e);let t=this.stack[this.stack.length-1];t.type,t.url="http://"+this.sliceSerialize(e)}function WHt(e){this.config.exit.autolinkEmail.call(this,e)}function XHt(e){this.exit(e)}function ZHt(e){iie(e,[[/(https?:\/\/|www(?=\.))([-.\w]+)([^ \t\r\n]*)/gi,qHt],[/(?<=^|\s|\p{P}|\p{S})([-.\w+]+)@([-\w]+(?:\.[-\w]+)+)/gu,$Ht]],{ignore:["link","linkReference"]})}function qHt(e,t,r,n,o){let i="";if(!yOe(o)||(/^w/i.test(t)&&(r=t+r,t="",i="http://"),!eVt(r)))return!1;let a=tVt(r+n);if(!a[0])return!1;let A={type:"link",title:null,url:i+t+a[0],children:[{type:"text",value:t+a[0]}]};return a[1]?[A,{type:"text",value:a[1]}]:A}function $Ht(e,t,r,n){return!yOe(n,!0)||/[-\d_]$/.test(r)?!1:{type:"link",title:null,url:"mailto:"+t+"@"+r,children:[{type:"text",value:t+"@"+r}]}}function eVt(e){let t=e.split(".");return!(t.length<2||t[t.length-1]&&(/_/.test(t[t.length-1])||!/[a-zA-Z\d]/.test(t[t.length-1]))||t[t.length-2]&&(/_/.test(t[t.length-2])||!/[a-zA-Z\d]/.test(t[t.length-2])))}function tVt(e){let t=/[!"&'),.:;<>?\]}]+$/.exec(e);if(!t)return[e,void 0];e=e.slice(0,t.index);let r=t[0],n=r.indexOf(")"),o=nie(e,"("),i=nie(e,")");for(;n!==-1&&o>i;)e+=r.slice(0,n+1),r=r.slice(n+1),n=r.indexOf(")"),i++;return[e,r]}function yOe(e,t){let r=e.input.charCodeAt(e.index-1);return(e.index===0||UC(r)||nS(r))&&(!t||r!==47)}QOe.peek=lVt;function rVt(){this.buffer()}function nVt(e){this.enter({type:"footnoteReference",identifier:"",label:""},e)}function oVt(){this.buffer()}function iVt(e){this.enter({type:"footnoteDefinition",identifier:"",label:"",children:[]},e)}function aVt(e){let t=this.resume(),r=this.stack[this.stack.length-1];r.type,r.identifier=cg(this.sliceSerialize(e)).toLowerCase(),r.label=t}function AVt(e){this.exit(e)}function sVt(e){let t=this.resume(),r=this.stack[this.stack.length-1];r.type,r.identifier=cg(this.sliceSerialize(e)).toLowerCase(),r.label=t}function cVt(e){this.exit(e)}function lVt(){return"["}function QOe(e,t,r,n){let o=r.createTracker(n),i=o.move("[^"),a=r.enter("footnoteReference"),A=r.enter("reference");return i+=o.move(r.safe(r.associationId(e),{after:"]",before:i})),A(),a(),i+=o.move("]"),i}function uie(){return{enter:{gfmFootnoteCallString:rVt,gfmFootnoteCall:nVt,gfmFootnoteDefinitionLabelString:oVt,gfmFootnoteDefinition:iVt},exit:{gfmFootnoteCallString:aVt,gfmFootnoteCall:AVt,gfmFootnoteDefinitionLabelString:sVt,gfmFootnoteDefinition:cVt}}}function gie(e){let t=!1;return e&&e.firstLineBlank&&(t=!0),{handlers:{footnoteDefinition:r,footnoteReference:QOe},unsafe:[{character:"[",inConstruct:["label","phrasing","reference"]}]};function r(n,o,i,a){let A=i.createTracker(a),s=A.move("[^"),c=i.enter("footnoteDefinition"),l=i.enter("label");return s+=A.move(i.safe(i.associationId(n),{before:s,after:"]"})),l(),s+=A.move("]:"),n.children&&n.children.length>0&&(A.shift(4),s+=A.move((t?`
|
|
`:" ")+i.indentLines(i.containerFlow(n,A.current()),t?EOe:uVt))),c(),s}}function uVt(e,t,r){return t===0?e:EOe(e,t,r)}function EOe(e,t,r){return(r?"":" ")+e}var gVt=["autolink","destinationLiteral","destinationRaw","reference","titleQuote","titleApostrophe"];bOe.peek=pVt;function mie(){return{canContainEols:["delete"],enter:{strikethrough:mVt},exit:{strikethrough:dVt}}}function die(){return{unsafe:[{character:"~",inConstruct:"phrasing",notInConstruct:gVt}],handlers:{delete:bOe}}}function mVt(e){this.enter({type:"delete",children:[]},e)}function dVt(e){this.exit(e)}function bOe(e,t,r,n){let o=r.createTracker(n),i=r.enter("strikethrough"),a=o.move("~~");return a+=r.containerPhrasing(e,{...o.current(),before:a,after:"~"}),a+=o.move("~~"),i(),a}function pVt(){return"~"}function fVt(e){return e.length}function SOe(e,t){let r=t||{},n=(r.align||[]).concat(),o=r.stringLength||fVt,i=[],a=[],A=[],s=[],c=0,l=-1;for(;++l<e.length;){let d=[],f=[],I=-1;for(e[l].length>c&&(c=e[l].length);++I<e[l].length;){let C=BVt(e[l][I]);if(r.alignDelimiters!==!1){let y=o(C);f[I]=y,(s[I]===void 0||y>s[I])&&(s[I]=y)}d.push(C)}a[l]=d,A[l]=f}let u=-1;if(typeof n=="object"&&"length"in n)for(;++u<c;)i[u]=xOe(n[u]);else{let d=xOe(n);for(;++u<c;)i[u]=d}u=-1;let g=[],m=[];for(;++u<c;){let d=i[u],f="",I="";d===99?(f=":",I=":"):d===108?f=":":d===114&&(I=":");let C=r.alignDelimiters===!1?1:Math.max(1,s[u]-f.length-I.length),y=f+"-".repeat(C)+I;r.alignDelimiters!==!1&&(C=f.length+C+I.length,C>s[u]&&(s[u]=C),m[u]=C),g[u]=y}a.splice(1,0,g),A.splice(1,0,m),l=-1;let p=[];for(;++l<a.length;){let d=a[l],f=A[l];u=-1;let I=[];for(;++u<c;){let C=d[u]||"",y="",Q="";if(r.alignDelimiters!==!1){let E=s[u]-(f[u]||0),b=i[u];b===114?y=" ".repeat(E):b===99?E%2?(y=" ".repeat(E/2+.5),Q=" ".repeat(E/2-.5)):(y=" ".repeat(E/2),Q=y):Q=" ".repeat(E)}r.delimiterStart!==!1&&!u&&I.push("|"),r.padding!==!1&&!(r.alignDelimiters===!1&&C==="")&&(r.delimiterStart!==!1||u)&&I.push(" "),r.alignDelimiters!==!1&&I.push(y),I.push(C),r.alignDelimiters!==!1&&I.push(Q),r.padding!==!1&&I.push(" "),(r.delimiterEnd!==!1||u!==c-1)&&I.push("|")}p.push(r.delimiterEnd===!1?I.join("").replace(/ +$/,""):I.join(""))}return p.join(`
|
|
`)}function BVt(e){return e==null?"":String(e)}function xOe(e){let t=typeof e=="string"?e.codePointAt(0):0;return t===67||t===99?99:t===76||t===108?108:t===82||t===114?114:0}function DOe(e,t,r,n){let o=r.enter("blockquote"),i=r.createTracker(n);i.move("> "),i.shift(2);let a=r.indentLines(r.containerFlow(e,i.current()),IVt);return o(),a}function IVt(e,t,r){return">"+(r?"":" ")+e}function FOe(e,t){return vOe(e,t.inConstruct,!0)&&!vOe(e,t.notInConstruct,!1)}function vOe(e,t,r){if(typeof t=="string"&&(t=[t]),!t||t.length===0)return r;let n=-1;for(;++n<t.length;)if(e.includes(t[n]))return!0;return!1}function pie(e,t,r,n){let o=-1;for(;++o<r.unsafe.length;)if(r.unsafe[o].character===`
|
|
`&&FOe(r.stack,r.unsafe[o]))return/[ \t]/.test(n.before)?"":" ";return`\\
|
|
`}function wOe(e,t){let r=String(e),n=r.indexOf(t),o=n,i=0,a=0;if(typeof t!="string")throw new TypeError("Expected substring");for(;n!==-1;)n===o?++i>a&&(a=i):i=1,o=n+t.length,n=r.indexOf(t,o);return a}function ROe(e,t){return!!(t.options.fences===!1&&e.value&&!e.lang&&/[^ \r\n]/.test(e.value)&&!/^[\t ]*(?:[\r\n]|$)|(?:^|[\r\n])[\t ]*$/.test(e.value))}function UOe(e){let t=e.options.fence||"`";if(t!=="`"&&t!=="~")throw new Error("Cannot serialize code with `"+t+"` for `options.fence`, expected `` ` `` or `~`");return t}function LOe(e,t,r,n){let o=UOe(r),i=e.value||"",a=o==="`"?"GraveAccent":"Tilde";if(ROe(e,r)){let u=r.enter("codeIndented"),g=r.indentLines(i,CVt);return u(),g}let A=r.createTracker(n),s=o.repeat(Math.max(wOe(i,o)+1,3)),c=r.enter("codeFenced"),l=A.move(s);if(e.lang){let u=r.enter(`codeFencedLang${a}`);l+=A.move(r.safe(e.lang,{before:l,after:" ",encode:["`"],...A.current()})),u()}if(e.lang&&e.meta){let u=r.enter(`codeFencedMeta${a}`);l+=A.move(" "),l+=A.move(r.safe(e.meta,{before:l,after:`
|
|
`,encode:["`"],...A.current()})),u()}return l+=A.move(`
|
|
`),i&&(l+=A.move(i+`
|
|
`)),l+=A.move(s),c(),l}function CVt(e,t,r){return(r?"":" ")+e}function Aw(e){let t=e.options.quote||'"';if(t!=='"'&&t!=="'")throw new Error("Cannot serialize title with `"+t+"` for `options.quote`, expected `\"`, or `'`");return t}function TOe(e,t,r,n){let o=Aw(r),i=o==='"'?"Quote":"Apostrophe",a=r.enter("definition"),A=r.enter("label"),s=r.createTracker(n),c=s.move("[");return c+=s.move(r.safe(r.associationId(e),{before:c,after:"]",...s.current()})),c+=s.move("]: "),A(),!e.url||/[\0- \u007F]/.test(e.url)?(A=r.enter("destinationLiteral"),c+=s.move("<"),c+=s.move(r.safe(e.url,{before:c,after:">",...s.current()})),c+=s.move(">")):(A=r.enter("destinationRaw"),c+=s.move(r.safe(e.url,{before:c,after:e.title?" ":`
|
|
`,...s.current()}))),A(),e.title&&(A=r.enter(`title${i}`),c+=s.move(" "+o),c+=s.move(r.safe(e.title,{before:c,after:o,...s.current()})),c+=s.move(o),A()),a(),c}function POe(e){let t=e.options.emphasis||"*";if(t!=="*"&&t!=="_")throw new Error("Cannot serialize emphasis with `"+t+"` for `options.emphasis`, expected `*`, or `_`");return t}function gb(e){return"&#x"+e.toString(16).toUpperCase()+";"}function sw(e,t,r){let n=By(e),o=By(t);return n===void 0?o===void 0?r==="_"?{inside:!0,outside:!0}:{inside:!1,outside:!1}:o===1?{inside:!0,outside:!0}:{inside:!1,outside:!0}:n===1?o===void 0?{inside:!1,outside:!1}:o===1?{inside:!0,outside:!0}:{inside:!1,outside:!1}:o===void 0?{inside:!1,outside:!1}:o===1?{inside:!0,outside:!1}:{inside:!1,outside:!1}}fie.peek=hVt;function fie(e,t,r,n){let o=POe(r),i=r.enter("emphasis"),a=r.createTracker(n),A=a.move(o),s=a.move(r.containerPhrasing(e,{after:o,before:A,...a.current()})),c=s.charCodeAt(0),l=sw(n.before.charCodeAt(n.before.length-1),c,o);l.inside&&(s=gb(c)+s.slice(1));let u=s.charCodeAt(s.length-1),g=sw(n.after.charCodeAt(0),u,o);g.inside&&(s=s.slice(0,-1)+gb(u));let m=a.move(o);return i(),r.attentionEncodeSurroundingInfo={after:g.outside,before:l.outside},A+s+m}function hVt(e,t,r){return r.options.emphasis||"*"}function GOe(e,t){let r=!1;return cS(e,function(n){if("value"in n&&/\r?\n|\r/.test(n.value)||n.type==="break")return r=!0,sS}),!!((!e.depth||e.depth<3)&&tS(e)&&(t.options.setext||r))}function NOe(e,t,r,n){let o=Math.max(Math.min(6,e.depth||1),1),i=r.createTracker(n);if(GOe(e,r)){let l=r.enter("headingSetext"),u=r.enter("phrasing"),g=r.containerPhrasing(e,{...i.current(),before:`
|
|
`,after:`
|
|
`});return u(),l(),g+`
|
|
`+(o===1?"=":"-").repeat(g.length-(Math.max(g.lastIndexOf("\r"),g.lastIndexOf(`
|
|
`))+1))}let a="#".repeat(o),A=r.enter("headingAtx"),s=r.enter("phrasing");i.move(a+" ");let c=r.containerPhrasing(e,{before:"# ",after:`
|
|
`,...i.current()});return/^[\t ]/.test(c)&&(c=gb(c.charCodeAt(0))+c.slice(1)),c=c?a+" "+c:a,r.options.closeAtx&&(c+=" "+a),s(),A(),c}Bie.peek=yVt;function Bie(e){return e.value||""}function yVt(){return"<"}Iie.peek=QVt;function Iie(e,t,r,n){let o=Aw(r),i=o==='"'?"Quote":"Apostrophe",a=r.enter("image"),A=r.enter("label"),s=r.createTracker(n),c=s.move("![");return c+=s.move(r.safe(e.alt,{before:c,after:"]",...s.current()})),c+=s.move("]("),A(),!e.url&&e.title||/[\0- \u007F]/.test(e.url)?(A=r.enter("destinationLiteral"),c+=s.move("<"),c+=s.move(r.safe(e.url,{before:c,after:">",...s.current()})),c+=s.move(">")):(A=r.enter("destinationRaw"),c+=s.move(r.safe(e.url,{before:c,after:e.title?" ":")",...s.current()}))),A(),e.title&&(A=r.enter(`title${i}`),c+=s.move(" "+o),c+=s.move(r.safe(e.title,{before:c,after:o,...s.current()})),c+=s.move(o),A()),c+=s.move(")"),a(),c}function QVt(){return"!"}Cie.peek=EVt;function Cie(e,t,r,n){let o=e.referenceType,i=r.enter("imageReference"),a=r.enter("label"),A=r.createTracker(n),s=A.move("!["),c=r.safe(e.alt,{before:s,after:"]",...A.current()});s+=A.move(c+"]["),a();let l=r.stack;r.stack=[],a=r.enter("reference");let u=r.safe(r.associationId(e),{before:s,after:"]",...A.current()});return a(),r.stack=l,i(),o==="full"||!c||c!==u?s+=A.move(u+"]"):o==="shortcut"?s=s.slice(0,-1):s+=A.move("]"),s}function EVt(){return"!"}hie.peek=bVt;function hie(e,t,r){let n=e.value||"",o="`",i=-1;for(;new RegExp("(^|[^`])"+o+"([^`]|$)").test(n);)o+="`";for(/[^ \r\n]/.test(n)&&(/^[ \r\n]/.test(n)&&/[ \r\n]$/.test(n)||/^`|`$/.test(n))&&(n=" "+n+" ");++i<r.unsafe.length;){let a=r.unsafe[i],A=r.compilePattern(a),s;if(a.atBreak)for(;s=A.exec(n);){let c=s.index;n.charCodeAt(c)===10&&n.charCodeAt(c-1)===13&&c--,n=n.slice(0,c)+" "+n.slice(s.index+1)}}return o+n+o}function bVt(){return"`"}function yie(e,t){let r=tS(e);return!!(!t.options.resourceLink&&e.url&&!e.title&&e.children&&e.children.length===1&&e.children[0].type==="text"&&(r===e.url||"mailto:"+r===e.url)&&/^[a-z][a-z+.-]+:/i.test(e.url)&&!/[\0- <>\u007F]/.test(e.url))}Qie.peek=xVt;function Qie(e,t,r,n){let o=Aw(r),i=o==='"'?"Quote":"Apostrophe",a=r.createTracker(n),A,s;if(yie(e,r)){let l=r.stack;r.stack=[],A=r.enter("autolink");let u=a.move("<");return u+=a.move(r.containerPhrasing(e,{before:u,after:">",...a.current()})),u+=a.move(">"),A(),r.stack=l,u}A=r.enter("link"),s=r.enter("label");let c=a.move("[");return c+=a.move(r.containerPhrasing(e,{before:c,after:"](",...a.current()})),c+=a.move("]("),s(),!e.url&&e.title||/[\0- \u007F]/.test(e.url)?(s=r.enter("destinationLiteral"),c+=a.move("<"),c+=a.move(r.safe(e.url,{before:c,after:">",...a.current()})),c+=a.move(">")):(s=r.enter("destinationRaw"),c+=a.move(r.safe(e.url,{before:c,after:e.title?" ":")",...a.current()}))),s(),e.title&&(s=r.enter(`title${i}`),c+=a.move(" "+o),c+=a.move(r.safe(e.title,{before:c,after:o,...a.current()})),c+=a.move(o),s()),c+=a.move(")"),A(),c}function xVt(e,t,r){return yie(e,r)?"<":"["}Eie.peek=SVt;function Eie(e,t,r,n){let o=e.referenceType,i=r.enter("linkReference"),a=r.enter("label"),A=r.createTracker(n),s=A.move("["),c=r.containerPhrasing(e,{before:s,after:"]",...A.current()});s+=A.move(c+"]["),a();let l=r.stack;r.stack=[],a=r.enter("reference");let u=r.safe(r.associationId(e),{before:s,after:"]",...A.current()});return a(),r.stack=l,i(),o==="full"||!c||c!==u?s+=A.move(u+"]"):o==="shortcut"?s=s.slice(0,-1):s+=A.move("]"),s}function SVt(){return"["}function cw(e){let t=e.options.bullet||"*";if(t!=="*"&&t!=="+"&&t!=="-")throw new Error("Cannot serialize items with `"+t+"` for `options.bullet`, expected `*`, `+`, or `-`");return t}function MOe(e){let t=cw(e),r=e.options.bulletOther;if(!r)return t==="*"?"-":"*";if(r!=="*"&&r!=="+"&&r!=="-")throw new Error("Cannot serialize items with `"+r+"` for `options.bulletOther`, expected `*`, `+`, or `-`");if(r===t)throw new Error("Expected `bullet` (`"+t+"`) and `bulletOther` (`"+r+"`) to be different");return r}function kOe(e){let t=e.options.bulletOrdered||".";if(t!=="."&&t!==")")throw new Error("Cannot serialize items with `"+t+"` for `options.bulletOrdered`, expected `.` or `)`");return t}function $4(e){let t=e.options.rule||"*";if(t!=="*"&&t!=="-"&&t!=="_")throw new Error("Cannot serialize rules with `"+t+"` for `options.rule`, expected `*`, `-`, or `_`");return t}function HOe(e,t,r,n){let o=r.enter("list"),i=r.bulletCurrent,a=e.ordered?kOe(r):cw(r),A=e.ordered?a==="."?")":".":MOe(r),s=t&&r.bulletLastUsed?a===r.bulletLastUsed:!1;if(!e.ordered){let l=e.children?e.children[0]:void 0;if((a==="*"||a==="-")&&l&&(!l.children||!l.children[0])&&r.stack[r.stack.length-1]==="list"&&r.stack[r.stack.length-2]==="listItem"&&r.stack[r.stack.length-3]==="list"&&r.stack[r.stack.length-4]==="listItem"&&r.indexStack[r.indexStack.length-1]===0&&r.indexStack[r.indexStack.length-2]===0&&r.indexStack[r.indexStack.length-3]===0&&(s=!0),$4(r)===a&&l){let u=-1;for(;++u<e.children.length;){let g=e.children[u];if(g&&g.type==="listItem"&&g.children&&g.children[0]&&g.children[0].type==="thematicBreak"){s=!0;break}}}}s&&(a=A),r.bulletCurrent=a;let c=r.containerFlow(e,n);return r.bulletLastUsed=a,r.bulletCurrent=i,o(),c}function VOe(e){let t=e.options.listItemIndent||"one";if(t!=="tab"&&t!=="one"&&t!=="mixed")throw new Error("Cannot serialize items with `"+t+"` for `options.listItemIndent`, expected `tab`, `one`, or `mixed`");return t}function _Oe(e,t,r,n){let o=VOe(r),i=r.bulletCurrent||cw(r);t&&t.type==="list"&&t.ordered&&(i=(typeof t.start=="number"&&t.start>-1?t.start:1)+(r.options.incrementListMarker===!1?0:t.children.indexOf(e))+i);let a=i.length+1;(o==="tab"||o==="mixed"&&(t&&t.type==="list"&&t.spread||e.spread))&&(a=Math.ceil(a/4)*4);let A=r.createTracker(n);A.move(i+" ".repeat(a-i.length)),A.shift(a);let s=r.enter("listItem"),c=r.indentLines(r.containerFlow(e,A.current()),l);return s(),c;function l(u,g,m){return g?(m?"":" ".repeat(a))+u:(m?i:i+" ".repeat(a-i.length))+u}}function YOe(e,t,r,n){let o=r.enter("paragraph"),i=r.enter("phrasing"),a=r.containerPhrasing(e,n);return i(),o(),a}var bie=sb(["break","delete","emphasis","footnote","footnoteReference","image","imageReference","inlineCode","inlineMath","link","linkReference","mdxJsxTextElement","mdxTextExpression","strong","text","textDirective"]);function OOe(e,t,r,n){return(e.children.some(function(a){return bie(a)})?r.containerPhrasing:r.containerFlow).call(r,e,n)}function JOe(e){let t=e.options.strong||"*";if(t!=="*"&&t!=="_")throw new Error("Cannot serialize strong with `"+t+"` for `options.strong`, expected `*`, or `_`");return t}xie.peek=DVt;function xie(e,t,r,n){let o=JOe(r),i=r.enter("strong"),a=r.createTracker(n),A=a.move(o+o),s=a.move(r.containerPhrasing(e,{after:o,before:A,...a.current()})),c=s.charCodeAt(0),l=sw(n.before.charCodeAt(n.before.length-1),c,o);l.inside&&(s=gb(c)+s.slice(1));let u=s.charCodeAt(s.length-1),g=sw(n.after.charCodeAt(0),u,o);g.inside&&(s=s.slice(0,-1)+gb(u));let m=a.move(o+o);return i(),r.attentionEncodeSurroundingInfo={after:g.outside,before:l.outside},A+s+m}function DVt(e,t,r){return r.options.strong||"*"}function zOe(e,t,r,n){return r.safe(e.value,n)}function KOe(e){let t=e.options.ruleRepetition||3;if(t<3)throw new Error("Cannot serialize rules with repetition `"+t+"` for `options.ruleRepetition`, expected `3` or more");return t}function jOe(e,t,r){let n=($4(r)+(r.options.ruleSpaces?" ":"")).repeat(KOe(r));return r.options.ruleSpaces?n.slice(0,-1):n}var kT={blockquote:DOe,break:pie,code:LOe,definition:TOe,emphasis:fie,hardBreak:pie,heading:NOe,html:Bie,image:Iie,imageReference:Cie,inlineCode:hie,link:Qie,linkReference:Eie,list:HOe,listItem:_Oe,paragraph:YOe,root:OOe,strong:xie,text:zOe,thematicBreak:jOe};function Die(){return{enter:{table:vVt,tableData:WOe,tableHeader:WOe,tableRow:wVt},exit:{codeText:RVt,table:FVt,tableData:Sie,tableHeader:Sie,tableRow:Sie}}}function vVt(e){let t=e._align;this.enter({type:"table",align:t.map(function(r){return r==="none"?null:r}),children:[]},e),this.data.inTable=!0}function FVt(e){this.exit(e),this.data.inTable=void 0}function wVt(e){this.enter({type:"tableRow",children:[]},e)}function Sie(e){this.exit(e)}function WOe(e){this.enter({type:"tableCell",children:[]},e)}function RVt(e){let t=this.resume();this.data.inTable&&(t=t.replace(/\\([\\|])/g,UVt));let r=this.stack[this.stack.length-1];r.type,r.value=t,this.exit(e)}function UVt(e,t){return t==="|"?t:e}function vie(e){let t=e||{},r=t.tableCellPadding,n=t.tablePipeAlign,o=t.stringLength,i=r?" ":"|";return{unsafe:[{character:"\r",inConstruct:"tableCell"},{character:`
|
|
`,inConstruct:"tableCell"},{atBreak:!0,character:"|",after:"[ :-]"},{character:"|",inConstruct:"tableCell"},{atBreak:!0,character:":",after:"-"},{atBreak:!0,character:"-",after:"[:|-]"}],handlers:{inlineCode:g,table:a,tableCell:s,tableRow:A}};function a(m,p,d,f){return c(l(m,d,f),m.align)}function A(m,p,d,f){let I=u(m,d,f),C=c([I]);return C.slice(0,C.indexOf(`
|
|
`))}function s(m,p,d,f){let I=d.enter("tableCell"),C=d.enter("phrasing"),y=d.containerPhrasing(m,{...f,before:i,after:i});return C(),I(),y}function c(m,p){return SOe(m,{align:p,alignDelimiters:n,padding:r,stringLength:o})}function l(m,p,d){let f=m.children,I=-1,C=[],y=p.enter("table");for(;++I<f.length;)C[I]=u(f[I],p,d);return y(),C}function u(m,p,d){let f=m.children,I=-1,C=[],y=p.enter("tableRow");for(;++I<f.length;)C[I]=s(f[I],m,p,d);return y(),C}function g(m,p,d){let f=kT.inlineCode(m,p,d);return d.stack.includes("tableCell")&&(f=f.replace(/\|/g,"\\$&")),f}}function Fie(){return{exit:{taskListCheckValueChecked:XOe,taskListCheckValueUnchecked:XOe,paragraph:LVt}}}function wie(){return{unsafe:[{atBreak:!0,character:"-",after:"[:|-]"}],handlers:{listItem:TVt}}}function XOe(e){let t=this.stack[this.stack.length-2];t.type,t.checked=e.type==="taskListCheckValueChecked"}function LVt(e){let t=this.stack[this.stack.length-2];if(t&&t.type==="listItem"&&typeof t.checked=="boolean"){let r=this.stack[this.stack.length-1];r.type;let n=r.children[0];if(n&&n.type==="text"){let o=t.children,i=-1,a;for(;++i<o.length;){let A=o[i];if(A.type==="paragraph"){a=A;break}}a===r&&(n.value=n.value.slice(1),n.value.length===0?r.children.shift():r.position&&n.position&&typeof n.position.start.offset=="number"&&(n.position.start.column++,n.position.start.offset++,r.position.start=Object.assign({},n.position.start)))}}this.exit(e)}function TVt(e,t,r,n){let o=e.children[0],i=typeof e.checked=="boolean"&&o&&o.type==="paragraph",a="["+(e.checked?"x":" ")+"] ",A=r.createTracker(n);i&&A.move(a);let s=kT.listItem(e,t,r,{...n,...A.current()});return i&&(s=s.replace(/^(?:[*+-]|\d+\.)([\r\n]| {1,3})/,c)),s;function c(l){return l+a}}function Rie(){return[cie(),uie(),mie(),Die(),Fie()]}function Uie(e){return{extensions:[lie(),gie(e),die(),vie(e),wie()]}}var PVt={tokenize:HVt,partial:!0},ZOe={tokenize:VVt,partial:!0},qOe={tokenize:_Vt,partial:!0},$Oe={tokenize:YVt,partial:!0},GVt={tokenize:OVt,partial:!0},e4e={name:"wwwAutolink",tokenize:MVt,previous:r4e},t4e={name:"protocolAutolink",tokenize:kVt,previous:n4e},Cy={name:"emailAutolink",tokenize:NVt,previous:o4e},PC={};function Tie(){return{text:PC}}var gS=48;for(;gS<123;)PC[gS]=Cy,gS++,gS===58?gS=65:gS===91&&(gS=97);PC[43]=Cy;PC[45]=Cy;PC[46]=Cy;PC[95]=Cy;PC[72]=[Cy,t4e];PC[104]=[Cy,t4e];PC[87]=[Cy,e4e];PC[119]=[Cy,e4e];function NVt(e,t,r){let n=this,o,i;return a;function a(u){return!Lie(u)||!o4e.call(n,n.previous)||Pie(n.events)?r(u):(e.enter("literalAutolink"),e.enter("literalAutolinkEmail"),A(u))}function A(u){return Lie(u)?(e.consume(u),A):u===64?(e.consume(u),s):r(u)}function s(u){return u===46?e.check(GVt,l,c)(u):u===45||u===95||Os(u)?(i=!0,e.consume(u),s):l(u)}function c(u){return e.consume(u),o=!0,s}function l(u){return i&&o&&ol(n.previous)?(e.exit("literalAutolinkEmail"),e.exit("literalAutolink"),t(u)):r(u)}}function MVt(e,t,r){let n=this;return o;function o(a){return a!==87&&a!==119||!r4e.call(n,n.previous)||Pie(n.events)?r(a):(e.enter("literalAutolink"),e.enter("literalAutolinkWww"),e.check(PVt,e.attempt(ZOe,e.attempt(qOe,i),r),r)(a))}function i(a){return e.exit("literalAutolinkWww"),e.exit("literalAutolink"),t(a)}}function kVt(e,t,r){let n=this,o="",i=!1;return a;function a(u){return(u===72||u===104)&&n4e.call(n,n.previous)&&!Pie(n.events)?(e.enter("literalAutolink"),e.enter("literalAutolinkHttp"),o+=String.fromCodePoint(u),e.consume(u),A):r(u)}function A(u){if(ol(u)&&o.length<5)return o+=String.fromCodePoint(u),e.consume(u),A;if(u===58){let g=o.toLowerCase();if(g==="http"||g==="https")return e.consume(u),s}return r(u)}function s(u){return u===47?(e.consume(u),i?c:(i=!0,s)):r(u)}function c(u){return u===null||rS(u)||pi(u)||UC(u)||nS(u)?r(u):e.attempt(ZOe,e.attempt(qOe,l),r)(u)}function l(u){return e.exit("literalAutolinkHttp"),e.exit("literalAutolink"),t(u)}}function HVt(e,t,r){let n=0;return o;function o(a){return(a===87||a===119)&&n<3?(n++,e.consume(a),o):a===46&&n===3?(e.consume(a),i):r(a)}function i(a){return a===null?r(a):t(a)}}function VVt(e,t,r){let n,o,i;return a;function a(c){return c===46||c===95?e.check($Oe,s,A)(c):c===null||pi(c)||UC(c)||c!==45&&nS(c)?s(c):(i=!0,e.consume(c),a)}function A(c){return c===95?n=!0:(o=n,n=void 0),e.consume(c),a}function s(c){return o||n||!i?r(c):t(c)}}function _Vt(e,t){let r=0,n=0;return o;function o(a){return a===40?(r++,e.consume(a),o):a===41&&n<r?i(a):a===33||a===34||a===38||a===39||a===41||a===42||a===44||a===46||a===58||a===59||a===60||a===63||a===93||a===95||a===126?e.check($Oe,t,i)(a):a===null||pi(a)||UC(a)?t(a):(e.consume(a),o)}function i(a){return a===41&&n++,e.consume(a),o}}function YVt(e,t,r){return n;function n(A){return A===33||A===34||A===39||A===41||A===42||A===44||A===46||A===58||A===59||A===63||A===95||A===126?(e.consume(A),n):A===38?(e.consume(A),i):A===93?(e.consume(A),o):A===60||A===null||pi(A)||UC(A)?t(A):r(A)}function o(A){return A===null||A===40||A===91||pi(A)||UC(A)?t(A):n(A)}function i(A){return ol(A)?a(A):r(A)}function a(A){return A===59?(e.consume(A),n):ol(A)?(e.consume(A),a):r(A)}}function OVt(e,t,r){return n;function n(i){return e.consume(i),o}function o(i){return Os(i)?r(i):t(i)}}function r4e(e){return e===null||e===40||e===42||e===95||e===91||e===93||e===126||pi(e)}function n4e(e){return!ol(e)}function o4e(e){return!(e===47||Lie(e))}function Lie(e){return e===43||e===45||e===46||e===95||Os(e)}function Pie(e){let t=e.length,r=!1;for(;t--;){let n=e[t][1];if((n.type==="labelLink"||n.type==="labelImage")&&!n._balanced){r=!0;break}if(n._gfmAutolinkLiteralWalkedInto){r=!1;break}}return e.length>0&&!r&&(e[e.length-1][1]._gfmAutolinkLiteralWalkedInto=!0),r}var JVt={tokenize:qVt,partial:!0};function Gie(){return{document:{91:{name:"gfmFootnoteDefinition",tokenize:WVt,continuation:{tokenize:XVt},exit:ZVt}},text:{91:{name:"gfmFootnoteCall",tokenize:jVt},93:{name:"gfmPotentialFootnoteCall",add:"after",tokenize:zVt,resolveTo:KVt}}}}function zVt(e,t,r){let n=this,o=n.events.length,i=n.parser.gfmFootnotes||(n.parser.gfmFootnotes=[]),a;for(;o--;){let s=n.events[o][1];if(s.type==="labelImage"){a=s;break}if(s.type==="gfmFootnoteCall"||s.type==="labelLink"||s.type==="label"||s.type==="image"||s.type==="link")break}return A;function A(s){if(!a||!a._balanced)return r(s);let c=cg(n.sliceSerialize({start:a.end,end:n.now()}));return c.codePointAt(0)!==94||!i.includes(c.slice(1))?r(s):(e.enter("gfmFootnoteCallLabelMarker"),e.consume(s),e.exit("gfmFootnoteCallLabelMarker"),t(s))}}function KVt(e,t){let r=e.length,n;for(;r--;)if(e[r][1].type==="labelImage"&&e[r][0]==="enter"){n=e[r][1];break}e[r+1][1].type="data",e[r+3][1].type="gfmFootnoteCallLabelMarker";let o={type:"gfmFootnoteCall",start:Object.assign({},e[r+3][1].start),end:Object.assign({},e[e.length-1][1].end)},i={type:"gfmFootnoteCallMarker",start:Object.assign({},e[r+3][1].end),end:Object.assign({},e[r+3][1].end)};i.end.column++,i.end.offset++,i.end._bufferIndex++;let a={type:"gfmFootnoteCallString",start:Object.assign({},i.end),end:Object.assign({},e[e.length-1][1].start)},A={type:"chunkString",contentType:"string",start:Object.assign({},a.start),end:Object.assign({},a.end)},s=[e[r+1],e[r+2],["enter",o,t],e[r+3],e[r+4],["enter",i,t],["exit",i,t],["enter",a,t],["enter",A,t],["exit",A,t],["exit",a,t],e[e.length-2],e[e.length-1],["exit",o,t]];return e.splice(r,e.length-r+1,...s),e}function jVt(e,t,r){let n=this,o=n.parser.gfmFootnotes||(n.parser.gfmFootnotes=[]),i=0,a;return A;function A(u){return e.enter("gfmFootnoteCall"),e.enter("gfmFootnoteCallLabelMarker"),e.consume(u),e.exit("gfmFootnoteCallLabelMarker"),s}function s(u){return u!==94?r(u):(e.enter("gfmFootnoteCallMarker"),e.consume(u),e.exit("gfmFootnoteCallMarker"),e.enter("gfmFootnoteCallString"),e.enter("chunkString").contentType="string",c)}function c(u){if(i>999||u===93&&!a||u===null||u===91||pi(u))return r(u);if(u===93){e.exit("chunkString");let g=e.exit("gfmFootnoteCallString");return o.includes(cg(n.sliceSerialize(g)))?(e.enter("gfmFootnoteCallLabelMarker"),e.consume(u),e.exit("gfmFootnoteCallLabelMarker"),e.exit("gfmFootnoteCall"),t):r(u)}return pi(u)||(a=!0),i++,e.consume(u),u===92?l:c}function l(u){return u===91||u===92||u===93?(e.consume(u),i++,c):c(u)}}function WVt(e,t,r){let n=this,o=n.parser.gfmFootnotes||(n.parser.gfmFootnotes=[]),i,a=0,A;return s;function s(p){return e.enter("gfmFootnoteDefinition")._container=!0,e.enter("gfmFootnoteDefinitionLabel"),e.enter("gfmFootnoteDefinitionLabelMarker"),e.consume(p),e.exit("gfmFootnoteDefinitionLabelMarker"),c}function c(p){return p===94?(e.enter("gfmFootnoteDefinitionMarker"),e.consume(p),e.exit("gfmFootnoteDefinitionMarker"),e.enter("gfmFootnoteDefinitionLabelString"),e.enter("chunkString").contentType="string",l):r(p)}function l(p){if(a>999||p===93&&!A||p===null||p===91||pi(p))return r(p);if(p===93){e.exit("chunkString");let d=e.exit("gfmFootnoteDefinitionLabelString");return i=cg(n.sliceSerialize(d)),e.enter("gfmFootnoteDefinitionLabelMarker"),e.consume(p),e.exit("gfmFootnoteDefinitionLabelMarker"),e.exit("gfmFootnoteDefinitionLabel"),g}return pi(p)||(A=!0),a++,e.consume(p),p===92?u:l}function u(p){return p===91||p===92||p===93?(e.consume(p),a++,l):l(p)}function g(p){return p===58?(e.enter("definitionMarker"),e.consume(p),e.exit("definitionMarker"),o.includes(i)||o.push(i),Yn(e,m,"gfmFootnoteDefinitionWhitespace")):r(p)}function m(p){return t(p)}}function XVt(e,t,r){return e.check(LC,t,e.attempt(JVt,t,r))}function ZVt(e){e.exit("gfmFootnoteDefinition")}function qVt(e,t,r){let n=this;return Yn(e,o,"gfmFootnoteDefinitionIndent",5);function o(i){let a=n.events[n.events.length-1];return a&&a[1].type==="gfmFootnoteDefinitionIndent"&&a[2].sliceSerialize(a[1],!0).length===4?t(i):r(i)}}function Nie(e){let r=(e||{}).singleTilde,n={name:"strikethrough",tokenize:i,resolveAll:o};return r==null&&(r=!0),{text:{126:n},insideSpan:{null:[n]},attentionMarkers:{null:[126]}};function o(a,A){let s=-1;for(;++s<a.length;)if(a[s][0]==="enter"&&a[s][1].type==="strikethroughSequenceTemporary"&&a[s][1]._close){let c=s;for(;c--;)if(a[c][0]==="exit"&&a[c][1].type==="strikethroughSequenceTemporary"&&a[c][1]._open&&a[s][1].end.offset-a[s][1].start.offset===a[c][1].end.offset-a[c][1].start.offset){a[s][1].type="strikethroughSequence",a[c][1].type="strikethroughSequence";let l={type:"strikethrough",start:Object.assign({},a[c][1].start),end:Object.assign({},a[s][1].end)},u={type:"strikethroughText",start:Object.assign({},a[c][1].end),end:Object.assign({},a[s][1].start)},g=[["enter",l,A],["enter",a[c][1],A],["exit",a[c][1],A],["enter",u,A]],m=A.parser.constructs.insideSpan.null;m&&sc(g,g.length,0,ab(m,a.slice(c+1,s),A)),sc(g,g.length,0,[["exit",u,A],["enter",a[s][1],A],["exit",a[s][1],A],["exit",l,A]]),sc(a,c-1,s-c+3,g),s=c+g.length-2;break}}for(s=-1;++s<a.length;)a[s][1].type==="strikethroughSequenceTemporary"&&(a[s][1].type="data");return a}function i(a,A,s){let c=this.previous,l=this.events,u=0;return g;function g(p){return c===126&&l[l.length-1][1].type!=="characterEscape"?s(p):(a.enter("strikethroughSequenceTemporary"),m(p))}function m(p){let d=By(c);if(p===126)return u>1?s(p):(a.consume(p),u++,m);if(u<2&&!r)return s(p);let f=a.exit("strikethroughSequenceTemporary"),I=By(p);return f._open=!I||I===2&&!!d,f._close=!d||d===2&&!!I,A(p)}}}var eJ=class{constructor(){this.map=[]}add(t,r,n){$Vt(this,t,r,n)}consume(t){if(this.map.sort(function(i,a){return i[0]-a[0]}),this.map.length===0)return;let r=this.map.length,n=[];for(;r>0;)r-=1,n.push(t.slice(this.map[r][0]+this.map[r][1]),this.map[r][2]),t.length=this.map[r][0];n.push(t.slice()),t.length=0;let o=n.pop();for(;o;){for(let i of o)t.push(i);o=n.pop()}this.map.length=0}};function $Vt(e,t,r,n){let o=0;if(!(r===0&&n.length===0)){for(;o<e.map.length;){if(e.map[o][0]===t){e.map[o][1]+=r,e.map[o][2].push(...n);return}o+=1}e.map.push([t,r,n])}}function i4e(e,t){let r=!1,n=[];for(;t<e.length;){let o=e[t];if(r){if(o[0]==="enter")o[1].type==="tableContent"&&n.push(e[t+1][1].type==="tableDelimiterMarker"?"left":"none");else if(o[1].type==="tableContent"){if(e[t-1][1].type==="tableDelimiterMarker"){let i=n.length-1;n[i]=n[i]==="left"?"center":"right"}}else if(o[1].type==="tableDelimiterRow")break}else o[0]==="enter"&&o[1].type==="tableDelimiterRow"&&(r=!0);t+=1}return n}function Mie(){return{flow:{null:{name:"table",tokenize:e3t,resolveAll:t3t}}}}function e3t(e,t,r){let n=this,o=0,i=0,a;return A;function A(R){let T=n.events.length-1;for(;T>-1;){let v=n.events[T][1].type;if(v==="lineEnding"||v==="linePrefix")T--;else break}let L=T>-1?n.events[T][1].type:null,F=L==="tableHead"||L==="tableRow"?b:s;return F===b&&n.parser.lazy[n.now().line]?r(R):F(R)}function s(R){return e.enter("tableHead"),e.enter("tableRow"),c(R)}function c(R){return R===124||(a=!0,i+=1),l(R)}function l(R){return R===null?r(R):an(R)?i>1?(i=0,n.interrupt=!0,e.exit("tableRow"),e.enter("lineEnding"),e.consume(R),e.exit("lineEnding"),m):r(R):qn(R)?Yn(e,l,"whitespace")(R):(i+=1,a&&(a=!1,o+=1),R===124?(e.enter("tableCellDivider"),e.consume(R),e.exit("tableCellDivider"),a=!0,l):(e.enter("data"),u(R)))}function u(R){return R===null||R===124||pi(R)?(e.exit("data"),l(R)):(e.consume(R),R===92?g:u)}function g(R){return R===92||R===124?(e.consume(R),u):u(R)}function m(R){return n.interrupt=!1,n.parser.lazy[n.now().line]?r(R):(e.enter("tableDelimiterRow"),a=!1,qn(R)?Yn(e,p,"linePrefix",n.parser.constructs.disable.null.includes("codeIndented")?void 0:4)(R):p(R))}function p(R){return R===45||R===58?f(R):R===124?(a=!0,e.enter("tableCellDivider"),e.consume(R),e.exit("tableCellDivider"),d):E(R)}function d(R){return qn(R)?Yn(e,f,"whitespace")(R):f(R)}function f(R){return R===58?(i+=1,a=!0,e.enter("tableDelimiterMarker"),e.consume(R),e.exit("tableDelimiterMarker"),I):R===45?(i+=1,I(R)):R===null||an(R)?Q(R):E(R)}function I(R){return R===45?(e.enter("tableDelimiterFiller"),C(R)):E(R)}function C(R){return R===45?(e.consume(R),C):R===58?(a=!0,e.exit("tableDelimiterFiller"),e.enter("tableDelimiterMarker"),e.consume(R),e.exit("tableDelimiterMarker"),y):(e.exit("tableDelimiterFiller"),y(R))}function y(R){return qn(R)?Yn(e,Q,"whitespace")(R):Q(R)}function Q(R){return R===124?p(R):R===null||an(R)?!a||o!==i?E(R):(e.exit("tableDelimiterRow"),e.exit("tableHead"),t(R)):E(R)}function E(R){return r(R)}function b(R){return e.enter("tableRow"),x(R)}function x(R){return R===124?(e.enter("tableCellDivider"),e.consume(R),e.exit("tableCellDivider"),x):R===null||an(R)?(e.exit("tableRow"),t(R)):qn(R)?Yn(e,x,"whitespace")(R):(e.enter("data"),S(R))}function S(R){return R===null||R===124||pi(R)?(e.exit("data"),x(R)):(e.consume(R),R===92?w:S)}function w(R){return R===92||R===124?(e.consume(R),S):S(R)}}function t3t(e,t){let r=-1,n=!0,o=0,i=[0,0,0,0],a=[0,0,0,0],A=!1,s=0,c,l,u,g=new eJ;for(;++r<e.length;){let m=e[r],p=m[1];m[0]==="enter"?p.type==="tableHead"?(A=!1,s!==0&&(a4e(g,t,s,c,l),l=void 0,s=0),c={type:"table",start:Object.assign({},p.start),end:Object.assign({},p.end)},g.add(r,0,[["enter",c,t]])):p.type==="tableRow"||p.type==="tableDelimiterRow"?(n=!0,u=void 0,i=[0,0,0,0],a=[0,r+1,0,0],A&&(A=!1,l={type:"tableBody",start:Object.assign({},p.start),end:Object.assign({},p.end)},g.add(r,0,[["enter",l,t]])),o=p.type==="tableDelimiterRow"?2:l?3:1):o&&(p.type==="data"||p.type==="tableDelimiterMarker"||p.type==="tableDelimiterFiller")?(n=!1,a[2]===0&&(i[1]!==0&&(a[0]=a[1],u=tJ(g,t,i,o,void 0,u),i=[0,0,0,0]),a[2]=r)):p.type==="tableCellDivider"&&(n?n=!1:(i[1]!==0&&(a[0]=a[1],u=tJ(g,t,i,o,void 0,u)),i=a,a=[i[1],r,0,0])):p.type==="tableHead"?(A=!0,s=r):p.type==="tableRow"||p.type==="tableDelimiterRow"?(s=r,i[1]!==0?(a[0]=a[1],u=tJ(g,t,i,o,r,u)):a[1]!==0&&(u=tJ(g,t,a,o,r,u)),o=0):o&&(p.type==="data"||p.type==="tableDelimiterMarker"||p.type==="tableDelimiterFiller")&&(a[3]=r)}for(s!==0&&a4e(g,t,s,c,l),g.consume(t.events),r=-1;++r<t.events.length;){let m=t.events[r];m[0]==="enter"&&m[1].type==="table"&&(m[1]._align=i4e(t.events,r))}return e}function tJ(e,t,r,n,o,i){let a=n===1?"tableHeader":n===2?"tableDelimiter":"tableData",A="tableContent";r[0]!==0&&(i.end=Object.assign({},lw(t.events,r[0])),e.add(r[0],0,[["exit",i,t]]));let s=lw(t.events,r[1]);if(i={type:a,start:Object.assign({},s),end:Object.assign({},s)},e.add(r[1],0,[["enter",i,t]]),r[2]!==0){let c=lw(t.events,r[2]),l=lw(t.events,r[3]),u={type:A,start:Object.assign({},c),end:Object.assign({},l)};if(e.add(r[2],0,[["enter",u,t]]),n!==2){let g=t.events[r[2]],m=t.events[r[3]];if(g[1].end=Object.assign({},m[1].end),g[1].type="chunkText",g[1].contentType="text",r[3]>r[2]+1){let p=r[2]+1,d=r[3]-r[2]-1;e.add(p,d,[])}}e.add(r[3]+1,0,[["exit",u,t]])}return o!==void 0&&(i.end=Object.assign({},lw(t.events,o)),e.add(o,0,[["exit",i,t]]),i=void 0),i}function a4e(e,t,r,n,o){let i=[],a=lw(t.events,r);o&&(o.end=Object.assign({},a),i.push(["exit",o,t])),n.end=Object.assign({},a),i.push(["exit",n,t]),e.add(r+1,0,i)}function lw(e,t){let r=e[t],n=r[0]==="enter"?"start":"end";return r[1][n]}var r3t={name:"tasklistCheck",tokenize:n3t};function kie(){return{text:{91:r3t}}}function n3t(e,t,r){let n=this;return o;function o(s){return n.previous!==null||!n._gfmTasklistFirstContentOfListItem?r(s):(e.enter("taskListCheck"),e.enter("taskListCheckMarker"),e.consume(s),e.exit("taskListCheckMarker"),i)}function i(s){return pi(s)?(e.enter("taskListCheckValueUnchecked"),e.consume(s),e.exit("taskListCheckValueUnchecked"),a):s===88||s===120?(e.enter("taskListCheckValueChecked"),e.consume(s),e.exit("taskListCheckValueChecked"),a):r(s)}function a(s){return s===93?(e.enter("taskListCheckMarker"),e.consume(s),e.exit("taskListCheckMarker"),e.exit("taskListCheck"),A):r(s)}function A(s){return an(s)?t(s):qn(s)?e.check({tokenize:o3t},t,r)(s):r(s)}}function o3t(e,t,r){return Yn(e,n,"whitespace");function n(o){return o===null?r(o):t(o)}}function A4e(e){return l4([Tie(),Gie(),Nie(e),Mie(),kie()])}var i3t={};function rJ(e){let t=this,r=e||i3t,n=t.data(),o=n.micromarkExtensions||(n.micromarkExtensions=[]),i=n.fromMarkdownExtensions||(n.fromMarkdownExtensions=[]),a=n.toMarkdownExtensions||(n.toMarkdownExtensions=[]);o.push(A4e(r)),i.push(Rie()),a.push(Uie(r))}var Wg=kt(Qr());function s4e({children:e,components:t}){return(0,Wg.jsxs)("div",{className:"msp-markdown",children:[(0,Wg.jsx)(a3t,{}),(0,Wg.jsx)(NT,{skipHtml:!0,components:{a:l3t,img:A3t,...t},remarkPlugins:[rJ],children:e})]})}function a3t(){let e=(0,NB.useRef)(null),t=(0,NB.useContext)(Iu),r=Tc(t?.managers.markdownExtensions.state.audioPlayer);return(0,NB.useEffect)(()=>{if(e.current)return e.current.appendChild(r),()=>{r?.remove()}},[r]),r?(0,Wg.jsx)("div",{className:"msp-markdown-audio-player",ref:e}):null}function A3t({src:e,element:t,alt:r}){let n=(0,NB.useContext)(Iu);if(!e)return t;Hie(n);let o=n?.managers.markdownExtensions.parseArgs(e);if(o)return n?.managers.markdownExtensions.tryRender(o,c3t)??t;{let i=n?.managers.markdownExtensions.tryResolveUri(e);if(typeof i?.then=="function")return(0,Wg.jsx)(s3t,{alt:r,data:i});if(typeof i=="string"&&i)return(0,Wg.jsx)("img",{src:i,alt:r})}return(0,Wg.jsx)("img",{src:e,alt:r})}function s3t({alt:e,data:t}){let[r,n]=(0,NB.useState)(void 0);return(0,NB.useEffect)(()=>{let o=!0;return t.then(i=>{o&&n(i)}).catch(i=>{console.error("Failed to load static image",i),o&&n(void 0)}),()=>{o=!1}},[t]),r?(0,Wg.jsx)("img",{src:r,alt:e}):null}var c3t=[{name:"color-swatch",reactRenderFn:({args:e})=>{let t=e["color-swatch"];return t?(0,Wg.jsx)("span",{style:{display:"inline-block",width:"0.75em",height:"0.75em",backgroundColor:t,borderRadius:"25%"}}):null}},{name:"color-palette",reactRenderFn:({args:e})=>{let t=e["color-palette-name"],r=e["color-palette-colors"],n=e["color-palette-width"]??"150px",o=e["color-palette-height"]??"0.5em",i="color-palette-discrete"in e;if(!t&&!r)return null;let a=r?VGe(r):Kr[t.toLowerCase()]?.list;return a?.length?(0,Wg.jsx)("span",{style:{display:"inline-block",minWidth:n,height:o,background:(i?AY:sY)(a),borderRadius:"2px"}}):(console.warn("Color palette could not be resolved.",e),null)}}];function l3t({href:e,children:t,element:r}){let n=(0,NB.useContext)(Iu);if(!e)return r;Hie(n);let o=n?.managers.markdownExtensions.parseArgs(e);return o?(0,Wg.jsx)("a",{href:"#",onClick:i=>{i.preventDefault(),n?.managers.markdownExtensions.tryExecute("click",o)},onMouseEnter:()=>n?.managers.markdownExtensions.tryExecute("mouse-enter",o),onMouseLeave:()=>n?.managers.markdownExtensions.tryExecute("mouse-leave",o),children:t}):e[0]==="#"?(Hie(n),(0,Wg.jsx)("a",{href:"#",onClick:i=>{i.preventDefault(),n?.managers.snapshot.applyKey(e.substring(1))},children:t})):e?(0,Wg.jsxs)("a",{href:e,target:"_blank",rel:"noopener noreferrer",children:[t,"\u2934"]}):t}function Hie(e){e||console.warn("Markdown component requires a PluginReactContext to be set.")}var jn=kt(Qr()),nJ=class extends pn{constructor(){super(...arguments);this.state={show:!1,label:""};this.update=()=>{let r=this.plugin.state.data,n=r.selectQ(A=>A.ofTransformer(ze.Model.ModelFromTrajectory));if(n.length===0){this.setState({show:!1});return}let o="",i=0,a=new Set;for(let A of n){if(!A.sourceRef)continue;let s=r.cells.get(A.sourceRef).obj;if(s&&s.data.frameCount>1){if(a.has(A.sourceRef)){this.setState({show:!1});return}if(a.add(A.sourceRef),i++,!o){let c=A.transform.params.modelIndex;o=`Model ${Math.round(c+1)} / ${s.data.frameCount}`}}}i>1&&(o=""),this.setState({show:i>0,label:o})};this.reset=()=>yt.State.ApplyAction(this.plugin,{state:this.plugin.state.data,action:AL.create({action:"reset"})});this.prev=()=>yt.State.ApplyAction(this.plugin,{state:this.plugin.state.data,action:AL.create({action:"advance",by:-1})});this.next=()=>yt.State.ApplyAction(this.plugin,{state:this.plugin.state.data,action:AL.create({action:"advance",by:1})})}componentDidMount(){this.subscribe(this.plugin.state.data.events.changed,this.update),this.subscribe(this.plugin.behaviors.state.isAnimating,this.update)}render(){let r=this.plugin.behaviors.state.isAnimating.value;return!this.state.show||r&&!this.state.label||!this.plugin.config.get(jt.Viewport.ShowTrajectoryControls)?null:(0,jn.jsxs)("div",{className:"msp-traj-controls",children:[!r&&(0,jn.jsx)(Gr,{svg:EGe,title:"First Model",onClick:this.reset,disabled:r}),!r&&(0,jn.jsx)(Gr,{svg:W$,title:"Previous Model",onClick:this.prev,disabled:r}),!r&&(0,jn.jsx)(Gr,{svg:X$,title:"Next Model",onClick:this.next,disabled:r}),!!this.state.label&&(0,jn.jsx)("span",{children:this.state.label})]})}},oJ=class extends pn{constructor(){super(...arguments);this.state={isBusy:!1,show:!0,showAnimation:!1};this.change=r=>{r.target.value!=="none"&&this.update(r.target.value)};this.prev=()=>{let r=this.plugin.managers.snapshot,n=r.getNextId(r.state.current,-1);n&&this.update(n)};this.next=()=>{let r=this.plugin.managers.snapshot,n=r.getNextId(r.state.current,1);n&&this.update(n)};this.togglePlay=()=>{this.plugin.managers.snapshot.togglePlay()};this.toggleShowAnimation=()=>{this.setState({showAnimation:!this.state.showAnimation})};this.toggleStateAnimation=()=>{this.state.isBusy?(this.plugin.managers.animation.stop(),this.plugin.managers.markdownExtensions.audio.pause()):this.plugin.managers.animation.play(qI,{})}}componentDidMount(){this.subscribe(this.plugin.managers.snapshot.events.changed,()=>this.forceUpdate()),this.subscribe(this.plugin.behaviors.state.isBusy,r=>this.setState({isBusy:r})),this.subscribe(this.plugin.behaviors.state.isAnimating,r=>this.setState({isBusy:r}))}componentWillUnmount(){super.componentWillUnmount()}async update(r){this.setState({isBusy:!0}),await yt.State.Snapshots.Apply(this.plugin,{id:r}),this.setState({isBusy:!1})}get isStateTransitionPlaying(){return this.plugin.managers.animation.isAnimatingStateTransition}render(){let r=this.plugin.managers.snapshot,n=r.state.entries.size;if(!n||!this.state.show)return null;let o=r.state.current,i=r.state.isPlaying,a=r.getEntry(o),A=!!a?.snapshot.transition,s=i||this.state.isBusy&&!this.isStateTransitionPlaying;return(0,jn.jsxs)("div",{className:"msp-state-snapshot-viewport-controls",children:[(0,jn.jsxs)("select",{className:"msp-form-control",value:o||"none",onChange:this.change,disabled:s,children:[!o&&(0,jn.jsx)("option",{value:"none"},"none"),r.state.entries.valueSeq().map((c,l)=>(0,jn.jsxs)("option",{value:c.snapshot.id,children:[`[${l+1}/${n}]`," ",c.name||new Date(c.timestamp).toLocaleString()]},c.snapshot.id))]}),(0,jn.jsx)(Gr,{svg:i?Z_:W_,title:i?"Pause":"Cycle States",onClick:this.togglePlay,disabled:i?!1:this.state.isBusy&&!this.isStateTransitionPlaying}),!i&&(0,jn.jsxs)(jn.Fragment,{children:[n>1&&(0,jn.jsx)(Gr,{svg:W$,title:"Previous State",onClick:this.prev,disabled:s}),n>1&&(0,jn.jsx)(Gr,{svg:X$,title:"Next State",onClick:this.next,disabled:s}),A&&(0,jn.jsx)(Gr,{svg:O_,className:"msp-state-snapshot-animation-button",title:"Snapshot Transition",onClick:this.toggleShowAnimation,disabled:!A,toggleState:this.state.showAnimation})]}),A&&this.state.showAnimation&&!i&&(0,jn.jsxs)(jn.Fragment,{children:[(0,jn.jsxs)("div",{className:"msp-state-snapshot-animation-slider msp-form-control",children:[(0,jn.jsx)(GE,{value:Math.round(100*(r.state.currentAnimationTimeMs??0))/100,min:0,step:kl.getMinFrameDuration(a?.snapshot),max:kl.getStateTransitionDuration(a?.snapshot)??1e3,onChange:()=>{},onChangeImmediate:c=>r.setSnapshotAnimationFrame(c,!0),hideInput:!0,disabled:this.state.isBusy}),"\xA0"]}),(0,jn.jsx)(Gr,{svg:this.state.isBusy?Z_:Dx,title:this.state.isBusy?"Stop":"Replay",onClick:this.toggleStateAnimation,toggleState:!1})]})]})}};function c4e(){let e=uw.useContext(Iu),[t,r]=uw.useState(0);uw.useEffect(()=>{let i=e.managers.snapshot.events.changed.subscribe(()=>r(a=>a+1));return()=>i.unsubscribe()},[e]);let n=e.managers.snapshot.state.current;if(!n)return null;let o=e.managers.snapshot.getEntry(n);return o?.description?.trim()?(0,jn.jsx)("div",{id:"snapinfo",className:"msp-snapshot-description-wrapper",children:o.descriptionFormat==="plaintext"&&o.description||(0,jn.jsx)(s4e,{children:o.description})}):null}var iJ=class extends pn{constructor(){super(...arguments);this.state={isEmpty:!0,isExpanded:!1,isBusy:!1,isAnimating:!1,isPlaying:!1};this.toggleExpanded=()=>this.setState({isExpanded:!this.state.isExpanded});this.stop=()=>{this.plugin.managers.animation.stop(),this.plugin.managers.snapshot.stop()}}componentDidMount(){this.subscribe(this.plugin.managers.snapshot.events.changed,()=>{this.plugin.managers.snapshot.state.isPlaying?this.setState({isPlaying:!0,isExpanded:!1}):this.setState({isPlaying:!1})}),this.subscribe(this.plugin.behaviors.state.isBusy,r=>{r?this.setState({isBusy:!0,isExpanded:!1,isEmpty:this.plugin.state.data.tree.transforms.size<2}):this.setState({isBusy:!1,isEmpty:this.plugin.state.data.tree.transforms.size<2})}),this.subscribe(this.plugin.behaviors.state.isAnimating,r=>{r?this.setState({isAnimating:!0,isExpanded:!1}):this.setState({isAnimating:!1})})}render(){let r=this.plugin.managers.snapshot.state.isPlaying;if(r||this.state.isEmpty||this.plugin.managers.animation.isEmpty||!this.plugin.config.get(jt.Viewport.ShowAnimation))return null;let n=this.state.isAnimating;return(0,jn.jsxs)("div",{className:"msp-animation-viewport-controls",children:[(0,jn.jsxs)("div",{children:[(0,jn.jsx)("div",{className:"msp-semi-transparent-background"}),(0,jn.jsx)(Gr,{svg:n||r?Z_:q_,transparent:!0,title:n?"Stop":"Select Animation",onClick:n||r?this.stop:this.toggleExpanded,toggleState:this.state.isExpanded,disabled:n||r?!1:this.state.isBusy||this.state.isPlaying||this.state.isEmpty})]}),this.state.isExpanded&&!this.state.isBusy&&(0,jn.jsx)("div",{className:"msp-animation-viewport-controls-select",children:(0,jn.jsx)(P4,{onStart:this.toggleExpanded})})]})}},aJ=class extends pn{componentDidMount(){this.subscribe(this.plugin.behaviors.interaction.selectionMode,()=>this.forceUpdate())}render(){return this.plugin.selectionMode?(0,jn.jsx)("div",{className:"msp-selection-viewport-controls",children:(0,jn.jsx)(_4,{})}):null}},AJ=class extends pn{constructor(){super(...arguments);this.state={labels:[]}}componentDidMount(){this.subscribe(this.plugin.behaviors.labels.highlight,r=>this.setState({labels:r.labels}))}render(){return this.state.labels.length===0?null:(0,jn.jsx)("div",{className:"msp-highlight-info",children:this.state.labels.map((r,n)=>r.indexOf(`
|
|
`)>=0?(0,jn.jsx)("div",{className:"msp-highlight-markdown-row",children:(0,jn.jsx)(NT,{skipHtml:!0,children:r})},""+n):(0,jn.jsx)("div",{className:"msp-highlight-simple-row",dangerouslySetInnerHTML:{__html:r}},""+n))})}},Vie=class extends pn{componentDidMount(){this.subscribe(this.plugin.state.behaviors.events.changed,()=>this.forceUpdate())}render(){let t=[];return this.plugin.customStructureControls.forEach((r,n)=>{t.push((0,jn.jsx)(r,{initiallyCollapsed:this.props.initiallyCollapsed},n))}),t.length>0?(0,jn.jsx)(jn.Fragment,{children:t}):null}},sJ=class extends pn{render(){return(0,jn.jsxs)(jn.Fragment,{children:[(0,jn.jsxs)("div",{className:"msp-section-header",children:[(0,jn.jsx)(Kn,{svg:gGe}),"Structure Tools"]}),(0,jn.jsx)(z4,{}),(0,jn.jsx)(O4,{}),(0,jn.jsx)(X4,{}),(0,jn.jsx)(Z4,{}),(0,jn.jsx)(q4,{}),(0,jn.jsx)(M4,{}),this.plugin.config.get(jt.VolumeStreaming.Enabled)&&(0,jn.jsx)(K4,{}),(0,jn.jsx)(j4,{}),(0,jn.jsx)(Vie,{})]})}};var gw=kt(Qr()),cJ=class extends pn{get current(){return this.props.state.behaviors.currentObject.value}componentDidMount(){this.subscribe(this.plugin.state.events.object.updated,({ref:t,state:r})=>{let n=this.current;n.ref!==t||n.state!==r||this.forceUpdate()}),this.subscribe(this.plugin.state.data.actions.events.added,()=>this.forceUpdate()),this.subscribe(this.plugin.state.data.actions.events.removed,()=>this.forceUpdate())}render(){let{state:t,nodeRef:r}=this.props,n=t.cells.get(r),o=t.actions.fromCell(n,this.plugin);if(o.length===0)return null;let i=n.transform.transformer.definition,a=n.obj?n.obj.label:i.display&&i.display.name||i.name;return(0,gw.jsxs)("div",{className:"msp-state-actions",children:[!this.props.hideHeader&&(0,gw.jsxs)("div",{className:"msp-section-header",children:[(0,gw.jsx)(Kn,{svg:fGe})," ",`Actions (${a})`]}),o.map((A,s)=>(0,gw.jsx)(DC,{state:t,action:A,nodeRef:r,initiallyCollapsed:s===0?!this.props.alwaysExpandFirst&&this.props.initiallyCollapsed:this.props.initiallyCollapsed},`${A.id}`))]})}};var mS=kt(Qa());var Vr=kt(Qr()),lJ=class extends pn{render(){return(0,Vr.jsxs)("div",{children:[(0,Vr.jsx)(QB,{icon:X_,title:"Plugin State"}),(0,Vr.jsx)("div",{style:{marginBottom:"10px"},children:(0,Vr.jsx)(Gs,{header:"Save Options",initiallyExpanded:!1,children:(0,Vr.jsx)(VT,{})})}),(0,Vr.jsx)(_ie,{}),(0,Vr.jsx)(Yie,{}),(0,Vr.jsx)(QB,{title:"Save as File",accent:"blue"}),(0,Vr.jsx)(HT,{}),this.plugin.spec.components?.remoteState!=="none"&&(0,Vr.jsx)(_T,{})]})}},HT=class extends pn{constructor(){super(...arguments);this.downloadToFileJson=()=>{this.props.onAction?.(),yt.State.Snapshots.DownloadToFile(this.plugin,{type:"json"})};this.downloadToFileZip=()=>{this.props.onAction?.(),yt.State.Snapshots.DownloadToFile(this.plugin,{type:"zip"})};this.open=r=>{if(!r.target.files||!r.target.files[0]){this.plugin.log.error("No state file selected");return}this.props.onAction?.(),yt.State.Snapshots.OpenFile(this.plugin,{file:r.target.files[0]})}}render(){return(0,Vr.jsxs)(Vr.Fragment,{children:[(0,Vr.jsxs)("div",{className:"msp-flex-row",children:[(0,Vr.jsx)(hr,{icon:yB,onClick:this.downloadToFileJson,title:"Save the state description. Input data are loaded using the provided sources. Does not work if local files are used as input.",children:"State"}),(0,Vr.jsx)(hr,{icon:yB,onClick:this.downloadToFileZip,title:"Save the state including the input data.",children:"Session"}),(0,Vr.jsxs)("div",{className:"msp-btn msp-btn-block msp-btn-action msp-loader-msp-btn-file",children:[(0,Vr.jsx)(Kn,{svg:j_,inline:!0})," Open ",(0,Vr.jsx)("input",{onChange:this.open,type:"file",multiple:!1,accept:".molx,.molj"})]})]}),(0,Vr.jsxs)("div",{className:"msp-help-text",style:{padding:"10px"},children:[(0,Vr.jsx)(Kn,{svg:$_})," This is an experimental feature and stored states/sessions might not be openable in a future version."]})]})}},VT=class extends pn{componentDidMount(){this.subscribe(this.plugin.state.snapshotParams,()=>this.forceUpdate())}render(){return(0,Vr.jsx)(Mn,{params:kl.SnapshotParams,values:this.plugin.state.snapshotParams.value,onChangeValues:this.plugin.state.setSnapshotParams})}},_ie=class e extends pn{constructor(){super(...arguments);this.state={params:h.getDefaultValues(e.Params)};this.add=()=>{yt.State.Snapshots.Add(this.plugin,{name:this.state.params.name,description:this.state.params.description})};this.updateParams=r=>this.setState({params:r});this.clear=()=>{yt.State.Snapshots.Clear(this.plugin,{})}}static{this.Params={name:h.Text(),description:h.Text()}}shouldComponentUpdate(r,n){return!KB(this.props,r)||!KB(this.state,n)}render(){return(0,Vr.jsx)("div",{children:(0,Vr.jsx)(u3t,{parent:this})})}};function l4e(e,t,r){return t?e.managers.snapshot.state.entries.some(n=>(!r||n.snapshot.id!==r)&&n.key===t):!1}function u3t({parent:e}){let[t,r]=mS.useState({key:"",name:"",description:""}),n=()=>{yt.State.Snapshots.Add(e.plugin,{key:t.key,name:t.name,description:t.description}),r({key:"",name:"",description:""})},o=l4e(e.plugin,t.key);return(0,Vr.jsxs)(Vr.Fragment,{children:[(0,Vr.jsx)(u4e,{state:t,setState:r,apply:n}),(0,Vr.jsxs)("div",{className:"msp-flex-row",children:[(0,Vr.jsx)(Gr,{onClick:e.clear,svg:Uc,title:"Remove All"}),(0,Vr.jsx)(hr,{onClick:n,icon:o?void 0:CB,style:{textAlign:"right"},commit:o?"off":"on",disabled:o,children:o?"Key must be unique":"Add"})]})]})}var Yie=class extends pn{constructor(){super(...arguments);this.state={editingId:void 0};this.edit=r=>{let n=r.currentTarget.getAttribute("data-id");if(!n)return;let o=this.state.editingId;this.setState({editingId:n===o?void 0:n})};this.doneEdit=()=>this.setState({editingId:void 0});this.apply=r=>{let n=r.currentTarget.getAttribute("data-id");n&&yt.State.Snapshots.Apply(this.plugin,{id:n})};this.remove=r=>{let n=r.currentTarget.getAttribute("data-id");n&&yt.State.Snapshots.Remove(this.plugin,{id:n})};this.moveUp=r=>{let n=r.currentTarget.getAttribute("data-id");n&&yt.State.Snapshots.Move(this.plugin,{id:n,dir:-1})};this.moveDown=r=>{let n=r.currentTarget.getAttribute("data-id");n&&yt.State.Snapshots.Move(this.plugin,{id:n,dir:1})};this.replace=r=>{let n=r.currentTarget.getAttribute("data-id");n&&yt.State.Snapshots.Replace(this.plugin,{id:n})}}componentDidMount(){this.subscribe(this.plugin.managers.snapshot.events.changed,()=>this.forceUpdate())}render(){let r=this.plugin.managers.snapshot.state.current,n=[];return this.plugin.managers.snapshot.state.entries.forEach(o=>{n.push((0,Vr.jsxs)("li",{className:"msp-flex-row",children:[(0,Vr.jsxs)(hr,{"data-id":o.snapshot.id,onClick:this.apply,className:"msp-no-overflow",children:[(0,Vr.jsxs)("span",{style:{fontWeight:o.snapshot.id===r?"bold":void 0},children:[!!o.key&&`[${o.key}] `,o.name||new Date(o.timestamp).toLocaleString()]})," ",(0,Vr.jsx)("small",{children:`${o.snapshot.durationInMs?NS(o.snapshot.durationInMs,!1):""}`})]}),(0,Vr.jsx)(Gr,{svg:tl,"data-id":o.snapshot.id,title:"Edit",onClick:this.edit,flex:"28px"}),(0,Vr.jsx)(Gr,{svg:TE,"data-id":o.snapshot.id,title:"Move Up",onClick:this.moveUp,flex:"20px"}),(0,Vr.jsx)(Gr,{svg:LE,"data-id":o.snapshot.id,title:"Move Down",onClick:this.moveDown,flex:"20px"}),(0,Vr.jsx)(Gr,{svg:bGe,"data-id":o.snapshot.id,title:"Replace",onClick:this.replace,flex:"20px"}),(0,Vr.jsx)(Gr,{svg:Uc,"data-id":o.snapshot.id,title:"Remove",onClick:this.remove,flex:"20px"})]},o.snapshot.id)),this.state.editingId===o.snapshot.id&&n.push((0,Vr.jsx)(g3t,{entry:o,plugin:this.plugin,done:this.doneEdit},`${o.snapshot.id}-edit`));let i=o.image&&this.plugin.managers.asset.get(o.image)?.file;i&&n.push((0,Vr.jsx)("li",{className:"msp-state-image-row",children:(0,Vr.jsx)(hr,{"data-id":o.snapshot.id,onClick:this.apply,children:(0,Vr.jsx)("img",{draggable:!1,src:URL.createObjectURL(i)})})},`${o.snapshot.id}-image`))}),(0,Vr.jsx)(Vr.Fragment,{children:(0,Vr.jsx)("ul",{style:{listStyle:"none",marginTop:"10px"},className:"msp-state-list",children:n})})}};function u4e({state:e,setState:t,apply:r}){let n=mS.useRef(),o=mS.useRef(),[i,a]=mS.useState(!1);return(0,Vr.jsxs)(Vr.Fragment,{children:[(0,Vr.jsx)(jl,{label:"Name",control:(0,Vr.jsx)("input",{type:"text",value:e.name,placeholder:"Name",onChange:A=>t({...e,name:A.target.value}),onKeyUp:A=>{A.key==="Enter"&&n.current?.focus()}})}),(0,Vr.jsx)(jl,{label:(0,Vr.jsxs)(Vr.Fragment,{children:["Key",(0,Vr.jsx)(Dee,{show:i,toggle:()=>a(A=>!A)})]}),control:(0,Vr.jsx)("input",{type:"text",ref:n,value:e.key,placeholder:"Key (optional)",onChange:A=>t({...e,key:A.target.value}),onKeyUp:A=>{A.key==="Enter"&&o.current?.focus()}})}),i&&(0,Vr.jsx)("div",{className:"msp-control-offset",children:(0,Vr.jsx)(hL,{description:"Optional snapshot key used to activate snapshots from descriptions, labels, etc."})}),(0,Vr.jsx)("div",{className:"msp-flex-row msp-text-area-wrapper",style:{marginBottom:1},children:(0,Vr.jsx)("textarea",{ref:o,placeholder:`Markdown Description
|
|
|
|
- Use [title](#key) to link to a snapshot`,className:"msp-form-control",value:e.description,onChange:A=>t({...e,description:A.target.value}),onKeyUp:A=>{A.key==="Enter"&&A.ctrlKey&&r(e)}})})]})}function g3t({entry:e,plugin:t,done:r}){let[n,o]=mS.useState({key:e.key??"",name:e.name??"",description:e.description??"",descriptionFormat:e.descriptionFormat}),i=()=>{t.managers.snapshot.update(e,n),r()},a=l4e(t,n.key,e.snapshot.id);return(0,Vr.jsxs)(Vr.Fragment,{children:[(0,Vr.jsx)(u4e,{state:n,setState:o,apply:i}),(0,Vr.jsx)("div",{className:"msp-flex-row",style:{marginBottom:1},children:(0,Vr.jsx)(hr,{onClick:i,icon:a?void 0:Hg,style:{textAlign:"right"},commit:a?"off":"on",disabled:a,children:a?"Key must be unique":"Apply"})})]})}var _T=class extends pn{constructor(){super(...arguments);this.Params={name:h.Text(),options:h.Group({description:h.Text(),playOnLoad:h.Boolean(!1),serverUrl:h.Text(this.plugin.config.get(jt.State.CurrentServer))})};this.state={params:h.getDefaultValues(this.Params),entries:Cc(),isBusy:!1};this.ListOnlyParams={options:h.Group({serverUrl:h.Text(this.plugin.config.get(jt.State.CurrentServer))},{isFlat:!0})};this._mounted=!1;this.refresh=async()=>{try{this.setState({isBusy:!0}),this.plugin.config.set(jt.State.CurrentServer,this.state.params.options.serverUrl);let r=await this.plugin.runTask(this.plugin.fetch({url:this.serverUrl("list"),type:"json"}))||[];r.sort((o,i)=>o.isSticky===i.isSticky?o.timestamp-i.timestamp:o.isSticky?-1:1);let n=Cc().asMutable();for(let o of r)n.set(o.id,{...o,url:this.serverUrl(`get/${o.id}`),removeUrl:this.serverUrl(`remove/${o.id}`)});this._mounted&&this.setState({entries:n.asImmutable(),isBusy:!1})}catch(r){console.error(r),this.plugin.log.error("Error fetching remote snapshots"),this._mounted&&this.setState({entries:Cc(),isBusy:!1})}};this.upload=async()=>{this.setState({isBusy:!0}),this.plugin.config.set(jt.State.CurrentServer,this.state.params.options.serverUrl),await yt.State.Snapshots.Upload(this.plugin,{name:this.state.params.name,description:this.state.params.options.description,playOnLoad:this.state.params.options.playOnLoad,serverUrl:this.state.params.options.serverUrl}),this.plugin.log.message("Snapshot uploaded."),this._mounted&&(this.setState({isBusy:!1}),this.refresh())};this.fetch=async r=>{let n=r.currentTarget.getAttribute("data-id");if(!n)return;let o=this.state.entries.get(n);if(o){this.setState({isBusy:!0});try{await yt.State.Snapshots.Fetch(this.plugin,{url:o.url})}finally{this._mounted&&this.setState({isBusy:!1})}}};this.remove=async r=>{let n=r.currentTarget.getAttribute("data-id");if(!n)return;let o=this.state.entries.get(n);if(o){this.setState({entries:this.state.entries.remove(n)});try{await fetch(o.removeUrl)}catch(i){console.error(i)}}}}componentDidMount(){this.refresh(),this._mounted=!0}componentWillUnmount(){super.componentWillUnmount(),this._mounted=!1}serverUrl(r){return r?oE(this.state.params.options.serverUrl,r):this.state.params.options.serverUrl}render(){return(0,Vr.jsxs)(Vr.Fragment,{children:[(0,Vr.jsx)(QB,{title:"Remote States",accent:"blue"}),!this.props.listOnly&&(0,Vr.jsxs)(Vr.Fragment,{children:[(0,Vr.jsx)(Mn,{params:this.Params,values:this.state.params,onEnter:this.upload,onChange:r=>{this.setState({params:{...this.state.params,[r.name]:r.value}})},isDisabled:this.state.isBusy}),(0,Vr.jsxs)("div",{className:"msp-flex-row",children:[(0,Vr.jsx)(Gr,{onClick:this.refresh,disabled:this.state.isBusy,svg:Dx}),(0,Vr.jsx)(hr,{icon:pGe,onClick:this.upload,disabled:this.state.isBusy,commit:!0,children:"Upload"})]})]}),(0,Vr.jsx)(Oie,{entries:this.state.entries,isBusy:this.state.isBusy,serverUrl:this.state.params.options.serverUrl,fetch:this.fetch,remove:this.props.listOnly?void 0:this.remove}),this.props.listOnly&&(0,Vr.jsxs)("div",{style:{marginTop:"10px"},children:[(0,Vr.jsx)(Mn,{params:this.ListOnlyParams,values:this.state.params,onEnter:this.upload,onChange:r=>{this.setState({params:{...this.state.params,[r.name]:r.value}})},isDisabled:this.state.isBusy}),(0,Vr.jsx)("div",{className:"msp-flex-row",children:(0,Vr.jsx)(hr,{onClick:this.refresh,disabled:this.state.isBusy,icon:Dx,children:"Refresh"})})]})]})}},Oie=class extends ta{constructor(){super(...arguments);this.open=async r=>{let n=r.currentTarget.getAttribute("data-id");if(!n)return;let o=this.props.entries.get(n);if(!o)return;r.preventDefault();let i=`${window.location}`,a=i.indexOf("?");a>0&&(i=i.substr(0,a)),window.open(`${i}?snapshot-url=${encodeURIComponent(o.url)}`,"_blank")}}render(){return(0,Vr.jsx)("ul",{style:{listStyle:"none",marginTop:"10px"},className:"msp-state-list",children:this.props.entries.valueSeq().map(r=>(0,Vr.jsxs)("li",{className:"msp-flex-row",children:[(0,Vr.jsxs)(hr,{"data-id":r.id,onClick:this.props.fetch,disabled:this.props.isBusy,onContextMenu:this.open,title:"Click to download, right-click to open in a new tab.",children:[r.name||new Date(r.timestamp).toLocaleString()," ",(0,Vr.jsx)("small",{children:r.description})]}),!r.isSticky&&this.props.remove&&(0,Vr.jsx)(Gr,{svg:Uc,"data-id":r.id,title:"Remove",onClick:this.props.remove,disabled:this.props.isBusy,small:!0})]},r.id))})}};var Wi=kt(Qr()),YT=class extends pn{constructor(){super(...arguments);this.state={showActions:!0}}componentDidMount(){this.subscribe(this.plugin.state.events.cell.created,r=>{r.cell.transform.parent===en.RootRef&&this.forceUpdate()}),this.subscribe(this.plugin.state.events.cell.removed,r=>{r.parent===en.RootRef&&this.forceUpdate()})}static getDerivedStateFromProps(r,n){let o=r.state.tree.root.ref,a=r.state.tree.children.get(o).size===0;return n.showActions===a?null:{showActions:a}}render(){let r=this.props.state.tree.root.ref;return this.state.showActions?(0,Wi.jsxs)("div",{style:{margin:"10px",cursor:"default"},children:[(0,Wi.jsx)("p",{children:"Nothing to see here yet."}),(0,Wi.jsxs)("p",{children:["Structures and Volumes can be loaded from the ",(0,Wi.jsx)(Kn,{svg:BL})," tab."]})]}):(0,Wi.jsx)(Jie,{cell:this.props.state.cells.get(r),depth:0})}},Jie=class e extends pn{constructor(){super(...arguments);this.state={isCollapsed:!!this.props.cell.state.isCollapsed,isNull:e.isNull(this.props.cell),showLabel:e.showLabel(this.props.cell)}}is(r){return r.ref===this.ref&&r.state===this.props.cell.parent}get ref(){return this.props.cell.transform.ref}componentDidMount(){this.subscribe(this.plugin.state.events.cell.stateUpdated,r=>{this.props.cell===r.cell&&this.is(r)&&r.state.cells.has(this.ref)&&(this.state.isCollapsed!==!!r.cell.state.isCollapsed||this.state.isNull!==e.isNull(r.cell)||this.state.showLabel!==e.showLabel(r.cell))&&this.forceUpdate()}),this.subscribe(this.plugin.state.events.cell.created,r=>{this.props.cell.parent===r.state&&this.ref===r.cell.transform.parent&&this.forceUpdate()}),this.subscribe(this.plugin.state.events.cell.removed,r=>{this.props.cell.parent===r.state&&this.ref===r.parent&&this.forceUpdate()})}static getDerivedStateFromProps(r,n){let o=e.isNull(r.cell),i=e.showLabel(r.cell);return!!r.cell.state.isCollapsed===n.isCollapsed&&n.isNull===o&&n.showLabel===i?null:{isCollapsed:!!r.cell.state.isCollapsed,isNull:o,showLabel:i}}static hasDecorator(r){let n=r.parent.tree.children.get(r.transform.ref);if(n.size!==1)return!1;let o=n.first();return!!o&&!!r.parent?.tree.transforms.get(o).transformer.definition.isDecorator}static isNull(r){return!r||!r.parent||r.obj===po.Null||!r.parent.tree.transforms.has(r.transform.ref)}static showLabel(r){return r.transform.ref!==en.RootRef&&(r.status!=="ok"||!r.state.isGhost&&!e.hasDecorator(r))}render(){if(this.state.isNull)return null;let r=this.props.cell,n=r.parent.tree.children.get(this.ref);if(!this.state.showLabel)return n.size===0?null:(0,Wi.jsx)(Wi.Fragment,{children:n.map(i=>(0,Wi.jsx)(e,{cell:r.parent.cells.get(i),depth:this.props.depth},i))});let o=this.props.depth+1;return(0,Wi.jsxs)(Wi.Fragment,{children:[(0,Wi.jsx)(zie,{cell:r,depth:this.props.depth}),n.size===0?void 0:(0,Wi.jsx)("div",{style:{display:this.state.isCollapsed?"none":"block"},children:n.map(i=>(0,Wi.jsx)(e,{cell:r.parent.cells.get(i),depth:o},i))})]})}},zie=class extends pn{constructor(){super(...arguments);this.state={isCurrent:this.props.cell.parent.current===this.ref,isCollapsed:!!this.props.cell.state.isCollapsed,action:void 0,currentAction:void 0};this.setCurrent=r=>{r?.preventDefault(),r?.currentTarget.blur(),yt.State.SetCurrentObject(this.plugin,{state:this.props.cell.parent,ref:this.ref})};this.setCurrentRoot=r=>{r?.preventDefault(),r?.currentTarget.blur(),this.props.cell.parent&&yt.State.SetCurrentObject(this.plugin,{state:this.props.cell.parent,ref:en.RootRef})};this.remove=r=>{r?.preventDefault(),yt.State.RemoveObject(this.plugin,{state:this.props.cell.parent,ref:this.ref,removeParentGhosts:!0})};this.toggleVisible=r=>{r.preventDefault(),yt.State.ToggleVisibility(this.plugin,{state:this.props.cell.parent,ref:this.ref}),r.currentTarget.blur()};this.toggleExpanded=r=>{r.preventDefault(),yt.State.ToggleExpanded(this.plugin,{state:this.props.cell.parent,ref:this.ref}),r.currentTarget.blur()};this.highlight=r=>{r.preventDefault(),yt.Interactivity.Object.Highlight(this.plugin,{state:this.props.cell.parent,ref:this.ref}),r.currentTarget.blur()};this.clearHighlight=r=>{r.preventDefault(),yt.Interactivity.ClearHighlights(this.plugin),r.currentTarget.blur()};this.hideApply=()=>{this.setCurrentRoot()};this.selectAction=r=>{r&&(r?.value)()}}is(r){return r.ref===this.ref&&r.state===this.props.cell.parent}get ref(){return this.props.cell.transform.ref}componentDidMount(){this.subscribe(this.plugin.state.events.cell.stateUpdated.pipe(gI(r=>this.is(r)),cp(33)),r=>{this.forceUpdate()}),this.subscribe(this.props.cell.parent.behaviors.currentObject,r=>{if(!this.is(r)){this.state.isCurrent&&r.state.transforms.has(this.ref)&&this._setCurrent(this.props.cell.parent.current===this.ref,this.state.isCollapsed);return}r.state.transforms.has(this.ref)&&this._setCurrent(this.props.cell.parent.current===this.ref,!!this.props.cell.state.isCollapsed)})}_setCurrent(r,n){r?this.setState({isCurrent:r,action:"options",currentAction:void 0,isCollapsed:n}):this.setState({isCurrent:r,action:void 0,currentAction:void 0,isCollapsed:n})}static getDerivedStateFromProps(r,n){let o=r.cell.parent.current===r.cell.transform.ref,i=!!r.cell.state.isCollapsed;return n.isCollapsed===i&&n.isCurrent===o?null:{isCurrent:o,isCollapsed:i,action:void 0,currentAction:void 0}}get actions(){let r=this.props.cell,n=[...r.parent.actions.fromCell(r,this.plugin)];if(n.length!==0)return n.sort((o,i)=>o.definition.display.name<i.definition.display.name?-1:o.definition.display.name===i.definition.display.name?0:1),[tn.Header("Apply Action"),...n.map(o=>tn.Item(o.definition.display.name,()=>this.setState({action:"apply",currentAction:o})))]}updates(r){let n=this.props.cell,o=P0.getDecoratorChain(n.parent,n.transform.ref),i=[];for(let a=o.length-1;a>=0;a--){let A=o[a];i.push((0,Wi.jsx)(ug,{state:n.parent,transform:A.transform,noMargin:!0,wrapInExpander:!0,expanderHeaderLeftMargin:r},`${A.transform.transformer.id}-${a}`))}return(0,Wi.jsx)("div",{className:"msp-tree-updates-wrapper",children:i})}render(){let r=this.props.cell,n=r.transform;if(!r)return null;let o=this.is(r.parent.behaviors.currentObject.value),i=r.status!=="error"&&r.status!=="ok",a;if(r.status==="error"||!r.obj){let p=r.status==="error"?r.errorText:n.transformer.definition.display.name;a=(0,Wi.jsxs)(hr,{className:"msp-btn-tree-label msp-no-hover-outline",noOverflow:!0,title:p,onClick:this.state.isCurrent?this.setCurrentRoot:this.setCurrent,disabled:i,children:[r.status==="error"&&(0,Wi.jsxs)("b",{children:["[",r.status,"]"]})," ",(0,Wi.jsx)("span",{children:p})]})}else{let p=r.obj,d=`${p.label} ${p.description?p.description:""}`;a=(0,Wi.jsxs)(hr,{className:`msp-btn-tree-label msp-type-class-${p.type.typeClass}`,noOverflow:!0,disabled:i,title:d,onClick:this.state.isCurrent?this.setCurrentRoot:this.setCurrent,children:[(0,Wi.jsx)("span",{children:p.label})," ",p.description?(0,Wi.jsx)("small",{children:p.description}):void 0]})}let A=r.parent.tree.children.get(this.ref),s=r.state,c=(0,Wi.jsx)(Gr,{svg:s.isCollapsed?rg:tg,flex:"20px",disabled:i,onClick:this.toggleExpanded,transparent:!0,className:"msp-no-hover-outline",style:{visibility:A.size>0?"visible":"hidden"}}),l=r.state.isLocked?void 0:(0,Wi.jsx)(Gr,{svg:Uc,onClick:this.remove,disabled:i,small:!0,toggleState:!1}),u=(0,Wi.jsx)(Gr,{svg:s.isHidden?Ud:Hm,toggleState:!1,disabled:i,small:!0,onClick:this.toggleVisible}),g={marginLeft:`${this.props.depth*8}px`},m=(0,Wi.jsxs)("div",{className:`msp-flex-row msp-tree-row${o?" msp-tree-row-current":""}`,onMouseEnter:this.highlight,onMouseLeave:this.clearHighlight,style:g,children:[c,a,l,u]});if(!o)return m;if(this.state.action==="apply"&&this.state.currentAction)return(0,Wi.jsxs)("div",{style:{marginBottom:"1px"},children:[m,(0,Wi.jsx)(Kl,{header:`Apply ${this.state.currentAction.definition.display.name}`,initialExpanded:!0,hideExpander:!0,hideOffset:!1,onHeaderClick:this.hideApply,topRightIcon:Vg,headerLeftMargin:`${this.props.depth*8+21}px`,children:(0,Wi.jsx)(DC,{onApply:this.hideApply,state:this.props.cell.parent,action:this.state.currentAction,nodeRef:this.props.cell.transform.ref,hideHeader:!0,noMargin:!0})})]});if(this.state.action==="options"){let p=this.actions,d=this.updates(`${this.props.depth*8+21}px`);return(0,Wi.jsxs)("div",{style:{marginBottom:"1px"},children:[m,d,p&&(0,Wi.jsx)("div",{style:{marginLeft:`${this.props.depth*8+21}px`,marginTop:"-1px"},children:(0,Wi.jsx)(tn,{items:p,onSelect:this.selectAction})})]})}return m}};var to=kt(Qr()),Kie=class extends pn{componentDidMount(){this.subscribe(this.plugin.state.behaviors.events.changed,()=>this.forceUpdate())}render(){let t=[];return this.plugin.customImportControls.forEach((r,n)=>{t.push((0,to.jsx)(r,{initiallyCollapsed:this.props.initiallyCollapsed},n))}),t.length>0?(0,to.jsx)(to.Fragment,{children:t}):null}},uJ=class extends pn{constructor(){super(...arguments);this.state={tab:this.plugin.behaviors.layout.leftPanelTabName.value};this.set=r=>{if(this.state.tab===r){this.setState({tab:"none"},()=>this.plugin.behaviors.layout.leftPanelTabName.next("none")),yt.Layout.Update(this.plugin,{state:{regionState:{...this.plugin.layout.state.regionState,left:"collapsed"}}});return}this.setState({tab:r},()=>this.plugin.behaviors.layout.leftPanelTabName.next(r)),this.plugin.layout.state.regionState.left!=="full"&&yt.Layout.Update(this.plugin,{state:{regionState:{...this.plugin.layout.state.regionState,left:"full"}}})};this.tabs={none:(0,to.jsx)(to.Fragment,{}),root:(0,to.jsxs)(to.Fragment,{children:[(0,to.jsx)(QB,{icon:BL,title:"Home"}),(0,to.jsx)(cJ,{state:this.plugin.state.data,nodeRef:en.RootRef,hideHeader:!0,initiallyCollapsed:!0,alwaysExpandFirst:!0}),(0,to.jsx)(Kie,{}),this.plugin.spec.components?.remoteState!=="none"&&(0,to.jsx)(_T,{listOnly:!0})]}),data:(0,to.jsxs)(to.Fragment,{children:[(0,to.jsx)(QB,{icon:J$,title:(0,to.jsxs)(to.Fragment,{children:[(0,to.jsx)(Xie,{})," State Tree"]})}),(0,to.jsx)(YT,{state:this.plugin.state.data})]}),states:(0,to.jsx)(lJ,{}),settings:(0,to.jsxs)(to.Fragment,{children:[(0,to.jsx)(QB,{icon:tl,title:"Plugin Settings"}),(0,to.jsx)(Wie,{})]}),help:(0,to.jsxs)(to.Fragment,{children:[(0,to.jsx)(QB,{icon:zl,title:"Help"}),(0,to.jsx)(k4,{})]})}}componentDidMount(){this.subscribe(this.plugin.behaviors.layout.leftPanelTabName,r=>{this.state.tab!==r&&this.setState({tab:r}),r==="none"&&this.plugin.layout.state.regionState.left!=="collapsed"&&yt.Layout.Update(this.plugin,{state:{regionState:{...this.plugin.layout.state.regionState,left:"collapsed"}}})}),this.subscribe(this.plugin.state.data.events.changed,({state:r})=>{this.state.tab==="data"&&r.cells.size===1&&this.set("root")})}render(){let r=this.state.tab;return(0,to.jsxs)("div",{className:"msp-left-panel-controls",children:[(0,to.jsxs)("div",{className:"msp-left-panel-controls-buttons",children:[(0,to.jsx)(Gr,{svg:BL,toggleState:r==="root",transparent:!0,onClick:()=>this.set("root"),title:"Home"}),(0,to.jsx)(jie,{set:this.set}),(0,to.jsx)(Gr,{svg:X_,toggleState:r==="states",transparent:!0,onClick:()=>this.set("states"),title:"Plugin State"}),(0,to.jsx)(Gr,{svg:zl,toggleState:r==="help",transparent:!0,onClick:()=>this.set("help"),title:"Help"}),(0,to.jsx)("div",{className:"msp-left-panel-controls-buttons-bottom",children:(0,to.jsx)(Gr,{svg:tl,toggleState:r==="settings",transparent:!0,onClick:()=>this.set("settings"),title:"Settings"})})]}),(0,to.jsx)("div",{className:"msp-scrollable-container",children:this.tabs[r]})]})}},jie=class extends pn{constructor(){super(...arguments);this.state={changed:!1}}get tab(){return this.plugin.behaviors.layout.leftPanelTabName.value}componentDidMount(){this.subscribe(this.plugin.behaviors.layout.leftPanelTabName,r=>{this.tab==="data"?this.setState({changed:!1}):this.forceUpdate()}),this.subscribe(this.plugin.state.data.events.changed,r=>{this.tab!=="data"&&this.setState({changed:!0})})}render(){return(0,to.jsx)(Gr,{svg:J$,toggleState:this.tab==="data",transparent:!0,onClick:()=>this.props.set("data"),title:"State Tree",style:{position:"relative"},extraContent:this.state.changed?(0,to.jsx)("div",{className:"msp-left-panel-controls-button-data-dirty"}):void 0})}},Wie=class extends pn{constructor(){super(...arguments);this.setSettings=r=>{yt.Canvas3D.SetSettings(this.plugin,{settings:{[r.name]:r.value}})};this.setCanvas3DContextProps=r=>{this.plugin.canvas3dContext?.setProps({[r.name]:r.value}),this.plugin.events.canvas3d.settingsUpdated.next(void 0)}}componentDidMount(){this.subscribe(this.plugin.events.canvas3d.settingsUpdated,()=>this.forceUpdate()),this.subscribe(this.plugin.layout.events.updated,()=>this.forceUpdate()),this.plugin.canvas3d&&this.subscribe(this.plugin.canvas3d.camera.stateChanged.pipe(jc(500,void 0,{leading:!0,trailing:!0})),r=>{(r.radiusMax!==void 0||r.radius!==void 0)&&this.forceUpdate()})}render(){return(0,to.jsxs)(to.Fragment,{children:[this.plugin.canvas3d&&this.plugin.canvas3dContext&&(0,to.jsxs)(to.Fragment,{children:[(0,to.jsx)(QB,{title:"Viewport"}),(0,to.jsx)(Mn,{params:ds,values:this.plugin.canvas3d.props,onChange:this.setSettings}),(0,to.jsx)(Mn,{params:aB.Params,values:this.plugin.canvas3dContext.props,onChange:this.setCanvas3DContextProps})]}),(0,to.jsx)(QB,{title:"Behavior"}),(0,to.jsx)(YT,{state:this.plugin.state.behaviors})]})}},Xie=class extends pn{constructor(){super(...arguments);this.remove=r=>{r.preventDefault(),yt.State.RemoveObject(this.plugin,{state:this.plugin.state.data,ref:en.RootRef})}}componentDidMount(){this.subscribe(this.plugin.state.events.cell.created,r=>{r.cell.transform.parent===en.RootRef&&this.forceUpdate()}),this.subscribe(this.plugin.state.events.cell.removed,r=>{r.parent===en.RootRef&&this.forceUpdate()})}render(){return this.plugin.state.data.tree.children.get(en.RootRef).size===0?null:(0,to.jsx)(Gr,{svg:Uc,onClick:this.remove,title:"Remove All",style:{display:"inline-block"},small:!0,className:"msp-no-hover-outline",transparent:!0})}};var f4e=kt(Qa());var m4e=kt(Qa());var gJ=kt(Qr()),g4e=5,Zie={selected:"rgb(51, 255, 25)",highlighted:"rgb(255, 102, 153)",focused:""},mJ=class extends pn{constructor(){super(...arguments);this.parentDiv=m4e.createRef();this.lastMouseOverSeqIdx=-1;this.highlightQueue=new Jn;this.markerColors={...Zie};this.customColorThemeWrapper=void 0;this.customColorFunction=void 0;this.lociHighlightProvider=(r,n)=>{this.props.sequenceWrapper.markResidue(r.loci,n)&&this.updateMarker()};this.lociSelectionProvider=(r,n)=>{this.props.sequenceWrapper.markResidue(r.loci,n)&&this.updateMarker()};this.contextMenu=r=>{r.preventDefault()};this.mouseDownLoci=void 0;this.mouseDown=r=>{r.stopPropagation();let n=this.getSeqIdx(r),o=this.getLoci(n);this.mouseDownLoci=o};this.mouseUp=r=>{if(r.stopPropagation(),this.mouseDownLoci===void 0)return;let n=this.getSeqIdx(r),o=this.getLoci(n);if(o){let i=R0(r.nativeEvent),a=WD(r.nativeEvent),A=HM(r.nativeEvent),s=o;if(!W.Loci.areEqual(this.mouseDownLoci,o)){let c=this.mouseDownLoci.elements[0],l=o.elements[0],u=Math.min(Ee.min(c.indices),Ee.min(l.indices)),g=Math.max(Ee.max(c.indices),Ee.max(l.indices));s=W.Loci(o.structure,[{unit:c.unit,indices:Ee.ofRange(u,g)}])}this.click(s,i,a,A)}this.mouseDownLoci=void 0};this.location=W.Location.create(void 0);this.mouseMove=r=>{r.stopPropagation();let n=R0(r.nativeEvent),o=WD(r.nativeEvent),i=HM(r.nativeEvent),a=r.target;if(!a||!a.getAttribute){if(this.lastMouseOverSeqIdx===-1)return;this.lastMouseOverSeqIdx=-1,this.highlightQueue.next({seqIdx:-1,buttons:n,button:o,modifiers:i});return}let A=a.hasAttribute("data-seqid")?+a.getAttribute("data-seqid"):-1;if(this.lastMouseOverSeqIdx!==A)if(this.lastMouseOverSeqIdx=A,this.mouseDownLoci!==void 0){let s=this.getLoci(A);this.hover(s,ya.Flag.None,ya.Flag.None,i)}else this.highlightQueue.next({seqIdx:A,buttons:n,button:o,modifiers:i})};this.mouseLeave=r=>{if(r.stopPropagation(),this.mouseDownLoci=void 0,this.lastMouseOverSeqIdx===-1)return;this.lastMouseOverSeqIdx=-1;let n=R0(r.nativeEvent),o=WD(r.nativeEvent),i=HM(r.nativeEvent);this.highlightQueue.next({seqIdx:-1,buttons:n,button:o,modifiers:i})}}get sequenceNumberPeriod(){return this.props.sequenceNumberPeriod!==void 0?this.props.sequenceNumberPeriod:this.props.sequenceWrapper.length>10?10:this.getSequenceNumber(this.props.sequenceWrapper.length-1).length>1?5:1}componentDidMount(){this.plugin.managers.interactivity.lociHighlights.addProvider(this.lociHighlightProvider),this.plugin.managers.interactivity.lociSelects.addProvider(this.lociSelectionProvider),this.subscribe(this.highlightQueue.pipe(jc(3*16.666,void 0,{leading:!0,trailing:!0})),n=>{let o=this.getLoci(n.seqIdx<0?void 0:n.seqIdx);this.hover(o,n.buttons,n.button,n.modifiers)}),this.subscribe(this.plugin.managers.structure.focus.behaviors.current,n=>{this.updateFocus(n?.loci),this.updateMarker()}),this.updateColors(),yt.Canvas3D.SetSettings.subscribe(this.plugin,()=>{this.updateColors(),this.updateMarker()});let r=this.plugin.customUIState.experimentalSequenceColorTheme;r&&this.subscribe(r,n=>{!n&&!this.customColorThemeWrapper||(this.customColorThemeWrapper=m3t(this.plugin,n,()=>this.forceUpdate()),this.forceUpdate())})}updateColors(){this.plugin.canvas3d?(this.markerColors.highlighted=ke.toHexStyle(this.plugin.canvas3d.props.renderer.highlightColor),this.markerColors.selected=ke.toHexStyle(this.plugin.canvas3d.props.renderer.selectColor)):(this.markerColors.highlighted=Zie.highlighted,this.markerColors.selected=Zie.selected)}updateFocus(r){this.props.sequenceWrapper.markResidue(Bp,"unfocus"),r&&this.props.sequenceWrapper.markResidue(r,"focus")}componentWillUnmount(){super.componentWillUnmount(),this.plugin.managers.interactivity.lociHighlights.removeProvider(this.lociHighlightProvider),this.plugin.managers.interactivity.lociSelects.removeProvider(this.lociSelectionProvider)}getLoci(r){if(r!==void 0){let n=this.props.sequenceWrapper.getLoci(r);if(!W.Loci.isEmpty(n))return n}}getSeqIdx(r){let n,o=r.target;return o&&o.getAttribute&&(n=o.hasAttribute("data-seqid")?+o.getAttribute("data-seqid"):void 0),n}hover(r,n,o,i){let a={current:Xt.Loci.Empty,buttons:n,button:o,modifiers:i};if(r!==void 0&&!W.Loci.isEmpty(r)&&(a.current={loci:r},this.mouseDownLoci)){let A=this.mouseDownLoci.elements[0],s=r.elements[0],c=Math.min(Ee.min(A.indices),Ee.min(s.indices)),l=Math.max(Ee.max(A.indices),Ee.max(s.indices)),u=W.Loci(r.structure,[{unit:A.unit,indices:Ee.ofRange(c,l)}]);a.current={loci:u}}this.plugin.behaviors.interaction.hover.next(a)}click(r,n,o,i){let a={current:Xt.Loci.Empty,buttons:n,button:o,modifiers:i};r!==void 0&&!W.Loci.isEmpty(r)&&(a.current={loci:r}),this.plugin.behaviors.interaction.click.next(a)}getBackgroundColor(r){let n=this.props.sequenceWrapper;return n.isHighlighted(r)&&this.markerColors.highlighted?this.markerColors.highlighted:n.isSelected(r)&&this.markerColors.selected?this.markerColors.selected:n.isFocused(r)&&this.markerColors.focused?this.markerColors.focused:this.customColorFunction?this.customColorFunction(r):""}getResidueClass(r,n){let o=this.props.sequenceWrapper,i=[o.residueClass(r)];return n.length>1&&i.push(r===0?"msp-sequence-residue-long-begin":"msp-sequence-residue-long"),o.isHighlighted(r)&&i.push("msp-sequence-residue-highlighted"),o.isSelected(r)&&i.push("msp-sequence-residue-selected"),o.isFocused(r)&&i.push("msp-sequence-residue-focused"),i.join(" ")}residue(r,n){return(0,gJ.jsx)("span",{"data-seqid":r,style:{backgroundColor:this.getBackgroundColor(r)},className:this.getResidueClass(r,n),children:`\u200B${n}\u200B`},r)}getSequenceNumberClass(r,n,o){let i=["msp-sequence-number"];return n.startsWith("-")?o.length>1&&r>0?i.push("msp-sequence-number-long-negative"):i.push("msp-sequence-number-negative"):o.length>1&&r>0&&i.push("msp-sequence-number-long"),i.join(" ")}getSequenceNumber(r){let n="",o=this.props.sequenceWrapper.getLoci(r),i=W.Loci.getFirstLocation(o,this.location);if(i)if(ge.isAtomic(i.unit)){let a=Ke.residue.auth_seq_id(i),A=Ke.residue.pdbx_PDB_ins_code(i);n=`${a}${A||""}`}else ge.isCoarse(i.unit)&&(n=`${r+1}`);return n}padSeqNum(r){return r.length<g4e?r+new Array(g4e-r.length+1).join("\xA0"):r}getSequenceNumberSpan(r,n){let o=this.getSequenceNumber(r);return(0,gJ.jsx)("span",{className:this.getSequenceNumberClass(r,o,n),children:this.padSeqNum(o)},`marker-${r}`)}updateMarker(){if(!this.parentDiv.current)return;let r=this.parentDiv.current.children,n=!this.props.hideSequenceNumbers,o=this.sequenceNumberPeriod,i=this.props.sequenceWrapper,a=i.length,A=0;for(let s=0;s<a;s++){n&&s%o===0&&s<a&&A++;let c=r[A];if(!c)return;A++;let l=this.getResidueClass(s,i.residueLabel(s));c.className!==l&&(c.className=l);let u=this.getBackgroundColor(s);c.style.backgroundColor!==u&&(c.style.backgroundColor=u)}}render(){let r=this.props.sequenceWrapper,n=[];this.customColorThemeWrapper&&(this.customColorFunction=this.customColorThemeWrapper.getColorFunction(r));let o=!this.props.hideSequenceNumbers,i=this.sequenceNumberPeriod;for(let a=0,A=r.length;a<A;++a){let s=r.residueLabel(a);o&&a%i===0&&a<A&&(n[n.length]=this.getSequenceNumberSpan(a,s)),n[n.length]=this.residue(a,s)}return this.updateFocus(this.plugin.managers.structure.focus.behaviors.current.value?.loci),this.updateMarker(),(0,gJ.jsx)("div",{className:"msp-sequence-wrapper",onContextMenu:this.contextMenu,onMouseDown:this.mouseDown,onMouseUp:this.mouseUp,onMouseMove:this.mouseMove,onMouseLeave:this.mouseLeave,ref:this.parentDiv,children:n})}};function m3t(e,t,r){let n=W.Location.create();function o(a,A,s){let c=a.getLoci(A);if(!c||W.Loci.isEmpty(c))return"";W.Loci.getFirstLocation(c,n);let l=s(n,!1);return l<0?"":ke.toHexStyle(l)}let i=VA(a=>{if(!t)return;let A=a.getLoci(0)?.structure;if(!A)return;let s,c=t.getProps?.({structure:A})??t.provider.defaultValues;t.provider.ensureCustomProperties?e.runTask(ve.create("Attach custom properties for coloring theme",async u=>{try{await t.provider.ensureCustomProperties?.attach({assetManager:e.managers.asset,runtime:u},{structure:A})}catch(g){console.warn(`Failed to attach custom properties needed for coloring theme ${t.provider.name}:`,g)}finally{s=t.provider.factory({structure:A},c).color,r()}})):s=t.provider.factory({structure:A},c).color;let l={};return u=>s?l[u]??=o(a,u,s):""});return{themeName:t?.provider.name,getColorFunction:i}}var GC=class{constructor(t,r){this.data=t;this.length=r;this.markerArray=new Uint8Array(r),this.focusMarkerArray=new Uint8Array(r)}mark(t,r){let n=this.getSeqIndices(t);return Ee.size(n)===0?!1:NQ(this.markerArray,n,r)}markResidue(t,r){return r==="focus"?this.markResidueFocus(t,!0):r==="unfocus"?this.markResidueFocus(t,!1):uA(t)?NQ(this.markerArray,Ue.ofLength(this.length),r):this.mark(t,r)}markResidueFocus(t,r){let n=r?1:0;if(uA(t))return this.focusMarkerArray.fill(n,0,this.length),!0;{let o=this.getSeqIndices(t);return Ee.forEach(o,i=>this.focusMarkerArray[i]=n),Ee.size(o)>0}}isHighlighted(t){return!!(this.markerArray[t]&1)}isSelected(t){return!!(this.markerArray[t]&2)}isFocused(t){return!!this.focusMarkerArray[t]}};var dJ=class extends GC{seqId(t){return this.sequence.seqId.value(t)}residueLabel(t){return this.sequence.label.value(t)||this.sequence.code.value(t)}residueColor(t){return this.missing.has(this.modelNum,this.asymId,this.seqId(t))?xt.grey:xt.black}residueClass(t){return this.missing.has(this.modelNum,this.asymId,this.seqId(t))?"msp-sequence-missing":"msp-sequence-present"}getSeqIndices(t){let{structure:r}=this.data,n=o=>this.sequence.index(o);if(W.Loci.is(t)){if(!Ye.areRootsEquivalent(t.structure,r))return Ue.Empty;t=W.Loci.remap(t,r);let o=[];for(let i of t.elements)this.unitMap.has(i.unit.id)&&(ge.isAtomic(i.unit)?p3t(o,i,n):f3t(o,i,n));return je.deduplicate(je.ofSortedArray(o))}else if(Ye.isLoci(t))return Ye.areRootsEquivalent(t.structure,r)?this.observed:Ue.Empty;return Ue.Empty}getLoci(t){let r=d3t(this.data.units[0].chainGroupId,this.data.units[0].conformation.operator.name,this.seqId(t));return Qt.toLociWithSourceUnits(Ah.run(r,this.data.structure))}constructor(t){let r=W.Location.create(t.structure,t.units[0],t.units[0].elements[0]),n=t.units[0].model.sequence.byEntityKey[Ke.entity.key(r)],o=n.sequence.length;super(t,o),this.unitMap=new Map;for(let a of t.units)this.unitMap.set(a.id,a);this.sequence=n.sequence,this.missing=t.units[0].model.properties.missingResidues,this.modelNum=t.units[0].model.modelNum,this.asymId=ge.isAtomic(t.units[0])?Ke.chain.label_asym_id(r):Ke.coarse.asym_id(r);let i=[];for(let a=0;a<o;++a)this.missing.has(this.modelNum,this.asymId,this.seqId(a))&&i.push(a);this.observed=Ee.subtract(Ue.ofBounds(0,o),je.ofSortedArray(i))}};function d3t(e,t,r){return wo.generators.atoms({unitTest:n=>Ke.unit.chainGroupId(n.element)===e&&Ke.unit.operator_name(n.element)===t,residueTest:n=>n.element.unit.kind===ge.Kind.Atomic?Ke.residue.label_seq_id(n.element)===r:Ke.coarse.seq_id_begin(n.element)<=r&&Ke.coarse.seq_id_end(n.element)>=r})}function p3t(e,t,r){let{model:n,elements:o}=t.unit,{index:i}=n.atomicHierarchy.residueAtomSegments,{label_seq_id:a}=n.atomicHierarchy.residues;return Ee.forEachSegment(t.indices,A=>i[o[A]],A=>{let s=a.value(A),c=r(s);e.push(c)}),!0}function f3t(e,t,r){let{model:n,elements:o}=t.unit,i=ge.isSpheres(t.unit)?n.coarseHierarchy.spheres.seq_id_begin:n.coarseHierarchy.gaussians.seq_id_begin,a=ge.isSpheres(t.unit)?n.coarseHierarchy.spheres.seq_id_end:n.coarseHierarchy.gaussians.seq_id_end;return Ee.forEach(t.indices,A=>{let s=o[A];for(let c=r(i.value(s)),l=r(a.value(s));c<=l;c++)e.push(c)}),!0}var pJ=class extends GC{residueLabel(t){return this.sequence[t]}residueColor(t){return xt.black}residueClass(t){return"msp-sequence-present"}getSeqIndices(t){let{structure:r}=this.data;if(W.Loci.is(t)){if(!Ye.areRootsEquivalent(t.structure,r))return Ue.Empty;t=W.Loci.remap(t,r);let n=[];for(let o of t.elements){let i=this.unitMap.get(o.unit.id);if(i){let{index:a}=o.unit.model.atomicHierarchy.residueAtomSegments;Ee.forEach(o.indices,A=>{let s=this.sequenceIndices.get(a[i.elements[A]]);s!==void 0&&n.push(s)})}}return je.deduplicate(je.ofSortedArray(n))}else if(Ye.isLoci(t))return Ye.areRootsEquivalent(t.structure,r)?Ue.ofBounds(0,this.length):Ue.Empty;return Ue.Empty}getLoci(t){let r=[],n=this.residueIndices.get(t);if(n!==void 0){let o=this.seqToUnit.get(t),{offsets:i}=o.model.atomicHierarchy.residueAtomSegments,a=je.findPredecessorIndex(o.elements,i[n]),A=je.findPredecessorIndex(o.elements,i[n+1]);r.push({unit:o,indices:Ue.ofBounds(a,A)})}return W.Loci(this.data.structure,r)}constructor(t){let r=[],n=new Map,o=new Map,i=new Map;for(let A=0,s=t.units.length;A<s;++A){let c=t.units[A],{residueAtomSegments:l,atoms:u}=c.model.atomicHierarchy,g=sr.transientSegments(l,c.elements);for(;g.hasNext;){let{index:m}=g.move();n.set(m,r.length),o.set(r.length,m),i.set(r.length,c),r.push(u.label_comp_id.value(l.offsets[m]))}}let a=r.length;super(t,a),this.unitMap=new Map;for(let A of t.units)this.unitMap.set(A.id,A);this.sequence=r,this.sequenceIndices=n,this.residueIndices=o,this.seqToUnit=i}};var mw=class extends GC{residueLabel(t){return this.label}residueColor(t){return xt.black}residueClass(t){return"msp-sequence-present"}getSeqIndices(t){let{structure:r}=this.data;if(W.Loci.is(t)){if(!Ye.areRootsEquivalent(t.structure,r))return Ue.Empty;t=W.Loci.remap(t,r);for(let n of t.elements){let o=this.unitIndices.get(n.unit.id);if(o&&Ee.isSubset(o,n.indices))return Ue.ofSingleton(0)}}else if(Ye.isLoci(t))return Ye.areRootsEquivalent(t.structure,r)?Ue.ofSingleton(0):Ue.Empty;return Ue.Empty}getLoci(t){return this.loci}constructor(t){let r=0,n=0,o=[],i=W.Location.create(t.structure),a=new Map,A=[];for(let c=0,l=t.units.length;c<l;++c){let u=t.units[c];W.Location.set(i,t.structure,u,u.elements[0]);let g=u.model.sequence.byEntityKey[Ke.entity.key(i)];g&&(r+=g.sequence.length),n+=u.elements.length;let m=Ue.ofBounds(0,u.elements.length);a.set(u.id,m),A.push({unit:u,indices:m})}r>0&&o.push(`${r} residues`),o.push(`${n} elements`),super(t,1),this.label=`Whole Chain (${o.join(", ")})`,this.unitIndices=a,this.loci=W.Loci(this.data.structure,A)}};var fJ=class extends GC{residueLabel(t){return"X"}residueColor(t){return xt.black}residueClass(t){return"msp-sequence-present"}getSeqIndices(t){let{structure:r,units:n}=this.data;if(W.Loci.is(t)){if(!Ye.areRootsEquivalent(t.structure,r))return Ue.Empty;t=W.Loci.remap(t,r);for(let o of t.elements){let i=this.unitIndices.get(o.unit.id);if(i&&Ee.isSubset(i,o.indices))return o.indices}}else if(Ye.isLoci(t)){if(!Ye.areRootsEquivalent(t.structure,r))return Ue.Empty;for(let o=0,i=n.length;o<i;++o)return this.unitIndices.get(n[o].id)}return Ue.Empty}getLoci(t){let{units:r}=this.data,n=[],o=0;for(let i=0,a=r.length;i<a;++i){let A=r[i];if(t<o+A.elements.length){n.push({unit:A,indices:Ue.ofSingleton(t-o)});break}o+=A.elements.length}return W.Loci(this.data.structure,n)}constructor(t){let r=0,n=new Map,o=[];for(let i=0,a=t.units.length;i<a;++i){let A=t.units[i];r+=A.elements.length;let s=Ue.ofBounds(0,A.elements.length);n.set(A.id,s),o.push({unit:A,indices:s})}super(t,r),this.unitIndices=n}};var PA=kt(Qr()),qie=5e3,eae=1e3,B3t=30;function B4e(e){let t=Ke.unit.pdbx_struct_oper_list_ids(e),r=Ke.unit.struct_ncs_oper_id(e),n=Ke.unit.hkl(e),o=Ke.unit.spgrOp(e);return`${t.sort().join(",")}|${r}|${n}|${o}`}function tae(e){let[t,r]=e.split("|");return[parseInt(t),r]}function d4e(e,t){let{structure:r,modelEntityId:n,chainGroupId:o,operatorKey:i}=e,a=W.Location.create(r),[A,s]=tae(n),c=[];for(let l of r.units)W.Location.set(a,r,l,l.elements[0]),r.getModelIndex(l.model)===A&&Ke.entity.id(a)===s&&l.chainGroupId===o&&B4e(a)===i&&c.push(l);if(c.length>0){let l={structure:r,units:c},u=c[0],g;if(u.polymerElements.length){let m=W.Location.create(r,u,u.elements[0]),p=u.model.sequence.byEntityKey[Ke.entity.key(m)];if(p&&p.sequence.length<=qie)g=new dJ(l);else{let d=c.reduce((f,I)=>f+I.polymerElements.length,0);ge.isAtomic(u)||d>qie?g=new mw(l):g=new fJ(l)}}else ge.isAtomic(u)?c.reduce((p,d)=>p+d.residueCount,0)>qie?g=new mw(l):g=new pJ(l):(console.warn("should not happen, expecting coarse units to be polymeric"),g=new mw(l));return g.markResidue(t.getLoci(r),4),g}else return"No sequence available"}function BJ(e,t=!1){let r=[],n=W.Location.create(e),o=new Set;for(let i of e.units){W.Location.set(n,e,i,i.elements[0]);let a=Ke.entity.id(n),A=e.getModelIndex(i.model),s=`${A}|${a}`;if(o.has(s)||t&&Ke.entity.type(n)!=="polymer")continue;let c=Ke.entity.pdbx_description(n).join(", ");e.models.length&&(e.representativeModel?c+=` (Model ${e.models[A].modelNum})`:c.startsWith("Polymer ")&&(c+=` (${e.models[A].entry})`));let l=`${a}: ${c}`;if(r.push([s,l]),o.add(s),r.length>eae)return[["","Too many entities"]]}return r.length===0&&r.push(["","No entities"]),r}function OT(e,t){let r=[],n=W.Location.create(e),o=new Set,[i,a]=tae(t);for(let A of e.units){if(W.Location.set(n,e,A,A.elements[0]),e.getModelIndex(A.model)!==i||Ke.entity.id(n)!==a)continue;let s=A.chainGroupId;if(o.has(s))continue;let c=bd(n,{granularity:"chain",hidePrefix:!0,htmlStyling:!1});if(r.push([s,c]),o.add(s),r.length>eae)return[[-1,"Too many chains"]]}return r.length===0&&r.push([-1,"No chains"]),r}function dw(e,t,r){let n=[],o=W.Location.create(e),i=new Set,[a,A]=tae(t);for(let s of e.units){if(W.Location.set(o,e,s,s.elements[0]),e.getModelIndex(s.model)!==a||Ke.entity.id(o)!==A||s.chainGroupId!==r)continue;let c=B4e(o);if(i.has(c))continue;let l=s.conformation.operator.name;if(n.push([c,l]),i.add(c),n.length>eae)return[["","Too many operators"]]}return n.length===0&&n.push(["","No operators"]),n}function p4e(e){let t=[],r=[],n=e.select(fr.Generators.rootsOfType(te.Molecule.Structure));for(let o of n)o.obj?.data&&(r.push(o.obj.data),t.push([o.transform.ref,o.obj.data.label]));return t.length===0&&t.push(["","No structure"]),{options:t,all:r}}var $ie=h.Select("single",[["single","Chain"],["polymers","Polymers"],["all","Everything"]]),IJ=class extends pn{constructor(){super(...arguments);this.state={structureOptions:{options:[],all:[]},structure:Ye.Empty,structureRef:"",modelEntityId:"",chainGroupId:-1,operatorKey:"",mode:"single",sequenceViewModeParam:$ie};this.setParamProps=r=>{let n={...this.state};switch(r.name){case"mode":if(n.mode=r.value,this.state.mode===n.mode)return;if(n.mode==="all"||n.mode==="polymers")break;case"structure":r.name==="structure"&&(n.structureRef=r.value),n.structure=this.getStructure(n.structureRef),n.modelEntityId=BJ(n.structure)[0][0],n.chainGroupId=OT(n.structure,n.modelEntityId)[0][0],n.operatorKey=dw(n.structure,n.modelEntityId,n.chainGroupId)[0][0];break;case"entity":n.modelEntityId=r.value,n.chainGroupId=OT(n.structure,n.modelEntityId)[0][0],n.operatorKey=dw(n.structure,n.modelEntityId,n.chainGroupId)[0][0];break;case"chain":n.chainGroupId=r.value,n.operatorKey=dw(n.structure,n.modelEntityId,n.chainGroupId)[0][0];break;case"operator":n.operatorKey=r.value;break}this.setState(n)}}componentDidMount(){this.plugin.state.data.select(fr.Generators.rootsOfType(te.Molecule.Structure)).length>0&&this.setState(this.getInitialState()),this.subscribe(this.plugin.state.events.object.updated,({ref:n,obj:o})=>{n===this.state.structureRef&&o&&o.type===te.Molecule.Structure.type&&o.data!==this.state.structure&&this.sync()}),this.subscribe(this.plugin.state.events.object.created,({obj:n})=>{n&&n.type===te.Molecule.Structure.type&&this.sync()}),this.subscribe(this.plugin.state.events.object.removed,({obj:n})=>{n&&n.type===te.Molecule.Structure.type&&this.sync()});let r=this.plugin.spec.components?.sequenceViewer?.modeOptions;if(r){let n=new Set(r),o={...$ie,options:$ie.options.filter(([i])=>n.has(i))};this.setState({sequenceViewModeParam:o})}}sync(){let r=p4e(this.plugin.state.data);_b(r.all,this.state.structureOptions.all)||this.setState(this.getInitialState())}getStructure(r){let o=this.plugin.state.data.select(r)[0];return!r||!o||!o.obj?Ye.Empty:o.obj.data}getSequenceWrapper(r){return{wrapper:d4e(this.state,this.plugin.managers.structure.selection),label:`${h.optionLabel(r.chain,this.state.chainGroupId)} | ${h.optionLabel(r.entity,this.state.modelEntityId)}`}}getSequenceWrappers(r){if(this.state.mode==="single")return[this.getSequenceWrapper(r)];let n=this.getStructure(this.state.structureRef),o=[];for(let[i,a]of BJ(n,this.state.mode==="polymers"))for(let[A,s]of OT(n,i))for(let[c]of dw(n,i,A))if(o.push({wrapper:d4e({structure:n,modelEntityId:i,chainGroupId:A,operatorKey:c},this.plugin.managers.structure.selection),label:`${s} | ${a}`}),o.length>B3t)return[];return o}getInitialState(){let r=p4e(this.plugin.state.data),n=r.options[0][0],o=this.getStructure(n),i=BJ(o)[0][0],a=OT(o,i)[0][0],A=dw(o,i,a)[0][0];this.state.structure&&this.state.structure===o&&(i=this.state.modelEntityId,a=this.state.chainGroupId,A=this.state.operatorKey);let s=this.plugin.spec.components?.sequenceViewer?.defaultMode,c=this.props.defaultMode??s??"single";return{structureOptions:r,structure:o,structureRef:n,modelEntityId:i,chainGroupId:a,operatorKey:A,mode:c,sequenceViewModeParam:this.state.sequenceViewModeParam}}get params(){let{structureOptions:r,structure:n,modelEntityId:o,chainGroupId:i}=this.state,a=BJ(n),A=OT(n,o),s=dw(n,o,i);return{structure:h.Select(r.options[0][0],r.options,{shortLabel:!0}),entity:h.Select(a[0][0],a,{shortLabel:!0}),chain:h.Select(A[0][0],A,{shortLabel:!0,twoColumns:!0,label:"Chain"}),operator:h.Select(s[0][0],s,{shortLabel:!0,twoColumns:!0}),mode:this.state.sequenceViewModeParam}}get values(){return{structure:this.state.structureRef,entity:this.state.modelEntityId,chain:this.state.chainGroupId,operator:this.state.operatorKey,mode:this.state.mode}}render(){if(this.getStructure(this.state.structureRef)===Ye.Empty)return(0,PA.jsx)("div",{className:"msp-sequence",children:(0,PA.jsxs)("div",{className:"msp-sequence-select",children:[(0,PA.jsx)(Kn,{svg:zl,style:{cursor:"help",position:"absolute",right:0,top:0},title:"Shows a sequence of one or more chains. Use the controls to alter selection."}),(0,PA.jsx)("span",{children:"Sequence"}),(0,PA.jsx)("span",{style:{fontWeight:"normal"},children:"No structure available"})]})});let r=this.params,n=this.values,o=this.getSequenceWrappers(r);return(0,PA.jsxs)("div",{className:"msp-sequence",children:[(0,PA.jsxs)("div",{className:"msp-sequence-select",children:[(0,PA.jsx)(Kn,{svg:zl,style:{cursor:"help",position:"absolute",right:0,top:0},title:`This shows a single sequence. Use the controls to show a different sequence.
|
|
Use Ctrl or Cmd key to add a sequence range to focus; use Shift key to extend last focused/selected range.`}),(0,PA.jsx)("span",{children:"Sequence of"}),(0,PA.jsx)(EC,{title:`[Structure] ${h.optionLabel(r.structure,n.structure)}`,param:r.structure,name:"structure",value:n.structure,onChange:this.setParamProps}),(0,PA.jsx)(EC,{title:"[Mode]",param:this.state.sequenceViewModeParam,name:"mode",value:n.mode,onChange:this.setParamProps}),n.mode==="single"&&(0,PA.jsx)(EC,{title:`[Entity] ${h.optionLabel(r.entity,n.entity)}`,param:r.entity,name:"entity",value:n.entity,onChange:this.setParamProps}),n.mode==="single"&&(0,PA.jsx)(EC,{title:`[Chain] ${h.optionLabel(r.chain,n.chain)}`,param:r.chain,name:"chain",value:n.chain,onChange:this.setParamProps}),r.operator.options.length>1&&(0,PA.jsx)(PA.Fragment,{children:(0,PA.jsx)(EC,{title:`[Instance] ${h.optionLabel(r.operator,n.operator)}`,param:r.operator,name:"operator",value:n.operator,onChange:this.setParamProps})})]}),(0,PA.jsx)(I3t,{children:o.map((i,a)=>{let A=typeof i.wrapper=="string"?(0,PA.jsx)("div",{className:"msp-sequence-wrapper",children:i.wrapper},a):(0,PA.jsx)(mJ,{sequenceWrapper:i.wrapper},a);return n.mode==="single"?A:(0,PA.jsxs)(f4e.Fragment,{children:[(0,PA.jsx)("div",{className:"msp-sequence-chain-label",children:i.label}),A]},a)})})]})}};function I3t({children:e}){return(0,PA.jsx)("div",{className:"msp-sequence-wrapper-non-empty",children:e})}var NC=kt(Qa());var il=kt(Qr());function I4e(){let e=(0,NC.useContext)(Iu),[t,r]=(0,NC.useState)(Cc());return(0,NC.useEffect)(()=>{let n=e.events.task.progress.subscribe(i=>{let a=!!e.spec.components?.hideTaskOverlay;i.level==="background"&&(a||!i.useOverlay)&&r(A=>A.set(i.id,i))}),o=e.events.task.finished.subscribe(({id:i})=>{r(a=>a.delete(i))});return()=>{n.unsubscribe(),o.unsubscribe()}},[e]),(0,il.jsxs)("div",{className:"msp-background-tasks",children:[t.valueSeq().map(n=>(0,il.jsx)(CJ,{event:n},n.id)),(0,il.jsx)(C3t,{})]})}function C3t(){let e=(0,NC.useContext)(Iu),t=Tc(e.canvas3d?.commitQueueSize);return t?(0,il.jsx)("div",{className:"msp-task-state",children:(0,il.jsx)("div",{children:(0,il.jsxs)("div",{children:["Commiting renderables... ",t," remaining"]})})}):null}var CJ=class extends pn{constructor(){super(...arguments);this.abort=()=>{this.plugin.managers.task.requestAbort(this.props.event.progress.root.progress.taskId,"User Request")}}render(){let r=this.props.event.progress.root,n=C4e(this.props.event.progress.root)-1,o=r.progress.isIndeterminate?void 0:(0,il.jsxs)(il.Fragment,{children:["[",r.progress.current,"/",r.progress.max,"]"]}),i=n>0?(0,il.jsxs)(il.Fragment,{children:["[",n," subtask(s)]"]}):void 0;return(0,il.jsx)("div",{className:"msp-task-state",children:(0,il.jsxs)("div",{children:[r.progress.canAbort&&(0,il.jsx)(Gr,{svg:K_,onClick:this.abort,title:"Abort"}),(0,il.jsxs)("div",{children:[r.progress.message," ",o," ",i]})]})})}};function C4e(e){if(e.children.length===0)return 1;let t=0;for(let r of e.children)t+=C4e(r);return t}function h4e(){let e=(0,NC.useContext)(Iu),[t,r]=(0,NC.useState)(Cc());return(0,NC.useEffect)(()=>{let n=e.events.task.progress.subscribe(i=>{i.useOverlay&&r(a=>a.set(i.id,i))}),o=e.events.task.finished.subscribe(({id:i})=>{r(a=>a.delete(i))});return()=>{n.unsubscribe(),o.unsubscribe()}},[e]),t.size===0?null:(0,il.jsx)("div",{className:"msp-overlay-tasks",children:t.valueSeq().map(n=>(0,il.jsx)(CJ,{event:n},n.id))})}var Md=kt(Qr()),rae=class extends pn{constructor(){super(...arguments);this.hide=()=>{(this.props.entry.hide||function(){}).call(null)}}render(){let r=this.props.entry,n=typeof r.message=="string"?(0,Md.jsx)("div",{dangerouslySetInnerHTML:{__html:r.message}}):(0,Md.jsx)("div",{children:(0,Md.jsx)(r.message,{})});return(0,Md.jsxs)("div",{className:"msp-toast-entry",children:[(0,Md.jsx)("div",{className:"msp-toast-title",onClick:()=>this.hide(),children:r.title}),(0,Md.jsx)("div",{className:"msp-toast-message",children:n}),(0,Md.jsx)("div",{className:"msp-toast-clear"}),(0,Md.jsx)("div",{className:"msp-toast-hide",children:(0,Md.jsx)(Gr,{svg:K_,onClick:this.hide,title:"Hide",className:"msp-no-hover-outline"})})]})}},hJ=class extends pn{componentDidMount(){this.subscribe(this.plugin.managers.toast.events.changed,()=>this.forceUpdate())}render(){let t=this.plugin.managers.toast.state;if(!t.entries.count())return null;let r=[];return t.entries.forEach((n,o)=>r.push(n)),r.sort(function(n,o){return n.serialNumber-o.serialNumber}),(0,Md.jsx)("div",{className:"msp-toast-container",children:r.map(n=>(0,Md.jsx)(rae,{entry:n},n.serialNumber))})}};var y4e=kt(Qa());var Ef=kt(Qr()),yJ=class extends pn{constructor(){super(...arguments);this.container=y4e.createRef();this.mounted=!1;this.state={noWebGl:!1,showLogo:!0};this.handleLogo=()=>{this.setState({showLogo:!this.plugin.canvas3d?.reprCount.value})}}async applyMount(){try{let r=await this.plugin.mountAsync(this.container.current,{checkeredCanvasBackground:!0});if(!this.mounted)return;r||this.setState({noWebGl:!0}),this.handleLogo(),this.subscribe(this.plugin.canvas3d.reprCount,this.handleLogo)}catch(r){console.error(r),this.setState({noWebGl:!0})}}componentDidMount(){if(this.mounted=!0,!this.container.current){this.setState({noWebGl:!0});return}this.applyMount()}componentWillUnmount(){this.mounted=!1,super.componentWillUnmount(),this.plugin.unmount()}renderMissing(){if(this.props.noWebGl){let r=this.props.noWebGl;return(0,Ef.jsx)(r,{})}return(0,Ef.jsx)("div",{className:"msp-no-webgl",children:(0,Ef.jsxs)("div",{children:[(0,Ef.jsx)("p",{children:(0,Ef.jsx)("b",{children:"WebGL does not seem to be available."})}),(0,Ef.jsx)("p",{children:"This can be caused by an outdated browser, graphics card driver issue, or bad weather. Sometimes, just restarting the browser helps. Also, make sure hardware acceleration is enabled in your browser."}),(0,Ef.jsxs)("p",{children:["For a list of supported browsers, refer to ",(0,Ef.jsx)("a",{href:"http://caniuse.com/#feat=webgl",target:"_blank",children:"http://caniuse.com/#feat=webgl"}),"."]})]})})}render(){if(this.state.noWebGl)return this.renderMissing();let r=this.props.logo;return(0,Ef.jsx)("div",{className:this.props.parentClassName||"msp-viewport",style:this.props.parentStyle,ref:this.container,children:this.state.showLogo&&r&&(0,Ef.jsx)(r,{})})}};var QJ=kt(Qa()),Km=kt(Qa());var al=kt(Qr()),h3t=e=>{let{plugin:t,cropFrameColor:r}=e,n=t.helpers.viewportScreenshot,[o,i]=(0,Km.useState)(null),a=(0,Km.useRef)(null),A=(0,Km.useRef)(e);return(0,Km.useEffect)(()=>{A.current=e},Object.values(e)),(0,Km.useEffect)(()=>{o!==a.current&&i(a.current)}),(0,Km.useEffect)(()=>{let s=!1,c=[];function l(d,f){d&&c.push(d.subscribe(f))}function u(){let d=A.current;!d.suspend&&a.current&&Q4e(t,n,a.current,d.customBackground,d.borderColor,d.borderWidth),a.current||(s=!0)}let g=setInterval(()=>{s&&(s=!1,u())},1e3/8);l(t.events.canvas3d.settingsUpdated,()=>s=!0),l(t.canvas3d?.didDraw,()=>s=!0),l(t.state.data.behaviors.isUpdating,d=>{d||(s=!0)}),l(n?.behaviors.values,()=>s=!0),l(n?.behaviors.cropParams,()=>s=!0);let m;typeof ResizeObserver<"u"&&(m=new ResizeObserver(()=>s=!0));let p=a.current;return m?.observe(p),u(),()=>{clearInterval(g),c.forEach(d=>d.unsubscribe()),m?.unobserve(p)}},[n]),(0,Km.useLayoutEffect)(()=>{a.current&&Q4e(t,n,a.current,e.customBackground,e.borderColor,e.borderWidth)},[...Object.values(e)]),(0,al.jsx)(al.Fragment,{children:(0,al.jsxs)("div",{style:{position:"relative",width:"100%",height:"100%"},children:[(0,al.jsx)("canvas",{ref:a,onContextMenu:s=>{s.preventDefault(),s.stopPropagation()},style:{display:"block",width:"100%",height:"100%"}}),(0,al.jsx)(y3t,{plugin:t,canvas:o,color:r})]})})},b4e=QJ.memo(h3t,(e,t)=>Ny(e,t));async function Q4e(e,t,r,n,o,i){let a=ve.create("Render Screenshot",async A=>{if(!t)return;let s=await t.getPreview(A);if(!s)return;let c=r.getContext("2d");if(!c)return;let{canvas:l,width:u,height:g}=s,m=r.clientWidth,p=r.clientHeight;r.width=m,r.height=p,c.clearRect(0,0,m,p);let d=x4e(u,g,m,p);if(n)c.fillStyle=n,c.fillRect(d.x,d.y,d.width,d.height);else if(t.values.transparent)for(let I=0;I<d.width;I+=13)for(let C=0;C<d.height;C+=13){c.fillStyle=(I+C)%2?"#ffffff":"#bfbfbf";let y=d.x+I,Q=d.y+C,E=I+13>d.width?d.width-I:13,b=C+13>d.height?d.height-C:13;c.fillRect(y,Q,E,b)}if(c.drawImage(l,d.x,d.y,d.width,d.height),o&&i){let f=i;c.rect(d.x,d.y,d.width,d.height),c.rect(d.x+f,d.y+f,d.width-2*f,d.height-2*f),c.fillStyle=o,c.fill("evenodd")}});return e.runTask(a,{useOverlay:!0})}function y3t({plugin:e,canvas:t,color:r="rgba(255, 87, 45, 0.75)"}){let n=e.helpers.viewportScreenshot,o=Tc(n?.behaviors.values),i=Tc(n?.behaviors.cropParams),a=Tc(n?.behaviors.relativeCrop),A=(0,Km.useRef)({x:0,y:0,width:0,height:0});Tc(o?.resolution.name==="viewport"?e.canvas3d?.resized:void 0);let[s,c]=QJ.useState(""),[l,u]=(0,Km.useState)([0,0]),[g,m]=(0,Km.useState)([0,0]);if(!n||!t||!a)return null;let{width:p,height:d}=n.getSizeAndViewport(),f=x4e(p,d,t.clientWidth,t.clientHeight),I={x:f.x+Math.floor(f.width*a.x),y:f.y+Math.floor(f.height*a.y),width:Math.ceil(f.width*a.width),height:Math.ceil(f.height*a.height)},C=E4e(I),y=E4e(f);if(s==="move"?(C.l+=g[0]-l[0],C.r+=g[0]-l[0],C.t+=g[1]-l[1],C.b+=g[1]-l[1]):s&&(s.indexOf("left")>=0?C.l+=g[0]-l[0]:s.indexOf("right")>=0&&(C.r+=g[0]-l[0]),s.indexOf("top")>=0?C.t+=g[1]-l[1]:s.indexOf("bottom")>=0&&(C.b+=g[1]-l[1])),C.l>C.r){let G=C.l;C.l=C.r,C.r=G}if(C.t>C.b){let G=C.t;C.t=C.b,C.b=G}let Q=40;C.l=Math.min(y.r-Q,Math.max(y.l,C.l)),C.r=Math.max(y.l+Q,Math.min(y.r,C.r)),C.t=Math.min(y.b-Q,Math.max(y.t,C.t)),C.b=Math.max(y.t+Q,Math.min(y.b,C.b)),I.x=C.l,I.y=C.t,I.width=C.r-C.l+1,I.height=C.b-C.t+1,A.current=I;let E=G=>{G.preventDefault(),m([G.pageX,G.pageY])},b=G=>{G.preventDefault();let N=G.touches[0];m([N.pageX,N.pageY])},x=G=>{G.preventDefault(),c(G.currentTarget.getAttribute("data-drag"));let N=G.touches[0],k=[N.pageX,N.pageY];u(k),m(k),window.addEventListener("touchend",R),window.addEventListener("touchmove",b)},S=G=>{G.preventDefault(),c(G.currentTarget.getAttribute("data-drag"));let N=[G.pageX,G.pageY];u(N),m(N),window.addEventListener("mouseup",w),window.addEventListener("mousemove",E)},w=()=>{window.removeEventListener("mouseup",w),window.removeEventListener("mousemove",E),T()},R=()=>{window.removeEventListener("touchend",R),window.removeEventListener("touchmove",b),T()};function T(){let G=A.current;i?.auto&&n?.behaviors.cropParams.next({...i,auto:!1}),n?.behaviors.relativeCrop.next({x:(G.x-f.x)/f.width,y:(G.y-f.y)/f.height,width:G.width/f.width,height:G.height/f.height}),c("");let N=[0,0];u(N),m(N)}let L=G=>{G.preventDefault(),G.stopPropagation()},F=4,v=`3px solid ${r}`,U="transparent";return(0,al.jsxs)(al.Fragment,{children:[(0,al.jsx)("div",{"data-drag":"move",style:{position:"absolute",left:I.x,top:I.y,width:I.width,height:I.height,border:v,cursor:"move"},onMouseDown:S,onTouchStart:x,draggable:!1,onContextMenu:L}),(0,al.jsx)("div",{"data-drag":"left",style:{position:"absolute",left:I.x-F,top:I.y+F,width:4*F,height:I.height-F,background:U,cursor:"w-resize"},onMouseDown:S,onTouchStart:x,draggable:!1,onContextMenu:L}),(0,al.jsx)("div",{"data-drag":"right",style:{position:"absolute",left:C.r-2*F,top:I.y,width:4*F,height:I.height-F,background:U,cursor:"w-resize"},onMouseDown:S,onTouchStart:x,draggable:!1,onContextMenu:L}),(0,al.jsx)("div",{"data-drag":"top",style:{position:"absolute",left:I.x-F,top:I.y-F,width:I.width+2*F,height:4*F,background:U,cursor:"n-resize"},onMouseDown:S,onTouchStart:x,draggable:!1,onContextMenu:L}),(0,al.jsx)("div",{"data-drag":"bottom",style:{position:"absolute",left:I.x-F,top:C.b-2*F,width:I.width+2*F,height:4*F,background:U,cursor:"n-resize"},onMouseDown:S,onTouchStart:x,draggable:!1,onContextMenu:L}),(0,al.jsx)("div",{"data-drag":"top, left",style:{position:"absolute",left:C.l-F,top:C.t-F,width:4*F,height:4*F,background:U,cursor:"nw-resize"},onMouseDown:S,onTouchStart:x,draggable:!1,onContextMenu:L}),(0,al.jsx)("div",{"data-drag":"bottom, right",style:{position:"absolute",left:C.r-2*F,top:C.b-2*F,width:4*F,height:4*F,background:U,cursor:"nw-resize"},onMouseDown:S,onTouchStart:x,draggable:!1,onContextMenu:L}),(0,al.jsx)("div",{"data-drag":"top, right",style:{position:"absolute",left:C.r-2*F,top:C.t-F,width:4*F,height:4*F,background:U,cursor:"ne-resize"},onMouseDown:S,onTouchStart:x,draggable:!1,onContextMenu:L}),(0,al.jsx)("div",{"data-drag":"bottom, left",style:{position:"absolute",left:C.l-F,top:C.b-2*F,width:4*F,height:4*F,background:U,cursor:"ne-resize"},onMouseDown:S,onTouchStart:x,draggable:!1,onContextMenu:L})]})}function E4e(e){return{l:e.x,t:e.y,r:e.x+e.width-1,b:e.y+e.height-1}}function x4e(e,t,r,n){let o=e/t,i=r/n;if(o<=i){let a=n*o;return{x:Math.round((r-a)/2),y:0,width:Math.round(a),height:n}}else{let a=r/o;return{x:0,y:Math.round((n-a)/2),width:r,height:Math.round(a)}}}var bJ=kt(Qa());var bi=kt(Qr()),EJ=class extends pn{constructor(){super(...arguments);this.state={showPreview:!0,isDisabled:!1};this.download=()=>{this.plugin.helpers.viewportScreenshot?.download(),this.props.close()};this.copy=async()=>{try{await this.plugin.helpers.viewportScreenshot?.copyToClipboard(),yt.Toast.Show(this.plugin,{message:"Copied to clipboard.",title:"Screenshot",timeoutMs:1500})}catch{return this.copyImg()}};this.copyImg=async()=>{let r=await this.plugin.helpers.viewportScreenshot?.getImageDataUri();this.setState({imageData:r})};this.open=r=>{!r.target.files||!r.target.files[0]||yt.State.Snapshots.OpenFile(this.plugin,{file:r.target.files[0]})}}componentDidMount(){this.subscribe(this.plugin.state.data.behaviors.isUpdating,r=>{this.setState({isDisabled:r})})}componentWillUnmount(){super.componentWillUnmount(),this.setState({imageData:void 0})}render(){let r=!!navigator.clipboard?.write;return(0,bi.jsxs)("div",{children:[this.state.showPreview&&(0,bi.jsxs)("div",{className:"msp-image-preview",children:[(0,bi.jsx)(b4e,{plugin:this.plugin}),(0,bi.jsx)(x3t,{plugin:this.plugin})]}),(0,bi.jsxs)("div",{className:"msp-flex-row",children:[!this.state.imageData&&(0,bi.jsx)(hr,{icon:BGe,onClick:r?this.copy:this.copyImg,disabled:this.state.isDisabled,children:"Copy"}),this.state.imageData&&(0,bi.jsx)(hr,{onClick:()=>this.setState({imageData:void 0}),disabled:this.state.isDisabled,children:"Clear"}),(0,bi.jsx)(hr,{icon:yB,onClick:this.download,disabled:this.state.isDisabled,children:"Download"})]}),this.state.imageData&&(0,bi.jsxs)("div",{className:"msp-row msp-copy-image-wrapper",children:[(0,bi.jsx)("div",{children:"Right click below + Copy Image"}),(0,bi.jsx)("img",{src:this.state.imageData,style:{width:"100%",height:32,display:"block"}})]}),(0,bi.jsx)(b3t,{plugin:this.plugin,isDisabled:this.state.isDisabled}),(0,bi.jsxs)(Gs,{header:"State",children:[(0,bi.jsx)(HT,{onAction:this.props.close}),(0,bi.jsx)(Gs,{header:"Save Options",initiallyExpanded:!1,noOffset:!0,children:(0,bi.jsx)(VT,{})})]}),(0,bi.jsx)(Gs,{header:"Camera",children:(0,bi.jsx)(E3t,{plugin:this.plugin})})]})}};function JT(e){return`${e?.map(t=>em(t,2)).join(", ")}`}function dS({title:e,children:t}){return(0,bi.jsxs)("div",{className:"msp-control-row",children:[(0,bi.jsx)("span",{className:"msp-control-row-label",children:e}),(0,bi.jsx)("div",{className:"msp-control-row-text",style:{fontSize:"0.85rem",overflow:"hidden",whiteSpace:"nowrap"},children:t})]})}function Q3t(e){if(e)return $He(e.target,e.position,e.mode,e.fov)}function E3t({plugin:e}){let[,t]=(0,bJ.useState)({});(0,bJ.useEffect)(()=>{let i=e.canvas3d?.didDraw.subscribe(()=>t({}));return()=>i?.unsubscribe()},[e]);let r=e.canvas3d?.camera.state,n=Q3t(r),o=B.sub(B(),r?.target??B.origin,r?.position??B.origin);return B.normalize(o,o),(0,bi.jsxs)("div",{children:[(0,bi.jsx)(dS,{title:"Position",children:JT(r?.position)}),(0,bi.jsx)(dS,{title:"FoV Norm. Pos.",children:JT(n)}),(0,bi.jsx)(dS,{title:"Target",children:JT(r?.target)}),(0,bi.jsx)(dS,{title:"Direction",children:JT(o)}),(0,bi.jsx)(dS,{title:"Up",children:JT(r?.up)}),(0,bi.jsx)(dS,{title:"Distance",children:em(B.distance(r?.position??B.origin,r?.target??B.origin),2)}),(0,bi.jsx)(dS,{title:"Radius",children:em(r?.radius??0,2)}),(0,bi.jsx)(hr,{onClick:()=>{if(!navigator.clipboard)return;let i=`{
|
|
position: [${n?.map(a=>em(a,2)).join(", ")}],
|
|
target: [${r?.target.map(a=>em(a,2)).join(", ")}],
|
|
up: [${r?.up.map(a=>em(a,2)).join(", ")}],
|
|
}`;navigator.clipboard.writeText(i)},style:{marginTop:1},title:"Copy JSON usable in MolViewSpec, uses FoV Normalized Position",children:"Copy MVS JSON"})]})}function b3t({plugin:e,isDisabled:t}){let r=e.helpers.viewportScreenshot,n=Tc(r?.behaviors.values);return r?(0,bi.jsx)(Mn,{params:r.params,values:n,onChangeValues:o=>r.behaviors.values.next(o),isDisabled:t}):null}function x3t({plugin:e}){let t=e.helpers.viewportScreenshot,r=Tc(t?.behaviors.cropParams);return Tc(t?.behaviors.relativeCrop),!t||!r?null:(0,bi.jsxs)("div",{style:{width:"100%",height:"24px",marginTop:"8px"},children:[(0,bi.jsx)(la,{icon:hGe,title:"Auto-crop",inline:!0,isSelected:r.auto,style:{background:"transparent",float:"left",width:"auto",height:"24px",lineHeight:"24px"},toggle:()=>t.toggleAutocrop(),label:"Auto-crop "+(r.auto?"On":"Off")}),!r.auto&&(0,bi.jsx)(hr,{icon:IGe,title:"Crop",style:{background:"transparent",float:"right",height:"24px",lineHeight:"24px",width:"24px",padding:"0"},onClick:()=>t.autocrop()}),!r.auto&&!t.isFullFrame&&(0,bi.jsx)(hr,{icon:CGe,title:"Reset Crop",style:{background:"transparent",float:"right",height:"24px",lineHeight:"24px",width:"24px",padding:"0"},onClick:()=>t.resetCrop()})]})}function S4e(e){return({values:t,update:r,apply:n})=>({params:typeof e.params=="function"?e.params:o=>e.params,getTarget:e.target,getValues:t,update(o,i){let a=e.target(i);return Wc(a,A=>r(o,A,i))},apply:n||(()=>{})})}var pS=kt(Qr()),xJ=class extends pn{componentDidMount(){this.plugin.canvas3d&&(this.subscribe(this.plugin.events.canvas3d.settingsUpdated,()=>this.forceUpdate()),this.subscribe(this.plugin.canvas3d.camera.stateChanged.pipe(jc(500,void 0,{leading:!0,trailing:!0})),t=>{(t.radiusMax!==void 0||t.radius!==void 0)&&this.forceUpdate()}))}render(){return this.plugin.canvas3d?(0,pS.jsxs)(pS.Fragment,{children:[(0,pS.jsx)(lY,{mapping:D3t}),(0,pS.jsx)(uS,{})]}):null}},zT={sequence:"Sequence",log:"Log",left:"Left Panel",right:"Right Panel"},S3t={animate:ds.trackball.params.animate,camera:ds.camera,background:h.Group({color:h.Color(16579577,{label:"Background",description:"Custom background color"}),transparent:h.Boolean(!1),style:ds.postprocessing.params.background},{pivot:"color"}),lighting:h.Group({occlusion:ds.postprocessing.params.occlusion,shadow:ds.postprocessing.params.shadow,outline:ds.postprocessing.params.outline,dof:ds.postprocessing.params.dof,fog:ds.cameraFog},{isFlat:!0}),clipping:h.Group({...ds.cameraClipping.params},{pivot:"radius"}),layout:h.MultiSelect([],h.objectToOptions(zT)),advanced:h.Group({illumination:ds.illumination,multiSample:ds.multiSample,hiZ:ds.hiZ,sharpening:ds.postprocessing.params.sharpening,bloom:ds.postprocessing.params.bloom,resolutionMode:aB.Params.resolutionMode,pixelScale:aB.Params.pixelScale,transparency:aB.Params.transparency})},D3t=S4e({params:e=>{let t=h.clone(S3t),r=e.spec.components?.controls;if(r){let o=[];r.top!=="none"&&o.push(["sequence",zT.sequence]),r.bottom!=="none"&&o.push(["log",zT.log]),r.left!=="none"&&o.push(["left",zT.left]),r.right!=="none"&&o.push(["right",zT.right]),t.layout.options=o}let n=e.config.get(jt.Background.Styles)||[];return n.length>0&&Object.assign(t.background.params.style,{presets:ii(n),isFlat:!1}),t},target(e){let t=e.spec.components?.controls,r=e.layout.state.regionState,n=[];r.top!=="hidden"&&(!t||t.top!=="none")&&n.push("sequence"),r.bottom!=="hidden"&&(!t||t.bottom!=="none")&&n.push("log"),r.left!=="hidden"&&(!t||t.left!=="none")&&n.push("left"),r.right!=="hidden"&&(!t||t.right!=="none")&&n.push("right");let{pixelScale:o,transparency:i,resolutionMode:a}=e.canvas3dContext?.props;return{canvas:e.canvas3d?.props,layout:n,resolutionMode:a,pixelScale:o,transparency:i}}})({values(e,t){let{canvas:r}=e,n=r.renderer;return{layout:e.layout,animate:r.trackball.animate,camera:r.camera,background:{color:n.backgroundColor,transparent:r.transparentBackground,style:r.postprocessing.background},lighting:{occlusion:r.postprocessing.occlusion,shadow:r.postprocessing.shadow,outline:r.postprocessing.outline,dof:r.postprocessing.dof,fog:r.cameraFog},clipping:{...r.cameraClipping},advanced:{illumination:r.illumination,multiSample:r.multiSample,hiZ:r.hiZ,sharpening:r.postprocessing.sharpening,bloom:r.postprocessing.bloom,resolutionMode:e.resolutionMode,pixelScale:e.pixelScale,transparency:e.transparency}}},update(e,t){let r=t.canvas;r.trackball.animate=e.animate,r.camera=e.camera,r.transparentBackground=e.background.transparent,r.renderer.backgroundColor=e.background.color,r.postprocessing.occlusion=e.lighting.occlusion,r.postprocessing.shadow=e.lighting.shadow,r.postprocessing.outline=e.lighting.outline,r.postprocessing.background=e.background.style,r.cameraFog=e.lighting.fog,r.cameraClipping={radius:e.clipping.radius,far:e.clipping.far,minNear:e.clipping.minNear},r.illumination=e.advanced.illumination,r.multiSample=e.advanced.multiSample,r.hiZ=e.advanced.hiZ,r.postprocessing.sharpening=e.advanced.sharpening,r.postprocessing.bloom=e.advanced.bloom,r.postprocessing.dof=e.lighting.dof,t.layout=e.layout,t.resolutionMode=e.advanced.resolutionMode,t.pixelScale=e.advanced.pixelScale,t.transparency=e.advanced.transparency},async apply(e,t){await yt.Canvas3D.SetSettings(t,{settings:e.canvas});let r=e.layout.indexOf("left")<0,n=Wc(t.layout.state,o=>{o.regionState.top=e.layout.indexOf("sequence")>=0?"full":"hidden",o.regionState.bottom=e.layout.indexOf("log")>=0?"full":"hidden",o.regionState.left=r?"hidden":t.behaviors.layout.leftPanelTabName.value==="none"?"collapsed":"full",o.regionState.right=e.layout.indexOf("right")>=0?"full":"hidden"});await yt.Layout.Update(t,{state:n}),r&&yt.State.SetCurrentObject(t,{state:t.state.data,ref:en.RootRef}),t.canvas3dContext?.setProps({resolutionMode:e.resolutionMode,pixelScale:e.pixelScale,transparency:e.transparency})}});var xi=kt(Qr()),SJ=class extends pn{constructor(){super(...arguments);this.allCollapsedState={isSettingsExpanded:!1,isScreenshotExpanded:!1};this.state={...this.allCollapsedState,isCameraResetEnabled:!0};this.resetCamera=()=>{yt.Camera.Reset(this.plugin,{})};this.toggleSettingsExpanded=this.toggle("isSettingsExpanded");this.toggleScreenshotExpanded=this.toggle("isScreenshotExpanded");this.toggleControls=()=>{yt.Layout.Update(this.plugin,{state:{showControls:!this.plugin.layout.state.showControls}})};this.toggleExpanded=()=>{yt.Layout.Update(this.plugin,{state:{isExpanded:!this.plugin.layout.state.isExpanded,expandToFullscreen:!1}})};this.toggleFullscreen=()=>{yt.Layout.Update(this.plugin,{state:{expandToFullscreen:!this.plugin.layout.state.expandToFullscreen}})};this.toggleXR=()=>{this.plugin.canvas3d&&(this.plugin.canvas3d.xr.isPresenting.value?this.plugin.canvas3d.xr.end():this.plugin.canvas3d.xr.request())};this.toggleIllumination=()=>{this.plugin.canvas3d&&yt.Canvas3D.SetSettings(this.plugin,{settings:{illumination:{...this.plugin.canvas3d.props.illumination,enabled:!this.plugin.canvas3d.props.illumination.enabled}}})};this.setSettings=r=>{yt.Canvas3D.SetSettings(this.plugin,{settings:{[r.name]:r.value}})};this.setLayout=r=>{yt.Layout.Update(this.plugin,{state:{[r.name]:r.value}})};this.screenshot=()=>{this.plugin.helpers.viewportScreenshot?.download()};this.enableCameraReset=r=>{this.setState(n=>({...n,isCameraResetEnabled:r}))}}toggle(r){return n=>{this.setState(o=>({...o,...this.allCollapsedState,[r]:!this.state[r]})),n?.currentTarget.blur()}}componentDidMount(){this.subscribe(this.plugin.events.canvas3d.settingsUpdated,()=>this.forceUpdate()),this.subscribe(this.plugin.layout.events.updated,()=>this.forceUpdate()),this.plugin.canvas3d&&(this.subscribe(this.plugin.canvas3d.camera.stateChanged.pipe(jc(500,void 0,{leading:!0,trailing:!0})),r=>this.enableCameraReset(r.radius!==0&&r.radiusMax!==0)),this.subscribe(this.plugin.canvas3d.xr.isSupported,()=>this.forceUpdate()),this.subscribe(this.plugin.canvas3d.xr.isPresenting,()=>this.forceUpdate()))}icon(r,n,o,i=!0,a=!1){return(0,xi.jsx)(Gr,{svg:r,toggleState:i,onClick:n,title:o,style:{background:"transparent"},disabled:a})}render(){let r=this.plugin.config.get(jt.Viewport.ShowXR),n=!!this.plugin.canvas3d?.xr.isSupported.value,o=!!this.plugin.canvas3d?.xr.isPresenting.value,i=r==="always"||r==="auto"&&n,a=n?o?"Exit XR":"Enter XR":"Augmented/Virtual Reality unavailable",A=this.plugin.layout.state;return(0,xi.jsxs)("div",{className:"msp-viewport-controls",children:[(0,xi.jsxs)("div",{className:"msp-viewport-controls-buttons",children:[this.plugin.config.get(jt.Viewport.ShowReset)&&(0,xi.jsxs)("div",{className:"msp-hover-box-wrapper",children:[(0,xi.jsx)("div",{className:"msp-semi-transparent-background"}),this.icon(cGe,this.resetCamera,"Reset Zoom"),(0,xi.jsx)("div",{className:"msp-hover-box-body",children:(0,xi.jsxs)("div",{className:"msp-flex-column",children:[(0,xi.jsx)("div",{className:"msp-flex-row",children:(0,xi.jsx)(hr,{onClick:()=>this.resetCamera(),disabled:!this.state.isCameraResetEnabled,title:"Set camera zoom to fit the visible scene into view",children:"Reset Zoom"})}),(0,xi.jsx)("div",{className:"msp-flex-row",children:(0,xi.jsx)(hr,{onClick:()=>yt.Camera.OrientAxes(this.plugin),disabled:!this.state.isCameraResetEnabled,title:"Align principal component axes of the loaded structures to the screen axes (\u201Clay flat\u201D)",children:"Orient Axes"})}),(0,xi.jsx)("div",{className:"msp-flex-row",children:(0,xi.jsx)(hr,{onClick:()=>yt.Camera.ResetAxes(this.plugin),disabled:!this.state.isCameraResetEnabled,title:"Align Cartesian axes to the screen axes",children:"Reset Axes"})})]})}),(0,xi.jsx)("div",{className:"msp-hover-box-spacer"})]}),this.plugin.config.get(jt.Viewport.ShowScreenshotControls)&&(0,xi.jsxs)("div",{children:[(0,xi.jsx)("div",{className:"msp-semi-transparent-background"}),this.icon(z_,this.toggleScreenshotExpanded,"Screenshot / State Snapshot",this.state.isScreenshotExpanded)]}),(0,xi.jsxs)("div",{children:[(0,xi.jsx)("div",{className:"msp-semi-transparent-background"}),this.plugin.config.get(jt.Viewport.ShowControls)&&this.icon(uGe,this.toggleControls,"Toggle Controls Panel",this.plugin.layout.state.showControls),this.plugin.config.get(jt.Viewport.ShowExpand)&&(0,xi.jsxs)("div",{className:"msp-hover-box-wrapper",children:[this.icon(QGe,this.toggleExpanded,"Toggle Expanded Viewport",this.plugin.layout.state.isExpanded),(0,xi.jsx)("div",{className:"msp-hover-box-body",children:(0,xi.jsx)("div",{className:"msp-flex-column",children:(0,xi.jsx)("div",{className:"msp-flex-row",children:(0,xi.jsx)(hr,{onClick:this.toggleFullscreen,children:A.expandToFullscreen?"Exit Fullscreen":"Fullscreen"})})})}),(0,xi.jsx)("div",{className:"msp-hover-box-spacer"})]}),!this.plugin.config.get(jt.Viewport.ShowExpand)&&this.plugin.config.get(jt.Viewport.ShowToggleFullscreen)&&this.icon(lGe,this.toggleFullscreen,"Toggle Full Screen",this.plugin.layout.state.expandToFullscreen),this.plugin.config.get(jt.Viewport.ShowSettings)&&this.icon(tl,this.toggleSettingsExpanded,"Settings / Controls Info",this.state.isSettingsExpanded),this.plugin.config.get(jt.Viewport.ShowIllumination)&&this.icon(xGe,this.toggleIllumination,"Illumination",this.plugin.canvas3d?.props.illumination.enabled||!1),i&&this.icon(SGe,this.toggleXR,a,o,!n)]}),this.plugin.config.get(jt.Viewport.ShowSelectionMode)&&(0,xi.jsxs)("div",{children:[(0,xi.jsx)("div",{className:"msp-semi-transparent-background"}),(0,xi.jsx)(cb,{})]})]}),this.state.isScreenshotExpanded&&(0,xi.jsx)("div",{className:"msp-viewport-controls-panel",children:(0,xi.jsx)(Kl,{header:"Screenshot / State",title:"Click to close.",initialExpanded:!0,hideExpander:!0,hideOffset:!0,onHeaderClick:this.toggleScreenshotExpanded,topRightIcon:Vg,noTopMargin:!0,childrenClassName:"msp-viewport-controls-panel-controls",children:(0,xi.jsx)(EJ,{close:this.toggleScreenshotExpanded})})}),this.state.isSettingsExpanded&&(0,xi.jsx)("div",{className:"msp-viewport-controls-panel",children:(0,xi.jsx)(Kl,{header:"Settings / Controls Info",title:"Click to close.",initialExpanded:!0,hideExpander:!0,hideOffset:!0,onHeaderClick:this.toggleSettingsExpanded,topRightIcon:Vg,noTopMargin:!0,childrenClassName:"msp-viewport-controls-panel-controls",children:(0,xi.jsx)(xJ,{})})})]})}},v3t=()=>(0,xi.jsx)("a",{className:"msp-logo",href:"https://molstar.org",target:"_blank"}),D4e=()=>(0,xi.jsx)(yJ,{logo:v3t});var jo=kt(Qr());function v4e({plugin:e}){return e.isInitialized?(0,jo.jsx)(Iu.Provider,{value:e,children:(0,jo.jsx)(DJ,{})}):(0,jo.jsx)(F3t,{plugin:e})}function F3t({plugin:e}){let[t,r]=fS.useState({kind:"pending"});return fS.useEffect(()=>{r({kind:"pending"});let n=!0;return e.initialized.then(()=>{n&&r({kind:"initialized"})}).catch(o=>{n&&r({kind:"error",message:`${o}`})}),()=>{n=!1}},[e]),t.kind==="pending"?null:t.kind==="error"?(0,jo.jsx)("div",{className:"msp-plugin",children:(0,jo.jsxs)("div",{className:"msp-plugin-init-error",children:["Initialization error: ",t.message]})}):(0,jo.jsx)(Iu.Provider,{value:e,children:(0,jo.jsx)(DJ,{})})}var DJ=class extends pn{constructor(){super(...arguments);this.onDrop=r=>{r.preventDefault();let n=[];if(r.dataTransfer.items)for(let i=0;i<r.dataTransfer.items.length;i++){if(r.dataTransfer.items[i].kind!=="file")continue;let a=r.dataTransfer.items[i].getAsFile();a&&n.push(a)}else for(let i=0;i<r.dataTransfer.files.length;i++){let a=r.dataTransfer.files[i];a&&n.push(a)}let o=n.filter(i=>{let a=i.name.toLowerCase();return a.endsWith(".molx")||a.endsWith(".molj")});o.length>0?yt.State.Snapshots.OpenFile(this.plugin,{file:o[0]}):this.plugin.runTask(this.plugin.state.data.applyAction(Qx,{files:n.map(i=>gn.File(i)),format:{name:"auto",params:{}},visuals:!0}))};this.onDragOver=r=>{r.preventDefault()};this.showDragOverlay=new _A(!1);this.onDragEnter=r=>{let n=!1;if(r.dataTransfer.items&&r.dataTransfer.items.length>0){for(let o=0;o<r.dataTransfer.items.length;o++)if(r.dataTransfer.items[o].kind==="file"){n=!0;break}}else for(let o=0;o<r.dataTransfer.types.length;o++)if(r.dataTransfer.types[o]==="Files"){n=!0;break}n&&this.showDragOverlay.next(!0)}}componentDidMount(){this.subscribe(this.plugin.layout.events.updated,()=>this.forceUpdate())}region(r,n){return(0,jo.jsx)("div",{className:`msp-layout-region msp-layout-${r}`,children:(0,jo.jsx)("div",{className:"msp-layout-static",children:n?(0,jo.jsx)(n,{}):null})})}get layoutVisibilityClassName(){let r=this.plugin.layout.state,n=this.plugin.spec.components?.controls??{},o=[];return(n.top==="none"||!r.showControls||r.regionState.top==="hidden")&&o.push("msp-layout-hide-top"),n.left==="none"||!r.showControls||r.regionState.left==="hidden"?o.push("msp-layout-hide-left"):r.regionState.left==="collapsed"&&o.push("msp-layout-collapse-left"),(n.right==="none"||!r.showControls||r.regionState.right==="hidden")&&o.push("msp-layout-hide-right"),(n.bottom==="none"||!r.showControls||r.regionState.bottom==="hidden")&&o.push("msp-layout-hide-bottom"),o.join(" ")}get layoutClassName(){let r=this.plugin.layout.state,n=["msp-plugin-content"];return r.isExpanded?n.push("msp-layout-expanded"):n.push("msp-layout-standard",`msp-layout-standard-${r.controlsDisplay}`),n.join(" ")}render(){let r=this.plugin.layout.state,n=this.plugin.spec.components?.controls||{},o=this.plugin.spec.components?.viewport?.view||oae,i=this.plugin.spec.components?.sequenceViewer?.view||IJ;return(0,jo.jsx)("div",{className:"msp-plugin",children:(0,jo.jsxs)("div",{className:this.layoutClassName,onDragEnter:this.onDragEnter,children:[(0,jo.jsxs)("div",{className:this.layoutVisibilityClassName,children:[this.region("main",o),r.showControls&&n.top!=="none"&&this.region("top",n.top||i),r.showControls&&n.left!=="none"&&this.region("left",n.left||uJ),r.showControls&&n.right!=="none"&&this.region("right",n.right||nae),r.showControls&&n.bottom!=="none"&&this.region("bottom",n.bottom||iae)]}),!this.plugin.spec.components?.hideTaskOverlay&&(0,jo.jsx)(h4e,{}),!this.plugin.spec.components?.disableDragOverlay&&(0,jo.jsx)(R3t,{plugin:this.plugin,showDragOverlay:this.showDragOverlay})]})})}};function w3t(e,t,r){e.preventDefault(),e.stopPropagation(),r.next(!1);let n=[];if(e.dataTransfer.items)for(let o=0;o<e.dataTransfer.items.length;o++){if(e.dataTransfer.items[o].kind!=="file")continue;let i=e.dataTransfer.items[o].getAsFile();i&&n.push(i)}else for(let o=0;o<e.dataTransfer.files.length;o++){let i=e.dataTransfer.files[o];i&&n.push(i)}t.managers.dragAndDrop.handle(n)}function R3t({plugin:e,showDragOverlay:t}){let r=Tc(t),n=o=>{o.dataTransfer.dropEffect="copy",o.preventDefault(),o.stopPropagation()};return(0,jo.jsx)("div",{className:"msp-drag-drop-overlay",style:{display:r?"flex":"none"},onDragEnter:n,onDragOver:n,onDragLeave:()=>t.next(!1),onDrop:o=>w3t(o,e,t),children:"Load File(s)"})}var nae=class extends pn{render(){let t=this.plugin.spec.components?.structureTools||sJ;return(0,jo.jsx)("div",{className:"msp-scrollable-container",children:(0,jo.jsx)(t,{})})}},oae=class extends pn{render(){let t=this.plugin.spec.components?.viewport?.controls||SJ,r=this.plugin.spec.components?.selectionTools?.controls||aJ,n=this.plugin.spec.components?.viewport?.snapshotDescription||c4e;return(0,jo.jsxs)(jo.Fragment,{children:[(0,jo.jsx)(D4e,{}),(0,jo.jsxs)("div",{className:"msp-viewport-top-left-controls",children:[(0,jo.jsx)(iJ,{}),(0,jo.jsx)(nJ,{}),(0,jo.jsx)(oJ,{}),(0,jo.jsx)(n,{})]}),(0,jo.jsx)(r,{}),(0,jo.jsx)(t,{}),(0,jo.jsx)(I4e,{}),(0,jo.jsxs)("div",{className:"msp-highlight-toast-wrapper",children:[(0,jo.jsx)(AJ,{}),(0,jo.jsx)(hJ,{})]})]})}},iae=class extends pn{constructor(){super(...arguments);this.wrapper=fS.createRef();this.state={entries:this.plugin.log.entries}}componentDidMount(){this.subscribe(this.plugin.events.log,()=>this.setState({entries:this.plugin.log.entries}))}componentDidUpdate(){this.scrollToBottom()}scrollToBottom(){let r=this.wrapper.current;r&&(r.scrollTop=r.scrollHeight-r.clientHeight-1)}render(){let n=this.state.entries,o=n.size,i=[];for(let a=Math.max(0,o-10),A=0;a<o;a++){let s=n.get(a);i.push((0,jo.jsxs)("li",{children:[(0,jo.jsx)("div",{className:"msp-log-entry-badge msp-log-entry-"+s.type}),(0,jo.jsx)("div",{className:"msp-log-timestamp",children:Ice(s.timestamp)}),(0,jo.jsx)("div",{className:"msp-log-entry",children:s.message})]},A++))}return(0,jo.jsx)("div",{ref:this.wrapper,className:"msp-log",style:{position:"absolute",top:"0",right:"0",bottom:"0",left:"0",overflowY:"auto"},children:(0,jo.jsx)("ul",{className:"msp-list-unstyled",children:i})})}};async function w4e(e){let{spec:t,target:r,onBeforeUIRender:n,render:o}=e,i=new UE(t||NE());await i.init(),n&&await n(i),o((0,F4e.createElement)(v4e,{plugin:i}),r);try{await i.canvas3dInitialized}catch{}return i}var qze=kt(Zze());function $ze(e,t){(0,qze.createRoot)(t).render(e)}typeof window<"u"&&(function(){window.console=window.console||{};let e=window.console,t,r,n={},o=function(){},i="memory".split(","),a="assert,clear,count,debug,dir,dirxml,error,exception,group,groupCollapsed,groupEnd,info,log,markTimeline,profile,profiles,profileEnd,show,table,time,timeEnd,timeline,timelineEnd,timeStamp,trace,warn".split(",");for(;t=i.pop();)e[t]||(e[t]=n);for(;r=a.pop();)e[r]||(e[r]=o)})();typeof window.HTMLCanvasElement<"u"&&!window.HTMLCanvasElement.prototype.toBlob&&Object.defineProperty(window.HTMLCanvasElement.prototype,"toBlob",{value:function(e,t,r){let n=window.atob(this.toDataURL(t,r).split(",")[1]),o=n.length,i=o>>2,a=new Uint8Array(o),A=new Uint32Array(a.buffer,0,i),s=0;for(let l=0;l<i;l++)A[l]=n.charCodeAt(s++)|n.charCodeAt(s++)<<8|n.charCodeAt(s++)<<16|n.charCodeAt(s++)<<24;let c=o&3;for(;c--;)a[s]=n.charCodeAt(s++);e(new window.Blob([a],{type:t||"image/png"}))}});Math.cbrt=Math.cbrt||function(e){let t=Math.pow(Math.abs(e),.3333333333333333);return e<0?-t:t};Math.sign||(Math.sign=function(e){return e=+e,e===0||isNaN(e)?Number(e):e>0?1:-1});Number.isInteger||(Number.isInteger=function(t){return typeof t=="number"&&isFinite(t)&&t>-9007199254740992&&t<9007199254740992&&Math.floor(t)===t});Number.isNaN||(Number.isNaN=function(t){return t!==t});Object.assign||Object.defineProperty(Object,"assign",{enumerable:!1,configurable:!0,writable:!0,value:function(e){"use strict";if(e==null)throw new TypeError("Cannot convert first argument to object");let t=Object(e),r=!1,n;for(let o=1;o<arguments.length;o++){let i=arguments[o];if(i==null)continue;let a=Object.keys(Object(i));for(let A=0,s=a.length;A<s;A++){let c=a[A];try{let l=Object.getOwnPropertyDescriptor(i,c);l!==void 0&&l.enumerable&&(t[c]=i[c])}catch(l){r||(r=!0,n=l)}}if(r)throw n}return t}});String.prototype.startsWith||(function(){"use strict";let e=(function(){let n;try{let o={},i=Object.defineProperty;n=i(o,o,o)&&i}catch{}return n})(),t={}.toString,r=function(n){if(this===null)throw TypeError();let o=String(this);if(n&&t.call(n)==="[object RegExp]")throw TypeError();let i=o.length,a=String(n),A=a.length,s=arguments.length>1?arguments[1]:void 0,c=s?Number(s):0;Number.isNaN(c)&&(c=0);let l=Math.min(Math.max(c,0),i);if(A+l>i)return!1;let u=-1;for(;++u<A;)if(o.charCodeAt(l+u)!==a.charCodeAt(u))return!1;return!0};e?e(String.prototype,"startsWith",{value:r,configurable:!0,writable:!0}):String.prototype.startsWith=r})();String.prototype.endsWith||(String.prototype.endsWith=function(e,t){let r=this.toString();(typeof t!="number"||!isFinite(t)||Math.floor(t)!==t||t>r.length)&&(t=r.length),t-=e.length;let n=r.indexOf(e,t);return n!==-1&&n===t});String.prototype.repeat||(String.prototype.repeat=function(e){"use strict";if(this===null)throw new TypeError("can't convert "+this+" to object");let t=""+this;if(e=+e,Number.isNaN(e)&&(e=0),e<0)throw new RangeError("repeat count must be non-negative");if(e===1/0)throw new RangeError("repeat count must be less than infinity");if(e=Math.floor(e),t.length===0||e===0)return"";if(t.length*e>=1<<28)throw new RangeError("repeat count must not overflow maximum string size");let r="";for(;(e&1)===1&&(r+=t),e>>>=1,e!==0;)t+=t;return r});String.prototype.includes||(String.prototype.includes=function(e,t){"use strict";return typeof t!="number"&&(t=0),t+e.length>this.length?!1:this.indexOf(e,t)!==-1});Array.prototype.includes||(Array.prototype.includes=function(e){"use strict";if(this==null)throw new TypeError("Array.prototype.includes called on null or undefined");let t=Object(this),r=parseInt(t.length,10)||0;if(r===0)return!1;let n=parseInt(arguments[1],10)||0,o;n>=0?o=n:(o=r+n,o<0&&(o=0));let i;for(;o<r;){if(i=t[o],e===i||Number.isNaN(e)&&Number.isNaN(i))return!0;o++}return!1});Array.from||(Array.from=(function(){let e=Object.prototype.toString,t=function(i){return typeof i=="function"||e.call(i)==="[object Function]"},r=function(i){let a=Number(i);return isNaN(a)?0:a===0||!isFinite(a)?a:(a>0?1:-1)*Math.floor(Math.abs(a))},n=Math.pow(2,53)-1,o=function(i){let a=r(i);return Math.min(Math.max(a,0),n)};return function(a){let A=this,s=Object(a);if(a==null)throw new TypeError("Array.from requires an array-like object - not null or undefined");let c=arguments.length>1?arguments[1]:void 0,l;if(typeof c<"u"){if(!t(c))throw new TypeError("Array.from: when provided, the second argument must be a function");arguments.length>2&&(l=arguments[2])}let u=o(s.length),g=t(A)?Object(new A(u)):new Array(u),m=0,p;for(;m<u;)p=s[m],c?g[m]=typeof l>"u"?c(p,m):c.call(l,p,m):g[m]=p,m+=1;return g.length=u,g}})());typeof window<"u"&&(function(){let e=0,t=["ms","moz","webkit","o"];for(let r=0;r<t.length&&!window.requestAnimationFrame;++r)window.requestAnimationFrame=window[t[r]+"RequestAnimationFrame"],window.cancelAnimationFrame=window[t[r]+"CancelAnimationFrame"]||window[t[r]+"CancelRequestAnimationFrame"];window.requestAnimationFrame||(window.requestAnimationFrame=function(r){let n=new Date().getTime(),o=Math.max(0,16-(n-e)),i=window.setTimeout(function(){let a=n+o;r(a)},o);return e=n+o,i}),window.cancelAnimationFrame||(window.cancelAnimationFrame=function(r){clearTimeout(r)})})();Function.prototype.name===void 0&&Object.defineProperty!==void 0&&Object.defineProperty(Function.prototype,"name",{get:function(){return this.toString().match(/^\s*function\s*(\S*)\s*\(/)[1]}});typeof window<"u"&&(window.performance===void 0&&(window.performance={}),window.performance.now===void 0&&(function(){let e=Date.now();window.performance.now=function(){return Date.now()-e}})());Object.defineProperty!==void 0&&(Number.MAX_SAFE_INTEGER===void 0&&Object.defineProperty(Number,"MAX_SAFE_INTEGER",{enumerable:!1,configurable:!1,writable:!1,value:Math.pow(2,53)-1}),Number.MIN_SAFE_INTEGER===void 0&&Object.defineProperty(Number,"MIN_SAFE_INTEGER",{enumerable:!1,configurable:!1,writable:!1,value:-(Math.pow(2,53)-1)}));Object.entries||(Object.entries=function(e){let t=Object.keys(e),r=t.length,n=new Array(r);for(;r--;)n[r]=[t[r],e[t[r]]];return n});Object.hasOwn||(Object.hasOwn=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)});Array.prototype.find||Object.defineProperty(Array.prototype,"find",{value:function(e){if(this==null)throw TypeError('"this" is null or not defined');let t=Object(this),r=t.length>>>0;if(typeof e!="function")throw TypeError("predicate must be a function");let n=arguments[1],o=0;for(;o<r;){let i=t[o];if(e.call(n,i,o,t))return i;o++}},configurable:!0,writable:!0});Array.prototype.fill||Object.defineProperty(Array.prototype,"fill",{value:function(e){if(this==null)throw new TypeError("this is null or not defined");let t=Object(this),r=t.length>>>0,o=arguments[1]>>0,i=o<0?Math.max(r+o,0):Math.min(o,r),a=arguments[2],A=a===void 0?r:a>>0,s=A<0?Math.max(r+A,0):Math.min(A,r);for(;i<s;)t[i]=e,i++;return t}});Array.prototype.copyWithin||Object.defineProperty(Array.prototype,"copyWithin",{value:function(e,t){if(this==null)throw new TypeError("this is null or not defined");let r=Object(this),n=r.length>>>0,o=e>>0,i=o<0?Math.max(n+o,0):Math.min(o,n),a=t>>0,A=a<0?Math.max(n+a,0):Math.min(a,n),s=arguments[2],c=s===void 0?n:s>>0,l=c<0?Math.max(n+c,0):Math.min(c,n),u=Math.min(l-A,n-i),g=1;for(A<i&&i<A+u&&(g=-1,A+=u-1,i+=u-1);u>0;)A in r?r[i]=r[A]:delete r[i],A+=g,i+=g,u--;return r},configurable:!0,writable:!0});Int8Array.prototype.copyWithin||Object.defineProperty(Int8Array.prototype,"copyWithin",{value:Array.prototype.copyWithin});Int16Array.prototype.copyWithin||Object.defineProperty(Int16Array.prototype,"copyWithin",{value:Array.prototype.copyWithin});Int32Array.prototype.copyWithin||Object.defineProperty(Int32Array.prototype,"copyWithin",{value:Array.prototype.copyWithin});Uint8Array.prototype.copyWithin||Object.defineProperty(Uint8Array.prototype,"copyWithin",{value:Array.prototype.copyWithin});Uint16Array.prototype.copyWithin||Object.defineProperty(Uint16Array.prototype,"copyWithin",{value:Array.prototype.copyWithin});Uint32Array.prototype.copyWithin||Object.defineProperty(Uint32Array.prototype,"copyWithin",{value:Array.prototype.copyWithin});Float32Array.prototype.copyWithin||Object.defineProperty(Float32Array.prototype,"copyWithin",{value:Array.prototype.copyWithin});Float64Array.prototype.copyWithin||Object.defineProperty(Float64Array.prototype,"copyWithin",{value:Array.prototype.copyWithin});var TYt=[["g3d",bMe]],Ow={customFormats:TYt,extensions:Du(QT),disabledExtensions:[],layoutIsExpanded:!0,layoutShowControls:!0,layoutShowRemoteState:!0,layoutControlsDisplay:"reactive",layoutShowSequence:!0,layoutShowLog:!0,layoutShowLeftPanel:!0,collapseLeftPanel:!1,collapseRightPanel:!1,disableAntialiasing:jt.General.DisableAntialiasing.defaultValue,pixelScale:jt.General.PixelScale.defaultValue,pickScale:jt.General.PickScale.defaultValue,transparency:jt.General.Transparency.defaultValue,preferWebgl1:jt.General.PreferWebGl1.defaultValue,allowMajorPerformanceCaveat:jt.General.AllowMajorPerformanceCaveat.defaultValue,powerPreference:jt.General.PowerPreference.defaultValue,resolutionMode:jt.General.ResolutionMode.defaultValue,illumination:!1,viewportShowReset:jt.Viewport.ShowReset.defaultValue,viewportShowScreenshotControls:jt.Viewport.ShowScreenshotControls.defaultValue,viewportShowControls:jt.Viewport.ShowControls.defaultValue,viewportShowExpand:jt.Viewport.ShowExpand.defaultValue,viewportShowToggleFullscreen:jt.Viewport.ShowToggleFullscreen.defaultValue,viewportShowSettings:jt.Viewport.ShowSettings.defaultValue,viewportShowSelectionMode:jt.Viewport.ShowSelectionMode.defaultValue,viewportShowAnimation:jt.Viewport.ShowAnimation.defaultValue,viewportShowTrajectoryControls:jt.Viewport.ShowTrajectoryControls.defaultValue,viewportFocusBehavior:"default",viewportBackgroundColor:void 0,pluginStateServer:jt.State.DefaultServer.defaultValue,volumeStreamingServer:jt.VolumeStreaming.DefaultServer.defaultValue,volumeStreamingDisabled:!jt.VolumeStreaming.Enabled.defaultValue,pdbProvider:jt.Download.DefaultPdbProvider.defaultValue,emdbProvider:jt.Download.DefaultEmdbProvider.defaultValue,saccharideCompIdMapType:"default",rcsbAssemblySymmetryDefaultServerType:Yg.DefaultServerType.defaultValue,rcsbAssemblySymmetryDefaultServerUrl:Yg.DefaultServerUrl.defaultValue,rcsbAssemblySymmetryApplyColors:Yg.ApplyColors.defaultValue,config:[]};var MP={id:"preset-structure-representation-viewer-auto",display:{name:"Automatic (w/ Annotation)",group:"Annotation",description:"Show standard automatic representation but colored by quality assessment (if available in the model)."},isApplicable(e){return!!e.data.models.some(t=>ks.isApplicable(t,"pLDDT"))||!!e.data.models.some(t=>ks.isApplicable(t,"qmean"))},params:()=>ri.CommonParams,async apply(e,t,r){let n=Pn.resolveAndCheck(r.state.data,e),o=n?.obj?.data;return!n||!o?{}:o.models.some(i=>ks.isApplicable(i,"pLDDT"))?await ZY.apply(e,t,r):o.models.some(i=>ks.isApplicable(i,"qmean"))?await qY.apply(e,t,r):o.models.some(i=>nl.isApplicable(i))?await Z1.apply(e,t,r):await ni.auto.apply(e,t,r)}};function eKe(e={}){let t={};for(let A of Object.keys(e))e[A]!==void 0&&(t[A]=e[A]);let r={...Ow,...t},n=NE(),o=new Set(r.disabledExtensions??[]),i=n.behaviors;return r.viewportFocusBehavior==="disabled"?i=i.filter(A=>A.transformer!==Bs.Camera.FocusLoci&&A.transformer!==Bs.Representation.FocusLoci):r.viewportFocusBehavior==="secondary-zoom"&&(i=i.filter(A=>A.transformer!==Bs.Camera.FocusLoci&&A.transformer!==Bs.Representation.FocusLoci),i.push(Lr.Behavior(Bs.Camera.FocusLoci,{bindings:$Z}))),{canvas3d:{...n.canvas3d},actions:n.actions,behaviors:[...i,...r.extensions.filter(A=>!o.has(A)).map(A=>QT[A])],animations:[...n.animations||[]],customParamEditors:n.customParamEditors,customFormats:r?.customFormats,layout:{initial:{isExpanded:r.layoutIsExpanded,showControls:r.layoutShowControls,controlsDisplay:r.layoutControlsDisplay,regionState:{bottom:"full",left:r.collapseLeftPanel?"collapsed":"full",right:r.collapseRightPanel?"hidden":"full",top:"full"}}},components:{...n.components,controls:{...n.components?.controls,top:r.layoutShowSequence?void 0:"none",bottom:r.layoutShowLog?void 0:"none",left:r.layoutShowLeftPanel?void 0:"none"},remoteState:r.layoutShowRemoteState?"default":"none"},config:[[jt.General.DisableAntialiasing,r.disableAntialiasing],[jt.General.PixelScale,r.pixelScale],[jt.General.PickScale,r.pickScale],[jt.General.Transparency,r.transparency],[jt.General.PreferWebGl1,r.preferWebgl1],[jt.General.AllowMajorPerformanceCaveat,r.allowMajorPerformanceCaveat],[jt.General.PowerPreference,r.powerPreference],[jt.General.ResolutionMode,r.resolutionMode],[jt.Viewport.ShowReset,r.viewportShowReset],[jt.Viewport.ShowScreenshotControls,r.viewportShowScreenshotControls],[jt.Viewport.ShowControls,r.viewportShowControls],[jt.Viewport.ShowExpand,r.viewportShowExpand],[jt.Viewport.ShowToggleFullscreen,r.viewportShowToggleFullscreen],[jt.Viewport.ShowSettings,r.viewportShowSettings],[jt.Viewport.ShowSelectionMode,r.viewportShowSelectionMode],[jt.Viewport.ShowAnimation,r.viewportShowAnimation],[jt.Viewport.ShowTrajectoryControls,r.viewportShowTrajectoryControls],[jt.State.DefaultServer,r.pluginStateServer],[jt.State.CurrentServer,r.pluginStateServer],[jt.VolumeStreaming.DefaultServer,r.volumeStreamingServer],[jt.VolumeStreaming.Enabled,!r.volumeStreamingDisabled],[jt.Download.DefaultPdbProvider,r.pdbProvider],[jt.Download.DefaultEmdbProvider,r.emdbProvider],[jt.Structure.DefaultRepresentationPreset,MP.id],[jt.Structure.SaccharideCompIdMapType,r.saccharideCompIdMapType],[Yg.DefaultServerType,r.rcsbAssemblySymmetryDefaultServerType],[Yg.DefaultServerUrl,r.rcsbAssemblySymmetryDefaultServerUrl],[Yg.ApplyColors,r.rcsbAssemblySymmetryApplyColors],...r.config??[]]}}var hse=class e{constructor(t){this._events=new du;this.subscribe=this._events.subscribe.bind(this._events);this.plugin=t}static async create(t,r={}){let n=eKe(r),o=typeof t=="string"?document.getElementById(t):t;if(!o)throw new Error(`Could not get element with id '${t}'`);let i=await w4e({target:o,spec:n,render:$ze,onBeforeUIRender:a=>{a.builders.structure.representation.registerPreset(MP)}});if(i.canvas3d?.setProps({illumination:{enabled:r.illumination??Ow.illumination}}),r.viewportBackgroundColor??Ow.viewportBackgroundColor){let a=QC(r.viewportBackgroundColor??Ow.viewportBackgroundColor);typeof a=="number"&&i.canvas3d?.setProps({renderer:{backgroundColor:a}})}return new e(i)}setRemoteSnapshot(t){return yne(this.plugin,t)}loadSnapshotFromUrl(t,r){return Qne(this.plugin,t,r)}loadStructureFromUrl(t,r="mmcif",n=!1,o){return Ene(this.plugin,t,r,n,o)}loadAllModelsOrAssemblyFromUrl(t,r="mmcif",n=!1,o){return bne(this.plugin,t,r,n,o)}loadStructureFromData(t,r,n){return xne(this.plugin,t,r,n)}loadPdb(t,r){return Sne(this.plugin,t,r)}loadPdbDev(t){return this.loadPdbIhm(t)}loadPdbIhm(t){return Dne(this.plugin,t)}loadEmdb(t,r){return vne(this.plugin,t,r)}loadAlphaFoldDb(t){return Fne(this.plugin,t)}loadModelArchive(t){return wne(this.plugin,t)}loadVolumeFromUrl({url:t,format:r,isBinary:n},o,i){return Rne(this.plugin,{url:t,format:r,isBinary:n},o,i)}loadFullResolutionEMDBMap(t,r){return Une(this.plugin,t,r)}loadTrajectory(t){return Lne(this.plugin,t)}loadMvsFromUrl(t,r,n){return Tne(this.plugin,t,r,n)}loadMvsData(t,r,n){return Pne(this.plugin,t,r,n)}loadFiles(t){return Gne(this.plugin,t)}loadUrl(t,r,n=!1){return Nne(this.plugin,t,r,n)}handleResize(){this.plugin.layout.events.updated.next(void 0)}structureInteractivity(t){return Cne(this.plugin,t)}dispose(){this._events.dispose(),this.plugin.dispose()}};return mKe(PYt);})();
|
|
/*! Bundled license information:
|
|
|
|
react/cjs/react.production.min.js:
|
|
(**
|
|
* @license React
|
|
* react.production.min.js
|
|
*
|
|
* Copyright (c) Facebook, Inc. and its affiliates.
|
|
*
|
|
* This source code is licensed under the MIT license found in the
|
|
* LICENSE file in the root directory of this source tree.
|
|
*)
|
|
|
|
react/cjs/react-jsx-runtime.production.min.js:
|
|
(**
|
|
* @license React
|
|
* react-jsx-runtime.production.min.js
|
|
*
|
|
* Copyright (c) Facebook, Inc. and its affiliates.
|
|
*
|
|
* This source code is licensed under the MIT license found in the
|
|
* LICENSE file in the root directory of this source tree.
|
|
*)
|
|
|
|
scheduler/cjs/scheduler.production.min.js:
|
|
(**
|
|
* @license React
|
|
* scheduler.production.min.js
|
|
*
|
|
* Copyright (c) Facebook, Inc. and its affiliates.
|
|
*
|
|
* This source code is licensed under the MIT license found in the
|
|
* LICENSE file in the root directory of this source tree.
|
|
*)
|
|
|
|
react-dom/cjs/react-dom.production.min.js:
|
|
(**
|
|
* @license React
|
|
* react-dom.production.min.js
|
|
*
|
|
* Copyright (c) Facebook, Inc. and its affiliates.
|
|
*
|
|
* This source code is licensed under the MIT license found in the
|
|
* LICENSE file in the root directory of this source tree.
|
|
*)
|
|
|
|
immutable/dist/immutable.es.js:
|
|
(**
|
|
* @license
|
|
* MIT License
|
|
*
|
|
* Copyright (c) 2014-present, Lee Byron and other contributors.
|
|
*
|
|
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
* of this software and associated documentation files (the "Software"), to deal
|
|
* in the Software without restriction, including without limitation the rights
|
|
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
* copies of the Software, and to permit persons to whom the Software is
|
|
* furnished to do so, subject to the following conditions:
|
|
*
|
|
* The above copyright notice and this permission notice shall be included in all
|
|
* copies or substantial portions of the Software.
|
|
*
|
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
* SOFTWARE.
|
|
*)
|
|
*/
|
|
//# sourceMappingURL=molstar.js.map
|